summaryrefslogtreecommitdiff
path: root/rc/bin/pc/bootplan9
blob: 559fe0c5ed57c1e8e88285982eb63c479b4998ed (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

rfork e

. /rc/bin/pc/defs

if(! ~ $#* 1) {
	echo 'usage: bootplan9 /dev/sdC0' >[1=2]
	echo 'sets active the plan 9 partition on the named disk.' >[1=2]
	exit usage
}

disk=$1

fn x {
	if(! test -f $disk/$1) {
		echo 'could not find '$disk/$1
		exit disk
	}
}

x plan9
x data
x ctl

diskbase=`{basename `{cleanname $disk}}

first=`{ls -p '#S' | sed 1q}
if(! ~ $first $diskbase) {
	echo 'warning: The plan 9 partition is not on the boot disk,' >[1=2]
	echo 'so making it the active partition will have no effect.' >[1=2]
}

p9offset=`{disk/fdisk -p $disk/data |grep '^part plan9 ' | awk '{print $4}'}
if(! ~ $#p9offset 1) {
	echo 'could not find plan 9 partition.' >[1=2]
	echo 'cannot happen' >[1=2]
	exit bad
}

if(test $p9offset -gt 4128705) {	# 65536 * 63
	echo  >[1=2]
	echo 'Your Plan 9 partition is more than 2GB into your disk,' >[1=2]
	echo 'and the master boot records used by most operating systems' >[1=2]
	echo 'cannot access it (and thus cannot boot it).' >[1=2]
	echo >[1=2]
	echo 'Would you like to install a master boot record' >[1=2]
	echo 'that will be able to access partitions more than 2GB into the disk?' >[1=2]
	echo >[1=2]
	prompt 'Install a new mbr' y n 
	switch($rd) {
	case n
		echo >[1=2]
		echo 'Not setting Plan 9 partition active, then.' >[1=2]
		echo >[1=2]
		exit bad
	case y
		disk/mbr -m /386/mbr $disk/data
	}
}

p9part=`{disk/fdisk $disk/data >[2]/dev/null </dev/null | 
		grep PLAN9 | sed 1q | sed 's/ *(p.) .*/\1/'}
if(~ $#p9part 1) {
	{ echo 'A '^$p9part; echo w } | disk/fdisk $disk/data >[2]/dev/null >/dev/null
}
if not {
	echo 'Could not find Plan 9 partition.'
	exit notdone
}

exit