4 # Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; version 2 of the License.
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 : ${UTIL_VSERVER_VARS:=$(dirname $0)/util-vserver-vars}
22 test -e "$UTIL_VSERVER_VARS" || {
23 echo "Can not find util-vserver installation; aborting..."
26 . "$UTIL_VSERVER_VARS"
29 ### Some local functions
34 $"Usage: $(basename $0) [-s|--sync] [-v|--verbose]
35 [--] <vserver> <command> <args>*
37 <vserver> is the name of a vserver.
39 Possible commands are:
40 start ... starts the specified vserver
41 stop ... stops the specified vserver
42 restart ... restarts the specified vserver; this is the subsequent
43 execution of a synchronized 'stop' and a 'start'
44 condrestart ... restarts the vserver when it is running already
45 suexec <user> <shell-command> <args*>
46 ... executes a command as the specified user in the vserver
47 exec <shell-command> <args*>
48 ... executes a command as root in the vserver
49 enter ... executes the configured shell in the vserver
50 chkconfig <chkconfig-options*>
51 ... modifies the init-system; currently, only Red Hat's
52 chkconfig is supported
53 running ... succeeds iff the vserver is running
54 status ... gives out some human readable status information about
55 the vserver, and succeeds iff the vserver is running
58 ... builds a new vserver from scratch
60 apt-get,apt-config,apt-cache <apt-opts>*
61 ... execute the apt-* command for the given vserver
63 ... execute the rpm command for the given vserver
65 pkgmgmt externalize|internalize [-y]
66 ... externalize or internalize the package-management for the
67 given vserver. 'Externalize' means that package metadata
68 and management tools (apt-get,rpm) are living in the host,
69 while 'internalize' means that data and programs from the
73 ... unify the vserver with its reference vserver(s).
76 Please report bugs to $PACKAGE_BUGREPORT"
80 function showVersion()
83 $"vserver $PACKAGE_VERSION -- manages the state of vservers
84 This program is part of $PACKAGE_STRING
86 Copyright (C) 2003 Enrico Scholz
87 This program is free software; you may redistribute it under the terms of
88 the GNU General Public License. This program has absolutely no warranty."
97 tmp=$(getopt -o +sv --long help,version,sync,verbose -n "$0" -- "$@") || exit 1
105 --help) showHelp $0 ;;
106 --version) showVersion ;;
107 -v|--verbose) OPTION_VERBOSE=1; shift;;
108 -s|--sync) OPTION_FORCE_SYNC=1; shift;;
110 *) echo $"vserver: internal error; arg=='$1'"; exit 1;;
118 test "$cmd" != build || { shift 2; exec "$_VSERVER_BUILD" -n "$vserver" "$@"; }
124 ./*) VSERVER_DIR=`pwd`/$vserver;;
125 /*) VSERVER_DIR=$vserver;;
126 *) VSERVER_DIR=$CONFDIR/$vserver
131 if test "$allow_legacy"; then
133 test ! -e "$VSERVER_DIR/legacy" || do_legacy=1
134 test -d "$VSERVER_DIR" -o ! -e "$CONFDIR/$vserver.conf" || do_legacy=1
136 test -z "$do_legacy" || {
137 echo $"WARNING: can not find configuration, assuming legacy method"
138 exec "$_VSERVER_LEGACY" "$@"
142 test -d "$VSERVER_DIR" || {
143 echo "Can not find vserver-setup"
147 if test -e "$VSERVER_DIR"/name; then
148 read VSERVER_NAME <"$VSERVER_DIR"/name
150 VSERVER_NAME=$(basename "$VSERVER_DIR")
153 . $PKGLIBDIR/vserver.functions
157 . $PKGLIBDIR/vserver.$cmd
160 "$0" --sync "$1" stop
164 test ! isVserverRunning "$VSERVER_DIR" || exec "$0" "$1" restart
168 exec "$0" "$vserver" suexec root "$@"
172 exec "$0" "$vserver" suexec root chkconfig "$@"
175 getEnterShell "$VSERVER_DIR"
176 exec "$0" "$1" suexec root "${ENTER_SHELL[@]}"
179 isVserverRunning "$VSERVER_DIR"
182 apt-get|apt-config|apt-cache)
185 exec $_VAPT_GET -- "$@"
192 if getVserverStatus "$VSERVER_DIR" ctx procnum; then
193 echo $"Vserver '$1' is running at context '$ctx'"
195 if test "$2" = status; then
196 echo $"Number of processes:" $procnum
198 "$_FILETIME" "$VSERVER_DIR/run"
202 echo $"Vserver '$1' is not running"
207 echo $"Usage: $0 {start|stop|suexec|restart|condrestart|exec|enter|chkconfig|running|status}"