From b9e6da7645a14ef543c185ce43b0cac262e86fe0 Mon Sep 17 00:00:00 2001 From: Hartmut Bauer Date: Sat, 15 Mar 2025 01:07:57 +0100 Subject: [PATCH] some test code --- TODO.md | 80 +++++++++++++++++++++++++++++++++++++ backup.sh | 6 +++ test.sh | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 203 insertions(+) create mode 100644 TODO.md create mode 100755 backup.sh create mode 100755 test.sh diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..4cb0127 --- /dev/null +++ b/TODO.md @@ -0,0 +1,80 @@ +### tar + +``` +#!/bin/bash +date +cd /var/docker +for f in *; do + sudo tar -c -z -v --numeric-owner --one-file-system -f /var/docker/tmp/$(basename $f).tar.gz $f +done +date +``` + +### gpg + +``` +passphrase=$(head -n 1 /var/secret.key) +gpg --symmetric --batch --yes --passphrase $passphrase --output some.gpg toEncrypt.txt + +# oder + +gpg --batch -c --passphrase-file /var/secret.key -o some.gpg toencrypt.txt + +# oder + +gpg --batch --symmetric --passphrase 1234567890 test.txt # -> test.txt.gpg + +gpg --batch --decrypt --passphrase 1234567890 -o test.txt test.txt.gpg # ohne -o to stdout + +``` + +### TODO + +nextcloud: +- vol/nextcloud/data/data/hb zeigt auf NAS-share +-> alles auf NAS, bzw. alles auf Server? +-> oder symlink in NFS-Share? +-> falls auf NAS, per NFS? + +backup MAC +- ccc 2x 2TB intern (weekly) +- ccc 2x 2TB extern + - TODO: SSDs auf Verschlüsselung umstellen + - TODO: Kalendereintrag für wöchentlichen backup + +nas-backup daily +- tar, gpg to nas +- server: /var dir to file (evtl. /var/docker + /var/docker/vol extra - tar-Syntax?) +- nas: //data, //nfs, //nextcloud(?) dir to file +- auf nas unter //backup sammeln + - TODO: tar syntax (find | py) + - TODO: gpg syntax + - TODO: file handling + - TODO: script (python?) + +nas-backup weekly 1 +- media/books, media/music/_all + _hoerspiel -> tar, gpg nach //backup + - TODO: s. nas-backup daily + +backup server+nas +- rsync nas-backup 2x HDD intern (weekly) (5TB?) + - TODO: script (python?) mit HD-Erkennung + - TODO: zusätzliche HDD + - TODO: Kalendereintrag, s. backup MAC + +export backups +- rsync nas-backup 2x 2TB HDD extern + - TODO: script, s. backup server+nas + +export serien +- rsync dir 1x 5TB HDD extern + - TODO: vorhandenes script in neue Routine einbauen + +export video +- rsync dir 1x 5TB HDD extern + - TODO: s. export serien + +**script** + +tar: wo beginnen?, Schleife für dirs + diff --git a/backup.sh b/backup.sh new file mode 100755 index 0000000..ea05a36 --- /dev/null +++ b/backup.sh @@ -0,0 +1,6 @@ +#!/bin/bash +# +# entrypoint for all actions +# + +echo "not implemented yet" diff --git a/test.sh b/test.sh new file mode 100755 index 0000000..2f0e6cd --- /dev/null +++ b/test.sh @@ -0,0 +1,117 @@ +#!/usr/bin/env bash + +RUN_DIR=/var/docker +BACKUP_DIR=vol +SOURCE=nextcloud +TARGET_DIR=/var/docker/tmp +PASSPHRASE=1234567890 + +RESTORE=vol/nextcloud/data/data/nextcloud.log + +# Ist $1 in der Liste der restlichen args $2, $3 ... +# +# zB. if is_in "foo" "foo" "bar" "foo bar" ; then ... +# Leere Liste liefert immer false +# +function is_in { + local search="$1" + shift 1 + local e + for e in "$@"; do [[ "$e" == "$search" ]] && return 0; done + return 1 +} + +# alle Verzechnisnamen in einem Verzeichnis holen +# +# $1 - Verzeichnis in dem gesucht wird als absoluter Pfad +# $2 ff. - auszuschliessende Verzeichnisse (kann leer bleiben) +# +function iterate_dirs_in() { + local dirname + local root=$1 + shift 1 + for dir in $(find "$root" -maxdepth 1 -type d \! -wholename "$root"); do + dirname=$(basename $dir) + if ! is_in "$dirname" "$@"; then + echo "$dirname" + fi + done +} + +# Verzeichnise in .tgz.gpg-Dateien sichern +# +# $1 - Verzeichnis unterhalb dessen gesichert werden soll, das also nicht Teil des gespeicherten Pfads wird (z.B /var/docker) +# $2 - Verzeichnis, das gesichert wird: alle Verzeichnisse darunter werden einzeln als .tgz.gpg-Datei gesichert (z.B vol -> apache.tgz.gpg, etc.) +# $3 - Zielverzeichnis für .tgz.gpg-Dateien +# $4 ff. - Verzeichnisse, die nicht gesichert werden sollen (kann leer bleiben) +# +function backup_dir() { + local root=$1 + local source=$2 + local target=$3 + local dir + shift 3 + cd "$root" + for dir in $(iterate_dirs_in "$root/$source" "$@"); do + sudo tar -c -z --numeric-owner --one-file-system "$source/$dir" | sudo gpg --batch -c --passphrase $PASSPHRASE -o "$target/$dir.tgz.gpg" + done +} + +#for dir in $(find "$RUN_DIR/$BACKUP_DIR" -maxdepth 1 -type d \! -wholename "$RUN_DIR/$BACKUP_DIR"); do +# testfn "$dir -> $(basename $dir)" +#done + +echo "-----------------------" +date +echo "-----------------------" +backup_dir "$RUN_DIR" "$BACKUP_DIR" "$TARGET_DIR" +echo "-----------------------" +date +echo "-----------------------" + +exit + +date +%H:%M:%S.%N +echo "--- tar -c ------------------------------------------------" + +cd $RUN_DIR + +sudo tar -c -z --numeric-owner --one-file-system -f "$TARGET_DIR/$SOURCE.tar.gz" "$BACKUP_DIR/$SOURCE" +date +%H:%M:%S.%N + +echo "--- tar -t ------------------------------------------------" + +cd $TARGET_DIR + +sudo tar -t -f "$TARGET_DIR/$SOURCE.tar.gz" | sudo tee tar_list.txt >/dev/null +date +%H:%M:%S.%N + +echo "--- tar -x ------------------------------------------------" + +sudo tar -xv -f "$TARGET_DIR/$SOURCE.tar.gz" $RESTORE >/dev/null +date +%H:%M:%S.%N + +TARGET_DIR=/var/docker/tmp/two +echo "#" +echo "### gpg ###################################################" +echo "#" + +date +%H:%M:%S.%N +echo "--- tar -c ------------------------------------------------" + +cd $RUN_DIR + +sudo tar -c -z --numeric-owner --one-file-system "$BACKUP_DIR/$SOURCE" | sudo gpg --batch -c --passphrase $PASSPHRASE -o "$TARGET_DIR/$SOURCE.tgz.gpg" +date +%H:%M:%S.%N + +echo "--- tar -t ------------------------------------------------" + +cd $TARGET_DIR + +sudo gpg --batch --decrypt --passphrase $PASSPHRASE "$TARGET_DIR/$SOURCE.tgz.gpg" 2>/dev/null | sudo tar -tz | sudo tee tar_list.txt >/dev/null +date +%H:%M:%S.%N + +echo "--- tar -x ------------------------------------------------" + +sudo gpg --batch --decrypt --passphrase $PASSPHRASE "$TARGET_DIR/$SOURCE.tgz.gpg" 2>/dev/null | sudo tar -xzv $RESTORE >/dev/null +date +%H:%M:%S.%N