X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Fscripts%2Fstart-vservers;h=9e0c4ae5fb632b4a548ff2bceec64364a0c35756;hb=75385100bedf6d457e88bc2bb942a6f0771b0e06;hp=2844d47461dfe0595736e71249b992dca4eb54db;hpb=7fdb31f6a9475c02a5e56e3a83c22f37ede24792;p=util-vserver.git diff --git a/util-vserver/scripts/start-vservers b/util-vserver/scripts/start-vservers index 2844d47..9e0c4ae 100755 --- a/util-vserver/scripts/start-vservers +++ b/util-vserver/scripts/start-vservers @@ -31,7 +31,7 @@ function showHelp() { echo \ $"Usage: $(basename $0) [-c ] [-m ] [-j + + [--start|--stop] [--all|--[un]marked|--running|--stopped] -- + Please report bugs to $PACKAGE_BUGREPORT" exit 0 @@ -52,7 +52,27 @@ the GNU General Public License. This program has absolutely no warranty." 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 } ### @@ -60,12 +80,14 @@ function verifyVserver() 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 @@ -77,18 +99,18 @@ case "`basename $0`" in 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 @@ -98,25 +120,24 @@ test -n "$OPTION_FLAVOR" || { 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 @@ -136,35 +157,38 @@ EOF 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 @@ -174,7 +198,7 @@ done #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