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