forked from DGNum/liminix
PoC support for hardware watchdog
This commit is contained in:
parent
e84285e576
commit
beb6e260d4
2 changed files with 42 additions and 0 deletions
|
@ -186,6 +186,10 @@
|
||||||
MTD = "y";
|
MTD = "y";
|
||||||
MTD_CMDLINE_PARTS = "y";
|
MTD_CMDLINE_PARTS = "y";
|
||||||
MTD_BLOCK = "y"; # fix undefined ref to register_mtd_blktrans_devs
|
MTD_BLOCK = "y"; # fix undefined ref to register_mtd_blktrans_devs
|
||||||
|
|
||||||
|
WATCHDOG = "y";
|
||||||
|
ATH79_WDT = "y"; # watchdog timer
|
||||||
|
|
||||||
CPU_BIG_ENDIAN= "y";
|
CPU_BIG_ENDIAN= "y";
|
||||||
|
|
||||||
# this is all copied from nixwrt ath79 config. Clearly not all
|
# this is all copied from nixwrt ath79 config. Clearly not all
|
||||||
|
|
|
@ -78,6 +78,43 @@ in rec {
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
services.watchdog =
|
||||||
|
let
|
||||||
|
watched = with config.services ; [ sshd dhcpc ];
|
||||||
|
spinupGrace = 60;
|
||||||
|
script = pkgs.writeAshScript "gaspode" {
|
||||||
|
runtimeInputs = [ pkgs.s6 ];
|
||||||
|
} ''
|
||||||
|
deadline=$(expr $(date +%s) + ${toString spinupGrace})
|
||||||
|
services=$@
|
||||||
|
echo started feeding the dog
|
||||||
|
exec 3> ''${WATCHDOG-/dev/watchdog}
|
||||||
|
|
||||||
|
healthy(){
|
||||||
|
test $(date +%s) -le $deadline && return 0
|
||||||
|
|
||||||
|
for i in $services; do
|
||||||
|
if test "$(s6-svstat -o up /run/service/$i)" != "true" ; then
|
||||||
|
echo "service $i is down"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
while healthy ;do
|
||||||
|
sleep 10
|
||||||
|
echo >&3
|
||||||
|
done
|
||||||
|
echo "stopped feeding the dog"
|
||||||
|
sleep 6000 # don't want s6-rc to restart
|
||||||
|
'';
|
||||||
|
in longrun {
|
||||||
|
name = "watchdog";
|
||||||
|
run =
|
||||||
|
"${script} ${lib.concatStringsSep " " (builtins.map (s: s.name) watched)}";
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
services.resolvconf = oneshot rec {
|
services.resolvconf = oneshot rec {
|
||||||
dependencies = [ services.dhcpc ];
|
dependencies = [ services.dhcpc ];
|
||||||
name = "resolvconf";
|
name = "resolvconf";
|
||||||
|
@ -174,6 +211,7 @@ in rec {
|
||||||
resolvconf
|
resolvconf
|
||||||
sshd
|
sshd
|
||||||
rsync
|
rsync
|
||||||
|
watchdog
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
users.root.passwd = lib.mkForce secrets.root_password;
|
users.root.passwd = lib.mkForce secrets.root_password;
|
||||||
|
|
Loading…
Reference in a new issue