#!/bin/sh

set -e
vardir="$1"
method=$2
option=$3

cd "$vardir/methods/disk"
tp=/var/run/ddm$$

iarch=`dpkg --admindir $vardir --print-architecture`

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

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
}

print_partition_table()
{
	device="$1"

	printf "p\nq\n" | fdisk "$device" 2>/dev/null
}

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."; continue
		fi
		tryblockdevice="$response"
		if [ $option = cdrom ]
		then
			fstype=iso9660
		elif [ $option = harddisk ]
		then
			blockbase="`echo \"$tryblockdevice\" | sed -e 's/[0-9]\{1,\}$//'`"
			set +e
			print_partition_table "$blockbase" >$tp.f
			set -e
			proposeddevice="$tryblockdevice" perl -ne '
next unless /^ *Device +Boot +Start +End +Blocks +Id +System *$/i .. !/\S/;
next unless s:^/\S+:: && $& eq $ENV{"proposeddevice"};
next unless s/^ +(\* +)?\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 "$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
}

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,nus,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 for ONE distribution.
#	eg /pub/debian/dists/stable
#  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.

if [ -f shvar.$option ]
then
	. ./shvar.$option
	defaultdevice="$p_blockdev"
	defaultnfsserver="$p_nfsserver"
	defaultnfsrempath="$p_nfsrempath"
fi

if [ $option = cdrom ]
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:'
			grep '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 ] && [ $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 = 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" ] && [ -n "$defaultnfsserver" ]
		then
			response="$defaultnfsserver"
		fi
		if [ -z "$response" ]; then continue; fi
		if [ -x /usr/bin/rpcinfo ]
		then
			if rpcinfo -u "$response" mountd | grep -q 'ready'
			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" ] && [ -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 = harddisk ]
then
	set +e
	print_partition_table /dev/hda >$tp.f
	if [ $? != 0 ]
	then
		print_partition_table /dev/sda >$tp.f
	fi
	set -e
	perl -ne '
next unless /^ *Device +Boot +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 = cdrom ]
	then
		echo \
'All directory names should be entered relative to the root of the CD-ROM.
'
	elif [ $option = 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

while true
do
	if [ $option = cdrom ]
	then
		echo \
"I would like to know where on the CD-ROM the top level of the Debian
distribution is (eg. 'dists/stable') - this directory usually contains the 
Packages-Master file.

If the CD-ROM is badly organised 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 (eg. 'debian/dists/stable') - 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
# maybe ask for debian/dists and then show and ask for available dists 
# eg. {stable,frozen,unstable,bo,hamm,slink}
	if [ -n "$p_hierbase" ]
	then
		if [ -d "$mountpoint/$p_hierbase/main/binary-$iarch" ]
		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/main/binary-$iarch' doesn't seem to exist."
		fi
	fi
	if [ none = "$defhierbase" ]
	then
		if [ -d "$mountpoint/debian/dists/stable/main/binary-$iarch" ]
		then
			echo "
\`/debian/dists/stable' exists and looks plausible, so that's the default."
			defhierbase=/debian/dists/stable
		elif [ -d "$mountpoint/dists/stable/main/binary-$iarch" ]
		then
			echo "
\`/dists/stable' exists and looks plausible, so that's the default."
			defhierbase=/dists/stable
		fi
	fi
	echo -n \
"Distribution top level ? [$defhierbase]  "
	read response
	if [ -z "$response" ]
	then
		response="$defhierbase"
	fi
	if [ none = "$response" ]
	then
		hierbase=""
		break
	elif [ -d "$mountpoint/$response/main/binary-$iarch" ]
	then
		hierbase="`echo \"$response\" | sed -e 's:/*$::; s:^/*:/:'`"
		break
	fi
	echo \
"$response/main/binary-$iarch does not exist.
"
done


case "$hierbase" in
/* )	;;
'' )	;;
* )	hierbase="/$hierbase" ;;
esac

check_binary () {
	# args: area-in-messages directory
	# eg:   main             "$hierbase/main/binary-$iarch"
	# checks wether $2 contains *.deb
	if ! [ -d "$mountpoint$2/" ]
	then
		echo "\`$2' does not exist."
		return
	fi

	if ! ( find -L "$mountpoint$2/" -name '*.deb' -print \
	        | head -n 1 ) 2>/dev/null  | grep . >/dev/null
	then
		echo "\`$2' does not contain any *.deb packages.  Hmmpf."
		return
	fi
	echo "Using \`$2' as $1 binary dir."
	this_binary="$2"
}

find_area () {
	# args: area-in-messages area-in-vars subdirectory-in-hier
	#       last-time-binary last-time-packages
	# eg:   main             main         main
	#       "$p_main_binary" "$p_main_packages"

	this_binary=''
	this_packages=''
	if [ -n "$hierbase" ]
	then
		check_binary $1 "$hierbase/$3/binary-$iarch"
	fi

	if [ $option = cdrom ] && [ $2 = nf ] && [ -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.'
	elif [ $2 = lcl ] && [ -z "$this_binary" ]
	then
		echo '
Note: By default there is no `local'\'' directory. It is intended for 
packages you made yourself.'
	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-$iarch' on the distribution site) ?
Say \`none' if this area is not available."
		if [ $2 != main ] && [ -z "$defaultbinary" ]
		then
			defaultbinary=none
		fi
		echo -n \
"Enter _$1_ binary dir. [$4]
 ?  "
		read response
		if [ -z "$response" ] && [ -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
		for f in Packages.gz packages.gz Packages packages
		do
			if [ -f "$mountpoint/$this_binary/$f" ]
			then
				echo "Using \`$this_binary/$f' for $1."
				this_packages="$this_binary/$f"
				break
			fi
		done
		while [ -z "$this_packages" ]
		do
			echo -n "
I can't find the $1 \`Packages' file.  The information in the
\`Packages' 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 file and one Packages.gz file -- either will do --
in the \`binary-$iarch' 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 file from each of the distribution areas
you wish to install.

Where is the _$1_ \`Packages' file (if none is available, say \`none')
[$5]
 ?  "
			read response
			if [ -z "$response" ] && [ -n "$5" ]
			then
				response="$5"
			fi
			case "$response" in
			'')		continue			;;
			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"'
}

find_area main main main "$p_main_binary" "$p_main_packages"
find_area contrib ctb contrib "$p_ctb_binary" "$p_ctb_packages"
find_area non-free nf non-free "$p_nf_binary" "$p_nf_packages"
find_area non-US nus non-US "$p_nus_binary" "$p_nus_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_main_packages "$main_packages"
outputparam p_main_binary "$main_binary"
outputparam p_ctb_packages "$ctb_packages"
outputparam p_ctb_binary "$ctb_binary"
outputparam p_nf_packages "$nf_packages"
outputparam p_nf_binary "$nf_binary"
outputparam p_nus_packages "$nus_packages"
outputparam p_nus_binary "$nus_binary"
outputparam p_lcl_packages "$lcl_packages"
outputparam p_lcl_binary "$lcl_binary"

mv shvar.$option.new shvar.$option

xit=0
