xref: /plan9-contrib/sys/src/9k/k10/root/k10root.rc (revision 9ef1f84b659abcb917c5c090acbce0772e494f21)
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