aboutsummaryrefslogtreecommitdiff
path: root/gnu/services
diff options
context:
space:
mode:
authorBruno Victal <mirai@makinata.eu>2023-03-07 12:44:03 +0000
committerLudovic Courtès <ludo@gnu.org>2023-03-10 14:49:58 +0100
commitd04955972e42bd85ba6137625e09e9e31de52f72 (patch)
treee1233eb607847919e6143f2f50434514b2c5f845 /gnu/services
parent17c80118fa2a78a249f7fb992ffa3e31407a24a7 (diff)
downloadguix-d04955972e42bd85ba6137625e09e9e31de52f72.tar
guix-d04955972e42bd85ba6137625e09e9e31de52f72.tar.gz
services: network-manager: Await for NetworkManager to finish starting up.
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) Fixes <https://issues.guix.gnu.org/60300>. * gnu/services/networking.scm (network-manager-shepherd-service): Await for NetworkManager to finish starting up. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
Diffstat (limited to 'gnu/services')
-rw-r--r--gnu/services/networking.scm35
1 files changed, 24 insertions, 11 deletions
diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm
index 0ed467f9d8..7cf92dc8c4 100644
--- a/gnu/services/networking.scm
+++ b/gnu/services/networking.scm
@@ -1235,17 +1235,30 @@ project's documentation} for more information."
;; 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 _
+ (let ((pid
+ (fork+exec-command
+ (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="))))
+ ;; 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 pid from running
+ ;; fork+exec-command to shepherd.
+ pid)))
(stop #~(make-kill-destructor)))))))
(define network-manager-service-type