2022/12/15(木)WSL2へのUbuntu 20.04セットアップメモ

更新日:
投稿日:

Ubuntu22.04 LTSのターミナルのレンダリングが異常に重いのでバージョンを落として運用するためのメモ
Node.jsの開発環境だけ入れる

環境

環境 Version
Windows 11 Pro Build 22621.3155
Ubuntu 20.04.6 LTS
zsh 5.8 (x86_64-ubuntu-linux-gnu)
MariaDB Ver 15.1 Distrib 10.3.38-MariaDB
Docker 20.10.17, build 100c701
Git 2.42.0

WSL2の構成

  1. 管理者権限のPowerShellで以下を流す
    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
    
  2. OS再起動
  3. Linuxカーネル更新プログラム パッケージをインストールする
  4. Ubuntuを入れる

Ubuntu側のセットアップ

適当な開発環境をサクッと。

~/.ssh/には予め鍵を入れておき、パーミッション700で作っておく。

# systemdの有効化
cat <<EOF | sudo tee /etc/wsl.conf
[boot]
command=service docker start; service nginx start; service mysql start;

[interop]
appendWindowsPath = false

[user]
default=ここにユーザー名
EOF

sudo apt update -y
sudo apt upgrade -y
sudo apt install -y \
    zsh \
    ssh \
    net-tools \
    traceroute \
    unzip \
    mariadb-server \
    nginx \
    git \
    keychain

# chsh
sudo apt -y install unzip traceroute
chsh -s $(which zsh)

# Docker
sudo apt remove docker docker-engine docker.io containerd runc
sudo apt update
# 依存関係のインストール
sudo apt install -y \
   apt-transport-https \
   ca-certificates \
   curl \
   gnupg \
   lsb-release
# Docker公式のGPG鍵を追加
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# リポジトリをパッケージマネージャーに登録
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
# docker本体のインストール
sudo apt install -y dockerdocker-ce docker-ce-cli containerd.io docker-compose-plugin
# sudo緩和
sudo usermod -aG docker $USER

# WSLをリブート

# dot file設定
git clone https://github.com/Lycolia/my-dotfiles.git
rm -Rf my-dotfiles/.git/
mv my-dotfiles/.* .
rm -Rf my-dotfiles/

# Node.js @ nvm
export NVM_DIR="$HOME/.nvm" && (
  git clone https://github.com/nvm-sh/nvm.git "$NVM_DIR"
  cd "$NVM_DIR"
  git checkout `git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1)`
) && \. "$NVM_DIR/nvm.sh"
nvm install --lts

# Keychain設定
cat <<'EOF' | tee -a ~/.zshrc
Keychain
keychain -q --nogui $HOME/.ssh/id_ed25519
source $HOME/.keychain/hostname-sh
EOF

トラブルシューティング

上記手順に書いてないことをすると起きるが、一応付記しておく

<3>WSL (639) ERROR: CreateProcessEntryCommon:345: getpwnam(USER_NAME) failed 0というエラーが出る

wsl.conf[user]セクションでdefault=USER_NAMEが存在しないユーザーを指定していると出る

Dockerやnginxのサービスが起動しない

systemdが有効になっていると起動しないので/etc/wsl.confからsystemd=trueを消す

keychainがError: Problem adding; giving upという

パーミッションを治す

chmod -R 700 .ssh

2022/11/21(月)WSL2のUbuntuにGrafanaを立てる

フルスクラッチで組むやつ

確認環境

Env Ver
Ubuntu 20.04.4 LTS
nginx 1.18.0 (Ubuntu)
MariaDB 15.1 Distrib 10.3.34-MariaDB
grafana-server Version 9.2.5 (commit: 042e4d216b, branch: HEAD)

前提

  • Windows側からhttp://grafana.test/としてアクセスする
  • DBにはMariaDBを使用

hostsの編集

Windows側のhostsに以下を追記

127.0.0.1 grafana.test

各種環境のインストール

sudo apt update
sudo apt install -y nginx mariadb-server

sudo apt-get install -y apt-transport-https software-properties-common wget
sudo wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install grafana

nginxの設定

cat <<'EOF' | sudo tee /etc/nginx/conf.d/granafa.conf
map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

upstream grafana {
  server localhost:4000;
}

server {
  listen       80;
  server_name  grafana.test;
  access_log   /var/log/nginx/grafana.access.log;
  error_log    /var/log/nginx/grafana.error.log;


  location / {
    proxy_set_header Host $http_host;
    proxy_pass  http://grafana;
  }

  location /api/live/ {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_set_header Host $http_host;
    proxy_pass http://grafana;
  }
}
EOF

sudo service nginx start

MariaDBの設定

ユーザー作成

idpwの部分は適当に変える

