Solist Work Blog

List of all blog posts

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

Archlinux環境にCentosとDebianのコンテナを作る。 これでAnsibleのテストがいつでもできるようになります。 サーバーでよく使われているCentosとDebianがあれば必要十分だろうと思う。

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


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

yaourt 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
yaourt -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-nspawnでDebianにログイン

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]