[WSL]wsl環境でsystemdをつかおう
wsl上ではsystemd(systemctlコマンド)が使えない(かった)
systemd(systemctlコマンド)はLinux上でサービスを管理(起動したり、停止したり、動作状況をしらべたり)するのに必須のツールです。(以前はinit.dで管理されていましたが、RHEL7あたりからこちらに移行してきました)(詳しく知りたかったらここよんで)
従前よりWindows上で動作できるwslではsystemdが使えないことは周知の事実でしたがっ、原因としてはLinuxの仕様上systemdプロセスがPIDが1でないと動いてくれなかったためで、実行しても下記のようなエラーになっていました(下図こんなかんじ)
「System has not been booted with systemd as init system (PID 1). Can't operate.」でWEB検索すると大量の検索記事にでくわすとおもいます。
まあその記事すべてが現時点(2023年2月)の時点でレガシーになってしまっていましたがっ
でも2022年9月に使えるようになりました
くわしくはこちらの記事参照です。
普段天然のアユみたいな欧米人が記事タイトルで「!」つかうくらいなのであっちのひとも苦労していたのでしょう。
(だったらさいしょからやっとけよ)
まあMSって「とりあえず実装」「(あとで)謎の修正60バイト」「エキセントリック商人」「アンビリーバブル買収」(ネタがふるい)なのでしかたないですね。
お仕事でつかっているパブリッククラウドでそれやられ(て)るので(ほんとうに)業腹なんですが。
ええ、ほんとうに。
本題
で、どうすればいいのか、ですが。
一定のバージョン以上のwsl上にetc直下に設定ファイルを置いて再起動すればOKです。
条件:WSLのバージョンが0.67.6以上
バージョンのかくにん方法:PSかCPで wsl --version (結果例下記)
ファイル作成コマンドはwsl環境に接続して下記コマンド実行
echo -e [boot]\\nsystemd=true | sudo tee /etc/wsl.conf
実行するとこんなかんじ(sudoわすれずに)
できてるの確認したらPSかCPで wsl --shutdown 実行して停止してから、もういちどwslたちあげてみましょう
(落とすとき問答無用で落ちるしメッセージなにもでないのこわい)(まあサブシステムだからいいか)
Windowsターミナルほんとに楽。
ちょっと見えてる左側のPSタブで前述のコマンド実行したあとでタブ分割したんだけど
左側がシャットダウン前に接続してたターミナル(見覚えあるでしょ?)、タブ分割した時点でエラー1吐いておちてる。
で、シャットダウン後に起こした右側は設定の効いたあたらしいプロセスだからsystemctlコマンド効いてる。
と、いうわけで今後は余計なソフトいれて強制的にsystemdのプロセス番号変更しなくてよくなりました。
環境立てるの楽になりましたね。
Windows11にして便利になったもの改悪されたものそれぞれですが、エンジニアは常にアップデートしていくことが求められますので、みなさんも懲りずに試行錯誤してナレッジを蓄積して価値をたかめていきましょう。
ひさびさにまじめなことをいいつつこの記事はここまで。
んざまた。