parent
4fad24c756
commit
51a54c3388
@ -0,0 +1,84 @@
|
||||
#!/bin/sh
|
||||
|
||||
. /etc/initrd.d/00-common.sh
|
||||
|
||||
find_nfs() {
|
||||
if [ -z "${IP}" ]; then
|
||||
# IP is not set, return straight away
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! busybox udhcpc -n -T 15 -q; then
|
||||
bad_msg "udhcpc returned error, skipping nfs setup..."
|
||||
return 1
|
||||
fi
|
||||
|
||||
local options=
|
||||
|
||||
[ -e /rootpath ] && NFSROOT=$(cat /rootpath)
|
||||
if [ -z "${NFSROOT}" ]; then
|
||||
# Obtain NFSIP
|
||||
# TODO: this is bogus, because dmesg is a circular buffer...
|
||||
# TODO: provide dmesg as symlink (see gen_initramfs.sh)
|
||||
options=$(busybox dmesg | grep rootserver | sed -e "s/,/ /g")
|
||||
|
||||
local opt= optn=
|
||||
|
||||
for opt in ${options}; do
|
||||
optn=$(echo $opt | sed -e "s/=/ /g" | cut -d " " -f 1)
|
||||
if [ "${optn}" = "rootserver" ]; then
|
||||
NFSIP=$(echo $opt | sed -e "s/=/ /g" | cut -d " " -f 2)
|
||||
fi
|
||||
done
|
||||
|
||||
# Obtain NFSPATH
|
||||
# TODO: this is bogus, because dmesg is a circular buffer...
|
||||
# TODO: provide dmesg as symlink (see gen_initramfs.sh)
|
||||
options=$(busybox dmesg | grep rootpath | sed -e "s/,/ /g")
|
||||
|
||||
for opt in ${options}; do
|
||||
optn=$(echo $opt | sed -e "s/=/ /g" | cut -d " " -f 1)
|
||||
if [ "${optn}" = "rootpath" ]; then
|
||||
NFSPATH=$(echo $opt | sed -e "s/=/ /g" | cut -d " " -f 2)
|
||||
fi
|
||||
done
|
||||
|
||||
# Setup NFSROOT
|
||||
if [ -n "${NFSIP}" ] && [ -n "$NFSPATH" ]; then
|
||||
NFSROOT="${NFSIP}:${NFSPATH}"
|
||||
else
|
||||
bad_msg "The DHCP Server did not send a valid root-path."
|
||||
bad_msg "Please check your DHCP setup, or set nfsroot=<...>"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# expecting a valid NFSROOT here, or the code should have returned
|
||||
NFSOPTIONS=${NFSROOT#*,}
|
||||
NFSROOT=${NFSROOT%%,*}
|
||||
if [ "${NFSOPTIONS}" = "${NFSROOT}" ]; then
|
||||
NFSOPTIONS="${DEFAULT_NFSOPTIONS}"
|
||||
else
|
||||
NFSOPTIONS="${DEFAULT_NFSOPTIONS},${NFSOPTIONS}"
|
||||
fi
|
||||
|
||||
local path=
|
||||
# override path if on livecd
|
||||
if is_livecd; then
|
||||
path="${CDROOT_PATH}"
|
||||
good_msg "Attempting to mount NFS CD image on ${NFSROOT}."
|
||||
else
|
||||
path="${NEW_ROOT}"
|
||||
good_msg "Attempting to mount NFS root on ${NFSROOT}."
|
||||
fi
|
||||
|
||||
good_msg "NFS options: ${NFSOPTIONS}"
|
||||
mount -t nfs -o ${NFSOPTIONS} "${NFSROOT}" "${path}"
|
||||
if [ "${?}" = "0" ]; then
|
||||
REAL_ROOT="/dev/nfs"
|
||||
return 0
|
||||
else
|
||||
bad_msg "NFS Mounting failed. Is the path corrent ?"
|
||||
return 1
|
||||
fi
|
||||
}
|
Loading…
Reference in new issue