LoginSignup
1
1

できないの!? wsl2 上のUbuntuでsystemctlコマンド!?

Posted at

サマリ

WSL2上のUbuntuでsystemdはデフォルトでは使用不可。
WSLの最新バージョンへのアップデートと/etc/wsl.confの設定が必要

環境

  • Windows11
  • WSL 1.3.17
  • Ubuntu 22.04 LTS

今回困ったこと

最近、ちいかわのアニメでハチワレ役の子役が回を重ねるごとに演技力が成長していって、なんだか微笑ましくなりますね。
さて自分はWSL2上のUbuntuでdockerを使おうとしたら、起動しないという状況に陥りました。全然微笑ましくないですね。
エラー文はこんな具合でした。

 $ sudo systemctl start docker
 System has not been booted with systemd as init system (PID 1). Can't operate.
 Failed to connect to bus: Host is down

なんか「systemdが動いてねえんだよ」と怒られてますね。
Ubuntuいじってたら、systemctlというのは何気なく日頃使っているものなので、いつもならできることが急にできなくなって「ウワーッ」ってなりました。
だって普通、UbuntuのsystemdってPIDの一番上に来るものじゃないんですかね。
いつも傍にいてくれた存在はいつだっていなくなってしまってから、その大切さに気づくものです。

なんでや

泣き言を言っても始まりませんので原因調査です。
原因調査といっても、WSL上のLinuxディストリビューションがsystemdに対応していなかった過去があることがしっかり報道されていました。

WSLにおいて、過去にはsystemdに対応してなかったとのことですが、2022年に対応するようになりました、とのことです。

が、systemdをPID1に持ってくるためにはひと手間必要ということには変わりありません。
というわけで、以下がそのひと手間の手順となります。

してみよう……「対応」!

さくさくやっていきましょう。
/etc/wsl.confというファイルを作成しまして、下記のように記述し、オプトイン設定を行います。

 $ sudo vim /etc/wsl.conf
 
 [boot]
 systemd=true

次にWSLを再起動させます。
PowerShellからwslをシャットダウンさせます。

 wsl.exe --shutdown

その後、通常通りWSL2上のUbuntuを起動。

が、駄目……!

これでもう一度systemctlでDockerを起動しようとしましたが、先ほどと同じエラー文が出力されて、立ち上がらず。
もしやと思ってWSLのバージョンを確認。

 wsl --version
 WSL バージョン: 1.3.17

2024年2月時点で最新バージョンは2.1.3ですので、
WSL自体のバージョンが古かったことに原因がありましたね

WSL2を最新バージョンにアップデート

というわけで、WSLそのものを最新バージョンにアップデートします。
職場のセキュリティポリシーでMSstoreをブロックされているので、回避してPowerShellからアップデートを実行します。

というわけでPowerShellを管理者権限で起動して、下記のコマンドを実行。
PowerShellを管理者権限で起動するの、結構忘れがちになりますよね。

 wsl --update --web-download

確認してみましょう。

 # top
 <中略> 
    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
       1 root      20   0  165832  11352   8376 S   0.0   0.1   0:01.20 systemd

これで、systemdがPIDになっていることを確認、dockerの起動もできました。

参照

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1