sudo service mysql start
sudo mysql
CREATE USER 'id'@'%' IDENTIFIED BY 'pw';
GRANT ALL PRIVILEGES ON *.* TO 'id'@'%' WITH GRANT OPTION;
quit

外部接続テスト

適当なRDBクライアントから繋げればOK

grafanaの設定

  1. sudo nano /etc/grafana/grafana.iniで適当にいじる
# The http port  to use
http_port = 4000

# The public facing domain name used to access grafana from a browser
domain = grafana.test
  1. sudo service grafana-server start
  2. http://grafana.test/ へアクセス
    1. IDPW共にadminが初期

DBの読み込み

  1. MariaDBに適当なDBとテーブルを作る
  2. Grafanaにログインする
  3. サイドバーからConfiguration -> Data sources
  4. DBの情報を入れて接続
  5. 後はよしなにやる

2022/02/28(月)MSYS2のセットアップメモ

更新日:
投稿日:

確認環境

msys2-x86_64-20260322

セットアップ

MSYS2から落としてインストールする。

pacman -Syuu

入れとくと便利なものたち

pacman

2023以前の古いMSYS2ではpacman -sS パッケージ名を毎回入れないとインストールできないケースがあるかもしれない。

pacman -S --noconfirm unzip
pacman -S --noconfirm diffutils
pacman -S --noconfirm openssh
pacman -S --noconfirm patch
pacman -S --noconfirm perl
pacman -S --noconfirm zsh
pacman -S --noconfirm git
pacman -Sy --noconfirm openbsd-netcat
# prompt用に退避させる
mv /usr/bin/git /usr/bin/msys2_git

バイナリ追加

dotfileの設定

https://github.com/Lycolia/my-dotfiles

呼び出しを簡略化する

毎回こんな感じで呼ぶのは面倒なので簡略化する。

C:/env/msys64/msys2_shell.cmd -defterm -here -use-full-path -no-start -msys -shell zsh

C:/env/msys64/run_zsh.cmdのようなファイルを作り、以下の内容を書くことでC:/env/msys64/run_zsh.cmd '/c/path/to/hoge.sh'のようにしてシェルスクリプトを実行できるようになる。

@echo off
set MSYSTEM=MSYS
set MSYS2_PATH_TYPE=inherit
set CHERE_INVOKING=1
C:\env\msys64\usr\bin\zsh.exe -l %*

外部連携

呼び出しを簡略化している前提

VSCode連携

{
  "terminal.integrated.defaultProfile.windows": "MSYS2",
  "terminal.integrated.profiles.windows": {
    "MSYS2": {
      "overrideName": true,
      "path": ["C:\\env\\msys64\\run_zsh.cmd"]
    }
  }
}

Windows Terminal連携

{
  "defaultProfile": "{17da3cac-b318-431e-8a3e-7fcdefe6d114}",
  "profiles": {
    "defaults": {},
    "list": [
      {
        "commandline": "C:/env/msys64/run_zsh.cmd",
        "font": {
          "face": "Consolas",
          "size": 11
        },
        "guid": "{17da3cac-b318-431e-8a3e-7fcdefe6d114}",
        "icon": "C:/env/msys64/mingw64.ico",
        "name": "MINGW64 / MSYS2",
        "colorScheme": "VSCode"
      }
    ]
  },
  "schemes": [
    {
      "name": "VSCode",
      "background": "#1e1e1e",
      "foreground": "#d4d4d4",
      "black": "#000000",
      "blue": "#2472c8",
      "brightBlack": "#666666",
      "brightBlue": "#3b8eea",
      "brightCyan": "#29b8db",
      "brightGreen": "#23d18b",
      "brightPurple": "#d670d6",
      "brightRed": "#f14c4c",
      "brightWhite": "#e5e5e5",
      "brightYellow": "#f5f543",
      "cyan": "#11a8cd",
      "green": "#0dbc79",
      "purple": "#bc3fbc",
      "red": "#cd3131",
      "white": "#e5e5e5",
      "yellow": "#e5e510"
    }
  ]
}

msys2_shell.cmdのCLI Optionsの意味合い

msys2_shell.cmdの中身を読んで机上で書いているだけなので実際そう動くのかの検証はしていない。

起動パラメーターについては、:checkparamsラベルの中のループして合致するものがあれば環境変数を立て、既知の環境変数であればmsys2_shiftCounterという変数をインクリメントして、MSYS2用のパラメーターと、ユーザーパラーメーターの教会の切り分けをする実装となっている。これはつまり後続処理でmsys2_shiftCounter個分のパラメーターを読み飛ばし、それ以降のパラメーターを処理するためにある。

-mingw32 | -mingw64 | -ucrt64 | -clang64 | -msys[2]

