Debianのstart-stop-daemonがLXC対応じゃないのでいじってたら何故かkFreeBSDも触ることになった話...
-
Upload
genta-iha -
Category
Technology
-
view
731 -
download
0
Transcript of Debianのstart-stop-daemonがLXC対応じゃないのでいじってたら何故かkFreeBSDも触ることになった話...
2016/02/27(Sat), 38th CBUG meeting
Debian の start-stop-daemon が LXC 対応じゃないのでいじってたら何故か kFreeBSD も触ることになった的な話Genta IHA
38th CBUG Meeting
LXC とは• Linux の jail っぽいあれ。 namespaces(7) 使う。詳細 google
• IPC namespace• network namespace (FIB とか分離するやつ )• pid namespace — pid_namespaces(7)• user namespace (uid / gid 分離 )• uts namespace ( ホスト名 / NIS domain name分離 )
2
← 今日この話
38th CBUG Meeting
問題• LXC コンテナを 100 個くらい上げました• 監視したくなり、 LXC ホスト側で snmpd 上げました• コンテナも監視したくなり、 snmpd 上げました• LXC ホスト側で /etc/init.d/snmpd restart しました→ LXC コンテナ内の snmpd が全滅しました (!)
3
38th CBUG Meeting
なぜか• /etc/init.d/snmpd で呼ばれている start-stop-daemon が PID namespace 分離に対応していなかった
• /etc/init.d/snmpd restart すると、 killall snmpdする• コンテナ内のプロセスも、親からは見えるので、もれなく滅亡する
4
38th CBUG Meeting
回避策• /sbin/start-stop-daemon に — pid-file <FILE_NAME> を指定すると、その PID だけ相手にしてくれるので回避できる ( 何も指定しないと killall 相当をしてくれる )• 手元では /etc/init.d/snmpd を修正して回避した
• start-stop-daemon が PID namespace 分離に対応するのが正しい気がする (FreeBSD の /etc/rc.subrは Jail ID 見てる )
5
38th CBUG Meeting
パッチ• dpkg という名前の dpkg パッケージに start-stop-daemon 入ってる
• ちょっといじったら、 Linux 対応 (/proc/<PID>/ns/pid も見るだけ ) のものはできた
• が、コード中に不穏な文字列が…• #if defined (OSFreeBSD)
6
38th CBUG Meeting
GNU/kFreeBSD 用だった• kFreeBSD も触らなければならないか… ( 入れた )• /proc/<PID>/ns/pid は見えない ( カーネルはFreeBSD だし pid namespace 分離は Linux カーネルの機能だし当然 )
• あぁこれ jail id 取らないとだめなやつや…
7
38th CBUG Meeting
s-s-d を PID 名前空間対応する
8
Linux には jail id という概念は存在しない ( つらい )「 /proc/PID/ns/pid の inode が同じなら同じ namespace 」ということだけは決まっている
38th CBUG Meeting
s-s-d を PID 名前空間対応する
9
38th CBUG Meeting
s-s-d を PID 名前空間対応する
10
自分の jail ID( 的なもの ) を確認
同じ jail ID( というものはない )のやつだけ対象にする
38th CBUG Meeting
jail ID( というものは略 ) の確認
11
/proc/PID/ns/pid の inode 取るだけ
Linux なので jail ID というものはない
38th CBUG Meeting
jail ID( というものはある ) 確認
12
sysctl 叩いて jid 取ってるだけこれでいいんだっけ…( 動作未確認 )
FreeBSD なので jail ID がある
kvm_getprocs 使うべき ?→sysctl でいいらしい
38th CBUG Meeting
要調査• /lib/lsb/init-functions の pidof(8) を呼んでいる箇所でpidof -c を呼ぶようにすればだいたい救えるのでは ?• -c で救える理由 : コンテナは大抵 chroot するから• CentOS だと pidof -c 指定している• Ubuntu / Debian は -c ついてない
• 他の OS の PID namespace 分離的な実装 (Solaris)対応 ? 13
38th CBUG Meeting
TODO
• kFreeBSD jail 環境での動き確認する ( 多分うごくけど )• バグレポート書く ( 英語… )
14
38th CBUG Meeting
見なかったことにしたい
15