8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSL2をインストールしてネイティブなSystemdを使う。

Last updated at Posted at 2024-01-28

はじめに

先日、自宅PCの(おそらく)マザーボードが故障して起動できなくなってしまったので、以前使っていたノートPCをフォーマットして故障したPCの代わりにWindows11をセットアップしました。

その際、WSLのインストール・セットアップに色々あって手間取ったのと、そういえば最近のWSLは、以前のように追加パッケージをインストールしなくてもネイティブにSystemdを動かせるようになっていたなと思い、セットアップした結果を紹介します。

WSLの準備

WSLを実行するために必要となる事前の準備を行います。

手順は公式ドキュメントにまとまっているので、基本的な手順は以下に沿って進めます。

以下目次

Windowsターミナルの設定

WSLセットアップ時、何度かPowerShellを管理者モードで起動する必要があるため、WindowsターミナルでPowerShellの管理者モードを起動できるようにしておきます。

Windowsターミナルを起動し、メニューから「設定」を選択。

Monosnap_20240128_094227.png

新しいプロファイルを追加します」から、複製元のプロファイルで「Windows PowerShell」を選択して、「複製」を選択します。

Monosnap_20240128_094437.png

Monosnap_20240128_094613.png

名前」を任意(今回は「Windows PowerShell (管理者)」)で入力して、「このプロファイルを管理者として実行する」のトグルスイッチをオンにして「保存」すれば、次からはPowerShellを管理者モードで簡単に起動することができます。

サービスの有効化

WSLを使えるようにするため、「Linux用Windowsサブシステム」と「仮想マシンプラットフォーム」の有効化を行います。

Windowsメニューより、「システム」→「システム」→「オプション機能」→「Windowsのその他の機能」からGUIでも設定できますが、今回は公式ドキュメント通りコマンドで実行します。

Windowsターミナルを起動して、「」ボタンから先程設定した管理者モードで起動するPowerShellを選択して以下コマンドを実行します。

Linux用Windowsサブシステムと仮想マシンプラットフォームの有効化
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

上記設定後、Windowsの再起動を行う必要があるので一度再起動しておきます。

再起動後、WSLのコマンドを実行して、以下のように出力されることを確認して、もし失敗するようであれば「エラーが発生した場合の対処」を実行してみてください。

PS C:\Users\username> wsl
Linux  Windows サブシステムには、ディストリビューションがインストールされていません。
ディストリビューションは Microsoft Store にアクセスしてインストールすることができます:
https://aka.ms/wslstore

Linuxカーネル更新プログラムパッケージのインストール

以下のページのリンクにある、「x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ」から最新パッケージをダウンロードしてインストールします。

WSLのデフォルトバージョン変更

WSLにはVersion1Version2がありますが、Version2をデフォルトにするため、以下コマンドを実行します。

WSL2をデフォルトバージョンに指定
wsl --set-default-version 2

Ubuntuのインストール

Microsoft Store」から「Ubuntu」を検索してインストールします。

インストール後、作成するユーザ名とパスワードを聞かれるため、それぞれ任意のユーザ名、パスワードを入力します。

Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: [ユーザ名を入力]
New password: [パスワードを入力]
Retype new password: [パスワードを入力]
passwd: password updated successfully
Installation successful!

Systemdの有効化

以下よりSystemdを有効化していきます。

Systemdも以下公式ドキュメントに沿って進めていきますが、公式ドキュメントによると、すでにinitシステムの既定値がSystemdに変更となっているとのことなので、私のように新たにWindowsをインストールした方は作業不要かもしれません。

今回私が実施した手順に沿って以下進めていきます。

WSLのアップデート

WSLのコマンドはそのままではバージョンが古い場合があり、そのままではwsl --versionといったいくつかのコマンドが実行できないことがあるようです。

そのため、PowerShellより、以下コマンドを実行してWSLをアップデートします。

WSLのアップデート
wsl --update

アップデート後、もしWSLコマンドが実行できなくなったり、Ubuntuにログインできなくなってしまった場合は「エラーが発生した場合の対処」を参考にしてみてください。

Systemdの確認・有効化

Systemdの有効化は、今まで操作してきたPowerShellからではなく、Linux(今回の場合はUbuntu)側のコマンドラインを操作して有効化する必要があります。

今回の手順通りに進めている場合、「Windowsターミナル」からUbuntuを実行できるようになっているはずなので、Ubuntuを起動し、wsl.confファイルを確認します。

wsl.confの確認
cat /etc/wsl.conf

ファイルを確認し、systemdの設定がtrueになっていればSystemdが有効になっています。

systemd設定の確認
[boot]
systemd=true

もし上記の設定になっていないようであれば、vi等で編集した後、wsl --shutdownコマンドで停止します。

Ubuntuの停止
wsl --shutdown Ubuntu

停止後、WindowsターミナルからUbuntuのターミナルを起動すると停止したUbuntuが起動してくるので、Ubuntuのコマンドラインから、以下のようなSystemctlコマンドを実行して結果が表示されれば問題ありません。

Systemd動作の確認
systemctl list-unit-files --type=service

エラーが発生した場合の対処

通常、Windowsサブシステムと仮想マシンプラットフォームを有効化すれば、WSLのコマンドが実行できるようになるはずですが、私の環境では「クラスが登録されていません」と表示され、実行できませんでした。

コマンドが失敗した際の例
PS C:\Users\username> wsl
クラスが登録されていません
Error code: Wsl/CallMsi/REGDB_E_CLASSNOTREG

wsl --updateでアップデート後にも上記のWSLエラーが再度出力されるようになったり、またUbuntuログインしようとした際にも以下のようなエラーが出力されるようになりました。

Ubuntuログイン時のエラー
Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x8007019e
Error: 0x8007019e Linux ? Windows ??????????????????

Press any key to continue...

その時の私の環境情報等も載せておきます。

項目 パラメータ
エディション Windows 11 Pro
バージョン 23H2
OS ビルド 22631.3085
エクスペリエンス Windows Feature Experience Pack 1000.22684.1000.0
プロセッサ AMD Ryzen 7 3700U with Radeon Vega Mobile Gfx 2.30 GHz
実装RAM 16.0 GB

私の環境だけではなく、同じような事象が報告されているようで、以下参考にさせて頂いたページを見ると、バージョンによるバグのようです。

中々現状のWSLのバージョンを確認する方法が見つかりませんでしたが、PowerShellの管理者モードで以下ディレクトリ名を見ることでなんとか確認しました。

WSLのバージョン確認
> ls 'C:\Program Files\WindowsApps\microsoftCorporationii*'


    ディレクトリ: C:\Program Files\WindowsApps


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2024/01/28     13:20                microsoftcorporationii.windowssubsystemforlinux_2.0.14.0_x64__8wekyb3d8bbwe

私の場合、作業実施時の安定リリース版最新となる2.0.14.0でしたが、サービスを入れ直したりしても変わらなかったため、以下Microsoft WSLGitHubページより、作業時のプレリリース版最新となる2.1.1をインストールしたところ、問題が発生しなくなりました。

同じように失敗する方がいれば参考にしてもらえればと思います。

おわりに

今まではWSLSystemdサービスを実行するためには、オープンソースのユーザパッケージをインストールしたりしないと使えなかったので、仮想Linuxとして使用するにはちょっと難しい部分がありましたが、ネイティブでSystemdが実行できるようになったことで、WSLでもかなり使えるようになったと感じました。

ただ、Systemdがネイティブで実行できるようになったからなのか、WSL自体のインストール・セットアップは以前より不安定になっているなと個人的に感じました。

8
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?