Benutzer-Werkzeuge

Webseiten-Werkzeuge


infrastruktur:host:billy

Dies ist eine alte Version des Dokuments!


Billy

Work-in-Progress / To-Be-Discussed

billy ist ein Server für alle für BorgBackup: https://www.borgbackup.org/

Ein Backup mit Borg wird schon auf der Client-Seite verschlüsselt, auf billy landen so nur verschlüsselte Daten. Backups sind kompakt dank Komprimierung und Deduplizierung. Bei wenigen Änderung der Daten sind Updates dank inkrementeller Backups schnell. Backups lassen sich über Fuse (borgfs) leicht mounten und wieder auslesen / verifizieren.

Billy ist entweder intern im Space oder über willi als jump-host per SSH LDAP Login von außen erreichbar.

Hostname billy.nobreakspace.org
Verantwortung T_X
IPv6 2a01:170:1112::4d (intern)
IPv4 172.23.208.77 (intern)
Ort Container auf case

Access auf den Host ist stark limitiert: Nur borg Befehle und `ssh-add-authorized-keys` sind erlaubt (näheres siehe unten). Keine Shell, kein forwarding, kein X11 etc.

Für jeden User gibt es standardmäßig ein Speicherlimit von 250G (to be discussed). Bei aktuellen, günstigsten HDD Preisen (2024-08) wären dies 5€ bei voller Nutzung.

ES GIBT KEINE GARANTIE! DIE BACKUPS KÖNNEN VON HEUTE AUF MORGEN KAPUTT GEHEN! MISSBRAUCHE BORG NICHT ALS CLOUD STORAGE, DEINE EINZIGE KOPIE! NUTZE ES WIRKLICH NUR ALS BACKUP!

Einrichtungsdetails von Billy

Einrichtung Client für Backups

Initialisierung: SSH

Anmerkung: Ersetze „tux“ in folgendem mit deinem Nutzernamen im LDAP.

Erzeuge einen SSH Schlüssel, mit dem dein borg client im Hintergrund später die Backups machen darf:

$ ssh-keygen -f ~/.ssh/id_ed25519_billyborg

Füge willi und billy ähnlich wie folgt in deine ~/.ssh/config hinzu:

~/.ssh/config:

Host willi
        User tux 
        Hostname willi.nobreakspace.org
	IdentityFile ~/.ssh/id_ed25519_billyborg

Host billyborg
        Hostname billy.nobreakspace.org
        User tux 
	IdentityFile ~/.ssh/id_ed25519_billyborg
        ProxyCommand ssh -4 willi -o ControlMaster=no -W "[%h]":%p

Nun installiere den public key deines neuen SSH keys auf willi und billi:

$ ssh-copy-id -i ~/.ssh/id_ed25519_billyborg tux@willi.nobreakspace.org
$ cat ~/.ssh/id_ed25519_billyborg.pub | ssh billyborg ssh-add-authorized-keys

Initialisierung: Borg Repository

Initilisiere dein Borg auf billy:

$ borg init --encryption=keyfile ssh://billyborg/~/home

Exportiere und drucke wie vom obigen „borg init“ Befehl empfohlen deinen Borg Schlüssel aus und bewahre ihn und das Passwort sicher und getrennt voneinander auf.

WICHTIG: OHNE DIESE KOMMST DU SPÄTER NICHT MEHR AUF DEINE BACKUPS!

Borg Backup Script

#!/bin/sh

export BORG_REPO=ssh://billyborg/~/home
export BORG_PASSPHRASE="<dein-super-passwort>"

# some helpers and error handling:
info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; }
trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM

info "Starting backup"

