# set -e
-: ${UTIL_VSERVER_VARS:=$(dirname $0)/util-vserver-vars}
+: ${UTIL_VSERVER_VARS:=/usr/lib/util-vserver/util-vserver-vars}
test -e "$UTIL_VSERVER_VARS" || {
- echo "Can not find util-vserver installation; aborting..."
+ echo "Can not find util-vserver installation; aborting..." >&2
exit 1
}
. "$UTIL_VSERVER_VARS"
function showHelp()
{
echo \
-$"Usage: $(basename $0) [--] <vserver> <command> <args>*
+$"Usage: $(basename $0) [-s|--sync] [-v|--verbose] [--silent]
+ [--] <vserver> <command> <args>*
<vserver> is the name of a vserver.
Possible commands are:
- start ... starts the specified vserver
- stop ... stops the specified vserver
+ start [--nodeps] <start-vservers-opts>*
+ ... starts the specified vserver
+ stop [--nodeps] <start-vservers-opts>*
+ ... stops the specified vserver
restart ... restarts the specified vserver; this is the subsequent
execution of a synchronized 'stop' and a 'start'
condrestart ... restarts the vserver when it is running already
build <buildopts>*
... builds a new vserver from scratch
+ unify [-R]
+ ... (de)unify vserver
+
+ pkg install <pkg>
+ ... installs package(s) in the vserver
+
+ apt-get,apt-config,apt-cache <apt-opts>*
+ ... execute the apt-* command for the given vserver
+ rpm <rpm-opts>*
+ ... execute the rpm command for the given vserver
+
+ pkgmgmt externalize|internalize [-y]
+ ... externalize or internalize the package-management for the
+ given vserver. 'Externalize' means that package metadata
+ and management tools (apt-get,rpm) are living in the host,
+ while 'internalize' means that data and programs from the
+ vserver will be used.
+
+ unify <vunify-opts>*
+ ... unify the vserver with its reference vserver(s).
+
+
Please report bugs to $PACKAGE_BUGREPORT"
exit 0
}
exit 0
}
+function suexec()
+{
+ . $PKGLIBDIR/vserver.suexec
+}
+
+function restart()
+{
+ "${SELF[@]}" --sync "$vserver" stop
+ exec "${SELF[@]}" "$vserver" start
+}
### main starts here
set +e
-tmp=$(getopt -o + --long help,version -n "$0" -- "$@") || exit 1
+OPTIONS_ORIG=( "$@" )
+tmp=$(getopt -o +sv --long nonamespace,--nonamespace,help,debug,version,sync,verbose,silent -n "$0" -- "$@") || exit 1
eval set -- "$tmp"
+OPTION_FORCE_SYNC=
+OPTION_VERBOSE=
+OPTION_SILENT=
+OPTION_DEBUG=
+OPTION_NONAMESPACE=
+
while true; do
case "$1" in
- --help) showHelp $0 ;;
- --version) showVersion ;;
- --) shift; break;;
- *) echo $"vserver: internal error; arg=='$1'"; exit 1;;
+ --help) showHelp $0 ;;
+ --version) showVersion ;;
+ --debug) OPTION_DEBUG=$1; set -x;;
+ -v|--verbose) OPTION_VERBOSE=$1;;
+ -s|--sync) OPTION_FORCE_SYNC=$1;;
+ --silent) OPTION_SILENT=$1;;
+ ----nonamespace)OPTION_NONAMESPACE=$1;;
+ --) shift; break;;
+ *) echo $"vserver: internal error; arg=='$1'" >&2; exit 1;;
esac
+ shift
done
-test "$2" != build || { shift; exec "$_VSERVER_BUILD" "$@"; }
+OPTION_ALL=( $OPTION_SILENT $OPTION_VERBOSE $OPTION_DEBUG )
+SELF=( "$0" "${OPTION_ALL[@]}" )
vserver=$1
cmd=$2
+test "$cmd" != build || { shift 2; exec "$_VSERVER_BUILD" -n "$vserver" "$@"; }
+
+
allow_legacy=
case "$vserver" in
test -d "$VSERVER_DIR" -o ! -e "$CONFDIR/$vserver.conf" || do_legacy=1
test -z "$do_legacy" || {
- echo $"WARNING: can not find configuration, assuming legacy method"
+ echo $"WARNING: can not find configuration, assuming legacy method" >&2
exec "$_VSERVER_LEGACY" "$@"
}
fi
test -d "$VSERVER_DIR" || {
echo "Can not find vserver-setup"
exit 1
-}
+} >&2
if test -e "$VSERVER_DIR"/name; then
read VSERVER_NAME <"$VSERVER_DIR"/name
VSERVER_NAME=$(basename "$VSERVER_DIR")
fi
+test "$2" != start -o "$OPTION_NONAMESPACE" || isAvoidNamespace "$VSERVER_DIR" || \
+ exec $_VNAMESPACE --new -- $_VSERVER ----nonamespace "${OPTIONS_ORIG[@]}"
+
. $PKGLIBDIR/vserver.functions
case "$2" in
- start|stop|suexec)
+ start|stop)
shift 2
. $PKGLIBDIR/vserver.$cmd
;;
- restart)
- "$0" "$1" stop
- exec "$0" "$1" start
+ suexec|restart)
+ shift 2
+ $cmd "$@"
;;
condrestart)
- test ! isVserverRunning "$VSERVER_DIR" || exec "$0" "$1" restart
+ test ! isVserverRunning "$VSERVER_DIR" || restart
;;
exec)
shift 2
- exec "$0" "$vserver" suexec root "$@"
+ suexec root "$@"
;;
chkconfig)
shift 2
- exec "$0" "$vserver" suexec root chkconfig "$@"
+ suexec root chkconfig "$@"
;;
enter)
getEnterShell "$VSERVER_DIR"
- exec "$0" "$1" suexec root "${ENTER_SHELL[@]}"
+ suexec root "${ENTER_SHELL[@]}"
;;
running)
isVserverRunning "$VSERVER_DIR"
;;
+
+ unify)
+ shift 2
+ exec $_VUNIFY "$@" "$vserver"
+ ;;
+
+ pkg)
+ shift 2
+ exec $_VPKG "$vserver" "$@"
+ ;;
+
+ apt-get|apt-config|apt-cache)
+ export _APT_GET=$2
+ shift 2
+ exec $_VAPT_GET -- "$@"
+ ;;
+ rpm)
+ exec $_VRPM -- "$@"
+ ;;
+
status)
if getVserverStatus "$VSERVER_DIR" ctx procnum; then
- echo $"Vserver '$1' is running at context '$ctx'"
+ echo $"Vserver '$vserver' is running at context '$ctx'"
if test "$2" = status; then
echo $"Number of processes:" $procnum
fi
exit 0
else
- echo $"Vserver '$1' is not running"
+ echo $"Vserver '$vserver' is not running"
exit 1
fi
;;
*)
- echo $"Usage: $0 {start|stop|suexec|restart|condrestart|exec|enter|chkconfig|running|status}"
+ echo $"Usage: $0 {start|stop|suexec|restart|condrestart|exec|enter|chkconfig|running|status}" >&2
exit 2
;;
esac