# !/bin/sh # # Copyright Matthias Hentges (c) 2005 # # License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the GPL) M_TITLE="Boot from NFS" die() { echo "ERROR: $1" >/dev/tty0 exec $SH_SHELL /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