]> git.lizzy.rs Git - plan9front.git/blob - rc/bin/inst/mountdist
final merge of the mess
[plan9front.git] / rc / bin / inst / mountdist
1 #!/bin/rc
2
3 # prereq: mountfs configdist
4 # desc: locate and mount the distribution
5
6 fn domount{
7         if(! test -e $mountmedia(2))
8                 logprog $srvmedia
9         unmount /n/distmedia >[2]/dev/null
10         logprog $mountmedia
11 }
12
13 fn exitifdone{
14         if(test -d /n/dist/dist/plan9front)
15                 exit
16 }
17
18 fn havedist {
19         test -d $1/dist/plan9front || test -f $1/9front.iso || test -f $1/9front.iso.bz2
20 }
21
22 fn trycdimage{
23         if(test -f $1){
24                 rm -f /srv/9660.dist
25                 unmount /n/dist
26                 9660srv 9660.dist >[2]/dev/null
27                 logprog mount /srv/9660.dist /n/dist $1
28                 exitifdone
29                 mountdist=notdone
30                 export mountdist
31                 exit notdone
32         }
33 }
34
35 fn trycdimagebz2 {
36         if(test -f $1){
37                 echo -n 'bunzip2 < '^$1^' >/n/newfs/dist/9front.iso'
38                 bunzip2 < $1 >/n/newfs/dist/_9front.iso &&
39                 mv /n/newfs/dist/_9front.iso /n/newfs/dist/9front.iso
40                 echo
41                 trycdimage /n/newfs/dist/9front.iso
42                 mountdist=notdone
43                 export mountdist
44                 exit notdone
45         }
46 }
47
48
49 switch($1){
50 case checkready
51         if(! ~ $distisfrom local && ! ~ $download done){
52                 mountdist=notdone
53                 export mountdist
54         }
55         if(! ~ $#mountmedia 0 1){
56                 if(domount){
57                         mountdist=done
58                         export mountdist
59                         if(mountdist checkdone)
60                                 exit
61                 }
62                 srvmedia=()
63                 mountmedia=()
64                 mountdist=ready
65                 export srvmedia mountmedia mountdist
66         }
67                 
68 case go
69         fat=()
70         x9660=()
71
72         echo Please wait... Scanning storage devices...
73
74         parts=`{ls /dev/sd*/* /srv/sd*/*.iso >[2]/dev/null |
75                 grep -v '/(plan9.*|nvram|ctl|log|raw)$'}
76         for (i in $parts) {
77                 echo -n '       '^$i
78                 t=`{fstype $i}
79                 switch($t){
80                 case dos
81                         fat=($fat $i)
82                 case 9660
83                         x9660=($x9660 $i)
84                 }
85                 echo
86         }
87         echo
88         echo The following storage media were detected.
89         echo Choose the one containing the distribution.
90         echo
91         for(i in $parts){
92                 switch($i){
93                 case $fat
94                         echo    '       '^$i^' (microsoft fat)'
95                 case $x9660
96                         echo    '       '^$i^' (iso9660 cdrom)'
97                 }
98         }
99         echo
100
101         mountstatus=x
102         while(! ~ $mountstatus ''){
103                 default=()
104                 if(! ~ $#cdboot 0)
105                         default=(-d /)
106                 prompt $default 'Distribution disk' $fat $x9660 $fs /
107                 disk=$rd
108
109                 srvmedia=()
110                 mountmedia=()
111                 switch($disk){
112                 case /
113                         mountmedia=(mount /srv/boot /n/distmedia)
114                 case $fs
115                         mountmedia=(bind /n/newfs /n/distmedia)
116                 case $fat
117                         srvmedia=(dossrv)
118                         mountmedia=(mount /srv/dos /n/distmedia $disk)
119                 case $x9660
120                         srvmedia=(9660srv)
121                         mountmedia=(mount /srv/9660 /n/distmedia $disk)
122                 case *
123                         echo Unknown disk type '(cannot happen)'
124                         exit oops
125                 }
126                 export srvmedia mountmedia
127                 domount
128                 mountstatus=$status
129         }
130
131         first=yes
132         dir=/
133         while(~ $first yes || ! havedist /n/distmedia/$dir){
134                 if(~ $first yes){
135                         echo
136                         echo Which directory contains the distribution?
137                         echo 'Any of the following will suffice (in order of preference):'
138                         echo '  - the root directory of the cd image'
139                         echo '  - the directory containing 9front.iso'
140                         echo '  - the directory containing 9front.iso.bz2'
141                         echo
142                         first=no
143                 }
144
145                 prompt -d $dir 'Location of archives'
146                 dir=$rd
147                 if(~ $#dir 0)
148                         dir=/
149                 if(! ~ $#dir 1)
150                         dir=$"dir
151                 if(! havedist /n/distmedia/$dir)
152                         echo 'No distribution found in '^`{cleanname /$dir}
153         }
154
155         distmediadir=$dir
156         export distmediadir
157
158 case checkdone
159         if(! ~ $#distmediadir 1){
160                 mountdist=notdone
161                 export mountdist
162                 exit notdone
163         }
164         if(! havedist /n/distmedia/$distmediadir && ! havedist /n/newfs/dist){
165                 mountdist=notdone
166                 export mountdist
167                 exit notdone
168         }
169
170         exitifdone
171
172         if(test -d /n/distmedia/$distmediadir/dist/plan9front){
173                 bind /n/distmedia/$distmediadir /n/dist
174                 exitifdone
175                 mountdist=notdone
176                 export mountdist
177                 exit notdone
178         }
179
180         trycdimage /n/distmedia/$distmediadir/9front.iso
181         trycdimage /n/newfs/dist/9front.iso
182
183         trycdimagebz2 /n/distmedia/$distmediadir/9front.iso.bz2
184         trycdimagebz2 /n/newfs/dist/9front.iso.bz2
185
186         mountdist=notdone
187         export mountdist
188         exit notdone
189 }