Distrodを使ってWSL2でsystemdを動かす
Distrod become a systemd
関連記事:
WSL2(Ubuntu 20.04)上でSnapdを動かす
WSLにDocker代替のPodmanを入れてみる
------------------- ↓ 前書はここから ↓-------------------
前回Podmanをインストールした。
記事にはしなかったがsystemdがないことで躓いた点がいくつもあった。
なので、今回はsystemdを入れる方法をちょっと調べたのだが、
Distrod がいい感じっぽいので使ってみることにする。
(他にもarkane-systems/genieを使う手があるっぽいが面倒そうなのでやめた)
以前のsnapd問題も解決するかもな。
起動しなくなった時の対応法
まずは動かなくなった時のことを考えて、
復旧の仕方から記載する
Distrodを既存のWSLに導入することは可能なのだが、
以下のようなエラーが出てwslが起動なくなることがあるようだ。
wsl
[Distrod][ERROR] Failed to spawn the command.
Caused by:
No such file or directory (os error 2)
userをrootにして、
強引にbashを起動して無効化処理を加える
コマンド後に出るエラーは無視でいい
wsl --user root -e /bin/bash
sudo /opt/distrod/bin/distrod disable
[Distrod] Distrod has been disabled. Now systemd will not start automatically.
[Distrod][WARN] whoami.exe had an error: <3>init: (18) ERROR: UtilConnectUnix:501: connect failed 111
<3>init: (19) ERROR: UtilConnectUnix:501: connect failed 111
[Distrod][WARN] Failed to disable the autostart on Windows boot.: Powershell failed. exit status: 255
コマンド実行後再度WSLを起動してみるとログインできている・・・はず。
実環境でmanjaroを使っているのだが、
導入したら上記のエラーでこけてかなり焦った。
閑話休題
さて、気を取り直してインストールしていこう。
既存のWSLよりも新規の方がいいかもしれない。
(やり直しが効くし)
ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪
------------------- ↓ 本題はここから ↓-------------------
Distrodを使ってUbuntuを新規にインストール
といってもウィザードがしっかりしていて、
コマンドを選択するだけでインストールは終わる。
WSLゲストOSのインストール
以下より最新版をダウンロードする
直リンクも貼っておく
distrod_wsl_launcher-x86_64.zip
zipファイルを展開して適当な場所へ。
powershell上で実行する
distrod_wsl_launcher.exe
(・∀・)カッケー
奥に文字が進んでいきそうな感じがある。
linuxcontainers.orgよりOSを選択。
好みのものでいいがとりあえずデフォルトのubuntuを選択
バージョンを選択。
('◇')コードネームはわかりにくい
Focal=20.04 LTSを選択
ちなみにインストール先は %LocalAppData%\Distrod
あと、ユーザーとパスワードを設定して完了。
systemdが起動しているか確認してみる。
pgrep systemd -a
1 /sbin/init systemd.setenv=WSLENV=WT_SESSION::WT_PROFILE_ID systemd.setenv=WSL_INTEROP=/run/WSL/27_interop systemd.setenv=WSL_DISTRO_NAME=Distrod --unit=multi-user.target
36 /lib/systemd/systemd-journald
53 /lib/systemd/systemd-udevd
82 /lib/systemd/systemd-logind
(・∀・) やったか!
pid1でsystemdが起動したようだ。
WSLを再起動してもちゃんとsystemdが起動している。
ただ、永続的な設定にはなっていないようで、
別途以下のコマンドで永続実行するようにしておく。
sudo /opt/distrod/bin/distrod enable
Distrodをインストール
既存のUbuntuに続いて現状稼働しているOSがあるとして、
systemdを稼働させる
既存OSを用意
powershell上でwslのゲストOSをインストールする。
今回はubuntuを選択。
wsl --install ubuntu
ユーザーやパスワードを設定。
aptを最新にしておく。
sudo apt update && sudo apt upgrade -y
systemdを起動
続いてゲストOS内にDistrodを追加する。
インストールシェルがあるので、
root権限で実行する。
curl -L -O "https://raw.githubusercontent.com/nullpo-head/wsl-distrod/main/install.sh"
chmod +x install.sh
sudo ./install.sh install
/opt/distrod配下に各種コマンドがインストールされるので
コマンドを使ってsystemdを有効化する
sudo /opt/distrod/bin/distrod enable
一端wslを再起動する
exit
wsl -t ubuntu
wsl -d ubuntu
pgrep system -a
1 /sbin/init systemd.setenv=WSL_DISTRO_NAME=Ubuntu systemd.setenv=WSL_INTEROP=/run/WSL/8_interop systemd.setenv=WSLENV=WT_SESSION::WT_PROFILE_ID --unit=multi-user.target
61 /lib/systemd/systemd-journald
79 /lib/systemd/systemd-udevd
131 /lib/systemd/systemd-logind
(^_-)-☆ 動いたからヨシ!
------------------- ↓ 後書はここから ↓-------------------
ってかlinuxcontainers.orgからWSLにOSをぶち込めるの便利だなぁ
ここだけコマンド切り出してくれないかしら。
ディストリビューション名称を指定する
WSLのOSインストールでdistrod_wsL_launcherコマンドを使ったが、
デフォルトではインストールのディストリビューション名はDistrodとなってしまう。
これは不便なので以下のように名称を指定するほうがいい。
distrod_wsl_launcher.exe -d Arch
snapdを動かす
zennに移行してからすぐぐらいにsnapdを無理やり動かす方法を記事にした。
ただ、手法が強引だったので実運用は微妙だなと思っていた。
今回はsystemdが動くのでsnapdも動くはずだ。
ということでsnapでインストールしてみる。
sudo apt install -y snapd
sudo snap install chromium
2021-12-28T22:21:49+09:00 INFO Waiting for automatic snapd restart...
chromium 96.0.4664.110 from Canonical✓ installed
sudo snap install microk8s --classic
microk8s (1.22/stable) v1.22.4 from Canonical✓ installed
(* ̄0 ̄) オー!!
snapd動いてるな。
--start-on-windows-bootをつけてない理由
さて、マニュアルをご覧になった方は疑問に思ったかもしれない。
マニュアル記載の起動コマンドは、
sudo /opt/distrod/bin/distrod enable --start-on-windows-boot
windows起動と同時にsystemdを動かすオプションのようだが、
個人的には余計なのでつけていない。
(まぁwindows11はサポートしてないみたいだけど)
WSLの利用ではLinux起動もdocker起動も全部手動にしている。
限られたリソースでやりくりしてるからだ。
(そこまで大げさではないけど)
ゲームしてるときは別にwslもdockerもいらないけど、
上記をつけると裏で動いていることになる。
まぁ、お好みで。
Discussion