lib/autoupdate: init, enable on mucbot

This commit is contained in:
Astro 2022-01-10 03:34:34 +01:00
parent d678c69d23
commit 838ea568bc
3 changed files with 55 additions and 0 deletions

View File

@ -1,6 +1,7 @@
{ zentralwerk, config, pkgs, lib, tigger, ... }:
{
c3d2.autoUpdate = true;
networking.hostName = "mucbot";
networking.interfaces.eth0.ipv4.addresses = [{
address = "172.20.73.27";

53
lib/autoupdate.nix Normal file
View File

@ -0,0 +1,53 @@
{ config, lib, pkgs, ... }:
{
options.c3d2.autoUpdate = with lib; mkOption {
description = ''
Enables a timer that periodically checks hydra.hq.c3d2.de for the last build of the local system, and switches to it if it is different.
Also enables periodical /nix/store GC.
'';
type = types.bool;
default = false;
};
config = lib.mkIf config.c3d2.autoUpdate {
systemd.services.autoupdate = {
wantedBy = [ "multi-user.target" ];
path = with pkgs; [ nixFlakes nettools curl jq ];
serviceConfig.Type = "oneshot";
script = ''
OLD=$(readlink /run/current-system)
NEW=$(curl -sLH "Accept: application/json" https://hydra.hq.c3d2.de/job/c3d2/nix-config/x86_64-linux.$(hostname)/latest | jq -r .buildoutputs.out.path)
if [ -z "$NEW" ]; then
echo "Unable to obtain updated system"
exit 1
fi
if [ "$OLD" != "$NEW" ]; then
echo "New system available: $NEW"
# this should fetch the new system from the binary cache
nix build --no-link "$NEW"
# switch to the new system
"$NEW/bin/switch-to-configuration" switch
else
echo "No update required"
fi
'';
# don't let the switch kill this service, aborting the switch
restartIfChanged = false;
unitConfig.X-StopOnRemoval = false;
};
systemd.timers.autoupdate = {
partOf = [ "autoupdate.service" ];
wantedBy = [ "timers.target" ];
timerConfig.OnCalendar = "hourly";
};
nix.gc = {
automatic = true;
randomizedDelaySec = "6h";
};
};
}

View File

@ -34,6 +34,7 @@ in {
./pi-sensors.nix
./ceph-storage.nix
./cache.nix
./autoupdate.nix
];
options.c3d2 = with lib;