diff --git a/backups/cron/home/daily.sh b/backups/cron/home/daily.sh new file mode 100755 index 0000000..6f62c3b --- /dev/null +++ b/backups/cron/home/daily.sh @@ -0,0 +1,19 @@ + #!/bin/bash + +USER=thomas +export XDG_RUNTIME_DIR=/run/user/1000 + +source /home/thomas/.env + +if mountpoint -q /media/backups-home; then + # sudo /usr/bin/rsnapshot daily + sudo /usr/bin/rsnapshot -c /etc/rsnapshot.conf daily + if [ $? -eq 0 ]; then + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'βœ…πŸ  Daily `/home` backup completed successfully.' + else + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'β›”πŸ  Daily `/home` backup failed.' + fi +else + echo "Backup drive not mounted" + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'πŸ’ΎπŸ  Error: `/home` backup drive not mounted.' +fi diff --git a/backups/cron/home/hourly.sh b/backups/cron/home/hourly.sh new file mode 100755 index 0000000..cb55bf6 --- /dev/null +++ b/backups/cron/home/hourly.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +USER=thomas +export XDG_RUNTIME_DIR=/run/user/1000 + +source /home/thomas/.env + +if mountpoint -q /media/backups-home; then + sudo /usr/bin/rsnapshot -c /etc/rsnapshot.conf hourly + # sudo /usr/bin/rsnapshot hourly + if [ $? -eq 0 ]; then + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'βœ…πŸ  Hourly `/home` backup completed successfully' + else + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'β›”πŸ  Hourly `/home` backup failed.' + fi +else + echo "Backup drive not mounted" + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'πŸ’ΎπŸ  Error: `/home` backup drive not mounted.' +fi diff --git a/backups/cron/home/monthly.sh b/backups/cron/home/monthly.sh new file mode 100755 index 0000000..5b687d0 --- /dev/null +++ b/backups/cron/home/monthly.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +USER=thomas +export XDG_RUNTIME_DIR=/run/user/1000 + +source /home/thomas/.env + +if mountpoint -q /media/backups-home; then + sudo /usr/bin/rsnapshot -c /etc/rsnapshot.conf monthly + # sudo /usr/bin/rsnapshot monthly + if [ $? -eq 0 ]; then + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'βœ…πŸ  Monthly `/home` backup completed successfully.' + else + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'β›”πŸ  Monthly `/home` backup failed.' + fi +else + echo "Backup drive not mounted" + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'πŸ’ΎπŸ  Error: `/home` backup drive not mounted.' +fi diff --git a/backups/cron/home/weekly.sh b/backups/cron/home/weekly.sh new file mode 100755 index 0000000..8ceb681 --- /dev/null +++ b/backups/cron/home/weekly.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +USER=thomas +export XDG_RUNTIME_DIR=/run/user/1000 + + +source /home/thomas/.env + +if mountpoint -q /media/backups-home; then + sudo /usr/bin/rsnapshot -c /etc/rsnapshot.conf weekly + # sudo /usr/bin/rsnapshot weekly + if [ $? -eq 0 ]; then + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'βœ…πŸ  Weekly `/home` backup completed successfully.' + else + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'β›”πŸ  Weekly `/home` backup failed.' + fi +else + echo "Backup drive not mounted" + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'πŸ’ΎπŸ  Error: `/home` backup drive not mounted.' +fi diff --git a/backups/cron/daily.sh b/backups/cron/root/daily.sh similarity index 71% rename from backups/cron/daily.sh rename to backups/cron/root/daily.sh index dd5873a..2f21e9d 100755 --- a/backups/cron/daily.sh +++ b/backups/cron/root/daily.sh @@ -5,14 +5,14 @@ export XDG_RUNTIME_DIR=/run/user/1000 source /home/thomas/.env -if mountpoint -q /media/backups; then - sudo /usr/bin/rsnapshot daily +if mountpoint -q /media/backups-home; then + sudo /usr/bin/rsnapshot -c /etc/rsnapshot_root.conf daily if [ $? -eq 0 ]; then - /home/thomas/repos/slack-notifier/src/index.js 'backups' 'βœ… Daily backup completed successfully.' + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'βœ…πŸ«š Daily `/` backup completed successfully.' else - /home/thomas/repos/slack-notifier/src/index.js 'backups' 'β›” Daily backup failed.' + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'β›”πŸ«š Daily `/` backup failed.' fi else echo "Backup drive not mounted" - /home/thomas/repos/slack-notifier/src/index.js 'backups' 'πŸ’Ύ Error: backup drive not mounted.' + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'πŸ’ΎπŸ«š Error: `/` backup drive not mounted.' fi diff --git a/backups/cron/hourly.sh b/backups/cron/root/hourly.sh similarity index 73% rename from backups/cron/hourly.sh rename to backups/cron/root/hourly.sh index 6b86715..6e5a0bc 100755 --- a/backups/cron/hourly.sh +++ b/backups/cron/root/hourly.sh @@ -5,14 +5,14 @@ export XDG_RUNTIME_DIR=/run/user/1000 source /home/thomas/.env -if mountpoint -q /media/backups; then - sudo /usr/bin/rsnapshot hourly +if mountpoint -q /media/backups-home; then + sudo /usr/bin/rsnapshot -c /etc/rsnapshot_root.conf hourly if [ $? -eq 0 ]; then - /home/thomas/repos/slack-notifier/src/index.js 'backups' 'βœ… Hourly backup completed successfully' + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'βœ…πŸ«š Hourly `/` backup completed successfully' else - /home/thomas/repos/slack-notifier/src/index.js 'backups' 'β›” Hourly backup failed.' + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'β›”πŸ«š Hourly `/` backup failed.' fi else echo "Backup drive not mounted" - /home/thomas/repos/slack-notifier/src/index.js 'backups' 'πŸ’Ύ Error: backup drive not mounted.' + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'πŸ’ΎπŸ«š Error: `/` backup drive not mounted.' fi diff --git a/backups/cron/monthly.sh b/backups/cron/root/monthly.sh similarity index 76% rename from backups/cron/monthly.sh rename to backups/cron/root/monthly.sh index 3bc362f..46e2e14 100755 --- a/backups/cron/monthly.sh +++ b/backups/cron/root/monthly.sh @@ -5,14 +5,14 @@ export XDG_RUNTIME_DIR=/run/user/1000 source /home/thomas/.env -if mountpoint -q /media/backups; then - sudo /usr/bin/rsnapshot monthly +if mountpoint -q /media/backups-home; then + sudo /usr/bin/rsnapshot -c /etc/rsnapshot_root.conf monthly if [ $? -eq 0 ]; then - /home/thomas/repos/slack-notifier/src/index.js 'backups' 'βœ… Monthly backup completed successfully.' + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'βœ…πŸ«š Monthly `/` backup completed successfully.' else - /home/thomas/repos/slack-notifier/src/index.js 'backups' 'β›” Monthly backup failed.' + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'β›”πŸ«š Monthly `/` backup failed.' fi else echo "Backup drive not mounted" - /home/thomas/repos/slack-notifier/src/index.js 'backups' 'πŸ’Ύ Error: backup drive not mounted.' + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'πŸ’ΎπŸ«š Error: `/` backup drive not mounted.' fi diff --git a/backups/cron/weekly.sh b/backups/cron/root/weekly.sh similarity index 76% rename from backups/cron/weekly.sh rename to backups/cron/root/weekly.sh index 2d34f80..a4ba73d 100755 --- a/backups/cron/weekly.sh +++ b/backups/cron/root/weekly.sh @@ -6,14 +6,15 @@ export XDG_RUNTIME_DIR=/run/user/1000 source /home/thomas/.env -if mountpoint -q /media/backups; then - sudo /usr/bin/rsnapshot weekly +if mountpoint -q /media/backups-home; then + + sudo /usr/bin/rsnapshot -c /etc/rsnapshot_root.conf monthly if [ $? -eq 0 ]; then - /home/thomas/repos/slack-notifier/src/index.js 'backups' 'βœ… Weekly backup completed successfully.' + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'βœ…πŸ«š Weekly `/` backup completed successfully.' else - /home/thomas/repos/slack-notifier/src/index.js 'backups' 'β›” Weekly backup failed.' + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'β›”πŸ«š Weekly `/` backup failed.' fi else echo "Backup drive not mounted" - /home/thomas/repos/slack-notifier/src/index.js 'backups' 'πŸ’Ύ Error: backup drive not mounted.' + /home/thomas/repos/slack-notifier/src/index.js 'backups' 'πŸ’ΎπŸ«š Error: `/` backup drive not mounted.' fi diff --git a/backups/rsnapshot.conf b/backups/rsnapshot.conf index eeedd50..1750315 100644 --- a/backups/rsnapshot.conf +++ b/backups/rsnapshot.conf @@ -21,7 +21,8 @@ config_version 1.2 # All snapshots will be stored under this root directory. # -snapshot_root /media/backups +snapshot_root /media/backups-home + # If no_create_root is enabled, rsnapshot will not automatically create the # snapshot_root directory. This is particularly useful if you are backing # up to removable media, such as a FireWire or USB drive. @@ -226,6 +227,7 @@ lockfile /var/run/rsnapshot.pid # LOCALHOST backup /home/ home/ +exclude "/lost+found/" #backup /etc/ etc/ #backup /usr/local/ usr/local/ diff --git a/backups/rsnapshot_root.conf b/backups/rsnapshot_root.conf new file mode 100644 index 0000000..2358697 --- /dev/null +++ b/backups/rsnapshot_root.conf @@ -0,0 +1,265 @@ +################################################# +# rsnapshot.conf - rsnapshot configuration file # +################################################# +# # +# PLEASE BE AWARE OF THE FOLLOWING RULE: # +# # +# This file requires tabs between elements # +# # +################################################# + +####################### +# CONFIG FILE VERSION # +####################### + +config_version 1.2 + +########################### +# SNAPSHOT ROOT DIRECTORY # +########################### + +# All snapshots will be stored under this root directory. +# + +snapshot_root /media/backups-root + +# If no_create_root is enabled, rsnapshot will not automatically create the +# snapshot_root directory. This is particularly useful if you are backing +# up to removable media, such as a FireWire or USB drive. +# +#no_create_root 1 + +################################# +# EXTERNAL PROGRAM DEPENDENCIES # +################################# + +# LINUX USERS: Be sure to uncomment "cmd_cp". This gives you extra features. +# EVERYONE ELSE: Leave "cmd_cp" commented out for compatibility. +# +# See the README file or the man page for more details. +# +cmd_cp /usr/bin/cp + +# uncomment this to use the rm program instead of the built-in perl routine. +# +cmd_rm /usr/bin/rm + +# rsync must be enabled for anything to work. This is the only command that +# must be enabled. +# +cmd_rsync /usr/bin/rsync + +# Uncomment this to enable remote ssh backups over rsync. +# +#cmd_ssh /usr/bin/ssh + +# Comment this out to disable syslog support. +# +cmd_logger /usr/bin/logger + +# Uncomment this to specify the path to "du" for disk usage checks. +# If you have an older version of "du", you may also want to check the +# "du_args" parameter below. +# +cmd_du /usr/bin/du + +# Uncomment this to specify the path to rsnapshot-diff. +# +cmd_rsnapshot_diff /usr/bin/rsnapshot-diff + +# Specify the path to a script (and any optional arguments) to run right +# before rsnapshot syncs files +# +#cmd_preexec /path/to/preexec/script + +# Specify the path to a script (and any optional arguments) to run right +# after rsnapshot syncs files +# +#cmd_postexec /path/to/postexec/script + +# Paths to lvcreate, lvremove, mount and umount commands, for use with +# Linux LVMs. +# +#linux_lvm_cmd_lvcreate /path/to/lvcreate +#linux_lvm_cmd_lvremove /path/to/lvremove +#linux_lvm_cmd_mount /usr/bin/mount +#linux_lvm_cmd_umount /usr/bin/umount + +######################################### +# BACKUP LEVELS / INTERVALS # +# Must be unique and in ascending order # +# e.g. alpha, beta, gamma, etc. # +######################################### + + +retain hourly 24 +retain daily 7 +retain weekly 4 +retain monthly 12 + + +############################################ +# GLOBAL OPTIONS # +# All are optional, with sensible defaults # +############################################ + +# Verbose level, 1 through 5. +# 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 Everything +# +verbose 2 + +# Same as "verbose" above, but controls the amount of data sent to the +# logfile, if one is being used. The default is 3. +# +loglevel 3 + +# If you enable this, data will be written to the file you specify. The +# amount of data written is controlled by the "loglevel" parameter. +# +#logfile /var/log/rsnapshot + +# If enabled, rsnapshot will write a lockfile to prevent two instances +# from running simultaneously (and messing up the snapshot_root). +# If you enable this, make sure the lockfile directory is not world +# writable. Otherwise anyone can prevent the program from running. +# +lockfile /var/run/rsnapshot.pid + +# By default, rsnapshot check lockfile, check if PID is running +# and if not, consider lockfile as stale, then start +# Enabling this stop rsnapshot if PID in lockfile is not running +# +#stop_on_stale_lockfile 0 + +# Default rsync args. All rsync commands have at least these options set. +# +#rsync_short_args -a +#rsync_long_args --delete --numeric-ids --relative --delete-excluded + +# ssh has no args passed by default, but you can specify some here. +# +#ssh_args -p 22 + +# Default arguments for the "du" program (for disk space reporting). +# The GNU version of "du" is preferred. See the man page for more details. +# If your version of "du" doesn't support the -h flag, try -k flag instead. +# +#du_args -csh + +# If this is enabled, rsync won't span filesystem partitions within a +# backup point. This essentially passes the -x option to rsync. +# The default is 0 (off). +# +#one_fs 0 + +# The include and exclude parameters, if enabled, simply get passed directly +# to rsync. If you have multiple include/exclude patterns, put each one on a +# separate line. Please look up the --include and --exclude options in the +# rsync man page for more details on how to specify file name patterns. +# +#include ??? +#include ??? +#exclude ??? +#exclude ??? + +# The include_file and exclude_file parameters, if enabled, simply get +# passed directly to rsync. Please look up the --include-from and +# --exclude-from options in the rsync man page for more details. +# +#include_file /path/to/include/file +#exclude_file /path/to/exclude/file + +# If your version of rsync supports --link-dest, consider enabling this. +# This is the best way to support special files (FIFOs, etc) cross-platform. +# The default is 0 (off). +# +#link_dest 0 + +# When sync_first is enabled, it changes the default behaviour of rsnapshot. +# Normally, when rsnapshot is called with its lowest interval +# (i.e.: "rsnapshot alpha"), it will sync files AND rotate the lowest +# intervals. With sync_first enabled, "rsnapshot sync" handles the file sync, +# and all interval calls simply rotate files. See the man page for more +# details. The default is 0 (off). +# +#sync_first 0 + +# If enabled, rsnapshot will move the oldest directory for each interval +# to [interval_name].delete, then it will remove the lockfile and delete +# that directory just before it exits. The default is 0 (off). +# +#use_lazy_deletes 0 + +# Number of rsync re-tries. If you experience any network problems or +# network card issues that tend to cause ssh to fail with errors like +# "Corrupted MAC on input", for example, set this to a non-zero value +# to have the rsync operation re-tried. +# +#rsync_numtries 0 + +# LVM parameters. Used to backup with creating lvm snapshot before backup +# and removing it after. This should ensure consistency of data in some special +# cases +# +# LVM snapshot(s) size (lvcreate --size option). +# +#linux_lvm_snapshotsize 100M + +# Name to be used when creating the LVM logical volume snapshot(s). +# +#linux_lvm_snapshotname rsnapshot + +# Path to the LVM Volume Groups. +# +#linux_lvm_vgpath /dev + +# Mount point to use to temporarily mount the snapshot(s). +# +#linux_lvm_mountpath /path/to/mount/lvm/snapshot/during/backup + +############################### +### BACKUP POINTS / SCRIPTS ### +############################### + +# LOCALHOST +backup / root/ +exclude "/home" +exclude "/dev/" +exclude "/proc/" +exclude "/sys/" +exclude "/tmp/" +exclude "/run/" +exclude "/mnt/" +exclude "/media/" +exclude "/lost+found/" +exclude "/var/tmp/" +exclude "/var/run/" +exclude "/var/lock/" + +#backup /etc/ etc/ +#backup /usr/local/ usr/local/ +#backup /var/log/rsnapshot localhost/ +#backup /etc/passwd localhost/ +#backup /home/foo/My Documents/ localhost/ +#backup /foo/bar/ localhost/ one_fs=1,rsync_short_args=-urltvpog +#backup_script /usr/local/bin/backup_pgsql.sh localhost/postgres/ +# You must set linux_lvm_* parameters below before using lvm snapshots +#backup lvm://vg0/xen-home/ lvm-vg0/xen-home/ + +# EXAMPLE.COM +#backup_exec /bin/date "+ backup of example.com started at %c" +#backup root@example.com:/home/ example.com/ +rsync_long_args=--bwlimit=16,exclude=core +#backup root@example.com:/etc/ example.com/ exclude=mtab,exclude=core +#backup_exec ssh root@example.com "mysqldump -A > /var/db/dump/mysql.sql" +#backup root@example.com:/var/db/dump/ example.com/ +#backup_exec /bin/date "+ backup of example.com ended at %c" + +# CVS.SOURCEFORGE.NET +#backup_script /usr/local/bin/backup_rsnapshot_cvsroot.sh rsnapshot.cvs.sourceforge.net/ + +# RSYNC.SAMBA.ORG +#backup rsync://rsync.samba.org/rsyncftp/ rsync.samba.org/rsyncftp/