apt よりも慣れ親しんだ pacman を使いたい!という理由で、ArchLinux を WSL にインストールしてみます。WSL 2 までのインストールが終わっているということを前提条件とします。方針としては Ubuntu をインストールしてから ArchLinux に置き換えるという方向です。
Docker on WSL2をやってみる。でちょっと触れたのですが、
WSL に Ubuntu をインストールした上で Arch に切り替える、というような方法の中で触れられている lxrun が 2004 ではサポートされなくなっているようです。
ディストリビューションをダウンロードしてインストールする場合には、
Manually download Windows Subsystem for Linux distro packagesにコマンドラインでのインストール方法があるので、そこからダウンロードし、そのページと上記のページ、およびArchLinux Wikiの日本語版にあるWSL にインストールを読み合わせながら行います。
手を抜くためにここでは Store からインストールしてしまいますが、手動でやりたいときには以下のようにします。
まず、ディストリビューションの appx イメージをダウンロードします。ここではUbuntu 18.04 を選びます。20.04 では、/bin
などがシンボリックリンクになっていて、後工程での置き換えがうまくいきません。
ダウンローが終わったら PowerShell を起動して、ダウンロードしたディレクトリで次のようにします。このとき、Docker Desktop が起動していると Docker 側にインストールされてしまうので、Docker Desktop は必ず終了しておきます。
Add-AppxPackage .\Ubuntu_1804.2019.522.0_x64.appx
インストールが終わったら bash を起動します。Win+R で bash と入力すると bash が起動するか、スタートメニューにある Ubuntu アイコンをクリックして起動します。
初回起動時には新規ユーザの作成を自動で求められますが、いきなりブレークして一旦シェルに抜けます。再度起動して正常にプロンプトが出るのを確認してから、すべての bash を終了しておきます。
PowerShell またはコマンドプロンプトを開き、wsl -l -v
してディストリビューションとして "Ubuntu-18.04" が、バージョンは "2" であることを確認します。WSL 2までインストールされ、WSL のデフォルトバージョンが 2 に設定されているはずなのでこれは当然の動作ですが、ArchLinux に置き換えるためにこの VHDX イメージをプレーンに展開します。
wsl --set-version Ubuntu-18.04 1
すると VHDX からプレーンなディレクトリ構造に展開されます。
展開が終わったら再度 bash を起動して、ArchLinux の bootstrap イメージを https://mirrors.kernel.org/archlinux/iso/latest/あるいはhttps://www.archlinux.jp/download/にあるミラーサイトからダウンロードします。ここでは JAIST からダウンロードさせてもらいます。
wget http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/iso/2020.09.01/archlinux-bootstrap-2020.09.01-x86_64.tar.gz
ダウンロードが終了したら、tar.gz をほどきます。
tar zxvf archlinux-bootstrap-2020.09.01-x86_64.tar.gz
するとこんな感じになっています。
uzi:~# ls -la
total 165680
drwx------ 3 root root 4096 Sep 13 04:48 .
drwxr-xr-x 20 root root 4096 Sep 12 10:11 ..
-rw------- 1 root root 11 Sep 13 04:31 .bash_history
-rw-r--r-- 1 root root 169638434 Sep 13 04:47 archlinux-bootstrap-2020.09.01-x86_64.tar.gz
drwxr-xr-x 16 root root 4096 Sep 13 04:48 root.x86_64
uzi:~#
vi か nano を利用して root.x86_64/etc/pacman.d/mirrorlist
のサーバ指定を変更します。ここでは WorldWide と Japan だけ行頭のコメントを外して保存しておきます。
##
## Arch Linux repository mirrorlist
## Generated on 2020-08-01
##
## Worldwide
Server = http://mirrors.evowise.com/archlinux/$repo/os/$arch
Server = http://mirror.rackspace.com/archlinux/$repo/os/$arch
Server = https://mirror.rackspace.com/archlinux/$repo/os/$arch
root.x86_64/etc/resolv.conf
を適切に編集するか、自動生成させるようにします。自動生成させるようにするには、
echo "# This file was automatically generated by WSL. To stop automatic generation of this file, remove this line." > ~/root.x86_64/etc/resolv.conf
とするとよいようです。あるいは
nameserver 8.8.8.8
nameserver 8.8.4.4
みたいに決め打ちにしておきます。
ここで bash を(すべて)閉じます。一応ディストリビューションがきちんと停止しているかどうかを確認します。
wsl -l -v
NAME STATE VERSION
* Ubuntu-18.04 Stopped 1
Running になっている場合には、数秒待ってから再度確認すれば Stopped になっていると思います。
次に Explorer を開いて、%localappdata%\Packages
をURIバーにペーストして移動します。そこにある CanonicalGroupLimited.Ubuntu18.04onWindows_*
というフォルダを探してそこに移動します。
もう一枚 Explorer を開いて同じ場所に移動します。一枚ではLocalState\rootfs
を開き、もう一枚では ArchLinux を展開したLocalState\rootfs\root\root.x86_64
を開きます。
Ubuntu 側の bin、etc、lib、lib64、sbin、usr、var を削除し、ArchLinux側から同じディレクトリを移動します。コピーだとシンボリックリンクが壊れるため、コピーではなく必ず移動します。
移動が終わったら、ArchLinux をセットアップします。
# pacman-key --init
# pacman-key --populate archlinux
# pacman -Syyu base base-devel
ついでにいうと、vi や nano といったエディタは削除されてしまっているようなので、お好みのエディタをインストールしたほうがいいでしょう。
最後に root 以外のユーザを作成しておきます。
# useradd -m -G wheel -s /bin/bash chiyo
# passwd root
# passwd chiyo
ここで、bash あるいは Ubuntu アイコンから起動した場合のデフォルトユーザは root のままですが、wsl.exe の引数で指定することができます。適宜ショートカットかバッチファイルなどを作成しておくといいでしょう。
あるいは、コマンドプロンプトから
ubuntu1804 config --default-user chiyo
などとして設定することもできるようです。