systemd を使用して WSL で Linux サービスを管理する

Linux 用 Windows サブシステム (WSL) で、Ubuntu、Debian などの多くの一般的な Linux ディストリビューションで使用される init システムおよびサービス マネージャーである systemd がサポートされるようになりました。 (systemd とは)。

init システムの既定値が SystemV から最近変更されました。systemd は、wsl --install コマンドの既定値を使用してインストールされる現在のバージョンの Ubuntu の既定値になりました。 現在のバージョンの Ubuntu 以外の Linux ディストリビューションでも、SystemV init と同様に WSL init を使用できます。 SystemD に変更するには、「systemd を有効にする方法」を参照してください。

Linux の systemd とは

systemd.io によると、「systemd は Linux システムの基本的な構成要素のスイートです。 PID 1 として実行され、システムの残りの部分を起動するシステムおよびサービス マネージャーが提供されます。」

主に init システムおよびサービス マネージャーである systemd には、デーモンのオンデマンド開始、マウントと自動マウント ポイントのメンテナンス、スナップショット サポート、Linux コントロール グループを使用したプロセス追跡などの機能が含まれています。

ほとんどの主要な Linux ディストリビューションが systemd で実行されるようになったため、WSL で有効にすると、ベアメタル Linux の使用にさらに近いエクスペリエンスが得られます。 systemd が提供する必要がある内容の詳細については、systemd デモを使用したビデオ アナウンスsystemd の使用例を参照してください。

systemd を有効にする方法

Systemd は、wsl --install コマンドの既定値を使用してインストールされる Ubuntu の現在のバージョンの既定値になりました。

WSL 2 (systemv init の使用からの既定値の変更) で実行されている他の Linux ディストリビューションに対して systemd を有効にするには、次のようにします。

  1. WSL バージョンが 0.67.6 以降であることを確認します。 (確認するには、wsl --version を実行します。更新するには、wsl --update を実行するか Microsoft Store から最新バージョンをダウンロードします。)

  2. Linux ディストリビューションのコマンド ラインを開き、cd / を入力してルート ディレクトリにアクセスし、ls してファイルを一覧表示します。 ディストリビューションの WSL 構成ファイルを含む "etc" という名前のディレクトリが表示されます。 Nano テキスト エディターで次のように入力して更新できるように、このファイルを開きます: nano /etc/wsl.conf

  3. 開いている wsl.conf ファイルに次の行を追加して、systemd に使用される init を変更します。

    [boot]
    systemd=true
    
  4. Nano テキスト エディターを終了します (Ctrl + X、Y を選択して変更を保存します)。 その後、Linux ディストリビューションを閉じる必要があります。 PowerShell のコマンド wsl.exe --shutdown を使用して、すべての WSL インスタンスを再起動できます。

Enable systemd on WSL 2

Linux ディストリビューションが再起動したら、systemd が実行されます。 コマンド: systemctl list-unit-files --type=service の使用を確認できます。これにより、お使いの Linux ディストリビューションに関連付けられる任意のサービスの状態が表示されます。

wsl.conf (ディストリビューション固有) と .wslconfig (グローバル) 構成ファイルの間の違い、自動マウント設定の更新方法など、WSL での詳細設定の構成について説明します。

Systemd デモ ビデオ

Microsoft は、systemd サポートを WSL に導入するために Canonical と提携しました。 Craig Loewen (Microsoft の PM for WSL) と Oliver Smith (Canonical の PM for Ubuntu on WSL) がシステム サポートを発表し、有効な機能のデモをいくつか紹介します。

Systemd の例

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

  • snap: Linux カーネルと systemd init システムを使用するオペレーティング システム用に Canonical で開発されたソフトウェア パッケージおよび展開システム。 パッケージは "snap" と呼ばれ、snap を構築するためのコマンド ライン ツールは "Snapcraft" と呼ばれ、snap をダウンロードまたはインストールできる中央リポジトリは "Snap Store" と呼ばれ、スナップを実行するために必要なデーモン (Snap Store からのダウンロード、場所へのマウント、アプリの制約、実行) は "snapd" と呼ばれます。 全体のシステムは "snappy" として参照される場合もあります。コマンドを実行してみる: snap install spotify または snap install postman

  • microk8s: コンテナー化されたアプリのデプロイ、スケーリング、および管理を自動化する、オープンソースで低運用の最小限の実稼働 Kubernetes。 手順に従って WSL2 に MicroK8s をインストールするか、チュートリアルの開始をチェックするか、MicroK8s と WSL 2 を使用した Windows 上の Kubernetes のビデオをご覧ください。

  • systemctl: systemd を制御および検査し、Linux ディストリビューション上のサービスを対話操作するのに役立つコマンド ライン ユーティリティ。 コマンドを試す: systemctl list-units --type=service 使用可能なサービスとその状態を確認します。

systemd の使用方法を示すいくつかの関連チュートリアル:

systemd を有効にすることによる WSL アーキテクチャへの影響

WSL アーキテクチャに対する変更に必要な systemd のサポートを有効にします。 systemd に PID 1 が必要な場合、Linux ディストリビューション内で開始された WSL init プロセスは systemd の子プロセスになります。 WSL init プロセスは Linux コンポーネントと Windows コンポーネント間の通信のためのインフラストラクチャを提供する役割を担うため、この階層を変更するには、WSL init プロセスで行われた前提条件の一部を再考する必要があります。 クリーン シャットダウンを保証し(シャットダウンは現在 systemd によって制御されるため)、WSLg、Linux グラフィカル ユーザー インターフェイス (GUI) を実行する WSL のコンポーネント、またはコマンド ラインではなくウィンドウに表示される Linux アプリとの互換性を確保するために、追加の変更を加える必要がありました。

また、これらの変更により、systemd サービスは WSL インスタンスを維持しないことに注意することも重要です。 WSL インスタンスは、この更新プログラムに対して、以前と同じ方法で動作し続けます。この詳細については、この 2017 年のバックグラウンド タスク サポートに関するブログ記事を参照してください。