Bug#1105152: unblock: dhcpcd/1:10.1.0-11
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock
X-Debbugs-Cc: dhcpcd@packages.debian.org, martin-eric.racine@iki.fi
Control: affects -1 + src:dhcpcd
Please unblock package dhcpcd:
I'm filing this ahead of the 2025-05-15 hard freeze, since this upload's 10-day transition would go past that date.
Martin-Éric
[ Reason ]
dhcpcd has long had the problem that, if it fails to obtain an IP via DHCP before timeout _and_ IPv4LL is disabled in /etc/dhcpcd.conf, it would flat out exit, leaving the host unreachable without manually logging in to restart ifupdown.
This was resolved in dhcpcd 1:10.1.0-11 by merging an upstream Git cherry-pick that makes dhcpcd fork to the background at timeout, instead of exit.
[ Impact ]
None foreseen. The change merely applies the same logic (background on timeout) that was already used in manager mode to the interface-specific mode.
[ Tests ]
Verified to improve the outcome of a timeout: fork to background and retry DHCP request at intervals, instead of coldly exiting.
[ Risks ]
Low. Two small upstream patches.
[ Checklist ]
[x] all changes are documented in the d/changelog
[x] I reviewed all changes and I approve them
[x] attach debdiff against the package in testing
unblock dhcpcd/1:10.1.0-11
diff -Nru dhcpcd-10.1.0/debian/changelog dhcpcd-10.1.0/debian/changelog
--- dhcpcd-10.1.0/debian/changelog 2025-04-20 12:05:44.000000000 +0300
+++ dhcpcd-10.1.0/debian/changelog 2025-05-08 21:47:28.000000000 +0300
@@ -1,3 +1,11 @@
+dhcpcd (1:10.1.0-11) unstable; urgency=medium
+
+ * [patches]
+ + Upstream Git cherry-picks: prevent exit on timeout. We keep on trying to
+ acquire an IP no matter what, switching to IPv4LL and back as needed.
+
+ -- Martin-Éric Racine <martin-eric.racine@iki.fi> Thu, 08 May 2025 21:47:28 +0300
+
dhcpcd (1:10.1.0-10) unstable; urgency=medium
* [patches]
diff -Nru dhcpcd-10.1.0/debian/patches/5db90127b1c3128480a52559a9cdbd4949a0fed4.patch dhcpcd-10.1.0/debian/patches/5db90127b1c3128480a52559a9cdbd4949a0fed4.patch
--- dhcpcd-10.1.0/debian/patches/5db90127b1c3128480a52559a9cdbd4949a0fed4.patch 1970-01-01 02:00:00.000000000 +0200
+++ dhcpcd-10.1.0/debian/patches/5db90127b1c3128480a52559a9cdbd4949a0fed4.patch 2025-05-08 21:47:28.000000000 +0300
@@ -0,0 +1,58 @@
+From 5db90127b1c3128480a52559a9cdbd4949a0fed4 Mon Sep 17 00:00:00 2001
+From: Roy Marples <roy@marples.name>
+Date: Thu, 8 May 2025 17:26:52 +0100
+Subject: [PATCH] dhcpcd: fork to background on initial timeout
+Forwarded: not-needed
+
+Unless the -1, --oneshot option is given.
+dhcpcd should keep on trying to configure the interface.
+Fixes #423
+---
+ src/dhcpcd.8.in | 15 ++++++++-------
+ src/dhcpcd.c | 2 +-
+ 2 files changed, 9 insertions(+), 8 deletions(-)
+
+Index: dhcpcd/src/dhcpcd.8.in
+===================================================================
+--- dhcpcd.orig/src/dhcpcd.8.in 2025-05-08 20:07:34.775256276 +0300
++++ dhcpcd/src/dhcpcd.8.in 2025-05-08 20:07:34.771256235 +0300
+@@ -523,18 +523,19 @@
+ Timeout after
+ .Ar seconds ,
+ instead of the default 30.
++On timeout,
++.Nm
++will exit if the
++.Fl 1 ,
++.Fl Fl oneshot
++option has been given,
++otherwise it will fork into the background and keep on
++trying.
+ A setting of 0
+ .Ar seconds
+ causes
+ .Nm
+ to wait forever to get a lease.
+-If
+-.Nm
+-is working on a single interface then
+-.Nm
+-will exit when a timeout occurs, otherwise
+-.Nm
+-will fork into the background.
+ .It Fl u , Fl Fl userclass Ar class
+ Tags the DHCPv4 message with the userclass
+ .Ar class .
+Index: dhcpcd/src/dhcpcd.c
+===================================================================
+--- dhcpcd.orig/src/dhcpcd.c 2025-05-08 20:07:34.775256276 +0300
++++ dhcpcd/src/dhcpcd.c 2025-05-08 20:07:34.771256235 +0300
+@@ -198,7 +198,7 @@
+
+ ctx = arg;
+ logerrx("timed out");
+- if (!(ctx->options & DHCPCD_MANAGER)) {
++ if (ctx->options & DHCPCD_ONESHOT) {
+ struct interface *ifp;
+
+ TAILQ_FOREACH(ifp, ctx->ifaces, next) {
diff -Nru dhcpcd-10.1.0/debian/patches/6acf895a66b143c42308777e085c1511cdebe5e0.patch dhcpcd-10.1.0/debian/patches/6acf895a66b143c42308777e085c1511cdebe5e0.patch
--- dhcpcd-10.1.0/debian/patches/6acf895a66b143c42308777e085c1511cdebe5e0.patch 1970-01-01 02:00:00.000000000 +0200
+++ dhcpcd-10.1.0/debian/patches/6acf895a66b143c42308777e085c1511cdebe5e0.patch 2025-05-08 21:47:28.000000000 +0300
@@ -0,0 +1,49 @@
+From 6acf895a66b143c42308777e085c1511cdebe5e0 Mon Sep 17 00:00:00 2001
+From: Roy Marples <roy@marples.name>
+Date: Thu, 8 May 2025 16:49:44 +0100
+Subject: [PATCH] dhcpcd: Fix -b --background
+Forwarded: not-needed
+
+It's been broken for a while... just the 11 years ago in 1d5d236
+Initial fix for #423
+---
+ src/dhcpcd.c | 5 +++--
+ src/if-options.h | 4 ++--
+ 2 files changed, 5 insertions(+), 4 deletions(-)
+
+Index: dhcpcd/src/dhcpcd.c
+===================================================================
+--- dhcpcd.orig/src/dhcpcd.c 2025-05-08 20:07:34.895257487 +0300
++++ dhcpcd/src/dhcpcd.c 2025-05-08 20:07:34.891257446 +0300
+@@ -208,7 +208,8 @@
+ eloop_exit(ctx->eloop, EXIT_FAILURE);
+ return;
+ }
+- ctx->options |= DHCPCD_NOWAITIP;
++
++ ctx->options |= DHCPCD_BACKGROUND;
+ dhcpcd_daemonise(ctx);
+ }
+
+@@ -366,7 +367,7 @@
+ int exit_code;
+
+ if (ctx->options & DHCPCD_DAEMONISE &&
+- !(ctx->options & (DHCPCD_DAEMONISED | DHCPCD_NOWAITIP)))
++ !(ctx->options & (DHCPCD_DAEMONISED | DHCPCD_BACKGROUND)))
+ {
+ if (!dhcpcd_ipwaited(ctx))
+ return;
+Index: dhcpcd/src/if-options.h
+===================================================================
+--- dhcpcd.orig/src/if-options.h 2025-05-08 20:07:34.895257487 +0300
++++ dhcpcd/src/if-options.h 2025-05-08 20:07:34.891257446 +0300
+@@ -85,7 +85,7 @@
+ #define DHCPCD_ANONYMOUS (1ULL << 21)
+ #define DHCPCD_BACKGROUND (1ULL << 22)
+ #define DHCPCD_VENDORRAW (1ULL << 23)
+-#define DHCPCD_NOWAITIP (1ULL << 24) /* To force daemonise */
++// unused (1ULL << 24)
+ #define DHCPCD_WAITIP (1ULL << 25)
+ #define DHCPCD_SLAACPRIVATE (1ULL << 26)
+ #define DHCPCD_CSR_WARNED (1ULL << 27)
diff -Nru dhcpcd-10.1.0/debian/patches/series dhcpcd-10.1.0/debian/patches/series
--- dhcpcd-10.1.0/debian/patches/series 2025-04-20 12:05:44.000000000 +0300
+++ dhcpcd-10.1.0/debian/patches/series 2025-05-08 21:47:28.000000000 +0300
@@ -4,3 +4,5 @@
fdeb8c7945211d424c3a30912004eeb56e009865.patch
e9e40400003db2e4f12dba85acabbaf2212a520f.patch
79c195b92f892c6f22fa07332c10fd9c2a8b679a.patch
+6acf895a66b143c42308777e085c1511cdebe5e0.patch
+5db90127b1c3128480a52559a9cdbd4949a0fed4.patch
Reply to: