スポンサーリンク

WSLでsystemdがサポート!

遂にWSLでsystemdをサポート!

Systemd support is now available in WSL!
Systemd support is now available in WSL! The Windows Subsystem for Linux (WSL) can now run systemd inside of your WSL di...

以下雑訳。

Windows Subsystem for Linux (WSL) は、WSL ディストロの内部で systemd を実行できるようになり、Windows マシンで Linux ワークフローをより多く実行できるようになりました。

本記事では、その内容をご紹介します。

  • systemdとは何か、systemdで何ができるのか?
  • WSLではどのようにこの変更が可能なのでしょうか?
  • あなたのマシンにsystemdを入れるにはどうしたらいいですか?

その概要は、以下のビデオをご覧ください。

ARVE

systemdとは何か、systemdで何ができるのか?

From systemd.io :

Systemd は、Linux システムの基本的なビルディングブロックのスイートです。PID 1として動作し、システムの残りの部分を起動するシステムおよびサービス・マネージャを提供します。

Ubuntu や Debian など、多くの人気のあるディストリビューションはデフォルトで systemd を走らせています。この変更により、WSL はベアメタルマシン上でお気に入りの Linux ディストリビューションを使うのとさらに近くなり、systemd のサポートに依存するソフトウェアを使えるようになることを意味します。

systemd に依存する Linux アプリケーションの例をいくつか挙げます。

  • snap
    • Ubuntu内部にソフトウェアをインストールし、管理することができる便利なバイナリ
    • Try running: snap install spotify or snap install postman
  • microk8s
  • systemctl
    • systemd の一部であり、Linux マシンのサービスと対話するためのツール
    • systemctl list-units --type=service を使って、利用可能なサービスとその状態を確認します。

WSLではどのようにこの変更が可能なのでしょうか?

systemd をサポートするためには、WSL のアーキテクチャを変更する必要がありました。systemd は PID 1 を要求するので、Linux ディストリビューション内で起動する WSL init プロセスは systemd の子プロセスになります。WSL initプロセスはLinuxとWindowsのコンポーネント間の通信のためのインフラを提供する責任があるので、この階層を変更することは、WSL initプロセスで作られたいくつかの仮定を考え直す必要がありました。クリーンなシャットダウン(シャットダウンは systemd によって制御されます)と WSLg との互換性を確保するために、追加の修正をしなければなりませんでした。WSL インスタンスは以前と同じ方法で生存し続けますが、これについてはこちらを参照してください。

これが起動時の WSL の動作を変えることを考えると、ユーザーの既存の WSL ディストリビューションにこれを適用することには注意を払いたいと思いました。そのため、現在は特定の WSL ディストリビューションで systemd を有効にするためにオプトインする必要がありますが、私たちはフィードバックを監視して、将来的にこの動作をデフォルトにすることを検討します。

マシンにsystemdを入れるにはどうしたらいいですか?

始めるには、この2つが必要です。WSLが正しいバージョンで動作していることを確認する:バージョン0.67.6以上 – WSLディストロの設定にあるsystemdフラグを設定する

正しいWSLバージョンであることを確認する

この変更は、Microsoft Store 版の WSL バージョン 0.67.6 以降でのみ利用可能です。バージョン番号は、wsl --versionを実行して確認することができます。このコマンドが失敗した場合、Windows版WSLが動作しているため、Store版にアップグレードする必要があります。

このバージョンのWSLは、初期テストのためにWindows InsidersビルドのユーザーにMicrosoft Storeで提供されており、その後、数週間後に品質を確保するためにすべてのユーザーに提供する予定です。wsl --updateを実行することで、WSLの更新を確認することができます。

Windows Insidersに入っていない方で、すぐに使いたい方は、WSLのリリースページから最新版をダウンロードすることができます。

WSLディストロの設定にあるsystemdフラグを設定する

ブート時に systemd が起動するように、wsl.conf ファイルを編集する必要があります。

以下の行を /etc/wsl.conf に追加します(エディターを sudo 権限で実行する必要があることに注意してください、例: sudo nano /etc/wsl.conf )。

[boot]
systemd=true

そして、CTRL+Oで保存、CTRL+Xで終了して、nanoエディタを閉じます。

最終ステップ

以上の手順で、WSL ディストロの Windows を終了し、PowerShell から wsl.exe --shutdown を実行して、WSL インスタンスを再起動します。起動すると、systemd が起動しているはずです。systemctl list-unit-files --type=service でサービスの状態を確認することができます。

謝辞とご意見をお寄せください

この機能を提供するために協力してくれたCanonicalチームに感謝します! Canonicalのブログポストはこちらです。技術的な問題については、Microsoft/WSLのGithubレポにご報告ください。WSLチームメンバー、または私のTwitterでフォローアップすることができます。最後に、Git、VS Code、Dockerコンテナ、データベース、機械学習のためのGPUアクセラレーションなどの一般的な開発ツールのセットアップ方法など、WSLに関する詳細については、WSLドキュメントをご覧ください。


やってみた

GitHubから最新プリリリースのWSLのパッケージを落としてきて、手動アップデートするとWSL2のUbuntuでsystemdを動かすことが出来ました。手順は上の通り。

2022/09/26 追記 systemdのapt upgradeに失敗する

本機能を活かしておくと、systemdのアップグレードに失敗します。復旧するためには/etc/wsl.confでsystemdを以下のようにoffにして、wsl --shutdownしてから、ディストリビューションを起動し直してください。systemdのアップグレード後systemdを活かすことも可能です。

[boot]
systemd=false

コメント

タイトルとURLをコピーしました