/usr/sbin/ninjahelper is in backupninja 1.0.2-1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 | #!/bin/bash
# -*- mode: sh; sh-basic-offset: 3; indent-tabs-mode: nil; -*-
# vim: set filetype=sh sw=3 sts=3 expandtab autoindent:
####################################################
## Functions
##
## returns the next available file name given a file
## in the form /etc/backup.d/10.sys
## sets variable $next_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
}
##
## menu for the wizards
##
donew() {
# (re-)initialize vservers support
init_vservers
# menu
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" -o "$result" = "" ] && return
run_wizard=${result}_wizard
$run_wizard
result=$?
# 0 is ok, 1 is cancel, anything else is bad.
if [ $result != 1 -a $result != 0 ]; then
echo "An error occurred ($result), bailing out. Hit return to continue."
read
fi
}
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_xedit() {
if [ -z "$EDITOR" -o ! -x "`which $EDITOR`" ]; then
if [ -h /etc/alternatives/editor -a -x "`readlink /etc/alternatives/editor`" ]; then
EDITOR="`readlink /etc/alternatives/editor`"
elif [ -x "`which nano`" ]; then
EDITOR="`which nano`"
elif [ -x "`which vim`" ]; then
EDITOR="`which vim`"
elif [ -x "`which vi`" ]; then
EDITOR="`which vi`"
else
echo "No suitable editor found."
echo "Please define $EDITOR or configure /etc/alternatives/editor."
exit
fi
fi
$EDITOR $1
}
do_run_test() {
backupninja --test --run $1
echo "Hit return to continue..."
read
}
do_disable() {
mv $1 $1.disabled
}
do_enable() {
mv $1 ${1%.*}
}
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##*.}" == "disabled" ]; 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") do_xedit $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
if [ ! -x "`which dialog`" ]; then
echo "ninjahelper is a menu based wizard for backupninja."
echo "It requires 'dialog' in order to run. Do you want to install dialog now?"
while true; do
echo -n "(yes/no): "
read install
if [ "$install" == "yes" ]; then
apt-get install dialog
break
elif [ "$install" == "no" ]; then
exit
else
echo "You must answer 'yes' or 'no'"
fi
done
fi
# bootstrap
conffile="/etc/backupninja.conf"
if [ ! -r "$conffile" ]; then
echo "Configuration file $conffile not found."
exit 1
fi
# find $libdirectory
libdirectory=`grep '^libdirectory' $conffile | /usr/bin/awk '{print $3}'`
if [ -z "$libdirectory" ]; then
if [ -d "/usr/lib/backupninja" ]; then
libdirectory="/usr/lib/backupninja"
else
echo "Could not find entry 'libdirectory' in $conffile."
exit 1
fi
else
if [ ! -d "$libdirectory" ]; then
echo "Lib directory $libdirectory not found."
exit 1
fi
fi
# include shared functions
. $libdirectory/easydialog
. $libdirectory/tools
. $libdirectory/vserver
# am I running as root?
if [ "$UID" != "0" ]; then
msgBox "warning" "`basename $0` must be run by root!"
exit 1
fi
# get global config options (second param is the default)
setfile $conffile
getconf configdirectory /etc/backup.d
if [ ! -d $configdirectory ]; then
msgBox "warning" "The backupninja configuration directory $configdirectory does not exist. Ninjahelper cannot run without it!"
exit 1
fi
getconf scriptdirectory /usr/share/backupninja
# load all the helpers
HELPERS=""
for file in `find $scriptdirectory -follow -name '*.helper'`; do
. $file
if [ $? != 0 ]; then
echo "An error occurred while loading $file. Hit return to continue."
read
fi
done
setApplicationTitle "ninjahelper"
setDimension 75 19
#####################################################
## main event loop
while true; do
menulist=
action=
let "i = 1"
for file in `find ${configdirectory} -follow -mindepth 1 -maxdepth 1 -type f ! -name '.*.swp' ! -name '*~' | sort -n`; do
menulist="$menulist $i $file"
actions[$i]=$file
let "i += 1"
done
menuBox "main menu" "Select a backup action for more options, or create a new action:" $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
|