summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephane Desneux <stephane.desneux@iot.bzh>2019-10-23 10:05:21 +0000
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>2019-10-23 14:13:25 +0000
commitea35c365c8aa06be5b79c5d6cd36a1a73ccf75e5 (patch)
tree5721d73d93fe43046ffcf0e0c638aae7632039c2
parent8a052edd56f801c465781b784bf1f53b15135c86 (diff)
meta-netboot: don't use 'ip' command to detect boot interface
This patch changes the method to detect the current network interface used for netboot. Instead of using the 'ip' command, it parses the content of /sys/class/net/* to detect the first running ethernet interface. Two new messages are now visible on the console in initramfs phase: -------------------------------------------------- /sbin/init[1]: find_active_interface: first active interface is eth0 /sbin/init[1]: Adjusting Connman command line. Will be: 'connmand -r -n -I eth0' -------------------------------------------------- Background: When booting using netboot, it's necessary to update connman command line options to ignore the network interface used for NBD connection. For this, the initramfs script tries to detect the interface in use by running 'ip -o link show state'. 'ip' command comes with iproute2 package but for various reasons, some AGL images like m3ulcb-nogfx don't have iproute2 installed. In this case, the 'ip' command is implemented by busybox, which doesn't support the '-o' option. This leads to issues when running connman as the command line is not properly updated. Bug-AGL: SPEC-2921 Change-Id: I5691f04ab462a148219b741d235247a2bfbc2e24 Signed-off-by: Stephane Desneux <stephane.desneux@iot.bzh>
-rw-r--r--meta-netboot/recipes-core/initramfs-netboot/files/init.sh32
1 files changed, 29 insertions, 3 deletions
diff --git a/meta-netboot/recipes-core/initramfs-netboot/files/init.sh b/meta-netboot/recipes-core/initramfs-netboot/files/init.sh
index 7b8fbb518..50d62472a 100644
--- a/meta-netboot/recipes-core/initramfs-netboot/files/init.sh
+++ b/meta-netboot/recipes-core/initramfs-netboot/files/init.sh
@@ -57,6 +57,29 @@ check_debug() {
esac
}
+find_active_interface() {
+ [[ ! -d /sys/class/net ]] && { log_error "find_active_interface: /sys/class/net doesn't exist"; return 2; }
+ local iface
+ for x in $(ls -d /sys/class/net/* 2>/dev/null); do
+ iface=$(basename $x)
+ # find interfaces with:
+ # - type == 1 (ethernet)
+ # - not wireless
+ # - with state up
+
+ [[ $(cat $x/type) != 1 ]] && continue
+ [[ -d $x/wireless ]] && continue
+ [[ $(cat $x/operstate) != "up" ]] && continue
+
+ log_info "find_active_interface: first active interface is $iface"
+ echo $iface
+ return 0
+ done
+
+ log_error "Unable to find any active network interface."
+ return 1
+}
+
# -------------------------------------------
export PATH=/sbin:/usr/sbin:/bin:/usr/bin
@@ -131,9 +154,12 @@ pivot_root . boot/initramfs || bail_out "pivot_root failed."
# workaround for connman (avoid bringing down the network interface used for booting, disable DNS proxy)
if [[ -f /lib/systemd/system/connman.service ]]; then
- log_info "Adjusting Connman configuration"
- iface=$(ip -o link show up | tr ':' ' ' | awk '{print $2}' | grep -v -e "^lo$" | head -1)
- sed -i "s|connmand -n\$|connmand -r -n -I $iface|g" /lib/systemd/system/connman.service
+ newopts="-r -n"
+ iface=$(find_active_interface)
+ [[ -n "$iface" ]] && newopts="$newopts -I $iface"
+
+ log_info "Adjusting Connman command line. Will be: 'connmand $newopts'"
+ sed -i "s|connmand -n\$|connmand $newopts|g" /lib/systemd/system/connman.service
fi
# also use /proc/net/pnp to generate /etc/resolv.conf