Compare commits

..

No commits in common. "37dd1d8d95c236d6d1771836c4da1f475a9be837" and "e895f20211fefa9b55a139024aa3652cf667ae1a" have entirely different histories.

35 changed files with 65 additions and 199 deletions

Binary file not shown.

View File

@ -3,9 +3,6 @@
# Federated Backup / Restore Tool to B2 Backblaze
. /federated/lib/functions.sh
B2="$(command b2)"
[ -z "$B2" ] && B2=/federated/bin/b2-linux
usage() {
cat << EOF
Backup / Restore for Backblaze
@ -31,26 +28,26 @@ exit 2;
}
createbucket() {
if [ ! -f "/federated/bin/.b2init" ]; then
B2_APPLICATION_KEY_ID="$B2_APPLICATION_KEY_ID" B2_APPLICATION_KEY="$B2_APPLICATION_KEY" $B2 bucket create $UUID allPrivate
B2_APPLICATION_KEY_ID="$B2_APPLICATION_KEY_ID" B2_APPLICATION_KEY="$B2_APPLICATION_KEY" /federated/bin/b2-linux create_bucket $UUID allPrivate
echo "$UUID" > /federated/bin/.b2init
fi
}
listbackup_system() {
echo "* Listing backup system files for /federated/{bin,certs,lib,logs}.."
echo "* Listing backup system files for /federated/bin.."
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp list-current-files b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/bin/
PASSPHRASE=$GPG_PASSPHRASE duplicity list-current-files b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/bin/
[ $? -ne 0 ] && failcheck "* Couldn't list backup files"
echo "* Listing backup system files for /federated/certs.."
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp list-current-files b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/certs/
PASSPHRASE=$GPG_PASSPHRASE duplicity list-current-files b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/certs/
[ $? -ne 0 ] && failcheck "* Couldn't list backup files"
echo "* Listing backup system files for /federated/lib.."
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp list-current-files b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/lib/
PASSPHRASE=$GPG_PASSPHRASE duplicity list-current-files b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/lib/
[ $? -ne 0 ] && failcheck "* Couldn't list backup files"
echo "* Listing backup system files for /federated/logs.."
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp list-current-files b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/logs/
PASSPHRASE=$GPG_PASSPHRASE duplicity list-current-files b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/logs/
[ $? -ne 0 ] && failcheck "* Couldn't list backup files"
}
listbackup_allservices() {
@ -58,13 +55,13 @@ listbackup_allservices() {
for i in "${SERVICES[@]}"; do
[ ! -d "/federated/apps/$i" ] && echo "$i not installed, skipping." && continue
echo "* Listing backup files for /federated/apps/$i.."
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp list-current-files b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/
PASSPHRASE=$GPG_PASSPHRASE duplicity list-current-files b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/
[ $? -ne 0 ] && failcheck "* Couldn't list backup files"
done
}
listbackup_service() {
echo "* Listing backup files for /federated/apps/$SERVICE.."
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp list-current-files b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/
PASSPHRASE=$GPG_PASSPHRASE duplicity list-current-files b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/
[ $? -ne 0 ] && failcheck "* Couldn't list backup files"
}
backup_service() {
@ -85,7 +82,7 @@ backup_service() {
fi
done
docker exec postgresql /bin/bash -c "pg_dumpall --globals-only -c -U postgres | gzip -9 > /docker-entrypoint-initdb.d/dump_$SERVICE.sql.gz"
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp /federated/apps/$SERVICE b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/
PASSPHRASE=$GPG_PASSPHRASE duplicity /federated/apps/$SERVICE b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
rm /federated/apps/postgresql/data/docker-entrypoint-initdb.d/dump_*
@ -106,42 +103,42 @@ backup_service() {
# Backup mysql user table
docker exec pdnsmysql mariadb-dump -uroot -p${MYSQL_PASSWORD} mysql user | gzip -9 > /federated/apps/pdnsmysql/dump_$SERVICE.sql.gz
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp /federated/apps/$SERVICE b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/
PASSPHRASE=$GPG_PASSPHRASE duplicity /federated/apps/$SERVICE b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
rm /federated/apps/pdnsmysql/dump_*
elif [ "$SERVICE" = "pdns" ]; then
docker exec pdnsmysql mariadb-dump -uroot -p${MYSQL_PASSWORD} pdns | gzip -9 > /federated/apps/pdns/dump_$SERVICE.sql.gz
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp /federated/apps/$SERVICE b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/
PASSPHRASE=$GPG_PASSPHRASE duplicity /federated/apps/$SERVICE b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
rm /federated/apps/pdns/dump_$SERVICE.sql.gz
elif [ "$SERVICE" = "pdnsadmin" ]; then
docker exec pdnsmysql mariadb-dump -uroot -p${MYSQL_PASSWORD} pdns | gzip -9 > /federated/apps/pdnsadmin/dump_$SERVICE.sql.gz
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp /federated/apps/$SERVICE b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/
PASSPHRASE=$GPG_PASSPHRASE duplicity /federated/apps/$SERVICE b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
rm /federated/apps/pdnsadmin/dump_$SERVICE.sql.gz
elif [ "$SERVICE" = "castopod" ]; then
docker exec pdnsmysql mariadb-dump -uroot -p${MYSQL_PASSWORD} castopod | gzip -9 > /federated/apps/castopod/dump_$SERVICE.sql.gz
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp /federated/apps/$SERVICE b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/
PASSPHRASE=$GPG_PASSPHRASE duplicity /federated/apps/$SERVICE b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
rm /federated/apps/castopod/dump_$SERVICE.sql.gz
elif [ "$SERVICE" = "wordpress" -o "$SERVICE" = "wordpressshop" ]; then
docker exec pdnsmysql mariadb-dump -uroot -p${MYSQL_PASSWORD} ${SERVICE} | gzip -9 > /federated/apps/${SERVICE}/dump_$SERVICE.sql.gz
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp /federated/apps/$SERVICE b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/
PASSPHRASE=$GPG_PASSPHRASE duplicity /federated/apps/$SERVICE b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
rm /federated/apps/wordpress/dump_$SERVICE.sql.gz
elif [ "$SERVICE" = "bookstack" ]; then
docker exec pdnsmysql mariadb-dump -uroot -p${MYSQL_PASSWORD} bookstack | gzip -9 > /federated/apps/bookstack/dump_$SERVICE.sql.gz
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp /federated/apps/$SERVICE b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/
PASSPHRASE=$GPG_PASSPHRASE duplicity /federated/apps/$SERVICE b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
rm /federated/apps/bookstack/dump_$SERVICE.sql.gz
elif [ "$SERVICE" = "espocrm" ]; then
docker exec pdnsmysql mariadb-dump -uroot -p${MYSQL_PASSWORD} espocrm | gzip -9 > /federated/apps/espocrm/dump_$SERVICE.sql.gz
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp /federated/apps/$SERVICE b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/
PASSPHRASE=$GPG_PASSPHRASE duplicity /federated/apps/$SERVICE b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
rm /federated/apps/espocrm/dump_$SERVICE.sql.gz
elif [ "$SERVICE" = "roundcube" ]; then
docker exec pdnsmysql mariadb-dump -uroot -p${MYSQL_PASSWORD} roundcube | gzip -9 > /federated/apps/roundcube/dump_$SERVICE.sql.gz
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp /federated/apps/$SERVICE b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/
PASSPHRASE=$GPG_PASSPHRASE duplicity /federated/apps/$SERVICE b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
rm /federated/apps/espocrm/dump_$SERVICE.sql.gz
else
@ -152,7 +149,7 @@ backup_service() {
[ $? -ne 0 ] && failcheck "* Couldn't pg_dump files"
mv /federated/apps/postgresql/data/docker-entrypoint-initdb.d/dump_$SERVICE.sql.gz /federated/apps/$SERVICE/
fi
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp /federated/apps/$SERVICE b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/
PASSPHRASE=$GPG_PASSPHRASE duplicity /federated/apps/$SERVICE b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
[ -f "/federated/apps/$SERVICE/dump_$SERVICE.sql.gz" ] && rm /federated/apps/$SERVICE/dump_$SERVICE.sql.gz
fi
@ -163,19 +160,19 @@ backup_system() {
echo "* Backing up system files in /federated/{bin,certs,lib,logs}.."
echo "* Backing up system files in /federated/bin.."
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp /federated/bin b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/bin/
PASSPHRASE=$GPG_PASSPHRASE duplicity /federated/bin b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/bin/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
echo "* Backing up system files in /federated/certs.."
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp /federated/certs b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/certs/
PASSPHRASE=$GPG_PASSPHRASE duplicity /federated/certs b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/certs/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
echo "* Backing up system files in /federated/lib.."
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp /federated/lib b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/lib/
PASSPHRASE=$GPG_PASSPHRASE duplicity /federated/lib b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/lib/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
echo "* Backing up system files in /federated/logs.."
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp /federated/logs b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/logs/
PASSPHRASE=$GPG_PASSPHRASE duplicity /federated/logs b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/logs/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
}
backup_allservices() {
@ -203,7 +200,7 @@ backup_allservices() {
# Dump postgresql global objects only, no databases, then send everything to Backblaze
docker exec postgresql /bin/bash -c "pg_dumpall --globals-only -c -U postgres | gzip -9 > /docker-entrypoint-initdb.d/dump_$i.sql.gz"
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp --full-if-older-than 1M /federated/apps/$i b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/
PASSPHRASE=$GPG_PASSPHRASE duplicity --full-if-older-than 1M /federated/apps/$i b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
rm /federated/apps/postgresql/data/docker-entrypoint-initdb.d/dump_*
elif [ "$i" = "pdnsmysql" ]; then
@ -222,42 +219,42 @@ backup_allservices() {
# Backup pdnsmysql mysql user table and send to backblaze
docker exec pdnsmysql mariadb-dump -uroot -p${MYSQL_PASSWORD} mysql user | gzip -9 > /federated/apps/pdnsmysql/dump_$i.sql.gz
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp --full-if-older-than 1M /federated/apps/$i b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/
PASSPHRASE=$GPG_PASSPHRASE duplicity --full-if-older-than 1M /federated/apps/$i b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
rm /federated/apps/pdnsmysql/dump_*
elif [ "$i" = "pdns" ]; then
docker exec pdnsmysql mariadb-dump -uroot -p${MYSQL_PASSWORD} pdns | gzip -9 > /federated/apps/pdns/dump_$i.sql.gz
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp --full-if-older-than 1M /federated/apps/$i b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/
PASSPHRASE=$GPG_PASSPHRASE duplicity --full-if-older-than 1M /federated/apps/$i b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
rm /federated/apps/pdns/dump_$i.sql.gz
elif [ "$i" = "pdnsadmin" ]; then
docker exec pdnsmysql mariadb-dump -uroot -p${MYSQL_PASSWORD} pdns | gzip -9 > /federated/apps/pdnsadmin/dump_$i.sql.gz
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp --full-if-older-than 1M /federated/apps/$i b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/
PASSPHRASE=$GPG_PASSPHRASE duplicity --full-if-older-than 1M /federated/apps/$i b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
rm /federated/apps/pdnsadmin/dump_$i.sql.gz
elif [ "$i" = "castopod" ]; then
docker exec pdnsmysql mariadb-dump -uroot -p${MYSQL_PASSWORD} castopod | gzip -9 > /federated/apps/castopod/dump_$i.sql.gz
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp --full-if-older-than 1M /federated/apps/$i b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/
PASSPHRASE=$GPG_PASSPHRASE duplicity --full-if-older-than 1M /federated/apps/$i b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
rm /federated/apps/castopod/dump_$i.sql.gz
elif [ "$i" = "wordpress" ]; then
docker exec pdnsmysql mariadb-dump -uroot -p${MYSQL_PASSWORD} wordpress | gzip -9 > /federated/apps/wordpress/dump_$i.sql.gz
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp --full-if-older-than 1M /federated/apps/$i b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/
PASSPHRASE=$GPG_PASSPHRASE duplicity --full-if-older-than 1M /federated/apps/$i b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
rm /federated/apps/wordpress/dump_$i.sql.gz
elif [ "$i" = "bookstack" ]; then
docker exec pdnsmysql mariadb-dump -uroot -p${MYSQL_PASSWORD} bookstack | gzip -9 > /federated/apps/bookstack/dump_$i.sql.gz
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp --full-if-older-than 1M /federated/apps/$i b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/
PASSPHRASE=$GPG_PASSPHRASE duplicity --full-if-older-than 1M /federated/apps/$i b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
rm /federated/apps/bookstack/dump_$i.sql.gz
elif [ "$i" = "espocrm" ]; then
docker exec pdnsmysql mariadb-dump -uroot -p${MYSQL_PASSWORD} espocrm | gzip -9 > /federated/apps/espocrm/dump_$i.sql.gz
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp --full-if-older-than 1M /federated/apps/$i b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/
PASSPHRASE=$GPG_PASSPHRASE duplicity --full-if-older-than 1M /federated/apps/$i b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
rm /federated/apps/espocrm/dump_$i.sql.gz
elif [ "$i" = "roundcube" ]; then
docker exec pdnsmysql mariadb-dump -uroot -p${MYSQL_PASSWORD} roundcube | gzip -9 > /federated/apps/roundcube/dump_$i.sql.gz
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp --full-if-older-than 1M /federated/apps/$i b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/
PASSPHRASE=$GPG_PASSPHRASE duplicity --full-if-older-than 1M /federated/apps/$i b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
rm /federated/apps/roundcube/dump_$i.sql.gz
else
@ -267,7 +264,7 @@ backup_allservices() {
[ $? -ne 0 ] && failcheck "* Couldn't pg_dump files"
mv /federated/apps/postgresql/data/docker-entrypoint-initdb.d/dump_$i.sql.gz /federated/apps/$i/
fi
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp --full-if-older-than 1M /federated/apps/$i b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/
PASSPHRASE=$GPG_PASSPHRASE duplicity --full-if-older-than 1M /federated/apps/$i b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/
[ $? -ne 0 ] && failcheck "* Couldn't backup files"
[ -f "/federated/apps/$i/dump_$i.sql.gz" ] && rm /federated/apps/$i/dump_$i.sql.gz
fi
@ -281,7 +278,7 @@ backup_nfsmounts() {
else
echo "* NFS mount found: $NFSMOUNT"
echo "* Backing up NFS.."
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp $NFSMOUNT b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/$NFSMOUNT/
PASSPHRASE=$GPG_PASSPHRASE duplicity $NFSMOUNT b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/$NFSMOUNT/
[ $? -ne 0 ] && failcheck "* Couldn't backup NFS mount"
fi
}
@ -293,45 +290,45 @@ listbackup_nfsmounts() {
else
echo "* NFS mount found: $NFSMOUNT"
echo "* Listing NFS.."
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp list-current-files b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/$NFSMOUNT/
PASSPHRASE=$GPG_PASSPHRASE duplicity list-current-files b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/$NFSMOUNT/
[ $? -ne 0 ] && failcheck "* Couldn't list NFS mount"
fi
}
delete_backup() {
echo "* Deleting backup files for /federated/apps/$SERVICE.."
mkdir -p /federated/tmp/empty
cd /federated/tmp/empty && B2_APPLICATION_KEY_ID="$B2_APPLICATION_KEY_ID" B2_APPLICATION_KEY="$B2_APPLICATION_KEY" $B2 sync --allow-empty-source --delete . b2://fed-customers/$UUID/federated/apps/$SERVICE/
cd /federated/tmp/empty && B2_APPLICATION_KEY_ID="$B2_APPLICATION_KEY_ID" B2_APPLICATION_KEY="$B2_APPLICATION_KEY" /federated/bin/b2-linux sync --allowEmptySource --delete . b2://fed-customers/$UUID/federated/apps/$SERVICE/
[ $? -ne 0 ] && failcheck "* Couldn't delete files"
cd /federated && rm -rf /federated/tmp/empty
}
restorebackup_system() {
echo "* Restoring system files to /federated.restore/{bin,certs,lib,logs}.."
echo "* Restoring system files to /federated.restore/bin.."
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp --force b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/bin/ /federated.restore/bin
PASSPHRASE=$GPG_PASSPHRASE duplicity --force b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/bin/ /federated.restore/bin
[ $? -ne 0 ] && failcheck "* Couldn't restore files"
echo "* Restoring system files to /federated.restore/certs.."
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp --force b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/certs/ /federated.restore/certs
PASSPHRASE=$GPG_PASSPHRASE duplicity --force b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/certs/ /federated.restore/certs
[ $? -ne 0 ] && failcheck "* Couldn't restore files"
echo "* Restoring system files to /federated.restore/lib.."
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp --force b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/lib/ /federated.restore/lib
PASSPHRASE=$GPG_PASSPHRASE duplicity --force b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/lib/ /federated.restore/lib
[ $? -ne 0 ] && failcheck "* Couldn't restore files"
echo "* Restoring system files to /federated.restore/logs.."
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp --force b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/lib/ /federated.restore/logs
PASSPHRASE=$GPG_PASSPHRASE duplicity --force b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/lib/ /federated.restore/logs
[ $? -ne 0 ] && failcheck "* Couldn't restore files"
}
restorebackup_service() {
echo "* Restoring $SERVICE to /federated.restore/apps/$SERVICE.."
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp --force b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/ /federated.restore/apps/$SERVICE
PASSPHRASE=$GPG_PASSPHRASE duplicity --force b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$SERVICE/ /federated.restore/apps/$SERVICE
[ $? -ne 0 ] && failcheck "* Couldn't restore files"
}
restorebackup_allservices() {
echo "* Restoring all services.."
for i in "${SERVICES[@]}"; do
echo "** Restoring $i to /federated.restore/apps/$i.."
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp --force b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/ /federated.restore/apps/$i
PASSPHRASE=$GPG_PASSPHRASE duplicity --force b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/federated/apps/$i/ /federated.restore/apps/$i
done
}
restorebackup_nfsmounts() {
@ -342,13 +339,13 @@ restorebackup_nfsmounts() {
else
echo "* NFS mount found: $NFSMOUNT"
echo "* Restoring NFS.."
PASSPHRASE=$GPG_PASSPHRASE duplicity --tempdir /federated/tmp --force b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/$NFSMOUNT/ /federated.restore/$NFSMOUNT
PASSPHRASE=$GPG_PASSPHRASE duplicity --force b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@fed-customers/$UUID/$NFSMOUNT/ /federated.restore/$NFSMOUNT
[ $? -ne 0 ] && failcheck "* Couldn't restore NFS mount"
fi
}
check_freedisk() {
# Check if there is enough free disk space (needs 15G minimum)
FREEDISK=$(df /federated | awk 'NR==2{print int($4/1024/1024)}')
FREEDISK=$(df / | awk 'NR==2{print int($4/1024/1024)}')
if [ $FREEDISK -lt 15 ]; then
send_alert_backups
failcheck "Disk is below 15G, can't backup."
@ -401,8 +398,7 @@ else
fi
# Grab the MySQL pass we need for dumping backups
[ -d "/federated/apps/pdnsmysql" ] && MYSQL_PASSWORD=`cat /federated/apps/pdnsmysql/.env | grep MYSQL_ROOT_PASSWORD | awk -F= '{ print $2 }'`
mkdir -p /federated/tmp
MYSQL_PASSWORD=`cat /federated/apps/pdnsmysql/.env | grep MYSQL_ROOT_PASSWORD | awk -F= '{ print $2 }'`
# If -d is specified then run delete backup
[ $RUN_DELETE ] && delete_backup

View File

@ -77,7 +77,6 @@ elif [[ "$ID" = "openmandriva" ]]; then
command -v dig &>/dev/null || dnf -y install bind-utils
command -v git &>/dev/null || dnf -y install git-core
command -v crontab &>/dev/null || dnf -y install cronie
systemctl enable --now cronie
# Make cronie happy
mkdir -p /root/.cache || :
command -v nc &>/dev/null || dnf -y install netcat-openbsd

View File

@ -143,25 +143,12 @@ upgrade_federated() {
echo -ne "\n* Checking installed app versions with latest-versions."
[ ! -f "/federated/lib/latest-versions" ] && fail "File /federated/lib/latest-version doesn't exist."
APP_DOTS='......................'
for i in /federated/apps/*; do
APP=$(basename $i)
VERSION=""
if [ -e /federated/services/${APP}/service ]; then
. /federated/services/${APP}/service
if [ -z "$VERSION" ]; then
echo "WARNING: No service file in ${APP} service file" >&2
VERSION="$(cat /federated/lib/latest-versions |grep ^${APP}= |cut -d= -f2-)"
fi
else
echo "WARNING: No service file for ${APP} found" >&2
VERSION="$(cat /federated/lib/latest-versions |grep ^${APP}= |cut -d= -f2-)"
fi
if [ -z "$VERSION" ]; then
echo "WARNING: No version information for ${APP} found" >&2
continue
fi
for i in `cat /federated/lib/latest-versions`; do
SERVICE=(${i//=/ });
APP="${SERVICE[0]}"
VERSION="${SERVICE[1]}"
printf "\n%s %s" "$APP" "${APP_DOTS:${#APP}} "
if [ -f "/federated/apps/$APP/.env" ]; then
@ -1460,7 +1447,7 @@ EOF
elif [ "$OSRELEASE" = "openmandriva" ]; then
dnf -y --refresh install curl traefik-certs-dumper duplicity duplicity-backend-b2 duplicity-backend-local duplicity-backend-s3_boto3 duplicity-backend-ssh_paramiko python-b2
dnf -y --refresh install curl traefik-certs-dumper duplicity duplicity-backend-b2 duplicity-backend-local duplicity-backend-s3_boto3 duplicity-backend-ssh_paramiko
if [ "$USE_PODMAN" = "true" ]; then
dnf -y --refresh install podman podman-compose crun iptables
# We want to run a real DNS, can't block port 53
@ -1472,7 +1459,21 @@ EOF
mkdir -p /var/run
ln -s /run/user/0/podman/podman.sock /var/run/docker.sock
else
dnf -y --refresh install docker docker-compose
# Grab an older version of docker instead of just "dnf install docker"
# because 28.0.0 is potentially dangerous, see
# https://github.com/moby/moby/issues/49513
# https://github.com/moby/moby/issues/49511
# https://github.com/moby/moby/issues/49498
if [ "$(uname -m)" = "aarch64" ]; then
wget https://file-store.openmandriva.org/api/v1/file_stores/b435b807ff1b6bc0eabcc5792e9e652b427b438a
elif cat /proc/cpuinfo |grep -q AuthenticAMD; then
wget https://file-store.openmandriva.org/api/v1/file_stores/142e76f40a398c59aaafa727bdf889fb1511d715
else
wget https://file-store.openmandriva.org/api/v1/file_stores/dd69c9573a9c945fdb8dcfdbfc6ba823b914bc24
fi
sudo dnf -y install docker-*.rpm
echo 'exclude=docker' >>/etc/dnf/dnf.conf
dnf -y --refresh install docker-compose
sed -i -e "s,^OPTIONS=.*,OPTIONS=''," /etc/sysconfig/docker
echo 'DOCKER_STORAGE_OPTIONS = --storage-driver btrfs' >>/etc/sysconfig/docker-storage
# Put in log rotation fix for docker container logs

View File

@ -1,5 +0,0 @@
CONTAINER=authelia/authelia
VERSION=4.38.8
INTERNAL_IP=192.168.0.42
PORTS=9091
PUBLICPORTS=""

View File

@ -1,9 +0,0 @@
if [ "$(uname -m)" = "x86_64" ]; then
CONTAINER=monogramm/autodiscover-email-settings
else
CONTAINER=federatedcomputer/autodiscover-email-settings
fi
VERSION=620af02
DEPENDS=mail
INTERNAL_IP=192.168.0.32
PORTS=8000

View File

@ -1,4 +0,0 @@
CONTAINER=baserow/baserow
VERSION=1.30.1
INTERNAL_IP=192.168.0.29
DEPENDS="postgresql mail"

View File

@ -1,4 +0,0 @@
CONTAINER=lscr.io/linuxserver/bookstack
VERSION=24.05.3
INTERNAL_IP=192.168.0.36
DEPENDS=pdnsmysql

View File

@ -1,3 +0,0 @@
CONTAINER=federatedcomputer/caddy
VERSION=latest
INTERNAL_IP=192.168.0.31

View File

@ -1,5 +0,0 @@
CONTAINER=calcom/cal.com
VERSION=v4.7.8
INTERNAL_IP=192.168.0.48
PORTS=3000
DEPENDS=postgresql

View File

@ -1,5 +0,0 @@
CONTAINER=castopod/castopod
VERSION=1.6.5
INTERNAL_IP=192.168.0.33
PORTS=8000
DEPENDS=pdnsmysql

View File

@ -1,4 +0,0 @@
CONTAINER=collabora/code
VERSION=24.04.12.2.1
INTERNAL_IP=192.168.0.17
PORTS=9980

View File

@ -1,4 +0,0 @@
CONTAINER=coturn/coturn
VERSION=4.6.2
INTERNAL_IP=192.168.0.35
PORTS="3478 3479 5349 5350"

View File

@ -1,6 +1,6 @@
CONTAINER=docker.io/bitnami/discourse
VERSION=3.3.3
DEPENDS="redis postgresql"
DEPENDS=redis
INTERNAL_IP=192.168.0.43
# sidekiq
EXTRA_IPS=192.168.0.44

View File

@ -1,3 +0,0 @@
CONTAINER=vectorim/element-web
VERSION=v1.11.92
INTERNAL_IP=192.168.0.20

View File

@ -1,4 +0,0 @@
CONTAINER=espocrm/espocrm
VERSION=8.4.0-apache
INTERNAL_IP=192.168.0.39
DEPENDS="ldap pdnsmysql"

View File

@ -1,4 +0,0 @@
CONTAINER=ghcr.io/tiredofit/docker-freescout
VERSION=latest_php8.3
INTERNAL_IP=192.168.0.37
DEPENDS=postgresql

View File

@ -1,5 +0,0 @@
CONTAINER=gitea/gitea
VERSION=1.23.3
INTERNAL_IP=192.168.0.30
PORTS=3000
DEPENDS=postgresql

View File

@ -1,5 +0,0 @@
CONTAINER=jitsi/web
VERSION=stable-9955
INTERNAL_IP=192.168.0.25
PORTS="5222 5347 5280"
EXTRA_IPS="192.168.0.26 192.168.0.27 192.168.0.28"

View File

@ -1,4 +0,0 @@
CONTAINER=osixia/openldap
VERSION=1.5.0
INTERNAL_IP=192.168.0.15
PORTS="389 636"

View File

@ -1,5 +0,0 @@
CONTAINER=listmonk/listmonk
VERSION=v4.1.0
INTERNAL_IP=192.168.0.21
DEPENDS=postgresql
PORTS=9000

View File

@ -1,5 +0,0 @@
CONTAINER=docker.io/mailserver/docker-mailserver
VERSION=14.0
INTERNAL_IP=192.168.0.16
DEPENDS=ldap
PUBLIC_PORTS="25 143 465 587 993 4190"

View File

@ -1,4 +0,0 @@
CONTAINER=matrixdotorg/synapse
VERSION=v1.124.0
INTERNAL_IP=192.168.0.19
DEPENDS=postgresql

View File

@ -1,3 +0,0 @@
CONTAINER=thebells1111/federated-msp
VERSION=latest
INTERNAL_IP=192.168.0.38

View File

@ -1,4 +0,0 @@
CONTAINER=nextcloud
VERSION=30.0.5
INTERNAL_IP=192.168.0.18
DEPENDS=postgresql

View File

@ -1,3 +0,0 @@
CONTAINER=wheelybird/ldap-user-manager
VERSION=v1.11
INTERNAL_IP=192.168.0.23

View File

@ -1,4 +0,0 @@
CONTAINER=pschiffe/pdns-admin
VERSION=0.4.1
INTERNAL_IP=192.168.0.12
DEPENDS="pdnsmysql pdns"

View File

@ -1,6 +0,0 @@
CONTAINER=makeplane/plane-frontend
VERSION=v0.24.1
DEPENDS=postgresql
INTERNAL_IP=192.168.0.50
EXTRA_IPS=192.168.0.51
PORTS=3000

View File

@ -1,4 +0,0 @@
CONTAINER=postgres
VERSION=14
INTERNAL_IP=192.168.0.14
PORT=5432

View File

@ -1,4 +0,0 @@
CONTAINER=bitnami/redis
VERSION=7.0.15
INTERNAL_IP=192.168.0.45
PORTS=6379

View File

@ -1,4 +0,0 @@
CONTAINER=roundcube/roundcubemail
VERSION=1.6.9-apache
INTERNAL_IP=192.168.0.47
DEPENDS="pdnsmysql mail"

View File

@ -1,3 +0,0 @@
CONTAINER=traefik
VERSION=v2.11.16
INTERNAL_IP=192.168.0.13

View File

@ -1,4 +0,0 @@
CONTAINER=vaultwarden/server
VERSION=1.32.7
INTERNAL_IP=192.168.0.22
DEPENDS=postgresql

View File

@ -1,4 +0,0 @@
CONTAINER=linuxserver/wireguard
VERSION=1.0.20210914
INTERNAL_IP=192.168.0.24
PORTS="51820/udp"

View File

@ -1,5 +0,0 @@
CONTAINER=bitnami/wordpress
VERSION=6.2.2
INTERNAL_IP=192.168.0.34
PORTS=8080
DEPENDS=pdnsmysql