/backup-manager
http://github.com/sukria/Backup-Manager · #! · 297 lines · 255 code · 42 blank · 0 comment · 0 complexity · 0952232730319c69e3c2cb0b3f7e604c MD5 · raw file
- #! /usr/bin/env bash
- # Copyright Š 2005-2016 The Backup Manager Authors
- # See the AUTHORS file for details.
- #
- # This program is free software; you can redistribute it and/or
- # modify it under the terms of the GNU General Public License
- # as published by the Free Software Foundation; either version 2
- # of the License, or (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- # This is the main backup-manager script.
- #
- # $Revision$
- # $Date$
- # $Author$
- set -e
- RELEASE="true"
- VERSION="0.7.12"
- #Set prefix for paths
- BIN_PREFIX=/usr/bin
- LIB_PREFIX=/usr/lib
- VAR_PREFIX=/var/lib
- #Set prefix for paths
- BIN_PREFIX=/usr/bin
- LIB_PREFIX=/usr/lib
- VAR_PREFIX=/var/lib
- # All the paths we provide
- libdir="$LIB_PREFIX/backup-manager"
- vardir="$VAR_PREFIX/backup-manager"
- bmu="$BIN_PREFIX/backup-manager-upload"
- bmp="$BIN_PREFIX/backup-manager-purge"
- # Find which lockfile to use
- # If we are called by an unprivileged user, use a lockfile inside the user's home;
- # else, use /var/run/backup-manager.lock
- systemlockfile="/var/run/backup-manager.lock"
- userlockfile="$HOME/.backup-manager.lock"
- if [[ "$UID" != 0 ]]; then
- lockfile="$userlockfile"
- else
- lockfile="$systemlockfile"
- fi
- # Default value for logger, as we didn't read the config file yet
- BM_LOGGER_LEVEL="info"
- # Load the backup-manager's library
- source $libdir/externals.sh
- source $libdir/gettext.sh
- source $libdir/logger.sh
- source $libdir/dialog.sh
- source $libdir/files.sh
- source $libdir/md5sum.sh
- source $libdir/backup-methods.sh
- source $libdir/upload-methods.sh
- source $libdir/burning-methods.sh
- source $libdir/actions.sh
- source $libdir/dbus.sh
- debug "Libraries loaded successfuly from \"$libdir\"."
- # Initialize defautls values of arguments
- verbosedebug="false"
- verbose="false"
- version="false"
- warnings="true"
- force="false"
- upload="false"
- burn="false"
- help="false"
- md5check="false"
- purge="false"
- conffile="/etc/backup-manager.conf"
- # The "no" flags
- nopurge="false"
- noburn="false"
- noupload="false"
- debug "Version : $VERSION"
- # Set useful global variables and initial
- # checks
- bm_init_today
- bm_dbus_init
- bm_dbus_send_event "startup" "Version : $VERSION"
- bm_dbus_send_progress 0 "Initializing"
- # Catch signals for a nice exit.
- trap clean_exit SIGINT SIGTERM SIGKILL
- # Parse the command line
- debug "Processing the command line"
- while [[ $# -ge 1 ]]; do
- case $1 in
- -h|--help)
- usage
- ;;
- -m|--md5check)
- md5check="true"
- ;;
- -p|--purge)
- purge="true"
- ;;
- --no-purge)
- nopurge="true"
- ;;
- -b|--burn)
- burn="true"
- # parse the second argument as a date if
- # it does not begin with a dash (-).
- if [[ -n "$2" ]] &&
- [[ "${2}" == "${2#-}" ]]; then
- # test if the date is a valid date
- if [[ $(echo "$2" | grep "^[[:digit:]]\{8\}$") ]] ; then
- export BM__BURNING_DATE="$2"
- shift
- else
- error "The -b option must be followed by a valid date (YYYYMMDD)."
- fi
- fi
- ;;
- --no-burn)
- noburn="true"
- ;;
- -u|--upload)
- upload="true"
- ;;
- --no-upload)
- noupload="true"
- ;;
- -d|--debug)
- verbosedebug="true"
- verbose="true"
- ;;
- -v|--verbose)
- verbose="true"
- ;;
- --version)
- echo "Backup Manager $VERSION"
- _exit 0
- ;;
- --no-warnings)
- warnings="false"
- ;;
- -f|--force)
- force="true"
- ;;
- -c|--conffile)
- # in this case, $2 should be the conffile !
- if [[ -f $2 ]]; then
- conffile=$2
- else
- error "The -c option must be followed by an existing filename."
- usage
- fi
- # we shift here to avoid processing the file path
- shift
- ;;
- *)
- echo "Unknown option $1"
- usage
- break
- ;;
- esac
- shift
- done
- info "Backup Manager $VERSION - Copyright (c) 2004-2015 Alexis Sukrieh"
- # Display some more info if we're doing an action
- if [[ "$noupload" == "true" ]]\
- || [[ "$noburn" == "true" ]]\
- || [[ "$nopurge" == "false" ]]; then
- curr_time=`date +%Y-%m-%d%t%T`
- info "Process started at $curr_time"
- fi
- debug "Loading configuration file : \"$conffile\"."
- source $conffile
- # Override config's log level if specified by command line
- if [[ "$verbose" == "true" ]]; then
- if [[ "$verbosedebug" == "true" ]]; then
- BM_LOGGER_LEVEL="debug"
- else
- BM_LOGGER_LEVEL="info"
- fi
- fi
- if [[ "$warnings" == "false" ]]; then
- BM_LOGGER_LEVEL="error"
- fi
- # Sanitize will try to find deprecated vartiables,
- debug "Sanitizing the configuration file."
- source $libdir/sanitize.sh
- debug "Initializing environment"
- bm_init_env
- debug "Checking if logger is available"
- check_logger
- debug "Getting lock"
- get_lock
- check_filetypes
- # For security reasons, change the umask
- # for the backup-manager session.
- # Every file created by the process will be -rw------
- BM_UMASK=$(umask)
- umask 0077
- debug "Running pre-command"
- exec_pre_command || error "Unable to exec the pre-command"
- create_directories
- if [[ "$upload" == "true" ]]; then
- debug "Running the upload methods"
- upload_files
- _exit 0
- fi
- if [[ "$burn" == "true" ]]; then
- debug "Running the burning methods"
- burn_files
- _exit 0
- fi
- if [[ "$md5check" == "true" ]]; then
- debug "Runing the MD5 checks"
- check_cdrom_md5_sums
- _exit 0
- fi
- if [[ "$purge" == "true" ]]; then
- debug "Purging the repository"
- clean_repositories
- _exit 0
- fi
- # Default process : doing everything unless --no-flags
- # are given.
- if [[ "$nopurge" != "true" ]]; then
- debug "Purging the repository"
- bm_dbus_send_progress 10 "Cleaning repositories"
- clean_repositories
- fi
- debug "Building archives"
- bm_dbus_send_progress 20 "Building archives"
- make_archives
- if [[ "$noupload" != "true" ]]; then
- debug "Running the upload methods"
- bm_dbus_send_progress 60 "Uploading backups"
- upload_files
- fi
- if [[ "$noburn" != "true" ]]; then
- debug "Running the burning methods"
- bm_dbus_send_progress 80 "Burning backups"
- burn_files
- fi
- debug "Running post-command"
- bm_dbus_send_progress 90 "Cleaning up"
- exec_post_command || error "Unable to exec post-command."
- debug "Releasing lock"
- release_lock
- debug "Exiting"
- umask $BM_UMASK >/dev/null
- curr_time=`date +%Y-%m-%d%t%T`
- info "Process finished at $curr_time"
- bm_dbus_send_progress 100 "Finished"
- bm_dbus_send_event "shutdown" "0"
- exit 0