Arch on WSLを構築する
背景
Arch LinuxはDEの構築が面倒ですが、WSL上で使うならDEも必要ありません。
それならArch LinuxとWSLの相性は良かろう、ということで試しにインストールしてみました。
参考資料
- WSL 2 で Arch Linux を使う - yukirii blog
- 既存の Linux からインストール - ArchWiki
- Arch Linux : AURヘルパー「paru」を導入する
- 3. Install asdf - Getting Started - ASDF
基本的には1の資料の通りですが、何カ所か補足・訂正が欲しくなったので記事化しました。
手順
Arch Linuxのインストール
Arch Linuxのbootstrapを使ってインストールするのが手軽です。
- Tarballを入手
- 展開してミラーリストを更新、Tarballに再圧縮する
- WSLにImportする
というのが大まかな流れです。
Tarballの入手
Tarballは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がインストールできたら、
- パッケージミラーリスト、一般ユーザー
- ロケール
- 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-8
やja_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つがあります。
- /etc/wsl.confに各種の設定
- systemdの起動
- localhostのforwarding
- メモリ割り当ての上限
- Windows側のPATHの引き渡し
- wsl-utilsのインストール
- 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はインストールして置いた方が無難です。
$ 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をインストールしておきます。
appendWindowsPath = true
を設定するか、win32yank.exeに中からPATHを通す必要があります。
Neovimなどでクリップボードにアクセスする際も便利です。
関連記事: Neovim on WSL2で、win32yankを導入してクリップボードの共有と遅延問題を解決
Discussion
既存のArchWSLを使う方法しか知らなかったので、参考になりました。
途中に登場する
/mnt/c/arch/wsl
というパスは直後に
C:\wsl\arch
になってるので、たぶん後者が正解?と予想して実行しました。/mnt/c/arch/wsl
はWSLの中、Linux側から見たパスで、C:\wsl\arch
はWindowsから見たパスです。正解も不正解もないので、どちらでこの処理を行うかによってお好きな方でどうぞ。
archとwslの階層が入れ替わってるよ、wslが親でarchが子だよ、という意味なのら。
ああ、そういう。