summaryrefslogtreecommitdiff
path: root/meta
diff options
context:
space:
mode:
authorQing He <qing.he@intel.com>2010-05-19 00:24:25 +0800
committerRichard Purdie <rpurdie@linux.intel.com>2010-08-09 16:54:08 +0100
commit601464b4974e46d15abd02efd46663efcd530da8 (patch)
tree30bffdbd2c0b97d55318139afa714c2f0602253b /meta
parentbca283671f74b79394e9c332b790e5ed0dc44f35 (diff)
downloadopenembedded-core-601464b4974e46d15abd02efd46663efcd530da8.tar.gz
openembedded-core-601464b4974e46d15abd02efd46663efcd530da8.tar.bz2
openembedded-core-601464b4974e46d15abd02efd46663efcd530da8.zip
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>
Diffstat (limited to 'meta')
-rw-r--r--meta/packages/netbase/netbase/nfsroot39
-rw-r--r--meta/packages/netbase/netbase_4.41.bb4
2 files changed, 42 insertions, 1 deletions
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