Hi, Earlier, I wrote: >> 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?
I withdraw my proposal for a separate "network-online" service. It was a half-baked idea made in haste. Now that I've looked, I see that almost every service in Guix that requires 'networking' should arguably[*] wait until the network comes up before starting up. Moreover, now that I think about it, I'm not sure what the use case would be for requiring 'networking', if not to wait for the network to come up. My immediate concern here is to avoid blocking the startup of a typical Guix desktop or laptop system for 30 seconds if there's no network connection, and more generally to keep Guix working well for users like myself who are not "always online". I haven't yet looked into the details, but at first glance, I'm inclined to agree with you that the right place to fix this is in Shepherd. Somehow, it ought to be possible to delay the startup of services that require 'networking', without delaying anything else. Mark [*] I'll note, however, that merely waiting up to 30 seconds (or whatever timeout you choose) is not, in itself, a robust solution. What happens if the network is down for more than 30 seconds? What if it goes down after 'nm-online' checks, but before the dependent service has finished starting? Also, if a service fails to handle lack of network when it starts, it makes me wonder whether it properly handles a prolonged network failure while its running. It seems to me that the only fully satisfactory solution is for each service to robustly handle network failures at any time, although I acknowledge that workarounds are needed in the meantime.