190 lines
3.7 KiB
Bash
Executable file
190 lines
3.7 KiB
Bash
Executable file
#!/bin/rc
|
|
|
|
# prereq: mountfs configdist
|
|
# desc: locate and mount the distribution
|
|
|
|
fn domount{
|
|
if(! test -e $mountmedia(2))
|
|
logprog $srvmedia
|
|
unmount /n/distmedia >[2]/dev/null
|
|
logprog $mountmedia
|
|
}
|
|
|
|
fn exitifdone{
|
|
if(test -d /n/dist/dist/plan9front)
|
|
exit
|
|
}
|
|
|
|
fn havedist {
|
|
test -d $1/dist/plan9front || test -f $1/9front.iso || test -f $1/9front.iso.bz2
|
|
}
|
|
|
|
fn trycdimage{
|
|
if(test -f $1){
|
|
rm -f /srv/9660.dist
|
|
unmount /n/dist >[2]/dev/null
|
|
9660srv 9660.dist >[2]/dev/null
|
|
logprog mount /srv/9660.dist /n/dist $1
|
|
exitifdone
|
|
mountdist=notdone
|
|
export mountdist
|
|
exit notdone
|
|
}
|
|
}
|
|
|
|
fn trycdimagebz2 {
|
|
if(test -f $1){
|
|
mkdir -p /n/newfs/dist
|
|
echo -n 'bunzip2 < '^$1^' >/n/newfs/dist/9front.iso'
|
|
bunzip2 < $1 >/n/newfs/dist/_9front.iso &&
|
|
mv /n/newfs/dist/_9front.iso /n/newfs/dist/9front.iso
|
|
echo
|
|
trycdimage /n/newfs/dist/9front.iso
|
|
mountdist=notdone
|
|
export mountdist
|
|
exit notdone
|
|
}
|
|
}
|
|
|
|
|
|
switch($1){
|
|
case checkready
|
|
if(! ~ $distisfrom local && ! ~ $download done){
|
|
mountdist=notdone
|
|
export mountdist
|
|
}
|
|
if(! ~ $#mountmedia 0 1){
|
|
if(domount){
|
|
mountdist=done
|
|
export mountdist
|
|
if(./mountdist checkdone)
|
|
exit
|
|
}
|
|
srvmedia=()
|
|
mountmedia=()
|
|
mountdist=ready
|
|
export srvmedia mountmedia mountdist
|
|
}
|
|
|
|
case go
|
|
fat=()
|
|
x9660=()
|
|
|
|
echo Please wait... Scanning storage devices...
|
|
|
|
parts=`{ls /dev/sd*/* /srv/sd*/*.iso >[2]/dev/null |
|
|
grep -v '/(plan9.*|nvram|ctl|log|raw)$'}
|
|
for (i in $parts) {
|
|
echo -n ' '^$i
|
|
t=`{fstype $i}
|
|
switch($t){
|
|
case dos
|
|
fat=($fat $i)
|
|
case 9660
|
|
x9660=($x9660 $i)
|
|
}
|
|
echo
|
|
}
|
|
echo
|
|
echo The following storage media were detected.
|
|
echo Choose the one containing the distribution.
|
|
echo
|
|
for(i in $parts){
|
|
switch($i){
|
|
case $fat
|
|
echo ' '^$i^' (microsoft fat)'
|
|
case $x9660
|
|
echo ' '^$i^' (iso9660 cdrom)'
|
|
}
|
|
}
|
|
echo
|
|
|
|
mountstatus=x
|
|
while(! ~ $mountstatus ''){
|
|
default=()
|
|
if(! ~ $#cdboot 0)
|
|
default=(-d /)
|
|
prompt $default 'Distribution disk' $fat $x9660 $fs /
|
|
disk=$rd
|
|
|
|
srvmedia=()
|
|
mountmedia=()
|
|
switch($disk){
|
|
case /
|
|
mountmedia=(mount /srv/boot /n/distmedia)
|
|
case $fs
|
|
mountmedia=(bind /n/newfs /n/distmedia)
|
|
case $fat
|
|
srvmedia=(dossrv)
|
|
mountmedia=(mount /srv/dos /n/distmedia $disk)
|
|
case $x9660
|
|
srvmedia=(9660srv)
|
|
mountmedia=(mount /srv/9660 /n/distmedia $disk)
|
|
case *
|
|
echo Unknown disk type '(cannot happen)'
|
|
exit oops
|
|
}
|
|
export srvmedia mountmedia
|
|
domount
|
|
mountstatus=$status
|
|
}
|
|
|
|
first=yes
|
|
dir=/
|
|
while(~ $first yes || ! havedist /n/distmedia/$dir){
|
|
if(~ $first yes){
|
|
echo
|
|
echo Which directory contains the distribution?
|
|
echo 'Any of the following will suffice (in order of preference):'
|
|
echo ' - the root directory of the cd image'
|
|
echo ' - the directory containing 9front.iso'
|
|
echo ' - the directory containing 9front.iso.bz2'
|
|
echo
|
|
first=no
|
|
}
|
|
|
|
prompt -d $dir 'Location of archives'
|
|
dir=$rd
|
|
if(~ $#dir 0)
|
|
dir=/
|
|
if(! ~ $#dir 1)
|
|
dir=$"dir
|
|
if(! havedist /n/distmedia/$dir)
|
|
echo 'No distribution found in '^`{cleanname /$dir}
|
|
}
|
|
|
|
distmediadir=$dir
|
|
export distmediadir
|
|
|
|
case checkdone
|
|
if(! ~ $#distmediadir 1){
|
|
mountdist=notdone
|
|
export mountdist
|
|
exit notdone
|
|
}
|
|
if(! havedist /n/distmedia/$distmediadir && ! havedist /n/newfs/dist){
|
|
mountdist=notdone
|
|
export mountdist
|
|
exit notdone
|
|
}
|
|
|
|
exitifdone
|
|
|
|
if(test -d /n/distmedia/$distmediadir/dist/plan9front){
|
|
bind /n/distmedia/$distmediadir /n/dist
|
|
exitifdone
|
|
mountdist=notdone
|
|
export mountdist
|
|
exit notdone
|
|
}
|
|
|
|
trycdimage /n/distmedia/$distmediadir/9front.iso
|
|
trycdimage /n/newfs/dist/9front.iso
|
|
|
|
trycdimagebz2 /n/distmedia/$distmediadir/9front.iso.bz2
|
|
trycdimagebz2 /n/newfs/dist/9front.iso.bz2
|
|
|
|
mountdist=notdone
|
|
export mountdist
|
|
exit notdone
|
|
}
|