80 lines
1.9 KiB
Nix
80 lines
1.9 KiB
Nix
{
|
|
config,
|
|
pkgs,
|
|
...
|
|
}: let
|
|
serviceName = "cld-var-backup-sync";
|
|
sourceDir = "/var/backup/";
|
|
targetHost = "100.91.49.26";
|
|
targetPort = "2022";
|
|
targetUser = "backup-ingest";
|
|
targetDir = "/srv/veeam-ingest/AZ-CLD-1/var-backup/";
|
|
sshKey = config.age.secrets.cld-var-backup-sync-ssh-key.path;
|
|
in {
|
|
environment.systemPackages = with pkgs; [
|
|
rsync
|
|
openssh
|
|
];
|
|
|
|
systemd.tmpfiles.rules = [
|
|
"d /var/lib/${serviceName} 0700 root root - -"
|
|
];
|
|
|
|
systemd.services.${serviceName} = {
|
|
description = "Mirror /var/backup from AZ-CLD-1 to AZ-PRM-1 for VEEAM";
|
|
after = ["network-online.target" "netbird.service"];
|
|
wants = ["network-online.target" "netbird.service"];
|
|
|
|
path = with pkgs; [
|
|
coreutils
|
|
openssh
|
|
rsync
|
|
util-linux
|
|
];
|
|
|
|
serviceConfig = {
|
|
Type = "oneshot";
|
|
User = "root";
|
|
Group = "root";
|
|
RuntimeDirectory = serviceName;
|
|
RuntimeDirectoryMode = "0700";
|
|
LockPersonality = true;
|
|
NoNewPrivileges = true;
|
|
PrivateTmp = true;
|
|
};
|
|
|
|
script = ''
|
|
set -euo pipefail
|
|
|
|
lock_file="/run/${serviceName}/${serviceName}.lock"
|
|
|
|
flock -n "$lock_file" \
|
|
rsync \
|
|
-aH \
|
|
--no-owner \
|
|
--no-group \
|
|
--no-devices \
|
|
--no-specials \
|
|
--numeric-ids \
|
|
--delete \
|
|
--partial \
|
|
--delay-updates \
|
|
--human-readable \
|
|
--stats \
|
|
-e "ssh -i ${sshKey} -p ${targetPort} -o IdentitiesOnly=yes -o BatchMode=yes -o StrictHostKeyChecking=accept-new -o UserKnownHostsFile=/var/lib/${serviceName}/known_hosts" \
|
|
${sourceDir} \
|
|
${targetUser}@${targetHost}:${targetDir}
|
|
'';
|
|
};
|
|
|
|
systemd.timers.${serviceName} = {
|
|
wantedBy = ["timers.target"];
|
|
timerConfig = {
|
|
OnCalendar = "*-*-* 05:00:00";
|
|
Persistent = true;
|
|
RandomizedDelaySec = "10m";
|
|
Unit = "${serviceName}.service";
|
|
};
|
|
};
|
|
}
|