それぞれで実行環境が変わるが、MSYS2用アプリケーションの開発環境用設定のため、-msysで基本的に問題ない。

内部的には環境変数MSYSTEMに対して、対応する値を設定している。-msys-msys2は等価。

-defterm | -mintty | -conemu

開くターミナルの指定。

  • -defterm
    • 標準ターミナルで開く
    • Windows TerminalやVSCodeで開く場合はこれを指定する
  • -mintty
    • Minttyが起動する
  • -conemu
    • Conemuが起動する

内部的にはシェルを直に蹴るか、minttyやconemuにシェルの起動パラメーターを渡しているかの違いがある。

-here

現在の作業フォルダをカレントディレクトリとして開く。

内部的には環境変数CHERE_INVOKINGに対しenabled_from_argumentsを設定している。

MSYS2公式ではCHERE_INVOKINGには1を設定するそうだが、手元で見た限りenabled_from_argumentsを設定しても動作は変わらなかった。恐らく単純に変数値が設定されているか、そうでないかで処理が分かれていると思われる。

参考までにCHERE_INVOKINGを未設定にするとMSYS2のホーム(~)で起動した。

-where DIRECTORY

指定ディレクトリをカレントディレクトリとして開く。

内部的にはcmdでシェルを起動する前にcdしてるだけ。

-[use-]full-path

Windowsのパスを継承する。

内部的には環境変数MSYS2_PATH_TYPEinheritを設定している。

-no-start

新窓で開かない。

内部的には指定した場合はシェルが直に起動し、指定しない場合startコマンドでシェルが起動するようになっている。

-shell SHELL

ログインシェルを指定する。

例えば-shell zshならzshがログインシェルになる。未指定の場合、bashがログインシェルになる。これはmsys2_shell.cmdでデフォルト値がbashになっているため。

参考までにmsys2_shell.cmdset "LOGINSHELL=bash"を書き換えるとアップデート時に上書きされて消えるので、しないほうがいい。

-help | --help | -? | /?

ヘルプの表示。

内部的にはprinthelpラベルに飛んでいる。

トラブルシューティング

zsh-newuser-install: startup files exist, aborting. Use the argument -f if you want to force the function to be run again.と出る

zsh-newuser-install: startup files exist, aborting.

Use the argument -f if you want to force the function to be run again.>

と出る場合の対処方法。

msys64/usr/share/zsh/scripts/newuserというファイルを消せば出なくなる。

2021/04/01(木)Ubuntu 20.04にWindows 10からRDP接続する

更新日:
投稿日:

手順

  1. xrdpが入っていなければxrdpをインストール
    1. Desktop版なら最初から入ってた気もする
  2. 3389ポートを開ける
    1. sudo ufw allow 3389
  3. オートログインを殺す
    1. sudo sed -ie 's/AutomaticLoginEnable=true/AutomaticLoginEnable=false/' /etc/gdm3/custom.conf
  4. あとは再起動してWindowsのリモートデスクトップから繋げて画面が映ればOK
    1. sudo reboot

トラブルシューティング

接続したけど画面が真っ暗

pkill gnome-sessionでログインセッションを殺す

左にあるDockが表示されない・設定に外観がない・その他物理接続時とデスクトップの表示が異なる

sudo nano /etc/xrdp/startwm.shして以下の内容を追記する

export DESKTOP_SESSION=ubuntu
export GNOME_SHELL_SESSION_MODE=ubuntu
export XDG_CURRENT_DESKTOP=ubuntu:GNOME

2020/08/21(金)Raspberry Pi 4のセットアップメモ

更新日:
投稿日:

WindowsからのRDP接続を前提として主にSSDブート、リモート環境構築、Let's Encrypt、LAMP、Nodeの環境構築を行う

🌏 環境

Windows側の環境は省略

環境 バージョン
Raspbian 2020-05-27-raspios-buster-arm64
acme.sh 2.8.7
PHP 7.3.19-1
MariaDB 10.3.23
phpMyAdmin 5.0.2
Node.js 10.21.0
npm 5.8.0
Yarn 1.22.4

📜 Raspberry Pi 4をUSB SSDからブートする

まずはここから

📞 リモート環境の構築

本体操作によるセットアップ

Headlessでできるならよしなにしてもいい気はする

  1. ラズパイにモニタ、キーボード、電源の通ったUSB-Cケーブルを接続
  2. 数分待つとセットアップウィザードが出てくるので適当に進める
    1. この途中でWiFiルーターに繋がるように設定しておく
  3. セットアップウィザードが終わったらWinKeyでメニューを出し設定> Raspberry Piの設定でSSHとVNCを有効
  4. シャットダウンする
  5. 電源USB以外を全部抜く

パッケージ情報の更新

  • sudo apt-get update

XRDPのインストール