#	--dry-run			\
borg create				\
	--verbose                       \
	--filter AME                    \
	--list                          \
	--stats                         \
	--show-rc                       \
	--compression lz4               \
	--exclude-caches                \
	--exclude "${HOME}/borg/logs/"		\
	--exclude "${HOME}/.cache/"		\
	--exclude "${HOME}/.ccache/"		\
	--exclude "${HOME}/.local/share/Trash/"	\
	--exclude "${HOME}/.electron-gyp/"	\
	--exclude "${HOME}/.config/Electron/Cache/"	\
	--exclude "${HOME}/.tmp/"		\
	--exclude "${HOME}/.mnt/"		\
	--exclude "${HOME}/.pub-cache/"		\
	--exclude "${HOME}/.steam/"		\
	--exclude "${HOME}/Games/"		\
	--exclude "${HOME}/.android/cache/"	\
	--exclude "${HOME}/backup/"		\
	--exclude "${HOME}/Musik/dnb-vids/*.mkv"	\
	--exclude "${HOME}/Downloads/"		\
	--exclude "${HOME}/Desktop/"		\
	--exclude "${HOME}/Videos/"		\
	--exclude "${HOME}/dev/linux/*.deb"	\
	--exclude "${HOME}/dev/linux/linux/*.deb"	\
	--exclude "${HOME}/dev/linux/*.gz"	\
	--exclude "${HOME}/dev/linux/linux/*.gz"	\
	--exclude "${HOME}/dev/**/build_dir/"	\
	--exclude "${HOME}/dev/gluon*/output*/"	\
	--exclude "${HOME}/dev/gluon-*dl/"		\
	--exclude "${HOME}/dev/gluon-*dl-old/"	\
	--exclude "${HOME}/dev/gluon-*dl-old*/"	\
	--exclude "${HOME}/dev/openwrt-*dl/"	\
	--exclude "${HOME}/dev/**/__pycache__/**/"	\
	--exclude "${HOME}/dev/**/build_dir/"	\
	--exclude "${HOME}/dev/**/staging_dir/"	\
	--exclude "${HOME}/dev/**/bin/"		\
	--exclude "${HOME}/dev/**/tmp/"		\
	--exclude "${HOME}/dev/**/*.o"		\
	--exclude "${HOME}/dev/**/*.ko"		\
	--exclude "${HOME}/dev/**/*.mod.c"		\
							\
	::'{hostname}-{now}'		\
	${HOME}/

backup_exit=$?

info "Pruning repository"

# Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly
# archives of THIS machine. The '{hostname}-' prefix is very important to
# limit prune's operation to this machine's archives and not apply to
# other machines' archives also:

borg prune                          \
    --list                          \
    --prefix '{hostname}-'          \
    --show-rc                       \
    --keep-daily    7               \
    --keep-weekly   4               \
    --keep-monthly  6               \
    --keep-yearly   10

prune_exit=$?

# use highest exit code as global exit code
global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))

if [ ${global_exit} -eq 1 ];
then
    info "Backup and/or Prune finished with a warning"
fi

if [ ${global_exit} -gt 1 ];
then
    info "Backup and/or Prune finished with an error"
fi

exit ${global_exit}

Automatische Backups per systemd timer

$ mkdir -p ~/borg/logs

~/.config/systemd/user/borg-backup-billy.service

[Unit]
Description=Borg Backup
Conflicts=shutdown.target
#StartLimitIntervalSec=20h
#StartLimitBurst=5

[Service]
Type=oneshot
ExecStart=%h/.local/bin/borg-backup-billy.sh
Restart=on-failure
RestartSec=30min
StandardOutput=append:%h/borg/logs/borg.log
StandardError=append:%h/borg/logs/borg.err
Nice=15
IOSchedulingClass=best-effort
IOSchedulingPriority=7

~/.config/systemd/user/borg-backup-billy.timer

[Unit]
Description=Run Borg Backup daily and on boot

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

[Install]
WantedBy=timers.target

Überprüfe, inbesondere auch nach einem Neustart:

$ systemctl list-timers

Überprüfe auch, ob in ~/borg/logs/borg.err Fehler auftreten. Falls dies der Fall sein sollte, wird borg / systemd dies alle 30 Minuten erneunt versuchen, statt bloß einmal pro Tag. Auslöser hierfür kann auch / oft einfach eine kleine (übersprungene) Datei mit fehlenden Leserechten sein.

(Vor)Letzter Check: Backups überprüfen

$ mkdir /tmp/borgmount
$ borgfs ssh://billyborg/~/home /tmp/borgmount

Prüfe nun, ob du in /tmp/borgmount/… deine Dateien wieder findest und auslesen kannst. Manchmal kann das Öffnen einer Datei oder Ordners beim ersten Versuch etwas dauern, bis Daten von billy wieder zurück übertragen und gecached wurden.

Zu letzt wieder schließen mit:

$ umount /tmp/borgmount

Allerletzter Check: Backups mit ausgedruckten Schlüssel wiederherstellen

ToDo

infrastruktur/host/billy.1724638595.txt.gz · Zuletzt geändert: 26.08.2024 02:16 von Linus Lüssing