130c38103SDavid du Colombier#!/boot/rc -m /boot/rcmain 230c38103SDavid du Colombier# boot script for file servers, including standalone ones 330c38103SDavid du Colombierpath=(/boot /$cputype/bin /rc/bin .) 430c38103SDavid du Colombierfn diskparts { 530c38103SDavid du Colombier # set up any /dev/sd partitions 630c38103SDavid du Colombier for(disk in /dev/sd*) { 730c38103SDavid du Colombier if(test -f $disk/data && test -f $disk/ctl) 830c38103SDavid du Colombier fdisk -p $disk/data >$disk/ctl >[2]/dev/null 930c38103SDavid du Colombier if(test -f $disk/plan9) 1030c38103SDavid du Colombier parts=($disk/plan9*) 1130c38103SDavid du Colombier if not 1230c38103SDavid du Colombier parts=($disk/data) 1330c38103SDavid du Colombier for(part in $parts) 1430c38103SDavid du Colombier if(test -f $part) 1530c38103SDavid du Colombier prep -p $part >$disk/ctl >[2]/dev/null 1630c38103SDavid du Colombier } 1730c38103SDavid du Colombier} 1830c38103SDavid du Colombier 1930c38103SDavid du Colombiercd /boot 2030c38103SDavid du Colombierecho -n boot... 2130c38103SDavid du Colombierif (! test -e /env/vmpc) 2230c38103SDavid du Colombier vmpc=23 # % of free memory for venti 2330c38103SDavid du Colombiercp '#r/rtc' '#c/time' 2430c38103SDavid du Colombierbind -a '#I0' /net 2530c38103SDavid du Colombierbind -a '#l0' /net 2630c38103SDavid du Colombierbind -a '#¤' /dev 2730c38103SDavid du Colombierbind -a '#S' /dev 2830c38103SDavid du Colombierbind -a '#k' /dev 2930c38103SDavid du Colombierbind -a '#æ' /dev 30fcbb35d1SDavid du Colombierbind -a '#u' /dev 3130c38103SDavid du Colombierbind '#p' /proc 3230c38103SDavid du Colombierbind '#d' /fd 3330c38103SDavid du Colombierbind -c '#s' /srv 3430c38103SDavid du Colombier# bind -a /boot / 3530c38103SDavid du Colombier 3630c38103SDavid du Colombier# start usb for keyboard, disks, etc. 3730c38103SDavid du Colombierif (test -e /dev/usb/ctl) { 3830c38103SDavid du Colombier echo -n usb... 3930c38103SDavid du Colombier usbd 4030c38103SDavid du Colombier} 4130c38103SDavid du Colombier 4230c38103SDavid du Colombierecho -n disks... 4330c38103SDavid du Colombierif(! ~ $dmaon no) 4430c38103SDavid du Colombier for (ctl in /dev/sd[C-H]?/ctl) 4530c38103SDavid du Colombier if (test -e $ctl) 4630c38103SDavid du Colombier echo 'dma on' >$ctl 4730c38103SDavid du Colombier 4830c38103SDavid du Colombierdiskparts 4930c38103SDavid du Colombier 5030c38103SDavid du Colombier# set up any fs(3) partitions (HACK) 5130c38103SDavid du Colombier# don't match AoE disks, as those may be shared. 5230c38103SDavid du Colombierif (test ! -e /env/fscfg) 5330c38103SDavid du Colombier fscfg=`{ls -d /dev/sd[~e-h]?/fscfg >[2]/dev/null | sed 1q} 5430c38103SDavid du Colombierif (~ $#fscfg 1 && test -r $fscfg) 5530c38103SDavid du Colombier zerotrunc <$fscfg | read -m >/dev/fs/ctl 5630c38103SDavid du Colombier 5730c38103SDavid du Colombier# figure out which arenas and fossil partitions to use. 5830c38103SDavid du Colombier# don't match AoE disks, as those may be shared. 5930c38103SDavid du Colombierif(! test -e /env/arena0){ 6030c38103SDavid du Colombier if (test -e /dev/fs/arena0) 6130c38103SDavid du Colombier arena0= /dev/fs/arena0 6230c38103SDavid du Colombier if not if (test -e /dev/sd[~e-h]?/arena0) 6330c38103SDavid du Colombier arena0= /dev/sd[~e-h]?/arena0 6430c38103SDavid du Colombier if not 6530c38103SDavid du Colombier arena0=/dev/null 6630c38103SDavid du Colombier} 6730c38103SDavid du Colombierif (test -e /dev/fs/fossil) 6830c38103SDavid du Colombier fossil= /dev/fs/fossil 6930c38103SDavid du Colombierif not if (test -e /dev/sd[~e-h]?/fossil) 7030c38103SDavid du Colombier fossil= /dev/sd[~e-h]?/fossil 7130c38103SDavid du Colombierif not 7230c38103SDavid du Colombier fossil=/dev/null 7330c38103SDavid du Colombier 7430c38103SDavid du Colombier# 7530c38103SDavid du Colombier# the local disks are now sorted out. 7630c38103SDavid du Colombier# set up the network, auth, venti and fossil. 7730c38103SDavid du Colombier# 7830c38103SDavid du Colombier 7930c38103SDavid du Colombierecho -n ip... 8030c38103SDavid du Colombierif (~ $#ip 1 && ! ~ $ip '') { 8130c38103SDavid du Colombier # need to supply ip, ipmask and ipgw in plan9.ini to use this 8230c38103SDavid du Colombier ipconfig -g $ipgw ether /net/ether0 $ip $ipmask 8330c38103SDavid du Colombier echo 'add 0 0 '^$ipgw >>/net/iproute 8430c38103SDavid du Colombier} 8530c38103SDavid du Colombierif not 8630c38103SDavid du Colombier ipconfig 8787055738SDavid du Colombier# if outside, add explicit vfw routing to the inside 8830c38103SDavid du Colombierswitch (`{sed '/\.(0|255)[ ]/d' /net/ipselftab}) { 8987055738SDavid du Colombiercase 135.104.24.* # new outside 9087055738SDavid du Colombier echo 'add 135.104.9.0 255.255.255.0 135.104.24.13' >>/net/iproute 9130c38103SDavid du Colombier} 9230c38103SDavid du Colombieripconfig loopback /dev/null 127.1 9330c38103SDavid du Colombier 94*99c55427SDavid du Colombier# local hackery: add extra sr luns of shelf 1 95c39c2eb3SDavid du Colombierif (test -e /dev/aoe/1.1 && ! test -e /dev/sdf0) 9630c38103SDavid du Colombier echo config switch on spec f type aoe//dev/aoe/1.1 >/dev/sdctl 97c39c2eb3SDavid du Colombierif (test -e /dev/aoe/1.2 && ! test -e /dev/sdg0) 9830c38103SDavid du Colombier echo config switch on spec g type aoe//dev/aoe/1.2 >/dev/sdctl 9930c38103SDavid du Colombierdiskparts 10030c38103SDavid du Colombier 10130c38103SDavid du Colombier# so far we're using the default key from $nvram, usually 10230c38103SDavid du Colombier# for insideout.plan9.bell-labs.com on outside machines, 10330c38103SDavid du Colombier# and have mounted our root over the net, if running diskless. 10430c38103SDavid du Colombier# factotum always mounts itself (on /mnt by default). 10530c38103SDavid du Colombier 10630c38103SDavid du Colombierecho -n factotum... 10730c38103SDavid du Colombierif(~ $#auth 1){ 10830c38103SDavid du Colombier echo start factotum on $auth 10930c38103SDavid du Colombier factotum -sfactotum -S -a $auth 11030c38103SDavid du Colombier} 11130c38103SDavid du Colombierif not 11230c38103SDavid du Colombier factotum -sfactotum -S 11330c38103SDavid du Colombiermount -b /srv/factotum /mnt 11430c38103SDavid du Colombier 11530c38103SDavid du Colombier# if a keys partition exists, add its contents to factotum's 11630c38103SDavid du Colombierkeys=`{ls -d /dev/sd*/keys >[2]/dev/null | sed 1q} 11730c38103SDavid du Colombierif (~ $#keys 1 && test -r $keys) { 11830c38103SDavid du Colombier echo -n add keys... 11930c38103SDavid du Colombier zerotrunc <$keys | aescbc -n -d | read -m >/mnt/factotum/ctl 12030c38103SDavid du Colombier} 12130c38103SDavid du Colombier 12230c38103SDavid du Colombier# get root from network if fsaddr set in plan9.ini, and bail out here 12330c38103SDavid du Colombierif (test -e /env/fs) { 12430c38103SDavid du Colombier echo -n fs root... 12530c38103SDavid du Colombier if(! srv tcp!$fs!564 boot) 12630c38103SDavid du Colombier exec ./rc -m/boot/rcmain -i 12730c38103SDavid du Colombier if(! mount -c /srv/boot /root) 12830c38103SDavid du Colombier exec ./rc -m/boot/rcmain -i 12930c38103SDavid du Colombier} 13030c38103SDavid du Colombier 13130c38103SDavid du Colombier# start venti store 13230c38103SDavid du Colombierif (! ~ $arena0 /dev/null && test -r $arena0) { 13330c38103SDavid du Colombier echo -n start venti on $arena0... 13430c38103SDavid du Colombier venti=tcp!127.0.0.1!17034 13530c38103SDavid du Colombier vcfg=`{ls -d /dev/sd*/venticfg >[2]/dev/null | sed 1q} 13630c38103SDavid du Colombier if (~ $#vcfg 1 && test -r $vcfg) 13730c38103SDavid du Colombier venti -m $vmpc -c $vcfg 13830c38103SDavid du Colombier if not 13930c38103SDavid du Colombier venti -m $vmpc -c $arena0 14030c38103SDavid du Colombier sleep 10 14130c38103SDavid du Colombier} 14230c38103SDavid du Colombierif not if (! test -e /env/venti) 14330c38103SDavid du Colombier venti=tcp!135.104.9.33!17034 # local default 14430c38103SDavid du Colombier 14530c38103SDavid du Colombier# start root fossil, may serve /srv/boot 14630c38103SDavid du Colombierif (! ~ $fossil /dev/null && test -r $fossil) { 14730c38103SDavid du Colombier echo -n root fossil on $fossil... 14830c38103SDavid du Colombier fossil -m 2 -f $fossil 14930c38103SDavid du Colombier sleep 3 15030c38103SDavid du Colombier} 15130c38103SDavid du Colombier 15230c38103SDavid du Colombier# 15330c38103SDavid du Colombier# normal start up on local fossil root 15430c38103SDavid du Colombier# 15530c38103SDavid du Colombier 15630c38103SDavid du Colombierrootdir=/root 15730c38103SDavid du Colombierrootspec=main/active 15830c38103SDavid du Colombier 15930c38103SDavid du Colombier# factotum is now mounted in /mnt; keep it visible. 16030c38103SDavid du Colombier# newns() needs it, among others. 16130c38103SDavid du Colombier 16230c38103SDavid du Colombier# mount new root 163d584e620SDavid du Colombierif (test -e /srv/boot) 164d584e620SDavid du Colombier srv=boot 165d584e620SDavid du Colombierif not if (test -e /srv/fossil) 166d584e620SDavid du Colombier srv=fossil 167d584e620SDavid du Colombierif not if (test -e /srv/fsmain) 168d584e620SDavid du Colombier srv=fsmain 169d584e620SDavid du Colombierif not { 170d584e620SDavid du Colombier echo cannot find a root in /srv: 171d584e620SDavid du Colombier ls -l /srv 172d584e620SDavid du Colombier} 173d584e620SDavid du Colombierecho -n mount -cC /srv/$srv $rootdir... 174d584e620SDavid du Colombier mount -cC /srv/$srv $rootdir 175d584e620SDavid du Colombierbind -a $rootdir / 17630c38103SDavid du Colombier 177d584e620SDavid du Colombierif (test -d $rootdir/mnt) 178d584e620SDavid du Colombier bind -ac $rootdir/mnt /mnt 17930c38103SDavid du Colombiermount -b /srv/factotum /mnt 18030c38103SDavid du Colombier 18130c38103SDavid du Colombier# standard bin 182d584e620SDavid du Colombierif (! test -d /$cputype) { 183d584e620SDavid du Colombier echo /$cputype missing! 184d584e620SDavid du Colombier exec ./rc -m/boot/rcmain -i 185d584e620SDavid du Colombier} 18630c38103SDavid du Colombierbind /$cputype/bin /bin 18730c38103SDavid du Colombierbind -a /rc/bin /bin 18830c38103SDavid du Colombier 18930c38103SDavid du Colombier# run cpurc 19030c38103SDavid du Colombierecho cpurc... 19130c38103SDavid du Colombierpath=(/bin . /boot) 19230c38103SDavid du Colombier/$cputype/init -c 19330c38103SDavid du Colombier 19430c38103SDavid du Colombierexec ./rc -m/boot/rcmain -i 195