diff --git a/backup-yunohost.sh b/backup-yunohost.sh new file mode 100755 index 0000000..54ec664 --- /dev/null +++ b/backup-yunohost.sh @@ -0,0 +1,100 @@ +#!/usr/bin/env bash +#set -euo pipefail +#trap 's=$?; echo >&2 "$0: Error on line "$LINENO": $BASH_COMMAND"; exit $s' ERR + +TARGET=/yunohost-backups +HOST=yunohost +TODAY_DATE=`date '+%F'` +LOGFILE=${TARGET}/$TODAY_DATE.$$.log +ERR=0 +NUMRETAINBACKUPS=10 + +echo "yunohost backup begin:" >$LOGFILE +date >>$LOGFILE + +for i in 1 2 3 +do + NUMBACKUPS=`ssh ${HOST} sudo yunohost backup list | grep -- '-' | wc -l` + ERR=$? + if [ ${ERR} == 0 ] + then + echo number of backups on yunohost ${NUMBACKUPS} >>$LOGFILE + echo number of backups to keep ${NUMRETAINBACKUPS} >>$LOGFILE + else + echo yunohost could not list backups >>$LOGFILE + date >>$LOGFILE + exit 1 + fi + + if [ ${NUMBACKUPS} -gt ${NUMRETAINBACKUPS} ] + then + BACKTODEL=`ssh ${HOST} sudo yunohost backup list | grep -- '-' | head -1 | cut -d" " -f4` + echo 'the following backup will be deleted:' >>$LOGFILE 2>&1 + ssh ${HOST} sudo yunohost backup info ${BACKTODEL} >>$LOGFILE 2>&1 + ssh ${HOST} "sudo yunohost backup delete ${BACKTODEL}" >>$LOGFILE 2>&1 + fi +done + +ssh ${HOST} sudo yunohost backup create >>$LOGFILE 2>&1 +ERR=$? +if [ ${ERR} == 0 ] +then + echo yunohost backup successfully created >>$LOGFILE +else + echo yunohost backup did NOT complete >>$LOGFILE +fi +echo "yunohost backup ended:" >>$LOGFILE +date >>$LOGFILE +BACKUPFILE=`ssh ${HOST} sudo yunohost backup list --with-info -H | grep -A 3 $TODAY_DATE | grep 'path:' | cut -d":" -f2 | tr -d " " | tail -1` +scp ${HOST}:${BACKUPFILE} ${TARGET} && echo ${BACKUPFILE} successfully copied to ${TARGET}! >>$LOGFILE 2>&1 +ls -lisah ${TARGET}/`basename ${BACKUPFILE}` >>$LOGFILE +gzip -9 ${TARGET}/`basename ${BACKUPFILE}` >>$LOGFILE 2>&1 + + +# algo to create the "keep"-array copied from https://serverfault.com/questions/575163/how-to-keep-daily-backups-for-a-week-weekly-for-a-month-monthly-for-a-year-a +# it keeps 8 daily backups and 5 weekly (every sunday) backups +# in addition 13 monthly backups (first sunday of every month) and 6 yearly backups (first sunday of every year) + + +cd ${TARGET} +# keep 8 daily backups +for i in {0..7}; do ((keep[$(date +%Y%m%d -d "-$i day")]++)); done +# keep 5 weekly backups +for i in {0..4}; do ((keep[$(date +%Y%m%d -d "sunday-$((i+1)) week")]++)); done +# keep 13 monthly backups +for i in {0..12}; do + DW=$(($(date +%-W)-$(date -d $(date -d "$(date +%Y-%m-15) -$i month" +%Y-%m-01) +%-W))) + for (( AY=$(date -d "$(date +%Y-%m-15) -$i month" +%Y); AY < $(date +%Y); AY++ )); do + ((DW+=$(date -d $AY-12-31 +%W))) + done + ((keep[$(date +%Y%m%d -d "sunday-$DW weeks")]++)) +done +# keep 6 yearly backups +for i in {0..5}; do + DW=$(date +%-W) + for (( AY=$(($(date +%Y)-i)); AY < $(date +%Y); AY++ )); do + ((DW+=$(date -d $AY-12-31 +%W))) + done + ((keep[$(date +%Y%m%d -d "sunday-$DW weeks")]++)) +done +#echo ${!keep[@]} +echo space in filesys of ${TARGET} before pruning backups >>$LOGFILE 2>&1 +df -h ${TARGET} >>$LOGFILE 2>&1 +for i in *.gz +do + DATE=`echo $i | cut -c1-8` + echo ${!keep[@]} | grep $DATE >/dev/null + if [ $? -ne 0 ] + then + echo deleting $DATE >>$LOGFILE 2>&1 + rm ${DATE}*.tar.* >>$LOGFILE 2>&1 + rm ${DATE}*.log.* >>$LOGFILE 2>&1 + fi +done +echo space in filesys of ${TARGET} after pruning backups >>$LOGFILE 2>&1 +df -h ${TARGET} >>$LOGFILE 2>&1 +echo "$0 on `hostname` ended:" >>$LOGFILE +date >>$LOGFILE +# Achtung, hier wird es kompliziert :) nach diesem Kommando keine Umleitung in $LOGFILE mehr +mv ${LOGFILE} ${TARGET}/`basename ${BACKUPFILE} .tar`.log +gzip -9 ${TARGET}/`basename ${BACKUPFILE} .tar`.log diff --git a/upd b/upd new file mode 100755 index 0000000..f7abce9 --- /dev/null +++ b/upd @@ -0,0 +1,30 @@ +brew update +brew upgrade +echo "nuc7" +echo +upd-linux +echo "osmc" +echo +upd-osmc +echo "Kodi-Datenbank" +echo +update-kodi vs +echo yunohost +echo +upd-yunohost +echo Mac +echo +softwareupdate -l +ssh nuc7 "/root/bin/catlastbackuplog.sh" +ssh nuc7 "cat /root/mystack/docker-prune.log 2>/dev/null" +#ssh nuc7 "ls -ltrh /yunohost-backups | tail -2" +echo +echo "Yunohost-Backups von heute nacht:" +ssh nuc7 "ls -ltrh /yunohost-backups/`date '+%Y%m%d'`-*" +if [ $? != 0 ] +then + echo + echo "Achtung: KEINE Backups von letzter Nacht gefunden" +fi +echo "Platz im Filesystem, das auf nuc7 die /yunohost-backups beherbergt:" +ssh nuc7 "df -h /yunohost-backups"