openSUSE:WSL

移動先: 案内, 検索

openSUSE for WSL

Wsl-screenshot-tumbleweed.png

Windows Subsystem for Linux (WSL) は Microsoft Windows オペレーティングシステムにおける特殊なインターフェイスで、 Windows カーネル内で Linux のユーザスペースプログラムを動作させる機能を提供するものです。 Linux での chroot やコンテナなどに似た構造で動作します。 WSL は Windows 10 と Windows 11 のほか、 Windows Server 2019 (バージョン 1709 以降 [1]) もしくはそれ以降のバージョンで利用できます。 なお、 Windows 10 と Windows 11 では機能に違いがあり、 Microsoft 社は最新のバージョンに注力しています。

Microsoft ストアからは、 openSUSE Tumbleweed と Leap 向けの各 WSL イメージが提供されています。

Windows 10 での WSL の有効化

WSL は Windows 10 の既定では有効化されていません。 WSL のアプリを動作させるには、明示的に有効化する必要があります。注意: WSL v2 を利用する場合、 WSL v1 は不要です。 WSL v2 は Hyper-V を活用して動作し、多くの機能が提供されていますが、ディスクに負荷のかかるシステムの場合は、 WSL v1 のほうが少しだけ優れています。なお、個人的には (Scott B.) WSL v1 無しで WSL v2 をインストール (https://github.com/microsoft/wsl/releases) したほうが良いと思っています。

WSL を有効化するには、下記の 2 つの方法があります:

コマンドライン

コマンドプロンプト (cmd.exe) を 管理者として実行 して、下記のコマンドを入力して実行します:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

コントロールパネル

  1. コントロールパネル (スタート > Windows システムツール > コントロールパネル) を開きます。
  2. 8 種類から 10 種類程度の項目が表示されます。 "表示方法:" のドロップダウンボックスを開いて、 "小さいアイコン" を選択します。
  3. "プログラムと機能" を選択します。
  4. "Windows の機能の有効化または無効化" のハイパーリンクを選択します。
  5. "Windows の機能" のウインドウが表示されたら、 "Windows Subsystem for Linux" のチェックボックスにチェックを入れます。一覧はアルファベット順表示されていますので、 "Windows" で始まる項目の下の方にあります。
  6. OK を押して "Windows の機能" のウインドウを閉じます。
  7. コントロールパネルを閉じます。
  8. コンピュータを再起動します (必ず行なってください) 。

WSL2 の有効化

WSL2 を利用したい場合は、まずお使いの OS が Windows 10 バージョン 2004 (ビルド 19041) またはそれ以降でなければなりません。

まずは 管理者モードで Power Shell を開いて、下記のコマンドを実行します:

wsl --set-default-version 2

下記のような警告メッセージが表示されるはずです:

WSL 2 requires an update to its kernel component. For information please visit https://aka.ms/wsl2kernel

提示されたリンク (WSL2 カーネルパッケージ) を Web ブラウザで開いてファイルをダウンロードし、インストールします。 インストールが完了したら上記のコマンドを再度実行します。

既に WSL v1 で利用中のディストリビューションがある場合は、下記のコマンドを実行します (openSUSE-Tumbleweed の箇所をディストリビューション名に置き換えてください):

wsl --set-version openSUSE-Tumbleweed 2

systemd の有効化

systemd サポートは wsl_systemd と言う名称のソフトウエアパターンで提供されています (openSUSE WSL イメージの既定ではインストールされていません) 。

systemd をインストールしたい場合は、まず zypper で wsl_systemd と言う名称のパターンをインストールします。あとは後述の通り wsl.conf ファイルを編集します。

# zypper in -t pattern wsl_systemd

あとは wsl.exe ユーティリティを PowerShell から起動して、動作中のインスタンスを再起動します:

PS C:\Windows\System32\WindowsPowerShell\v1.0> wsl -l -v
  NAME                   STATE           VERSION
* openSUSE-Tumbleweed    Running         2
PS C:\Windows\System32\WindowsPowerShell\v1.0> wsl -t openSUSE-Tumbleweed
PS C:\Windows\System32\WindowsPowerShell\v1.0> wsl -d openSUSE-Tumbleweed

ステップ・バイ・ステップ ガイド

下記の手順では、 openSUSE Tumbleweed の WSL インスタンスをインストールします。もちろんその他の SUSE/openSUSE バージョンの WSL インスタンスでも動作するはずです。

まずは systemd が既に有効化されているかどうかを確認します。具体的には下記のコマンドを実行して、 running ではなく offline と表示されることを確認します:

tumbleweed:/home/geeko # systemctl is-system-running
offline

確認が終わったら、まずは zypper で systemd パターンをインストールします:

tumbleweed:/home/geeko # zypper in -t pattern wsl_systemd
リポジトリのデータを読み込んでいます...
インストール済みのパッケージを読み込んでいます...
パッケージの依存関係を解決しています...

以下 1 個の新しいパッケージをインストールします:
  patterns-wsl-systemd

以下 1 個の新しいパターンをインストールします:
  wsl_systemd

1 個の新規パッケージのインストール.
全体ダウンロードサイズ: 13.1 KiB. キャッシュ済み: 0 B. インストールを行うと、追加で 57.0 B が必要となります。
続行しますか? [y/n/v/...? shows all options] (y): 

処理が完了したら WSL インスタンスを再起動します。インスタンスの再起動は、 PowerShell を開いて wsl.exe を実行してもかまいません。下記の手順では、まず全てのインスタンスを一覧表示してから openSUSE-Tumbleweed インスタンスを停止し、起動し直しています。

PS C:\Windows\System32\WindowsPowerShell\v1.0> wsl -l -v
  NAME                   STATE           VERSION
* openSUSE-Tumbleweed    Running         2
PS C:\Windows\System32\WindowsPowerShell\v1.0> wsl -t openSUSE-Tumbleweed
The operation completed successfully.
PS C:\Windows\System32\WindowsPowerShell\v1.0> wsl -l -v
  NAME                   STATE           VERSION
* openSUSE-Tumbleweed    Stopped         2
PS C:\Windows\System32\WindowsPowerShell\v1.0> wsl -d openSUSE-Tumbleweed

最後のコマンドを実行すると、 WSL インスタンスを起動してシェルが表示されます。このシェルから systemd が動作しているかどうかを確認します:

geeko@tumbleweed:/mnt/c/Windows/System32/WindowsPowerShell/v1.0> sudo systemctl is-system-running
[sudo] password for root:
running

上記のとおり、 openSUSE Tumbleweed WSL インスタンスで systemd が動作するようになりました。

wsl.conf

もう 1 つの方法として、 WSL インスタンスごとに存在する /etc/wsl.conf ファイルを編集する方法もあります:

[boot]
systemd=true

あとはインスタンスを再起動すれば、 systemd が動作するようになります。

.wslconfig

Windows 側からは、ユーザごとのディレクトリ内にある `%UserProfile%\.wslconfig` ファイルを作成することで、 'さまざまなこと'[1] を実現できます。たとえば cgroup に関連するパラメータを設定したい場合は、下記のようにします:

[wsl2]
kernelCommandLine=cgroup_no_v1=all

これは特に docker/podman を systemd (v256) 内で動作させたい場合に有用です。

[1]: 詳細: https://learn.microsoft.com/en-us/windows/wsl/wsl-config

GUI サポート (WSLg) の有効化

GUI サポートは WSLg (Windows Subsystem for Linux GUI) プロジェクトで提供されているものです。 WSLg では、 Windows 内で X11 や Wayland のアプリケーションを直接実行できるようになります。

有効化を実施する前に、まずは WSLg instructions を確認しておいてください。

Windows 側を適切に設定したあとは、 SUSE/openSUSE WSL インスタンス内で wsl_gui パターンをインストールすることで、 WSLg を有効化できます:

# zypper in -t pattern wsl_gui

上記の通りパターンをインストールしたあとは、 WSL インスタンス内で直接 GUI アプリケーション (たとえば Mesa-demo パッケージに含まれる glxgears など) を起動できるようになります:

glxgears

WSLg が有効化されていないシステムの場合、ほとんどのアプリケーションでは "DISPLAY" 環境変数が設定されていない旨のエラーメッセージが表示されるはずです。

WSL への openSUSE のインストール

From App Store

WSL に openSUSE をインストールする場合、最も簡単な方法はアプリストアからのインストールです:

SUSE Linux Enterprise をインストールしたい場合は、下記を開いてください:

初回の起動時に、ライセンス要件に合わせて SLES (Enterprise Server) として使用するか、もしくは SLED (Enterprise Desktop) として使用するかを選択することになります。

openSUSE ダウンロードサーバにある appx を利用したインストール

openSUSE ダウンロードサーバから appx ファイルをダウンロードしたい場合は、それぞれ下記の URL を開いてください:

なお、 appx ファイルは openSUSE の証明書で署名されているため、下記の手順を実施する必要があります:

  1. appx ファイルを右クリックして プロパティ を選択し、 デジタル署名 のタブを選択して一覧から署名を選択します。あとは 詳細, 証明書の表示, 証明書のインストール と押していきます。すると、 証明書のインポート ウィザードの開始 が表示されます。
  2. 保存場所 では ローカル コンピュータ を選択して 次へ を押します。
  3. 証明書を全て次のストアに配置する を選択して 参照 を押します。
  4. 信頼された発行元 を選択して OK を押し、 次へ を押したあと、 完了 を押します。
  5. 確認メッセージが表示されたら OK を押します。

tar アーカイブからの手動インストール

それ以外にも、 開発バージョンを手作業でインストール することもできます。

  • 注意: WSL バージョン 2.4.4 以降の場合は、 `.tar.xz` ファイルからのインストール (拡張子を `.wsl` に修正してダブルクリックするとインストールできます) がお勧めです (method) 。

それぞれ下記からダウンロードできます:

wsl.exe --install ... によるインストール

"ModernDistributions" (リンク) 内に記載されているディストリビューションであれば下記のようにインストールできます。ストアから .appx をダウンロードしてインストールしたい場合は --legacy を追加してください:

 wsl --install --distribution openSUSE-Tumbleweed [--legacy]

wsl.exe --install ... --web-download によるインストール

"ModernDistributions" (リンク) 内に記載されているディストリビューションであれば下記のようにインストールできます。ストアから .appx をダウンロードしてインストールしたい場合は --legacy を追加してください:

 wsl --install --distribution openSUSE-Tumbleweed --web-download [--legacy]

WSL on Windows for Arm

現時点では Arm 向けのイメージは openSUSE Tumbleweed のみとなっています。 また残念ながら、 Windows Store では WSL イメージのデフォルトが x86_64 になってしまっています

Arm イメージをダウンロードしたい場合は、下記のようにして --web-download オプションをお使いください。

 wsl --install openSUSE-Tumbleweed --web-download --legacy

Windows 11 and WSL

  • Windows 11 へのインストールは Windows 10 とほぼ同様ですが、全体的に機能が "向上" しています。 systemd サポートなどを含む WSL の詳細については、 https://github.com/Microsoft/WSL をお読みください。
  • 注意: Microsoft 社は arm64 / x64 の各 .msi ファイルを個別に提供するようになっています。
  • 管理者モードでの PowerShell 経由でのインストールは下記のようにします:
 Add-AppxPackage C:\path\to\Microsoft.WSL_<version>.msixbundle
  • あとはディストリビューション内の /etc/wsl.conf ファイルを編集して下記のように記述することで、 systemd を利用できるようになります:
 [boot]
 systemd=true

既知の問題点と制限事項

  • Windows Arm 環境で Windows ストアからダウンロードすると、 x86_64 イメージをダウンロードしてしまう という問題が見つかっています。詳しくは 回避策 を参照してください。
  • アプリをインストールすると、 Windows の C: ドライブ内の WSL 固有の場所に tar ボールを展開し、それをルートファイルシステムとして使用するようになります。 WSL 側の制限により、それ以外のドライブにはインストールできません。そのため、 C: ドライブには十分な容量を確保してください。
  • インストール後にはルートファイルシステムがアプリから切り離されるため、アプリ側を更新してもルートファイルシステムが更新されません。 WSL 内に openSUSE をインストールした場合は、通常の openSUSE と同様に、メンテナンス更新を行なう際には zypper patch コマンドを、更新やアップグレードを行なう場合は zypper upzypper dup コマンドをそれぞれ実行してください。
  • WSL 内のシステムは通常の openSUSE とは異なり、システム起動の手順を踏みません。そのため、 systemd も使用しないようになっています。システムの準備にあたっては、プロプライエタリな Microsoft ソフトウエアである /init が処理を行ないます。そのため、 WSL 内でのサービス管理は正しく動作しません。対話的なコンテナのように動作することになります。
  • WSL の起動時に下記のようなエラーメッセージが表示されることがあります:
 Error: WSL 2 requires an update to its kernel component. For information please visit https://aka.ms/wsl2kernel

このような場合は、 wsl2 カーネルアップデートをインストールしてください:

バグ報告

WSL 上での openSUSE で何らかのバグを見つけた場合は、 Bugzilla からバグ報告を行なってください。

openSUSE には直接関係のない WSL 固有のバグについては、 GitHub から Microsoft にバグ報告を行なってください。

なお、いずれのバグ報告とも、英語での報告をお願いいたします。

外部リンク

開発

IW:openSUSE:WSL