WSLにArchLinuxをインストールしてみる。

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

などとして設定することもできるようです。

0 件のコメント:

コメントを投稿

Windowsでシンボリックリンクを試してみる。

きっかけは、1つのファイルを別の名前で起動したら違う動きになるようなスクリプトを書く、でした。  busybox なんかでは、同じ実行形式ファイルの名前を、lsにすればlsと同じ、cpとすればcpと同じ動作をするようにしてますが、Pythonスクリプトでそれと同じように argv...