Manjaro Fluxbox 15.12_x86-64のsystemd-nspawnでFedora25 Serverのコンテナを構築してみた
金曜日の夜に仕事で詰まってる間にsystemd-nspawnの使い方
の復習をしていて、とても分かりやすく解説しているサイト
を見つけたので、その方法に則って実際にやってみた。
たしかにその手順通りにやると、2時間で構築できて感激した。
なぜFedora25 Serverなのか?っていうと、32bitの開発環境
で使っていたFedora24 Workstation LXDEがCentOSより
使いやすかったことと、NginxとかBitcoinとか試してみたい
ことがあるってのとUbuntuより軽かったからという
安易な理由。
[構築手順]
1. 依存関係を解決するために、とりあえずdnfインストール。
% yaourt -S dnf
yaourtだからってこともあるし、依存関係が複雑ってのもあるし
作業時間のほとんどを、このビルドで取られる。
2. dnfの設定。
% sudo mkdir -p /etc/yum/repos.d
% sudo vim /etc/yum/repos.d/fedora.repo
2) fedora.repoの書き方
(ex) Fedora25 Serverの場合
[fedora]
name=fedora
baseurl=http://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/25/Server/x86_64/os/
enabled=1
3) リポジトリを認識させる
% sudo dnf repolist
3. chroot環境の構築。
% mkdir fedora_container
% sudo dnf groupinstall core --nogpgcheck --installroot=$HOME/fedora_container
4. rootパスワードの設定。
FedoraはUbuntu同様、空パスワードでは許可されないのでchrootで事前設定する。
% sudo chroot fedora_container
[root@manjaro-fluxbox /]# passwd root
ユーザー root のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
5. コンテナの起動。
コンテナ起動の際に実行するコマンドとオプション
% sudo systemd-nspawn -b -D fedora_container -n
-b:コンテナの起動
-D:コンテナのrootディレクトリ
-n :ホストとコンテナを繋ぐプライベートネットワークを設定
6. ネットワーク接続。
コンテナの中から外に向かってネットワークを繋ぐ
-> systemd-networkd を利用すると簡単。
-> コンテナ内でサービスを有効にして、resolv.conf のシンボリックリンク
を張ると繋がるようになる。
-> 但し、ホスト側でもsystemd-networkdが有効になってる必要がある。
1) ホスト側のsystemd-networkdが有効か確認。
% sudo systemctl status systemd-networkd
● systemd-networkd.service - Network Service
Loaded: loaded (/usr/lib/systemd/system/systemd-networkd.service; disabled; vendor preset: enabled) --- disabled = 無効
Active: inactive (dead)
Docs: man:systemd-networkd.service(8)2) disabled となっているので、有効にする。
% sudo systemctl enable systemd-networkd
Created symlink /etc/systemd/system/multi-user.target.wants/systemd-networkd.service → /usr/lib/systemd/system/systemd-networkd.service.
Created symlink /etc/systemd/system/sockets.target.wants/systemd-networkd.socket → /usr/lib/systemd/system/systemd-networkd.socket.3) 有効になったか確認。
% sudo systemctl status systemd-networkd
● systemd-networkd.service - Network Service
Loaded: loaded (/usr/lib/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled)
Active: active (running) since 土 2016-11-26 15:32:22 JST; 21h ago
Docs: man:systemd-networkd.service(8)
Main PID: 447 (systemd-network)
Status: "Processing requests..."
Tasks: 1 (limit: 4915)
CGroup: /system.slice/systemd-networkd.service
└─447 /usr/lib/systemd/systemd-networkd4) コンテナ側のサービスを有効にする。
# systemctl enable --now systemd-networkd systemd-resolved
# ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
7. コンテナの終了。
コンテナ側でpoweroffコマンドを実行。
[root@fedora_container ~]# poweroff
Sending SIGTERM to remaining processes...
Sending SIGKILL to remaining processes...
Process 191 (plymouthd) has been marked to be excluded from killing. It is running from the root file system, and thus likely to block re-mounting of the root file system to rea d-only. Please consider moving it into an initrd file system instead.
Powering off.
Container fedora_container has been shut down.
参考サイトの情報通りに、作業しただけなので実は詳細に設定しないと動かない
って部分も多々あると思うので、それはまた次の機会に。
[参考サイト]