9 inherit (config.users) users;
10 backupTarget = "off4";
15 "${hostName}/root-to-${targetHost}" = lib.recursiveUpdate {
16 source = "${hostName}/root";
17 target = "backup@${targetHost}:${backupTarget}/julm/backup/${hostName}";
23 "--no-privilege-elevation"
24 "--preserve-properties"
25 "--preserve-recordsize"
30 "${hostName}/root/nix"
32 "${hostName}/root/var/cache"
34 "${hostName}/root/var/log"
36 "${hostName}/root/home/julm/.cache"
38 "${hostName}/root/home/julm/Downloads"
40 "${pkgs.writeText "ssh-config" ''
42 Ciphers aes128-gcm@openssh.com
44 StrictHostKeyChecking yes
50 "aubergine.local" = { };
51 "blackberry.local" = { };
52 "nan2gua1.local" = { };
57 ../../nixos/profiles/avahi.nix
59 users.users.backup = {
61 shell = users.root.shell;
62 group = config.users.groups.disk.name;
63 openssh.authorizedKeys.keys = [
64 (lib.readFile ../pumpkin/syncoid/ssh.key.pub)
65 (lib.readFile ../nan2gua1/syncoid/ssh.key.pub)
68 systemd.services."zfs-import@".serviceConfig.ExecStartPost =
69 pkgs.writeShellScript "zfs-allow" ''
73 (off2) zfs allow -u ${users.backup.name} change-key,compression,create,destroy,mount,mountpoint,receive,rollback,userprop "$pool"/julm/backup;;
74 (off4) zfs allow -u ${users.backup.name} change-key,compression,create,destroy,mount,mountpoint,receive,rollback,userprop "$pool"/julm/backup;;
78 networking.nftables.ruleset = lib.mkAfter ''
81 tcp dport 22 counter accept comment "syncoid: SSH"
84 skuid @nixos_syncoid_uids \
87 comment "syncoid: SSH"
91 systemd.tmpfiles.rules = [
92 "z /dev/zfs 0660 - ${config.users.groups."disk".name} -"
94 systemd.services."syncoid-${hostName}-root".serviceConfig = {
95 # Explanation: give access to /var/run/avahi-daemon/socket
96 # Using /var/run is not working due to RootDirectoryStartOnly=true
97 BindReadOnlyPaths = [ "/var/run" ];
98 RootDirectoryStartOnly = lib.mkForce false;
100 ExecStartPost = pkgs.writeShellScript "zfs-fix-bookmarks" ''
102 for s in $(zfs list -Hrpt snapshot -o name ${hostName}/root); do
103 zfs bookmark "$s" "''${s//@/#}" || true
109 interval = "*-*-* *:05:00";
111 sshKey = "ssh.key:${syncoid/ssh.key.cred}";
116 #"--no-privilege-elevation"
118 #"--preserve-recordsize"
119 #"--preserve-properties"
122 serviceConfig.Group = config.users.groups."disk".name;
124 commands = { } // backupConf { };
126 programs.bash.interactiveShellInit = ''
131 if ! zpool list ${backupTarget}
132 then dst=aubergine.sp:
134 sudo syncoid --sshkey ~julm/.ssh/id_ed25519 \
135 --create-bookmark --no-sync-snap --no-privilege-elevation \
136 --preserve-properties --preserve-recordsize \
137 --recursive --sendoptions=w --recvoptions=u \
138 --exclude-datasets ${hostName}/root/nix \
139 --exclude-datasets ${hostName}/root/var/cache \
140 --exclude-datasets ${hostName}/root/var/log \
141 --exclude-datasets ${hostName}/root/home/julm/.cache \
142 --exclude-datasets ${hostName}/root/home/julm/Downloads \
144 ''${dst}${backupTarget}/julm/backup/${hostName}
145 zfs-fix-bookmarks ${hostName}/root 2>/dev/null