]> git.lizzy.rs Git - plan9front.git/blob - rc/bin/inst/mountdist
merge
[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 -f /n/dist/LICENSE)
15                 exit
16 }
17
18 fn havedist {
19         test -f $1/LICENSE
20 }
21
22 switch($1){
23 case checkready
24         if(! ~ $distisfrom local && ! ~ $download done){
25                 mountdist=notdone
26                 export mountdist
27         }
28         if(! ~ $#mountmedia 0 1){
29                 if(domount){
30                         mountdist=done
31                         export mountdist
32                         if(mountdist checkdone)
33                                 exit
34                 }
35                 srvmedia=()
36                 mountmedia=()
37                 mountdist=ready
38                 export srvmedia mountmedia mountdist
39         }
40                 
41 case go
42         fat=()
43         ext2=()
44         x9660=()
45
46         echo Please wait... Scanning storage devices...
47
48         parts=`{ls /dev/sd[A-Z][0-9]*/* >[2]/dev/null | grep -v '/(plan9.*|ctl|log|raw)$'}
49         for (i in $parts) {
50                 echo -n '       '^$i
51                 n=`{echo $i | sed 's;/;_;g'}
52                 if(! test -f /tmp/localpart.$n)
53                         dd -if $i -bs 2048 -count 32 -of /tmp/localpart.$n >[2]/dev/null
54                 if(isfat /tmp/localpart.$n)
55                         fat=($fat $i)
56                 if(isext2 /tmp/localpart.$n)
57                         ext2=($ext2 $i)
58                 if(is9660 /tmp/localpart.$n)
59                         x9660=($x9660 $i)
60                 echo
61         }
62         echo
63         echo The following storage media were detected.
64         echo Choose the one containing the distribution.
65         echo
66         for(i in $parts){
67                 switch($i){
68                 case $fat
69                         echo    '       '^$i^' (microsoft fat)'
70                 case $ext2
71                         echo    '       '^$i^' (linux ext2)'
72                 case $x9660
73                         echo    '       '^$i^' (iso9660 cdrom)'
74                 }
75         }
76         echo
77
78         mountstatus=x
79         while(! ~ $mountstatus ''){
80                 default=()
81                 if(! ~ $#cdboot 0 && ! ~ $#x9660 0)
82                         default=(-d $x9660(1))
83                 prompt $default 'Distribution disk' $fat $x9660
84                 disk=$rd
85
86                 srvmedia=()
87                 mountmedia=()
88                 switch($disk){
89                 case $fs
90                         mountmedia=(bind /n/newfs /n/distmedia)
91                 case $fat
92                         srvmedia=(dossrv)
93                         mountmedia=(mount /srv/dos /n/distmedia $disk)
94                 case $ext2
95                         srvmedia=(ext2srv -r)
96                         mountmedia=(mount /srv/ext2 /n/distmedia $disk)
97                 case $x9660
98                         srvmedia=(9660srv)
99                         mountmedia=(mount /srv/9660 /n/distmedia $disk)
100                 case *
101                         echo Unknown disk type '(cannot happen)'
102                         exit oops
103                 }
104                 export srvmedia mountmedia
105                 domount
106                 mountstatus=$status
107         }
108
109         first=yes
110         dir=/
111         while(~ $first yes || ! havedist /n/distmedia/$dir){
112                 if(~ $first yes){
113                         echo
114                         echo Which directory contains the distribution?
115                         echo 'Any of the following will suffice (in order of preference):'
116                         echo '  - the root directory of the cd image'
117                         echo
118                         first=no
119                 }
120
121                 prompt -d $dir 'Location of archives'
122                 dir=$rd
123                 if(~ $#dir 0)
124                         dir=/
125                 if(! ~ $#dir 1)
126                         dir=$"dir
127                 if(! havedist /n/distmedia/$dir)
128                         echo 'No distribution found in '^`{cleanname /$dir}
129         }
130
131         distmediadir=$dir
132         export distmediadir
133
134 case checkdone
135         if(! ~ $#distmediadir 1){
136                 mountdist=notdone
137                 export mountdist
138                 exit notdone
139         }
140         if(! havedist /n/distmedia/$distmediadir && ! havedist /n/newfs/dist){
141                 mountdist=notdone
142                 export mountdist
143                 exit notdone
144         }
145
146         exitifdone
147
148         if(havedist /n/distmedia/$distmediadir){
149                 bind /n/distmedia/$distmediadir /n/dist
150                 exitifdone
151                 mountdist=notdone
152                 export mountdist
153                 exit notdone
154         }
155
156         mountdist=notdone
157         export mountdist
158         exit notdone
159 }