diff options
author | Wen Liang <wenliang@redhat.com> | 2023-06-07 10:45:22 -0400 |
---|---|---|
committer | Wen Liang <wenliang@redhat.com> | 2023-06-09 09:18:20 -0400 |
commit | f04a9eb098487cd999a5bdbe5aee05c2f8e84448 (patch) | |
tree | 3da0c0097a72affaf65f2e92603bfafb9272b76a | |
parent | 6050da93bda6f112cb3ad784f506ec67aa5aaff1 (diff) |
cloud-setup: add pre-up event to prevent reaching network-online.target
network-online.target should not be reached before nm-cloud-setup
completes configuring the network, which may make user service get
started before the network is fully configured.
Setting nm-cloud-setup.service as "Before=network-online.target" would
maybe have already achieved that. However, also use a pre-up dispatcher
script, so that the device activation in NetworkManager is also waiting
for nm-cloud-setup to complete.
https://bugzilla.redhat.com/show_bug.cgi?id=2151040
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1653
-rw-r--r-- | Makefile.am | 4 | ||||
-rw-r--r-- | contrib/fedora/rpm/NetworkManager.spec | 1 | ||||
-rwxr-xr-x | src/nm-cloud-setup/90-nm-cloud-setup.sh | 16 | ||||
-rw-r--r-- | src/nm-cloud-setup/meson.build | 2 | ||||
-rw-r--r-- | src/nm-cloud-setup/nm-cloud-setup.service.in | 1 | ||||
-rwxr-xr-x | tools/meson-post-install.sh | 1 |
6 files changed, 19 insertions, 6 deletions
diff --git a/Makefile.am b/Makefile.am index 80c1012099..fd92054d01 100644 --- a/Makefile.am +++ b/Makefile.am @@ -5419,12 +5419,14 @@ src/nm-cloud-setup/nm-cloud-setup.service: $(srcdir)/src/nm-cloud-setup/nm-cloud $(AM_V_GEN) $(data_edit) $< >$@ install-data-hook-cloud-setup: install-data-hook-dispatcher - $(INSTALL_SCRIPT) "$(srcdir)/src/nm-cloud-setup/90-nm-cloud-setup.sh" "$(DESTDIR)$(nmlibdir)/dispatcher.d/no-wait.d/" + $(INSTALL_SCRIPT) "$(srcdir)/src/nm-cloud-setup/90-nm-cloud-setup.sh" "$(DESTDIR)$(nmlibdir)/dispatcher.d/pre-up.d/" + ln -fs ../pre-up.d/90-nm-cloud-setup.sh "$(DESTDIR)$(nmlibdir)/dispatcher.d/no-wait.d/90-nm-cloud-setup.sh" ln -fs no-wait.d/90-nm-cloud-setup.sh "$(DESTDIR)$(nmlibdir)/dispatcher.d/90-nm-cloud-setup.sh" install_data_hook += install-data-hook-cloud-setup uninstall-hook-cloud-setup: + rm -f "$(DESTDIR)$(nmlibdir)/dispatcher.d/pre-up.d/90-nm-cloud-setup.sh" rm -f "$(DESTDIR)$(nmlibdir)/dispatcher.d/no-wait.d/90-nm-cloud-setup.sh" rm -f "$(DESTDIR)$(nmlibdir)/dispatcher.d/90-nm-cloud-setup.sh" diff --git a/contrib/fedora/rpm/NetworkManager.spec b/contrib/fedora/rpm/NetworkManager.spec index 255342b01c..2ebd91f09c 100644 --- a/contrib/fedora/rpm/NetworkManager.spec +++ b/contrib/fedora/rpm/NetworkManager.spec @@ -1243,6 +1243,7 @@ fi %{_unitdir}/nm-cloud-setup.timer %{nmlibdir}/dispatcher.d/90-nm-cloud-setup.sh %{nmlibdir}/dispatcher.d/no-wait.d/90-nm-cloud-setup.sh +%{nmlibdir}/dispatcher.d/pre-up.d/90-nm-cloud-setup.sh %{_mandir}/man8/nm-cloud-setup.8* %endif diff --git a/src/nm-cloud-setup/90-nm-cloud-setup.sh b/src/nm-cloud-setup/90-nm-cloud-setup.sh index 817e255581..ae55b72524 100755 --- a/src/nm-cloud-setup/90-nm-cloud-setup.sh +++ b/src/nm-cloud-setup/90-nm-cloud-setup.sh @@ -1,9 +1,17 @@ #!/bin/sh case "$2" in - up|dhcp4-change) - if systemctl -q is-enabled nm-cloud-setup.service ; then - exec systemctl --no-block restart nm-cloud-setup.service - fi + pre-up) + NO_BLOCK= ;; + dhcp4-change) + NO_BLOCK=--no-block + ;; + *) + exit 0 + ;; esac + +if systemctl -q is-enabled nm-cloud-setup.service ; then + exec systemctl $NO_BLOCK restart nm-cloud-setup.service +fi diff --git a/src/nm-cloud-setup/meson.build b/src/nm-cloud-setup/meson.build index ea4ad1131b..b1269ec667 100644 --- a/src/nm-cloud-setup/meson.build +++ b/src/nm-cloud-setup/meson.build @@ -16,7 +16,7 @@ if install_systemdunitdir install_data( '90-nm-cloud-setup.sh', - install_dir: join_paths(nm_pkglibdir, 'dispatcher.d', 'no-wait.d'), + install_dir: join_paths(nm_pkglibdir, 'dispatcher.d', 'pre-up.d'), ) endif diff --git a/src/nm-cloud-setup/nm-cloud-setup.service.in b/src/nm-cloud-setup/nm-cloud-setup.service.in index f4b0e2638f..a2b4581f39 100644 --- a/src/nm-cloud-setup/nm-cloud-setup.service.in +++ b/src/nm-cloud-setup/nm-cloud-setup.service.in @@ -1,6 +1,7 @@ [Unit] Description=Automatically configure NetworkManager in cloud Documentation=man:nm-cloud-setup(8) +Before=network-online.target After=NetworkManager.service [Service] diff --git a/tools/meson-post-install.sh b/tools/meson-post-install.sh index 45f3e37c6b..fe85d417ae 100755 --- a/tools/meson-post-install.sh +++ b/tools/meson-post-install.sh @@ -55,6 +55,7 @@ if [ "$enable_ifcfg_rh" = 1 ]; then fi if [ "$enable_nm_cloud_setup" = 1 -a "$install_systemdunitdir" = 1 ]; then + ln -sfn '../pre-up.d/90-nm-cloud-setup.sh' "${DESTDIR}${nm_pkglibdir}/dispatcher.d/no-wait.d/90-nm-cloud-setup.sh" ln -sfn 'no-wait.d/90-nm-cloud-setup.sh' "${DESTDIR}${nm_pkglibdir}/dispatcher.d/90-nm-cloud-setup.sh" fi |