Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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とか分離するやつ)
• pi...
38th CBUG Meeting
問題
• LXCコンテナを100個くらい上げました
• 監視したくなり、LXCホスト側でsnmpd上げました
• コンテナも監視したくなり、snmpd上げました
• LXCホスト側で/etc/init.d/s...
38th CBUG Meeting
なぜか
• /etc/init.d/snmpd で呼ばれている start-stop-daemon
がPID namespace分離に対応していなかった
• /etc/init.d/snmpd restart...
38th CBUG Meeting
回避策
• /sbin/start-stop-daemon に —pid-file <FILE_NAME>
を指定すると、そのPIDだけ相手にしてくれるので回
避できる (何も指定しないと killall 相...
38th CBUG Meeting
パッチ
• dpkgという名前のdpkgパッケージにstart-stop-
daemon入ってる
• ちょっといじったら、Linux対応 (/proc/<PID>/ns/pid
も見るだけ) のものはできた
...
38th CBUG Meeting
GNU/kFreeBSD用だった
• kFreeBSDも触らなければならないか… (入れた)
• /proc/<PID>/ns/pid は見えない (カーネルはFreeBSD
だしpid namespace分...
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使うべき?→sysc...
38th CBUG Meeting
要調査
• /lib/lsb/init-functions の pidof(8) を呼んでいる箇所で
pidof -c を呼ぶようにすればだいたい救えるのでは?
• -cで救える理由: コンテナは大抵 chr...
38th CBUG Meeting
TODO
• kFreeBSD jail環境での動き確認する (多分うごくけど
)
• バグレポート書く (英語…)
14
38th CBUG Meeting
見なかったことにしたい
15
Upcoming SlideShare
Loading in …5
×

Debianのstart-stop-daemonがLXC対応じゃないのでいじってたら何故かkFreeBSDも触ることになった話

813 views

Published on

Debianのstart-stop-daemonのPID namespace分離対応な話。あといじってたらkFreeBSDのjailにもうっかり対応しちゃった話。

Published in: Technology
  • Be the first to comment

Debianのstart-stop-daemonがLXC対応じゃないのでいじってたら何故かkFreeBSDも触ることになった話

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

×