🐼

Arch on WSLを構築する

2023/07/03に公開

背景

Arch LinuxはDEの構築が面倒ですが、WSL上で使うならDEも必要ありません。
それならArch LinuxとWSLの相性は良かろう、ということで試しにインストールしてみました。

参考資料

基本的には1の資料の通りですが、何カ所か補足・訂正が欲しくなったので記事化しました。

手順

Arch Linuxのインストール

Arch Linuxのbootstrapを使ってインストールするのが手軽です。

  1. Tarballを入手
  2. 展開してミラーリストを更新、Tarballに再圧縮する
  3. WSLにImportする

というのが大まかな流れです。

Tarballの入手

TarballはArchWikiに案内があるのでそこからアクセスして取得します。

既存の Linux からインストール - ArchWiki

展開・ミラーリストの更新、再圧縮

ミラーリストはTarballを展開した中のetc/pacman.d/mirrorlistに書かれていますから、Japaneseの適当なミラーサーバーの行のコメントアウトを外します。

WSLでLinuxを利用してTarballを操作したほうが良いです。
このTarballは中に権限情報を含んでいるため、展開/再圧縮にはsudoがいるので注意してください。

$ mkdir arch & cd arch  # 作業用ディレクトリを作ります
$ wget (tar ball URL)
$ sudo tar xzvf (downloadしたtar.gz)
$ sudo vim root.x86_64/etc/pacman.d/mirrorlist
    # 適当なミラーサーバーの行のコメントアウトを外す
$ sudo tar czvf root.tar.gz *
$ mkdir -p /mnt/c/arch/wsl
$ cp ./root.tar.gz /mnt/c/arch/wsl

WSLへのImport

WSLにImportする際は、適当なVHD(仮想ディスク)を保存するディレクトリと、先ほど作ったTarballを指定します。
VHDの保存先は何でも良いですが、あんまりややこしいところにおいてもしょうがないのでC:\wsl\archなどで良いみたいです。

C:\Users\Foo> wsl --import ArchLinux C:\wsl\arch C:\wsl\arch\root.tar.gz

WSLに登録する適当な名前は、"ArchLinux"などで構いません。

wsl --listコマンドに作った名前が表示されれば成功です。wsl -d (登録した名前)で起動できます。

Arch Linuxのセットアップ

WSLにArch Linuxがインストールできたら、

  1. パッケージミラーリスト、一般ユーザー
  2. ロケール
  3. WSLデフォルトユーザー

を設定します。

パッケージミラーリスト、一般ユーザーの設定

こちらはArch Linuxの一般論なので特筆することはありません。

$ pacman-key --init
$ pacman-key --populate archlinux

$ pacman -Syyu base base-devel git vim wget reflector zsh
$ pacman -Syy
$ export EDITOR="$(which vim)"

$ reflector --country Japan --age 12 --protocol https --sort rate --save /etc/pacman.d/mirrorlist

# rootユーザーのパスワードを設定する
$ passwd

# ユーザーを追加する
$ useradd -m -G wheel -s /bin/zsh -d /home/{USERNAME} {USERNAME}
$ passwd {USERNAME}

# wheelユーザーグループにsudoerの権限を与える (`%wheel ALL=(ALL:ALL) ALL`の行のコメントアウトを解除する)
$ sudoedit /etc/sudoers

ロケールの設定

これも特筆することでもありませんが、sudoedit /etc/locale.gen で必要な行(en_US.UTF-8 UTF-8ja_JP.UTF-8)のコメントアウトを解除して、

$ locale-gen
$ echo LANG=en_US.UTF-8 > /etc/locale.conf

としておきます。

WSLデフォルトユーザーの設定

WSLデフォルトユーザーを設定するには、/etc/wsl.confファイルを作成して次の設定を記述します。

[user]
default={USERNAME}

WSL上で便利に使うための設定

WSLとの組み合わせで実施しておくと便利なものとしては、以下の3つがあります。

  1. /etc/wsl.confに各種の設定
    • systemdの起動
    • localhostのforwarding
    • メモリ割り当ての上限
    • Windows側のPATHの引き渡し
  2. wsl-utilsのインストール
  3. win32yank.exeのインストール

/etc/wsl.confに各種の設定

そのほかにも何かと便利な設定を入れておきましょう。

[boot]
systemd = true  # DockerやSSHDを使うためにはSystemdがいるので、立ち上げておくことになります。

[wsl2]
localhostForwarding = true  # localhostのforwarding
memory=16GB  # メモリ割り当ての上限

ホスト側の~/.wslconfigにappendWindowsPathの設定

win32yank.exeやwslviewなど、Windows側の実行ファイルをWSL内から呼び出せると何かと便利です。
(PATHが増えすぎると動作が重くなるので、自分で明示的にexportした方が良い場合もあります)

[interop]
appendWindowsPath = true  # Windows側のPATHの引き渡し

wsl-utilsのインストール

xdg-open(X Desktop)やopen(macOS)に相当するwslviewなどを使うために、wsl-utilsはインストールして置いた方が無難です。

https://github.com/kromain/wsl-utils

$ wget https://pkg.wslutiliti.es/public.key
$ sudo pacman-key --add public.key
$ sudo pacman-key --lsign-key 2D4C887EB08424F157151C493DD50AA7E055D853
$ if grep -e wslutilities /etc/pacman.conf ; then
$   :
$ else
$   echo "[wslutilities]" | sudo tee -a /etc/pacman.conf
$   echo "Server = https://pkg.wslutiliti.es/arch/" | sudo tee -a /etc/pacman.conf
$ fi
$ paru -Sy && paru -S --noconfirm wslu

win32yank.exeのインストール

WSL内と外でクリップボードを共有するために、win32yank.exeをインストールしておきます。

https://github.com/equalsraf/win32yank

appendWindowsPath = trueを設定するか、win32yank.exeに中からPATHを通す必要があります。

Neovimなどでクリップボードにアクセスする際も便利です。
関連記事: Neovim on WSL2で、win32yankを導入してクリップボードの共有と遅延問題を解決

Discussion