{
echo \
$"Usage: $(basename $0) [-c <CFGDIR>] [-m <MARK>] [-j <NUM] [--test]
- [--start|--stop] [--all] -- <name>+
+ [--start|--stop] [--all|--[un]marked|--running|--stopped] -- <name>+
Please report bugs to $PACKAGE_BUGREPORT"
exit 0
function verifyVserver()
{
- true
+ local xtra="${2:+ mentioned in '$2'}"
+ case x$1 in
+ (x\#*|x)
+ return 1;; # skip empty and comment lines
+ ($__CONFDIR/*)
+ warning "This version of 'start-vservers' supports only short vserver names; try to remove the '$__CONFDIR' from '$1'$xtra"
+ return 1
+ ;;
+ (/*)
+ warning "This version of 'start-vservers' supports only short vserver names; '$1'$xtra is not possible"
+ return 1
+ ;;
+ (*)
+ $_VSERVER_INFO -q "$__CONFDIR/$1" VDIR || {
+ warning "Vserver '$1'$xtra does not exist; skipping it..."
+ return 1;
+ }
+ ;;
+ esac
+
+ return 0
}
###
set +e
-tmp=$(getopt -o c:j:m: --long debug,help,version,start,stop,test,all -n "$0" -- "$@") || exit 1
+tmp=$(getopt -o c:j:m: \
+ --long debug,help,version,start,stop,test,$VS_ALLVSERVERS_ARGS \
+ -n "$0" -- "$@") || exit 1
eval set -- "$tmp"
+declare -a tmp_vservers=()
declare -r TAB=$(echo -en "\t")
OPTION_MARK=
-OPTION_ALL=
OPTION_PARALLEL=99
OPTION_DEBUG=
NOOPTION_DEBUG=1
esac
while true; do
+ getAllVserversByArg tmp_vservers "$1" || \
case "$1" in
- --help) showHelp $0 ;;
- --version) showVersion $0 ;;
- -c) CONFDIR=$2; shift;;
- -m) OPTION_MARK=$2; shift;;
- -j) OPTION_PARALLEL=$2; shift;;
- --start) OPTION_FLAVOR=start;;
- --stop) OPTION_FLAVOR=stop;;
- --all) OPTION_ALL=1;;
- --debug) OPTION_DEBUG=1; NOOPTION_DEBUG=; set -x;;
- --) shift; break;;
- *) echo $"$0: internal error; arg=='$1'" >&2; exit 1;;
+ (--help) showHelp $0 ;;
+ (--version) showVersion $0 ;;
+ (-c) CONFDIR=$2; shift;;
+ (-m) OPTION_MARK=$2; shift;;
+ (-j) OPTION_PARALLEL=$2; shift;;
+ (--start) OPTION_FLAVOR=start;;
+ (--stop) OPTION_FLAVOR=stop;;
+ (--debug) OPTION_DEBUG=1; NOOPTION_DEBUG=; set -x;;
+ (--) shift; break;;
+ (*) echo $"$0: internal error; arg=='$1'" >&2; exit 1;;
esac
shift
done
exit 1
}
-vservers=( "$@" )
-test -z "$OPTION_ALL" || getAllVservers vservers
+vservers=( "$@" "${tmp_vservers[@]}" )
orig_vservers=$vservers
i=${#vservers[*]}
while test $i -gt 0; do
let --i
- d=$CONFDIR/${vservers[$i]}/apps/init
+ d=$__CONFDIR/${vservers[$i]}/apps/init
f=$d/mark
- { test "$OPTION_MARK" -a -r "$f" && grep -qx "$OPTION_MARK" "$f"; } || \
+ { test -n "$OPTION_MARK" -a -r "$f" && grep -qx "$OPTION_MARK" "$f"; } || \
{ test -z "$OPTION_MARK" && test ! -e "$f"; } || \
unset vservers[$i]
done
-makedir=$(mktemp -d /tmp/vserver-init.XXXXXX)
-okfile=$(mktemp /tmp/vserver-init.XXXXXX)
-passedfile=$(mktemp /tmp/vserver-init.XXXXXX)
-trap "rm -rf $makedir $resultfile $passedfile" EXIT
+makedir=$($_MKTEMPDIR /tmp/vserver-init.XXXXXX)
+okfile=$($_MKTEMP /tmp/vserver-init.XXXXXX)
+passedfile=$($_MKTEMP /tmp/vserver-init.XXXXXX)
+trap "$_RM -rf $makedir $resultfile $passedfile" EXIT
test_cmd=false
case "$OPTION_FLAVOR" in
echo -ne "all:\t"
for i in "${vservers[@]}"; do
+ verifyVserver "$i" || continue
+
echo -n ".$i.stamp "
done
echo
} >$makedir/Makefile
for i in "${vservers[@]}"; do
- d=$CONFDIR/$i/apps/init
+ d="$__CONFDIR/$i"/apps/init
echo "$i"
test -e "$d"/depends || continue
cat "$d"/depends
done | sort -u | while read vserver; do
- d=$CONFDIR/$vserver/apps/init
+ verifyVserver "$vserver" || continue
+ d="$__CONFDIR/$vserver"/apps/init
case "$OPTION_FLAVOR" in
- start)
+ (start)
if test -e "$d"/depends; then
echo -ne ".$vserver.stamp:\t"
cat "$d"/depends | while read dep; do
- verifyVserver "$dep"
+ verifyVserver "$dep" "$d"/depends || continue
echo -n ".$dep.stamp "
done
echo
fi >>$makedir/Makefile
;;
- stop)
+ (stop)
if test -e "$d"/depends; then
cat "$d"/depends | while read dep; do
- verifyVserver "$dep"
- echo -ne ".$dep.stamp:\t.$vserver.stamp"
+ verifyVserver "$dep" "$d"/depends || continue
+ echo -e ".$dep.stamp:\t.$vserver.stamp"
done
echo
fi >>$makedir/Makefile
#cat $makedir/Makefile
make -k ${NOOPTION_DEBUG:+-s} ${OPTION_PARALLEL:+-j$OPTION_PARALLEL} -C $makedir
-test -s "$passedfile" || exit 0
-test -s "$okfile" || exit 1
-cmp -s "$passedfile" "$okfile" || exit 2
+test -s "$passedfile" || exit 0
+test -s "$okfile" || exit 1
+$_CMP -s "$passedfile" "$okfile" || exit 2
exit 0