X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Fscripts%2Fvserver;h=006e7f7840fab57621f13ed2a54ceaa67e53f7f0;hb=75385100bedf6d457e88bc2bb942a6f0771b0e06;hp=5725eaab89fc5bc376b09b3746150ce440dc6d3a;hpb=1eed5615cb7bef59f6212e14aa1d80949cbce736;p=util-vserver.git diff --git a/util-vserver/scripts/vserver b/util-vserver/scripts/vserver index 5725eaa..006e7f7 100755 --- a/util-vserver/scripts/vserver +++ b/util-vserver/scripts/vserver @@ -1,7 +1,7 @@ #! /bin/bash # $Id$ -# Copyright (C) 2003 Enrico Scholz +# Copyright (C) 2003,2004,2005 Enrico Scholz # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,9 +18,9 @@ # 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 (the file '$UTIL_VSERVER_VARS' would be expected); aborting..." >&2 exit 1 } . "$UTIL_VSERVER_VARS" @@ -31,16 +31,15 @@ test -e "$UTIL_VSERVER_VARS" || { function showHelp() { echo \ -$"Usage: $(basename $0) [-s|--sync] [-v|--verbose] +$"Usage: $(basename $0) [-s|--sync] [-v|--verbose] [--silent] [--] * is the name of a vserver. Possible commands are: - start [--nodeps] * + start [--rescue] [ *] ... starts the specified vserver - stop [--nodeps] * - ... stops the specified vserver + stop ... 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 @@ -59,6 +58,12 @@ Possible commands are: build * ... builds a new vserver from scratch + unify [-R] + ... (de)unify vserver + + pkg install + ... installs package(s) in the vserver + apt-get,apt-config,apt-cache * ... execute the apt-* command for the given vserver rpm * @@ -85,34 +90,64 @@ function showVersion() $"vserver $PACKAGE_VERSION -- manages the state of vservers This program is part of $PACKAGE_STRING -Copyright (C) 2003 Enrico Scholz +Copyright (C) 2003,2004,2005 Enrico Scholz This program is free software; you may redistribute it under the terms of the GNU General Public License. This program has absolutely no warranty." exit 0 } +function suexec() +{ + . $__PKGLIBDIR/vserver.suexec +} + +function restart() +{ + "${SELF[@]}" --sync "$vserver" stop + exec "${SELF[@]}" "$vserver" start +} + +function msg() +{ + test -z "$OPTION_SILENT" || return 0 + echo "$@" +} ### main starts here set +e -tmp=$(getopt -o +sv --long help,version,sync,verbose -n "$0" -- "$@") || exit 1 +OPTIONS_ORIG=( "$@" ) +tmp=$(getopt -o +sv --long nonamespace,--nonamespace,--insecure,defaulttty,help,debug,version,sync,verbose,silent -n "$0" -- "$@") || exit 1 eval set -- "$tmp" OPTION_FORCE_SYNC= OPTION_VERBOSE= +OPTION_SILENT= +OPTION_DEBUG= +OPTION_NONAMESPACE= +OPTION_INSECURE= +OPTION_DEFAULTTTY= while true; do case "$1" in - --help) showHelp $0 ;; - --version) showVersion ;; - -v|--verbose) OPTION_VERBOSE=1; shift;; - -s|--sync) OPTION_FORCE_SYNC=1; shift;; - --) 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;; + (--defaulttty) OPTION_DEFAULTTTY=$1;; + (----insecure) OPTION_INSECURE=1;; + (--) shift; break;; + (*) echo $"vserver: internal error; arg=='$1'" >&2; exit 1;; esac + shift done +OPTION_ALL=( $OPTION_SILENT $OPTION_VERBOSE $OPTION_DEBUG $OPTION_DEFAULTTTY ) +SELF=( "$0" "${OPTION_ALL[@]}" ) vserver=$1 cmd=$2 @@ -123,28 +158,35 @@ test "$cmd" != build || { shift 2; exec "$_VSERVER_BUILD" -n "$vserver" "$@"; } allow_legacy= case "$vserver" in - ./*) VSERVER_DIR=`pwd`/$vserver;; - /*) VSERVER_DIR=$vserver;; - *) VSERVER_DIR=$CONFDIR/$vserver - allow_legacy=1 - ;; + (./*) VSERVER_DIR=`pwd`/$vserver;; + (/*) VSERVER_DIR=$vserver;; + (*) VSERVER_DIR=$__CONFDIR/$vserver + allow_legacy=1 + ;; esac -if test "$allow_legacy"; then +if test -n "$allow_legacy"; then do_legacy= test ! -e "$VSERVER_DIR/legacy" || do_legacy=1 - test -d "$VSERVER_DIR" -o ! -e "$CONFDIR/$vserver.conf" || do_legacy=1 + 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 -} + echo $"\ +Can not find a vserver-setup at '$VSERVER_DIR/'. + +Possible solutions: +* fix the spelling of the '$vserver' vserver name +* read 'vserver $vserver build --help' about ways to create a new vserver +* see 'vserver --help' for the syntax of this command +" + exit 5 +} >&2 if test -e "$VSERVER_DIR"/name; then read VSERVER_NAME <"$VSERVER_DIR"/name @@ -152,61 +194,84 @@ else VSERVER_NAME=$(basename "$VSERVER_DIR") fi -. $PKGLIBDIR/vserver.functions +test "$2" != start -o -n "$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 + . $__PKGLIBDIR/vserver.$cmd ;; - restart) - "$0" --sync "$1" stop - exec "$0" "$1" start + (suexec|restart) + shift 2 + $cmd "$@" ;; - condrestart) - test ! isVserverRunning "$VSERVER_DIR" || exec "$0" "$1" restart + (condrestart) + test ! isVserverRunning "$VSERVER_DIR" || restart ;; - exec) + (exec) shift 2 - exec "$0" "$vserver" suexec root "$@" + suexec root "$@" ;; - chkconfig) + (chkconfig) shift 2 - exec "$0" "$vserver" suexec root chkconfig "$@" + suexec root chkconfig "$@" ;; - enter) + (enter) getEnterShell "$VSERVER_DIR" - exec "$0" "$1" suexec root "${ENTER_SHELL[@]}" + suexec root "${ENTER_SHELL[@]}" ;; - running) + (running) isVserverRunning "$VSERVER_DIR" ;; - apt-get|apt-config|apt-cache) + (unify) + shift 2 + exec $_VUNIFY "$@" "$vserver" + ;; + + (hashify) + shift 2 + exec $_VHASHIFY "$@" "$vserver" + ;; + + (pkg) + shift 2 + exec $_VPKG "$vserver" "$@" + ;; + + (pkgmgmt) + op=$3 + shift 3 + exec $_VNAMESPACE --new -- $_PKGMGMT ${op:+--$op} "$@" -- "$vserver" + ;; + + (apt-get|apt-config|apt-cache) export _APT_GET=$2 shift 2 exec $_VAPT_GET -- "$@" ;; - rpm) + (rpm) exec $_VRPM -- "$@" ;; - status) + (status) if getVserverStatus "$VSERVER_DIR" ctx procnum; then - echo $"Vserver '$1' is running at context '$ctx'" + msg $"Vserver '$vserver' is running at context '$ctx'" if test "$2" = status; then - echo $"Number of processes:" $procnum - echo -n $"Uptime: " - "$_FILETIME" "$VSERVER_DIR/run" + msg $"Number of processes: " $procnum + msg $"Uptime: " $("$_FILETIME" "$VSERVER_DIR/run") fi exit 0 else - echo $"Vserver '$1' is not running" - exit 1 + msg $"Vserver '$vserver' is stopped" + exit 3 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