From 849e2478d2112287d5f8e656cad66cc4782d52da Mon Sep 17 00:00:00 2001 From: =?utf8?q?Christian=20K=C3=B6nig?= Date: Tue, 18 Apr 2023 22:41:56 +0200 Subject: [PATCH] Use s6-notifyoncheck to check for services startup readiness MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König --- .../classic/etc/s6-overlay/s6-rc.d/02-dbus/data/check | 2 ++ .../etc/s6-overlay/s6-rc.d/02-dbus/notification-fd | 1 + docker/classic/etc/s6-overlay/s6-rc.d/02-dbus/run | 3 +-- .../classic/etc/s6-overlay/s6-rc.d/03-avahi/data/check | 10 ++++++++++ .../etc/s6-overlay/s6-rc.d/03-avahi/notification-fd | 1 + docker/classic/etc/s6-overlay/s6-rc.d/03-avahi/run | 6 +----- docker/etc/s6-overlay/s6-rc.d/02-dbus/data/check | 2 ++ docker/etc/s6-overlay/s6-rc.d/02-dbus/notification-fd | 1 + docker/etc/s6-overlay/s6-rc.d/02-dbus/run | 3 +-- docker/etc/s6-overlay/s6-rc.d/03-avahi/data/check | 10 ++++++++++ docker/etc/s6-overlay/s6-rc.d/03-avahi/notification-fd | 1 + docker/etc/s6-overlay/s6-rc.d/03-avahi/run | 6 +----- 12 files changed, 32 insertions(+), 14 deletions(-) create mode 100755 docker/classic/etc/s6-overlay/s6-rc.d/02-dbus/data/check create mode 100644 docker/classic/etc/s6-overlay/s6-rc.d/02-dbus/notification-fd create mode 100755 docker/classic/etc/s6-overlay/s6-rc.d/03-avahi/data/check create mode 100644 docker/classic/etc/s6-overlay/s6-rc.d/03-avahi/notification-fd create mode 100755 docker/etc/s6-overlay/s6-rc.d/02-dbus/data/check create mode 100644 docker/etc/s6-overlay/s6-rc.d/02-dbus/notification-fd create mode 100755 docker/etc/s6-overlay/s6-rc.d/03-avahi/data/check create mode 100644 docker/etc/s6-overlay/s6-rc.d/03-avahi/notification-fd diff --git a/docker/classic/etc/s6-overlay/s6-rc.d/02-dbus/data/check b/docker/classic/etc/s6-overlay/s6-rc.d/02-dbus/data/check new file mode 100755 index 00000000..39eeac11 --- /dev/null +++ b/docker/classic/etc/s6-overlay/s6-rc.d/02-dbus/data/check @@ -0,0 +1,2 @@ +#!/bin/sh +exec dbus-send --system / org.freedesktop.DBus.Peer.Ping > /dev/null 2> /dev/null diff --git a/docker/classic/etc/s6-overlay/s6-rc.d/02-dbus/notification-fd b/docker/classic/etc/s6-overlay/s6-rc.d/02-dbus/notification-fd new file mode 100644 index 00000000..00750edc --- /dev/null +++ b/docker/classic/etc/s6-overlay/s6-rc.d/02-dbus/notification-fd @@ -0,0 +1 @@ +3 diff --git a/docker/classic/etc/s6-overlay/s6-rc.d/02-dbus/run b/docker/classic/etc/s6-overlay/s6-rc.d/02-dbus/run index 2278697a..15018b7e 100644 --- a/docker/classic/etc/s6-overlay/s6-rc.d/02-dbus/run +++ b/docker/classic/etc/s6-overlay/s6-rc.d/02-dbus/run @@ -1,4 +1,3 @@ #!/command/with-contenv sh -rm -rf /var/run/dbus/dbus.pid echo "Starting dbus" -exec dbus-daemon --system --nofork +exec s6-notifyoncheck dbus-daemon --system --nofork --nopidfile diff --git a/docker/classic/etc/s6-overlay/s6-rc.d/03-avahi/data/check b/docker/classic/etc/s6-overlay/s6-rc.d/03-avahi/data/check new file mode 100755 index 00000000..ccb833b6 --- /dev/null +++ b/docker/classic/etc/s6-overlay/s6-rc.d/03-avahi/data/check @@ -0,0 +1,10 @@ +#!/bin/sh +state="$(dbus-send --system --dest=org.freedesktop.Avahi --print-reply / org.freedesktop.Avahi.Server.GetState | grep int32 | awk '{printf $2}')" + +# Avahi will return 'state=2' when 'Server startup complete' +if [ "$state" = 2 ]; then + exit 0 +else + exit 1 +fi + diff --git a/docker/classic/etc/s6-overlay/s6-rc.d/03-avahi/notification-fd b/docker/classic/etc/s6-overlay/s6-rc.d/03-avahi/notification-fd new file mode 100644 index 00000000..00750edc --- /dev/null +++ b/docker/classic/etc/s6-overlay/s6-rc.d/03-avahi/notification-fd @@ -0,0 +1 @@ +3 diff --git a/docker/classic/etc/s6-overlay/s6-rc.d/03-avahi/run b/docker/classic/etc/s6-overlay/s6-rc.d/03-avahi/run index e3ea2ff9..edb5e74b 100644 --- a/docker/classic/etc/s6-overlay/s6-rc.d/03-avahi/run +++ b/docker/classic/etc/s6-overlay/s6-rc.d/03-avahi/run @@ -1,7 +1,3 @@ #!/command/with-contenv sh -while [ ! -f /var/run/dbus/dbus.pid ]; do - echo "s6-rc: warning: dbus is not running, sleeping for 1 second before trying to start avahi" - sleep 1 -done echo "Starting avahi" -exec avahi-daemon --no-chroot +exec s6-notifyoncheck avahi-daemon --no-chroot diff --git a/docker/etc/s6-overlay/s6-rc.d/02-dbus/data/check b/docker/etc/s6-overlay/s6-rc.d/02-dbus/data/check new file mode 100755 index 00000000..39eeac11 --- /dev/null +++ b/docker/etc/s6-overlay/s6-rc.d/02-dbus/data/check @@ -0,0 +1,2 @@ +#!/bin/sh +exec dbus-send --system / org.freedesktop.DBus.Peer.Ping > /dev/null 2> /dev/null diff --git a/docker/etc/s6-overlay/s6-rc.d/02-dbus/notification-fd b/docker/etc/s6-overlay/s6-rc.d/02-dbus/notification-fd new file mode 100644 index 00000000..00750edc --- /dev/null +++ b/docker/etc/s6-overlay/s6-rc.d/02-dbus/notification-fd @@ -0,0 +1 @@ +3 diff --git a/docker/etc/s6-overlay/s6-rc.d/02-dbus/run b/docker/etc/s6-overlay/s6-rc.d/02-dbus/run index 2278697a..15018b7e 100644 --- a/docker/etc/s6-overlay/s6-rc.d/02-dbus/run +++ b/docker/etc/s6-overlay/s6-rc.d/02-dbus/run @@ -1,4 +1,3 @@ #!/command/with-contenv sh -rm -rf /var/run/dbus/dbus.pid echo "Starting dbus" -exec dbus-daemon --system --nofork +exec s6-notifyoncheck dbus-daemon --system --nofork --nopidfile diff --git a/docker/etc/s6-overlay/s6-rc.d/03-avahi/data/check b/docker/etc/s6-overlay/s6-rc.d/03-avahi/data/check new file mode 100755 index 00000000..ccb833b6 --- /dev/null +++ b/docker/etc/s6-overlay/s6-rc.d/03-avahi/data/check @@ -0,0 +1,10 @@ +#!/bin/sh +state="$(dbus-send --system --dest=org.freedesktop.Avahi --print-reply / org.freedesktop.Avahi.Server.GetState | grep int32 | awk '{printf $2}')" + +# Avahi will return 'state=2' when 'Server startup complete' +if [ "$state" = 2 ]; then + exit 0 +else + exit 1 +fi + diff --git a/docker/etc/s6-overlay/s6-rc.d/03-avahi/notification-fd b/docker/etc/s6-overlay/s6-rc.d/03-avahi/notification-fd new file mode 100644 index 00000000..00750edc --- /dev/null +++ b/docker/etc/s6-overlay/s6-rc.d/03-avahi/notification-fd @@ -0,0 +1 @@ +3 diff --git a/docker/etc/s6-overlay/s6-rc.d/03-avahi/run b/docker/etc/s6-overlay/s6-rc.d/03-avahi/run index e3ea2ff9..edb5e74b 100644 --- a/docker/etc/s6-overlay/s6-rc.d/03-avahi/run +++ b/docker/etc/s6-overlay/s6-rc.d/03-avahi/run @@ -1,7 +1,3 @@ #!/command/with-contenv sh -while [ ! -f /var/run/dbus/dbus.pid ]; do - echo "s6-rc: warning: dbus is not running, sleeping for 1 second before trying to start avahi" - sleep 1 -done echo "Starting avahi" -exec avahi-daemon --no-chroot +exec s6-notifyoncheck avahi-daemon --no-chroot -- 2.47.2