[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#61587] [PATCH 6/8] services: network-manager: Await for NetworkMana
From: |
Bruno Victal |
Subject: |
[bug#61587] [PATCH 6/8] services: network-manager: Await for NetworkManager to finish starting up. |
Date: |
Fri, 17 Feb 2023 21:14:57 +0000 |
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.
Supersedes #47253. (Note: Shepherd no longer blocks since shepherd 0.9.3)
* gnu/services/networking.scm (network-manager-shepherd-service): Await for
NetworkManager to finish starting up.
---
gnu/services/networking.scm | 36 +++++++++++++++++++++++++-----------
1 file changed, 25 insertions(+), 11 deletions(-)
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
--
2.39.1
- [bug#61587] [PATCH 0/8] networking services refactoring, Bruno Victal, 2023/02/17
- [bug#61587] [PATCH 4/8] services: connman: Add 'shepherd-requirement' field., Bruno Victal, 2023/02/17
- [bug#61587] [PATCH 3/8] services: connman: Use match-record and export accessors., Bruno Victal, 2023/02/17
- [bug#61587] [PATCH 1/8] services: network-manager: Add 'shepherd-requirement' field., Bruno Victal, 2023/02/17
- [bug#61587] [PATCH 2/8] services: network-manager: Deprecate 'iwd?' field., Bruno Victal, 2023/02/17
- [bug#61587] [PATCH 6/8] services: network-manager: Await for NetworkManager to finish starting up.,
Bruno Victal <=
- [bug#61587] [PATCH 8/8] services: connman: Set service canonical-name to connman., Bruno Victal, 2023/02/17
- [bug#61587] [PATCH 7/8] services: network-manager: Set service canonical-name to NetworkManager., Bruno Victal, 2023/02/17
- [bug#61587] [PATCH 5/8] services: connman: Deprecate 'iwd?' field., Bruno Victal, 2023/02/17