X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=ninjahelper;fp=ninjahelper;h=9631b80e9c41742b253ca07ebeaa7f401c83a48e;hb=4c8e2839949be4603fbb8fb9e7a7e536e59c1dc4;hp=0000000000000000000000000000000000000000;hpb=2046272df5e3efeb8c6174b77c807ed40a2e3bd1;p=matthijs%2Fupstream%2Fbackupninja.git diff --git a/ninjahelper b/ninjahelper new file mode 100755 index 0000000..9631b80 --- /dev/null +++ b/ninjahelper @@ -0,0 +1,221 @@ +#!/bin/bash + +#################################################### +## Functions + +## +## returns the next available file name given a file +## in the form /etc/backup.d/10.sys +## sets variable $returned_filename +## +get_next_filename() { + next_filename=$1 + dir=`dirname $next_filename` + file=`basename $next_filename` + number=${file:0:2} + suffix=${file:3} + while [ -f $next_filename ]; do + let "number += 1" + next_filename="$dir/$number.$suffix" + done +} + +## +## installs packages (passed in as $@) if not present +## +require_packages() { + for pkg in "$@"; do + installed=`dpkg -s $pkg | grep 'ok installed'` + if [ -z "$installed" ]; then + booleanBox "install $pkg?" "This backup action requires package $pkg. Do you want to install it now?" + if [ $? = 0 ]; then + apt-get install $pkg + echo "hit return to continue...." + read + fi + fi + 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." +} + +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 +} + +do_rm_action() { + booleanBox "remove action" "Are you sure you want to remove action file $1?" + if [ $? = 0 ]; then + rm $1; + fi +} + +do_run() { + backupninja --run $1 + echo "Hit return to continue..." + read +} + +do_run_test() { + backupninja --test --run $1 + echo "Hit return to continue..." + read +} + +do_disable() { + dir=`dirname $1` + base=`basename $1` + mv $dir/$base $dir/0-$base +} + +do_enable() { + dir=`dirname $1` + base=`basename $1` + mv $dir/$base $dir/${base:2} +} + +do_rename() { + dir=`dirname $1` + filename=`basename $1` + inputBox "rename action" "enter a new filename" $filename + mv $dir/$filename $dir/$REPLY +} + +doaction() { + action=$1 + base=`basename $action` + if [ "${base:0:2}" == "0-" ]; then + enable="enable"; + else + enable="disable"; + fi + while true; do + menuBox "action menu" "$action $first" \ + main "return to main menu" \ + view "view configuration" \ + xedit "launch external editor" \ + $enable "$enable action" \ + name "change the filename" \ + run "run this action now" \ + test "do a test run" \ + kill "remove this action" + [ $? = 1 ] && return; + result="$REPLY" + case "$result" in + "view") dialog --textbox $action 0 0;; + "xedit") $EDITOR $action;; + "disable") do_disable $action; return;; + "enable") do_enable $action; return;; + "name") do_rename $action; return;; + "run") do_run $action;; + "test") do_run_test $action;; + "kill") do_rm_action $action; return;; + "main") return;; + esac + done +} + +##################################################### +## begin program + +conffile="/etc/backupninja.conf" +if [ ! -r "$conffile" ]; then + echo "Configuration file $conffile not found." + exit 1 +fi +scriptdir=`grep scriptdirectory $conffile | awk '{print $3}'` +if [ ! -n "$scriptdir" ]; then + echo "Cound not find entry 'scriptdirectory' in $conffile" + exit 1 +fi +if [ ! -d "$scriptdir" ]; then + echo "Script directory $scriptdir not found." + exit 1 +fi +configdirectory=`grep configdirectory $conffile | awk '{print $3}'` +if [ ! -n "$configdirectory" ]; then + echo "Cound not find entry 'configdirectory' in $conffile" + exit 1 +fi +if [ ! -d "$configdirectory" ]; then + echo "Configuration directory $configdirectory not found." + exit 1 +fi + +. $scriptdir/easydialog.sh + +if [ "$UID" != "0" ]; then + msgBox "warning" "ninjahelper must be run by root!" + exit 1 +fi + +for file in `find $scriptdir -follow -name '*.helper'`; do + . $file +done + +setApplicationTitle "ninjahelper" +setDimension 75 19 + +##################################################### +## main event loop + +while true; do + +menulist= +action= +let "i = 1" +for file in `find $conf/etc/backup.d/ -type f | sort -n`; do + menulist="$menulist $i $file" + actions[$i]=$file + let "i += 1" +done + +menuBox "main menu" "select an action to edit" $menulist \ + new "create a new backup action" \ + quit "leave ninjahelper" + +[ $? = 1 -o $? = 255 ] && exit 0; + +choice="$REPLY" +if [ "$choice" == "new" ]; then + donew; +elif [ "$choice" == "quit" ]; then + exit 0; +else + action=${actions[$choice]}; + if [ -f "$action" ]; then + doaction $action + else + msgBox "error" "error: cannot find the file '$action'" + fi +fi + + +done