systemd-nspawn Advent Calendar 2017 1日目の記事です。
今回はsystemd-nspawnでいろんなディストリビューションを動かしてみます。
準備
ホストはDebian9.2を使います
Debian系以外はDockerhubからイメージを持ってきます
# systemd-nspawnインストール
apt install systemd-container
# ファイル準備用パッケージ
apt install debootstrap
# イメージダウンロード用にDocker入れる
wget https://download.docker.com/linux/debian/dists/stretch/pool/stable/amd64/docker-ce_17.09.0~ce-0~debian_amd64.deb
dpkg -i docker-ce_17.09.0~ce-0~debian_amd64.deb
docker export $(docker create centos:7) > /tmp/centos7.tar
docker export $(docker create fedora:27 echo ok) > /tmp/fedora27.tar
debian 9
debootstrapで一発
cd /var/lib/machines
debootstrap --components=main --variant=minbase stretch debian9 http://ftp.jp.debian.org/debian/
systemd-nspawn -D ./debian9/ # コンテナ内へ
passwd # パスワード設定
apt update
apt install systemd # systemd入れる
exit # コンテナ内から脱出
systemd-nspawn -b -D ./debian9/ # boot
# rootで入れる(パスワードはさっき設定したやつ)
systemctl poweroff # 気が済んだら終わり
Ubuntu 16.04
ubuntuも同じ感じ
cd /var/lib/machines
debootstrap --arch amd64 xenial ./ubuntu1604 http://archive.ubuntu.com/ubuntu
vim ubuntu1604/etc/systemd/resolved.conf # DNS=のところを自分のDNSサーバのアドレスへ 例) DNS=8.8.8.8
systemd-nspawn -D ./ubuntu1604/ # コンテナ内へ
passwd # パスワード設定
systemctl enable systemd-resolved.service # DNS設定
ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
exit # コンテナ内から脱出
systemd-nspawn -b -D ./ubuntu1604 # boot
# rootで入れる(パスワードはさっき設定したやつ)
systemctl poweroff # 気が済んだら終わり
CentOS 7
systemd標準搭載なので楽
cd /var/lib/machines/
machinectl import-tar /tmp/centos7.tar # インポート
systemd-nspawn -D ./centos7 # コンテナ内へ
passwd # パスワード設定
exit # コンテナ内から脱出
systemd-nspawn -b -D ./centos7 # boot
# rootで入れる(パスワードはさっき設定したやつ)
systemctl poweroff # 気が済んだら終わり
Fedora 27
cd /var/lib/machines/
machinectl import-tar /tmp/fedora27.tar # インポート
systemd-nspawn -D ./fedora27 # コンテナ内へ
dnf install passwd
passwd # パスワード設定
systemctl unmask console-getty.service getty.target
systemctl enable console-getty.service getty.target
exit # コンテナ内から脱出
systemd-nspawn -b -D ./fedora27 # boot
# rootで入れる(パスワードはさっき設定したやつ)
systemctl poweroff # 気が済んだら終わり
まとめ
大体動く