xref: /plan9/rc/bin/pc/bootplan9 (revision 223a736ebd2849388a6a0145cd1e22a96bd28460)
1#!/bin/rc
2
3rfork e
4
5. /rc/bin/pc/defs
6
7if(! ~ $#* 1) {
8	echo 'usage: bootplan9 /dev/sdC0' >[1=2]
9	echo 'sets active the plan 9 partition on the named disk.' >[1=2]
10	exit usage
11}
12
13disk=$1
14
15fn x {
16	if(! test -f $disk/$1) {
17		echo 'could not find '$disk/$1
18		exit disk
19	}
20}
21
22x plan9
23x data
24x ctl
25
26diskbase=`{basename `{cleanname $disk}}
27
28first=`{ls -p '#S' | sed 1q}
29if(! ~ $first $diskbase) {
30	echo 'warning: The plan 9 partition is not on the boot disk,' >[1=2]
31	echo 'so making it the active partition will have no effect.' >[1=2]
32}
33
34p9offset=`{disk/fdisk -p $disk/data |grep '^part plan9 ' | awk '{print $4}'}
35if(! ~ $#p9offset 1) {
36	echo 'could not find plan 9 partition.' >[1=2]
37	echo 'cannot happen' >[1=2]
38	exit bad
39}
40
41if(test $p9offset -gt 4128705) {	# 65536 * 63
42	echo  >[1=2]
43	echo 'Your Plan 9 partition is more than 2GB into your disk,' >[1=2]
44	echo 'and the master boot records used by most operating systems' >[1=2]
45	echo 'cannot access it (and thus cannot boot it).' >[1=2]
46	echo >[1=2]
47	echo 'Would you like to install a master boot record' >[1=2]
48	echo 'that will be able to access partitions more than 2GB into the disk?' >[1=2]
49	echo >[1=2]
50	prompt 'Install a new mbr' y n
51	switch($rd) {
52	case n
53		echo >[1=2]
54		echo 'Not setting Plan 9 partition active, then.' >[1=2]
55		echo >[1=2]
56		exit bad
57	case y
58		disk/mbr -m /386/mbr $disk/data
59	}
60}
61
62p9part=`{disk/fdisk $disk/data >[2]/dev/null </dev/null |
63		grep PLAN9 | sed 1q | sed 's/ *(p.) .*/\1/'}
64if(~ $#p9part 1) {
65	{ echo 'A '^$p9part; echo w } | disk/fdisk $disk/data >[2]/dev/null >/dev/null
66}
67if not {
68	echo 'Could not find Plan 9 partition.'
69	exit notdone
70}
71
72exit
73