From 0a7e7c888295238d3734f5a85b3e92c35ca7969f Mon Sep 17 00:00:00 2001 From: Yi Zhao Date: Tue, 27 Jul 2021 12:22:44 +0800 Subject: ifupdown: added -1 option to dhclient for dhcpv6 When dhclient is used with ifupdown and in the /etc/network/interfaces file is something like e.g. "iface eth0 inet6 dhcp" the system does not boot but hangs at the after dhcp configuration of IPv4 at the stage where IPv6 should be configured. The reason seems to be, that ifupdown calls the dhclient in a blocking way which leads to a permanent block of the boot when no DHCPv6 server is available. A similar bug in Redhat: https://bugzilla.redhat.com/show_bug.cgi?id=585047 [YOCTO #14117] (From OE-Core rev: 6d8bf12bffa146cb51153a79a4b96b05298c4fbf) Signed-off-by: Yi Zhao Signed-off-by: Steve Sakoman Signed-off-by: Richard Purdie --- ...Added-1-option-to-dhclient-on-upping-an-i.patch | 65 ++++++++++++++++++++++ meta/recipes-core/ifupdown/ifupdown_0.8.35.bb | 1 + 2 files changed, 66 insertions(+) create mode 100644 meta/recipes-core/ifupdown/files/0001-inet6.defn-Added-1-option-to-dhclient-on-upping-an-i.patch diff --git a/meta/recipes-core/ifupdown/files/0001-inet6.defn-Added-1-option-to-dhclient-on-upping-an-i.patch b/meta/recipes-core/ifupdown/files/0001-inet6.defn-Added-1-option-to-dhclient-on-upping-an-i.patch new file mode 100644 index 0000000000..e374d8ca59 --- /dev/null +++ b/meta/recipes-core/ifupdown/files/0001-inet6.defn-Added-1-option-to-dhclient-on-upping-an-i.patch @@ -0,0 +1,65 @@ +From e2263b58d7733835355d7b46c3caa96d911a4717 Mon Sep 17 00:00:00 2001 +From: Simon Schwarz +Date: Fri, 6 Nov 2020 08:53:20 +0100 +Subject: [PATCH] inet6.defn: Added -1 option to dhclient on upping an + interface + +This prevents hangs on startup when no server is available and dhcpv6 is used + +Upstream-Status: Pending + +Signed-off-by: Simon Schwarz +Signed-off-by: Yi Zhao +--- + inet6.defn | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/inet6.defn b/inet6.defn +index 73dce24..25022e3 100644 +--- a/inet6.defn ++++ b/inet6.defn +@@ -29,9 +29,9 @@ method auto + if (var_set("accept_ra", ifd) && !var_true("accept_ra", ifd)) + /sbin/ip link set dev %iface% up + /lib/ifupdown/wait-for-ll6.sh if (var_true("dhcp", ifd) && execable("/lib/ifupdown/wait-for-ll6.sh")) +- /sbin/dhclient -6 -v -P -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases -I -df /var/lib/dhcp/dhclient.%iface%.leases %iface% \ ++ /sbin/dhclient -6 -1 -v -P -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases -I -df /var/lib/dhcp/dhclient.%iface%.leases %iface% \ + if (var_true("dhcp", ifd) && execable("/sbin/dhclient") && var_true("request_prefix", ifd)) +- /sbin/dhclient -6 -v -S -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases -I -df /var/lib/dhcp/dhclient.%iface%.leases %iface% \ ++ /sbin/dhclient -6 -1 -v -S -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases -I -df /var/lib/dhcp/dhclient.%iface%.leases %iface% \ + elsif (var_true("dhcp", ifd) && execable("/sbin/dhclient")) + echo 'No DHCPv6 client software found!' >&2; false \ + elsif (var_true("dhcp", ifd)) +@@ -154,9 +154,9 @@ method dhcp + if (var_set("accept_ra", ifd) && !var_true("accept_ra", ifd)) + /sbin/ip link set dev %iface% [[address %hwaddress%]] up + /lib/ifupdown/wait-for-ll6.sh if (execable("/lib/ifupdown/wait-for-ll6.sh")) +- /sbin/dhclient -6 -v -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases -I -P -N -df /var/lib/dhcp/dhclient.%iface%.leases %iface% \ ++ /sbin/dhclient -6 -1 -v -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases -I -P -N -df /var/lib/dhcp/dhclient.%iface%.leases %iface% \ + if (execable("/sbin/dhclient") && var_true("request_prefix", ifd)) +- /sbin/dhclient -6 -v -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases -I -df /var/lib/dhcp/dhclient.%iface%.leases %iface% \ ++ /sbin/dhclient -6 -1 -v -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases -I -df /var/lib/dhcp/dhclient.%iface%.leases %iface% \ + elsif (execable("/sbin/dhclient")) + echo 'No DHCPv6 client software found!' >&2; false \ + elsif (1) +@@ -325,7 +325,7 @@ method dhcp + + up + /sbin/ifconfig %iface% [[link %hwaddress%]] up +- /sbin/dhclient -6 -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases -I -df /var/lib/dhcp/dhclient.%iface%.leases %iface% \ ++ /sbin/dhclient -6 -1 -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases -I -df /var/lib/dhcp/dhclient.%iface%.leases %iface% \ + if (execable("/sbin/dhclient")) + echo 'No DHCPv6 client software found!' >&2; false \ + elsif (1) +@@ -397,7 +397,7 @@ method dhcp + up + [[Warning: Option hwaddress: %hwaddress% not yet supported]] + inetutils-ifconfig --interface %iface% --up +- /sbin/dhclient -6 -pf /run/dhclient6.%iface///.%.pid -lf /var/lib/dhcp/dhclient6.%iface///.%.leases -I -df /var/lib/dhcp/dhclient.%iface///.%.leases %iface% \ ++ /sbin/dhclient -6 -1 -pf /run/dhclient6.%iface///.%.pid -lf /var/lib/dhcp/dhclient6.%iface///.%.leases -I -df /var/lib/dhcp/dhclient.%iface///.%.leases %iface% \ + if (execable("/sbin/dhclient")) + echo 'No DHCPv6 client software found!' >&2; false \ + elsif (1) +-- +2.17.1 + diff --git a/meta/recipes-core/ifupdown/ifupdown_0.8.35.bb b/meta/recipes-core/ifupdown/ifupdown_0.8.35.bb index ae175848b7..16807eb675 100644 --- a/meta/recipes-core/ifupdown/ifupdown_0.8.35.bb +++ b/meta/recipes-core/ifupdown/ifupdown_0.8.35.bb @@ -12,6 +12,7 @@ SRC_URI = "git://salsa.debian.org/debian/ifupdown.git;protocol=https \ file://99_network \ file://0001-Define-FNM_EXTMATCH-for-musl.patch \ file://0001-Makefile-do-not-use-dpkg-for-determining-OS-type.patch \ + file://0001-inet6.defn-Added-1-option-to-dhclient-on-upping-an-i.patch \ file://run-ptest \ ${@bb.utils.contains('DISTRO_FEATURES', 'ptest', 'file://tweak-ptest-script.patch', '', d)} \ " -- cgit v1.2.3-54-g00ecf