WSL2メモ

# 前提

* Windows10 21H1以降 (Windows11含む) 試しています。
* Microsoft Storeで配布していないディストリビューションを使いたい。
* WSLg じゃない方法で GUI アプリを使いたい。

# WSLのインストール

```powershell:wslインストール
wsl --install
```

このコマンドを実行すると、下記の機能がインストールされます。

* 仮想マシン プラットフォーム
* Linux 用 Windows サブシステム
* WSL用Linuxカーネル
* Ubuntu Linux
  Microsoft Store で配布している `Ubuntu` は2022年3月現在、`無印` `16.04` `18.04` `20.04` の4つがありますが、自動インストールされるのは無印の Ubuntu のようで、20.04 でした。


# Microsoft Store 配布のディストリビューションのインストール

```powershelgl: ディストリビューションの確認
wsl --list --online
```

```powershell: Ubuntu-20.04のインストール
wsl --install -d Ubuntu-20.04
```

```powershell: インストール済みディストリビューションの確認
wsl --list --verbose
```


# GUI 環境のインストール

## デスクトップ環境のインストール

* Mateを使う場合

    ```bash:Mateのインストール
    sudo apt update && sudo apt -y upgrade
    sudo apt install -y ubuntu-mate-desktop
    sudo apt-get install xrdp
    ```

* XFceを使う場合

    ```bash:XFceインストール
    sudo apt update && sudo apt -y upgrade
    sudo apt -y install xfce4
    sudo apt-get install xrdp
    ```

インストール途中で、Display Manager の設定を聞かれます。とりあえず `gdm3` を選択します。

![wsl_gui_select_display_manager.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117636/7dbe34b5-00ec-220c-0e7e-2ffa422db527.png)


## 日本語IME

```bash:日本語IME（fcitx-mozc）のインストール
sudo apt install fcitx-mozc
```


## Xsession の設定

$HOME/.xsession が存在しない場合、作成します。

* Mateを使う場合

    ```bash:$HOME/.xsession
    # fcitx-mozc
    export XMODIFIERS="@im=fcitx"
    export QT_IM_MODULE=fcitx
    export GTK_IM_MODULE=fcitx
    export DefaultIMModule=fcitx
    fcitx-autostart

    # Mate
    mate-session
    ```

* XFceを使う場合

    ```bash:$HOME/.xsession
    # fcitx-mozc
    export XMODIFIERS="@im=fcitx"
    export QT_IM_MODULE=fcitx
    export GTK_IM_MODULE=fcitx
    export DefaultIMModule=fcitx
    fcitx-autostart

    # XFce
    xfce4-session
    ```

## xrdp の設定と起動

```bash: /etc/xrdp/xrdp.ini
sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak
sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/max_bpp=32/#max_bpp=32\nmax_bpp=128/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/xserverbpp=24/#xserverbpp=24\nxserverbpp=128/g' /etc/xrdp/xrdp.ini
```

```bash:xrdp の起動
sudo service xrdp start
```

この後、リモートデスクトップを起動し、`localhost:3390` に接続すると GUI 環境につながると思います。


## よくある問題？

* RDP でログインしたら英語版
  locale を設定していないとデフォルトの英語で表示されます。`dpkg-reconfigure locales` コマンド等で、locale に ja_JP.UTF8 を設定後、再度 RDP でログインすると日本語表示になるはずです。

* RDP でログインするとき blueman が落ちる
  たぶん Bluetooth 関係の何かだと思いますが、たぶん使わないのでアンインストールしても問題なさそうです。

    ```bash: blueman のアンインストール
    sudo apt remove blueman
    ```

# Microsoft Store 公開以外のディストリビューションのインストール

 WSL Ubuntu 上でもできるらしい解説を見ましたが、私の PC ではできませんでした。
 仮想マシン等に Ubuntu Linux をインストールして作業した方が無難だと思います。


## Rocky Linux8

