void-bash-installer/files/bin/void-snapshot

127 lines
3.1 KiB
Bash

#!/bin/bash
if [ "${UID}" -ne "0" ]; then
echo "Keine Rootrechte."
exit 1
fi
config() {
echo "Durch Snapshots werden deine Daten regelmässig"
echo "(zur Zeit alle zwei Stunden), ohne mehr Platz"
echo "zu verbrauchen, gedoppelt."
echo "Dieses hilft zb. gegen unbeabsichtigtes löschen von Dateien."
echo "Du kannst aktivieren, das sie regelmässig gemacht werden."
echo "Du kannst aktivieren, das sie vor einem Update gemacht werden."
echo "Es ist sinnvoll dieses zu aktivieren."
echo "Es ist optional, Snapsshots auch für privaten Daten zu aktivieren."
echo "Achtung, Daten werden dadurch erst sehr verzögert gelöscht!"
while read -p "Regelmässige Snapshots aktivieren? [Y/n] " answer; do
test -z "${answer}" && answer="y"
case "${answer}" in
y*|Y*|j*|J*)
if ! grep -q "#void.system" /var/spool/cron/root; then
echo '0 */2 * * * /usr/bin/void-snapshot #void.system' >> /var/spool/cron/root
else
echo "Schon aktiviert."
fi
break
;;
n*|N*)
if grep -q "#void.system" /var/spool/cron/root; then
sed -i '/#void.system/d' /var/spool/cron/root
else
echo "Schon deaktiviert."
fi
break
;;
*) echo "Antwort nicht eindeutig." ;;
esac
done
answer=""
while read -p "Snapshots vor dem Update? [Y/n] " answer; do
test -z "${answer}" && answer="y"
case "${answer}" in
y*|Y*|j*|J*)
if ! grep -q "SNAP_BEFORE_UPDATE" "/etc/void-snapshot.cfg"; then
echo "SNAP_BEFORE_UPDATE=true" >> "/etc/void-snapshot.cfg"
fi
break
;;
n*|N*)
if grep -q "SNAP_BEFORE_UPDATE" "/etc/void-snapshot.cfg"; then
sed -i '/SNAP_BEFORE_UPDATE/d' "/etc/void-snapshot.cfg"
fi
break
;;
*) echo "Antwort nicht eindeutig." ;;
esac
done
answer=""
while read -p "Möchtest du auch deine Privaten Daten Snapshotten? [Y/n] " answer; do
test -z "${answer}" && answer="y"
case "${answer}" in
y*|Y*|j*|J*)
if ! grep -q "SNAP_HOME" "/etc/void-snapshot.cfg"; then
echo "SNAP_HOME=true" >> "/etc/void-snapshot.cfg"
fi
break
;;
n*|N*)
if grep -q "SNAP_HOME" "/etc/void-snapshot.cfg"; then
sed -i '/SNAP_HOME/d' "/etc/void-snapshot.cfg"
fi
break
;;
*) echo "Antwort nicht eindeutig." ;;
esac
done
}
cron=""
update=""
if [ -t 0 ]; then
cron=1
elif [ "${1}" = "update" ]; then
update=1
elif [ "${1}" = "config" ]; then
config
exit
fi
cfg="/etc/btrbk/btrbk.conf.void"
if [ ! -f "/etc/void-snapshot.cfg" ]; then
test -z "${cron}" && exit 0
config || exit
fi
. "/etc/void-snapshot.cfg"
if [ ! "${SNAP_BEFORE_UPDATE}" ] && [ "${update}" ]; then
exit 1
fi
if [ -f /etc/btrbk/btrbk.conf ]; then
btrbk --progress --quiet run snapshot
else
if mountpoint -q /var/lib/backup/quelle/bootfs; then
snapshotbootfs="snapshotbootfs"
fi
for s in snapshotrootfs "${snapshotbootfs}"; do
test "${s}" && if ! btrbk --config="${cfg}" --quiet run "${s}"; then
btrbk --config="${cfg}" --quiet clean "${s}"
echo "fail: btrbk --config=${cfg} --quiet run ${s}"
exit
fi
done
fi
if [ "${SNAP_HOME}" ]; then
btrbk --config="${cfg}" --quiet run snapshothomefs
fi
if ! sudo update-grub 2> /dev/null; then
echo update-grub failed
fi