HELPERS="$HELPERS dup:incremental_encrypted_remote_filesystem_backup" ### Functions do_dup_host_includes() { set -o noglob # choose the files to backup REPLY= while [ -z "$REPLY" ]; do formBegin "$dup_title - host system: includes" for ((i=0; i < ${#dup_default_includes[@]} ; i++)); do formItem include ${dup_default_includes[$i]} done formItem include "" formItem include "" formItem include "" formDisplay [ $? = 0 ] || return 1 dup_includes=($REPLY) done set +o noglob } do_dup_vserver() { # choose the vservers to backup (into $selected_vservers) choose_one_or_more_vservers "$dup_title" [ $? = 0 ] || return 1 set -o noglob # choose the files to backup REPLY= while [ -z "$REPLY" ]; do formBegin "$dup_title - vservers: includes" for ((i=0; i < ${#dup_default_includes[@]} ; i++)); do formItem include ${dup_default_includes[$i]} done formItem include "" formItem include "" formItem include "" formDisplay [ $? = 0 ] || return 1 dup_vsincludes=($REPLY) done set +o noglob } do_dup_excludes() { set -o noglob formBegin "$dup_title: excludes" for ((i=0; i < ${#dup_default_excludes[@]} ; i++)); do formItem exclude ${dup_default_excludes[$i]} done formItem exclude "" formItem exclude "" formItem exclude "" formDisplay [ $? = 0 ] || return 1 dup_excludes=($REPLY) set +o noglob } do_dup_src() { choose_host_or_vservers_or_both "$dup_title" [ $? = 0 ] || return 1 case $host_or_vservers in 'host') do_dup_host_includes [ $? = 0 ] || return 1 ;; 'vservers') do_dup_vserver [ $? = 0 ] || return 1 ;; 'both') do_dup_host_includes [ $? = 0 ] || return 1 do_dup_vserver [ $? = 0 ] || return 1 ;; *) return 1 ;; esac do_dup_excludes [ $? = 0 ] || return 1 _src_done="(DONE)" setDefault dest } do_dup_dest() { local replyconverted local thereply set -o noglob REPLY= while [ -z "$REPLY" -o -z "$dup_destdir" -o -z "$dup_desthost" -o -z "$dup_destuser" ]; do formBegin "$dup_title - destination: last three items are compulsory" formItem "desthost" "$dup_desthost" formItem "destuser" "$dup_destuser" formItem "destdir" "$dup_destdir" formItem "keep" "$dup_keep" formItem "incremental" "$dup_incremental" formItem "bandwidthlimit" "$dup_bandwidth" formItem "sshoptions" "$dup_sshoptions" formDisplay [ $? = 0 ] || return 1 IFS=$'' replyconverted=`echo $REPLY | tr '\n' :` IFS=$':' thereply=($replyconverted) IFS=$' \t\n' dup_desthost=${thereply[0]} dup_destuser=${thereply[1]} dup_destdir=${thereply[2]} dup_keep=${thereply[3]} dup_incremental=${thereply[4]} dup_bandwidth=${thereply[5]} dup_sshoptions=${thereply[6]} done set +o noglob _dest_done="(DONE)" setDefault gpg } do_dup_gpg() { set -o noglob # encryptkey ? REPLY= while [ -z "$REPLY" -o -z "$dup_gpg_encryptkey" ]; do inputBox "$dup_title - GnuPG" "Enter the GnuPG key ID to be used to encrypt the backups:" "$dup_gpg_encryptkey" [ $? = 0 ] || return 1 dup_gpg_encryptkey="$REPLY" done # passphrase ? REPLY= while [ -z "$REPLY" -o -z "$dup_gpg_password" ]; do passwordBox "$dup_title - GnuPG" "Enter the passphrase needed to unlock the key 0x$dup_gpg_encryptkey" [ $? = 0 ] || return 1 dup_gpg_password="$REPLY" done # sign ? booleanBox "$dup_title - GnuPG" "Sign the backups?" "$dup_gpg_sign" if [ $? = 0 ]; then dup_gpg_sign=yes else dup_gpg_sign=no fi set +o noglob _gpg_done="(DONE)" setDefault adv # TODO: replace the above line by the following when do_dup_conn is written # setDefault conn } # TODO: share rdiff.helper code in some lib, and use it here do_dup_conn() { _con_done="(DONE)" setDefault adv } do_dup_misc_options() { set -o noglob local replyconverted local thereply formBegin "$dup_title - misc. options" formItem "nicelevel" "$dup_nicelevel" formItem "testconnect" "$dup_testconnect" formItem "options" "$dup_options" formDisplay [ $? = 0 ] || return 1 IFS=$'' replyconverted=`echo $REPLY | tr '\n' :` IFS=$':' thereply=($replyconverted) IFS=$' \t\n' dup_nicelevel=${thereply[0]} dup_testconnect=${thereply[1]} dup_options=${thereply[2]} set +o noglob } # (rdiff.helper compatible interface... there could be some sode to share, hmmm.) do_dup_adv() { do_dup_misc_options [ $? = 0 ] || return 1 _adv_done="(DONE)" setDefault finish } do_dup_finish() { get_next_filename $configdirectory/90.dup cat > $next_filename <> $next_filename done set +o noglob fi cat >> $next_filename < ... (default = all) # vsinclude = # Any path specified in vsinclude is added to the include list for each vserver # listed in vsnames (or all if vsnames = all). # E.g. vsinclude = /home will backup the /home partition in every vserver # listed in vsnames. If you have vsnames = "foo bar baz", this vsinclude will # add to the include list /vservers/foo/home, /vservers/bar/home and # /vservers/baz/home. # Vservers paths are derived from $VROOTDIR. EOF if [ "$host_or_vservers" == vservers -o "$host_or_vservers" == both ]; then set -o noglob echo -e "vsnames = \"$selected_vservers\"\n" >> $next_filename for ((i=0; i < ${#dup_vsincludes[@]} ; i++)); do echo "vsinclude = ${dup_vsincludes[$i]}" >> $next_filename done set +o noglob fi # excludes cat >> $next_filename <> $next_filename done set +o noglob cat >> $next_filename <