Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
03df70a244 | ||
|
|
bf8c226bbe | ||
|
|
5696e01322 | ||
|
|
f96447d0e7 | ||
|
|
8eccb0ed59 | ||
|
|
6efd48d3c6 | ||
|
|
16c8f1afce | ||
|
|
21be8f3864 |
No files matched your search
@@ -3,4 +3,4 @@
|
|||||||
HERE=$(dirname "$0")
|
HERE=$(dirname "$0")
|
||||||
|
|
||||||
# local start
|
# local start
|
||||||
sudo sh -c "nohup $HERE/main.sh -d </dev/null &"
|
sudo sh -c "nohup $HERE/main.sh --dx </dev/null &"
|
||||||
+2
-2
@@ -27,7 +27,7 @@ after_backup() {
|
|||||||
let rc=rc+$?
|
let rc=rc+$?
|
||||||
copy_to_nas "$BACKUP_TARGET" "$NAS_TARGET"
|
copy_to_nas "$BACKUP_TARGET" "$NAS_TARGET"
|
||||||
let rc=rc+$?
|
let rc=rc+$?
|
||||||
check_services
|
#check_services
|
||||||
let rc=rc+$?
|
#let rc=rc+$?
|
||||||
return $rc
|
return $rc
|
||||||
}
|
}
|
||||||
@@ -13,7 +13,10 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
PODMAN=/usr/bin/podman
|
PODMAN=/usr/bin/podman
|
||||||
SUDO="sudo -u container sh -c"
|
#
|
||||||
|
# -i ist entscheident, damit die restliche Kommandozeile sauber ausgewertet wird
|
||||||
|
# das ersetzt den expliziten Aufruf mit "sh -c "..." "
|
||||||
|
SUDO="sudo -u container -i"
|
||||||
MAILCONTAINER=smtp-relay
|
MAILCONTAINER=smtp-relay
|
||||||
MAILSERVER_IP=10.4.2.30
|
MAILSERVER_IP=10.4.2.30
|
||||||
REMOTE=""
|
REMOTE=""
|
||||||
@@ -48,7 +51,7 @@ CONTENT=$(cat ${1:--})
|
|||||||
|
|
||||||
MAILCMD="$SUDO $PODMAN exec -i $MAILCONTAINER /usr/sbin/sendmail -i -t"
|
MAILCMD="$SUDO $PODMAN exec -i $MAILCONTAINER /usr/sbin/sendmail -i -t"
|
||||||
if [ ! -z "$REMOTE" ]; then
|
if [ ! -z "$REMOTE" ]; then
|
||||||
MAILCMD="ssh $MAILSERVER_IP \"$MAILCMD\""
|
MAILCMD="ssh $MAILSERVER_IP $MAILCMD"
|
||||||
fi
|
fi
|
||||||
# construct mail header + content and pipe to sendmail
|
# construct mail header + content and pipe to sendmail
|
||||||
cat <<EOMB | $MAILCMD
|
cat <<EOMB | $MAILCMD
|
||||||
|
|||||||
+44
-6
@@ -26,7 +26,9 @@ LIST_EXT=list
|
|||||||
SYNO_USB=/usr/syno/bin/synousbdisk
|
SYNO_USB=/usr/syno/bin/synousbdisk
|
||||||
SYSTEMCTL_USER="/usr/bin/systemctl --user --machine=container@"
|
SYSTEMCTL_USER="/usr/bin/systemctl --user --machine=container@"
|
||||||
SYSTEMCTL="/usr/bin/systemctl"
|
SYSTEMCTL="/usr/bin/systemctl"
|
||||||
CONTAINER_EXEC_USER=" sudo -u container podman exec"
|
PODMAN=" sudo -u container -i podman"
|
||||||
|
CONTAINER_EXEC_USER=" $PODMAN exec"
|
||||||
|
CONTAINER_SVC_UPDATE_USER=" $PODMAN auto-update"
|
||||||
CONTAINER_EXEC="podman exec"
|
CONTAINER_EXEC="podman exec"
|
||||||
|
|
||||||
LOG_RECIPIENT=hb242@pm.me
|
LOG_RECIPIENT=hb242@pm.me
|
||||||
@@ -195,8 +197,40 @@ do_start_stop_containers() {
|
|||||||
return $rc
|
return $rc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# podman auto-update nach dem Backup starten
|
||||||
|
#
|
||||||
|
# Die fn schreibt sehr viel ins Log, damit der Update ggf. nachvollzogen werden kann,
|
||||||
|
# wenn etwas daneben geht.
|
||||||
|
#
|
||||||
|
update_services() {
|
||||||
|
log $DEBUG "$DBG update_services()"
|
||||||
|
mail_log $INFO "$INF update services"
|
||||||
|
local old_img=$($PODMAN ps --format "table {{.ImageID}} {{.Names}} {{.Image}}" --sort names)
|
||||||
|
echo "$old_img" >>$LOG_FILE 2>&1
|
||||||
|
local plan=$($CONTAINER_SVC_UPDATE_USER --dry-run --format "{{.Image}} {{.Updated}}" 2>&1 | grep pending | sed 's/^\(.*\) pending/\1/')
|
||||||
|
local upd=$($CONTAINER_SVC_UPDATE_USER --format "table {{.Image}} {{.Updated}}" 2>&1 | tee -a $LOG_FILE | grep true | sed 's/^\(.*\) true/\1/')
|
||||||
|
check_pipe_rc ${PIPESTATUS[@]}
|
||||||
|
local rc=$?
|
||||||
|
# warten bis alle wieder da sind (wg. ps)
|
||||||
|
sleep 20
|
||||||
|
local new_img=$($PODMAN ps --format "table {{.ImageID}} {{.Names}} {{.Image}}" --sort names)
|
||||||
|
echo "$new_img" >>$LOG_FILE 2>&1
|
||||||
|
for i in $plan; do
|
||||||
|
mail_log $INFO "$INF pending: $i"
|
||||||
|
done
|
||||||
|
for i in $upd; do
|
||||||
|
mail_log $INFO "$INF updated: $i"
|
||||||
|
done
|
||||||
|
# diff output bring zu wenig
|
||||||
|
#log $DEBUG "$DBG diff before after"
|
||||||
|
#local diff_img=$(diff <(echo "$old_img") <(echo "$new_img"))
|
||||||
|
#echo "$diff_img" >> $LOG_FILE
|
||||||
|
return $rc
|
||||||
|
}
|
||||||
|
|
||||||
check_services() {
|
check_services() {
|
||||||
log $DEBUG "$DBG check_services()"
|
log $DEBUG "$DBG check_services()"
|
||||||
|
mail_log $INFO "$INF check services"
|
||||||
$HERE/check.sh >>$LOG_FILE 2>&1
|
$HERE/check.sh >>$LOG_FILE 2>&1
|
||||||
return $?
|
return $?
|
||||||
}
|
}
|
||||||
@@ -420,8 +454,8 @@ backup_dir() {
|
|||||||
local root=$1
|
local root=$1
|
||||||
local archive=$2
|
local archive=$2
|
||||||
local dir=$3
|
local dir=$3
|
||||||
log $DEBUG "$DBG > tar -c -z --numeric-owner --one-file-system --exclude \"@eaDir\" -C \"$root\" \"$dir\" | gpg --batch -c --passphrase xxxx -o \"$archive\""
|
log $DEBUG "$DBG > tar -c -z --numeric-owner --one-file-system --sort=name --exclude \"@eaDir\" -C \"$root\" \"$dir\" | gpg --batch -c --passphrase xxxx -o \"$archive\""
|
||||||
tar -c -z --numeric-owner --one-file-system --exclude "@eaDir" -C "$root" "$dir" 2>>$LOG_FILE | gpg --batch -c --passphrase $PASSPHRASE -o "$archive" 2>>$LOG_FILE
|
tar -c -z --numeric-owner --one-file-system --sort=name --exclude "@eaDir" -C "$root" "$dir" 2>>$LOG_FILE | gpg --batch -c --passphrase $PASSPHRASE -o "$archive" 2>>$LOG_FILE
|
||||||
check_pipe_rc ${PIPESTATUS[@]}
|
check_pipe_rc ${PIPESTATUS[@]}
|
||||||
return $?
|
return $?
|
||||||
}
|
}
|
||||||
@@ -480,11 +514,11 @@ set_log_info() {
|
|||||||
mail_log $INFO ">>> "
|
mail_log $INFO ">>> "
|
||||||
}
|
}
|
||||||
|
|
||||||
backup_daily() {
|
cron_backup_daily() {
|
||||||
# "master"-Server startet Backup auf NAS
|
# "master"-Server startet Backup auf NAS
|
||||||
if [ -d $BACKUP_MASTER_CHECK ]; then
|
if [ -d $BACKUP_MASTER_CHECK ]; then
|
||||||
log $DEBUG "$DBG starting daily backup on $NAS_HOSTNAME"
|
log $DEBUG "$DBG starting daily backup on $NAS_HOSTNAME"
|
||||||
run_script_remote $NAS_IP "$NAS_SCRIPT -d"
|
run_script_remote $NAS_IP "$NAS_SCRIPT --dx"
|
||||||
|
|
||||||
# alte Logs löschen (nur auf einem Server ausführen)
|
# alte Logs löschen (nur auf einem Server ausführen)
|
||||||
prune_logs
|
prune_logs
|
||||||
@@ -497,6 +531,10 @@ backup_daily() {
|
|||||||
nohup $THIS_SCRIPT -w >>$LOG_FILE 2>&1 </dev/null &
|
nohup $THIS_SCRIPT -w >>$LOG_FILE 2>&1 </dev/null &
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
backup_daily
|
||||||
|
}
|
||||||
|
|
||||||
|
backup_daily() {
|
||||||
mail_log $INFO ">>>>>>>>>> daily auto backup $VER for $HOST_NAME <<<<<<<<<<"
|
mail_log $INFO ">>>>>>>>>> daily auto backup $VER for $HOST_NAME <<<<<<<<<<"
|
||||||
|
|
||||||
do_auto_backup backup_daily
|
do_auto_backup backup_daily
|
||||||
@@ -627,7 +665,7 @@ list_archives() {
|
|||||||
local target=$1
|
local target=$1
|
||||||
local targ=${NAS_ROOT//\//\\\/} # slashes escapen
|
local targ=${NAS_ROOT//\//\\\/} # slashes escapen
|
||||||
log $DEBUG "$DBG > find \"$NAS_ROOT\" -type f -name \"*.$EXT\" | sed -E \"s/^$targ//\""
|
log $DEBUG "$DBG > find \"$NAS_ROOT\" -type f -name \"*.$EXT\" | sed -E \"s/^$targ//\""
|
||||||
find "$NAS_ROOT" -type f -name "*.$EXT" 2>>$LOG_FILE | sed -E "s/^$targ//" 2>>$LOG_FILE
|
find "$NAS_ROOT" -type f -name "*.$EXT" 2>>$LOG_FILE | sed -E "s/^$targ//" 2>>$LOG_FILE | sort
|
||||||
check_pipe_rc ${PIPESTATUS[@]}
|
check_pipe_rc ${PIPESTATUS[@]}
|
||||||
return $?
|
return $?
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
# entrypoint for all actions
|
# entrypoint for all actions
|
||||||
#
|
#
|
||||||
|
|
||||||
|
# 2.2.0 16.05.2025 - fixes for auto-update, podman migration done
|
||||||
|
# 2.1.17 11.05.2025 - bugfixes, sort tar archive, split daily/cron daily
|
||||||
|
# 2.1.16 10.05.2025 - fix mail.sh, log results of auto-update
|
||||||
|
# 2.1.15 09.05.2025 - podman auto-update
|
||||||
# 2.1.14 09.05.2025 - Fix mail.sh, homeserver.target, cleared all docker references
|
# 2.1.14 09.05.2025 - Fix mail.sh, homeserver.target, cleared all docker references
|
||||||
# 2.1.13 08.05.2025 - check if services are running after backup
|
# 2.1.13 08.05.2025 - check if services are running after backup
|
||||||
# 2.1.12 08.05.2025 - mail.sh an neuen Container angepasst
|
# 2.1.12 08.05.2025 - mail.sh an neuen Container angepasst
|
||||||
@@ -13,7 +17,7 @@
|
|||||||
# 2.1.7 29.04.2025 - 1. Schritt zur Umstellung auf podman
|
# 2.1.7 29.04.2025 - 1. Schritt zur Umstellung auf podman
|
||||||
# 2.1.6 29.04.2025 - weekly backup Sa->SO
|
# 2.1.6 29.04.2025 - weekly backup Sa->SO
|
||||||
|
|
||||||
VER="2.1.13"
|
VER="2.2.0"
|
||||||
|
|
||||||
HERE=$(dirname "$0")
|
HERE=$(dirname "$0")
|
||||||
THIS_SCRIPT=$0
|
THIS_SCRIPT=$0
|
||||||
@@ -67,6 +71,12 @@ while :; do
|
|||||||
show_help # Display a usage synopsis.
|
show_help # Display a usage synopsis.
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
|
--dx)
|
||||||
|
MAIL_LOG_FILE="${log_file_name}.auto.log"
|
||||||
|
check_root
|
||||||
|
cron_backup_daily
|
||||||
|
break
|
||||||
|
;;
|
||||||
-d|--daily)
|
-d|--daily)
|
||||||
MAIL_LOG_FILE="${log_file_name}.auto.log"
|
MAIL_LOG_FILE="${log_file_name}.auto.log"
|
||||||
check_root
|
check_root
|
||||||
|
|||||||
@@ -45,6 +45,8 @@ after_backup() {
|
|||||||
let rc=rc+$?
|
let rc=rc+$?
|
||||||
copy_to_nas "$BACKUP_TARGET" "$NAS_TARGET"
|
copy_to_nas "$BACKUP_TARGET" "$NAS_TARGET"
|
||||||
let rc=rc+$?
|
let rc=rc+$?
|
||||||
|
update_services
|
||||||
|
let rc=rc+$?
|
||||||
check_services
|
check_services
|
||||||
let rc=rc+$?
|
let rc=rc+$?
|
||||||
return $rc
|
return $rc
|
||||||
|
|||||||
Reference in new issue
Block a user