openSUSE:WSL
目次
openSUSE for WSL
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
コントロールパネル
- コントロールパネル (スタート > Windows システムツール > コントロールパネル) を開きます。
- 8 種類から 10 種類程度の項目が表示されます。 "表示方法:" のドロップダウンボックスを開いて、 "小さいアイコン" を選択します。
- "プログラムと機能" を選択します。
- "Windows の機能の有効化または無効化" のハイパーリンクを選択します。
- "Windows の機能" のウインドウが表示されたら、 "Windows Subsystem for Linux" のチェックボックスにチェックを入れます。一覧はアルファベット順表示されていますので、 "Windows" で始まる項目の下の方にあります。
- OK を押して "Windows の機能" のウインドウを閉じます。
- コントロールパネルを閉じます。
- コンピュータを再起動します (必ず行なってください) 。
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 など) を起動できるようになります:
WSLg が有効化されていないシステムの場合、ほとんどのアプリケーションでは "DISPLAY" 環境変数が設定されていない旨のエラーメッセージが表示されるはずです。
WSL への openSUSE のインストール
From App Store
WSL に openSUSE をインストールする場合、最も簡単な方法はアプリストアからのインストールです:
SUSE Linux Enterprise をインストールしたい場合は、下記を開いてください:
- SUSE Linux Enterprise 15 SP5 (SLES/SLED 共通)
- SUSE Linux Enterprise 15 SP6 (SLES/SLED 共通)
初回の起動時に、ライセンス要件に合わせて SLES (Enterprise Server) として使用するか、もしくは SLED (Enterprise Desktop) として使用するかを選択することになります。
openSUSE ダウンロードサーバにある appx を利用したインストール
openSUSE ダウンロードサーバから appx ファイルをダウンロードしたい場合は、それぞれ下記の URL を開いてください:
- openSUSE Tumbleweed aarch64 : https://download.opensuse.org/ports/aarch64/tumbleweed/appliances/ (appx でフィルタしてファイルをダウンロードしてください)
- openSUSE Tumbleweed x86_64 : https://download.opensuse.org/tumbleweed/appliances/ (appx でフィルタしてファイルをダウンロードしてください)
なお、 appx ファイルは openSUSE の証明書で署名されているため、下記の手順を実施する必要があります:
- appx ファイルを右クリックして プロパティ を選択し、 デジタル署名 のタブを選択して一覧から署名を選択します。あとは 詳細, 証明書の表示, 証明書のインストール と押していきます。すると、 証明書のインポート ウィザードの開始 が表示されます。
- 保存場所 では ローカル コンピュータ を選択して 次へ を押します。
- 証明書を全て次のストアに配置する を選択して 参照 を押します。
- 信頼された発行元 を選択して OK を押し、 次へ を押したあと、 完了 を押します。
- 確認メッセージが表示されたら 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 up や zypper 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 カーネルアップデートをインストールしてください:
- aarch64 (arm64): https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_arm64.msi
- x86_64 (x64): https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
バグ報告
WSL 上での openSUSE で何らかのバグを見つけた場合は、 Bugzilla からバグ報告を行なってください。
openSUSE には直接関係のない WSL 固有のバグについては、 GitHub から Microsoft にバグ報告を行なってください。
なお、いずれのバグ報告とも、英語での報告をお願いいたします。
外部リンク
- 一般的なエラーコード (英語)
- Windows Subsystem for Linux (WSL) について»
- Windows 10 インストールガイド»
- Windows Server インストールガイド»
- エンタープライズ向け Windows Subsystem for Linux (WSL)»
- Windows Subsystem for Linux (WSL) に関してよくある質問とその回答»
- Windows Subsystem for Linux (WSL) のトラブルシューティング»
- WSL2 について
- Windows のコマンドラインから Linux ツールを動作させる方法»
- WSL から Windows ツールを動作させる方法»
- Windows と WSL との間での環境変数の共有方法»