From 601464b4974e46d15abd02efd46663efcd530da8 Mon Sep 17 00:00:00 2001 From: Qing He Date: Wed, 19 May 2010 00:24:25 +0800 Subject: [PATCH] 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 --- meta/packages/netbase/netbase/nfsroot | 39 +++++++++++++++++++++++++++ meta/packages/netbase/netbase_4.41.bb | 4 ++- 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 meta/packages/netbase/netbase/nfsroot diff --git a/meta/packages/netbase/netbase/nfsroot b/meta/packages/netbase/netbase/nfsroot new file mode 100644 index 0000000000..fc384a8ea5 --- /dev/null +++ b/meta/packages/netbase/netbase/nfsroot @@ -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 diff --git a/meta/packages/netbase/netbase_4.41.bb b/meta/packages/netbase/netbase_4.41.bb index a3e2e87424..88b524ffd2 100644 --- a/meta/packages/netbase/netbase_4.41.bb +++ b/meta/packages/netbase/netbase_4.41.bb @@ -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