backup timer lkk-nix-1

This commit is contained in:
m3tam3re 2023-07-05 15:05:59 +02:00
parent d32f0ec691
commit 791c61aa94
3 changed files with 88 additions and 1 deletions

View File

@ -7,5 +7,5 @@
users.defaultUserShell = pkgs.fish;
environment.systemPackages =
[ inputs.agenix.packages.x86_64-linux.default pkgs.coreutils ];
[ inputs.agenix.packages.x86_64-linux.default pkgs.coreutils pkgs.fd ];
}

View File

@ -0,0 +1,86 @@
{ pkgs, ... }: {
systemd = {
timers.backup-timer = {
wantedBy = [ "timers.target" ];
partOf = [ "backup-timer.service" ];
timerConfig.OnCalendar = "*-*-* 4:00:00";
};
services.backup-timer = {
serviceConfig.Type = "oneshot";
script = ''
BKG_DIR=/var/backup
EXCLUDE_APPS=("s3/")
EXCLUDE_VOLUMES=("wireguard_data")
EXCLUDE_CLEANUP=("s3/")
DAYS=7 # how many days should daily backups be stored
DF=daily # folder name for daily backups
WF=weekly # folder name for weekly backups
MF=monthly # folder name for monthly backups
MBD=22 # day of month for monthly backup
WBD=3 # weekday for weekly backups
PV=podman-volumes # folder name for podman volumes
cd $BKG_DIR
PODMAN_VOLUMES=$(podman volume ls --format '{{.Name}}')
# Podman volume backup
if [ ! -d $PV ]; then
mkdir $PV
fi
for vol in $PODMAN_VOLUMES; do
if [[ " $\{EXCLUDE_VOLUMES[@]} " =~ " $\{vol} " ]]; then
continue
fi
cd $BKG_DIR/$PV
podman volume export $vol --output $vol.tar ; gzip $vol.tar
done
BACKUP_APPS=$(fd . -td -d 1 $BKG_DIR)
# App backup
for bkg in $BACKUP_APPS; do
if [[ " $\{EXCLUDE_APPS[@]} " =~ " $\{bkg} " ]]; then
continue
fi
cd $bkg
#monthly
if [ ! -d $MF ]; then
mkdir $MF
fi
DOM=$(date +%d)
if [ $DOM -eq $MBD ]; then
fd . -tf -d 1 -x cp {/} $MF/$(date +"%Y%m")-{/}
fi
#weekly
if [ ! -d $WF ]; then
mkdir $WF
fi
DOW=$(date +%u)
if [ $DOW -eq $WBD ]; then
fd . -tf -d 1 -x cp {/} $WF/$(date +"%U%Y")-{/}
fi
#dailies
if [ ! -d $DF ]; then
mkdir $DF
fi
fd . -tf -d 1 -x mv {/} $DF/$(date +"%Y%m%d")-{/}
done
# Delete old backups
for bkg in $BACKUP_APPS; do
if [[ " $\{EXCLUDE_CLEANUP[@]} " =~ " $\{bkg} " ]]; then
continue
fi
fd . $bkg"daily" --changed-before "$DAYS days" -x rm
fd . $bkg"weekly" --changed-before "4 weeks" -x rm
fd . $bkg"monthly" --changed-before "8 weeks" -x rm
done
'';
};
};
}

View File

@ -1,5 +1,6 @@
{
imports = [
./backup.nix
./container.nix
./gitea.nix
./invidious.nix