2 # $Id: vserver,v 1.30 2005/04/28 18:03:42 ensc Exp $
4 # Copyright (C) 2003,2004,2005 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:=/usr/lib/util-vserver/util-vserver-vars}
22 test -e "$UTIL_VSERVER_VARS" || {
23 echo $"Can not find util-vserver installation (the file '$UTIL_VSERVER_VARS' would be expected); aborting..." >&2
26 . "$UTIL_VSERVER_VARS"
29 ### Some local functions
34 $"Usage: $(basename $0) [-s|--sync] [-v|--verbose] [--silent]
35 [--] <vserver> <command> <args>*
37 <vserver> is the name of a vserver.
39 Possible commands are:
40 start [--rescue] [--rescue-cmd <cmd>]
41 ... starts the specified vserver
42 stop ... stops the specified vserver
43 restart ... restarts the specified vserver; this is the subsequent
44 execution of a synchronized 'stop' and a 'start'
45 condrestart ... restarts the vserver when it is running already
46 suexec <user> <shell-command> <args*>
47 ... executes a command as the specified user in the vserver
48 exec <shell-command> <args*>
49 ... executes a command as root in the vserver
50 enter ... executes the configured shell in the vserver
51 chkconfig <chkconfig-options*>
52 ... modifies the init-system; currently, only Red Hat's
53 chkconfig is supported
54 running ... succeeds iff the vserver is running
55 status ... gives out some human readable status information about
56 the vserver, and succeeds iff the vserver is running
59 ... builds a new vserver from scratch
65 ... installs package(s) in the vserver
67 apt-get,apt-config,apt-cache <apt-opts>*
68 ... execute the apt-* command for the given vserver
70 ... execute the rpm command for the given vserver
72 pkgmgmt externalize|internalize [-y]
73 ... externalize or internalize the package-management for the
74 given vserver. 'Externalize' means that package metadata
75 and management tools (apt-get,rpm) are living in the host,
76 while 'internalize' means that data and programs from the
80 ... unify the vserver with its reference vserver(s).
83 Please report bugs to $PACKAGE_BUGREPORT"
87 function showVersion()
90 $"vserver $PACKAGE_VERSION -- manages the state of vservers
91 This program is part of $PACKAGE_STRING
93 Copyright (C) 2003,2004,2005 Enrico Scholz
94 This program is free software; you may redistribute it under the terms of
95 the GNU General Public License. This program has absolutely no warranty."
101 . $__PKGLIBDIR/vserver.suexec
106 "${SELF[@]}" --sync "$vserver" stop
107 exec "${SELF[@]}" "$vserver" start
112 test -z "$OPTION_SILENT" || return 0
120 OPTIONS_ORIG=( "$@" )
121 tmp=$(getopt -o +sv --long nonamespace,--nonamespace,--insecure,defaulttty,help,debug,version,sync,verbose,silent -n "$0" -- "$@") || exit 1
134 (--help) showHelp $0 ;;
135 (--version) showVersion ;;
136 (--debug) OPTION_DEBUG=$1; set -x;;
137 (-v|--verbose) OPTION_VERBOSE=$1;;
138 (-s|--sync) OPTION_FORCE_SYNC=$1;;
139 (--silent) OPTION_SILENT=$1;;
140 (----nonamespace)OPTION_NONAMESPACE=$1;;
141 (--defaulttty) OPTION_DEFAULTTTY=$1;;
142 (----insecure) OPTION_INSECURE=1;;
144 (*) echo $"vserver: internal error; arg=='$1'" >&2; exit 1;;
149 OPTION_ALL=( $OPTION_SILENT $OPTION_VERBOSE $OPTION_DEBUG $OPTION_DEFAULTTTY )
150 SELF=( "$0" "${OPTION_ALL[@]}" )
155 test "$cmd" != build || { shift 2; exec "$_VSERVER_BUILD" -n "$vserver" "$@"; }
161 (./*) VSERVER_DIR=`pwd`/$vserver;;
162 (/*) VSERVER_DIR=$vserver;;
163 (*) VSERVER_DIR=$__CONFDIR/$vserver
168 if test -n "$allow_legacy"; then
170 test ! -e "$VSERVER_DIR/legacy" || do_legacy=1
171 test -d "$VSERVER_DIR" -o ! -e "$__CONFDIR/$vserver.conf" || do_legacy=1
173 test -z "$do_legacy" || {
174 echo $"WARNING: can not find configuration, assuming legacy method" >&2
175 exec "$_VSERVER_LEGACY" "$@"
179 test -d "$VSERVER_DIR" || {
181 Can not find a vserver-setup at '$VSERVER_DIR/'.
184 * fix the spelling of the '$vserver' vserver name
185 * read 'vserver $vserver build --help' about ways to create a new vserver
186 * see 'vserver --help' for the syntax of this command
191 if test -e "$VSERVER_DIR"/name; then
192 read VSERVER_NAME <"$VSERVER_DIR"/name
194 VSERVER_NAME=$(basename "$VSERVER_DIR")
197 test "$2" != start -o -n "$OPTION_NONAMESPACE" || isAvoidNamespace "$VSERVER_DIR" || \
198 exec $_VNAMESPACE --new -- $_VSERVER ----nonamespace "${OPTIONS_ORIG[@]}"
200 . $__PKGLIBDIR/vserver.functions
204 . $__PKGLIBDIR/vserver.$cmd
211 test ! isVserverRunning "$VSERVER_DIR" || restart
219 suexec root chkconfig "$@"
222 getEnterShell "$VSERVER_DIR"
223 suexec root "${ENTER_SHELL[@]}"
226 isVserverRunning "$VSERVER_DIR"
231 exec $_VUNIFY "$@" "$vserver"
236 exec $_VHASHIFY "$@" "$vserver"
241 exec $_VPKG "$vserver" "$@"
247 exec $_VNAMESPACE --new -- $_PKGMGMT ${op:+--$op} "$@" -- "$vserver"
250 (apt-get|apt-config|apt-cache)
253 exec $_VAPT_GET -- "$@"
260 if getVserverStatus "$VSERVER_DIR" ctx procnum; then
261 msg $"Vserver '$vserver' is running at context '$ctx'"
263 if test "$2" = status; then
264 msg $"Number of processes: " $procnum
265 msg $"Uptime: " $("$_FILETIME" "$VSERVER_DIR/run")
269 msg $"Vserver '$vserver' is stopped"
274 echo $"Usage: $0 {start|stop|suexec|restart|condrestart|exec|enter|chkconfig|running|status}" >&2