起動時の名前空間

システム起動時にどのように名前空間が構築されるのだろうか.Plan9UNIXのように,カーネルから最初のプロセスであるinit(8)プロセスが起動され,rcシェルが立ち上がる.そして,名前空間のセットアップは,initプロセス中のnewns(2)で行なわれる.newnsは引数nsfileで指定されたnsfileファイル(namespace(6))を読み込み,そこに記述されたmount,bindを実行して,名前空間を構築する.

 int         newns(char *user, char *nsfile);

initプロセスにおけるnewns呼び出しは,nsfileがNULLであり,デフォルトの/lib/namespaceファイルが参照される./lib/namespaceファイルを次の示す.

# root
mount -aC #s/boot /root $rootspec
bind -a $rootdir /
bind -c $rootdir/mnt /mnt

# kernel devices
bind #c /dev
bind #d /fd
bind -c #e /env
bind #p /proc
bind -c #s /srv
bind -a #¤ /dev
bind -a #S /dev

# mount points
mount /srv/slashn /n

# authentication
mount -a /srv/factotum /mnt

# standard bin
bind /$cputype/bin /bin
bind -a /rc/bin /bin

# internal networks
# mount -a /srv/ip /net
bind -a #l /net
bind -a #I /net
mount -a /srv/cs /net
mount -a /srv/dns /net
mount -a /srv/net /net

bind -c /usr/$user/tmp /tmp
cd /usr/$user

. /lib/namespace.local
. /lib/namespace.$sysname

$cputypeや$userは環境変数である.$rootspecと$rootdirのデフォルト値はrootspec='',rootdir=/rootらしい.これらはplan9.iniファイルで指定できる.