Plamo Linux 4.73 で lxc 0.7.2 (後編)
前編 で書いたように,普通に lxc のコンテナを起動すると,母艦の Desktop 環境上でターミナルが開きません.これは debian や ubuntu の lxc 環境では起きません.コンテナ側の処理依存で,debian じゃない別の環境だと問題はないかも知れないけど,よくわかりません.
ターミナルプログラムが動かないということで,推理としては /dev/ptmx とか /dev/pts/ あたりの権限が,コンテナを動かした影響で奪われた,という想像をしてみました.
そこで出てくるのが lxc を動かすのに必要だったカーネルオプション "CONFIG_DEVPTS_MULTIPLE_INSTANCES" です.通常はターミナルが /dev/ptmx を開いて,/dev/pts 以下のファイルディスクリプタが返されますが (man pts 参照),このオプションをオンにすると,/dev/pts/ptmx というのが作成されます.デフォルトだと権限なしで.
c--------- 1 root root 5, 2 Sep 21 17:03 ptmx
おそらく,作成されるだけで,何も設定をしないと /dev/ptmx が使われるのでしょうけど,このままだと,母艦とコンテナの擬似端末が共有されたままです.コンテナから母艦の /dev/pts/ 以下の端末に出力が出来たりします.
そこで,母艦とコンテナの擬似端末を独立させる設定をしてみよう,それでこそ本当のコンテナだ,って事でやってみました.母艦とコンテナの擬似端末を独立させることで,母艦側への影響がなくなるだろう,という算段です.
devpts ファイルシステムのマウント
Plamo デフォルトでは /etc/fstab で
none /dev/pts devpts gid=5,mode=620 0 0
のようにマウントされています.これにオプションを付けて,
none /dev/pts devpts gid=5,mode=620,newinstance,ptmxmode=0666 0 0
とします.このあたりはカーネル付属の devpts.txt を参照してください.この状態だと owner, group, other いずれも書き込み,読み込み権限が与えられた状態で /dev/pts/ptmx が作成されます.
これだけでは母艦側の ptmx が開けませんので,
# rm -f /dev/ptmx # ln -s /dev/pts/ptmx /dev/ptmx
とリンクを貼ります.
この状態で "lxc-start" コマンドを実行して,コンテナを起動すると,無事母艦でも gnome-terminal がエラーなく実行されました!!
lxc-start 実行前の /dev/pts
Desktop環境上で gnome-terminal を一つ実行しています.
# ls -l total 0 crwx-w---- 1 root tty 136, 0 Sep 21 17:14 0 crw-rw-rw- 1 root root 5, 2 Sep 21 17:14 ptmx
lxc-start 実行後 (母艦)
同じく.おそらくコンテナ用の擬似端末が開かれているのかと.
ls -l 合計 0 crw--w---- 1 karma tty 136, 0 9月 21日 17:16 0 crw------- 1 root root 136, 1 9月 21日 17:17 1 crw------- 1 root root 136, 2 9月 21日 17:17 2 crw------- 1 root root 136, 3 9月 21日 17:17 3 crw------- 1 root root 136, 4 9月 21日 17:17 4 crw------- 1 root root 136, 5 9月 21日 17:17 5 crw-rw-rw- 1 root root 5, 2 9月 21日 17:18 ptmx
コンテナ内の /dev/pts
lxc-console でつないでみた状態です.母艦で見えている擬似端末は見えていません.
debian:/dev/pts# ls -l total 0 crw-rw-rw- 1 root root 5, 2 Sep 21 12:16 ptmx