summaryrefslogtreecommitdiff
path: root/packages/altboot/files/spitz/altboot-menu/Advanced/40-bootNFS
blob: 6cac410019db474276c4d08c744f782cd1bd242d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# !/bin/sh
#
# Copyright Matthias Hentges (c) 2005
#
# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the GPL)

# FIXME: Make this work

M_TITLE="Boot from NFS"

die() {
	echo "ERROR: $1" >/dev/tty0
	exec $SH_SHELL </dev/tty0 >/dev/tty0 2>&1
}

# 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!"

	echo -n "Mounting rootfs rw..." >/dev/tty0
	mount -o remount,rw / >/dev/tty0 2>&1 && echo ok  >/dev/tty0|| die "mount -o remount,rw / failed"

	echo -n "Generating device files..." >/dev/tty0
	/etc/init.d/devices start && echo ok  >/dev/tty0|| die "FAILED"	

	echo -n "Mounting /proc..." >/dev/tty0
	mount /proc >/dev/tty0 2>&1 && echo ok  >/dev/tty0 || echo failed

	# Needed for NFS
	/etc/init.d/portmap start >/dev/tty1 2>&1 || die "/etc/init.d/portmap start failed!"
	
	# For some reason NFS mounts hang if /e/i/networking is not run.
	# For the time beeing I'm to lazy to investigate ;)
	/etc/init.d/networking start || die "/etc/init.d/networking start failed!"
	
	sleep 2
	
	# After the PCMCIA service is started, an inserted WLAN card should automatically
	# activate itself.
	/etc/init.d/pcmcia start || die "/etc/init.d/pcmcia/start failed!"
	
	# Give WLAN time to login into the network
	echo "Waiting for WLAN..."
	sleep 8
		 
	nfs_mounts="`cat /etc/fstab | grep -v ^# | grep nfs | awk '{print $1}'`"
	nfs_mountpoints="`cat /etc/fstab | grep -v ^# | grep nfs | awk '{print $2}'`"	
	
	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
			echo -n "Boot NFS root: "
			read junk < /dev/tty1
			
			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
	
	mkdir -p /media/nfsroot || die "mkdir -p /media/nfsroot failed!"
	
	echo -n "Mounting NFS root..."
	mount -t nfs "$selection" /media/nfsroot && echo ok || die "mount -t nfs "$selection" /media/nfsroot failed!"
	
	check_target "/media/nfsroot"
	
}	

case "$1" in
title)	echo "$M_TITLE";;
run)	run_module "$2";;
esac