WSLの導入・使用関連で陥りやすいポイント

## はじめに
私は普段、検証用のLinux環境として、個人のWindows PC上に導入した仮想化ソフトウェア(VMWare Workstation Pro)内にゲストOSとしてインストールしたLinuxを使用しています。
一方、仕事用のWindows PCの場合は、基本的に社内で承認されたソフトウェアのみ利用可能であるため、簡単に社外のサイトから仮想化ソフトウェアを導入し、その中にLinuxをインストールするということができません。ただ、Linux環境があると、Linuxでしか対応してないコマンド等があるので、何かと便利です。
そこで、仕事用のPCに限り、今回WSL(Windows Subsystem Linux)を導入してLinux環境を作成しました。

https://learn.microsoft.com/ja-jp/windows/wsl/about

ただ、仮想化ソフトウェア上にLinuxをインストールする場合と違い、色々つまずきポイントがありましたので、WSLを導入・使用する上で、よく陥りやすいポイントと対処法を纏めてみました。

## WSL導入時の陥りやすいポイント
基本的には下記のリンク先のドキュメントを参考に実施していきます。

https://learn.microsoft.com/ja-jp/windows/wsl/install

以降は、その中で色々と遭遇したつまずきポイントです。

### Windows PCの仮想化プラットフォーム機能の有効化が必要
Windows PCの「コントロールパネル」→「プログラム」→「プログラムと機能」→「Windowsの機能の有効化または無効化」において、下記の「Linux用Windowsサブシステム」にチェックを入れるのは普通に実施するかと思います。
![q1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/e1c7984d-7dee-919c-e020-e2f997e2a012.jpeg)
ただ、これにチェックを入れただけだと、WSLのインストール時に下記のエラーになります。
```
WslRegisterDistribution failed with error: 0x80370102
Please enable the Virtual Machine Platform Windows feature and ensure virtualization is enabled in the BIOS.
For information please visit https://aka.ms/enablevirtualization
```
下記画面に表示されている「仮想マシンプラットフォーム」にチェックを入れて有効化しておくことを忘れないようにしましょう。
![q2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/1d1fe073-d64d-b945-57fa-94a9531e6b75.jpeg)

### WSLのKernelは最新化が必要
WSLのKernelが古い場合、WSLのインストール時に下記のエラーになります。
```
WslRegisterDistribution failed with error: 0x800701bc
Error: 0x800701bc WSL 2 ???????????? ??????????????????????? https://aka.ms/wsl2kernel ?????????
```
事前に下記リンク先のドキュメント内に記載されている「Linux カーネル更新プログラム パッケージをダウンロードする」を参照の上、最新のKernelをダウンロード・インストールされることを推奨します。

https://learn.microsoft.com/ja-jp/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package

## WSL使用時の陥りやすいポイント
### Systemdが何故か使えない
WSLの導入が終わり、Linuxが無事起動できるようになり、パッケージ更新等も可能となったのですが、systemctlコマンドを実行すると、何故か下記のエラーになりました。
```
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
```
下記リンク先のドキュメントに記載の/etc/wsl.confの設定は正しくできていることは確認済みでした。

https://learn.microsoft.com/ja-jp/windows/wsl/systemd#how-to-enable-systemd

原因がわからず、色々ググった結果、下記の記事が参考になりました。

https://qiita.com/kztktr/items/612623be971f5981a351

https://niwaka1535.hateblo.jp/entry/20230213/1676289180

結論として、WSLのバージョンが古かったことが原因でした。WSLをアップデートすることで無事解決できました。WSLも事前にアップデートされることをお奨めします。

### WSLではsshdではなくsshでSSHサーバーを起動することが必要
普段、SSHサーバーといえば、「systemctl start sshd」で起動してきましたが、WSLの場合は「systemctl start ssh」で起動させる必要があります。
```
# systemctl start ssh
# systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/usr/lib/systemd/system/ssh.service; enabled; preset: enabled)
     Active: active (running) since Wed 2024-05-22 17:51:32 JST; 4s ago
TriggeredBy: ● ssh.socket
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 760 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
   Main PID: 761 (sshd)
      Tasks: 1 (limit: 9359)
     Memory: 2.0M ()
     CGroup: /system.slice/ssh.service
             └─761 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

May 22 17:51:32 LAPTOP-5F3T3G6I systemd[1]: Starting ssh.service - OpenBSD Secure Shell server...
May 22 17:51:32 LAPTOP-5F3T3G6I sshd[761]: Server listening on :: port 22.
May 22 17:51:32 LAPTOP-5F3T3G6I systemd[1]: Started ssh.service - OpenBSD Secure Shell server.
```
OpenSSHではなく、「OpenBSD Secure Shell Server」というのが謎ですが。。。

## さいごに
本記事では、WSLを導入・使用する上で、よく陥りやすいポイントをご紹介しました。仮想化ソフトウェアの下でLinuxを動かすのとは異なり、色々クセのある使い方をする必要がありそうですが、特にソフトウェアをインストールすることなくLinux環境を作成できたのは良かったです。今後は、WSL上にAnsibleを入れて使ってみる予定です。