3 Commits
Author SHA1 Message Date
Hartmut Bauer 27e0889bd1 mail.sh an neuen Container angepasst 2025-05-08 16:59:25 +02:00
Hartmut Bauer 912d4b9434 Fix DB-Dump 2025-05-05 13:07:14 +02:00
Hartmut Bauer a8a00a9f46 Weitere podman-Anpassungen, DB-Dump geändert 2025-05-05 02:09:02 +02:00
5 changed files with 88 additions and 42 deletions

No files matched your search

+7 -6
View File
@@ -1,5 +1,8 @@
#!/usr/bin/eval bash #!/usr/bin/eval bash
USER_CONTAINERS=
ROOT_CONTAINERS="pihole"
BACKUP_TARGET=/var/docker/tmp BACKUP_TARGET=/var/docker/tmp
NAS_TARGET="$NAS_ROOT/daily/$HOST_NAME/backup.$DAY" NAS_TARGET="$NAS_ROOT/daily/$HOST_NAME/backup.$DAY"
@@ -19,12 +22,10 @@ before_backup() {
} }
after_backup() { after_backup() {
let local rc=0
start_containers start_containers
local dock=$? let rc=rc+$?
copy_to_nas "$BACKUP_TARGET" "$NAS_TARGET" copy_to_nas "$BACKUP_TARGET" "$NAS_TARGET"
local copy=$? let rc=rc+$?
if [ $dock -eq 0 ] && [ $copy -eq 0 ]; then return $rc
return 0
fi
return 1
} }
+12 -6
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Mail via GMX-Relay versenden (Docker-Image "hb42/smtp") # Mail via GMX-Relay versenden (Podman-Image "smtp-relay")
# #
# Klappt nur direkt im Container, daher ggf. via ssh aufrufen (Annahme: remote user == local user) # Klappt nur direkt im Container, daher ggf. via ssh aufrufen (Annahme: remote user == local user)
# #
@@ -12,10 +12,12 @@
# > mail.sh hb242@pm.me "log whatever" ../log/some.log # > mail.sh hb242@pm.me "log whatever" ../log/some.log
# #
DOCKER=/usr/bin/docker PODMAN=/usr/bin/podman
MAILCONTAINER=smtp SUDO="sudo -u container sh -c"
MAILCONTAINER=smtp-relay
MAILSERVER_IP=10.4.2.30 MAILSERVER_IP=10.4.2.30
SSH="" REMOTE=""
which ip >/dev/null 2>&1 which ip >/dev/null 2>&1
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
@@ -27,7 +29,7 @@ else
fi fi
if [ "$myip" != "$MAILSERVER_IP" ]; then if [ "$myip" != "$MAILSERVER_IP" ]; then
SSH="ssh $MAILSERVER_IP" $REMOTE=yes
fi fi
TO=$1 TO=$1
@@ -44,8 +46,12 @@ fi
# Mail body aus Datei oder STDIN holen # Mail body aus Datei oder STDIN holen
CONTENT=$(cat ${1:--}) CONTENT=$(cat ${1:--})
MAILCMD="$PODMAN exec -i $MAILCONTAINER /usr/sbin/sendmail -i -t"
if [ ! -z "$REMOTE" ]; then
MAILCMD="ssh $MAILSERVER_IP \"$SUDO $MAILCMD\""
fi
# construct mail header + content and pipe to sendmail # construct mail header + content and pipe to sendmail
cat <<EOMB | $SSH $DOCKER exec -i $MAILCONTAINER /usr/sbin/sendmail -i -t cat <<EOMB | $MAILCMD
FROM: hb42@gmx.de FROM: hb42@gmx.de
TO: ${TO} TO: ${TO}
DATE: $(date -R) DATE: $(date -R)
+47 -18
View File
@@ -24,6 +24,10 @@ LIST_EXT=list
DOCKER="/usr/bin/docker compose -f /var/docker/run/docker-compose.yml --ansi never" DOCKER="/usr/bin/docker compose -f /var/docker/run/docker-compose.yml --ansi never"
SYNO_USB=/usr/syno/bin/synousbdisk SYNO_USB=/usr/syno/bin/synousbdisk
SYSTEMCTL_USER="/usr/bin/systemctl --user --machine=container@"
SYSTEMCTL="/usr/bin/systemctl"
CONTAINER_EXEC_USER=" sudo -u container podman exec"
CONTAINER_EXEC="podman exec"
LOG_RECIPIENT=hb242@pm.me LOG_RECIPIENT=hb242@pm.me
INFO=INFO INFO=INFO
@@ -95,6 +99,7 @@ prune_logs() {
# ----- db dump ----- # ----- db dump -----
dump_mariadb() { dump_mariadb() {
return 0
log $DEBUG "$DBG dump_mariadb( $@ )" log $DEBUG "$DBG dump_mariadb( $@ )"
local dump_dir=$1 local dump_dir=$1
local mysqlconnect="--user=root --password=snafu" local mysqlconnect="--user=root --password=snafu"
@@ -109,17 +114,20 @@ dump_mariadb() {
} }
dump_postgresql() { dump_postgresql() {
local pg_container=$1
local dump_dir=$2
log $DEBUG "$DBG dump_postgresql( $@ )" log $DEBUG "$DBG dump_postgresql( $@ )"
local dump_dir=$1 delete_dir $dump_dir
check_directory $dump_dir
# users and roles # users and roles
log $DEBUG "$DBG > \$DOCKER exec -u=postgres postgres pg_dumpall --globals-only" log $DEBUG "$DBG > \$CONTAINER_EXEC_USER -u=postgres $pg_container pg_dumpall --globals-only"
$DOCKER exec -u=postgres postgres pg_dumpall --globals-only > $dump_dir/_globals.sql 2>>$LOG_FILE $CONTAINER_EXEC_USER -u=postgres $pg_container pg_dumpall --globals-only > $dump_dir/_globals.sql 2>>$LOG_FILE
log $DEBUG "$DBG \$DOCKER exec -u=postgres postgres psql -t -c \"select datname from pg_database where not datistemplate\"" log $DEBUG "$DBG \$CONTAINER_EXEC_USER -u=postgres $pg_container psql -t -c \"select datname from pg_database where not datistemplate\""
for db in $($DOCKER exec -u=postgres postgres psql -t -c "select datname from pg_database where not datistemplate" 2>>$LOG_FILE); do for db in $($CONTAINER_EXEC_USER -u=postgres $pg_container psql -t -c "select datname from pg_database where not datistemplate" 2>>$LOG_FILE); do
log $DEBUG "$DBG > \$DOCKER exec -u=postgres postgres pg_dump --create $db" log $DEBUG "$DBG > \$CONTAINER_EXEC_USER -u=postgres $pg_container pg_dump --create $db"
$DOCKER exec -u=postgres postgres pg_dump --create $db > $dump_dir/$db.sql 2>>$LOG_FILE $CONTAINER_EXEC_USER -u=postgres $pg_container pg_dump --create $db > $dump_dir/$db.sql 2>>$LOG_FILE
is_error $? false && return 1 is_error $? false && return 1
done done
return 0 return 0
@@ -141,29 +149,50 @@ check_root() {
} }
start_containers() { start_containers() {
local let rc=0
log $DEBUG "$DBG start_containers()" log $DEBUG "$DBG start_containers()"
if [ -f /var/docker/run/docker-compose.yml ]; then if [ -f /var/docker/run/docker-compose.yml ]; then
log $DEBUG "$DBG > \$DOCKER up -d" log $DEBUG "$DBG > \$DOCKER up -d"
$DOCKER up -d >>$LOG_FILE 2>&1 $DOCKER up -d >>$LOG_FILE 2>&1
return $? let rc=rc+$?
else
log $DEBUG "$DBG > sudo systemctl start pihole"
sudo systemctl start pihole >>$LOG_FILE 2>&1
return $?
fi fi
if [ -d /var/containers ]; then
do_start_stop_containers start
let rc=rc+$?
fi
return $rc
} }
stop_containers() { stop_containers() {
log $DEBUG "$DBG stop_docker()" local let rc=0
log $DEBUG "$DBG stop_containers()"
if [ -f /var/docker/run/docker-compose.yml ]; then if [ -f /var/docker/run/docker-compose.yml ]; then
log $DEBUG "$DBG > \$DOCKER down" log $DEBUG "$DBG > \$DOCKER down"
$DOCKER down >>$LOG_FILE 2>&1 $DOCKER down >>$LOG_FILE 2>&1
return $? let rc=rc+$?
else
log $DEBUG "$DBG > sudo systemctl stop pihole"
sudo systemctl stop pihole >>$LOG_FILE 2>&1
return $?
fi fi
if [ -d /var/containers ]; then
do_start_stop_containers stop
let rc=rc+$?
fi
return $rc
}
do_start_stop_containers() {
local cmd=$1
local let rc=0
log $DEBUG "$DBG do_start_stop_containers() $cmd"
if [ ! -z "$ROOT_CONTAINERS" ]; then
log $DEBUG "$DBG > $SYSTEMCTL $cmd $ROOT_CONTAINERS"
$SYSTEMCTL $cmd $ROOT_CONTAINERS >>$LOG_FILE 2>&1
let rc=rc+$?
fi
if [ ! -z "$USER_CONTAINERS" ]; then
log $DEBUG "$DBG > $SYSTEMCTL_USER $cmd $USER_CONTAINERS"
$SYSTEMCTL_USER $cmd $USER_CONTAINERS >>$LOG_FILE 2>&1
let rc=rc+$?
fi
return $rc
} }
# Zugriffsrechte für Logs und Backups setzen # Zugriffsrechte für Logs und Backups setzen
+6 -1
View File
@@ -3,10 +3,15 @@
# entrypoint for all actions # entrypoint for all actions
# #
# 2.1.12 08.05.2025 - mail.sh an neuen Container angepasst
# 2.1.11 05.05.2025 - Fix DB-Dump
# 2.1.10 05.05.2025 - Postgres-Dump auf podman umgestellt
# 2.1.9 02.05.2025 - DB-Dump erweitert, damit Dumps für mehrere postgres möglich sind
# 2.1.8 30.04.2025 - systemctl start/stop eingebaut
# 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.7" VER="2.1.12"
HERE=$(dirname "$0") HERE=$(dirname "$0")
THIS_SCRIPT=$0 THIS_SCRIPT=$0
+16 -11
View File
@@ -1,6 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
USER_CONTAINERS="homeassistant-pod codeserver jellyfin pgadmin nextcloud-pod calibre nexus git-pod caddy.socket caddy smtp-relay roonserver"
ROOT_CONTAINERS=
DOCKER_ROOT=/var/docker DOCKER_ROOT=/var/docker
CONTAINERS_ROOT=/var/containers
BACKUP_TARGET=$DOCKER_ROOT/tmp BACKUP_TARGET=$DOCKER_ROOT/tmp
NAS_TARGET="$NAS_ROOT/daily/$HOST_NAME/backup.$DAY" NAS_TARGET="$NAS_ROOT/daily/$HOST_NAME/backup.$DAY"
@@ -21,11 +25,14 @@ backup_daily3() {
before_backup() { before_backup() {
dump_mariadb $DOCKER_ROOT/dump/mysql let local rc=0
local mys=$? #dump_mariadb $DOCKER_ROOT/dump/mysql
dump_postgresql $DOCKER_ROOT/dump/postgresql #let rc=rc+$?
local pos=$? dump_postgresql ncd_pg $CONTAINERS_ROOT/dump/nextcloud
if [ $mys -gt 0 ] || [ $pos -gt 0 ]; then let rc=rc+$?
dump_postgresql gitea_pg $CONTAINERS_ROOT/dump/gitea
let rc=rc+$?
if [ $rc -gt 0 ]; then
return 1 return 1
fi fi
stop_containers stop_containers
@@ -33,12 +40,10 @@ before_backup() {
} }
after_backup() { after_backup() {
let local rc=0
start_containers start_containers
local dock=$? let rc=rc+$?
copy_to_nas "$BACKUP_TARGET" "$NAS_TARGET" copy_to_nas "$BACKUP_TARGET" "$NAS_TARGET"
local copy=$? let rc=rc+$?
if [ $dock -eq 0 ] && [ $copy -eq 0 ]; then return $rc
return 0
fi
return 1
} }