X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Fscripts%2Fstart-vservers;h=672843729c2fe1e77fc9977fe3d8eda015f2d8bb;hb=5454ebed348c7647cc2f7777c4d012864a1e1f60;hp=960ee68110976fe2ba295ec43fa722a419a30afa;hpb=8d9ef2531945fa907484af62431ab5ff8a74f7c1;p=util-vserver.git diff --git a/util-vserver/scripts/start-vservers b/util-vserver/scripts/start-vservers index 960ee68..6728437 100755 --- a/util-vserver/scripts/start-vservers +++ b/util-vserver/scripts/start-vservers @@ -19,7 +19,7 @@ : ${UTIL_VSERVER_VARS:=/usr/lib/util-vserver/util-vserver-vars} test -e "$UTIL_VSERVER_VARS" || { - echo "Can not find util-vserver installation; aborting..." >&2 + echo $"Can not find util-vserver installation (the file '$UTIL_VSERVER_VARS' would be expected); aborting..." >&2 exit 1 } . "$UTIL_VSERVER_VARS" @@ -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,17 +120,24 @@ test -n "$OPTION_FLAVOR" || { exit 1 } -vservers=( "$@" ) -test -z "$OPTION_ALL" || getAllVservers vservers +vservers=( "$@" "${tmp_vservers[@]}" ) + +orig_vservers=$vservers +i=${#vservers[*]} -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 +while test $i -gt 0; do + let --i + d=$__CONFDIR/${vservers[$i]}/apps/init + f=$d/mark + { test -n "$OPTION_MARK" -a -r "$f" && grep -qx "$OPTION_MARK" "$f"; } || \ + { test -z "$OPTION_MARK" && test ! -e "$f"; } || \ + unset vservers[$i] +done -defaulttty="$CONFDIR/.defaults/apps/init/tty" -test -c "$defaulttty" || defaulttty=$(tty) -test -c "$defaulttty" || defaulttty=/dev/null +makedir=$($_MKTEMPDIR vserver-init.XXXXXX) +okfile=$($_MKTEMP vserver-init.XXXXXX) +passedfile=$($_MKTEMP vserver-init.XXXXXX) +trap "$_RM -rf $makedir $resultfile $passedfile" EXIT test_cmd=false case "$OPTION_FLAVOR" in @@ -116,63 +145,50 @@ case "$OPTION_FLAVOR" in stop) test_cmd="! ${_VSERVER} --silent '\$*' status";; esac - { cat <>$passedfile ; \ -${TAB}$_VSERVER --sync ${OPTION_DEBUG:+--debug} "\$*" ${OPTION_FLAVOR} >\$(TTY) 2>\$(TTY) <\$(TTY) ; } +${TAB}$_VSERVER --defaulttty --sync ${OPTION_DEBUG:+--debug} "\$*" ${OPTION_FLAVOR}; } ${TAB}echo -n '.' >>$okfile ${TAB}@touch "\$@" EOF echo -ne "all:\t" for i in "${vservers[@]}"; do + verifyVserver "$i" || continue + echo -n ".$i.stamp " done echo } >$makedir/Makefile -orig_vservers=$vservers -i=${#vservers[*]} - -while test $i -gt 0; do - let --i - d=$CONFDIR/${vservers[$i]}/apps/init - { test "$OPTION_MARK" && grep -qx "$OPTION_MARK" "$d"/mark; } || \ - { test -z "$OPTION_MARK" && test ! -e "$d"/mark; } || \ - unset vservers[$i] -done - 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 - test ! -e $d/tty || { - echo -e ".$vserver.stamp:\tTTY=$d/tty" >>$makedir/Makefile - } + 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 @@ -182,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 -exit 0 \ No newline at end of file +test -s "$passedfile" || exit 0 +test -s "$okfile" || exit 1 +$_CMP -s "$passedfile" "$okfile" || exit 2 +exit 0