|
|
@@ -0,0 +1,663 @@
|
|
|
+#!/bin/sh
|
|
|
+
|
|
|
+set -e
|
|
|
+vardir="$1"
|
|
|
+method=$2
|
|
|
+option=$3
|
|
|
+
|
|
|
+test -d "$vardir/methods/$method" || mkdir "$vardir/methods/$method"
|
|
|
+cd "$vardir/methods/$method"
|
|
|
+tp=/tmp/ddm$$
|
|
|
+
|
|
|
+iarch=`dpkg --print-installation-architecture`
|
|
|
+dist=stable
|
|
|
+
|
|
|
+xit=1
|
|
|
+trap '
|
|
|
+ rm -f $tp.?
|
|
|
+ if [ -n "$umount" ]
|
|
|
+ then
|
|
|
+ umount "$umount" >/dev/null 2>&1
|
|
|
+ fi
|
|
|
+ exit $xit
|
|
|
+' 0
|
|
|
+
|
|
|
+if ls -d "$tp.?" >/dev/null 2>&1
|
|
|
+then
|
|
|
+ rm $tp.?
|
|
|
+fi
|
|
|
+
|
|
|
+#debug() { echo "DEBUG: $@"; }
|
|
|
+debug() { true; }
|
|
|
+ismulti() { debug $1 $2; test -e "$1/.disk/info" || test -e "$1$2/.disk/info"; }
|
|
|
+
|
|
|
+# 1/ mountpoint
|
|
|
+# 2/ hierarchy
|
|
|
+getdisklabel () {
|
|
|
+ debug "$1" "$2"
|
|
|
+ if [ -f $1/.disk/info ]
|
|
|
+ then
|
|
|
+ echo -n `head -1 "$1/.disk/info"`
|
|
|
+ else
|
|
|
+ if [ -f $1$2/.disk/info ]
|
|
|
+ then
|
|
|
+ echo -n `head -1 "$1$2/.disk/info"`
|
|
|
+ else
|
|
|
+ echo -n 'Non-Debian disc'
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+yesno () {
|
|
|
+ while true
|
|
|
+ do
|
|
|
+ echo -n "$2 [$1] "
|
|
|
+ read response
|
|
|
+ if [ -z "$response" ]
|
|
|
+ then
|
|
|
+ response="$1"
|
|
|
+ fi
|
|
|
+ case "$response" in
|
|
|
+ [Nn]*) yesno=no ; return ;;
|
|
|
+ [Yy]*) yesno=yes ; return ;;
|
|
|
+ esac
|
|
|
+ done
|
|
|
+}
|
|
|
+
|
|
|
+getblockdev () {
|
|
|
+ mountpoint="$vardir/methods/mnt"
|
|
|
+ if [ -z "$defaultdevice" ]
|
|
|
+ then
|
|
|
+ defaultdevice="$newdefaultdevice"
|
|
|
+ elif [ "$defaultdevice" != "$newdefaultdevice" ]
|
|
|
+ then
|
|
|
+ echo \
|
|
|
+ "Last time you specified installation from $defaultdevice."
|
|
|
+ fi
|
|
|
+ promptstring="$1"
|
|
|
+ while [ -z "$blockdevice" ]
|
|
|
+ do
|
|
|
+ echo -n "$promptstring [$defaultdevice]: "
|
|
|
+ read response
|
|
|
+ if [ -z "$response" ]
|
|
|
+ then
|
|
|
+ response="$defaultdevice"
|
|
|
+ fi
|
|
|
+ if [ ! -b "$response" ]
|
|
|
+ then
|
|
|
+ echo "$response is not a block device - will try as loopback.";
|
|
|
+ loop=",loop"
|
|
|
+ fi
|
|
|
+ tryblockdevice="$response"
|
|
|
+ if [ $option = multi_cd ]
|
|
|
+ then
|
|
|
+ fstype=iso9660
|
|
|
+ elif [ $option = harddisk2 ]
|
|
|
+ then
|
|
|
+ blockbase="`echo \"$tryblockdevice\" | sed -e 's/[0-9]\{1,\}$//'`"
|
|
|
+ set +e
|
|
|
+ echo -e "p\nq\n" | fdisk "$blockbase" 2>/dev/null >$tp.f
|
|
|
+ set -e
|
|
|
+ proposeddevice="$tryblockdevice" perl -ne '
|
|
|
+next unless /^ *Device +Boot +Begin +Start +End +Blocks +Id +System *$/i .. !/\S/;
|
|
|
+next unless s:^/\S+:: && $& eq $ENV{"proposeddevice"};
|
|
|
+next unless s/^ +(\* +)?\d+ +\d+ +\d+ +\d+\+? +//;
|
|
|
+next unless m/^([0-9a-f]{1,2}) /i;
|
|
|
+%types= ( "1","msdos", "4","msdos", "6","msdos", "7","hpfs", "80","minix",
|
|
|
+ "81","minix", "83","ext2" );
|
|
|
+print $types{$1}; exit(0); ' <$tp.f >$tp.m
|
|
|
+ defaultfstype="`cat $tp.m`"
|
|
|
+ if [ -n "$defaultfstype" ]
|
|
|
+ then
|
|
|
+ cat <<END
|
|
|
+The partition table for $blockbase claims that $tryblockdevice
|
|
|
+contains filesystem type $defaultfstype.
|
|
|
+END
|
|
|
+ if ! grep " $defaultfstype$" /proc/filesystems >/dev/null
|
|
|
+ then
|
|
|
+ echo \
|
|
|
+ "Your kernel does not appear to support that filesystem type."
|
|
|
+ defaultfstype=""
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+ echo -n "Supported filesystems: "
|
|
|
+ sed -e 's/^.* / /' /proc/filesystems | tr '\n' ' '
|
|
|
+ echo -n "
|
|
|
+Enter filesystem type (for $tryblockdevice) [$defaultfstype]: "
|
|
|
+ read fstype
|
|
|
+ if [ -z "$fstype" ]
|
|
|
+ then
|
|
|
+ fstype="$defaultfstype"
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+ umount="$mountpoint"
|
|
|
+ if mount -rt "$fstype" -o nosuid,nodev$loop "$tryblockdevice" "$mountpoint"
|
|
|
+ then
|
|
|
+ echo
|
|
|
+ blockdevice="$tryblockdevice"
|
|
|
+ else
|
|
|
+ umount=""
|
|
|
+ echo \
|
|
|
+ "Unable to mount $tryblockdevice on $mountpoint, type $fstype."
|
|
|
+ fi
|
|
|
+ done
|
|
|
+}
|
|
|
+
|
|
|
+outputparam () {
|
|
|
+ echo "$2" | sed -e "s/'/'\\\\''/; s/^/$1='/; s/$/'/" >&3
|
|
|
+}
|
|
|
+
|
|
|
+## MAIN
|
|
|
+intrkey="`stty -a | sed -n 's/.*intr = \([^;]*\);.*/\1/p'`"
|
|
|
+echo "
|
|
|
+If you make a mistake, use the interrupt key ($intrkey) to abort.
|
|
|
+"
|
|
|
+
|
|
|
+# State variables, `best first'
|
|
|
+# {main,ctb,nf,nonus,nonusctb,nonusnf,lcl}_{packages,binary}
|
|
|
+# Empty before we've found them or if they're not available,
|
|
|
+# set to the relevant bit under mountpoint otherwise.
|
|
|
+# hierbase
|
|
|
+# A directory containing a Debian FTP site mirror tree.
|
|
|
+# mountpoint
|
|
|
+# The mountpoint for the filesystem containing the stuff
|
|
|
+# empty or unset if we don't know yet, or if we haven't mounted anything;
|
|
|
+# may also be empty if `directory' was set.
|
|
|
+# blockdevice
|
|
|
+# The actual block device to mount.
|
|
|
+# fstype
|
|
|
+# The filesystem type to use.
|
|
|
+# defaultdevice
|
|
|
+# The default block device to mount.
|
|
|
+
|
|
|
+p_usedevel=no
|
|
|
+if [ -f shvar.$option ]
|
|
|
+then
|
|
|
+ . ./shvar.$option
|
|
|
+ defaultdevice="$p_blockdev"
|
|
|
+ defaultnfsserver="$p_nfsserver"
|
|
|
+ defaultnfsrempath="$p_nfsrempath"
|
|
|
+ usedevel="$p_usedevel"
|
|
|
+fi
|
|
|
+
|
|
|
+if [ $option = multi_cd ]
|
|
|
+then
|
|
|
+ mount >$tp.m
|
|
|
+ sed -n 's/ ([^)]*)$//; s/^[^ ]* on //; s/ type iso9660$//p' <$tp.m >$tp.l
|
|
|
+ ncdroms=`wc -l <$tp.l`
|
|
|
+ if [ $ncdroms -gt 1 ]
|
|
|
+ then
|
|
|
+ response=""
|
|
|
+ while [ -z "$response" ]
|
|
|
+ do
|
|
|
+ echo \
|
|
|
+ 'Several CD-ROMs (or other ISO9660 filesystems) are mounted:'
|
|
|
+ egrep 'type iso9660 \([^)]*\)$' <$tp.m | nl
|
|
|
+ echo -n \
|
|
|
+ 'Is it any of these ? Type a number, or `n'\'' for none. '
|
|
|
+ read response
|
|
|
+ response="`echo \"$response\" | sed -e 's/[ ]*$//'`"
|
|
|
+ if expr "$response" : '[0-9][0-9]*$' >/dev/null && \
|
|
|
+ [ $response -ge 1 -a $response -le $ncdroms ]
|
|
|
+ then
|
|
|
+ mountpoint="`sed -n $response'p' <$tp.l`"
|
|
|
+ echo
|
|
|
+ elif expr "$response" : '[Nn]' >/dev/null
|
|
|
+ then
|
|
|
+ mountpoint=""
|
|
|
+ else
|
|
|
+ response=""
|
|
|
+ fi
|
|
|
+ done
|
|
|
+ elif [ $ncdroms = 1 ]
|
|
|
+ then
|
|
|
+ mountpoint="`cat $tp.l`"
|
|
|
+ perl -ne 'print if s/ type iso9660 \([^)]*\)$// && s/ on .*$//;' \
|
|
|
+ <$tp.m >$tp.d
|
|
|
+ blockdevice="`cat $tp.d`"
|
|
|
+ yesno yes \
|
|
|
+ "I see a CD-ROM: $blockdevice, mounted on $mountpoint. Is it the right one ?"
|
|
|
+ if [ $yesno = no ]
|
|
|
+ then
|
|
|
+ echo 'Unmounting it ...'
|
|
|
+ umount="$mountpoint"
|
|
|
+ while true
|
|
|
+ do
|
|
|
+ echo -n \
|
|
|
+ 'Please insert the right disc, and hit return: '
|
|
|
+ read response
|
|
|
+ if mount -rt iso9660 -o nosuid,nodev \
|
|
|
+ "$blockdevice" "$mountpoint"
|
|
|
+ then
|
|
|
+ echo
|
|
|
+ break
|
|
|
+ fi
|
|
|
+ done
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+ if [ -z "$mountpoint" ]
|
|
|
+ then
|
|
|
+ if [ -b /dev/cdrom ]
|
|
|
+ then
|
|
|
+ echo \
|
|
|
+ 'I see that /dev/cdrom exists and is a block device.'
|
|
|
+ newdefaultdevice=/dev/cdrom
|
|
|
+ fi
|
|
|
+ getblockdev 'Insert the CD-ROM and enter the block device name'
|
|
|
+ fi
|
|
|
+fi
|
|
|
+
|
|
|
+if [ $option = multi_nfs ]
|
|
|
+then
|
|
|
+ mountpoint="$vardir/methods/mnt"
|
|
|
+ while [ -z "$nfsserver" ]
|
|
|
+ do
|
|
|
+ echo -n \
|
|
|
+"What is the name of the NFS server ? [$defaultnfsserver] "
|
|
|
+ read response
|
|
|
+ if [ -z "$response" -a -n "$defaultnfsserver" ]
|
|
|
+ then
|
|
|
+ response="$defaultnfsserver"
|
|
|
+ fi
|
|
|
+ if [ -z "$response" ]; then continue; fi
|
|
|
+ if [ -x /usr/bin/rpcinfo ]
|
|
|
+ then
|
|
|
+ if rpcinfo -u "$response" mountd >/dev/null
|
|
|
+ then
|
|
|
+ nfsserver="$response"
|
|
|
+ else
|
|
|
+ echo "$response appears not to be an NFS server."
|
|
|
+ fi
|
|
|
+ elif [ -x /bin/ping ]
|
|
|
+ then
|
|
|
+ if ping -q -c 1 "$response" | grep -q ', 1 packets received'
|
|
|
+ then
|
|
|
+ nfsserver="$response"
|
|
|
+ else
|
|
|
+ echo "$response appears to be down or nonexistent."
|
|
|
+ fi
|
|
|
+ else
|
|
|
+ echo \
|
|
|
+"(I can't check that now because there is no /usr/bin/rpcinfo or /bin/ping.)"
|
|
|
+ nfsserver="$response"
|
|
|
+ fi
|
|
|
+ done
|
|
|
+ while [ -z "$nfsrempath" ]
|
|
|
+ do
|
|
|
+ echo -n "
|
|
|
+What is the pathname on the NFS server of the filesystem with
|
|
|
+the Debian files ? [$defaultnfsrempath] "
|
|
|
+ read response
|
|
|
+ if [ -z "$response" -a -n "$defaultnfsrempath" ]
|
|
|
+ then
|
|
|
+ response="$defaultnfsrempath"
|
|
|
+ else
|
|
|
+ response="`echo \"$response\" | sed -e 's:/$::; s:^/*:/:'`"
|
|
|
+ fi
|
|
|
+ umount="$mountpoint"
|
|
|
+ if mount -rt nfs -o nosuid,nodev "$nfsserver:$response" "$mountpoint"
|
|
|
+ then
|
|
|
+ echo
|
|
|
+ nfsrempath="$response"
|
|
|
+ else
|
|
|
+ umount=""
|
|
|
+ echo \
|
|
|
+"Unable to mount NFS filesystem $nfsserver:$response."
|
|
|
+ fi
|
|
|
+ done
|
|
|
+ nfs="$nfsserver:$nfsrempath"
|
|
|
+fi
|
|
|
+
|
|
|
+if [ $option = harddisk2 ]
|
|
|
+then
|
|
|
+ set +e
|
|
|
+ echo -e 'p\nq\n' | fdisk /dev/hda 2>/dev/null >$tp.f
|
|
|
+ if [ $? != 0 ]
|
|
|
+ then
|
|
|
+ echo -e 'p\nq\n' | fdisk /dev/sda 2>/dev/null >$tp.f
|
|
|
+ fi
|
|
|
+ set -e
|
|
|
+ perl -ne '
|
|
|
+next unless /^ *Device +Boot +Begin +Start +End +Blocks +Id +System *$/i .. !/\S/;
|
|
|
+next unless / [146] +DOS \d+-bit \S+$/;
|
|
|
+next unless m:^/\S+:;
|
|
|
+print $&; ' <$tp.f >$tp.d
|
|
|
+ newdefaultdevice="`cat $tp.d`"
|
|
|
+ echo "
|
|
|
+I need to know which disk partition contains the distribution files;
|
|
|
+disk partitions are specified by the block device name in Linux."
|
|
|
+ if [ -n "$newdefaultdevice" ]
|
|
|
+ then
|
|
|
+ echo \
|
|
|
+"By the way, $newdefaultdevice looks like a DOS partition."
|
|
|
+ fi
|
|
|
+ getblockdev "Enter the partition's block device name"
|
|
|
+fi
|
|
|
+
|
|
|
+if [ -n "$mountpoint" ]
|
|
|
+then
|
|
|
+ # We must have $mountpoint
|
|
|
+ if [ $option = multi_cd ]
|
|
|
+ then
|
|
|
+ echo \
|
|
|
+'All directory names should be entered relative to the root of the CD-ROM.
|
|
|
+'
|
|
|
+ elif [ $option = multi_nfs ]
|
|
|
+ then
|
|
|
+ echo \
|
|
|
+"All directory names should be entered relative to the root of the NFS
|
|
|
+filesystem, ie relative to $nfsrempath on the server.
|
|
|
+"
|
|
|
+ else
|
|
|
+ echo \
|
|
|
+"All directory names should be entered relative to the root of the
|
|
|
+$fstype filesystem on $blockdevice.
|
|
|
+"
|
|
|
+ fi
|
|
|
+fi
|
|
|
+
|
|
|
+# now try to get the users idea where the debian
|
|
|
+# hierarchy start below the mointpoint
|
|
|
+
|
|
|
+debug "mountpoint: $mountpoint"
|
|
|
+while true
|
|
|
+do
|
|
|
+ if ismulti "${mountpoint}" "${hierbase}"; then
|
|
|
+ multi=yes
|
|
|
+ fi
|
|
|
+
|
|
|
+ if [ $option = multi_cd ]
|
|
|
+ then
|
|
|
+ echo \
|
|
|
+"I would like to know where on the CD-ROM the top level of the Debian
|
|
|
+distribution is - this will usually contain the \`dists' directory.
|
|
|
+
|
|
|
+If the CD-ROM is badly organized and doesn't have a straightforward copy of
|
|
|
+the distribution you may answer \`none' and we'll go through the parts
|
|
|
+I need individually."
|
|
|
+ else
|
|
|
+ echo \
|
|
|
+"In order to make it easy for me to find the relevant files I'd ideally
|
|
|
+like to install from a straightforward copy of the Debian distribution.
|
|
|
+To use this I'll need to know where the top level of that copy of the
|
|
|
+distribution is - this directory usually contains the Packages-Master file.
|
|
|
+
|
|
|
+If you do not have a straightforward copy of the distribution available
|
|
|
+just answer \`none' and we'll go through the parts I need individually."
|
|
|
+ fi
|
|
|
+
|
|
|
+ defhierbase=none
|
|
|
+ if [ -n "$p_hierbase" ]; then
|
|
|
+ if [ -d "$mountpoint/$p_hierbase/dists/$dist/main/binary-$iarch" \
|
|
|
+ -o -n "$multi" ]; then
|
|
|
+ echo "Last time you said \`$p_hierbase', and that looks plausible."
|
|
|
+ defhierbase="$p_hierbase"
|
|
|
+ else
|
|
|
+ echo "
|
|
|
+Last time you said \`$p_hierbase', but that doesn't look plausible,
|
|
|
+since \`$p_hierbase/dists/$dist/main/binary-$iarch' doesn't seem to exist.
|
|
|
+And I can't get the impression that you're using a multi-CD set."
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+
|
|
|
+ # at this point defhierbase is set if it looks plausible
|
|
|
+ # if `none' was entered, we assume a CD with a debian/ directory
|
|
|
+
|
|
|
+ if [ none = "$defhierbase" -a -d "$mountpoint/debian/dists/$dist/main/binary-$iarch" ]
|
|
|
+ then
|
|
|
+ echo "\`/debian' exists and looks plausible, so that's the default."
|
|
|
+ defhierbase=/debian
|
|
|
+ fi
|
|
|
+
|
|
|
+ echo -n "Distribution top level ? [$defhierbase] "
|
|
|
+ read response
|
|
|
+ if [ -z "$response" ]; then response="$defhierbase"; fi
|
|
|
+ if [ none = "$response" ]; then
|
|
|
+ hierbase=""
|
|
|
+ break
|
|
|
+ elif ismulti "$mountpoint" "$response" && [ -z "$multi" ]; then
|
|
|
+ multi=yes
|
|
|
+ fi
|
|
|
+
|
|
|
+ if ! [ -d "$mountpoint/$response/dists/$dist/main/binary-$iarch" \
|
|
|
+ -o -n "$multi" ]; then
|
|
|
+ echo \
|
|
|
+"Neither $response/dists/$dist/main/binary-$iarch does not exist,
|
|
|
+nor are you using a multi-CD set"
|
|
|
+ break
|
|
|
+ fi
|
|
|
+
|
|
|
+ hierbase="`echo \"$response\" | sed -e 's:/$::; s:^/*:/:; s:/\+:/:g;'`"
|
|
|
+ debug "hierbase: [$hierbase]"
|
|
|
+
|
|
|
+ if [ -n "$multi" ]; then
|
|
|
+ disklabel=`getdisklabel "$mountpoint" "/$response"`
|
|
|
+ echo "Ok, this is disc"
|
|
|
+ echo " $disklabel"
|
|
|
+ #echo "Updating multi CD contents file cache ..."
|
|
|
+ #multi_contentsfile="${mountpoint}/${response}/.disk/contents.gz"
|
|
|
+ #zcat "$multi_contentsfile" > disk-contents.$option
|
|
|
+ fi
|
|
|
+
|
|
|
+ break;
|
|
|
+done
|
|
|
+
|
|
|
+distribution=$dist
|
|
|
+if [ -n "$hierbase" ]
|
|
|
+then
|
|
|
+ if [ -d "$mountpoint/$hierbase/dists/unstable/binary-$iarch" ]
|
|
|
+ then
|
|
|
+ echo \
|
|
|
+'
|
|
|
+Both a stable released distribution and a work-in-progress
|
|
|
+development tree are available for installation. Would you like to
|
|
|
+use the unreleased development tree (this is only recommended for
|
|
|
+experts who like to live dangerously and want to help with testing) ?'
|
|
|
+ yesno "$p_usedevel" 'Use unreleased development distribution ?'
|
|
|
+ usedevel="$yesno"
|
|
|
+ if [ "$usedevel" = yes ]
|
|
|
+ then
|
|
|
+ distribution=development
|
|
|
+ fi
|
|
|
+ else
|
|
|
+ usedevel=no
|
|
|
+ fi
|
|
|
+ echo
|
|
|
+fi
|
|
|
+
|
|
|
+case "$hierbase" in
|
|
|
+/* ) ;;
|
|
|
+'' ) ;;
|
|
|
+* ) hierbase="/$hierbase" ;;
|
|
|
+esac
|
|
|
+
|
|
|
+check_binary () {
|
|
|
+ # args: area-in-messages directory
|
|
|
+ debug "check_binary($@)"
|
|
|
+
|
|
|
+ if [ ! -d "${mountpoint}$2" -a -z "$multi" ]
|
|
|
+ then
|
|
|
+ echo "\`$2' does not exist."
|
|
|
+ return
|
|
|
+ fi
|
|
|
+
|
|
|
+# In this special case it is ok for a sub-distribution to not contain any
|
|
|
+# .deb files. Each CD should contain all Packages.cd files but doesn't
|
|
|
+# need to contain the .deb files.
|
|
|
+#
|
|
|
+# if ! { find "$mountpoint$2" -follow -name '*.deb' -print \
|
|
|
+# | head -1 | grep . ; } >/dev/null 2>&1 && [ -z "$multi" ];
|
|
|
+# then
|
|
|
+# echo "\`$2' does not contain any *.deb packages."
|
|
|
+# return
|
|
|
+# fi
|
|
|
+
|
|
|
+ this_binary="$2"
|
|
|
+ echo -n "Using \`$this_binary' as $1 binary dir"
|
|
|
+
|
|
|
+ if [ -n "$multi" ]; then
|
|
|
+ this_disk=`getdisklabel ${mountpoint} "/$hierbase"`
|
|
|
+ echo " from disc"
|
|
|
+ echo " \`$this_disk'"
|
|
|
+ else
|
|
|
+ echo ""
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+find_area () {
|
|
|
+ # args: area-in-messages area-in-vars subdirectory-in-hier
|
|
|
+ # last-time-binary last-time-packages
|
|
|
+ debug "find_area($@)"
|
|
|
+ this_binary=''
|
|
|
+ this_packages=''
|
|
|
+ this_disk=''
|
|
|
+ if [ -n "$hierbase" ]
|
|
|
+ then
|
|
|
+ check_binary $1 `echo "$hierbase/dists/$3/$1/binary-$iarch" | sed 's:/\+:/:g'`
|
|
|
+ debug "THIS_BINARY $this_binary"
|
|
|
+ fi
|
|
|
+ if [ $option = multi_cd -a $2 = nf -a -z "$this_binary" ]
|
|
|
+ then
|
|
|
+ echo '
|
|
|
+Note: most CD-ROM distributions of Debian do not include programs
|
|
|
+available in the `non-free'\'' directory of the distribution site.
|
|
|
+This is because these programs have copyrights that prevent
|
|
|
+distribution for profit on a CD-ROM - ie they are not free software.
|
|
|
+If you wish to install these programs you'\''ll have to get them from an
|
|
|
+alternative source.'
|
|
|
+ fi
|
|
|
+ while [ -z "$this_binary" ]
|
|
|
+ do
|
|
|
+ defaultbinary="$4"
|
|
|
+ echo "
|
|
|
+Which directory contains the *.deb packages from the $1 distribution
|
|
|
+area (this directory is named \`$3/binary' on the distribution site) ?
|
|
|
+Say \`none' if this area is not available."
|
|
|
+ if [ $2 != main -a -z "$defaultbinary" ]
|
|
|
+ then
|
|
|
+ defaultbinary=none
|
|
|
+ fi
|
|
|
+ echo -n \
|
|
|
+"Enter _$1_ binary dir. [$4]
|
|
|
+ ? "
|
|
|
+ read response
|
|
|
+ if [ -z "$response" -a -n "$defaultbinary" ]
|
|
|
+ then
|
|
|
+ response="$defaultbinary"
|
|
|
+ fi
|
|
|
+ if [ none = "$response" ]
|
|
|
+ then
|
|
|
+ break
|
|
|
+ fi
|
|
|
+ case "$response" in
|
|
|
+ '' | none) continue ;;
|
|
|
+ esac
|
|
|
+ check_binary $1 "`echo \"$response\" | sed -e 's:/$::; s:^/*:/:'`"
|
|
|
+ done
|
|
|
+ if [ -n "$this_binary" ]
|
|
|
+ then
|
|
|
+ if [ "$multi" = "yes" ]; then
|
|
|
+ for f in Packages.cd.gz packages.cd.gz Packages.cd packages.cd
|
|
|
+ do
|
|
|
+ if [ -f "$mountpoint/$this_binary/$f" ]
|
|
|
+ then
|
|
|
+ this_packages="$this_binary/$f"
|
|
|
+ echo "Using \`$this_packages' for $1."
|
|
|
+ break
|
|
|
+ fi
|
|
|
+ done
|
|
|
+ else
|
|
|
+ if [ -f "${mountpoint}${hierbase}/.disk/packages/$1/Packages.gz" ]; then
|
|
|
+ this_packages=`echo "${hierbase}/.disk/packages/$1/Packages.gz"|sed 's:/\+:/:g'`
|
|
|
+ echo "Using \`${this_packages}' for $1."
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+ while [ -z "$this_packages" ]
|
|
|
+ do
|
|
|
+ echo -n "
|
|
|
+I can't find the $1 \`Packages.cd' file. The information in the
|
|
|
+\`Packages.cd' file is important for package selection during new
|
|
|
+installations, and is very useful for upgrades.
|
|
|
+
|
|
|
+If you overlooked it when downloading you should do get it now and
|
|
|
+return to this installation procedure when you have done so: you will
|
|
|
+find one Packages.cd file and one Packages.cd.gz file -- either will do --
|
|
|
+in the \`binary' subdirectory of each area on the FTP sites and
|
|
|
+CD-ROMs. Alternatively (and this will be rather slow) I can scan the
|
|
|
+packages in the distribution area - say \`scan' if you want me to do so.
|
|
|
+
|
|
|
+You need a separate Packages.cd file from each of the distribution areas
|
|
|
+you wish to install.
|
|
|
+
|
|
|
+Where is the _$1_ \`Packages.cd' file (if none is available, say \`none')
|
|
|
+[$5]
|
|
|
+ ? "
|
|
|
+ read response
|
|
|
+ if [ -z "$response" -a -n "$5" ]
|
|
|
+ then
|
|
|
+ response="$5"
|
|
|
+ fi
|
|
|
+ case "$response" in
|
|
|
+ '') break ;;
|
|
|
+ none) break ;;
|
|
|
+ scan) this_packages=scan ;;
|
|
|
+ /*) this_packages="$response" ;;
|
|
|
+ *) this_packages="/$response" ;;
|
|
|
+ esac
|
|
|
+ done
|
|
|
+ fi
|
|
|
+ eval $2'_binary="$this_binary"'
|
|
|
+ eval $2'_packages="$this_packages"'
|
|
|
+ eval $2'_disk="$this_disk"'
|
|
|
+}
|
|
|
+
|
|
|
+find_area main main "$distribution" "$p_main_binary" "$p_main_packages"
|
|
|
+find_area contrib ctb "$distribution" "$p_ctb_binary" "$p_ctb_packages"
|
|
|
+find_area non-free nf "$distribution" "$p_nf_binary" "$p_nf_packages"
|
|
|
+find_area non-US/main nonus "$distribution" "$p_nonus_binary" "$p_nonus_packages"
|
|
|
+find_area non-US/contrib nonusctb "$distribution" "$p_nonusctb_binary" "$p_nonusctb_packages"
|
|
|
+find_area non-US/non-free nonusnf "$distribution" "$p_nonusnf_binary" "$p_nonusnf_packages"
|
|
|
+find_area local lcl local "$p_lcl_binary" "$p_lcl_packages"
|
|
|
+
|
|
|
+echo -n '
|
|
|
+Hit RETURN to continue. '
|
|
|
+read response
|
|
|
+
|
|
|
+exec 3>shvar.$option.new
|
|
|
+
|
|
|
+outputparam p_blockdev "$blockdevice"
|
|
|
+outputparam p_fstype "$fstype"
|
|
|
+outputparam p_mountpoint "$mountpoint"
|
|
|
+outputparam p_nfsserver "$nfsserver"
|
|
|
+outputparam p_nfsrempath "$nfsrempath"
|
|
|
+outputparam p_nfs "$nfs"
|
|
|
+outputparam p_hierbase "$hierbase"
|
|
|
+outputparam p_usedevel "$usedevel"
|
|
|
+outputparam p_main_packages "$main_packages"
|
|
|
+outputparam p_main_binary "$main_binary"
|
|
|
+outputparam p_main_disk "$main_disk"
|
|
|
+outputparam p_ctb_packages "$ctb_packages"
|
|
|
+outputparam p_ctb_binary "$ctb_binary"
|
|
|
+outputparam p_ctb_disk "$ctb_disk"
|
|
|
+outputparam p_nf_packages "$nf_packages"
|
|
|
+outputparam p_nf_binary "$nf_binary"
|
|
|
+outputparam p_nf_disk "$nf_disk"
|
|
|
+outputparam p_nonus_binary "$nonus_binary"
|
|
|
+outputparam p_nonus_packages "$nonus_packages"
|
|
|
+outputparam p_nonus_disk "$nonus_disk"
|
|
|
+outputparam p_nonusctb_binary "$nonusctb_binary"
|
|
|
+outputparam p_nonusctb_packages "$nonusctb_packages"
|
|
|
+outputparam p_nonusctb_disk "$nonusctb_disk"
|
|
|
+outputparam p_nonusnf_binary "$nonusnf_binary"
|
|
|
+outputparam p_nonusnf_packages "$nonusnf_packages"
|
|
|
+outputparam p_nonusnf_disk "$nonusnf_disk"
|
|
|
+outputparam p_lcl_packages "$lcl_packages"
|
|
|
+outputparam p_lcl_binary "$lcl_binary"
|
|
|
+outputparam p_multi "$multi"
|
|
|
+outputparam p_multi_contentsfile "$multi_contentsfile"
|
|
|
+
|
|
|
+mv shvar.$option.new shvar.$option
|
|
|
+
|
|
|
+xit=0
|
|
|
+
|
|
|
+# vim:ts=4:sw=4:aw:ai:
|