summaryrefslogtreecommitdiff
path: root/sys/src/9/boot/local.rc
blob: 8e696f6faa682bc62b13b5f6a2a88664b9de90ee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/bin/rc

cddevs=()

# fill cddevs with cd or dvd devices
fn findcds{
	for(dev in /dev/sd*){
		x=`{sed '/([Cc][Dd]|[Dd][Vv][Dd])/!d' $dev/ctl >[2]/dev/null}
		if(! ~ $#x 0)
			cddevs=($cddevs $dev)
	}
}

fn configlocal{
	disk=`{echo $methodarg | sed 's,(.*)!.*,\1,g'}
	fstype=`{echo $disk | sed 's,.*/(.*)$,\1,g'}
	disk=`{echo $disk | sed 's,(.*)/.*$,\1,'}

	if(~ $pcload 1){
		kern=`{echo $methodarg | sed 's,.*!(.*)$,\1,g'}

		# for now we only allow kernels in the same dev/part of $methodargs
		if(~ $#kern 0 || ! ~ $#bootfile 0)
			kern=`{echo $bootfile | sed 's,.*!(.*)$,\1,g'}
	}

	bind -a '#c' /dev >/dev/null >[2=1] 
	bind '#p' /proc >[2=1] >/dev/null >[2=1]  
	bind -a '#S' /dev >/dev/null >[2=1] 
	bind -a '#f' /dev >/dev/null >[2=1] 
	bind -a '#k' /dev >/dev/null >[2=1] 
	bind -a '#æ' /dev >/dev/null >[2=1] 

	diskparts
	findcds
}

fn connectlocal{
	switch($fstype){
	case fossil
		connectlocalfossil
	case fs
		connectlocalkfs
	case data
		# test for cd/dvd
		x=`{sed '/([Cc][Dd]|[Dd][Vv][Dd])/!d' $disk^/ctl}
		if(! ~ $#x 0)
			must 9660srv -f $disk^/$fstype boot >/dev/null >[2=1]
	case *
		fatal unknown partition $fstype
	}
}

fn connectlocalfossil{
	if(! test -x /bin/fossil/fossil){
		echo no fossil
		exit nofossil
	}

	partition=$disk^/$fstype

	# settime(1, -1, nil)

	# make venti available

	# start fossil
	echo 'fossil('$partition')...'
	must fossil/fossil -f $partition -c 'srv -A boot' -c 'srv -p fscons'
}