gentooでsystemd-nspawnしてみた
ここのところずっとSolaris Zoneばかりを触っていて、Linux系コンテナから離れていたのですが
最近、systemd-nspawnなるものを知ってしまい、どんなものかと触ってみた。
CentOS7をsystemd-nspawnで動かしてみる
gentooのカーネルは、bridge系、cgroups系、btrfs系はあらかじめ入れたカーネルで起動しておく、この辺はハショリマス
rpmのインストール
luaとcapsを入れておく
ugui7 ~ # USE="lua caps" emerge app-arch/rpmでbtrfs
ugui7 ~ # emerge sys-fs/btrfs-progs
yumのインストール
ugui7 ~ # emerge sys-apps/yumホストOSのyumのディレクトリにCentOS-Base.repoを設置する、適当なCentOSから持ってきても動くはず
* /etc/yum/repos.d/CentOS-Base.repo
# CentOS-Base.repo # # The mirror system uses the connecting IP address of the client and the # update status of each mirror to pick mirrors that are updated to and # geographically close to the client. You should use this for CentOS updates # unless you are manually picking other mirrors. # # If the mirrorlist= does not work for you, as a fall back you can try the # remarked out baseurl= line instead. # # [base] name=CentOS-$releasever - Base mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #released updates [updates] name=CentOS-$releasever - Updates mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/ gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that may be useful [extras] name=CentOS-$releasever - Extras mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/ gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/ gpgcheck=0 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
yumがpython2系でしか動かないので切り替える
ugui7 ~ # eselect python set 1 ugui7 ~ # eselect python list Available Python interpreters: [1] python2.7 * [2] python3.4 ugui7 ~ #
CentOS7のインストール
btrfsでsubvolumeを作成、あってるかどうかはわからない
ugui7 ~ # btrfs subvolume create /var/lib/machines/centos7 Create subvolume '/var/lib/machines/centos7' ugui7 ~ #
subvolumeへcentos7をインストール
ugui7 ~ # yum -y --releasever=7 --nogpg --installroot=/var/lib/machines/centos7 --disablerepo='*' --enablerepo=base install systemd yum passwd emacs-nox iputils iproute NetworkManager ... ... sqlite x86_64 3.7.17-8.el7 base 393 k systemd-libs x86_64 219-19.el7 base 356 k trousers x86_64 0.3.13-1.el7 base 289 k tzdata noarch 2015g-1.el7 base 431 k ustr x86_64 1.0.4-16.el7 base 92 k util-linux x86_64 2.23.2-26.el7 base 1.9 M xz x86_64 5.1.2-12alpha.el7 base 200 k xz-libs x86_64 5.1.2-12alpha.el7 base 102 k yum-metadata-parser x86_64 1.1.4-10.el7 base 28 k yum-plugin-fastestmirror noarch 1.1.31-34.el7 base 30 k zlib x86_64 1.2.7-15.el7 base 89 k トランザクションの要約 ========================================================================== インストール 5 パッケージ (+159 個の依存関係のパッケージ) 合計容量: 108 M 総ダウンロード容量: 91 M インストール済み容量: 446 M Downloading packages: (1/139): emacs-common-24.3-18.el7.x86_64.rpm | 20 MB 00:02 (2/139): emacs-filesystem-24.3-18.el7.noarch.rpm | 58 kB 00:00 (3/139): emacs-nox-24.3-18.el7.x86_64.rpm | 2.4 MB 00:01 (4/139): expat-2.1.0-8.el7.x86_64.rpm | 80 kB 00:00 (5/139): file-libs-5.11-31.el7.x86_64.rpm | 339 kB 00:00 (6/139): filesystem-3.2-20.el7.x86_64.rpm | 1.0 MB 00:00 (7/139): findutils-4.5.11-5.el7.x86_64.rpm | 559 kB 00:00 (8/139): gawk-4.0.2-4.el7.x86_64.rpm | 873 kB 00:00 (9/139): gdbm-1.10-8.el7.x86_64.rpm | 70 kB 00:00 (10/139): glib2-2.42.2-5.el7.x86_64.rpm | 2.2 MB 00:01 (11/139): glibc-2.17-105.el7.x86_64.rp (35%) 63% [================== ] 844 kB/s | 2.3 MB 00:01 ETA ... ... shared-mime-info.x86_64 0:1.1-9.el7 sqlite.x86_64 0:3.7.17-8.el7 systemd-libs.x86_64 0:219-19.el7 trousers.x86_64 0:0.3.13-1.el7 tzdata.noarch 0:2015g-1.el7 ustr.x86_64 0:1.0.4-16.el7 util-linux.x86_64 0:2.23.2-26.el7 xz.x86_64 0:5.1.2-12alpha.el7 xz-libs.x86_64 0:5.1.2-12alpha.el7 yum-metadata-parser.x86_64 0:1.1.4-10.el7 yum-plugin-fastestmirror.noarch 0:1.1.31-34.el7 zlib.x86_64 0:1.2.7-15.el7 完了しました! ugui7 ~ #
passwdの設定
rootのパスワードを設定する
ugui7 ~ # systemd-nspawn -D /var/lib/machines/centos7 # passwd root ....machinectl loginで入れない場合は以下の設定でpts/0を追記する
guest $ echo "pts/0" >> /etc/securetty
コンテナを起動
コンテナを起動してログインしてみる、やっぱカーネルはgentoo、なんかウケる、「Ctrl + ]」の3連発でコンテナから脱出できる
ugui7 ~ # machinectl start centos7 ugui7 ~ # machinectl login centos7 Connected to machine centos7. Press ^] three times within 1s to exit session. CentOS Linux 7 (Core) Kernel 4.4.26-gentoo on an x86_64 centos7 login:
ネットワークの設定がよくわかってない
gentooの設定がよくわからなかった、bridgeで固定IPを設定したが設定の仕方が違う感じがする、だれか標準的なやり方教えて...
* /usr/lib64/systemd/network/80-container-ve.network
「Address=...」をコメントアウト
# This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. [Match] Name=ve-* Driver=veth [Network] # Default to using a /28 prefix, giving up to 13 addresses per container. # Address=0.0.0.0/28 LinkLocalAddressing=yes DHCPServer=yes IPMasquerade=yesコンテナをstartして、vethをbridgeへaddifする
ugui7 ~ # brctl addif br0 ve-centos7ゲストの中に入ってhost0を確認するとIPがついてる...DHCPになっているけどよくわからん
-bash-4.2# ip a 1: lo:mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: host0@if5: mtu 1500 qdisc noqueue state UP qlen 1000 link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 192.168.0.111/24 brd 192.168.0.255 scope global dynamic host0 valid_lft 86402sec preferred_lft 86402sec inet6 xxxx::xxxx:vvvv:xxxx:xxxx/xx scope link valid_lft forever preferred_lft forever -bash-4.2#
btrfsをつかってクローンしてみる
まず止める、いいかどうかは不明
ugui7 ~ # machinectl poweroff centos7btrfsのcloneでコンテナをファイルシステムましcloneする
ugui7 ~ # machinectl clone centos7 centos7-c ugui7 ~ # btrfs sub list /var/lib/machines/ ID 261 gen 1102 top level 5 path srv ID 262 gen 10687 top level 5 path var/lib/machines ID 291 gen 10687 top level 262 path centos7 ID 292 gen 10688 top level 291 path centos7/var/lib/machines ID 293 gen 10688 top level 262 path centos7-c ID 294 gen 10688 top level 293 path centos7-c/var/lib/machines ugui7 ~ #
ugui7 ~ # machinectl start centos7 ugui7 ~ # machinectl start centos7-c ugui7 ~ # machinectl list MACHINE CLASS SERVICE centos7 container nspawn centos7-c container nspawn 2 machines listed. ugui7 ~ #Linux系のコンテナまわりの違いが、わからない... LXCとかぶるんだけど、勉強し直しか、まぁでも簡単に入れられるので、gentoo 万歳