Solist Work Blog

ソフトウェアエンジニアの日々

Systemd-nspawnでCentosとDebianコンテナを作る

これは以前書いたsystemd-nspawnの記事の続編です。 ArchLinux環境にCentOSDebianのコンテナを作りましょう。 これでAnsibleのテストがいつでもできるようになります。 サーバーでよく使われているCentOSDebianがあれば必要十分だろうと思います。

CentOSのテスト用コンテナを作る場合


yum が必要なのですこぶる気持ち悪いですが、ArchLinuxにyumをインストールします。

yay -S yum
mkdir centos

すこぶる気持ち悪いですが、ArchLinux環境にCentOSのリポジトリを登録します。 CentOSのBaseインストールが終わったら不要なのでそれから消してもよいでしょう。 今回は別にArchLinuxでyumをたたかないだろうしそのままにしておきます。1

sudo vim /etc/yum/repos.d/centos.repo

[centos]
name=centos
baseurl=http://ftp.jaist.ac.jp/pub/Linux/CentOS/7/os/x86_64/
enabled=1

さっき掘ったcentosディレクトリにchroot環境でCentOS7をインストールします。

sudo yum -y --releasever=7 --installroot=~/centos groupinstall "Base"

仮想環境にCentosをインストール

Centosインストール中

Centosのパッケージをインストール

chrootしてCentOSにログインしてパスワードを設定します。

sudo chroot centos
passwd root

systemd-nspawnでログイン

sudo systemd-nspawn -b -D ~/centos

仮想環境にログインする

ここから CentOSコンテナに入ります。

yum install python openssh-server zsh bash-completion sudo curl

rootでAnsibleで利用するuserを作成 user名はansibleにする

useradd -m -G wheel -s /bin/zsh ansible
su - ansible
ssh-keygen -t rsa -b 4096
cd .ssh/
mv id_rsa.pub authorized_keys
chmod 600 authorized_keys
curl https://github.com/yourgithubid.keys >> ~/.ssh/authorized_keys ← Register public key registered with github

rootに戻って

systemctl enable sshd
systemctl start sshd

ホスト名を設定

hostname centos

vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 centos

vi /etc/pam.d/su

# コメントアウトを外す
auth required pam_wheel.so use_uid

sudo が使えるユーザ(グループ)を設定する

visudo

#Defaults    requiretty(コメントアウトしてあるか確認)

## User privilege specification
root ALL=(ALL) ALL
ansible ALL=(ALL) ALL

# Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL) ALL

## Same thing without a password
%wheel ALL=(ALL) NOPASSWD: ALL

これで ansible-playbook が通るようになりました。

Debianのテスト用コンテナを作る場合


Debianをインストールするためにすこぶる気持ち悪いですが、ArchLinuxに debootstrap,debian-archive-keyringをインストールします。

sudo pacman debootstrap
yay -S debian-archive-keyring

Debian stretchをchroot環境でdebianディレクトリにインストールします。

mkdir debian
sudo debootstrap stretch debian http://ftp.jaist.ac.jp/pub/Linux/debian/

仮想環境にDebianをインストール

Debianインストール中

Debianのパッケージをインストール

chrootでDebianにログインしてパスワードを設定する

sudo chroot debian
passwd root

systemd-nspawnDebianにログイン

sudo systemd-nspawn -b -D ~/debian

仮想環境にログインする

ここからDebianコンテナに入ります。

apt-get install python openssh-server zsh bash-completion sudo curl

useradd -m -G sudo -s /bin/zsh ansible
su - ansible
ssh-keygen -t rsa -b 4096
cd .ssh/
mv id_rsa.pub authorized_keys
chmod 600 authorized_keys
curl https://github.com/yourgithubid.keys >> ~/.ssh/authorized_keys ← Register public key registered with github

root に戻って

systemctl enable ssh
systemctl start ssh

ホスト名を設定(debian とする)

hostname debian

vi /etc/hosts

127.0.0.1       localhost debian

sudoが使えるユーザ(グループ)を設定する

update-alternatives --config editor

visudo

#Defaults    requiretty(コメントアウトしてあるか確認)

## User privilege specification
root ALL=(ALL) ALL
ansible ALL=(ALL) ALL

# Uncomment to allow members of group wheel to execute any command
%sudo ALL=(ALL) ALL

## Same thing without a password
%sudo ALL=(ALL) NOPASSWD: ALL

systemd-nspawnはLinuxカーネルをホストのArchLinuxと共用するせいか iptableなどはAnsibleでうまくテストできなかったので注意してください。


  1. 実のところ壊れそうでめんどうだったのでArchLinux環境でyumをたたく気になれません [return]