summaryrefslogtreecommitdiff
path: root/package/skeleton
diff options
context:
space:
mode:
authorTrent Piepho <tpiepho@kymetacorp.com>2015-11-09 22:16:49 +0000
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>2015-11-18 22:14:56 +0100
commit71c75a5ea0e62786d279ef1609f23732bde5acc3 (patch)
tree22abeb88eb57931af5e35cd53167ec4cfff7db1a /package/skeleton
parentb981df4fcee131b19c8f3e06489485346d38e942 (diff)
system: Fix for NFS booting with interface config via DHCP
Configuring the network interface with DHCP via /etc/network/interfaces generally does not work when NFS booting. The DHCP configuration will initially bring the interface down and system then hangs at that point as the root filesystem is no longer accessable. This adds a script to be run via a pre-up line in /etc/network/interfaces. It checks for a NFS root filesystem and if the interface to be configured is used for access to the NFS server. If this is the case, then it returns a failure code so that ifup will not configure the interface. This works for DHCP and another config methods (static, bootp, etc.). This system does detect if the interface to be configured isn't the one used for NFS and doesn't skip it when that is the case. NFS filesystems that aren't the root fs aren't considered. Fixes bug #4790. Signed-off-by: Trent Piepho <tpiepho@kymetacorp.com> Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Diffstat (limited to 'package/skeleton')
-rwxr-xr-xpackage/skeleton/nfs_check20
-rw-r--r--package/skeleton/skeleton.mk3
2 files changed, 23 insertions, 0 deletions
diff --git a/package/skeleton/nfs_check b/package/skeleton/nfs_check
new file mode 100755
index 000000000..dfa0cbf58
--- /dev/null
+++ b/package/skeleton/nfs_check
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# This allows NFS booting to work while also being able to configure
+# the network interface via DHCP when not NFS booting. Otherwise, a
+# NFS booted system will likely hang during DHCP configuration.
+
+# Attempting to configure the network interface used for NFS will
+# initially bring that network down. Since the root filesystem is
+# accessed over this network, the system hangs.
+
+# This script is run by ifup and will attempt to detect if a NFS root
+# mount uses the interface to be configured (IFACE), and if so does
+# not configure it. This should allow the same build to be disk/flash
+# booted or NFS booted.
+
+nfsip=`sed -n '/^[^ ]*:.* \/ nfs.*[ ,]addr=\([0-9.]\+\).*/s//\1/p' /proc/mounts`
+if [ -n "$nfsip" ] && ip route get to "$nfsip" | grep -q "dev $IFACE"; then
+ echo Skipping $IFACE, used for NFS from $nfsip
+ exit 1
+fi
diff --git a/package/skeleton/skeleton.mk b/package/skeleton/skeleton.mk
index d1b797ddc..0cab8a13f 100644
--- a/package/skeleton/skeleton.mk
+++ b/package/skeleton/skeleton.mk
@@ -89,8 +89,11 @@ define SET_NETWORK_DHCP
echo ; \
echo "auto $(NETWORK_DHCP_IFACE)"; \
echo "iface $(NETWORK_DHCP_IFACE) inet dhcp"; \
+ echo " pre-up /etc/network/nfs_check"; \
echo " wait-delay 15"; \
) >> $(TARGET_DIR)/etc/network/interfaces
+ $(INSTALL) -m 0755 -D $(SKELETON_PKGDIR)/nfs_check \
+ $(TARGET_DIR)/etc/network/nfs_check
endef
endif