xref: /plan9/sys/lib/dist/pc/inst/mountdist (revision 1269a55e17378f8f0a601a13c99e4e804209c23f)
19a747e4fSDavid du Colombier#!/bin/rc
29a747e4fSDavid du Colombier
39a747e4fSDavid du Colombier# prereq: mountfs configdist
49a747e4fSDavid du Colombier# desc: locate and mount the distribution
59a747e4fSDavid du Colombier
69a747e4fSDavid du Colombierfn domount{
79a747e4fSDavid du Colombier	if(! test -e $mountmedia(2))
89a747e4fSDavid du Colombier		logprog $srvmedia
99a747e4fSDavid du Colombier	unmount /n/distmedia >[2]/dev/null
109a747e4fSDavid du Colombier	logprog $mountmedia
119a747e4fSDavid du Colombier}
129a747e4fSDavid du Colombier
139a747e4fSDavid du Colombierfn exitifdone{
149a747e4fSDavid du Colombier	if(test -f /n/dist/dist/replica/plan9.db)
159a747e4fSDavid du Colombier		exit
169a747e4fSDavid du Colombier}
179a747e4fSDavid du Colombier
189a747e4fSDavid du Colombierfn trycdimage{
199a747e4fSDavid du Colombier	if(test -f $1){
209a747e4fSDavid du Colombier		rm -f /srv/9660.dist
219a747e4fSDavid du Colombier		unmount /n/dist
229a747e4fSDavid du Colombier		9660srv 9660.dist >[2]/dev/null
239a747e4fSDavid du Colombier		logprog mount /srv/9660.dist /n/dist $1
249a747e4fSDavid du Colombier		exitifdone
259a747e4fSDavid du Colombier		mountdist=notdone
269a747e4fSDavid du Colombier		export mountdist
279a747e4fSDavid du Colombier		exit notdone
289a747e4fSDavid du Colombier	}
299a747e4fSDavid du Colombier}
309a747e4fSDavid du Colombier
319a747e4fSDavid du Colombierfn trycdimagebz2 {
329a747e4fSDavid du Colombier	if(test -f $1){
33a22b0629SDavid du Colombier		echo -n 'bunzip2 < '^$1^' >/n/newfs/dist/plan9.iso'
34a22b0629SDavid du Colombier		bunzip2 < $1 >/n/newfs/dist/_plan9.iso &&
35a22b0629SDavid du Colombier		mv /n/newfs/dist/_plan9.iso /n/newfs/dist/plan9.iso
369a747e4fSDavid du Colombier		echo
37a22b0629SDavid du Colombier		trycdimage /n/newfs/dist/plan9.iso
389a747e4fSDavid du Colombier		mountdist=notdone
399a747e4fSDavid du Colombier		export mountdist
409a747e4fSDavid du Colombier		exit notdone
419a747e4fSDavid du Colombier	}
429a747e4fSDavid du Colombier}
439a747e4fSDavid du Colombier
449a747e4fSDavid du Colombierfn havedist {
459a747e4fSDavid du Colombier	test -f $1/dist/replica/plan9.db ||
469a747e4fSDavid du Colombier	test -f $1/plan9.iso ||
479a747e4fSDavid du Colombier	test -f $1/plan9.iso.bz2
489a747e4fSDavid du Colombier}
499a747e4fSDavid du Colombier
509a747e4fSDavid du Colombierswitch($1){
519a747e4fSDavid du Colombiercase checkready
529a747e4fSDavid du Colombier	if(! ~ $distisfrom local && ! ~ $download done){
539a747e4fSDavid du Colombier		mountdist=notdone
549a747e4fSDavid du Colombier		export mountdist
559a747e4fSDavid du Colombier	}
569a747e4fSDavid du Colombier	if(! ~ $#mountmedia 0 1){
579a747e4fSDavid du Colombier		if(domount){
589a747e4fSDavid du Colombier			mountdist=done
599a747e4fSDavid du Colombier			export mountdist
609a747e4fSDavid du Colombier			if(mountdist checkdone)
619a747e4fSDavid du Colombier				exit
629a747e4fSDavid du Colombier		}
639a747e4fSDavid du Colombier		srvmedia=()
649a747e4fSDavid du Colombier		mountmedia=()
659a747e4fSDavid du Colombier		mountdist=ready
669a747e4fSDavid du Colombier		export srvmedia mountmedia mountdist
679a747e4fSDavid du Colombier	}
689a747e4fSDavid du Colombier
699a747e4fSDavid du Colombiercase go
709a747e4fSDavid du Colombier	fat=()
71a22b0629SDavid du Colombier	ext2=()
729a747e4fSDavid du Colombier	x9660=()
73a22b0629SDavid du Colombier	fossil=()
749a747e4fSDavid du Colombier
759a747e4fSDavid du Colombier	echo Please wait... Scanning storage devices...
769a747e4fSDavid du Colombier
779a747e4fSDavid du Colombier	parts=`{ls /dev/sd??/* >[2]/dev/null | grep -v '/(plan9.*|ctl|log|raw)$'}
789a747e4fSDavid du Colombier	for (i in $parts) {
799a747e4fSDavid du Colombier		echo -n '	'^$i
809a747e4fSDavid du Colombier		n=`{echo $i | sed 's;/;_;g'}
819a747e4fSDavid du Colombier		if(! test -f /tmp/localpart.$n)
829a747e4fSDavid du Colombier			dd -if $i -bs 2048 -count 32 -of /tmp/localpart.$n >[2]/dev/null
839a747e4fSDavid du Colombier		if(isfat /tmp/localpart.$n)
849a747e4fSDavid du Colombier			fat=($fat $i)
85*1269a55eSDavid du Colombier		if(isext2 /tmp/localpart.$n)
86*1269a55eSDavid du Colombier			ext2=($ext2 $i)
879a747e4fSDavid du Colombier		if(is9660 /tmp/localpart.$n)
889a747e4fSDavid du Colombier			x9660=($x9660 $i)
89*1269a55eSDavid du Colombier		if(isfossil $i)
90a22b0629SDavid du Colombier			fossil=($fossil $i)
919a747e4fSDavid du Colombier		echo
929a747e4fSDavid du Colombier	}
939a747e4fSDavid du Colombier	echo
949a747e4fSDavid du Colombier	echo The following storage media were detected.
959a747e4fSDavid du Colombier	echo Choose the one containing the distribution.
969a747e4fSDavid du Colombier	echo
979a747e4fSDavid du Colombier	for(i in $parts){
989a747e4fSDavid du Colombier		switch($i){
999a747e4fSDavid du Colombier		case $fat
1009a747e4fSDavid du Colombier			echo 	'	'^$i^' (microsoft fat)'
101a22b0629SDavid du Colombier		case $ext2
102a22b0629SDavid du Colombier			echo 	'	'^$i^' (linux ext2)'
1039a747e4fSDavid du Colombier		case $x9660
1049a747e4fSDavid du Colombier			echo 	'	'^$i^' (iso9660 cdrom)'
105a22b0629SDavid du Colombier		case $fossil
106a22b0629SDavid du Colombier			echo 	'	'^$i^' (plan9 fossil)'
1079a747e4fSDavid du Colombier		}
1089a747e4fSDavid du Colombier	}
1099a747e4fSDavid du Colombier	echo
1109a747e4fSDavid du Colombier
1119a747e4fSDavid du Colombier	mountstatus=x
1129a747e4fSDavid du Colombier	while(! ~ $mountstatus ''){
113a22b0629SDavid du Colombier		prompt -w '' 'Distribution disk' $fat $x9660 $fossil
1149a747e4fSDavid du Colombier		disk=$rd
1159a747e4fSDavid du Colombier
1169a747e4fSDavid du Colombier		srvmedia=()
1179a747e4fSDavid du Colombier		mountmedia=()
1189a747e4fSDavid du Colombier		switch($disk){
1199a747e4fSDavid du Colombier		case $fs
120a22b0629SDavid du Colombier			mountmedia=(bind /n/newfs /n/distmedia)
1219a747e4fSDavid du Colombier		case $fat
1229a747e4fSDavid du Colombier			srvmedia=(dossrv)
1239a747e4fSDavid du Colombier			mountmedia=(mount /srv/dos /n/distmedia $disk)
124a22b0629SDavid du Colombier		case $ext2
125a22b0629SDavid du Colombier			srvmedia=(ext2srv -r)
126a22b0629SDavid du Colombier			mountmedia=(mount /srv/ext2 /n/distmedia $disk)
1279a747e4fSDavid du Colombier		case $x9660
1289a747e4fSDavid du Colombier			srvmedia=(9660srv)
1299a747e4fSDavid du Colombier			mountmedia=(mount /srv/9660 /n/distmedia $disk)
130a22b0629SDavid du Colombier		case $fossil
131a22b0629SDavid du Colombier			echo 'srv fossil.mountdist' > /tmp/fossi.conf
132a22b0629SDavid du Colombier			echo 'fsys main config '^$disk >> /tmp/fossil.conf
133a22b0629SDavid du Colombier			echo 'fsys main open -AWVP' >> /tmp/fossil.conf
134a22b0629SDavid du Colombier			echo 'fsys main' >> /tmp/fossil.conf
135a22b0629SDavid du Colombier			srvmedia=(fossil/fossil -c '. /tmp/fossil.conf')
136a22b0629SDavid du Colombier			mountmedia=(mount /srv/fossil.mountdist /n/distmedia)
1379a747e4fSDavid du Colombier		case *
1389a747e4fSDavid du Colombier			echo Unknown disk type '(cannot happen)'
1399a747e4fSDavid du Colombier			exit oops
1409a747e4fSDavid du Colombier		}
1419a747e4fSDavid du Colombier		export srvmedia mountmedia
1429a747e4fSDavid du Colombier		domount
1439a747e4fSDavid du Colombier		mountstatus=$status
1449a747e4fSDavid du Colombier	}
1459a747e4fSDavid du Colombier
1469a747e4fSDavid du Colombier	first=yes
1479a747e4fSDavid du Colombier	dir=/
1489a747e4fSDavid du Colombier	while(~ $first yes || ! havedist /n/distmedia/$dir){
1499a747e4fSDavid du Colombier		if(~ $first yes){
1509a747e4fSDavid du Colombier			echo
1519a747e4fSDavid du Colombier			echo Which directory contains the distribution?
1529a747e4fSDavid du Colombier			echo 'Any of the following will suffice (in order of preference):'
1539a747e4fSDavid du Colombier			echo '	- the root directory of the cd image'
1549a747e4fSDavid du Colombier			echo '	- the directory containing plan9.iso'
1559a747e4fSDavid du Colombier			echo '	- the directory containing plan9.iso.bz2'
1569a747e4fSDavid du Colombier			echo 'Typing `browse'' will put you in a shell that you can use to'
1579a747e4fSDavid du Colombier			echo 'look for the directory.'
1589a747e4fSDavid du Colombier			echo
1599a747e4fSDavid du Colombier			first=no
1609a747e4fSDavid du Colombier		}
1619a747e4fSDavid du Colombier
1629a747e4fSDavid du Colombier		prompt -d browse 'Location of archives'
1639a747e4fSDavid du Colombier		dir=$rd
1649a747e4fSDavid du Colombier		if(~ $dir browse){
1659a747e4fSDavid du Colombier			echo This is a simple shell.  Commands are:
1669a747e4fSDavid du Colombier			echo '	cd directory	- change to directory'
1679a747e4fSDavid du Colombier			echo '	lc				- list contents of current directory'
1689a747e4fSDavid du Colombier			echo '	exit			- exit shell'
1699a747e4fSDavid du Colombier			echo
1709a747e4fSDavid du Colombier			echo 'Move to the directory containing the distribution'
1716b6b9ac8SDavid du Colombier			echo 'and then exit.'
1729a747e4fSDavid du Colombier			echo
1739a747e4fSDavid du Colombier			oifs=$ifs
1749a747e4fSDavid du Colombier			ifs=$nl
1759a747e4fSDavid du Colombier			dir=`{cdsh -r /n/distmedia}
1769a747e4fSDavid du Colombier			ifs=$oifs
1779a747e4fSDavid du Colombier		}
1789a747e4fSDavid du Colombier		if(~ $#dir 0)
1799a747e4fSDavid du Colombier			dir=safdsfdsfdsf
1809a747e4fSDavid du Colombier		if(! ~ $#dir 1)
1819a747e4fSDavid du Colombier			dir=$"dir
1829a747e4fSDavid du Colombier		if(! havedist /n/distmedia/$dir)
1839a747e4fSDavid du Colombier			echo 'No distribution found in '^`{cleanname /$dir}
1849a747e4fSDavid du Colombier	}
185a22b0629SDavid du Colombier
1869a747e4fSDavid du Colombier	distmediadir=$dir
1879a747e4fSDavid du Colombier	export distmediadir
1889a747e4fSDavid du Colombier
1899a747e4fSDavid du Colombiercase checkdone
1909a747e4fSDavid du Colombier	if(! ~ $#distmediadir 1){
1919a747e4fSDavid du Colombier		mountdist=notdone
1929a747e4fSDavid du Colombier		export mountdist
1939a747e4fSDavid du Colombier		exit notdone
1949a747e4fSDavid du Colombier	}
195a22b0629SDavid du Colombier	if(! havedist /n/distmedia/$distmediadir && ! havedist /n/newfs/dist){
1969a747e4fSDavid du Colombier		mountdist=notdone
1979a747e4fSDavid du Colombier		export mountdist
1989a747e4fSDavid du Colombier		exit notdone
1999a747e4fSDavid du Colombier	}
2009a747e4fSDavid du Colombier
2019a747e4fSDavid du Colombier	exitifdone
2029a747e4fSDavid du Colombier
2039a747e4fSDavid du Colombier	if(test -f /n/distmedia/$distmediadir/dist/replica/plan9.db){
2049a747e4fSDavid du Colombier		bind /n/distmedia/$distmediadir /n/dist
205a22b0629SDavid du Colombier		bind -a /n/dist/386/bin /bin
206a22b0629SDavid du Colombier		bind -a /n/dist/rc/bin /bin
2079a747e4fSDavid du Colombier		exitifdone
2089a747e4fSDavid du Colombier		mountdist=notdone
2099a747e4fSDavid du Colombier		export mountdist
2109a747e4fSDavid du Colombier		exit notdone
2119a747e4fSDavid du Colombier	}
2129a747e4fSDavid du Colombier
2139a747e4fSDavid du Colombier	trycdimage /n/distmedia/$distmediadir/plan9.iso
214a22b0629SDavid du Colombier	trycdimage /n/newfs/dist/plan9.iso
2159a747e4fSDavid du Colombier
2169a747e4fSDavid du Colombier	trycdimagebz2 /n/distmedia/$distmediadir/plan9.iso.bz2
217a22b0629SDavid du Colombier	trycdimagebz2 /n/newfs/dist/plan9.iso.bz2
2189a747e4fSDavid du Colombier
2199a747e4fSDavid du Colombier	mountdist=notdone
2209a747e4fSDavid du Colombier	export mountdist
2219a747e4fSDavid du Colombier	exit notdone
2229a747e4fSDavid du Colombier}
223