diff --git a/modules/ifwait/ifwait.nix b/modules/ifwait/ifwait.nix index 4c28b52..ee5d957 100644 --- 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 index 744a86e..5edfa5d 100644 --- 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 index 881fea0..34c9b7e 100644 --- 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 index 1fabe41..49ef99c 100644 --- 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 index 04c3300..69a5452 100644 --- 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 ": "))