debian: Update dhclient behavior for RENEW

On Debian we lost the ability to control resolv.conf throughout
ansible bootstrap. It is observed how renewing leases will override
DNSs configured during ansible bootstrap. Problems will surface when
later in the boostrap docker images are downloaded, because
information related to DNSs was overwritten by dhclient.
This behavior is different than on CentOS.

Align behavior with CentOS. In fact align with how the design should
be: control resolv.conf throughout bootstrap and don't let external
factors change it during that time.

Created a patch and updated the format(git am compatible) for an older one.

Test on AIO-SX:
PASS: build-pkgs && build-image
PASS: custom test using dhclient for OAM interface.
  Forcing lease renewal to 10 seconds for quick tests.
  Without this patch it is observed how resolv.conf is updated by
  dhclient after resolv.conf is changed as per requirement to solve
  custom domains.
  With this patch it is observed how resolv.conf is not updated
  anymore.

Story: 2009964
Task: 45093
Signed-off-by: Dan Voiculeasa <dan.voiculeasa@windriver.com>
Change-Id: Ic8f5ed7363124f04ff440dc9bf9935270a9ab8c9
This commit is contained in:
Dan Voiculeasa 2022-04-19 12:15:13 +03:00 committed by Dan Voiculeasa
parent efc59a5fb4
commit d12b56267d
3 changed files with 51 additions and 2 deletions

View File

@ -1,10 +1,20 @@
From 023d0adcb43db65e64841af6349a0326d2cb1e14 Mon Sep 17 00:00:00 2001
From: Dan Voiculeasa <dan.voiculeasa@windriver.com>
Date: Tue, 19 Apr 2022 11:58:01 +0300
Subject: [PATCH 1/2] dhclient: dhcp6 set hostname
The dhcp upstream commit 9261cb141 introduces a function The dhcp upstream commit 9261cb141 introduces a function
set_hostname() set host name, and the commit also implements set_hostname() set host name, and the commit also implements
the DHCPv6 Handlers, so insert the set_hostname to the the DHCPv6 Handlers, so insert the set_hostname to the
BOUND6|RENEW6|REBIND6 implementation. BOUND6|RENEW6|REBIND6 implementation.
Yue Tao <yue.tao@windriver.com> Signed-off-by: Yue Tao <yue.tao@windriver.com>
---
debian/dhclient-script.linux | 2 ++
1 file changed, 2 insertions(+)
diff --git a/debian/dhclient-script.linux b/debian/dhclient-script.linux
index f9b734a..895116c 100644
--- a/debian/dhclient-script.linux --- a/debian/dhclient-script.linux
+++ b/debian/dhclient-script.linux +++ b/debian/dhclient-script.linux
@@ -393,6 +393,8 @@ case "$reason" in @@ -393,6 +393,8 @@ case "$reason" in
@ -16,3 +26,6 @@ Yue Tao <yue.tao@windriver.com>
if [ "${new_ip6_address}" ]; then if [ "${new_ip6_address}" ]; then
# set leased IP # set leased IP
ip -6 addr add ${new_ip6_address} \ ip -6 addr add ${new_ip6_address} \
--
2.30.0

View File

@ -0,0 +1,35 @@
From ad1e3a89aa561292e745f58508b904cecbf8f928 Mon Sep 17 00:00:00 2001
From: Dan Voiculeasa <dan.voiculeasa@windriver.com>
Date: Tue, 19 Apr 2022 12:05:09 +0300
Subject: [PATCH 2/2] Update dn and dns only with diff upon RENEW
This prevents resolv.conf being updated on lease renewal.
This aligns to the behavior exhibited on CentOS.
This prevents resolv.conf being changed during bootstrap, which
is in fact the design.
Signed-off-by: Dan Voiculeasa <dan.voiculeasa@windriver.com>
---
debian/dhclient-script.linux | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/debian/dhclient-script.linux b/debian/dhclient-script.linux
index 895116c..8b29988 100644
--- a/debian/dhclient-script.linux
+++ b/debian/dhclient-script.linux
@@ -40,6 +40,12 @@ wait_for_rw() {
make_resolv_conf() {
local new_resolv_conf
+ if [ "${reason}" = "RENEW" ] &&
+ [ "${new_domain_name}" = "${old_domain_name}" ] &&
+ [ "${new_domain_name_servers}" = "${old_domain_name_servers}" ]; then
+ return
+ fi
+
# DHCPv4
if [ -n "$new_domain_search" ] || [ -n "$new_domain_name" ] ||
[ -n "$new_domain_name_servers" ]; then
--
2.30.0

View File

@ -1 +1,2 @@
dhclient-dhcp6-set-hostname.patch 0001-dhclient-dhcp6-set-hostname.patch
0002-Update-dn-and-dns-only-with-diff-upon-RENEW.patch