Narazaka::Blog

奈良阪という人のなにか

Arch Linux on WSL2

現状のWSL2にArch Linuxを入れようとするともろもろで動かないのでワークアラウンド紹介

Insider Previewなので今後も変わるだろうけれど、とりあえず現状のメモ。 Windowsのビルドは18963.1000。

Arch LinuxのWSL導入は主に以下の二つが知られている

zipでらくちん。appxは導入が少々面倒 github.com

appxだが導入がスクリプト化されていて楽 github.com

今回は後者のものを使った。

まずこれをWSL1でインストールする。少なくともappxの場合WSL2へのインストールはおそらくそもそも通らないし、万が一インストールが通ったとしても立ち上がらない。

インストールが通らないのは下記issueのとおりWSL2が圧縮フォルダ・暗号化フォルダの取り扱いに未対応であるからの模様。 github.com

これの回避方法としては、

まずWSL1でインストールしたArchLinuxのインストールフォルダC:/Users/<username>/AppData/Local/Packages/Archなんとか(appxの場合)にいき、 LocalStateフォルダなど直下のフォルダを全部選択して圧縮設定を解除する。このとき再帰的に子フォルダへは適用しなくて良いらしい。 さらに念の為?Archなんとかフォルダも同様にする。

さらにコマンドプロンプト

fsutil behavior set disableencryption 1
fsutil behavior set disablecompression 1

をしてNTFSのそれら設定を無効化してWindowsを再起動する。

この時点でおそらくWSL2への変換自体は通るようになっているが、通っても起動しない。

これは下記issueのとおりWSL2起動時に/bin/wslpathや/sbin/mount. drvfsを作成するという処理があるっぽいのだか、Arch Linuxは/binと/sbinがsymlinkなのでこれが失敗する模様。 github.com

これを回避するために/binと/sbinを一旦消し、WSLに変換してから復活させるという手順をとるが、/bin/mountなどは必要なようなのでリンクをはって回避する。

WSL1にて

rm /bin /sbin
mkdir /bin
cd /bin
find /usr/bin/ -maxdepth 1 | xargs -n 1 ln -s

WSL2に変換する

# yuk7版の場合はArchになるのでwsl -l -vなどで確認
wsl --set-version Arch_Linux 2

WSL2にて

cd /sbin
find /usr/sbin/ -maxdepth 1 | xargs -n 1 ln -s

元のissueでは/binや/sbinを実体にして/usr/binなどをsymlinkにする方法を取っているが、とりあえず今回そういう風にはしないようにした。

まあ一応使えるっぽいのでこれで様子を見る所存。

お役に立てば幸いです。