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
|
# -*- mode: sh; sh-basic-offset: 3; indent-tabs-mode: nil; -*-
#####################################################
## 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.
##
init_vservers() {
# 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 [ -f "$VSERVERINFO" ]; then $VSERVERINFO info SYSINFO |grep vserver-Rootdir | awk '{print $2}'; fi`
# 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
[ -n "$VROOTDIR" ] || (msgBox "warning" "VROOTDIR is not set in $conffile and could not be guessed."; return)
[ -d "$VROOTDIR" ] || (msgBox "warning" "VROOTDIR ($VROOTDIR) does not exist."; return)
found_vservers=`ls $VROOTDIR | grep -E -v "lost+found|ARCHIVES" | tr "\n" " "`
[ -n "$found_vservers" ] || return
vservers_are_available=yes
fi
}
##
## If the argument is the name of a vserver selected use 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
}
|