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にする方法を取っているが、とりあえず今回そういう風にはしないようにした。
まあ一応使えるっぽいのでこれで様子を見る所存。
お役に立てば幸いです。