wslって何なのか

# 概要
私事ですが転職することになりまして、
保守運用がメインだったのですが、この度開発メインで働くことになりました。

そんなこんなで、開発職として経験も浅いので、「名前は知っていたものの、使ったことない」ような周辺技術について学んでいこうという魂胆でして、その中でもwslについて学ぼうという会でございます。
つたないところはあると思いますが、なにとぞ・・・


# WSLって？
そもそもWSLとは、`Windows Subsystem for Linux`の略で、Windows上でLinuxを動作させる仕組みのことを言うらしく、バージョン1とバージョン2があるようです。
以下サイトで、WSLとWSL2の違いが公表されております。
https://learn.microsoft.com/ja-jp/windows/wsl/compare-versions

その中でも、気になる違いがあったので、ピックアップしてみます。
- システム コールの完全な互換性 - Docker など、WSL 内で実行できるまったく新しいアプリのセット

詳しい仕組みはとりあえず置いといて、Dockerと連携できるようになったのはWSL2からということですかね？
2020年5月にWSL2がリリースされているようなので、比較的最近の話だったのかと感じています。


# VMとの違いってなんだ？
VMでLinuxを立ち上げて遊んでたことはあったのですが、WSLのことを知ったときは VM[^1] と同じ感じかな～とかいう浅い解釈をしていました。
私が思うに、以下のような違いがあると思います。
[^1]: WSLもVMの技術を使ってると思いますが、いったんそのあたりは割愛します。

1. 完全なLinux環境か・そうでないか。
WSLは、要はWindows上で立ちあげるものなので、互換性はあるものの、低レベルのシステム機能は使えない見たいです。
VMに関しては完全に独立したOSってことだと思うので、仮にLinuxのことを深く理解したいとか、Linuxのほうが使いやすいとか、そういった個別の事情がある場合はVMがいいんじゃないかなと思います。

1. 開発しやすいかしにくいか
Dockerの話もしましたが、シームレスに開発するならWSLがいいんじゃないかなと思っています。
結局VMの場合は、特定のアプリケーションから立ち上げて、VM上で作業するか、Windows側で作ったソースとかをアプロードとかコピペとかして移す必要があります。
ですが、WSLの場合はVSCodeと連携してかつDockerでの開発もできるみたいなので、開発をするという点においてはWSLのほうが優れているのではないかなと思います。


# 実際にインストールしてみた

## 有効化
WSL2は、Windowsにすでに乗っている機能であり、インストールするのは、Linuxのディストリビューションです。
おそらくデフォルトでOFFになってる機能みたいなので、ONにします。
```powershell
$ dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
$ dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```
**上記はPCの再起動が必要です。**
PCの再起動後に有効となります。気を付けてください！

## WSL2環境の構築と、ディストリビューションのインストール
とりあえずデフォルトでの動作の説明をしますが、デフォルトで Ubuntu[^2]がインストールされるみたいなので、安易に実行するといらん作業まで必要になるので気を付けてくださいね～
[^2]:記事投稿現在（2024/08/05）では、22.04.3 LSTがインストールされていました。安定板なのか、Microsoft側の推奨なのかは不明
```powershell
# デフォルトインストール
# WSLにubuntuがインストールされます
$ wsl --install 
```

## ユーザ情報設定
インストールが終わると、ユーザ名とパスワードを設定するフェーズに移行します。
以下のように出力されるので、その通りに入力していけば問題ないです。
```
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!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
```
出力されている通り、この時点で作成したユーザはsudo実行できるようですね！
rootに昇格する場合も、`sudo su -`で無事昇格できました！

## パッケージの更新情報取得、アップデート
Linux内のパッケージのアップデート等々を行います。
最近セキュリティの脆弱性がどうのこうので、ApacheやOpenSSHの更新が入ってたりするので、忘れずに行いましょうね！
```bash
$ sudo apt update
$ sudo apt upgrade
```
以上が、WSLの概要と、Ubuntuのインストールまでです。
以降は、備忘録的な形で、よく使うであろうコマンド等をつらつら書いていきます。


