#!/bin/sh # Filename: dirvish-setup # Purpose: create basic setup for dirvish(8) # Authors: grml-team (grml.org), (c) Michael Prokop # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2. ################################################################################ # Resources: # http://apt-get.dk/howto/backup/ # http://edseek.com/~jasonb/articles/dirvish_backup/advanced.html # http://www.dirvish.org/svn/contrib/admin/DailyEmailScript/dirvish-status.sh ################################################################################ set -e # shellcheck disable=SC1091 . /etc/grml/script-functions # shellcheck disable=SC1091 . /etc/grml/lsb-functions check4root check4progs dialog dirvish rsync ssh-keygen ssh-copy-id PN="$0" CONFFILE=/etc/dirvish/master.conf set +e write_conffile() { if [ -f "$CONFFILE" ] ; then MASTERINFO="Notice: $CONFFILE exists already so I will not touch it. Please do not forget to add $CLIENT to the file if you wan to use the 'Runall' functionality." else MASTERINFO="An initial master configuration ($CONFFILE) has been generated. Please adjust it according to your needs." cat > $CONFFILE << EOF # Master configuration file for dirvish, created by $PN on $(date) bank: $BACKUP_DIR exclude: lost+found/ # core # *~ # .nfs* # /var/lib/nfs/*tab # var/cache/apt/archives # var/cache/man # var/tmp # tmp # /dev # .kde/share/cache/* # .firefox/default/*/Cache/* Runall: $CLIENT 22:00 # add-another-client-here 22:00 # See http://www.dirvish.org/debian.howto.html for further details: expire-default: +30 days expire-rule: # MIN HR DOM MON DOW STRFTIME_FMT * * * * 1 +3 months * * 1-7 * 1 +1 year * * 1-7 1,4,7,10 1 * 10-20 * * * +4 days # * * * * 2-7 +15 days EOF fi } # TODO / integrate? cronsetup() { # shellcheck disable=SC1090 test -f "${HOME}/.keychain/$(uname -n)-sh" && . "${HOME}/.keychain/$(uname -n)-sh" } get_backup_dir() { # prompt user for directory which should be used BACKUP_DIR="$(dialog --stdout --inputbox 'Please choose the directory where backups should be placed' 0 0 /backups)" if ! [ -d "$BACKUP_DIR" ] ; then dialog --stdout --title "${PN}" --yesno "The directory $BACKUP_DIR does not yet exist. Do you want me to create it for you? " 0 0 RC=$? if [ ${RC} -eq 0 ]; then echo "mkdir $BACKUP_DIR" echo "chmod 700 $BACKUP_DIR" else echo "warning: $BACKUP_DIR does not exist, skipped creation as requested" fi fi } client_name() { CLIENT="$(dialog --stdout --inputbox 'Please choose the name for your client instance, also known as vault' 0 0 client1)" } tree_name() { TREE="$(dialog --stdout --inputbox 'Please choose the directory you want to backup from your client (also known as tree)' 0 0 /home)" } create_client_conf() { mkdir -p "${BACKUP_DIR}/${CLIENT}/dirvish" if [ -f "${BACKUP_DIR}/${CLIENT}/dirvish/default.conf" ] ; then ewarn "Warning: ${BACKUP_DIR}/${CLIENT}/dirvish/default.conf exists already, ignoring creation." ; eend 0 else cat > "${BACKUP_DIR}/${CLIENT}/dirvish/default.conf" << EOF # Configuration file of client-side for dirvish created by $PN on $(date) client: $CLIENTNAME tree: $TREE xdev: true index: gzip image-default: %Y-%m-%d exclude: var/cache/apt/archives/* var/cache/man/* tmp/* var/tmp/* rsh: ssh -i $HOME/.ssh/id_rsa_dirvish_${CLIENT} EOF fi } sshkey_setup() { CLIENTNAME="$(dialog --stdout --inputbox 'Please choose user login and hostname for the client you want to backup. Syntax: user@host' 0 0 root@"$(hostname)")" dialog --stdout --title "${PN}" --yesno "Do you want me to create ssh setup for client ${CLIENTNAME} using ssh-keygen and ssh-copy-id?" 0 0 RC=$? if [ ${RC} -eq 0 ]; then [ -d "$HOME/.ssh" ] || mkdir "$HOME/.ssh" einfo "Creating $HOME/.ssh/id_rsa_dirvish_${CLIENT} using ssh-keygen:" ssh-keygen -t rsa -f "$HOME/.ssh/id_rsa_dirvish_${CLIENT}" ; eend $? einfo "Running ssh-copy-id to copy ssh key to $CLIENTNAME:" ssh-copy-id -i "$HOME/.ssh/id_rsa_dirvish_${CLIENT}.pub" "$CLIENTNAME" ; eend $? fi } client_setup() { dialog --stdout --title "${PN}" --yesno "Do you want to backup $CLIENT via network? Answering with no will use localhost [$(hostname)] as client." 0 0 RC=$? if [ ${RC} -eq 0 ]; then sshkey_setup else CLIENTNAME=$(hostname) # use localhost only fi } display_info() { einfo "Running $PN was successful. Enjoy using dirvish!" ; eend 0 echo einfo "Please adjust ${BACKUP_DIR}/${CLIENT}/dirvish/default.conf according to your needs. $MASTERINFO Then run the following command to create an initial backup: dirvish --summary long --vault $CLIENT --init Find the backup inside $BACKUP_DIR/$CLIENT/$(date +%Y-%m-%d)/tree/ then. Documentation available at: man dirvish-locate.1 dirvish.conf.5 dirvish.8 dirvish-runall.8 dirvish-expire.8 /usr/share/doc/dirvish/HOWTO.upstream /usr/share/doc/dirvish/FAQ.html /usr/share/doc/dirvish/HOWTO.Debian.gz http://www.dirvish.org/ http://wiki.dirvish.org/ Please report bugs regarding ${PN}: http://grml.org/bugs/ " ; eend 0 } case "$1" in -h | --help | --h* ) echo "Usage: $PN" 1>&2 exit 1 ;; esac # now run the functions: get_backup_dir && \ client_name && \ tree_name && \ client_setup && \ create_client_conf && \ write_conffile && \ display_info ## END OF FILE ################################################################# # vim: ft=sh ai tw=80 expandtab