Linux 用 Windows サブシステム (WSL)は、Windows 11/10 クライアント マシンおよび Windows Server 2019 以降のマシン上で Linux バイナリ実行可能ファイルをネイティブに実行するための互換性レイヤーです。のリリースに伴い、WSL2、Hyper-V 機能のサブセットを通じて、実際の Linux カーネルなどの重要な変更が導入されました。この投稿では、次の手順を説明します。WSLでSystemdを有効にする方法。
システムドとは何ですか?
Systemd は、Linux システムの基本的な構成要素のスイートです。これは、PID 1 として実行され、システムの残りの部分を開始するシステムおよびサービス マネージャーを提供します。 Systemd は、Ubuntu、Debian などのいくつかのよく知られたディストリビューションにデフォルトでインストールされます。この変更により、WSL はベア メタル マシン上で好みの Linux ディストリビューションを実行するのとさらに同等になり、systemd サポートを必要とするアプリケーションの使用が可能になります。 systemd に依存する Linux アプリケーションの例をいくつか示します。スナップ、microk8s、 そしてシステムctl。
マイクロソフトによると:
systemd をサポートするには、WSL アーキテクチャへの変更が必要でした。 systemd には PID 1 が必要なため、Linux ディストリビューション内で開始された WSL init プロセスは systemd の子プロセスになります。 WSL 初期プロセスは、Linux コンポーネントと Windows コンポーネント間の通信のためのインフラストラクチャを提供する役割を担っているため、この階層を変更するには、WSL 初期プロセスでの前提条件の一部を再考する必要がありました。クリーンなシャットダウン (現在、シャットダウンは systemd によって制御されているため) を保証し、WSLg との互換性を保つために、追加の変更を加える必要がありました。また、これらの変更により、systemd サービスが WSL インスタンスを存続させなくなることに注意することも重要です。
これにより起動時の WSL の動作が変更されるため、ユーザーの既存の WSL ディストリビューションにこれを適用する場合には注意する必要がありました。そのため、現在、特定の WSL ディストリビューションに対して systemd を有効にするにはオプトインする必要があります。私たちはフィードバックを監視し、将来的にこの動作をデフォルトにするかどうかを調査する予定です。
読む:Windows 上で Windows Subsystem for Linux ファイルにアクセスする方法
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 Store からダウンロードしていない場合、最初は systemd がありません。 Windows 11 の Insider ビルドを実行しているユーザー、または Microsoft Store からダウンロードした WSL を使用しているユーザーのみがそれを所有します。 WSL で Ubuntu プレビューを使用している場合、systemd は自動的に追加されます。したがって、サポートされているバージョンの WSL があるかどうかを確認するには、Windows ターミナルを開き、PowerShell コンソールで次のコマンドを実行します。
wsl –version
出力から、WSL バージョンが 0.67.6 以前の場合は、Microsoft Store に移動して、ダウンロードWSL。あるいは、PC ユーザー、特に Windows Insider ではない場合は、ダウンロードWSL GitHub リポジトリからの最新リリース。将来的には、すべてのユーザーに systemd サポートが追加される予定です。 WSL への更新を確認するには、PowerShell で以下のコマンドを実行します。
wsl –update
読む:Linux 用 Windows サブシステムのエラー、問題、および問題を修正する
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 で Linux ディストリビューションのバージョンを WSL1 または WSL2 に設定する方法
これが、Windows Subsystem for Linux (WSL) で Systemd を有効にする方法です。
systemd を init として起動するにはどうすればよいですか?
systemd でブートするには、その目的のために作成したブート メニュー エントリを選択します。ブート メニュー エントリを作成していない場合は、パッチを当てたカーネルのエントリを選択し、grub でカーネル コマンド ラインを直接編集して、次の行を追加します。init=/lib/systemd/systemd。