ArchLinuxでsystemd-nspawnを使ってみた。

wikiのやり方でUbuntuを入れることもできるが、今回はLXDのイメージをそのまま使う。

1. イメージのダウンロード

ここから使いたいディストリのrootfs.tar.xzをダウンロードする。

その後、ディレクトリを作成しそこに解凍する。(解凍する時は必ずsudoをつけること)

今回はUbuntu 22.04をダウンロードした。

$ curl https://us.lxd.images.canonical.com/images/ubuntu/jammy/amd64/default/20220826_07:42/rootfs.tar.xz -O
$ mkdir ubuntu
$ sudo tar xJvf rootfs.tar.xz -C ubuntu

Debian系ディストリのLXDイメージはこのままではFailed to read machine ID from container image: Invalid argumentとなって動かせないので、下の操作をする。

$ sudo rm ubuntu/etc/machine-id

2. chrootしてrootパスワードを設定する

$ sudo systemd-nspawn -D ubuntu
# passwd
# logout

3. 起動する

$ sudo systemd-nspawn -bD ubuntu

ここでログインプロンプトが表示されるのでrootで先程設定したパスワードでログインする。

名前解決ができない問題

コンテナの中で操作します

# vim /etc/systemd/resolved.conf

ここでDNS=1.1.1.1等を設定します。

# systemctl restart systemd-resolved
# ping 0sn.net
PING 0sn.net (104.21.73.60) 56(84) bytes of data.
64 bytes from 104.21.73.60 (104.21.73.60): icmp_seq=1 ttl=56 time=17.9 ms
64 bytes from 104.21.73.60 (104.21.73.60): icmp_seq=2 ttl=56 time=37.2 ms

名前解決ができるようになりました。