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 件のコメント:

コメントを投稿

Vimの補完プラグインをインストール。その4

Vimの補完プラグインをインストール。その3 で、 ddc-tabnine が使えそうです、などと書いたのですが、早速やってみました。 まず、tabnineのバイナリを用意しないといけません。がどうにもTabNineのサイトがわかりにくいので、 tabnine-nvim にあるダ...