Commit | Line | Data |
---|---|---|
1479465f GJ |
1 | #!/bin/sh |
2 | # | |
3 | # The ‘multicd’ package was initially written by Heiko Schlittermann | |
4 | # <heiko@lotte.sax.de> based on builtin access methods written by Ian | |
5 | # Jackson <ijackson@chiark.greenend.org.uk>. The final packaging as well as | |
6 | # cleanups were made by Martin Schulze <joey@infodrom.north.de> who also | |
7 | # put this package together for the slink release (Debian GNU/Linux | |
8 | # 2.1). | |
9 | ||
10 | # Copyright © 1995-1998 Ian Jackson <ijackson@chiark.greenend.org.uk> | |
11 | # Copyright © 1998 Heiko Schlittermann <hs@schlittermann.de> | |
12 | # | |
13 | # This is free software; you can redistribute it and/or modify | |
14 | # it under the terms of the GNU General Public License as published by | |
15 | # the Free Software Foundation; either version 2 of the License, or | |
16 | # (at your option) any later version. | |
17 | # | |
18 | # This program is distributed in the hope that it will be useful, | |
19 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
20 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
21 | # GNU General Public License for more details. | |
22 | # | |
23 | # You should have received a copy of the GNU General Public License | |
24 | # along with this program. If not, see <https://www.gnu.org/licenses/>. | |
25 | ||
26 | set -e | |
27 | vardir="$1" | |
28 | method=$2 | |
29 | option=$3 | |
30 | ||
31 | test -d "$vardir/methods/$method" || mkdir "$vardir/methods/$method" | |
32 | cd "$vardir/methods/$method" | |
33 | tp=/tmp/ddm$$ | |
34 | ||
35 | iarch=`dpkg --print-architecture` | |
36 | dist=stable | |
37 | ||
38 | xit=1 | |
39 | trap ' | |
40 | rm -f $tp.? | |
41 | if [ -n "$umount" ] | |
42 | then | |
43 | umount "$umount" >/dev/null 2>&1 | |
44 | fi | |
45 | exit $xit | |
46 | ' 0 | |
47 | ||
48 | if ls -d "$tp.?" >/dev/null 2>&1 | |
49 | then | |
50 | rm $tp.? | |
51 | fi | |
52 | ||
53 | #debug() { echo "DEBUG: $@"; } | |
54 | debug() { true; } | |
55 | ismulti() { debug $1 $2; test -e "$1/.disk/info" || test -e "$1$2/.disk/info"; } | |
56 | ||
57 | # 1/ mountpoint | |
58 | # 2/ hierarchy | |
59 | getdisklabel () { | |
60 | debug "$1" "$2" | |
61 | if [ -f $1/.disk/info ] | |
62 | then | |
63 | echo -n `head -1 "$1/.disk/info"` | |
64 | else | |
65 | if [ -f $1$2/.disk/info ] | |
66 | then | |
67 | echo -n `head -1 "$1$2/.disk/info"` | |
68 | else | |
69 | echo -n 'Non-Debian disc' | |
70 | fi | |
71 | fi | |
72 | } | |
73 | ||
74 | yesno () { | |
75 | while true | |
76 | do | |
77 | echo -n "$2 [$1] " | |
78 | read response | |
79 | if [ -z "$response" ] | |
80 | then | |
81 | response="$1" | |
82 | fi | |
83 | case "$response" in | |
84 | [Nn]*) yesno=no ; return ;; | |
85 | [Yy]*) yesno=yes ; return ;; | |
86 | esac | |
87 | done | |
88 | } | |
89 | ||
90 | getblockdev () { | |
91 | mountpoint="$vardir/methods/mnt" | |
92 | if [ -z "$defaultdevice" ] | |
93 | then | |
94 | defaultdevice="$newdefaultdevice" | |
95 | elif [ "$defaultdevice" != "$newdefaultdevice" ] | |
96 | then | |
97 | echo \ | |
98 | "Last time you specified installation from $defaultdevice." | |
99 | fi | |
100 | promptstring="$1" | |
101 | while [ -z "$blockdevice" ] | |
102 | do | |
103 | echo -n "$promptstring [$defaultdevice]: " | |
104 | read response | |
105 | if [ -z "$response" ] | |
106 | then | |
107 | response="$defaultdevice" | |
108 | fi | |
109 | if [ ! -b "$response" ] | |
110 | then | |
111 | echo "$response is not a block device - will try as loopback."; | |
112 | loop=",loop" | |
113 | fi | |
114 | tryblockdevice="$response" | |
115 | if [ $option = multi_cd ] | |
116 | then | |
117 | fstype=iso9660 | |
118 | elif [ $option = harddisk2 ] | |
119 | then | |
120 | blockbase="`echo \"$tryblockdevice\" | sed -e 's/[0-9]\{1,\}$//'`" | |
121 | set +e | |
122 | printf 'p\nq\n' | fdisk "$blockbase" 2>/dev/null >$tp.f | |
123 | set -e | |
124 | proposeddevice="$tryblockdevice" perl -ne ' | |
125 | next unless /^ *Device +Boot +Begin +Start +End +Blocks +Id +System *$/i .. !/\S/; | |
126 | next unless s:^/\S+::p && ${^MATCH} eq $ENV{proposeddevice}; | |
127 | next unless s/^ +(\* +)?\d+ +\d+ +\d+ +\d+\+? +//; | |
128 | next unless m/^([0-9a-f]{1,2}) /i; | |
129 | %types= ( "1","msdos", "4","msdos", "6","msdos", "7","hpfs", "80","minix", | |
130 | "81","minix", "83","ext2" ); | |
131 | print $types{$1}; exit(0); ' <$tp.f >$tp.m | |
132 | defaultfstype="`cat $tp.m`" | |
133 | if [ -n "$defaultfstype" ] | |
134 | then | |
135 | cat <<END | |
136 | The partition table for $blockbase claims that $tryblockdevice | |
137 | contains filesystem type $defaultfstype. | |
138 | END | |
139 | if ! grep " $defaultfstype$" /proc/filesystems >/dev/null | |
140 | then | |
141 | echo \ | |
142 | "Your kernel does not appear to support that filesystem type." | |
143 | defaultfstype="" | |
144 | fi | |
145 | fi | |
146 | echo -n "Supported filesystems: " | |
147 | sed -e 's/^.* / /' /proc/filesystems | tr '\n' ' ' | |
148 | echo -n " | |
149 | Enter filesystem type (for $tryblockdevice) [$defaultfstype]: " | |
150 | read fstype | |
151 | if [ -z "$fstype" ] | |
152 | then | |
153 | fstype="$defaultfstype" | |
154 | fi | |
155 | fi | |
156 | umount="$mountpoint" | |
157 | if mount -rt "$fstype" -o nosuid,nodev$loop "$tryblockdevice" "$mountpoint" | |
158 | then | |
159 | echo | |
160 | blockdevice="$tryblockdevice" | |
161 | else | |
162 | umount="" | |
163 | echo \ | |
164 | "Unable to mount $tryblockdevice on $mountpoint, type $fstype." | |
165 | fi | |
166 | done | |
167 | } | |
168 | ||
169 | outputparam () { | |
170 | echo "$2" | sed -e "s/'/'\\\\''/; s/^/$1='/; s/$/'/" >&3 | |
171 | } | |
172 | ||
173 | ## MAIN | |
174 | intrkey="`stty -a | sed -n 's/.*intr = \([^;]*\);.*/\1/p'`" | |
175 | echo " | |
176 | If you make a mistake, use the interrupt key ($intrkey) to abort. | |
177 | " | |
178 | ||
179 | # State variables, “best first” | |
180 | # {main,ctb,nf,nonus,nonusctb,nonusnf,lcl}_{packages,binary} | |
181 | # Empty before we've found them or if they're not available, | |
182 | # set to the relevant bit under mountpoint otherwise. | |
183 | # hierbase | |
184 | # A directory containing a Debian FTP site mirror tree. | |
185 | # mountpoint | |
186 | # The mountpoint for the filesystem containing the stuff | |
187 | # empty or unset if we don't know yet, or if we haven't mounted anything; | |
188 | # may also be empty if ‘directory’ was set. | |
189 | # blockdevice | |
190 | # The actual block device to mount. | |
191 | # fstype | |
192 | # The filesystem type to use. | |
193 | # defaultdevice | |
194 | # The default block device to mount. | |
195 | ||
196 | p_usedevel=no | |
197 | if [ -f shvar.$option ] | |
198 | then | |
199 | . ./shvar.$option | |
200 | defaultdevice="$p_blockdev" | |
201 | defaultnfsserver="$p_nfsserver" | |
202 | defaultnfsrempath="$p_nfsrempath" | |
203 | usedevel="$p_usedevel" | |
204 | fi | |
205 | ||
206 | if [ $option = multi_cd ] | |
207 | then | |
208 | mount >$tp.m | |
209 | sed -n 's/ ([^)]*)$//; s/^[^ ]* on //; s/ type iso9660$//p' <$tp.m >$tp.l | |
210 | ncdroms=`wc -l <$tp.l` | |
211 | if [ $ncdroms -gt 1 ] | |
212 | then | |
213 | response="" | |
214 | while [ -z "$response" ] | |
215 | do | |
216 | echo \ | |
217 | 'Several CD-ROMs (or other ISO9660 filesystems) are mounted:' | |
218 | egrep 'type iso9660 \([^)]*\)$' <$tp.m | nl | |
219 | echo -n \ | |
220 | "Is it any of these ? Type a number, or 'n' for none. " | |
221 | read response | |
222 | response="`echo \"$response\" | sed -e 's/[ ]*$//'`" | |
223 | if expr "$response" : '[0-9][0-9]*$' >/dev/null && \ | |
224 | [ $response -ge 1 -a $response -le $ncdroms ] | |
225 | then | |
226 | mountpoint="`sed -n $response'p' <$tp.l`" | |
227 | echo | |
228 | elif expr "$response" : '[Nn]' >/dev/null | |
229 | then | |
230 | mountpoint="" | |
231 | else | |
232 | response="" | |
233 | fi | |
234 | done | |
235 | elif [ $ncdroms = 1 ] | |
236 | then | |
237 | mountpoint="`cat $tp.l`" | |
238 | perl -ne 'print if s/ type iso9660 \([^)]*\)$// && s/ on .*$//;' \ | |
239 | <$tp.m >$tp.d | |
240 | blockdevice="`cat $tp.d`" | |
241 | yesno yes \ | |
242 | "I see a CD-ROM: $blockdevice, mounted on $mountpoint. Is it the right one ?" | |
243 | if [ $yesno = no ] | |
244 | then | |
245 | echo 'Unmounting it ...' | |
246 | umount="$mountpoint" | |
247 | while true | |
248 | do | |
249 | echo -n \ | |
250 | 'Please insert the right disc, and hit return: ' | |
251 | read response | |
252 | if mount -rt iso9660 -o nosuid,nodev \ | |
253 | "$blockdevice" "$mountpoint" | |
254 | then | |
255 | echo | |
256 | break | |
257 | fi | |
258 | done | |
259 | fi | |
260 | fi | |
261 | if [ -z "$mountpoint" ] | |
262 | then | |
263 | if [ -b /dev/cdrom ] | |
264 | then | |
265 | echo \ | |
266 | 'I see that /dev/cdrom exists and is a block device.' | |
267 | newdefaultdevice=/dev/cdrom | |
268 | fi | |
269 | getblockdev 'Insert the CD-ROM and enter the block device name' | |
270 | fi | |
271 | fi | |
272 | ||
273 | if [ $option = multi_nfs ] | |
274 | then | |
275 | mountpoint="$vardir/methods/mnt" | |
276 | while [ -z "$nfsserver" ] | |
277 | do | |
278 | echo -n \ | |
279 | "What is the name of the NFS server ? [$defaultnfsserver] " | |
280 | read response | |
281 | if [ -z "$response" -a -n "$defaultnfsserver" ] | |
282 | then | |
283 | response="$defaultnfsserver" | |
284 | fi | |
285 | if [ -z "$response" ]; then continue; fi | |
286 | if [ -x "`which rpcinfo`" ] | |
287 | then | |
288 | if rpcinfo -u "$response" mountd >/dev/null | |
289 | then | |
290 | nfsserver="$response" | |
291 | else | |
292 | echo "$response appears not to be an NFS server." | |
293 | fi | |
294 | elif [ -x "`which ping`" ] | |
295 | then | |
296 | if ping -q -c 1 "$response" | grep -q ', 1 packets received' | |
297 | then | |
298 | nfsserver="$response" | |
299 | else | |
300 | echo "$response appears to be down or nonexistent." | |
301 | fi | |
302 | else | |
303 | echo \ | |
304 | "(I can't check that now because there is no rpcinfo or ping.)" | |
305 | nfsserver="$response" | |
306 | fi | |
307 | done | |
308 | while [ -z "$nfsrempath" ] | |
309 | do | |
310 | echo -n " | |
311 | What is the pathname on the NFS server of the filesystem with | |
312 | the Debian files ? [$defaultnfsrempath] " | |
313 | read response | |
314 | if [ -z "$response" -a -n "$defaultnfsrempath" ] | |
315 | then | |
316 | response="$defaultnfsrempath" | |
317 | else | |
318 | response="`echo \"$response\" | sed -e 's:/$::; s:^/*:/:'`" | |
319 | fi | |
320 | umount="$mountpoint" | |
321 | if mount -rt nfs -o nosuid,nodev "$nfsserver:$response" "$mountpoint" | |
322 | then | |
323 | echo | |
324 | nfsrempath="$response" | |
325 | else | |
326 | umount="" | |
327 | echo \ | |
328 | "Unable to mount NFS filesystem $nfsserver:$response." | |
329 | fi | |
330 | done | |
331 | nfs="$nfsserver:$nfsrempath" | |
332 | fi | |
333 | ||
334 | if [ $option = harddisk2 ] | |
335 | then | |
336 | set +e | |
337 | printf 'p\nq\n' | fdisk /dev/hda 2>/dev/null >$tp.f | |
338 | if [ $? != 0 ] | |
339 | then | |
340 | printf 'p\nq\n' | fdisk /dev/sda 2>/dev/null >$tp.f | |
341 | fi | |
342 | set -e | |
343 | perl -ne ' | |
344 | next unless /^ *Device +Boot +Begin +Start +End +Blocks +Id +System *$/i .. !/\S/; | |
345 | next unless / [146] +DOS \d+-bit \S+$/; | |
346 | next unless m:^/\S+:p; | |
347 | print ${^MATCH}; ' <$tp.f >$tp.d | |
348 | newdefaultdevice="`cat $tp.d`" | |
349 | echo " | |
350 | I need to know which disk partition contains the distribution files; | |
351 | disk partitions are specified by the block device name in Linux." | |
352 | if [ -n "$newdefaultdevice" ] | |
353 | then | |
354 | echo \ | |
355 | "By the way, $newdefaultdevice looks like a DOS partition." | |
356 | fi | |
357 | getblockdev "Enter the partition's block device name" | |
358 | fi | |
359 | ||
360 | if [ -n "$mountpoint" ] | |
361 | then | |
362 | # We must have $mountpoint | |
363 | if [ $option = multi_cd ] | |
364 | then | |
365 | echo \ | |
366 | 'All directory names should be entered relative to the root of the CD-ROM. | |
367 | ' | |
368 | elif [ $option = multi_nfs ] | |
369 | then | |
370 | echo \ | |
371 | "All directory names should be entered relative to the root of the NFS | |
372 | filesystem, ie relative to $nfsrempath on the server. | |
373 | " | |
374 | else | |
375 | echo \ | |
376 | "All directory names should be entered relative to the root of the | |
377 | $fstype filesystem on $blockdevice. | |
378 | " | |
379 | fi | |
380 | fi | |
381 | ||
382 | # now try to get the users idea where the debian | |
383 | # hierarchy start below the mointpoint | |
384 | ||
385 | debug "mountpoint: $mountpoint" | |
386 | while true | |
387 | do | |
388 | if ismulti "${mountpoint}" "${hierbase}"; then | |
389 | multi=yes | |
390 | fi | |
391 | ||
392 | if [ $option = multi_cd ] | |
393 | then | |
394 | echo \ | |
395 | "I would like to know where on the CD-ROM the top level of the Debian | |
396 | distribution is - this will usually contain the 'dists' directory. | |
397 | ||
398 | If the CD-ROM is badly organized and doesn't have a straightforward copy of | |
399 | the distribution you may answer 'none' and we'll go through the parts | |
400 | I need individually." | |
401 | else | |
402 | echo \ | |
403 | "In order to make it easy for me to find the relevant files I'd ideally | |
404 | like to install from a straightforward copy of the Debian distribution. | |
405 | To use this I'll need to know where the top level of that copy of the | |
406 | distribution is - this directory usually contains the Packages-Master file. | |
407 | ||
408 | If you do not have a straightforward copy of the distribution available | |
409 | just answer 'none' and we'll go through the parts I need individually." | |
410 | fi | |
411 | ||
412 | defhierbase=none | |
413 | if [ -n "$p_hierbase" ]; then | |
414 | if [ -d "$mountpoint/$p_hierbase/dists/$dist/main/binary-$iarch" \ | |
415 | -o -n "$multi" ]; then | |
416 | echo "Last time you said '$p_hierbase', and that looks plausible." | |
417 | defhierbase="$p_hierbase" | |
418 | else | |
419 | echo " | |
420 | Last time you said '$p_hierbase', but that doesn't look plausible, | |
421 | since '$p_hierbase/dists/$dist/main/binary-$iarch' doesn't seem to exist. | |
422 | And I can't get the impression that you're using a multi-CD set." | |
423 | fi | |
424 | fi | |
425 | ||
426 | # at this point defhierbase is set if it looks plausible | |
427 | # if ‘none’ was entered, we assume a CD with a debian/ directory | |
428 | ||
429 | if [ none = "$defhierbase" -a -d "$mountpoint/debian/dists/$dist/main/binary-$iarch" ] | |
430 | then | |
431 | echo "'/debian' exists and looks plausible, so that's the default." | |
432 | defhierbase=/debian | |
433 | fi | |
434 | ||
435 | echo -n "Distribution top level ? [$defhierbase] " | |
436 | read response | |
437 | if [ -z "$response" ]; then response="$defhierbase"; fi | |
438 | if [ none = "$response" ]; then | |
439 | hierbase="" | |
440 | break | |
441 | elif ismulti "$mountpoint" "$response" && [ -z "$multi" ]; then | |
442 | multi=yes | |
443 | fi | |
444 | ||
445 | if ! [ -d "$mountpoint/$response/dists/$dist/main/binary-$iarch" \ | |
446 | -o -n "$multi" ]; then | |
447 | echo \ | |
448 | "Neither $response/dists/$dist/main/binary-$iarch does not exist, | |
449 | nor are you using a multi-CD set" | |
450 | break | |
451 | fi | |
452 | ||
453 | hierbase="`echo \"$response\" | sed -e 's:/$::; s:^/*:/:; s:/\+:/:g;'`" | |
454 | debug "hierbase: [$hierbase]" | |
455 | ||
456 | if [ -n "$multi" ]; then | |
457 | disklabel=`getdisklabel "$mountpoint" "/$response"` | |
458 | echo "Ok, this is disc" | |
459 | echo " $disklabel" | |
460 | #echo "Updating multi CD contents file cache ..." | |
461 | #multi_contentsfile="${mountpoint}/${response}/.disk/contents.gz" | |
462 | #zcat "$multi_contentsfile" > disk-contents.$option | |
463 | fi | |
464 | ||
465 | break; | |
466 | done | |
467 | ||
468 | distribution=$dist | |
469 | if [ -n "$hierbase" ] | |
470 | then | |
471 | if [ -d "$mountpoint/$hierbase/dists/unstable/binary-$iarch" ] | |
472 | then | |
473 | echo \ | |
474 | ' | |
475 | Both a stable released distribution and a work-in-progress | |
476 | development tree are available for installation. Would you like to | |
477 | use the unreleased development tree (this is only recommended for | |
478 | experts who like to live dangerously and want to help with testing) ?' | |
479 | yesno "$p_usedevel" 'Use unreleased development distribution ?' | |
480 | usedevel="$yesno" | |
481 | if [ "$usedevel" = yes ] | |
482 | then | |
483 | distribution=development | |
484 | fi | |
485 | else | |
486 | usedevel=no | |
487 | fi | |
488 | echo | |
489 | fi | |
490 | ||
491 | case "$hierbase" in | |
492 | /* ) ;; | |
493 | '' ) ;; | |
494 | * ) hierbase="/$hierbase" ;; | |
495 | esac | |
496 | ||
497 | check_binary () { | |
498 | # args: area-in-messages directory | |
499 | debug "check_binary($@)" | |
500 | ||
501 | if [ ! -d "${mountpoint}$2" -a -z "$multi" ] | |
502 | then | |
503 | echo "'$2' does not exist." | |
504 | return | |
505 | fi | |
506 | ||
507 | # In this special case it is ok for a sub-distribution to not contain any | |
508 | # .deb files. Each CD should contain all Packages.cd files but doesn't | |
509 | # need to contain the .deb files. | |
510 | # | |
511 | # if ! { find -L "$mountpoint$2" -name '*.deb' -print \ | |
512 | # | head -1 | grep . ; } >/dev/null 2>&1 && [ -z "$multi" ]; | |
513 | # then | |
514 | # echo "'$2' does not contain any *.deb packages." | |
515 | # return | |
516 | # fi | |
517 | ||
518 | this_binary="$2" | |
519 | echo -n "Using '$this_binary' as $1 binary directory" | |
520 | ||
521 | if [ -n "$multi" ]; then | |
522 | this_disk=`getdisklabel ${mountpoint} "/$hierbase"` | |
523 | echo " from disc" | |
524 | echo " '$this_disk'" | |
525 | else | |
526 | echo "" | |
527 | fi | |
528 | } | |
529 | ||
530 | find_area () { | |
531 | # args: area-in-messages area-in-vars subdirectory-in-hier | |
532 | # last-time-binary last-time-packages | |
533 | debug "find_area($@)" | |
534 | this_binary='' | |
535 | this_packages='' | |
536 | this_disk='' | |
537 | if [ -n "$hierbase" ] | |
538 | then | |
539 | check_binary $1 `echo "$hierbase/dists/$3/$1/binary-$iarch" | sed 's:/\+:/:g'` | |
540 | debug "THIS_BINARY $this_binary" | |
541 | fi | |
542 | if [ $option = multi_cd -a $2 = nf -a -z "$this_binary" ] | |
543 | then | |
544 | echo " | |
545 | Note: most CD-ROM distributions of Debian do not include programs | |
546 | available in the 'non-free' directory of the distribution site. | |
547 | This is because these programs have copyrights that prevent | |
548 | distribution for profit on a CD-ROM - ie they are not free software. | |
549 | If you wish to install these programs you'll have to get them from an | |
550 | alternative source." | |
551 | fi | |
552 | while [ -z "$this_binary" ] | |
553 | do | |
554 | defaultbinary="$4" | |
555 | echo " | |
556 | Which directory contains the *.deb packages from the $1 distribution | |
557 | area (this directory is named '$3/binary' on the distribution site) ? | |
558 | Say 'none' if this area is not available." | |
559 | if [ $2 != main -a -z "$defaultbinary" ] | |
560 | then | |
561 | defaultbinary=none | |
562 | fi | |
563 | echo -n \ | |
564 | "Enter _$1_ binary directory. [$4] | |
565 | ? " | |
566 | read response | |
567 | if [ -z "$response" -a -n "$defaultbinary" ] | |
568 | then | |
569 | response="$defaultbinary" | |
570 | fi | |
571 | if [ none = "$response" ] | |
572 | then | |
573 | break | |
574 | fi | |
575 | case "$response" in | |
576 | '' | none) continue ;; | |
577 | esac | |
578 | check_binary $1 "`echo \"$response\" | sed -e 's:/$::; s:^/*:/:'`" | |
579 | done | |
580 | if [ -n "$this_binary" ] | |
581 | then | |
582 | if [ "$multi" = "yes" ]; then | |
583 | for f in Packages.cd.gz packages.cd.gz Packages.cd packages.cd | |
584 | do | |
585 | if [ -f "$mountpoint/$this_binary/$f" ] | |
586 | then | |
587 | this_packages="$this_binary/$f" | |
588 | echo "Using '$this_packages' for $1." | |
589 | break | |
590 | fi | |
591 | done | |
592 | else | |
593 | if [ -f "${mountpoint}${hierbase}/.disk/packages/$1/Packages.gz" ]; then | |
594 | this_packages=`echo "${hierbase}/.disk/packages/$1/Packages.gz"|sed 's:/\+:/:g'` | |
595 | echo "Using '${this_packages}' for $1." | |
596 | fi | |
597 | fi | |
598 | while [ -z "$this_packages" ] | |
599 | do | |
600 | echo -n " | |
601 | I can't find the $1 'Packages.cd' file. The information in the | |
602 | 'Packages.cd' file is important for package selection during new | |
603 | installations, and is very useful for upgrades. | |
604 | ||
605 | If you overlooked it when downloading you should do get it now and | |
606 | return to this installation procedure when you have done so: you will | |
607 | find one Packages.cd file and one Packages.cd.gz file -- either will do -- | |
608 | in the 'binary' subdirectory of each area on the FTP sites and | |
609 | CD-ROMs. Alternatively (and this will be rather slow) I can scan the | |
610 | packages in the distribution area - say 'scan' if you want me to do so. | |
611 | ||
612 | You need a separate Packages.cd file from each of the distribution areas | |
613 | you wish to install. | |
614 | ||
615 | Where is the _$1_ 'Packages.cd' file (if none is available, say 'none') | |
616 | [$5] | |
617 | ? " | |
618 | read response | |
619 | if [ -z "$response" -a -n "$5" ] | |
620 | then | |
621 | response="$5" | |
622 | fi | |
623 | case "$response" in | |
624 | '') break ;; | |
625 | none) break ;; | |
626 | scan) this_packages=scan ;; | |
627 | /*) this_packages="$response" ;; | |
628 | *) this_packages="/$response" ;; | |
629 | esac | |
630 | done | |
631 | fi | |
632 | eval $2'_binary="$this_binary"' | |
633 | eval $2'_packages="$this_packages"' | |
634 | eval $2'_disk="$this_disk"' | |
635 | } | |
636 | ||
637 | find_area main main "$distribution" "$p_main_binary" "$p_main_packages" | |
638 | find_area contrib ctb "$distribution" "$p_ctb_binary" "$p_ctb_packages" | |
639 | find_area non-free nf "$distribution" "$p_nf_binary" "$p_nf_packages" | |
640 | find_area non-US/main nonus "$distribution" "$p_nonus_binary" "$p_nonus_packages" | |
641 | find_area non-US/contrib nonusctb "$distribution" "$p_nonusctb_binary" "$p_nonusctb_packages" | |
642 | find_area non-US/non-free nonusnf "$distribution" "$p_nonusnf_binary" "$p_nonusnf_packages" | |
643 | find_area local lcl local "$p_lcl_binary" "$p_lcl_packages" | |
644 | ||
645 | echo -n ' | |
646 | Hit RETURN to continue. ' | |
647 | read response | |
648 | ||
649 | exec 3>shvar.$option.new | |
650 | ||
651 | outputparam p_blockdev "$blockdevice" | |
652 | outputparam p_fstype "$fstype" | |
653 | outputparam p_mountpoint "$mountpoint" | |
654 | outputparam p_nfsserver "$nfsserver" | |
655 | outputparam p_nfsrempath "$nfsrempath" | |
656 | outputparam p_nfs "$nfs" | |
657 | outputparam p_hierbase "$hierbase" | |
658 | outputparam p_usedevel "$usedevel" | |
659 | outputparam p_main_packages "$main_packages" | |
660 | outputparam p_main_binary "$main_binary" | |
661 | outputparam p_main_disk "$main_disk" | |
662 | outputparam p_ctb_packages "$ctb_packages" | |
663 | outputparam p_ctb_binary "$ctb_binary" | |
664 | outputparam p_ctb_disk "$ctb_disk" | |
665 | outputparam p_nf_packages "$nf_packages" | |
666 | outputparam p_nf_binary "$nf_binary" | |
667 | outputparam p_nf_disk "$nf_disk" | |
668 | outputparam p_nonus_binary "$nonus_binary" | |
669 | outputparam p_nonus_packages "$nonus_packages" | |
670 | outputparam p_nonus_disk "$nonus_disk" | |
671 | outputparam p_nonusctb_binary "$nonusctb_binary" | |
672 | outputparam p_nonusctb_packages "$nonusctb_packages" | |
673 | outputparam p_nonusctb_disk "$nonusctb_disk" | |
674 | outputparam p_nonusnf_binary "$nonusnf_binary" | |
675 | outputparam p_nonusnf_packages "$nonusnf_packages" | |
676 | outputparam p_nonusnf_disk "$nonusnf_disk" | |
677 | outputparam p_lcl_packages "$lcl_packages" | |
678 | outputparam p_lcl_binary "$lcl_binary" | |
679 | outputparam p_multi "$multi" | |
680 | outputparam p_multi_contentsfile "$multi_contentsfile" | |
681 | ||
682 | mv shvar.$option.new shvar.$option | |
683 | ||
684 | xit=0 |