Arch LinuxをWSL2にインストール

WindowsでGCCやClangを使うためにMSYS2を使っていると、そのパッケージ管理システムのpacmanを使うことになるのだが、コマンドラインオプションがまるで覚えられないので、pacmanをパッケージ管理システムに使う元祖的なArch LinuxをWSL2で使ってみることにした。

使って見ると割とシンプルで軽量だなと思うので、しばらく使っていこうと思っている。(まあ私の使い方ではほぼGUIは使わないので、ディストリビューションは何でもいいのだが、Ubuntuとかだとちょっと大きすぎる気はする。)

配布物のダウンロードとWSL2へArch Linuxインストール

基本的には公式サイトの解説であるInstall Arch Linux on WSLを読みつつ進める。うちの環境は

PS> wsl --version

の実行結果は以下の通り。

WSL バージョン: 2.4.13.0
カーネル バージョン: 5.15.167.4-1
WSLg バージョン: 1.0.65
MSRDC バージョン: 1.2.5716
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.26100.3775

Cドライブの空き容量もあるし、CドライブにはOSとアプリと最低限のファイルしか置いていないので、公式サイトに書かれている方法でArch Linuxのインストールを行った。

PS> wsl --install archlinux

初期設定と必須ツールのインストール

pacmanの初期設定を行って、必要なツールをインストール。シェルはzsh、sudoは使わずにOpen Doasを用いる。あとはいったん最低限必要な物。

$ pacman-key --init
$ pacman-key --populate archlinux
$ pacman -Syyu base base-devel git wget vi zsh reflector opendoas openssh

ミラー情報の書き換え

reflectorを用いてミラー情報の書き換えに使った。実際は何度かインストールを行ったので、reflectorの出力を別な場所に保管しておいて、インストールした環境に上書きした。(従って、上の例ではpacmanでインストールしているが、今のシステムにはreflectorはインストールされていない。)

$ reflector --country Japan --age 12 --protocol https --sort rate --save /etc/pacman.d/mirrorlist

timezoneとLocaleの設定

Timezoneは下記tzselectで「Asia」 → 「Japan」を選択。あと/usr/share/zoneinfo/Asia/Tokyoのシンボリックリンクを/etc/localtimeとして張る。

$ tzselect
$ ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

Localeの設定は/etc/locale.genの中の、’en_US.UTF-8 UTF-8’と’ja_JP.UTF-8 UTF-8’が含まれる行をアンコメントして、locale-genを実行する。

$ locale-gen

デフォルトロケールは/etc/locale.confでen_US.UTF-8に設定しておく。(一般ユーザーはLANG=ja_JP.UTF-8で良いと思うが、rootはLANG=en_US.UTF-8かLANG=Cが良さそう。)

Open doas

Doasの設定は/etc/doas.confで行う。

$ vi /etc/doas.conf

wheelグループに以下のような設定を行った。外向けに設置する場合はnopassは設定しない方が良いかもしれない。(WSL2で使う分には問題ないだろう・・・)

permit nopass setenv {PATH SSH_AUTH_SOCK PAGER LESS LESSCHARSET} :wheel

あとはファイルの所有者とパーミッションを設定して動作チェック。

$ chown -c root:root /etc/doas.conf
$ chmod -c 0400 /etc/doas.conf
$ if doas -C /etc/doas.conf; then echo "config ok"; else echo "config error"; fi

これでOKが出たらまともに動作する。

WSL関係の設定

/etc/wsl.confに必要な設定を書き込む。デフォルトのユーザー名をhogehogeとするとこんな感じ。Windowsのパスは反映しないようにする。

# vi /etc/wsl.conf
[boot]
systemd=true

[user]
default=hogehoge

[interop]
appendWindowsPath=false

ユーザー追加など

hogehogeグループのhogehogeと言うユーザーを足す。適当に読み替えること。

$ groupadd -g 1000 hogehoge
$ useradd -m -g hogehoge -G wheel -u 1000 -s /bin/zsh -d /home/hogehoge hogehoge
$ passwd
$ passwd hogehoge

X11

WSLgを用いてGUIを動かすための設定。これも上記のサイトに書かれているので、書かれているとおりにシンボリックリンクをシェルの設定追加。

$ ln -sf /mnt/wslg/.X11-unix/* /tmp/.X11-unix/
$ ln -sf /mnt/wslg/runtime-dir/wayland-0* /run/user/user_uid/

追加パッケージのインストール

$ doas pacman -S cmake emacs starship eza uv less uchardet man-db man-pages texlive-langjapanese texlive

ざっくり最低限必要そうな物を。

Emacsのパッケージ群はinit.elでleaf.elを用いてインストールしている。

シェルのプロンプトにはstarship、lsの代わりに使っているezaをインストール。このあたりはrust製の新しいツールですね。

Pythonはuvで仮想環境作成とパッケージ管理を行っている。これもrust製のツール。Pythonのパッケージ管理をPythonで書かれたツールでやるとPythonのアップデート時に恐ろしく面倒なことが起こるので、もうuvで最終形態だろうと思っている。ただしこの環境でPythonを使うかどうかはよく分からない。入れておくだけ。

あとお試しでTeXLiveをpacmanで入れてみた。うまく使えるだろうか。

いったんこんなところ。あとユーザーの環境設定ファイルは私の場合はプライベートなGit repositoryで管理しているので、適当にcloneしてシンボリックリンクを張りまくって設定完了。

あとは細々なことは必要に応じて別の機会に書いていくことにする。(というか、ここまでしかやっていない。)