あづみのメモ帳

WSL1でArch Linuxを使ってみた

Arch Linuxはシンプルで簡単な扱いやすいLinuxディストリビューションだが、以前はWSLに公式対応しておらず、rootfsを自分でインポートするなどしないと使えなかった。それから時は経ち、いつのまにやらArch Linuxは公式にWSLに対応していたが、サポートはWSL2のみとなっていた。ただの軽量仮想マシンを互換レイヤ扱いする趣味はないため、WSL1でも動いてほしい。久々にWSLを使う機会があったので、Arch Linuxを使おうと試みたが、少し面倒なことがあったのでメモしておく。

インストール

サポートはされていないが、別にインストールが蹴られるわけではなく、Ubuntu等と同様にインストールできる。

wsl --set-default-version 1
wsl --install archlinux

DNS設定

DNSサーバの設定がTailscaleになってしまうので対処する。これはArch Linux固有ではなくWSL1共通。

rm /etc/resolv.conf
echo "nameserver 1.1.1.1" > /etc/resolv.conf
echo "[network]
generateResolvConf = false" >> /etc/wsl.conf
exit
wsl --terminate archlinux
wsl -d archlinux

pacmanの設定

さて、インストール直後にpacman -Syuを実行しろと言われていたが、そのまま実行しても以下のようなエラーが出る。

error: restricting filesystem access failed because Landlock is not supported by the kernel!
error: switching to sandbox user 'alpm' failed!
error: failed to synchronize all databases (failed to retrieve some files)

書いてある通り、カーネル(のふりをしてるWSL1の互換層)がLandlockなるものをサポートしていないためご不満らしい。設定をいじればこれを使わせないようにできるが、エディタすら入っていないのでとりあえず--disable-sandboxオプションを付けて実行する。(sedとか使えばいいんだろうけどだるいので)

pacman -Syu --disable-sandbox
pacman -S msedit --disable-sandbox

エディタが入ったら/etc/pacman.confDownloadUser = alpmの行をコメントアウトすれば後は普通にpacmanが使える。

デフォルトユーザ設定

あとは通常通り煮るなり焼くなり好きにする。ユーザ作成後は以下のコマンドでデフォルトユーザを変更できる。

wsl --manage archlinux --set-default-user (ユーザ名)

fakeroot-tcp

AURのパッケージを入れたくてmakepkgを実行すると、以下のようなエラーが出る。

fakeroot, while creating message channels: Function not implemented
This may be due to a lack of SYSV IPC support.
fakeroot: error while starting the `faked' daemon.

これはfakeroot-tcpを入れれば解決するが、これを入れるためにもmakepkgが必要(手動でできなくもないがだるい)であり、卵が先か鶏が先か状態になる。少し古いがビルド済みのfakeroot-tcpを入手してインストールする。

curl -OL https://github.com/yuk7/arch-prebuilt/releases/download/25030100/fakeroot-tcp-1.37-1-x86_64.pkg.tar.zst
sudo pacman -U fakeroot-tcp-1.37-1-x86_64.pkg.tar.zst

あとはAURからyay-binを入れるなり最新のfakeroot-tcpを入れるなりすればよい。

あとがき

日常的にWSL含むLinuxを使う習慣はないので、これが常用に耐えるかは謎。

じゃあなぜ試したのかは工研部報80号をご参照のこと。