#! /bin/bash # $Id: vsomething 2599 2007-08-26 21:30:50Z dhozac $ # Copyright (C) 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 # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. : ${UTIL_VSERVER_VARS:=/usr/lib/util-vserver/util-vserver-vars} test -e "$UTIL_VSERVER_VARS" || { echo $"Can not find util-vserver installation (the file '$UTIL_VSERVER_VARS' would be expected); aborting..." >&2 exit 1 } . "$UTIL_VSERVER_VARS" . "$_LIB_FUNCTIONS" . "$__PKGLIBDIR/vserver.functions" function showHelp() { echo \ $"Usage: $0 [--quiet|-q] [--debug] [--] * [--all] -- + Execute * foreach vserver. Report bugs to <$PACKAGE_BUGREPORT>." exit 0 } function showVersion() { echo \ $"vsomething $PACKAGE_VERSION -- execute something for a set of vservers This program is part of $PACKAGE_STRING Copyright (C) 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 } is_quiet= declare -a vservers=() tmp=$(getopt -o +q --long help,version,debug,quiet -n "$0" -- "$@") || exit 1 eval set -- "$tmp" while true; do case "$1" in (--help) showHelp $0 ;; (--version) showVersion ;; (--debug) set -x;; (--quiet|-q) is_quiet=1 ;; (--) shift; break;; (*) echo $"vserver: internal error; arg=='$1'" >&2; exit 1;; esac shift done test "$#" -ge 1 || \ panic $"vsomething: no operation specified; try '--help' for more information" cmd=$1 title=${VSOMETHING_TITLE:-$cmd} shift while test "$#" -ge 1; do if getAllVserversByArg tmp "$1"; then vservers=( "${vservers[@]}" "${tmp[@]}" ) else case "$1" in (--) shift; break;; (*) vservers=( "${vservers[@]}" "$1" ) esac fi shift done test "${#vservers[@]}" -ne 1 || is_quiet=1 cnt=0 res=255 for i in "${vservers[@]}"; do cnt=$[ cnt + 1 ] test -n "$is_quiet" || { colorize bold echo -n "$title: operating on vserver " colorize bold colorize emph echo "$i" xtermTitle "$title: operating on vserver '$i' [$cnt/${#vservers[@]}]" } if test -n "$VSOMETHING_PKGMGMT"; then if pkgmgmt.isInternal "$i"; then $_VSERVER "$i" exec "$cmd" "$@" else _setVserverDir "$i" # subshell so we don't have to clean up ( _generateChbindOptions "$VSERVER_DIR" $_VSERVER "$i" status &> /dev/null || \ CHBIND_CMD=() callInNamespace "$i" \ "$_VNAMESPACE" --new -- \ "${CHBIND_CMD[@]}" \ "$VSOMETHING_WORKER" "$i" "$@" ) fi else "$cmd" "$i" "$@" fi res=$? test $res -eq 0 -o -n "$is_quiet" || { colorize error echo -n $"$title failed on vserver '$i' with errorcode $res" echo } test -n "$is_quiet" || echo done test "$cnt" -ge 0 || warning $"No vservers specified" exit $res