nfsroot: allow nfsroot to survive netbase init

The patch adds a script in /etc/network/if-pre-up.d,
the script returns 1 (effectly skip the ifup on the iface) iff:
  1. there is a "* / (nfs|nfs4) *" entry in the /proc/mounts
  2. the addr field in that entry is routed using $IFACE

Signed-off-by: Qing He <qing.he@intel.com>
This commit is contained in:
Qing He 2010-05-19 00:24:25 +08:00 committed by Richard Purdie
parent bca283671f
commit 601464b497
2 changed files with 42 additions and 1 deletions

View File

@ -0,0 +1,39 @@
#! /bin/sh
# In case the interface is used as nfsroot, avoid ifup, otherwise
# nfsroot may lose response
nfsroot=0
if test "x$IFACE" = xlo ; then
exit 0
fi
exec 9<&0 < /proc/mounts
while read dev mtpt fstype rest; do
if test $mtpt = "/" ; then
case $fstype in
nfs | nfs4)
nfsroot=1
nfs_addr=`echo $rest | sed -e 's/^.*addr=\([0-9.]*\).*$/\1/'`
break
;;
*)
;;
esac
fi
done
exec 0<&9 9<&-
test $nfsroot -eq 0 && exit 0
if test -x /sbin/ip ; then
nfs_iface=`ip route get $nfs_addr | grep dev | sed -e 's/^.*dev \([-a-z0-9.]*\).*$/\1/'`
fi
if test "x$IFACE" = "x$nfs_iface" ; then
echo "ifup skipped for nfsroot interface $nfs_iface"
exit 1
fi
exit 0

View File

@ -17,7 +17,8 @@ INITSCRIPT_PARAMS_slugos = "start 42 S 0 6 ."
SRC_URI = "${DEBIAN_MIRROR}/main/n/netbase/netbase_${PV}.tar.gz \
file://init \
file://hosts \
file://interfaces"
file://interfaces \
file://nfsroot"
do_install () {
install -d ${D}${sysconfdir}/init.d \
@ -33,6 +34,7 @@ do_install () {
install -m 0644 etc-protocols ${D}${sysconfdir}/protocols
install -m 0644 etc-services ${D}${sysconfdir}/services
install -m 0644 ${WORKDIR}/interfaces ${D}${sysconfdir}/network/interfaces
install -m 0755 ${WORKDIR}/nfsroot ${D}${sysconfdir}/network/if-pre-up.d
# Disable network manager on machines that commonly do NFS booting
case "${MACHINE}" in