commit 4795dd05b79c3bd18f2909faa8baf9cd559864d8
parent a192f088815563c59af37712d3cdf39073d3fcd6
Author: Daniel Barlow <dan@telent.net>
Date: Wed, 3 Apr 2024 23:07:56 +0100
unconditionally restart trigger services on liminix-rebuild
We call s6-rc -u -p default to restart/start the base services
on a rebuild, otherwise services that are only in the new
configuration won't come up. However, this stops any service
started by a trigger. So, workaround is to restart the trigger
service and expect it to restart the services it manages if they're
needed
Diffstat:
5 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/modules/ifwait/ifwait.nix b/modules/ifwait/ifwait.nix
@@ -9,6 +9,7 @@ let
in longrun {
name = "ifwait.${interface.name}";
buildInputs = [ service ];
+ isTrigger = true;
run = ''
${ifwait}/bin/ifwait -s ${service.name} $(output ${interface} ifname) ${state}
'';
diff --git a/pkgs/liminix-tools/services/builder.sh b/pkgs/liminix-tools/services/builder.sh
@@ -11,7 +11,7 @@ test -n "$contents" && for d in $contents; do
touch $out/${name}/contents.d/$d
done
-for i in timeout-up timeout-down run notification-fd up down consumer-for producer-for pipeline-name ; do
+for i in timeout-up timeout-down run notification-fd up down consumer-for producer-for pipeline-name restart-on-upgrade; do
test -n "$(printenv $i)" && (echo "$(printenv $i)" > $out/${name}/$i)
done
diff --git a/pkgs/liminix-tools/services/default.nix b/pkgs/liminix-tools/services/default.nix
@@ -36,12 +36,14 @@ let
, dependencies ? []
, contents ? []
, buildInputs ? []
+ , isTrigger ? false
} @ args:
stdenvNoCC.mkDerivation {
# we use stdenvNoCC to avoid generating derivations with names
# like foo.service-mips-linux-musl
inherit name serviceType up down run notification-fd
producer-for consumer-for pipeline-name timeout-up timeout-down;
+ restart-on-upgrade = isTrigger;
buildInputs = buildInputs ++ dependencies ++ contents;
dependencies = builtins.map (d: d.name) dependencies;
contents = builtins.map (d: d.name) contents;
diff --git a/pkgs/s6-rc-database/default.nix b/pkgs/s6-rc-database/default.nix
@@ -21,11 +21,16 @@ in stdenvNoCC.mkDerivation {
if test -d $i; then
for j in $i/* ; do
if test -f $j/type ; then
+ if test -e $j/restart-on-upgrade; then
+ flag=force-restart
+ else
+ unset flag
+ fi
case $(cat $j/type) in
longrun|oneshot)
- # s6-rc-update only wants oneshots in its
+ # s6-rc-update only wants atomics in its
# restarts file
- echo $(basename $j) " " $i >> $out/hashes
+ echo $(basename $j) " " ''${flag-$i} >> $out/hashes
;;
*)
;;
diff --git a/pkgs/systemconfig/restart-services.fnl b/pkgs/systemconfig/restart-services.fnl
@@ -12,8 +12,11 @@
new-hashes (hashes-from-file new)]
(with-open [f (io.open "/tmp/restarts" :w)]
(each [n h (pairs old-hashes)]
- (when (not (= h (. new-hashes n)))
- (f:write (.. n " restart\n")))))))
+ (let [new (. new-hashes n)]
+ (when (or (= h "force-restart")
+ (= new "force-restart")
+ (not (= h new)))
+ (f:write (.. n " restart\n"))))))))
(fn exec [text command]
(io.write (.. text ": "))