1*9ef1f84bSDavid du Colombier#!/boot/rc -m /boot/rcmain 2*9ef1f84bSDavid du Colombierflag x + 3*9ef1f84bSDavid du Colombier 4*9ef1f84bSDavid du Colombiercputype=amd64 5*9ef1f84bSDavid du Colombierobjtype=$cputype 6*9ef1f84bSDavid du Colombierservice=cpu 7*9ef1f84bSDavid du Colombierauthid=bootes 8*9ef1f84bSDavid du Colombierrootdir=/root 9*9ef1f84bSDavid du Colombierrootspec='' 10*9ef1f84bSDavid du Colombierrootsrv=boot 11*9ef1f84bSDavid du Colombier 12*9ef1f84bSDavid du Colombierbeetroot=k10root.rr 13*9ef1f84bSDavid du Colombierauthentication='nvram=/boot/adm/nvram auth/factotum -sfactotum -S' # -a ... 14*9ef1f84bSDavid du Colombier# test xyzip=(0 0 0 104.9.33) 15*9ef1f84bSDavid du Colombier# test fsaddr='tcp!135.$xyzip(4)^!564' 16*9ef1f84bSDavid du Colombierip=(135.104.9.32 255.255.255.0 135.104.9.0 135.104.9.1) 17*9ef1f84bSDavid du Colombier 18*9ef1f84bSDavid du Colombier# 19*9ef1f84bSDavid du Colombier# Post the read-only filesystem in #s/$beetroot 20*9ef1f84bSDavid du Colombier# and mount it on /boot so the commands in /boot/$cputype/bin 21*9ef1f84bSDavid du Colombier# are available to create the namespace (namespaces like to 22*9ef1f84bSDavid du Colombier# mount #s/boot on / and that should not be the read-only 23*9ef1f84bSDavid du Colombier# filesystem). 24*9ef1f84bSDavid du Colombier# Must set hostowner to be that of the owner of the nvram file 25*9ef1f84bSDavid du Colombier# before paqfs starts otherwise factotum will not be able to 26*9ef1f84bSDavid du Colombier# open it. 27*9ef1f84bSDavid du Colombier# 28*9ef1f84bSDavid du Colombier/boot/echo -n sys > '#c/hostowner' 29*9ef1f84bSDavid du Colombier/boot/paqfs -p -S $beetroot -m /boot -q /boot/$beetroot 30*9ef1f84bSDavid du Colombiercd /boot/$cputype/bin 31*9ef1f84bSDavid du Colombierbind '#c' /dev 32*9ef1f84bSDavid du Colombierbind '#d' /fd 33*9ef1f84bSDavid du Colombierbind -c '#e' /env 34*9ef1f84bSDavid du Colombierbind '#p' /proc 35*9ef1f84bSDavid du Colombierbind -c '#s' /srv 36*9ef1f84bSDavid du Colombier 37*9ef1f84bSDavid du Colombier# 38*9ef1f84bSDavid du Colombier# Configure the networks. 39*9ef1f84bSDavid du Colombier# 40*9ef1f84bSDavid du Colombierbind -a '#I' /net 41*9ef1f84bSDavid du Colombierbind -a '#l0' /net 42*9ef1f84bSDavid du Colombier 43*9ef1f84bSDavid du Colombierif(~ $#ip 4 && ! ~ $ip(1) '10.-1.-1.-1'){ 44*9ef1f84bSDavid du Colombier i=`{sed '' /net/ipifc/clone} 45*9ef1f84bSDavid du Colombier echo bind ether /net/ether0 > /net/ipifc/$i/ctl 46*9ef1f84bSDavid du Colombier echo add $ip(1) $ip(2) $ip(3) > /net/ipifc/$i/ctl 47*9ef1f84bSDavid du Colombier echo add 0 0 $ip(4) >>/net/iproute 48*9ef1f84bSDavid du Colombier echo I am $ip(1)^, default route $ip(4) 49*9ef1f84bSDavid du Colombier} 50*9ef1f84bSDavid du Colombieri=`{sed '' /net/ipifc/clone} 51*9ef1f84bSDavid du Colombierecho bind loopback /dev/null > /net/ipifc/$i/ctl 52*9ef1f84bSDavid du Colombierecho add 127.0.0.1 255.0.0.0 127.0.0.0 > /net/ipifc/$i/ctl 53*9ef1f84bSDavid du Colombier 54*9ef1f84bSDavid du Colombier# 55*9ef1f84bSDavid du Colombier# Set up authentication if necessary. 56*9ef1f84bSDavid du Colombier# Factotum has to be allowed to mount on /mnt here because 57*9ef1f84bSDavid du Colombier# auth_proxy (called by mount) will look for it there. 58*9ef1f84bSDavid du Colombier# Normally, factotum will set '#c/hostowner'; if not, do it 59*9ef1f84bSDavid du Colombier# by hand. 60*9ef1f84bSDavid du Colombier# 61*9ef1f84bSDavid du Colombierif(! ~ $authentication '') 62*9ef1f84bSDavid du Colombier eval `{echo $authentication} 63*9ef1f84bSDavid du Colombierif(~ `{sed '' '#c/hostowner'} sys) 64*9ef1f84bSDavid du Colombier echo -n $authid > '#c/hostowner' 65*9ef1f84bSDavid du Colombier 66*9ef1f84bSDavid du Colombier# 67*9ef1f84bSDavid du Colombier# Attach to the remote filesystem and mount it. 68*9ef1f84bSDavid du Colombier# If this fails, set $root(dir|srv) and continue, 69*9ef1f84bSDavid du Colombier# there's enough in the read-only filesystem to run 70*9ef1f84bSDavid du Colombier# listen and telnet; at least cat /dev/kmesg might 71*9ef1f84bSDavid du Colombier# then give a clue as to the problem. 72*9ef1f84bSDavid du Colombier# Must check for the presence of expected files after 73*9ef1f84bSDavid du Colombier# the mount because srv/mount do not always return 74*9ef1f84bSDavid du Colombier# proper status. 75*9ef1f84bSDavid du Colombier# $rootsrv is used in /lib/namespace because the 76*9ef1f84bSDavid du Colombier# root might not be served from the usual #s/boot. 77*9ef1f84bSDavid du Colombier# 78*9ef1f84bSDavid du Colombierif(! ~ $fsaddr '' && ! eval srv -c -m $fsaddr $rootsrv $rootdir) 79*9ef1f84bSDavid du Colombier echo srv -c -m $fsaddr $rootsrv $rootdir fails: $status 80*9ef1f84bSDavid du Colombierif(! test -d $rootdir/$cputype){ 81*9ef1f84bSDavid du Colombier rootdir=/boot 82*9ef1f84bSDavid du Colombier rootspec='' 83*9ef1f84bSDavid du Colombier rootsrv=$beetroot 84*9ef1f84bSDavid du Colombier} 85*9ef1f84bSDavid du Colombierrootsrv='#s/'$rootsrv 86*9ef1f84bSDavid du Colombierecho root is on $rootdir, root is served from $rootsrv 87*9ef1f84bSDavid du Colombier 88*9ef1f84bSDavid du Colombier# 89*9ef1f84bSDavid du Colombier# Finish the namespace setup. 90*9ef1f84bSDavid du Colombier# 91*9ef1f84bSDavid du Colombierbind -a $rootdir / 92*9ef1f84bSDavid du Colombierbind -c -b $rootdir/mnt /mnt 93*9ef1f84bSDavid du Colombierbind $rootdir/$cputype/bin /bin 94*9ef1f84bSDavid du Colombierbind -a $rootdir/rc/bin /bin 95*9ef1f84bSDavid du Colombiercd / 96*9ef1f84bSDavid du Colombier 97*9ef1f84bSDavid du Colombier# 98*9ef1f84bSDavid du Colombier# Finish environment setup and start services. 99*9ef1f84bSDavid du Colombier# Listen is run trusted if there is no factotum running, 100*9ef1f84bSDavid du Colombier# as 'cpu -R' with no authentication needs to be able to 101*9ef1f84bSDavid du Colombier# open '#¤/caphash' in order to change the owner and 102*9ef1f84bSDavid du Colombier# that can only be done if running as '#c/hostowner'. 103*9ef1f84bSDavid du Colombier# 104*9ef1f84bSDavid du Colombiersysname=cpu-$ip(1) 105*9ef1f84bSDavid du Colombierprompt=($sysname'# ' ' ') 106*9ef1f84bSDavid du Colombierbind /boot/rc/bin/service /bin/service 107*9ef1f84bSDavid du Colombierif(test -d /mnt/factotum) 108*9ef1f84bSDavid du Colombier aux/listen -q tcp 109*9ef1f84bSDavid du Colombierif not 110*9ef1f84bSDavid du Colombier aux/listen -t /bin/service tcp 111*9ef1f84bSDavid du Colombier 112*9ef1f84bSDavid du Colombierflag x - 113*9ef1f84bSDavid du Colombierwhile(echo Hello Squidboy) 114*9ef1f84bSDavid du Colombier . -i '#d/0' 115