mirror of
https://0xacab.org/liberate/backupninja.git
synced 2024-11-08 20:02:32 +01:00
78884142e7
The modelines added match the emacs lines already present and also set the filetype to sh (just like the emacs lines).
252 lines
8.0 KiB
Bash
252 lines
8.0 KiB
Bash
# -*- mode: sh; sh-basic-offset: 3; indent-tabs-mode: nil; -*-
|
|
# vim: set filetype=sh sw=3 sts=3 expandtab autoindent:
|
|
|
|
#####################################################
|
|
## VSERVERS RELATED FUNCTIONS FOR NINJAHELPER
|
|
##
|
|
## Depends on:
|
|
## - easydialog library
|
|
## - $conffile
|
|
##
|
|
## Global variables used and modified here:
|
|
## - $vservers_are_available (yes/no)
|
|
## - $found_vservers (list)
|
|
## - $selected_vservers (list)
|
|
## - $host_or_vservers (host/vservers/both)
|
|
##
|
|
|
|
##
|
|
## Get vservers-related variables.
|
|
## Then, if Vservers are enabled, check that:
|
|
## - VROOTDIR is valid;
|
|
## - at least one vserver can be found.
|
|
## If, and only if, the above conditions are all true:
|
|
## - set $vservers_are_available to 'yes';
|
|
## - set $found_vservers to the list of all vservers found on the system.
|
|
## This function has to be run once before a new helper is run.
|
|
## If the argument is "nodialog", use the backupninja's message functions
|
|
## instead of easydialog.
|
|
##
|
|
init_vservers() {
|
|
local arg=$1
|
|
# get global variables from the conffile
|
|
setfile $conffile
|
|
getconf vservers no
|
|
getconf VSERVERINFO /usr/sbin/vserver-info
|
|
getconf VSERVER /usr/sbin/vserver
|
|
getconf VROOTDIR `if [ -x "$VSERVERINFO" ]; then $VSERVERINFO info SYSINFO | grep '^ *vserver-Rootdir' | @AWK@ '{print $2}'; fi`
|
|
# canonicalize VROOTDIR
|
|
[ -z "$VROOTDIR" ] || VROOTDIR=`readlink --canonicalize $VROOTDIR`
|
|
# init this library's global variables
|
|
vservers_are_available=no
|
|
found_vservers=
|
|
selected_vservers=
|
|
host_or_vservers=host
|
|
# check vservers real availability
|
|
if [ $vservers = yes ]; then
|
|
if [ ! -x "$VSERVERINFO" ]; then
|
|
`if [ "$arg" = nodialog ]; then echo fatal; else echo "msgBox warning"; fi` \
|
|
"vservers enabled in $conffile, but vserver-info command was not found. Please set the VSERVERINFO configuration variable to its full path."
|
|
return
|
|
fi
|
|
if [ ! -x "$VSERVER" ]; then
|
|
`if [ "$arg" = nodialog ]; then echo fatal; else echo "msgBox warning"; fi` \
|
|
"vservers enabled in $conffile, but vserver command was not found. Please set the VSERVER configuration variable to its full path."
|
|
return
|
|
fi
|
|
if [ -z "$VROOTDIR" ]; then
|
|
`if [ "$arg" = nodialog ]; then echo fatal; else echo "msgBox warning"; fi` \
|
|
"vservers enabled in $conffile, but VROOTDIR is not set and could not be guessed."
|
|
return
|
|
fi
|
|
if [ ! -d "$VROOTDIR" ]; then
|
|
`if [ "$arg" = nodialog ]; then echo fatal; else echo "msgBox warning"; fi` \
|
|
"vservers enabled in $conffile, but VROOTDIR ($VROOTDIR) does not exist.";
|
|
return
|
|
fi
|
|
found_vservers=`ls $VROOTDIR | grep -E -v "lost\+found|ARCHIVES" | tr "\n" " "`
|
|
if [ -z "$found_vservers" ]; then
|
|
`if [ "$arg" = nodialog ]; then echo warning; else echo "msgBox warning"; fi` \
|
|
"vservers enabled in $conffile, but no vserver was found in $VROOTDIR.";
|
|
return
|
|
fi
|
|
vservers_are_available=yes
|
|
fi
|
|
}
|
|
|
|
##
|
|
## If all the arguments are existing vservers names, returns 0.
|
|
## Else, returns 1. Also returns 1 if no argument is given.
|
|
##
|
|
vservers_exist() {
|
|
[ $# -ge 1 ] || return 1
|
|
local args="$1"
|
|
local vserver i found
|
|
for vserver in $args ; do
|
|
found=no
|
|
for i in $found_vservers ; do
|
|
if [ $vserver = $i ]; then
|
|
found=yes
|
|
break
|
|
fi
|
|
done
|
|
[ $found = yes ] || return 1
|
|
done
|
|
return 0
|
|
}
|
|
|
|
##
|
|
## If all the arguments are running vservers names, returns 0.
|
|
## Else, returns 1. Also returns 1 if no argument is given.
|
|
##
|
|
vservers_running() {
|
|
[ $# -ge 1 ] || return 1
|
|
local args="$1"
|
|
local vserver
|
|
for vserver in $args ; do
|
|
$VSERVERINFO -q $vserver RUNNING || return 1
|
|
done
|
|
return 0
|
|
}
|
|
|
|
##
|
|
## If the argument is the name of a vserver selected by the current helper,
|
|
## echoes 'on' and returns 0.
|
|
## Else, echoes 'off' and returns 1.
|
|
##
|
|
vserver_is_selected() {
|
|
local vserver=$1
|
|
local vserver_is_selected=1
|
|
local i
|
|
for i in $selected_vservers ; do
|
|
[ "$vserver" == "$i" ] && vserver_is_selected=0
|
|
done
|
|
if [ $vserver_is_selected = 0 ]; then
|
|
echo on
|
|
else
|
|
echo off
|
|
fi
|
|
return $vserver_is_selected
|
|
}
|
|
|
|
##
|
|
## Have the user choose one Vserver among the existing ones.
|
|
## Set $selected_vservers to the chosen one's name.
|
|
## Returns 1 if cancelled or if Vservers are not available.
|
|
##
|
|
choose_one_vserver() {
|
|
[ "$vservers_are_available" == "yes" ] || return 1
|
|
local title=$1
|
|
local i=
|
|
local vserver=
|
|
REPLY=
|
|
while [ -z "$REPLY" ]; do
|
|
[ -n "$selected_vservers" ] && setDefault $selected_vservers
|
|
listBegin "$title" "Choose at least one Linux-Vserver to backup:"
|
|
for vserver in $found_vservers; do
|
|
listItem "$vserver" "Backup $vserver vserver"
|
|
done
|
|
listDisplay menu
|
|
[ $? = 0 ] || return 1
|
|
done
|
|
selected_vservers=$REPLY
|
|
}
|
|
|
|
##
|
|
## If Vservers are not enabled, set host_or_vservers='host' and then return
|
|
## Else, have the user choose if he/she wants to perform the backup on the host
|
|
## system or on one Vserver.
|
|
## Set, respectively, $host_or_vservers to 'host' or 'vservers'.
|
|
## Returns 1 if cancelled.
|
|
##
|
|
choose_host_or_one_vserver() {
|
|
if [ "$vservers_are_available" != "yes" ]
|
|
then
|
|
host_or_vservers='host'
|
|
return
|
|
fi
|
|
local title=$1
|
|
# if there is one, set the previously chosen item as the default
|
|
[ -n "$host_or_vservers" ] && setDefault $host_or_vservers
|
|
menuBox "$title - src" "Do you want to operate on the host system and/or on vservers?" \
|
|
"host" "Host system" \
|
|
"vserver" "One Vserver"
|
|
[ $? = 0 ] || return 1
|
|
case $REPLY in
|
|
"host")
|
|
host_or_vservers='host'
|
|
;;
|
|
"vserver")
|
|
host_or_vservers='vservers'
|
|
;;
|
|
esac
|
|
}
|
|
|
|
##
|
|
## If Vservers are not enabled, set host_or_vservers='host' and then return
|
|
## Else, have the user choose the target he/she wants to perform the backup on:
|
|
## - host system only;
|
|
## - some vservers only;
|
|
## - both the host system and some vservers.
|
|
## Set, respectively, $host_or_vservers to 'host', 'vservers', or 'both'
|
|
## Returns 1 if cancelled.
|
|
##
|
|
choose_host_or_vservers_or_both() {
|
|
if [ "$vservers_are_available" != "yes" ]
|
|
then
|
|
host_or_vservers='host'
|
|
return
|
|
fi
|
|
local title=$1
|
|
# if there is one, set the previously chosen item as the default
|
|
[ -n "$host_or_vservers" ] && setDefault $host_or_vservers
|
|
menuBox "$title - src" "Do you want to operate on the host system and/or on vservers?" \
|
|
"host" "Host system only" \
|
|
"vservers" "Vservers only" \
|
|
"both" "Host system and Vservers"
|
|
[ $? = 0 ] || return 1
|
|
case $REPLY in
|
|
"host")
|
|
host_or_vservers='host'
|
|
;;
|
|
"vservers")
|
|
host_or_vservers='vservers'
|
|
;;
|
|
"both")
|
|
host_or_vservers='both'
|
|
;;
|
|
esac
|
|
}
|
|
|
|
##
|
|
## Have the user choose among "all vservers" and a not-empty subset of these.
|
|
## Set $selected_vservers to 'all' or to a space-separated name list.
|
|
## Returns 1 if cancelled or if Vservers are not available.
|
|
##
|
|
choose_one_or_more_vservers() {
|
|
[ "$vservers_are_available" == "yes" ] || return 1
|
|
local title=$1
|
|
local i=
|
|
# UI
|
|
booleanBox "$title" "Do you want to backup all vservers?" ` [ -z "$selected_vservers" -o "$selected_vservers" == "all" ] || echo no`
|
|
if [ $? = 0 ]; then
|
|
selected_vservers="all"
|
|
else
|
|
# choose among the existing vservers
|
|
local vserver=
|
|
local vserver_was_selected=
|
|
REPLY=
|
|
while [ -z "$REPLY" ]; do
|
|
listBegin "$title" "Choose at least one Linux-Vserver to backup:"
|
|
# list existing vservers, preselecting the previously selected ones
|
|
for vserver in $found_vservers; do
|
|
listItem "$vserver" "Backup $vserver vserver" `vserver_is_selected $vserver`
|
|
done
|
|
listDisplay checklist
|
|
[ $? = 0 ] || return 1
|
|
done
|
|
# remove quotes around each vserver name
|
|
selected_vservers=`echo $REPLY | tr -d '"'`
|
|
fi
|
|
}
|