~ruther/guix-local

526b25e09e00709655c164e619ea64d1db3d8537 — B. Wilson 1 year, 9 months ago 3331d67
gnu: isc-dhcp: Patch dhclient to support resolvconf.

* gnu/packages/patches/dhclient-script-resolvconf-support.patch: New patch.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/admin.scm (isc-dhcp): Patch dhclient-script and update wrapper.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2 files changed, 71 insertions(+), 8 deletions(-)

M gnu/packages/admin.scm
A gnu/packages/patches/dhclient-script-resolvconf-support.patch
M gnu/packages/admin.scm => gnu/packages/admin.scm +13 -8
@@ 1572,7 1572,9 @@ connection alive.")
                                    version "/dhcp-" version ".tar.gz"))
                (sha256
                 (base32
                  "1ivkvhhvqxap6c51cli7pa6xn76ngxri1zbl45ishz4ranxidi0a"))))
                  "1ivkvhhvqxap6c51cli7pa6xn76ngxri1zbl45ishz4ranxidi0a"))
                (patches (search-patches
                           "dhclient-script-resolvconf-support.patch"))))
      (build-system gnu-build-system)
      (arguments
       `(#:parallel-build? #f


@@ 1666,12 1668,13 @@ connection alive.")
             (lambda* (#:key inputs outputs #:allow-other-keys)
               ;; Install the dhclient script for GNU/Linux and make sure
               ;; if finds all the programs it needs.
               (let* ((out       (assoc-ref outputs "out"))
                      (libexec   (string-append out "/libexec"))
                      (coreutils (assoc-ref inputs "coreutils*"))
                      (inetutils (assoc-ref inputs "inetutils"))
                      (grep      (assoc-ref inputs "grep*"))
                      (sed       (assoc-ref inputs "sed*"))
               (let* ((out        (assoc-ref outputs "out"))
                      (libexec    (string-append out "/libexec"))
                      (coreutils  (assoc-ref inputs "coreutils*"))
                      (inetutils  (assoc-ref inputs "inetutils"))
                      (grep       (assoc-ref inputs "grep*"))
                      (resolvconf (assoc-ref inputs "resolvconf*"))
                      (sed        (assoc-ref inputs "sed*"))
                      (debianutils (assoc-ref inputs "debianutils")))
                 (substitute* "client/scripts/linux"
                   (("/sbin/ip")


@@ 1687,7 1690,8 @@ connection alive.")
                     ,(map (lambda (dir)
                             (string-append dir "/bin:"
                                            dir "/sbin"))
                           (list inetutils coreutils grep sed debianutils))))))))))
                           (list inetutils coreutils grep sed resolvconf
                                 debianutils))))))))))

      (native-inputs
       (list config perl file))


@@ 1716,6 1720,7 @@ connection alive.")

                ("coreutils*" ,coreutils)
                ("grep*" ,grep)
                ("resolvconf*" ,openresolv)
                ("sed*" ,sed)))

      (home-page "https://www.isc.org/dhcp/")

A gnu/packages/patches/dhclient-script-resolvconf-support.patch => gnu/packages/patches/dhclient-script-resolvconf-support.patch +58 -0
@@ 0,0 1,58 @@
Implement resolvconf support

Due to the potential for multiple sources contenting for /etc/resolv.conf
control, this patch replaces direct file munging with resolvconf indirection.

--- a/client/scripts/linux	1970-01-01 09:00:01.000000000 +0900
+++ b/client/scripts/linux	1970-01-01 09:00:01.000000000 +0900
@@ -36,11 +36,11 @@
 # This updated version mostly follows Debian script by Andrew Pollock et al.
 make_resolv_conf() {
     local new_resolv_conf
+    new_resolv_conf=$(mktemp)
 
     # DHCPv4
     if [ -n "$new_domain_search" ] || [ -n "$new_domain_name" ] ||
-       [ -n "$new_domain_name_servers" ]; then
-        new_resolv_conf=/etc/resolv.conf.dhclient-new
+        [ -n "$new_domain_name_servers" ]; then
         rm -f $new_resolv_conf
 
         if [ -n "$new_domain_name" ]; then
@@ -70,17 +70,12 @@
                 echo nameserver $nameserver >>$new_resolv_conf
             done
         else # keep 'old' nameservers
-            sed -n /^\w*[Nn][Aa][Mm][Ee][Ss][Ee][Rr][Vv][Ee][Rr]/p /etc/resolv.conf >>$new_resolv_conf
+            resolvconf -l "$interface.dhcp" | sed -n /^\w*[Nn][Aa][Mm][Ee][Ss][Ee][Rr][Vv][Ee][Rr]/p >>$new_resolv_conf
         fi
 
-	if [ -f /etc/resolv.conf ]; then
-	    chown --reference=/etc/resolv.conf $new_resolv_conf
-	    chmod --reference=/etc/resolv.conf $new_resolv_conf
-	fi
-        mv -f $new_resolv_conf /etc/resolv.conf
+        resolvconf -a "$interface.dhpc" <"$new_resolv_conf"
     # DHCPv6
     elif [ -n "$new_dhcp6_domain_search" ] || [ -n "$new_dhcp6_name_servers" ]; then
-        new_resolv_conf=/etc/resolv.conf.dhclient-new
         rm -f $new_resolv_conf
 
         if [ -n "$new_dhcp6_domain_search" ]; then
@@ -97,14 +92,10 @@
                 echo nameserver $nameserver >>$new_resolv_conf
             done
         else # keep 'old' nameservers
-            sed -n /^\w*[Nn][Aa][Mm][Ee][Ss][Ee][Rr][Vv][Ee][Rr]/p /etc/resolv.conf >>$new_resolv_conf
+            resolvconf -l "$interface.dhcp6" | sed -n /^\w*[Nn][Aa][Mm][Ee][Ss][Ee][Rr][Vv][Ee][Rr]/p >>$new_resolv_conf
         fi
 
-	if [ -f /etc/resolv.conf ]; then
-            chown --reference=/etc/resolv.conf $new_resolv_conf
-            chmod --reference=/etc/resolv.conf $new_resolv_conf
-	fi
-        mv -f $new_resolv_conf /etc/resolv.conf
+        resolvconf -a "$interface.dhpc6" <"$new_resolv_conf"
     fi
 }