# Ubuntu以外をインストールしたい場合
以下を実行すると、インストールできるディストリビューションの一覧が出ます。
```postscript
$ wsl -l -o
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl.exe --install <Distro>' を使用してインストールします。

NAME                                   FRIENDLY NAME
Ubuntu                                 Ubuntu
Debian                                 Debian GNU/Linux
kali-linux                             Kali Linux Rolling
Ubuntu-18.04                           Ubuntu 18.04 LTS
Ubuntu-20.04                           Ubuntu 20.04 LTS
Ubuntu-22.04                           Ubuntu 22.04 LTS
Ubuntu-24.04                           Ubuntu 24.04 LTS
OracleLinux_7_9                        Oracle Linux 7.9
OracleLinux_8_7                        Oracle Linux 8.7
OracleLinux_9_1                        Oracle Linux 9.1
openSUSE-Leap-15.6                     openSUSE Leap 15.6
SUSE-Linux-Enterprise-15-SP5           SUSE Linux Enterprise 15 SP5
SUSE-Linux-Enterprise-Server-15-SP6    SUSE Linux Enterprise Server 15 SP6
openSUSE-Tumbleweed                    openSUSE Tumbleweed
```

例えば、Ubuntu-24.04 LSTを使いたい場合は、以下の実行します。
```powershell
wsl --install Ubuntu-24.04
```

さっきのユーザ名とパスワード設定すればOK！


## wsl -l -oで出てくるディストリビューション以外をインストールしたい場合
インストールできるリスト以外で、例えばAlmaLinuxとかをインストールしたい場合は、調べた感じMicrosoft Storeからインストールできるらしいです。
以下AlmaLinux8のインストールの例です。

### インストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660318/badb0791-6dfe-24d6-3355-bfe4f26f5a9c.png)

Microsoft Storeにこんなアプリケーションがあるので、インストール！
そのままMicrosoft Storeから開いてください！

### インストール確認
すると、wslに追加されるので、以下のコマンドで確認してください！
```powershell
$ wsl -l -v
  NAME            STATE           VERSION
* Ubuntu          Stopped         2
  Ubuntu-24.04    Running         2
  AlmaLinux-8     Stopped         2
```

### 起動
起動時には、wslコマンドをオプション付きでディストリビューションの名前を打てば解決です！
```powershell
$ wsl -d AlmaLinux-8
```
ちなみに、UbuntuとかUbuntu-24.04とかを指定すればそれで立ち上げられますよ！


# デフォルトのディストリビューションを変更したい場合
現在の設定の場合、Ubuntuの先頭に`*`がついています。
その場合Ubuntuがデフォルトになり、`wsl`だけでコマンドを打つと、Ubuntuが立ち上がるようになっています。
```powershell
$ wsl
XXXXX@XXXXX:/mnt/c/Users/XXXXX$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.4 LTS"
・
・
・
```
AlmaLinuxをデフォルトにする場合は以下コマンド！
```powershell
$ wsl -s AlmaLinux-8
$ wsl 
[XXXXX@XXXXX:/mnt/c/Users/XXXXX]# cat /etc/os-release
NAME="AlmaLinux"
・
・
・
```


# 他のディストリビューションを消したい場合
例えばですが、AlmaLinuxしかいらない場合は、以下のようにして、他のディストリビューションを消しましょう！
```powershell
$ wsl --unregister Ubuntu
$ wsl --unregister Ubuntu-24.04
$ wsl -l -v
  NAME           STATE           VERSION
* AlmaLinux-8    Stopped         2
```


# Microsoft Storeからインストールしたディストリビューションの削除
同様に、登録解除をするのですが、インストールしたパッケージはそのまま残っているようなので、Windows側で「プログラムの追加と削除」の設定ページから消しちゃいましょう！
```powershell
$ wsl --unregister AlmaLinux-8
```



以上です。