https://wiki.archlinux.org/index.php/Linux_Containers を参考にして
# lxc-create -n playtime -t /usr/share/lxc/templates/lxc-archlinux
を実行し
... is corrupted (invalid or corrupted package (PGP signature))
と言われ正常に動作できなかった環境向けに
arch linuxをlxcホストとしてarch linuxをコンテナとして動かすという文章になります。
またこの文章を見る前に大変参考になる
http://hachulog.blogspot.jp/2013/03/lxcarchlinux.html
を参照することを強く推奨します。
(2016年 11月21日追記 )
実は先日新規にarch linuxのlxcホストサーバーを構築していて気がついたのですが、
どうもPGP関係のログの箇所で止まることに関しては
arch wiki https://wiki.archlinuxjp.org/index.php/Linux_Containers の通り
システムエントロピーが足りない(?)ことが原因している可能性があります。
裏でhavegedを起動してしまえばそもそも本文章のようなことをしないでと思われます。
(追記終わり)
(というか上記様の構築方法を参考にしようとしていたら現在だと少し後半の作業が不必要だったり差異があって
1つのまとまった文章としてこっそり後でどこからでも見れるものを用意しようとしてこの記事は存在します。)
悩ましいところとしては
# lxc-create -n playtime -t /usr/share/lxc/templates/lxc-archlinux がうまく動いてくれない?
/usr/share/lxc/templates/lxc-archlinux がおかしい?
lxc-create とか lxc-atattch が変?(少なくとも手元ではlxc-attachでpacmanするとPGP云々で正常ではない
という感じ
本文章では下記のような構成にてコンテナを動かします。
lxcの原理とか動かねぇとかしったこっちゃないがlxcを使ってみたい自宅ネットワーク管理者向け
macvlanを用いて既存のネットワークに直にコンテナを出す
初期設定を除き最終的にsshdでの管理を行う
lxcのコンテナの開始停止自動実行等はsystemdにて行う
コンテナの中のarch linuxは強引にarchをベアメタルインストールするときのようにpacstrapにてインストールする。
ホストの環境
%uname -r
4.1.2-2-ARCH
ホストで必要なパッケージ
# pacman -S arch-install-scripts lxc
コンテナ sample の作成
下記設定にてsampleを作成した場合
ホスト名 sample.localdomain
ネットワークインターフェース eth0
IPアドレス 192.168.1.128
ゲートウェイ 192.168.1.254
というsampleが出来上がります。
# cd /lxc/var/lib/lxc
# mkdir sample # mkdir -m 0755 /sample/rootfs # vi /lxc/sample/config
autodevを使わずにsample直下にはrootfsとconfigのみとなり、configにて/dev下をホワイトリスト形式で許可します。
(デバイスの箇所は http://hachulog.blogspot.jp/2013/03/lxcarchlinux.html 様そのままです。)
lxc.utsname にてホスト名
lxc.network.link にて、既に通信が可能なネットワークインターフェースを指定します。
/lxc/sample/config
lxc.utsname = sample.localdomain lxc.network.type = macvlan lxc.network.macvlan.mode = vepa lxc.network.flags = up lxc.network.link = lxcdmz0 lxc.network.name = eth0 lxc.network.ipv4 = 192.168.1.128/24 lxc.network.ipv4.gateway = 192.168.1.254# device configration lxc.pts = 1024 lxc.tty = 4
lxc.rootfs = /var/lib/lxc/sample/rootfs
sample/rootfs に pacstrapでシステムを入れます。# deny all devices lxc.cgroup.devices.deny = a # /dev/tty0..3 lxc.cgroup.devices.allow = c 4:0 rwm lxc.cgroup.devices.allow = c 4:1 rwm lxc.cgroup.devices.allow = c 4:2 rwm lxc.cgroup.devices.allow = c 4:3 rwm # /dev/tty lxc.cgroup.devices.allow = c 5:0 rwm # /dev/console lxc.cgroup.devices.allow = c 5:1 rwm # /dev/ptmx lxc.cgroup.devices.allow = c 5:2 rwm # /dev/null lxc.cgroup.devices.allow = c 1:3 rwm # /dev/zero lxc.cgroup.devices.allow = c 1:5 rwm # /dev/random lxc.cgroup.devices.allow = c 1:8 rwm # /dev/urandom lxc.cgroup.devices.allow = c 1:9 rwm # /dev/pts/* lxc.cgroup.devices.allow = c 136:* rwm # /dev/rtc lxc.cgroup.devices.allow = c 254:0 rwm # device configration lxc.pts = 1024 lxc.tty = 4
# pacstrap -i -d /var/lib/lxc/sample/rootfs/ base openssh sampleを起動してみます。 # systemctl start lxc@sample sampleの状態を確認します。
# systemctl status lxc@sample # lxc-ls -f # ping 192.168.1.128
動いている場合lxc-ls -fの結果が下記のようになります。
NAME STATE IPV4 IPV6 GROUPS AUTOSTART ------------------------------------------------------------ sample STOPPED 192.168.1.128 - - NO
(注意 macvlanの仕様により同じインターフェースからは通信できません。
例えば、NICが1つしかないホストでmacvlan使っている場合上記ではホストからping通りません。
デュアルNIC等で別なインターフェースから飛ばすか、別なマシンからpingテストして下さい)
sampleに乗り込みます。 # lxc-console -n sample -t tty1 => root パスワード無しでログイン sshで管理出来るようにするまで設定します。
rootのパスワード設定 # passwd
管理ユーザー等作成
# useradd -m hoge
# passwd hoge
時刻を日本にお住まいなら日本に設定 # timedatectl set-timezone Asia/Tokyo
journalctl -xeして確認するとsystemdがコンクリフトさせている箇所があるので /dev/nullへ対処
# ln -s /dev/null /etc/systemd/system/systemd-udevd.service # ln -s /dev/null /etc/systemd/system/systemd-udevd-control.socket # ln -s /dev/null /etc/systemd/system/systemd-udevd-kernel.socket # ln -s /dev/null /etc/systemd/system/proc-sys-fs-binfmt_misc.automount
sshdの自動起動 # systemctl enable sshd
sampleから抜けます。 # exit C-a qでsampleから抜けて、ホストマシンに戻る
諸々内部を荒らしたのでリスタート # systemctl restart lxc@sample
自動スタートさせたい場合 # systemctl enable lxc@sample
sshでアクセスしてみましょう # ssh hoge@192.168.1.128
念のためにログは確認してみましょう
# journalctl -xe
上記でsshdで管理出来るlxcのコンテナが少なくとも手元では動いていますが
既知の問題として
# lxc-attach -n sample 実行後
pacmanとかzshとかが動いてくれない
-> 何かあった場合はホストから # lxc-cosole -n sample -t tty1 して乗り込む
ということは確認しています。(sshdで管理しているので気にしないことにしていますが…)