DockerイメージからWSLイメージを作る

WSL1/2環境としてArchWSLを愛用してきたけど、そろそろ自分でWSLイメージを作ってみたいな。という思いがあり、公式ページのドキュメントに従って自分のイメージを作ってみようとしたのだが、いかんせん、Visual Studioの知識がなさすぎて、Distro Launcherのビルドすらままならない😭 Visual Studio 2019、installできるcomponentの選択肢が多過ぎてなにが必要なのか、とかが全然わからない。まじで難しいなぁ。ビルドしようとするときに足りてなかったら教えてくれる、とかそういう心づかいが欲しい…。

それでしばらく調べてみたら、Distro Launcherを使わずにイメージを作ってる人を発見:

Custom WSL Image - Spatacoli

なんだ、 wsl --import なんていう方法もあるんだ。しかも、dockerイメージからファイルをとってきていて賢い。 ArchLinuxのdockerイメージはArchLinux公式がメンテしてるから安心だし。

そんなわけで作ってみた。

ArchLinux on WSL2

イメージ作成手順はリンク先の通りだから割愛。

Distro Launcherを使っていないイメージの場合、デフォルトユーザーをregistryに保存したりということができないので、 wsl -u typester のように毎回ユーザーを指定する必要があるが、Windows Terminalの設定にそれを書いてしまえば意識しないですむのでまったく問題ない。 あと、この記事でWindows Terminalの設定でタブバーのiconを自由に変更できるのを知ったので、真似してArchLinuxのアイコンにしてみたところなかなか満足度がたかくなった。おすすめ。

以下追加で作業したこと。

systemd (WSL2)

systemdはArchWSLのドキュメントからもリンクされているが、 https://github.com/sorah/subsystemctl を使うと簡単。

Windows Terminalを起動後、

sudo -E subsystemctl start
subsystemctl shell

というおまじないをしてる。Distro Launcher方式なら起動時に自動で実行されるようにできるかもだが、いまのままでも基本一度立ち上げたらずっと立ち上げっぱなしなのであまり問題ではない。

fakeroot-tcp (WSL1)

ArchLinuxはpackageの作成にfakerootという仕組みをつかうのだが、これがWSL1だと動かないので、代わりにfakeroot-tcpというのを使う必要がある。 これは必須というわけではないが、なにかAURのパッケージを使う予定があるなら必要になる。

しかし、普通にAURでfakeroot-tcpパッケージを作ろうとするとそれにfakerootが必要で詰む。ので、一旦 makepkg でfakeroot-tcpのパッケージをつくるのはやめて、

  1. 一時的にどこかあとで消せるところに普通に自前でmakeして入れる[1]
  2. そこにパスを通すか /usr/sbin/fakeroot をそこへのsymlinkに置き換える
  3. これでfakerootできるようになるので、あらためて makepkg -si して入れ直す
  4. 一時的にいれてたのを消す

みたいな感じでやる必要があってめんどくさい。このらへんの作業はTermuxArchと同じなので自分的には慣れてしまっているが、最初はかなり苦労した覚えがある😅

あとはほんとに普通に使える。先人の知恵に感謝。