VSERVER (default: /usr/sbin/vserver)
VROOTDIR (default: `$VSERVERINFO info SYSINFO |grep vserver-Rootdir | awk '{print $2}'; fi`)
+NINJAHELPER
+===========
+
+Ninjahelper is an additional script which will walk you through the process of
+configuring backupninja. Ninjahelper has a menu driven curses based interface
+(using dialog).
+
+To add an additional 'wizard' to ninjahelper, follow these steps:
+
+(1) to add a helper for the handler "blue", create the file
+ blue.helper in the directory where the handlers live.
+ (ie /usr/share/backupninja).
+
+(2) next, you need to add your helper to the global HELPERS variable
+ and define the main function for your helper (the function name
+ is always <helper>_wizard). for example, blue.helper:
+ HELPERS="$HELPERS blue:description_of_this_helper
+ blue_wizard() {
+ ... do work here ...
+ }
+
+(3) check the examples of the included helpers to see how they are
+ written. The dialog functions are defined in easydialog.sh.
+
local perms=`ls -ld $file`
perms=${perms:4:6}
if [ "$perms" != "------" ]; then
- echo "Configuration files must not be group or world readable! Dying on file $file"
- fatal "Configuration files must not be group or world readable! Dying on file $file"
+ echo "Configuration files must not be group or world writable/readable! Dying on file $file"
+ fatal "Configuration files must not be group or world writable/readable! Dying on file $file"
fi
if [ `ls -ld $file | awk '{print $3}'` != "root" ]; then
echo "Configuration files must be owned by root! Dying on file $file"
#!/bin/bash
# copyright 2002 lmoore@tump.com under the terms of the GNU LGPL.
+# additions 2005 collective@riseup.net
# whiptail has trouble being called in the foo=$(whiptail ...) fashion for
# some reason. this is very annoying. this means that we need to use
}
setHelp() {
- HELP="$@"
+ HELP="$@"
}
setDimension() {
_genericListBox --menu "$@"
}
+## a menu box with additional help info displayed
+## at the bottom of the window when an item is selected
menuBoxHelp() {
HELP="--item-help"
_genericListBox --menu "$@"
return $status
}
+## a menu box with an addition button 'help'
menuBoxHelpFile() {
HELP="--help-button"
_genericListBox --menu "$@"
return $status
}
-
checkBox() {
_genericListBox --checklist "$@"
}
return $status
}
+
+#########################################################
+## begin-item-display style lists
+##
+## these lists are built by calling fuctions multiple times.
+## this can make it easier to build your list in a loop
+##
+
+listBegin() {
+ _menu_title=$1
+ _menu_msg=$2
+ _menu_items=0
+ _menu_text=
+ _menu_labels=
+}
+
+listItem() {
+ _menu_labels[$_menu_items]=$1
+ _menu_text[$_menu_items]=$2
+ let "_menu_items += 1"
+}
+
+
+##
+## takes one of:
+## menu, checklist, radiolist
+##
+listDisplay() {
+ boxtype=$1
+ local temp=$(mktemp -t) || exit 1
+ trap "rm -f $temp" 0
+
+ (
+ echo -ne " $HELP $_DEFAULT "
+ echo -ne " --backtitle '$BACKTITLE' "
+ echo -ne " --title '$_menu_title' "
+ echo -ne " --$boxtype '$_menu_msg' "
+ echo -ne " $HEIGHT $WIDTH 10 "
+ for ((i=0; i < $_menu_items ; i++)); do
+ label=${_menu_labels[$i]}
+ text=${_menu_text[$i]}
+ echo -ne " $label '$text' "
+ done
+ ) | xargs $DIALOG 2> $temp
+
+ local status=$?
+ REPLY=""
+ [ $status = 0 ] && REPLY=`cat $temp`
+ rm -f $temp
+ _DEFAULT=
+ return $status
+}
+
+####################################################
+## FORM
+
_form_gap=2
-startForm() {
+formBegin() {
_form_title=$1
_form_items=0
_form_labels=
let "_form_items += 1"
}
-displayForm() {
+formDisplay() {
local temp=$(mktemp -t) || exit 1
max_length=0
done
let "max_length += 2"
- local form=
local xpos=1
(
echo -n -e "--form '$_form_title' 0 0 20"
for ((i=0; i < $_form_items ; i++)); do
label=${_form_labels[$i]}
text=${_form_text[$i]}
-# if [ "$text" == "" ]; then
-# text='_empty_'
-# fi
- echo -n -e "$form $label $xpos 1 '$text' $xpos $max_length 30 30"
+ echo -n -e " $label $xpos 1 '$text' $xpos $max_length 30 30"
let "xpos += _form_gap"
done
) | xargs $DIALOG 2> $temp
+HELPERS="$HELPERS ldap:ldap_database_backup"
ldap_create_file() {
while true; do
+HELPERS="$HELPERS mysql:mysql_database_backup"
do_mysql_user() {
inputBox "mysql action wizard" "specify a system user:"
+
+HELPERS="$HELPERS rdiff:incremental_remote_filesystem_backup"
+
do_rdiff_dest() {
- startForm "rdiff action wizard"
+ formBegin "rdiff action wizard"
formItem "keep" "$rdiff_keep"
formItem "dest_directory" "$rdiff_directory"
formItem "dest_host" "$rdiff_host"
formItem "dest_user" "$rdiff_user"
- displayForm
+ formDisplay
[ $? = 1 ] && return;
set -- $REPLY
}
do_rdiff_src() {
- startForm "rdiff action wizard: includes"
+ formBegin "rdiff action wizard: includes"
formItem include /var/spool/cron/crontabs
formItem include /var/backups
formItem include /etc
formItem include
formItem include
formItem include
- displayForm
+ formDisplay
[ $? = 1 ] && return;
rdiff_includes=
done
set +o noglob
- startForm "rdiff action wizard: excludes"
+ formBegin "rdiff action wizard: excludes"
formItem exclude '/home/*/.gnupg'
formItem exclude
formItem exclude
- displayForm
+ formDisplay
[ $? = 1 ] && return;
rdiff_excludes=
+HELPERS="$HELPERS sys:general_hardware_and_system_info"
sys_wizard() {
require_packages hwinfo
####################################################
## Functions
+function check_perms() {
+ local file=$1
+ local perms=`ls -ld $file`
+ perms=${perms:4:6}
+ if [[ "$perms" != "------" && "$perms" != "r--r--" ]]; then
+ echo $perms
+ echo "helper scripts must not be group or world writable! Dying on file $file"
+ exit
+ fi
+ if [ `ls -ld $file | awk '{print $3}'` != "root" ]; then
+ echo "helper scripts must be owned by root! Dying on file $file"
+ exit
+ fi
+}
+
+
##
## returns the next available file name given a file
## in the form /etc/backup.d/10.sys
done
}
-doradiobox() {
- defaultchoice="red is.pretty on"
- choices="green is_nice_too off blue i_love_blue off yellow is.bright off orange make.me.hungry off"
- radioBox "radio title" "choose one color" $defaultchoice $choices
- case $? in
- 0) ;;
- 1) echo "color choice cancelled..."; sleep 1;;
- 255) echo "something went wrong, exiting..."
- exit 1 ;;
- esac
- result="$REPLY"
- msgBox "message title" "you said $result."
-}
-
+##
+## menu for the wizards
+##
donew() {
- menuBox "new action menu" "select an action to create" \
- return "return to main menu" \
- sys "general hardware and system info" \
- mysql "mysql database backup" \
- ldap "ldap database backup" \
- rdiff "incremental filesystem backup"
-
- [ $? = 1 ] && return;
- result="$REPLY"
- case "$result" in
- "sys") sys_wizard;;
- "mysql") mysql_wizard;;
- "ldap") ldap_wizard;;
- "rdiff") rdiff_wizard;;
- "return") return;;
- esac
+ listBegin "new action menu" "select an action to create"
+ listItem return "return to main menu"
+ for data in $HELPERS; do
+ data=${data//_/ }
+ helper_function=${data%%:*}
+ helper_info=${data##*:}
+ listItem $helper_function "$helper_info"
+ done
+ listDisplay menu
+
+ [ $? = 1 ] && return
+ result="$REPLY"
+ [ "$result" = "return" ] && return
+ result=${result}_wizard
+ $result
}
do_rm_action() {
exit 1
fi
+# load all the helpers
+HELPERS=""
for file in `find $scriptdir -follow -name '*.helper'`; do
+ check_perms $file
. $file
done