PCをMacからWindowsに買い替えてWSLにてローカル環境構築している際の備忘録。
LAMP環境を作っている際にこんなエラーが・・・
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
systemctl
が使えない・・・だと?
ということで、調べていくと以前は使うにはいろいろな手順を踏む必要があったようですが、今は簡単に導入できるみたいなのでやってみます。
必要条件確認 & WSLのアップデート
公式ブログの情報によると
his change is only available in the Microsoft Store version of WSL version 0.67.6 and higher. You can check your version number by running wsl --version.
とのことで、WSLバージョンは0.67.6以上で使えるみたいです。
早速Windows PowerShell
を起動してバージョンを確認してみます。
バージョンの確認方法は、ブログにあるようにwsl --version
で確認できるようです。
私の環境で出力された結果が以下の通り(2023/1時点)
> wsl --version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47
MSRDC バージョン: 1.2.3575
Direct3D バージョン: 1.606.4
DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windowsバージョン: 10.0.22621.1105
このWSLバージョンが既定の0.67.6以上なので問題なさそうです。
公式ブログの記事ではwsl --update
で更新確認もできるとあったのでついでに試してみます。
> wsl --update
更新プログラムを確認しています。
Linux 用 Windows サブシステムの最新バージョンは既にインストールされています。
とりあえず最新みたいです。
このまま続けます。
設定ファイルを設置
公式ブログによると、
Add these lines to the /etc/wsl.conf (note you will need to run your editor with sudo privileges, e.g: sudo nano /etc/wsl.conf):
[boot]
systemd=true
とのことなので、従って追加していきます。
今度はWSLのターミナル(WSL環境のUbuntu)を開いて作業をしていきます。
wsl.conf
というファイルを/etc/wsl.conf
に設置するみたいです。
この時注意なのが、wsl環境上の/
パスはコマンドプロンプトやPowerShellの/
とは場所が違うので注意です。
もしもフォルダなどで開く際には\\wsl$/ディストリビューション名/etc
に該当しますのでこちらを検索してみてください。
早速ファイルを作成して書き込みます。
ubuntu > sudo vim /etc/wsl.conf
私の場合はvim
を使用していますが、ご自身の環境に合わせてこちらを書き換えてください。
これでwsl.confを編集し、下記を追加します。
[boot]
systemd=true
書き込んだら保存して最後のステップです
WSLの再起動
wsl.conf
に書き込んだらWSLを再起動します。
またPowerShellを起動して次のコマンドを実行します。
wsl --shutdown
これでWSLが再起動されるので、再度WSL環境に入ってみます。
再度WSLのターミナル(WSL環境のUbuntu)を起動してください。
起動後systemctl
コマンドを実行します。
ubuntu > systemctl
UNIT
sys-devices-LNXSYSTM:00-LNXSYBUS:00-ACPI0004:00-VMBUS:00-1c77dc32\x2dda4b\x2d4dda\x2db0ba\x2d47a2b946ec6e...
sys-devices-LNXSYSTM:00-LNXSYBUS:00-ACPI0004:00-VMBUS:00-e249ac6e\x2d2779\x2d4bc0\x2d8373\x2dcb9eb2559fb0...
sys-devices-LNXSYSTM:00-LNXSYBUS:00-ACPI0004:00-VMBUS:00-fd1d2cbd\x2dce7c\x2d535c\x2d966b\x2deb5f811c95f0...
sys-devices-LNXSYSTM:00-LNXSYBUS:00-ACPI0004:00-VMBUS:00-fd1d2cbd\x2dce7c\x2d535c\x2d966b\x2deb5f811c95f0...
sys-devices-LNXSYSTM:00-LNXSYBUS:00-ACPI0004:00-VMBUS:00-fd1d2cbd\x2dce7c\x2d535c\x2d966b\x2deb5f811c95f0...
sys-devices-platform-serial8250-tty-ttyS0.device ...
sys-devices-platform-serial8250-tty-ttyS1.device ...
sys-devices-platform-serial8250-tty-ttyS2.device ...
....
実行したら上のような結果が表示されたら完了です。
これでsystemctl
が使用できます!
あとがき
PowerShell
で操作したりとMacとは違う部分があり迷いましたが、そこさえ迷わなければ何とかなります。
今後LAMP環境構築についても別記事でメモを残しておこうと思います。
以上!
参考にした記事
https://crieit.net/posts/systemd-supported-in-wsl
https://devblogs.microsoft.com/commandline/systemd-support-is-now-available-in-wsl/