Windows10からのRDP接続で現状操作不能だが一応書いておく

  1. sudo apt-get install xrdp
  2. Windows 10のリモートデスクトップ接続から接続確認

SSHD設定

待受ポートの変更と認証方式の変更

待受ポートの変更と外部接続
  1. sudo nano /etc/ssh/sshd_config
  2. Port 22を適当なポートに変更
認証方式の変更
  1. RLoginの機能で認証キーを生成
  2. sudo nano /etc/ssh/sshd_configで以下の設定に変更
   PubkeyAuthentication yes
   AuthorizedKeysFile      .ssh/authorized_keys
   PasswordAuthentication no
   PermitEmptyPasswords no
  1. ~/.ssh/authorized_keysを作る
mkdir ~/.ssh/
nano ~/.ssh/authorized_keys
  1. 公開鍵をコピーして~/.ssh/authorized_keysの一行目に貼り付ける
  2. sudo /etc/init.d/ssh restartでSSHDを再起動
  3. RLoginから再接続できたらOK
AndroidからSSH接続
  1. RLoginから秘密鍵を吐く
  2. JuiceSSHで秘密鍵を読む
  3. 終わり

Uncomplicated Firewallのインストールと設定

  1. sudo apt install ufw

  2. systemctl start ufw

  3. sudo ufw enableでFirewallを有効化

  4. SSHの穴をあける

    1. sudo ufw allow SSHのポート番号
  5. VNSの穴をあける

    1. WindowsRDPからラズパイに接続

    2. 蹴られるのでcat /var/log/ufw.logでログを見る

    3. 蹴られているDPT3389だったのでsudo ufw allow 3389

      1. help.ubuntu.comによるとSPTがSource Port、DPTがDestination Portということらしい
  6. sudo ufw status numberedで設定内容を確認

  7. SSHとRDPの接続確認

🔐 Let's Encrypt! DDNS Challenge

💡 LAMP環境構築

MariaDB, Apache, PHPのインストール

この環境でのApacheはphpMyAdminを動かすためだけに使用(外部公開しない)

  • sudo apt install -y mariadb-server apache2 php php-mysql libapache2-mod-php

MariaDBの設定

外部接続しないケース
  1. sudo mysql_secure_installation
  2. sudo mysql
  3. CREATE USER 'id'@'localhost' IDENTIFIED BY 'pw';
  4. GRANT ALL PRIVILEGES ON *.* TO 'id'@'localhost' WITH GRANT OPTION;
外部接続するケース
  1. sudo mysql_secure_installation

  2. sudo mysql

  3. CREATE USER 'id'@'%' IDENTIFIED BY 'pw';

  4. GRANT ALL PRIVILEGES ON *.* TO 'id'@'%' WITH GRANT OPTION;

  5. quit

  6. sudo nano /etc/mysql/my.cnfで最終行に以下を追加

[mysqld]
skip-networking=0
skip-bind-address

Apacheの設定

  1. sudo nano /etc/apache2/apache2.confで既存の設定をコメントアウトして適当にルートを追加
<Directory /home/pi/Public/>
  Options Indexes FollowSymLinks
  AllowOverride None
  Require all granted
</Directory>
  1. sudo nano /etc/apache2/sites-available/000-default.confも同様に変更
Apacheを動かすユーザーの変更
  1. sudo nano /etc/apache2/envvars
  2. export APACHE_RUN_USER=www-dataexport APACHE_RUN_USER=pi に変える
  3. sudo /etc/init.d/apache2 reloadでここまで反映

phpMyAdminのインストール

何故かaptでインストールできなくなってるので手動インストール。Windowsマシンからブラウザを利用して設定する

  1. https://www.phpmyadmin.net/ からphpMyAdminをダウンロード
  2. Apacheの公開ディレクトリに置く
  3. sudo ufw allow 80
  4. sudo ufw reload
  5. http://192.168.xxx.xxx/phpmyadmin/setupへアクセス
  6. 適当に設定し、ダウンロードボタンを押すと設定ファイルが落ちてくるのでphpmyadminのルートに置く
  7. http://192.168.xxx.xxx/phpmyadmin/setupへアクセスしエラーになることを確認
  8. http://192.168.xxx.xxx/phpmyadminへアクセスし、MariaDBのIDPWでログインできることを確認
    1. この環境では80番ポートは外部公開してないので問題ないが、外部公開する場合は.htaccessをおいてローカル以外のアクセスを蹴ると良い

📈 Node.jsのインストール

  1. sudo apt install -y nodejs npm
  2. sudo npm i -g n yarn

🎈 おまけ

  • Gitのインストール
    • sudo apt install -y gitで2.20.1が入ることを確認(微妙に古い)
  • composerのインストール
    • sudo apt install -y composerで1.8.4が入ることを確認(かなり古い)