From patchwork Tue Feb 13 12:50:42 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?S=C3=B6ren_Tempel?= X-Patchwork-Id: 60265 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 0A7A227BBEB; Tue, 13 Feb 2024 12:52:04 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL, SPF_HELO_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 63A7F27BBE2 for ; Tue, 13 Feb 2024 12:51:58 +0000 (GMT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rZsGL-0005Aw-2n; Tue, 13 Feb 2024 07:51:49 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rZsGI-00059L-Sy for guix-patches@gnu.org; Tue, 13 Feb 2024 07:51:46 -0500 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rZsGH-0003cD-14 for guix-patches@gnu.org; Tue, 13 Feb 2024 07:51:46 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1rZsGY-000521-E4 for guix-patches@gnu.org; Tue, 13 Feb 2024 07:52:02 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#68675] [PATCH v3 1/2] gnu: Add dhcpcd. References: In-Reply-To: Resent-From: soeren@soeren-tempel.net Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Tue, 13 Feb 2024 12:52:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 68675 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 68675@debbugs.gnu.org Received: via spool by 68675-submit@debbugs.gnu.org id=B68675.170782867719257 (code B ref 68675); Tue, 13 Feb 2024 12:52:02 +0000 Received: (at 68675) by debbugs.gnu.org; 13 Feb 2024 12:51:17 +0000 Received: from localhost ([127.0.0.1]:42884 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rZsFo-00050W-Sh for submit@debbugs.gnu.org; Tue, 13 Feb 2024 07:51:17 -0500 Received: from magnesium.8pit.net ([45.76.88.171]:28727) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rZsFm-00050J-Mz; Tue, 13 Feb 2024 07:51:15 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; s=opensmtpd; bh=vCjyX2Vtq8 1UM0idzjJ918bbbP9Iqua5Ff/9KBI6KXQ=; h=date:subject:to:from; d=soeren-tempel.net; b=lK8xhgS3wTVj7Iq6yF6VCU05UQn+XOLwcffeYOYY9kPDdRT dZHZOpdTIh0wBrx3HplRUWcKt/jSlh6LgTlQEmqgwVjIub32QM+l2pUqNfAvHeLQruuhst Tu4mWmGFFGFDkhEqYnHaSO2P55K/3PLx8P9W/UBoJuEZnm68Bzioto= Received: from localhost (dynamic-2a02-3102-49da-001b-df49-33b7-2af2-ff52.310.pool.telefonica.de [2a02:3102:49da:1b:df49:33b7:2af2:ff52]) by magnesium.8pit.net (OpenSMTPD) with ESMTPSA id 4c07c2c4 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:YES); Tue, 13 Feb 2024 13:50:54 +0100 (CET) From: soeren@soeren-tempel.net Date: Tue, 13 Feb 2024 13:50:42 +0100 Message-ID: <5c6f714f4802ec17bc247e701bcee82d54733005.1707828643.git.soeren@soeren-tempel.net> X-Mailer: git-send-email 2.43.1 MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches From: Sören Tempel * gnu/packages/admin.scm (dhcpcd): new procedure. Signed-off-by: Sören Tempel --- gnu/packages/admin.scm | 56 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) base-commit: 29c26a8d308286cf378ce9cfa3d73e3d1454263d diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm index fcf05992d8..efd374fe5a 100644 --- a/gnu/packages/admin.scm +++ b/gnu/packages/admin.scm @@ -1608,6 +1608,62 @@ (define-public isc-dhcp (license license:mpl2.0) (properties '((cpe-name . "dhcp")))))) +(define-public dhcpcd + (package + (name "dhcpcd") + (version "10.0.6") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/NetworkConfiguration/dhcpcd") + (commit (string-append "v" version)))) + (sha256 + (base32 "07n7d5wsmy955i6l8rkcmxhgxjygj2cxgpw79id2hx9w41fbkl5l")) + (file-name (git-file-name name version)))) + (inputs (list bash-minimal)) + (native-inputs (list eudev)) + (build-system gnu-build-system) + (arguments + (list + #:test-target "test" + #:configure-flags #~(list "--enable-ipv6" + "--enable-privsep" + "--privsepuser=dhcpcd" + (string-append "--dbdir=" "/var/db/dhcpcd") + (string-append "--rundir=" "/var/run/dhcpcd") + (string-append "CC=" #$(cc-for-target))) + #:phases #~(modify-phases %standard-phases + (add-after 'unpack 'do-not-create-dbdir + (lambda _ + ;; Make sure that the Makefile doesn't attempt to create + ;; /var/db/dhcpcd for which it doesn't have permissions. + (substitute* "src/Makefile" + (("\\$\\{INSTALL\\} -m \\$\\{DBMODE\\} -d \\$\\{DESTDIR\\}\\$\\{DBDIR\\}") + "")))) + (add-before 'build 'setenv + (lambda _ + (setenv "HOST_SH" (which "sh")))) + (add-after 'install 'wrap-hooks + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (libexec (string-append out "/libexec")) + (sed (search-input-file inputs "/bin/sed")) + (rm (search-input-file inputs "/bin/rm"))) + (wrap-program (string-append libexec + "/dhcpcd-run-hooks") + `("PATH" ":" suffix + (,(dirname sed) + ,(dirname rm)))))))))) + (home-page "https://roy.marples.name/projects/dhcpcd") + (synopsis "Feature-rich DHCP and DHCPv6 client") + (description + "Provides a DHCP and a DHCPv6 client. Additionally, +dhcpcd is also an IPv4LL (aka ZeroConf) client. In layperson's terms, +dhcpcd runs on your machine and silently configures your computer to work +on the attached networks without trouble and mostly without configuration.") + (license license:bsd-2))) + (define-public radvd (package (name "radvd") From patchwork Tue Feb 13 12:50:43 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?S=C3=B6ren_Tempel?= X-Patchwork-Id: 60266 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id BD8BC27BBEB; Tue, 13 Feb 2024 12:52:10 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL, SPF_HELO_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id C1B3627BBE2 for ; Tue, 13 Feb 2024 12:52:05 +0000 (GMT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rZsGO-0005Bl-1z; Tue, 13 Feb 2024 07:51:52 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rZsGI-00059M-Sh for guix-patches@gnu.org; Tue, 13 Feb 2024 07:51:46 -0500 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rZsGI-0003cE-0H for guix-patches@gnu.org; Tue, 13 Feb 2024 07:51:46 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1rZsGY-000529-Ry for guix-patches@gnu.org; Tue, 13 Feb 2024 07:52:02 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#68675] [PATCH v3 2/2] services: dhcp: Support the dhcpcd implementation. Resent-From: soeren@soeren-tempel.net Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Tue, 13 Feb 2024 12:52:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 68675 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 68675@debbugs.gnu.org Received: via spool by 68675-submit@debbugs.gnu.org id=B68675.170782868019275 (code B ref 68675); Tue, 13 Feb 2024 12:52:02 +0000 Received: (at 68675) by debbugs.gnu.org; 13 Feb 2024 12:51:20 +0000 Received: from localhost ([127.0.0.1]:42886 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rZsFr-00050p-K7 for submit@debbugs.gnu.org; Tue, 13 Feb 2024 07:51:20 -0500 Received: from magnesium.8pit.net ([45.76.88.171]:28727) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rZsFo-00050J-6l; Tue, 13 Feb 2024 07:51:18 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; s=opensmtpd; bh=+CVPgXe9o3 3xj789ikQ62mSqjI1GBUVMXSMvJHRWfNQ=; h=references:in-reply-to:date: subject:to:from; d=soeren-tempel.net; b=WJ6bLMKdgz5blMy6PdW3/N3MLHc6w9 lnDlXVoZ0Ios74NH78wOeCRkSrziBx2FMQTC3T9ZUq1sJoXxzbzj9EiWI3GHk4SdNXNaKT UATMXNu18SMIIJDxYIqG7QFw4ijfLMNlujEXJ5CjKONk/WFXneYV77Y2vWkXp6fl9GV0KD E= Received: from localhost (dynamic-2a02-3102-49da-001b-df49-33b7-2af2-ff52.310.pool.telefonica.de [2a02:3102:49da:1b:df49:33b7:2af2:ff52]) by magnesium.8pit.net (OpenSMTPD) with ESMTPSA id 43820bef (TLSv1.3:TLS_AES_256_GCM_SHA384:256:YES); Tue, 13 Feb 2024 13:50:55 +0100 (CET) From: soeren@soeren-tempel.net Date: Tue, 13 Feb 2024 13:50:43 +0100 Message-ID: X-Mailer: git-send-email 2.43.1 In-Reply-To: <5c6f714f4802ec17bc247e701bcee82d54733005.1707828643.git.soeren@soeren-tempel.net> References: <5c6f714f4802ec17bc247e701bcee82d54733005.1707828643.git.soeren@soeren-tempel.net> MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches From: Sören Tempel Prior to this commit, the isc-dhcp implementation was the only DHCP implementation supported by dhcp-client-shepherd-service. This is problematic as the ISC implementation has reached end-of-life in 2022(!). As a first step to migrate away from isc-dhcp, this commit adds support for dhcpcd to dhcp-client-shepherd-service. Currently, it has to be enabled explicitly via the package field of the dhcp-client-configuration. In the future, it is intended to become the default to migrate away from isc-dhcp. While at it, also remove isc-dhcp from %base-packages as it is no longer necessarily needed and it will be pulled in by the DHCP client service if required. See also: https://issues.guix.gnu.org/68619 * gnu/services/networking.scm (dhcp-client-shepherd-service): Add support for the dhcpcd client implementation. * gnu/services/networking.scm (dhcp-client-account-service): New procedure. * gnu/services/networking.scm (dhcp-client-service-type): Add optional account-service-type extensions (needed for dhcpcd). * gnu/system.scm (%base-packages-networking): Remove isc-dhcp from %base-packages (will be pulled in by dhcp-client-shepherd-service). Signed-off-by: Sören Tempel --- gnu/services/networking.scm | 92 +++++++++++++++++++++++++++---------- 1 file changed, 67 insertions(+), 25 deletions(-) diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm index 495d049728..4e058e1880 100644 --- a/gnu/services/networking.scm +++ b/gnu/services/networking.scm @@ -316,25 +316,21 @@ (define-record-type* (define dhcp-client-shepherd-service (match-lambda ((? dhcp-client-configuration? config) - (let ((package (dhcp-client-configuration-package config)) - (requirement (dhcp-client-configuration-shepherd-requirement config)) - (provision (dhcp-client-configuration-shepherd-provision config)) - (interfaces (dhcp-client-configuration-interfaces config)) - (pid-file "/var/run/dhclient.pid")) + (let* ((package (dhcp-client-configuration-package config)) + (client-name (package-name package)) + (requirement (dhcp-client-configuration-shepherd-requirement config)) + (provision (dhcp-client-configuration-shepherd-provision config)) + (interfaces (dhcp-client-configuration-interfaces config))) (list (shepherd-service (documentation "Set up networking via DHCP.") (requirement `(user-processes udev ,@requirement)) (provision provision) + (modules `((ice-9 popen) + (ice-9 rdelim) + ,@%default-modules)) - ;; XXX: Running with '-nw' ("no wait") avoids blocking for a minute when - ;; networking is unavailable, but also means that the interface is not up - ;; yet when 'start' completes. To wait for the interface to be ready, one - ;; should instead monitor udev events. (start #~(lambda _ - (define dhclient - (string-append #$package "/sbin/dhclient")) - - ;; When invoked without any arguments, 'dhclient' discovers all + ;; When invoked without any arguments, the client discovers all ;; non-loopback interfaces *that are up*. However, the relevant ;; interfaces are typically down at this point. Thus we perform ;; our own interface discovery here. @@ -355,17 +351,46 @@ (define dhcp-client-shepherd-service (_ #~'#$interfaces)))) - (false-if-exception (delete-file #$pid-file)) - (let ((pid (fork+exec-command - ;; By default dhclient uses a - ;; pre-standardization implementation of - ;; DDNS, which is incompatable with - ;; non-ISC DHCP servers; thus, pass '-I'. - ;; . - (cons* dhclient "-nw" "-I" - "-pf" #$pid-file ifaces)))) - (and (zero? (cdr (waitpid pid))) - (read-pid-file #$pid-file))))) + ;; Returns the execution configuration for the DHCP client + ;; selected by the package field of dhcp-client-configuration. + ;; The configuration is a pair of pidfile and execution command + ;; where the latter is a list. + (define exec-config + (case (string->symbol #$client-name) + ((isc-dhcp) + (let ((pid-file "/var/run/dhclient.pid")) + (cons + (cons* (string-append #$package "/sbin/dhclient") + "-nw" "-I" "-pf" pid-file ifaces) + pid-file))) + ((dhcpcd) + ;; For dhcpcd, the utilized pid-file depends on the + ;; command-line arguments. If multiple interfaces are + ;; given, a different pid-file is returned. Hence, we + ;; consult dhcpcd itself to determine the pid-file. + (let* ((cmd (string-append #$package "/sbin/dhcpcd")) + (arg (cons* cmd "-b" ifaces))) + (cons arg + (let* ((pipe (string-join (append arg '("-P")) " ")) + (port (open-input-pipe pipe)) + (path (read-line port))) + (close-pipe port) + path)))) + (else + (display + "unknown 'package' value in dhcp-client-configuration" + (current-error-port)) + (newline (current-error-port)) + #f))) + + (and + exec-config + (let ((pid-file (cdr exec-config)) + (exec-cmd (car exec-config))) + (false-if-exception (delete-file pid-file)) + (let ((pid (fork+exec-command exec-cmd))) + (and (zero? (cdr (waitpid pid))) + (read-pid-file pid-file))))))) (stop #~(make-kill-destructor)))))) (package (warning (G_ "'dhcp-client' service now expects a \ @@ -377,10 +402,27 @@ (define dhcp-client-shepherd-service (dhcp-client-configuration (package package)))))) +(define (dhcp-client-account-service config) + (let ((package (dhcp-client-configuration-package config))) + ;; Contrary to other DHCP clients (e.g. dhclient), dhcpcd supports + ;; privilege separation. Hence, we need to create an account here. + (if (string=? "dhcpcd" (package-name package)) + (list (user-group (name "dhcpcd") (system? #t)) + (user-account + (name "dhcpcd") + (group "dhcpcd") + (system? #t) + (comment "dhcpcd daemon user") + (home-directory "/var/empty") + (shell "/run/current-system/profile/sbin/nologin"))) + '()))) + (define dhcp-client-service-type (service-type (name 'dhcp-client) (extensions - (list (service-extension shepherd-root-service-type + (list (service-extension account-service-type + dhcp-client-account-service) + (service-extension shepherd-root-service-type dhcp-client-shepherd-service))) (default-value (dhcp-client-configuration)) (description "Run @command{dhcp}, a Dynamic Host Configuration