masablog

Keep it simple, stupid

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

tech

Ansible のテスト環境を作りたい


以前書いたsystemd-nspawn で Archlinux 環境にコンテナを作る記事の続編

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"

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/

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]

9 Feb 2017 #linux #Archlinux #systemd #ansible

Related links
  • phpmyadminをdockerで使う
  • Ansible の handlers で複数の処理がしたい
  • Makefile で dotfiles を作ろう
  • ansible を快適にするコマンドを作る
  • github のリポジトリを作って作業をはじめるコマンド
  • markdown で全てのドキュメントを書くには?
  • これだけ覚えておけばいい Arch Linux のパッケージ管理
  • linux で新しいことをやる意欲を削がないために必要なこと
  • docker ではなく systemd-nspawn で作る web 開発環境