]> git.lizzy.rs Git - plan9front.git/blob - rc/bin/inst/mountdist
inst/partdisk: fix issue #76
[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*/* >[2]/dev/null | grep -v '/(plan9.*|nvram|ctl|log|raw)$'}
75         for (i in $parts) {
76                 echo -n '       '^$i
77                 t=`{fstype $i}
78                 switch($t){
79                 case dos
80                         fat=($fat $i)
81                 case 9660
82                         x9660=($x9660 $i)
83                 }
84                 echo
85         }
86         echo
87         echo The following storage media were detected.
88         echo Choose the one containing the distribution.
89         echo
90         for(i in $parts){
91                 switch($i){
92                 case $fat
93                         echo    '       '^$i^' (microsoft fat)'
94                 case $x9660
95                         echo    '       '^$i^' (iso9660 cdrom)'
96                 }
97         }
98         echo
99
100         mountstatus=x
101         while(! ~ $mountstatus ''){
102                 default=()
103                 if(! ~ $#cdboot 0 && ! ~ $#x9660 0)
104                         default=(-d $x9660(1))
105                 prompt $default 'Distribution disk' $fat $x9660 $fs
106                 disk=$rd
107
108                 srvmedia=()
109                 mountmedia=()
110                 switch($disk){
111                 case $fs
112                         mountmedia=(bind /n/newfs /n/distmedia)
113                 case $fat
114                         srvmedia=(dossrv)
115                         mountmedia=(mount /srv/dos /n/distmedia $disk)
116                 case $x9660
117                         srvmedia=(9660srv)
118                         mountmedia=(mount /srv/9660 /n/distmedia $disk)
119                 case *
120                         echo Unknown disk type '(cannot happen)'
121                         exit oops
122                 }
123                 export srvmedia mountmedia
124                 domount
125                 mountstatus=$status
126         }
127
128         first=yes
129         dir=/
130         while(~ $first yes || ! havedist /n/distmedia/$dir){
131                 if(~ $first yes){
132                         echo
133                         echo Which directory contains the distribution?
134                         echo 'Any of the following will suffice (in order of preference):'
135                         echo '  - the root directory of the cd image'
136                         echo '  - the directory containing 9front.iso'
137                         echo '  - the directory containing 9front.iso.bz2'
138                         echo
139                         first=no
140                 }
141
142                 prompt -d $dir 'Location of archives'
143                 dir=$rd
144                 if(~ $#dir 0)
145                         dir=/
146                 if(! ~ $#dir 1)
147                         dir=$"dir
148                 if(! havedist /n/distmedia/$dir)
149                         echo 'No distribution found in '^`{cleanname /$dir}
150         }
151
152         distmediadir=$dir
153         export distmediadir
154
155 case checkdone
156         if(! ~ $#distmediadir 1){
157                 mountdist=notdone
158                 export mountdist
159                 exit notdone
160         }
161         if(! havedist /n/distmedia/$distmediadir && ! havedist /n/newfs/dist){
162                 mountdist=notdone
163                 export mountdist
164                 exit notdone
165         }
166
167         exitifdone
168
169         if(test -d /n/distmedia/$distmediadir/dist/plan9front){
170                 bind /n/distmedia/$distmediadir /n/dist
171                 exitifdone
172                 mountdist=notdone
173                 export mountdist
174                 exit notdone
175         }
176
177         trycdimage /n/distmedia/$distmediadir/9front.iso
178         trycdimage /n/newfs/dist/9front.iso
179
180         trycdimagebz2 /n/distmedia/$distmediadir/9front.iso.bz2
181         trycdimagebz2 /n/newfs/dist/9front.iso.bz2
182
183         mountdist=notdone
184         export mountdist
185         exit notdone
186 }