#!/bin/sh

. /lib/partman/lib/base.sh

dcfile=/var/lib/partman-nbd/debconf-sets
devices=
nbdrootdev=

for dev in $DEVICES/*
do
	[ -d "$dev" ] || continue
	cd $dev
	partitions=
	open_dialog PARTITIONS
	while { read_line num id size type fs path name; [ "$id" ]; }
	do
		[ "$fs" != free ] || continue
		[ -f $id/method ] || continue
		device=$(cat device)
		device=${device#/dev/}
		device=${device%p*}
		case $device in
		nbd*)
			mkdir -p $id/options
			touch $id/options/_netdev
			mount=$(cat $id/mountpoint)
			if [ "$mount" = "/" ]
			then
				nbdrootdev=$device
			else
				# /etc/nbd-client *must not* be used for the
				# root filesystem
				if [ "$device" = "$nbdrootdev" ]
				then
					continue
				fi
				. /var/lib/partman-nbd/$device
				case $(cat $id/method) in
				*swap)
					eval type_$device=swap
					;;
				keep)
					if  [ -z "$(eval echo \$type_$device)" ]
					then
						eval type_$device=filesystem
					fi
					;;
				esac
				eval host_$device="\$server"
				eval name_$device="\$name"
			fi
			if ( echo $devices | grep -qv $device )
			then
				devices="$devices $device"
			fi
			;;
		*)
			continue
			;;
		esac
	done
	close_dialog
done

if [ ! -z "$devices" ]
then
	nbdtab=/tmp/nbdtab.$$
	for device in $devices
	do
		if [ ! -z "$nbdrootdev" -a "$device" != "$nbdrootdev" ]
		then
			eval server=\$host_$device
			eval name=\$name_$device
			echo "$device  $server $name" >$nbdtab
		fi
	done
	apt-install nbd-client || true
	cp $nbdtab /target/etc/nbdtab
fi

if [ ! -z $nbdrootdev ]
then
	kopts=''
	if db_get debian-installer/add-kernel-opts && [ "$RET" ]
	then
		kopts="$RET"
	fi
	. /var/lib/partman-nbd/$nbdrootdev
	server=$(resolv $server | head -n 1)
	kopts="$kopts nbdroot=$server,$name,$nbdrootdev"
	db_set debian-installer/add-kernel-opts "$kopts"
fi
