起動時の名前空間
システム起動時にどのように名前空間が構築されるのだろうか.Plan9もUNIXのように,カーネルから最初のプロセスである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ファイルで指定できる.