* 手順
  [Import To WSL with WSL and rinse - Documentation](https://docs.rockylinux.org/guides/interoperability/rocky_to_wsl_howto/)

### Ubuntu Linux 20.04での作業

```bash:rinse のインストール
sudo apt-get update
sudo apt-get install rinse -y
```

* RockLinux用 rinse 設定ファイル作成
  CentOS8 の設定ファイルをコピーして、centos ⇒ rocky に変更します。

    ```bash:RockyLinux用rinse設定ファイル作成
    sudo bash -c \
        'sed -e "s|centos|rocky|" /etc/rinse/centos-8.packages > /etc/rinse/rocky-8.packages'
    ```

  rinse の設定ファイルの中に Red Hat Enterprise Linux の設定ファイルがありましたので、RHEL の場合は、この操作は不要だと思います。


```text: /etc/rinse/rocky-8.packages へのインストールパッケージ追加
glibc-langpack-en
libmodulemd
libzstd
passwd
sudo
cracklib-dicts
openssh-clients
python3-dbus
dbus-glib
glibc-langpack-ja
```

```ini: /etc/rinse/rinse.conf に RockyLinux のミラーサイト追加
# Rocky Linux 8
[rocky-8]
mirror.amd64 = http://dl.rockylinux.org/pub/rocky/8/BaseOS/x86_64/os/Packages/
```

* パッケージインストールスクリプトの作成

    ```bash: CentOS8用のスクリプトをコピー
    sudo cp -pR /usr/lib/rinse/centos-8 /usr/lib/rinse/rocky-8
    ```

    ```bash: /usr/lib/rinse/rocky-8/post-install.sh の14行目に挿入
    echo "  Extracting CA certs..."
    $CH /usr/bin/update-ca-trust
    ```

* rinse スクリプトの修正
    * /usr/sbin/rinse を -extract-over-symlinks で検索し、次の行に rocky を追加します。
        `修正前`： if ( $file =~ /(fedora|centos|redhat|mandriva)-release-/ ) {
        `修正後`： if ( $file =~ /(fedora|centos|rocky|redhat|mandriva)-release-/ ) {


```bash: rinse コマンドの実行
mkdir rocky_rc
sudo rinse --arch amd64 --directory ./rocky_rc --distribution rocky-8
```

* VMware Ubuntu Linux 20.04 では、/etc/rinse/rocky-8.packages のパッケージリストから ima-evm-utils を外さないとエラーになりました。
* Windows11 WSL2 Ubuntu Linux 20.04 では filesystem-3.8-6.el8.x86_64.rpmの展開でエラーになりました。


```bash: RockyLinux ファイルシステムを固める
sudo tar --numeric-owner -c -C ./rocky_rc . -f rocky8.tar
```

この後、rocky8.tar を scp 等の手段を使って Windows 上にコピーします。


### Windowsでの作業

Rocky Linux の WSLイメージ格納フォルダを作成する。今回は `C:\WSL\rocky8` とする。

```powershell: rocky8.tar のインポート
wsl --import Rocky8 c:\WSL\rocky8 rocky8.tar
```

```powershell: インポートの確認
wsl -l -v

  NAME            STATE           VERSION
* Debian          Running         2
  Ubuntu-20.04    Running         2
  Rocky8          Stopped         2
```


```powershell: RockyLinux の起動
wsl -d Rocky8

[root@winpc rocky8]# cat /etc/redhat-release
Rocky Linux release 8.5 (Green Obsidian)
```

### インポート後の調整

```bash: パッケージの更新
dnf update
```

```bash: 一部パッケージの再インストール
dnf reinstall passwd sudo cracklib-dicts -y
```

```bash: 一般ユーザ作成
adduser -G wheel hoge
echo -e "[user]\ndefault=hoge" >> /etc/wsl.conf
passwd hogehoge
```


## Debian Linux11

### Ubuntu Linux 20.04での作業

```bash: 基本パッケージの取得
mkdir debian11
sudo apt install debootstrap
sudo debootstrap --verbose --variant=minbase --arch=amd64 \
    --include=sudo,locales,vim \
    bullseye ./debian11 http://ftp.jp.debian.org/debian
```


| Codename | Version |
|:---------|:--------|
| bullseye |      11 |
| buster   |      10 |
| stretch  |       9 |


#### 基本設定

```bash: chroot
sudo mount -t proc proc ./debian11/proc
sudo mount -o bind /dev ./debian11/dev
sudo chroot ./debian11/
```

```bash: /etc/apt/sources.list の更新
echo "deb http://ftp.jp.debian.org/debian bullseye main contrib non-free" > /etc/apt/sources.list
echo "deb-src http://ftp.jp.debian.org/debian bullseye main contrib non-free" >> /etc/apt/sources.list
apt-get update
```

```bash: キーボード設定（たぶん設定不要）
apt-get install -y console-data
# 1. Select keymap from arch list -> 4. qwerty -> 16. Japanese
```

```bash: タイムゾーン（たぶん設定不要）
dpkg-reconfigure tzdata
# 6. Asia -> 79. Tokyo
```

```bash: localeの設定
dpkg-reconfigure locales
# 285. ja_JP.UTF-8 UTF-8 -> 3. ja_JP.UTF-8
```

```bash: ユーザアカウント
useradd -G users,sudo -d /home/hoge -m -s /bin/bash hoge
echo -e "[user]\ndefault=hoge" >> /etc/wsl.conf
passwd hogehoge
```

```bash: 後処理
sudo umount ./debian11/proc
sudo umount ./debian11/dev
sudo tar --numeric-owner -c -C ./debian11 . -f debian11.tar
```

debian11.tar を wsl でインポートする Windows 上に持っていきます。


### Windowsでの作業

Rocky Linux の WSLイメージ格納フォルダを作成する。今回は `C:\WSL\debian11` とする。

```powershell: WSL に RockyLinux をインポートする
wsl --import Debian11 c:\WSL\debian11 debian11.tar
```

```powershell: インポートの確認
wsl -l -v
```

```powershell: Debian11 の起動
wsl -d Debian11
```