#! /bin/sh
#
# Copyright Matthias Hentges <devel@hentges.net> (c) 2006
# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
#
# Filename: 40-bootNFS
# Date: 14-Apr-06


M_TITLE="Boot from NFS"

test "$DISABLE_NFS_BOOT" = yes && exit 0

# This function is activated by init.altboot by calling this script with the "run" option
run_module() {

	test -e /etc/altboot.func && . /etc/altboot.func || die "ERROR: /etc/altboot.func not found. Check your installation!"

	# Mount /proc, etc
	init_rootfs
			
	nfs_host="`cat /etc/fstab | grep -v ^# | grep nfs | awk '{print $1}'|sed -n "s/\(.*\)\:\(.*\)/\1/p" `"
	nfs_mounts="`cat /etc/fstab | grep -v ^# | grep nfs | awk '{print $1}'`"
	nfs_mountpoints="`cat /etc/fstab | grep -v ^# | grep nfs | awk '{print $2}'`"			
		
	start_networking "$nfs_host"	
	
	if test -z "$nfs_host"
	then
		mdie "${C_RED}No configured NFS drives found in /etc/fstab$C_RESET"
		
	fi
	
	
	if test "` echo "$nfs_mountpoints" |wc -l | tr -d " "`" -gt 1
	then
		echo -e "Please select your NFS root:\n"

		cnt=1
		for nfs_mount in $nfs_mountpoints
		do
			echo -e "\t[$cnt] $nfs_mount"
			let cnt=$cnt+1
		done
		
		echo ""
		
		while test -z "$selection"
		do
			stty echo
			echo -n "Booting NFS root: "
			
			read junk < /dev/$OUT_TTY				
			
			cnt=1
			for nfs_mount in $nfs_mounts
			do
				if test "$junk" = "$cnt"
				then
					selection="$nfs_mount"				
				fi
				let cnt=$cnt+1
			done			
			
		done
	else
		test -z "$nfs_mounts" && die "No NFS mounts configured in /etc/fstab!"	
		selection="$nfs_mounts"
	fi
	
	remember_last_setting "$MENU_POSITION $selection"
		
}	

exec_module() {
	
	if test -n "$1"
	then
		selection="$1"				
	fi		
	
	mkdir -p /media/nfsroot || mdie "mkdir -p /media/nfsroot failed!"
	
	echo -n "Mounting NFS root..."
	
	if ( mount | grep -q "/media/nfsroot" )
	then
		echo "/media/nfsroot already used, tying to umount..."
		umount /media/image
		losetup -d /dev/loop0
		umount /media/nfsroot || die "umount failed!"
	fi
		
	mount -t nfs "$selection" /media/nfsroot && echo ok || mdie "mount -t nfs "$selection" /media/nfsroot failed!"
	
	# Use configured resolv.conf in the pivoted rootfs
	#echo -n "Copying resolv.conf..."
	#cp /etc/resolv.conf /media/nfsroot/etc && echo ok || echo "FAILED"
	
	check_target "/media/nfsroot" bootNFS
}

case "$1" in
title)		echo "$M_TITLE" ;;
run)		run_module 
		test "$OFFLINE_CONFIG" != true && exec_module ;;
autorun)	exec_module "$2" ;;
flags)		echo "" ;;
esac