From 1d74fcb91d5bec30b3d19072fad4253c98b88aa6 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Fri, 6 Jul 2018 18:21:19 +0200 Subject: [PATCH] Use wait on network to delay the startup (#81) * Use wait on network to delay the startup * Update nm.conf * Create nm.conf * Update hassos-supervisor.service * Rename hassos.conf to docker.conf * Create hassos.conf * Create hassos.conf * Update hassos.conf * aply patch * Mark only failed * Fix start order --- .../NetworkManager.service.d/hassos.conf | 2 ++ .../system/avahi-daemon.service.d/hassos.conf | 2 ++ .../system/avahi-daemon.service.d/nm.conf | 3 +- .../systemd/system/dropbear.service.d/nm.conf | 3 ++ .../system/getty@.service.d/hassos.conf | 3 ++ .../serial-getty@.service.d/docker.conf | 3 ++ .../serial-getty@.service.d/hassos.conf | 4 +-- .../systemd/system/hassos-supervisor.service | 3 +- .../rootfs-overlay/usr/sbin/hassos-rate | 4 +-- ...NetworkManager-allow-to-wait-on-boot.patch | 34 +++++++++++++++++++ .../network-manager/network-manager.mk | 4 +++ 11 files changed, 59 insertions(+), 6 deletions(-) create mode 100644 buildroot-external/rootfs-overlay/etc/systemd/system/NetworkManager.service.d/hassos.conf create mode 100644 buildroot-external/rootfs-overlay/etc/systemd/system/avahi-daemon.service.d/hassos.conf create mode 100644 buildroot-external/rootfs-overlay/etc/systemd/system/dropbear.service.d/nm.conf create mode 100644 buildroot-external/rootfs-overlay/etc/systemd/system/getty@.service.d/hassos.conf create mode 100644 buildroot-external/rootfs-overlay/etc/systemd/system/serial-getty@.service.d/docker.conf create mode 100644 buildroot-patches/0009-NetworkManager-allow-to-wait-on-boot.patch diff --git a/buildroot-external/rootfs-overlay/etc/systemd/system/NetworkManager.service.d/hassos.conf b/buildroot-external/rootfs-overlay/etc/systemd/system/NetworkManager.service.d/hassos.conf new file mode 100644 index 000000000..09dd23d8b --- /dev/null +++ b/buildroot-external/rootfs-overlay/etc/systemd/system/NetworkManager.service.d/hassos.conf @@ -0,0 +1,2 @@ +[Unit] +RequiresMountsFor=/etc/hostname /etc/hosts /etc/NetworkManager/system-connections diff --git a/buildroot-external/rootfs-overlay/etc/systemd/system/avahi-daemon.service.d/hassos.conf b/buildroot-external/rootfs-overlay/etc/systemd/system/avahi-daemon.service.d/hassos.conf new file mode 100644 index 000000000..7a243b5b1 --- /dev/null +++ b/buildroot-external/rootfs-overlay/etc/systemd/system/avahi-daemon.service.d/hassos.conf @@ -0,0 +1,2 @@ +[Unit] +RequiresMountsFor=/etc/hostname diff --git a/buildroot-external/rootfs-overlay/etc/systemd/system/avahi-daemon.service.d/nm.conf b/buildroot-external/rootfs-overlay/etc/systemd/system/avahi-daemon.service.d/nm.conf index 31a36df3a..0a38143e9 100644 --- a/buildroot-external/rootfs-overlay/etc/systemd/system/avahi-daemon.service.d/nm.conf +++ b/buildroot-external/rootfs-overlay/etc/systemd/system/avahi-daemon.service.d/nm.conf @@ -1,2 +1,3 @@ [Unit] -After=NetworkManager.service +Wants=network-online.target +After=network-online.target diff --git a/buildroot-external/rootfs-overlay/etc/systemd/system/dropbear.service.d/nm.conf b/buildroot-external/rootfs-overlay/etc/systemd/system/dropbear.service.d/nm.conf new file mode 100644 index 000000000..0a38143e9 --- /dev/null +++ b/buildroot-external/rootfs-overlay/etc/systemd/system/dropbear.service.d/nm.conf @@ -0,0 +1,3 @@ +[Unit] +Wants=network-online.target +After=network-online.target diff --git a/buildroot-external/rootfs-overlay/etc/systemd/system/getty@.service.d/hassos.conf b/buildroot-external/rootfs-overlay/etc/systemd/system/getty@.service.d/hassos.conf new file mode 100644 index 000000000..2217bfed9 --- /dev/null +++ b/buildroot-external/rootfs-overlay/etc/systemd/system/getty@.service.d/hassos.conf @@ -0,0 +1,3 @@ +[Unit] +Wants=hassos-supervisor.service +After=hassos-supervisor.service diff --git a/buildroot-external/rootfs-overlay/etc/systemd/system/serial-getty@.service.d/docker.conf b/buildroot-external/rootfs-overlay/etc/systemd/system/serial-getty@.service.d/docker.conf new file mode 100644 index 000000000..53a8d88b0 --- /dev/null +++ b/buildroot-external/rootfs-overlay/etc/systemd/system/serial-getty@.service.d/docker.conf @@ -0,0 +1,3 @@ +[Unit] +Requires=docker.service +After=docker.service diff --git a/buildroot-external/rootfs-overlay/etc/systemd/system/serial-getty@.service.d/hassos.conf b/buildroot-external/rootfs-overlay/etc/systemd/system/serial-getty@.service.d/hassos.conf index 53a8d88b0..2217bfed9 100644 --- a/buildroot-external/rootfs-overlay/etc/systemd/system/serial-getty@.service.d/hassos.conf +++ b/buildroot-external/rootfs-overlay/etc/systemd/system/serial-getty@.service.d/hassos.conf @@ -1,3 +1,3 @@ [Unit] -Requires=docker.service -After=docker.service +Wants=hassos-supervisor.service +After=hassos-supervisor.service diff --git a/buildroot-external/rootfs-overlay/usr/lib/systemd/system/hassos-supervisor.service b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/hassos-supervisor.service index 195314d83..d21ac9897 100644 --- a/buildroot-external/rootfs-overlay/usr/lib/systemd/system/hassos-supervisor.service +++ b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/hassos-supervisor.service @@ -1,7 +1,8 @@ [Unit] Description=HassOS supervisor Requires=docker.service -After=docker.service rauc.service dbus.socket NetworkManager.service +Wants=network-online.target +After=docker.service rauc.service dbus.socket network-online.target RequiresMountsFor=/mnt/data StartLimitIntervalSec=60 StartLimitBurst=5 diff --git a/buildroot-external/rootfs-overlay/usr/sbin/hassos-rate b/buildroot-external/rootfs-overlay/usr/sbin/hassos-rate index 79bbe662a..517b652de 100755 --- a/buildroot-external/rootfs-overlay/usr/sbin/hassos-rate +++ b/buildroot-external/rootfs-overlay/usr/sbin/hassos-rate @@ -15,12 +15,12 @@ function mark_bad() { #### Check system #### # Docker state -if ! systemctl -q is-active docker; then +if systemctl -q is-failed docker; then mark_bad fi # Docker state -if ! systemctl -q is-active hassos-supervisor; then +if systemctl -q is-failed hassos-supervisor; then mark_bad fi diff --git a/buildroot-patches/0009-NetworkManager-allow-to-wait-on-boot.patch b/buildroot-patches/0009-NetworkManager-allow-to-wait-on-boot.patch new file mode 100644 index 000000000..273dd981a --- /dev/null +++ b/buildroot-patches/0009-NetworkManager-allow-to-wait-on-boot.patch @@ -0,0 +1,34 @@ +From 590565bc07f563f978004727dc817dc89527377a Mon Sep 17 00:00:00 2001 +From: Pascal Vizeli +Date: Sat, 31 Mar 2018 16:58:14 +0200 +Subject: [PATCH 1/1] NetworkManager: allow to wait on boot + +Signed-off-by: Pascal Vizeli +--- + package/network-manager/network-manager.mk | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/package/network-manager/network-manager.mk b/package/network-manager/network-manager.mk +index a520aad..fb2012a 100644 +--- a/package/network-manager/network-manager.mk ++++ b/package/network-manager/network-manager.mk +@@ -93,6 +93,7 @@ endef + + define NETWORK_MANAGER_INSTALL_INIT_SYSTEMD + mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants ++ mkdir -p $(TARGET_DIR)/etc/systemd/system/network-online.target.wants + + ln -sf /usr/lib/systemd/system/NetworkManager.service \ + $(TARGET_DIR)/etc/systemd/system/dbus-org.freedesktop.NetworkManager.service +@@ -100,6 +101,9 @@ define NETWORK_MANAGER_INSTALL_INIT_SYSTEMD + ln -sf /usr/lib/systemd/system/NetworkManager.service \ + $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/NetworkManager.service + ++ ln -sf /usr/lib/systemd/system/NetworkManager-wait-online.service \ ++ $(TARGET_DIR)/etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service ++ + ln -sf /usr/lib/systemd/system/NetworkManager-dispatcher.service \ + $(TARGET_DIR)/etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service + endef +-- +2.7.4 diff --git a/buildroot/package/network-manager/network-manager.mk b/buildroot/package/network-manager/network-manager.mk index 846605eb8..b07059f79 100644 --- a/buildroot/package/network-manager/network-manager.mk +++ b/buildroot/package/network-manager/network-manager.mk @@ -93,6 +93,7 @@ endef define NETWORK_MANAGER_INSTALL_INIT_SYSTEMD mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants + mkdir -p $(TARGET_DIR)/etc/systemd/system/network-online.target.wants ln -sf /usr/lib/systemd/system/NetworkManager.service \ $(TARGET_DIR)/etc/systemd/system/dbus-org.freedesktop.NetworkManager.service @@ -100,6 +101,9 @@ define NETWORK_MANAGER_INSTALL_INIT_SYSTEMD ln -sf /usr/lib/systemd/system/NetworkManager.service \ $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/NetworkManager.service + ln -sf /usr/lib/systemd/system/NetworkManager-wait-online.service \ + $(TARGET_DIR)/etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service + ln -sf /usr/lib/systemd/system/NetworkManager-dispatcher.service \ $(TARGET_DIR)/etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service endef