[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1029352: Bug#1022843: ifupdown: network down after systemctl restart



Cyril Brulebois <kibi@debian.org> (2023-01-22):
> The configuration found below manages to:
>  - let my allow-hotplug slow-to-appear wireless interface come up at
>    boot-up, via the udev integration;
>  - allow me to stop and start networking, losing then regaining all
>    relevant configs (main connection is wireless, with WPA, with DHCP,
>    and SLAAC via RAs, without /e/n/i conf for SLAAC, see #1029352);
>  - allow me to restart networking, [same as previous entry].
> 
> This is just an example of something that seems to be working fine
> enough during my very limited testing, there might be cleaner ways to do
> this, better names to choose (I picked a neutral “environment” but my
> first thought was an explicit “maybe-redo-hotplug”), etc.:
> 
>     [Service]
>     Type=oneshot
>     EnvironmentFile=-/etc/default/networking
>     EnvironmentFile=-/run/network/environment
>     ExecStart=/sbin/ifup -a --read-environment $ALLOW_HOTPLUG
>     ExecStop=/sbin/ifdown -a --read-environment --exclude=lo
>     ExecStopPost=/bin/sh -c "echo ALLOW_HOTPLUG=--allow=hotplug > /run/network/environment"
>     RemainAfterExit=true
>     TimeoutStartSec=5min
> 
> Changes (compared to the original ifupdown service unit):
>  - an extra /run/network/environment is read if present, no errors
>    otherwise; of course it doesn't exist during boot-up, since
>    /run is brand new and nothing else is creating it;
>  - ExecStopPost populates that file with ALLOW_HOTPLUG=--allow=hotplug
>    after each “stop” (possibly part of a “restart”) is done;
>  - ExecStart gets an extra $ALLOW_HOTPLUG parameter, that's either
>    an empty string (at boot-up) or --allow=hotplug (after boot-up).

Of course I'm not familiar with the ifup interface so I fudged it. Now,
with an extra ens3 declared as auto, the following seems to work fine
for boot-up, stop and start, and restart:

    [Service]
    Type=oneshot
    EnvironmentFile=-/etc/default/networking
    ExecStart=/sbin/ifup -a --read-environment
    ExecStart=/bin/sh -c 'if [ -f /run/network/restart-hotplug ]; then /sbin/ifup -a --read-environment --allow=hotplug; fi'
    ExecStop=/sbin/ifdown -a --read-environment --exclude=lo
    ExecStopPost=/usr/bin/touch /run/network/restart-hotplug
    RemainAfterExit=true
    TimeoutStartSec=5min

I have no opinions on how to best handle possible errors regarding the
hotplug interfaces; but again, that's secondary compared to fixing the
“start” use case.


Cheers,
-- 
Cyril Brulebois (kibi@debian.org)            <https://debamax.com/>
D-I release manager -- Release team member -- Freelance Consultant

Attachment: signature.asc
Description: PGP signature


Reply to: