#!/bin/sh
# /root/scripts/synoback.sh
# Generationsbackup fuer die Synology DS-712+
# mit Intel-Atom CPU
# /root/scripts/synogenbackup.sh
# Genutzt werden die beiden Tools rsnapshot und crond.
# ### ########################################################### ###
# ### Fuer die Installation werden Vorbereitungen getroffen: ###
# ### ########################################################### ###
# Es wird das Verzeichnis angelegt, in dem die Datei
# gespeichert wird und in dieses Verzeichnis gewechselt
mkdir -p /volume1/public
cd /volume1/public
# ### SPRUNG IN DAS VERZEICHNIS /volume1/public/ <--<--<--<--<--<--<--<--
# In der Shell eingeloggt als root wird herausgefunden
# ob die DS mit einer Intel-Atom CPU ausgestattet ist.
# Dieses Skript ist ausschliesslich fuer die Installation
# dieser CPU ausgelegt und geeignet. Bei allen anderen
# CPU-Modellen bricht es ab.
# Wird eine Intel-Atom-CPU-Modell ausgelesen laedt das
# Skript die passende Installationsdatei fuer das
# Itsy-Package-Management herunter, welches fuer die
# Installation von rsnapshot, rsync und crond gebraucht
# wird.
cat /proc/cpuinfo | grep 'model name'=$cpumodel
if [ $CPUINFO='*Intel*' ]
then
# echo "richtige CPU"
wget http://ipkg.nslu2-linux.org/feeds/optware/syno-i686/cross/unstable/syno-i686-bootstrap_1.2-7_i686.xsh
else
echo "dieses Skript ist fÃr die CPU
dieser Diskstation nicht geeignet"
exit 1
fi
# Das heruntergeladene Paket wird installiert
sh syno-i686-bootstrap_1.2-7_i686.xsh
# In der .profile von root werden zwei Zeilen auskommentiert
sed -ri '/^\s*#/!{/(PATH=|export)/s/(.*)/#\1/}' /root/.profile
# Die heruntergeladene Installationsdatei wird geloescht
rm syno-i686-bootstrap_1.2-7_i686.xsh
# Die Liste der verfuegbaren Pakete wird aktualisiert
ipkg update
# Um heruntergeladene Pakete mit Makelfile installieren zu koennen
# wird aus den Paketquellen make installiert.
# vorher wird ueberprueft, ob das Paket make schon installiert ist
if ipkg list_installed | grep make
then exit 1
else ipkg install make
fi
# Um von allen Veraenderungen ein Logfile zu erhalten wird log4sh
# heruntergeladen, entpackt und installiert
# ### SKRIPT-ABLAUF BEFINDET SICH NOCH IN /volume1/public/ <--<--<--<--<--<--<--<--<--<--<--<--
wget http://downloads.sourceforge.net/project/log4sh/log4sh%201.4.X%20%28stable%29/1.4.2/log4sh-1.4.2.tgz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Flog4sh%2Ffiles%2Flog4sh%25201.4.X%2520%2528stable%2529%2F1.4.2%2F&ts=1348150663&use_mirror=heanet
tar -xvfz log4sh-1.4.2.tgz
make -C /log4sh-1.4.2/Makefile
# Sichern der Optware-Installation inkl. Einstellungen
OPTWARE="/volume1/@optware /etc/rc.optware /etc/rc.local /usr/local/etc/rc.d/optware.sh"
BACKUPDIR="/volume1/backup_data"
#
BACKUPFILE=optware-backup-`date +%a`.tar.bz2
tar -cjf ${BACKUPDIR}/${BACKUPFILE} ${OPTWARE}
# Das originale Startup-Skript /etc/rc.local wird angepasst, um
# bekannte Probleme beim Herunterfahren zu vermeiden. Dazu werden
# zwei Zeilen auskommentiert, in denen Optware Startup Skripte
# aufgerufen werden. Ausserdem wird der mount bind von /opt durch
# einen symbolischen Link von /volume1/@optware auf /opt ersetzt
sed -ri '/^\s*#/!{/(\[)/s/(.*)/#\1/}' /etc/rc.local
# umount /opt
# rmdir /opt
# ln -s /volume1/@optware /opt
# Optware bekommt ein neues, separates Startup Skript
mkdir -p /usr/local/etc/rc.d/
touch /usr/local/etc/rc.d/optware.sh
echo -n "
#!/bin/bash
# Optware-Setup
# Alternatives Optware Startup und Shutdown Script #/usr/local/etc/rc.d/optware.sh
#
case $1 in
start)
for i in /opt/etc/init.d/S??* ;do
#
# Ignore dangling symlinks (if any).
[ ! -f /"$i/" ] && continue
#
case /"$i/" in
*.sh)
# Source shell script for speed.
(
trap - INT QUIT TSTP
set start
. $i
)
;;
*)
# No sh extension, so fork subprocess.
$i start
;;
esac
done
;;
#
stop)
#
for i in /opt/etc/init.d/S??* ;do
#
# Ignore dangling symlinks (if any).
[ ! -f /"$i/" ] && continue
#
case /"$i/" in
*.sh)
# Source shell script for speed.
(
trap - INT QUIT TSTP
set stop
. $i
)
;;
*)
# No sh extension, so fork subprocess.
$i stop ;;
esac
done
;;
#
*)
echo /"Usage: $0 [start|stop]/"
;;
esac
#
# End
" > /usr/local/etc/rc.d/optware.sh
# Das neu erstellte Skript wird ausfuehrbar gemacht
chmod +x /usr/local/etc/rc.d/optware.s
# ### ########################################################### ###
# ### Die benoetigten Tools rsnapshot, rsync und crond werden ###
# ### installiert und konfiguriert ###
# ### ########################################################### ###
# Installation von rsync, crond und rsnapshot
ipkg install rsync crond rsnapshot
# ### Konfiguration #################################################
# Speicherort des Backups wird gesetzt
sed -i 's|^snapshot_root\s.*$|snapshot_root\t/volumeUSB1/synodaten-backup/|g' /opt/etc/rsnapshot.conf
# fuer ein Backup auf externen Medien wird no_create_root auf 1 gesetzt,
# damit das Verzeichnis nicht automatisch erstellt wird. Bei lokalen
# Backups kann die 1 auf 0 gesetzt werden, dann wird das snapshot_root
# Verzeichnis automatisch erstellt
sed -i 's|^no_create_root\s.*$|no_create_root\t1|g' /opt/etc/rsnapshot.conf
# Setzen der Backup-Intervalle fuer das stuendliche, taegliche, woechentliche
# und monatliche Backup. Die Intervallzahl muss mit der /etc/crontab abgestimmt werden
sed -i 's|^interval\shourly\s.*$|interval\thourly\t7|g' /opt/etc/rsnapshot.conf
sed -i 's|^interval\sdaily\s.*$|interval\tdaily\t7|g' /opt/etc/rsnapshot.conf
sed -i 's|^interval\sweekly\s.*$|interval\tweekly\t4|g' /opt/etc/rsnapshot.conf
sed -i 's|^interval\smonthly\s.*$|interval\tmonthly\t3|g' /opt/etc/rsnapshot.conf
# Setzen des Loglevels
# 1 Quiet Print fatal errors only
# 2 Default Print errors and warnings only
# 3 Verbose Show equivalent shell commands being executed
# 4 Extra Verbose Show extra verbose information
# 5 Debug mode More than you care to know
sed -i 's|^loglevel\s.*$|loglevel\t2|g' /opt/etc/rsnapshot.conf
# Setzen des Pfades fuer die Logdatei
sed -i 's|^logfile\s.*$|logfile\t/opt/var/log/rsnapshot|g' /opt/etc/rsnapshot.conf
# ### ########################################################### ###
# ### Fuer das erste - manuelle - Backup wird screen installiert, ###
# ### damit die Konsole waehrenddessen geschlossen werden darf. ###
# ### ########################################################### ###
# Installation von screen
ipkg install screen
# damit das erste Backup mit dem Skript ausgefuehrt wird
# muss die folgende Zeile auskommentiert werden.
# /opt/bin/screen rsnapshot hourly
# ############################################################### ###
# ### Pfade werden gesetzt von ###
# ### <backup /zu sichernder Ort/ Sicherungsort/> ###
# ############################################################### ###
# ### ########################################################### ###
# ### Standardverzeichnisse der DS ###
# ### Befehle muessen ein- bzw. auskommentiert werden jenachdem ###
# ### ob die Verzeichnisse gesichert werden sollen oder nicht ###
# ## Verzeichnis /home/ soll
# --> gesichert werden
sed -ri 's|^\(\s*\)#\(.*/home/.*\)|\1 \2|' /opt/etc/rsnapshot.conf
# --> nicht gesichert werden
sed 's|^\(\s*\)\(.*/home/.*\)|#\1 \2|' /opt/etc/rsnapshot.conf
# ## Verzeichnis /etc/ soll
# --> gesichert werden
sed -ri 's|^\(\s*\)#\(.*/etc/.*\)|\1 \2|' /opt/etc/rsnapshot.conf
# --> nicht gesichert werden
sed 's|^\(\s*\)\(.*/etc/.*\)|#\1 \2|' /opt/etc/rsnapshot.conf
# ## Verzeichnis /opt/etc/ soll
# --> gesichert werden
sed -ri 's|^\(\s*\)#\(.*/opt/etc/.*\)|\1 \2|' /opt/etc/rsnapshot.conf
# --> nicht gesichert werden
sed 's|^\(\s*\)\(.*/opt/etc/.*\)|#\1 \2|' /opt/etc/rsnapshot.conf
# ## Verzeichnis /usr/local/ soll
# --> gesichert werden
sed -ri 's|^\(\s*\)#\(.*/usr/local/.*\)|\1 \2|' /opt/etc/rsnapshot.conf
# --> nicht gesichert werden
sed 's|^\(\s*\)\(.*/opt/local/.*\)|#\1 \2|' /opt/etc/rsnapshot.conf
# ## Verzeichnis /etc/passwd/ soll
# --> gesichert werden
sed -ri 's|^\(\s*\)#\(.*/etc/passwd/.*\)|\1 \2|' /opt/etc/rsnapshot.conf
# --> nicht gesichert werden
sed 's|^\(\s*\)\(.*/etc/passwd/.*\)|#\1 \2|' /opt/etc/rsnapshot.conf
# ### ############################################################ ###
# ### zusaetzlich zu sichernde Verzeichnisse der DS ###
# ### es koennen beliebige und beliebig viele zu sichernde ###
# ### Verzeichnisse hinzugefuegt werden ###
# ### /VERZEICHNIS/ muss mit den entsprechenden Verzeichnissen ###
# ### ersetzt werden
echo -e "backup\t/testdaten/\t\tlocalhost/" >> /opt/etc/rsnapshot.conf
# echo -e "backup\t/VERZEICHNIS/\t\tlocalhost/" >> /opt/etc/rsnapshot.conf
# echo -e "backup\t/VERZEICHNIS/\t\tlocalhost/" >> /opt/etc/rsnapshot.conf
# echo -e "backup\t/VERZEICHNIS/\t\tlocalhost/" >> /opt/etc/rsnapshot.conf