vshost-util-vserver

Build script and sources for util-vserver.
git clone https://ccx.te2000.cz/git/vshost-util-vserver
Log | Files | Refs

start-vservers (5252B)


      1 #! /bin/bash
      2 
      3 # Copyright (C) 2004 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
      4 #  
      5 # This program is free software; you can redistribute it and/or modify
      6 # it under the terms of the GNU General Public License as published by
      7 # the Free Software Foundation; version 2 of the License.
      8 #  
      9 # This program is distributed in the hope that it will be useful,
     10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     12 # GNU General Public License for more details.
     13 #  
     14 # You should have received a copy of the GNU General Public License
     15 # along with this program; if not, write to the Free Software
     16 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
     17 
     18 # Usage: start-vservers [-c <CFGDIR>] [-m <MARK>] [-j <NUM>] [--start|--stop|--status|--condrestart|--restart] [--test] [--all] [--debug] -- <name>+
     19 
     20 : ${UTIL_VSERVER_VARS:=/usr/lib/util-vserver/util-vserver-vars}
     21 test -e "$UTIL_VSERVER_VARS" || {
     22     echo $"Can not find util-vserver installation (the file '$UTIL_VSERVER_VARS' would be expected); aborting..." >&2
     23     exit 1
     24 }
     25 . "$UTIL_VSERVER_VARS"
     26 . "$_LIB_FUNCTIONS"
     27 
     28 ### Some local functions
     29 
     30 function showHelp()
     31 {
     32     echo \
     33 $"Usage: $(basename $0) [-c <CFGDIR>] [-m <MARK>] [-j <NUM] [--test]
     34              [--start|--stop] [--all|--[un]marked|--running|--stopped] -- <name>+
     35 
     36 Please report bugs to $PACKAGE_BUGREPORT"
     37     exit 0
     38 }
     39 
     40 
     41 function showVersion()
     42 {
     43     echo \
     44 $"start-vserver $PACKAGE_VERSION -- starts/stops a bunch of vservers
     45 This program is part of $PACKAGE_STRING
     46 
     47 Copyright (C) 2004 Enrico Scholz
     48 This program is free software; you may redistribute it under the terms of
     49 the GNU General Public License.  This program has absolutely no warranty."
     50     exit 0
     51 }
     52 
     53 function verifyVserver()
     54 {
     55     local xtra="${2:+ mentioned in '$2'}"
     56     case x$1 in
     57 	(x\#*|x)
     58 		return 1;;	# skip empty and comment lines
     59 	($__CONFDIR/*)
     60 		warning "This version of 'start-vservers' supports only short vserver names; try to remove the '$__CONFDIR' from '$1'$xtra"
     61 		return 1
     62 		;;
     63 	(/*)
     64 		warning "This version of 'start-vservers' supports only short vserver names; '$1'$xtra is not possible"
     65 		return 1
     66 		;;
     67 	(*)
     68 		$_VSERVER_INFO -q "$__CONFDIR/$1" VDIR || {
     69 			warning "Vserver '$1'$xtra does not exist; skipping it..."
     70 			return 1;
     71 		}
     72 		;;
     73     esac
     74 
     75     return 0
     76 }
     77 
     78 ###
     79 
     80 set +e
     81 
     82 
     83 tmp=$(getopt -o c:j:m: \
     84       --long debug,help,version,start,stop,test,$VS_ALLVSERVERS_ARGS \
     85       -n "$0" -- "$@") || exit 1
     86 eval set -- "$tmp"
     87 
     88 declare -a tmp_vservers=()
     89 declare -r TAB=$(echo -en "\t")
     90 OPTION_PARALLEL=99
     91 OPTION_DEBUG=
     92 NOOPTION_DEBUG=1
     93 
     94 case "`basename $0`" in
     95     start-*)	OPTION_FLAVOR=start;;
     96     stop-*)	OPTION_FLAVOR=stop;;
     97     *)		OPTION_FLAVOR=;;
     98 esac
     99 
    100 gav_args=()
    101 while true; do
    102     case "$1" in
    103 	(--help)    	showHelp    $0 ;;
    104 	(--version) 	showVersion $0 ;;
    105 	(-c)		CONFDIR=$2;     shift;;
    106 	(-j)		OPTION_PARALLEL=$2; shift;;
    107 	(--start)	OPTION_FLAVOR=start;;
    108 	(--stop)	OPTION_FLAVOR=stop;;
    109 	(--debug)	OPTION_DEBUG=1; NOOPTION_DEBUG=; set -x;;
    110 	(--)	   	shift; break;;
    111 	(-m)		gav_args=( "${gav_args[@]}" --mark "$2" )
    112 			shift
    113 			;;
    114 	(*)		gav_args=( "${gav_args[@]}" "$1" );;
    115     esac
    116     shift
    117 done
    118 
    119 if test "${#gav_args[@]}" -gt 0; then
    120     if ! getAllVserversByArg tmp_vservers "${gav_args[@]}"; then
    121 	echo $"$0: internal error; arg=='$1'" >&2
    122 	exit 1
    123     fi
    124 fi
    125 
    126 test -n "$OPTION_FLAVOR" || {
    127     echo "$0: unknown invocation method; aborting..." >&2
    128     exit 1
    129 }
    130 
    131 vservers=( "$@" "${tmp_vservers[@]}" )
    132 
    133 makedir=$($_MKTEMPDIR vserver-init.XXXXXX)
    134 okfile=$($_MKTEMP     vserver-init.XXXXXX)
    135 passedfile=$($_MKTEMP vserver-init.XXXXXX)
    136 trap "$_RM -rf $makedir $okfile $passedfile" EXIT
    137 
    138 test_cmd=false
    139 case "$OPTION_FLAVOR" in
    140     start)	test_cmd="${_VSERVER}   --silent '\$*' status";;
    141     stop)	test_cmd="! ${_VSERVER} --silent '\$*' status";;
    142 esac
    143 
    144 {
    145     cat <<EOF
    146 .%.stamp:
    147 ${TAB}$test_cmd || { \
    148 ${TAB}echo -n '.' >>$passedfile ; \
    149 ${TAB}$_VSERVER --defaulttty --sync ${OPTION_DEBUG:+--debug} "\$*" ${OPTION_FLAVOR}; }
    150 ${TAB}echo -n '.' >>$okfile
    151 ${TAB}@touch "\$@"
    152 EOF
    153 
    154     echo -ne "all:\t"
    155     for i in "${vservers[@]}"; do
    156 	verifyVserver "$i" || continue
    157 
    158 	echo -n ".$i.stamp "
    159     done
    160     echo
    161 } >$makedir/Makefile
    162 
    163 for i in "${vservers[@]}"; do
    164     d="$__CONFDIR/$i"/apps/init
    165     echo "$i"
    166     test -e "$d"/depends || continue
    167     cat "$d"/depends
    168 done | sort -u | while read vserver; do
    169     verifyVserver "$vserver" || continue
    170     d="$__CONFDIR/$vserver"/apps/init
    171 
    172     case "$OPTION_FLAVOR" in
    173 	(start)
    174 	    if test -e "$d"/depends; then
    175 		echo -ne ".$vserver.stamp:\t"
    176 		cat "$d"/depends | while read dep; do
    177 		    verifyVserver "$dep" "$d"/depends || continue
    178 		    echo -n ".$dep.stamp "
    179 		done
    180 		echo
    181 	    fi >>$makedir/Makefile
    182 	    ;;
    183 	(stop)
    184 	    if test -e "$d"/depends; then
    185 		cat "$d"/depends | while read dep; do
    186 		    verifyVserver "$dep" "$d"/depends || continue
    187 		    echo -e ".$dep.stamp:\t.$vserver.stamp"
    188 		done
    189 		echo
    190 	    fi >>$makedir/Makefile
    191     esac
    192 done
    193 
    194 #cat $makedir/Makefile
    195 make -k ${NOOPTION_DEBUG:+-s} ${OPTION_PARALLEL:+-j$OPTION_PARALLEL} -C $makedir
    196 
    197 test  -s "$passedfile"           || exit 0
    198 test  -s "$okfile"               || exit 1
    199 $_CMP -s "$passedfile" "$okfile" || exit 2
    200 exit 0