Windows Subsystem for Linux (WSL)でSystemdを有効にする方法

Windows Subsystem for Linux (WSL)は、Windows 11/10クライアントマシンとWindows Server 2019以降のマシン上でLinuxバイナリ実行ファイルをネイティブに実行するための互換性レイヤーです。WSL 2のリリースにより、Hyper-V機能のサブセットを介した実際のLinuxカーネルなど、重要な変更が導入されました。この記事では、WSLでSystemdを有効にする方法について手順を追って説明します。

Systemdとは何ですか?

Systemdは、Linuxシステムの基本的なビルディングブロックのスイートです。PID 1として実行され、残りのシステムを起動するシステムとサービスマネージャーを提供します。Systemdは、Ubuntu、Debianなど、いくつかの有名なディストリビューションにデフォルトでインストールされています。この変更により、WSLはベアメタルマシンで好みのLinuxディストリビューションを実行することとさらに比較可能になり、systemdのサポートを必要とするアプリケーションの使用が可能になります。systemdに依存するLinuxアプリケーションの例としては、snap、microk8s、systemctlなどがあります。

Microsoftによると:

systemdのサポートには、WSLアーキテクチャへの変更が必要でした。systemdはPID 1を必要とするため、Linuxディストリビューション内で開始されるWSL初期化プロセスはsystemdの子プロセスになります。WSL初期化プロセスはLinuxとWindowsのコンポーネント間の通信のためのインフラストラクチャを提供する責任があるため、この階層を変更するにはWSL初期化プロセスで行われた仮定の一部を再考する必要がありました。クリーンなシャットダウンを保証するため(シャットダウンは現在systemdによって制御されているため)と、WSLgとの互換性を持たせるために、追加の変更を行う必要がありました。また、これらの変更により、systemdサービスがWSLインスタンスをアクティブ状態に保たないことに注意することが重要です。

この変更により、起動時のWSLの動作が変わるため、ユーザーがすでに使用しているWSLディストロに適用することには慎重を期したいと考えていました。そのため、現在は特定のWSLディストロに対してsystemdを有効にすることを選択する必要があります。フィードバックを監視し、将来的にこの動作をデフォルトにすることを検討します。

Windows Subsystem for Linux (WSL)でSystemdを有効にする方法

この投稿を書いている時点では、Windows Subsystem for Linux (WSL)コミュニティはsystemdを実装する方法を構築してきました。しかし、Canonicalとのパートナーシップを機に、MicrosoftはWSLにsystemdを正式に実装しました。WSLで利用可能なsystemdのサポートにより、WSLディストロ内でsystemdを実行できるようになり、Windowsマシン上でLinuxワークフローをさらに活用できるようになりました。

マシンにsystemdを導入するには、次の手順を実行する必要があります。

WSLバージョン0.67.6以上を実行していることを確認します

PowerShellでWSLを有効にしており、デバイスのMicrosoftストアからダウンロードしていない場合、最初はsystemdがありません。Windows 11のInsiderビルドを実行しているユーザー、またはMicrosoftストアからダウンロードしたWSLを使用しているユーザーのみが使用できます。WSLでUbuntu Previewを使用している場合、systemdは自動的に追加されます。したがって、サポートされているバージョンのWSLを使用しているかどうかを確認するには、Windowsターミナルを開き、PowerShellコンソールで次のコマンドを実行します。

wsl –version

出力からWSLバージョンが0.67.6以前の場合、MicrosoftストアにアクセスしてWSLをダウンロードできます。または、特にWindows InsiderではないPCユーザーは、WSL GitHubリポジトリから最新のリリースをダウンロードできます。将来的には、すべてのユーザーにsystemdのサポートが追加されます。WSLの更新を確認するには、PowerShellで次のコマンドを実行します。

wsl –update

WSLディストロ設定で設定されたsystemdフラグを設定する

systemdに必要なサポートされているバージョンのWSLを実行していることを確認したら、wsl.confファイル(WSL Linuxディストリビューションにある構成ファイルで、一般的なWSL設定を変更するのではなく、ディストリビューションごとに構成できます)を編集して、起動時にsystemdが起動するようにする必要があります。このタスクを実行するには、次の手順を実行します。

  • sudo権限でエディターを実行し、次の行を追加します:
[boot]
systemd=true
  • 完了したら、ファイルを保存して終了します。
  • これで、WSLディストロのWindowsを閉じて、PowerShellで次のコマンドを実行してWSLインスタンスを再起動できます。
wsl.exe --shutdown
  • 起動すると、systemdが実行されているはずです。サービスのステータスを確認して表示するには、次のコマンドを実行します:
systemctl list-unit-files --type=service

これで、Windows Subsystem for Linux (WSL)でSystemdを有効にできます!

initとしてsystemdを起動するにはどうすればよいですか?

systemdで起動するには、その目的に作成した起動メニューエントリを選択します。起動メニューエントリを作成していない場合は、パッチを適用したカーネルのエントリを選択し、grubでカーネルコマンドラインを直接編集して次の行を追加するだけです: init=/lib/systemd/systemd.