Am Dienstag, den 22.05.2018, 12:36 +0200 schrieb Michael Biebl: > Am 22.05.2018 um 12:27 schrieb Benjamin Drung: > > networking.service calls 'udevadm > > settle' in 'ExecStartPre'. > > It does, indeed. But not unconditionally. > > ifupdown is basically installed on every system, even if e.g. > NetworkManager is actually in charge and /e/n/i is empty. > > This would mean you unconditionally pull in systemd-udev- > settle.service > on basically every system out there, and we certainly don't want > that. > systemd-udev-settle.service is a hack.
Attached is an updated and tested patch that splits the udevadm settle command into a separate ifupdown-pre service without modifying the logic. So a no-op 'udevadm settle' will stay a no-op. -- Benjamin Drung System Developer Debian & Ubuntu Developer ProfitBricks GmbH Greifswalder Str. 207 10405 Berlin Email: benjamin.dr...@profitbricks.com URL: https://www.profitbricks.de Sitz der Gesellschaft: Berlin Registergericht: Amtsgericht Charlottenburg, HRB 125506 B Geschäftsführer: Achim Weiss, Matthias Steinberg, Christoph Steffens
From 1cdf80cbaa1ad881f5b44c1ad5504c5082c9245d Mon Sep 17 00:00:00 2001 From: Benjamin Drung <benjamin.dr...@profitbricks.com> Date: Tue, 22 May 2018 11:52:24 +0200 Subject: [PATCH] Split 'udevadm settle' from networking.service udev rules trigger rdma-load-modules@infiniband.service (which loads the ib_ipoib kernel module) which should run before networking.service. The networking service should not attempt to do udevadm settle internally, but it must depend on separate service for that instead. The reason is due to how systemd scheduals ordering. Once it starts running networking.service 'ExecStartPre' it will not re-consider order past that point. So any activations done by udev while settling have no impact on networking.service at all. Closes: #899002 Signed-off-by: Benjamin Drung <benjamin.dr...@profitbricks.com> --- debian/ifupdown-pre.service | 13 +++++++++++++ debian/networking.service | 4 ++-- debian/rules | 1 + 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 debian/ifupdown-pre.service diff --git a/debian/ifupdown-pre.service b/debian/ifupdown-pre.service new file mode 100644 index 0000000..b6602ad --- /dev/null +++ b/debian/ifupdown-pre.service @@ -0,0 +1,13 @@ +[Unit] +Description=Helper to synchronize boot up for ifupdown +DefaultDependencies=no +Wants=systemd-udevd.service +After=systemd-udev-trigger.service +Before=network.target + +[Service] +Type=oneshot +TimeoutSec=180 +RemainAfterExit=yes +EnvironmentFile=-/etc/default/networking +ExecStart=/bin/sh -c 'if [ "$CONFIGURE_INTERFACES" != "no" ] && [ -n "$(ifquery --read-environment --list --exclude=lo)" ]; then udevadm settle; fi' diff --git a/debian/networking.service b/debian/networking.service index f5e5bcd..593172b 100644 --- a/debian/networking.service +++ b/debian/networking.service @@ -2,8 +2,9 @@ Description=Raise network interfaces Documentation=man:interfaces(5) DefaultDependencies=no +Requires=ifupdown-pre.service Wants=network.target -After=local-fs.target network-pre.target apparmor.service systemd-sysctl.service systemd-modules-load.service +After=local-fs.target network-pre.target apparmor.service systemd-sysctl.service systemd-modules-load.service ifupdown-pre.service Before=network.target shutdown.target network-online.target Conflicts=shutdown.target @@ -14,7 +15,6 @@ WantedBy=network-online.target [Service] Type=oneshot EnvironmentFile=-/etc/default/networking -ExecStartPre=-/bin/sh -c 'if [ "$CONFIGURE_INTERFACES" != "no" ] && [ -n "$(ifquery --read-environment --list --exclude=lo)" ]; then udevadm settle; fi' ExecStart=/sbin/ifup -a --read-environment ExecStop=/sbin/ifdown -a --read-environment --exclude=lo RemainAfterExit=true diff --git a/debian/rules b/debian/rules index c3761c8..e1457b4 100755 --- a/debian/rules +++ b/debian/rules @@ -23,6 +23,7 @@ override_dh_installinit: dh_installinit --name=networking --noscripts dh_installsystemd --name=networking dh_installsystemd --name=ifup@ + dh_installsystemd --name=ifupdown-pre dh_installsystemd --no-enable --no-start --name=ifupdown-wait-online override_dh_auto_clean: -- 2.17.0
signature.asc
Description: This is a digitally signed message part