Linux on WSL2 の運用

Linux on WSL2 on Windows 11 の設定や日々の運用方法の備忘録です．仮想マシンのLinuxディストリビューションはUbuntu-22.04 LTS で検証しています．インストール関連は下端にメモを付けました．

## 仮想マシンのインストール
**Ubuntu-22.04 LTS** をWSL2にインストールします．管理者モードのPowerShellで作業します．初めてWSLを使用する場合は関係するコマンドをインストールしておきます．
```powershell
wsl --install
```

オンラインストアで利用可能なLinuxディストリビューションを確認します．
```powershell
PS C:\Users\teem> wsl --list --online
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl --install -d <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
OracleLinux_8_5                        Oracle Linux 8.5
OracleLinux_7_9                        Oracle Linux 7.9
SUSE-Linux-Enterprise-Server-15-SP4    SUSE Linux Enterprise Server 15 SP4
openSUSE-Leap-15.4                     openSUSE Leap 15.4
openSUSE-Tumbleweed                    openSUSE Tumbleweed
```

Ubuntu-22.04 LTS をインストールします（2023年4月現在最新版）．ディストリビューションによってはオンラインストア経由でインストールする必要があるかもしれません．

```powershell
wsl --install -d Ubuntu-22.04
```

#### インストールされているLinuxディストリビューションの表示
```powershell
wsl -l
```

#### 既定のディストリビューションの変更
もし古いバージョンが既定になっていたら，既定をUbuntu-22.04に変更します．
```powershell
wsl --set-default Ubuntu-22.04
wsl -l
```

#### インストール後のシステムアップデート
インストール直後にシステムを更新しておきます．
```powershell
sudo apt -y update
sudo apt -yV upgrade
sudo apt -yV dist-upgrade
sudo apt -yV autoremove
sudo apt autoclean
```
完了したらexitし，再度ログインすることで更新が反映されます．

#### アンインストール
```powershell
wsl --shutdown 
wsl --unregister Ubuntu-22.04
```

#### WSLのアップデート
```powershell
wsl --update
```

## ファイルシステムのマウント
仮想マシンのファイルシステムをWindowsの**Zドライブ**に割り当て，Windowsから簡単に仮想マシンのファイルシステムにアクセスできるようにします．

#### LinuxファイルシステムをWindowsファイルシステムにマウント
Windowsエクスプローラで作業します．マウントできるのはWindowsのドライブのみで，フォルダはできないようです．

1. Linuxのターミナルを起動しておく（必須）
1. エクスプローラで `\\wsl$Ubuntu-20.04` （Linuxディストリビューション名は適宜読み替えてください）を開き，アドレスをコピーする
1. ネットワークを右クリックし，ネットワークドライブの割り当てを選択する
1. ドライブを `Z` に割り当て，フォルダに1.のアドレス `\\wsl$Ubuntu-20.04` を貼り付け，**完了** をクリックする
1. Windowsのドライブ `Z` からLinuxファイルシステムにアクセスできることを確認する
1. アンマウントするにはドライブ `Z` を右クリックで切断する

#### Windowsファイルシステムで Linux の パーミッションを有効にする
LinuxからWindowsのファイルシステムを参照する場合もパーミッションを有効にできます．仮想マシンでの作業です．
`/etc/wsl.conf` に以下を記述し，仮想マシンを再起動します．
```bash
[automount]
options="metadata"
```

#### 外付けドライブをLinuxファイルシステムにマウント
Windows のドライブは `/mnt` 以下にマウントされます．例えばCドライブは `/mnt/c` です．
外付けドライブは自動的にはマウントされません．外付けドライブEをマウントします．効かない場合はWindowsを再起動してみましょう．
```bash
sudo mkdir /mnt/e
sudo mount -t drvfs e: /mnt/e/
```

マウントを解除します．
```bash
sudo umount /mnt/e/
```

#### 属性を維持してコピー

Linuxのファイル属性（含タイムスタンプ）を維持したままWindowsのファイルシステムにコピーするにはrootで`-p`オプションを用います．こうしないとタイムスタンプが現在になってしまいます．
`d:\dat\`，を `e:\dat\`としてコピーします． 

```bash
sudo cp -r -p /mnt/d/dat /mnt/e
```

## 仮想マシンの複製
他のWindowsマシンに仮想マシンを丸ごとTARファイルとして出力する方法です．WindowsのコマンドプロンプトまたはPowerShellで作業し，export，importコマンドを用います．

#### 準備
対象の仮想マシンにおいて，デフォルトユーザ名（teemとします）が指定されていなければ，`/etc/wsl.conf` に以下を追記します．ホスト名（以下ではwslとしました）も追記しておきます．仮想マシンを再起動します．
これは環境構築として一度行うだけです．
```bash
[user]
default=teem

[network]
hostname=wsl
```

#### 仮想マシンのexport

存在するLinuxディストリビューションを確認します．
```powershell
PS C:\Users\teem> wsl -l -q
Ubuntu-20.04
```
 
このUbuntu-20.04 を `C:\Users\teem\WSL_IMAGES` に **Ubuntu-20.04-2022.tar** のファイル名でexportします．
```powershell
PS C:\Users\teem> wsl --export Ubuntu-20.04 C:\Users\teem\WSL_IMAGES\ubuntu-20.04-2022.tar

```

#### 仮想マシンのimport
複製した **Ubuntu-20.04-2022.tar** を別のWindowsマシンの `C:\Users\teem\WSL_IMAGES\` にコピーしておきます．

```powershell
PS C:\Users\teem> wsl --import Ubuntu20.04 C:\Users\teem\WSL_IMAGES\Ubuntu-20.04 C:\Users\teem\WSL_IMAGES\ubuntu-20.04-2022.tar
```

Syntaxは以下の通りです．
```powershell
wsl --import <ディストリビューション名> <保存先> <importするtarファイル名>
```