xref: /plan9-contrib/sys/src/9/pc/boot.fs (revision 99c5542733063989ecf76031d5eb261c95490702)
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