Google Chrome の Namespace 利用のメモ
(2016-05-16 Chromium の参考ページが移動していたので更新)
過去に勉強会なんかで「Linux 版の Chrome は Namespace を使ってる」という話をしたことあるけど、そういえば確認したことはなかったので確認したメモ。
参考はこの辺り。
pidns と netns を使ってそうです。
まず Google Chrome を起動します。最近 Linux 版は重くて使ってないけど。
$ pstree -p :(snip) |-chrome(29616)-+-chrome-sandbox(29618)---chrome(29620)-+-chrome(29630)-+-chrome(29701)-+-{chrome}(29702) | | | | |-{chrome}(29720) :(snip) | | `-chrome-sandbox(29624)---nacl_helper(29625) :(snip)
chrome-sandbox ってのがこの辺り作りそうですね。
まずはinitの名前空間を確認します。
# ls -l /proc/1/ns 合計 0 lrwxrwxrwx 1 root root 0 3月 9日 19:02 ipc -> ipc:[4026531839] lrwxrwxrwx 1 root root 0 3月 9日 19:02 mnt -> mnt:[4026531840] lrwxrwxrwx 1 root root 0 3月 9日 19:02 net -> net:[4026531956] lrwxrwxrwx 1 root root 0 3月 9日 19:02 pid -> pid:[4026531836] lrwxrwxrwx 1 root root 0 3月 9日 19:02 user -> user:[4026531837] lrwxrwxrwx 1 root root 0 3月 9日 19:02 uts -> uts:[4026531838]
次に chrome-sandbox の子プロセスの chrome の ns を確認。
# ls -l /proc/29620/ns 合計 0 lrwxrwxrwx 1 karma users 0 3月 9日 20:06 ipc -> ipc:[4026531839] lrwxrwxrwx 1 karma users 0 3月 9日 20:06 mnt -> mnt:[4026531840] lrwxrwxrwx 1 karma users 0 3月 9日 20:06 net -> net:[4026532408] lrwxrwxrwx 1 karma users 0 3月 9日 20:06 pid -> pid:[4026532406] lrwxrwxrwx 1 karma users 0 3月 9日 20:06 user -> user:[4026531837] lrwxrwxrwx 1 karma users 0 3月 9日 20:06 uts -> uts:[4026531838]
net と pid が異なるのが、上記の特殊なシンボリックリンク先でわかりますね (数字が違う)。他は同じです (数字が同じ)。
実際この Namespace 内に入ってみましょう。
# nsenter -t 29620 -n -p
まずは netns の確認。
# ip a 1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
新たに netns を作ったので、インターフェースはループバックしかありません。
次に pidns の確認。ps とかのこの辺り確認するコマンドは /proc を見ますので、このままだと親 ns の結果が出ますので使えません (うっかりしててハマった ^^;)。新たに procfs をマウントしてみます。
# mount -t proc proc /mnt # ls /mnt 1/ acpi/ dma key-users mtrr sysrq-trigger 11/ asound/ driver/ keys net@ sysvipc/ 21/ buddyinfo execdomains kmsg pagetypeinfo thread-self@ 28/ bus/ fb kpagecount partitions timer_list 3/ cgroups filesystems kpageflags sched_debug tty/ 4/ cmdline fs/ loadavg scsi/ uptime 58/ config.gz interrupts locks self@ version 6/ consoles iomem meminfo slabinfo vmallocinfo 82/ cpuinfo ioports misc softirqs vmstat 9/ crypto irq/ modules stat zoneinfo 93/ devices kallsyms mounts@ swaps 97/ diskstats kcore mpt/ sys/
pidns 内の PID=1 はこんなです。
# cat /mnt/1/cmdline ; echo /opt/google/chrome/chrome --type=zygote