Message ID | 502d6efbde6d7e372ab6bc414fbbe2c065c23b4e.1676667941.git.mirai@makinata.eu |
---|---|
State | New |
Headers | show |
Series | networking services refactoring | expand |
Hi, Bruno Victal <mirai@makinata.eu> skribis: > This is similar to its NetworkManager-wait-online.service systemd counterpart, > with the main difference being that we handle it all in 'networking symbol, rather than > introduce a new 'networking-online symbol. (see discussion #47253) > > As a result of this change, with opensmtpd-service-type as an example, > manual 'herd restart smtpd' after system bootups are no longer required > when opensmtpd is configured with a smtpd.conf containing non-loopback interfaces. > (this issue is described in more detail at #60300) > > Addresses #60300. Please write: “Fixes <https://issues.guix.gnu.org/60300>.” Possibly along with a “Reported by” line (see the Git log for inspiration). > Supersedes #47253. (Note: Shepherd no longer blocks since shepherd 0.9.3) What does that mean? > * gnu/services/networking.scm (network-manager-shepherd-service): Await for > NetworkManager to finish starting up. [...] > + (start > + #~(lambda args > + (let ((constructor > + (apply > + (make-forkexec-constructor > + (list #$(file-append network-manager > + "/sbin/NetworkManager") > + (string-append "--config=" #$conf) > + "--no-daemon") Rather: (let ((pid (fork+exec-command (list …)))) … pid) Ludo’.
On 2023-03-03 17:13, Ludovic Courtès wrote:> Bruno Victal <mirai@makinata.eu> skribis: > >> Supersedes #47253. (Note: Shepherd no longer blocks since shepherd 0.9.3) > > What does that mean? Oops, I didn't intend to include this in the commit message, it was for the mail body. At the time I didn't notice that #47253 already had a patch to solve this issue which resulted in independent rewrite of the same fix. I only noticed it while I was searching for open issues to attach to the message as potential issues that would be closed by this. The note refers to what made #47253 untenable back then. >> * gnu/services/networking.scm (network-manager-shepherd-service): Await for >> NetworkManager to finish starting up. > > [...] > >> + (start >> + #~(lambda args >> + (let ((constructor >> + (apply >> + (make-forkexec-constructor >> + (list #$(file-append network-manager >> + "/sbin/NetworkManager") >> + (string-append "--config=" #$conf) >> + "--no-daemon") > > Rather: > > (let ((pid (fork+exec-command (list …)))) > … > pid) I'll send a v2 with the required touch-ups. Cheers, Bruno
diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm index 13816327b0..55bc2cf362 100644 --- a/gnu/services/networking.scm +++ b/gnu/services/networking.scm @@ -1235,17 +1235,31 @@ (define (network-manager-shepherd-service config) ;; TODO: iwd? is deprecated and should be passed ;; with shepherd-requirement, remove later. ,@(if iwd? '(iwd) '()))) - (start #~(make-forkexec-constructor - (list (string-append #$network-manager - "/sbin/NetworkManager") - (string-append "--config=" #$conf) - "--no-daemon") - #:environment-variables - (list (string-append "NM_VPN_PLUGIN_DIR=" #$vpn - "/lib/NetworkManager/VPN") - ;; Override non-existent default users - "NM_OPENVPN_USER=" - "NM_OPENVPN_GROUP="))) + (start + #~(lambda args + (let ((constructor + (apply + (make-forkexec-constructor + (list #$(file-append network-manager + "/sbin/NetworkManager") + (string-append "--config=" #$conf) + "--no-daemon") + #:environment-variables + (list (string-append "NM_VPN_PLUGIN_DIR=" #$vpn + "/lib/NetworkManager/VPN") + ;; Override non-existent default users + "NM_OPENVPN_USER=" + "NM_OPENVPN_GROUP=")) args))) + ;; XXX: Despite the "online" name, this doesn't guarantee + ;; WAN connectivity, it merely waits for NetworkManager + ;; to finish starting-up. This is required otherwise + ;; services will fail since the network interfaces be + ;; absent until NetworkManager finishes setting them up. + (system* #$(file-append network-manager "/bin/nm-online") + "--wait-for-startup" "--quiet") + ;; XXX: Finally, return the value from running + ;; make-forkexec-constructor to shepherd. + constructor))) (stop #~(make-kill-destructor))))))) (define network-manager-service-type