Hi, raid5atemyhomework via Bug reports for GNU Guix <bug-guix@gnu.org> writes:
> I have a small number of daemons that need access to the network at > startup. I have configured their Shepherd services to require > `networking`. > > However, to my puzzlement, I consistently find that they are unable to > access the network at startup. One daemon dies (and gets respawned so > often that it sometimes gets disabled by Shepherd), the other daemon > just keeps running without having set up the server that I need it to > expose. > > Thus, in many cases whenever I reboot I have to manually `herd enable` > and `herd restart` the first daemon and `herd restart` the second. > This is fairly bad since I want to be able to leave this server alone > and have it survive power interruptions etc. [...] > I would like to propose this change: > > ```diff > --- a/gnu/services/networking.scm > +++ b/gnu/services/networking.scm > @@ -1106,17 +1106,22 @@ and @command{wicd-curses} user interfaces." > (documentation "Run the NetworkManager.") > (provision '(networking)) > (requirement '(user-processes dbus-system wpa-supplicant > loopback)) > - (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 #~(let ((constructor (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=")))) > + (lambda args > + (let ((pid (apply constructor args))) > + (invoke/quiet (string-append #$network-manager > "/bin/nm-online") > + "-s" "-q" "--timeout=30") > + pid)))) > (stop #~(make-kill-destructor)))))))) > > (define network-manager-service-type > ``` > > > Of course, the big problem is that Shepherd is single-threadded and > `nm-online` will block all other bootup. That's not good. For the sake of users who are not always connected to the internet, I'd strongly prefer for the Guix boot process of a desktop system to *not* be blocked for 30 seconds when there's no active internet connection. How about leaving "networking" as it is now, and instead adding a new service called "network-online" or similar, that requires "networking" and then waits until a network connection is established? What do you think? Mark