X-Git-Url: http://git.onelab.eu/?p=util-vserver.git;a=blobdiff_plain;f=scripts%2Fvrpm;h=2962353c518831c8f889ea318ec16d8603402c50;hp=86d2214533ed01d0eda8d9a4338f1df30c0219ec;hb=ec4370f7ebd7fb0ce7f002f5bf2c74f03acd3ec1;hpb=06e1018272502e1d15d6d8f32b80fa96420785b8 diff --git a/scripts/vrpm b/scripts/vrpm index 86d2214..2962353 100755 --- a/scripts/vrpm +++ b/scripts/vrpm @@ -1,12 +1,11 @@ -#!/bin/sh +#! /bin/bash +# $Id: vrpm 2303 2006-09-12 12:39:00Z dhozac $ # Copyright (C) 2003 Enrico Scholz -# based on vrpm by Jacques Gelinas # # 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; either version 2, or (at your option) -# any later version. +# 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 @@ -17,89 +16,59 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# Wrapper to update/install package in many vservers at once - -: ${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" +. "$_LIB_FUNCTIONS" + + +function showHelp() +{ + echo \ +$"Usage: $0 * [--all] -- + + +Report bugs to <$PACKAGE_BUGREPORT>." + exit 0 +} + +function showVersion() +{ + echo \ +$"vrpm $PACKAGE_VERSION -- rpm for vservers +This program is part of $PACKAGE_STRING -usage(){ - echo vrpm: Install/Updates packages in several vservers at once - echo vrpm vservers ... -- rpm options and packages - echo vrpm \[--unify\] ALL -- rpm options and packages - echo vrpm \[--unify\] server1 server2 -- -Uvh package.rpm - echo - echo vrpm is executed in the root server - echo "--unify run vunify on the vserver for the updated packages" +Copyright (C) 2006 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 } -UNIFY=no -if [ "$1" = "--unify" ] ; then - UNIFY=yes - shift -fi -if [ $# = 0 ] ; then - usage -else - SERVERS= - while [ $# -gt 0 -a "$1" != "--" ] - do - if [ "$1" = "ALL" ] ; then - SERVERS=`cd $VROOTDIR && ls` - else - SERVERS="$SERVERS $1" - fi - shift - done - if [ "$1" != "--" ] ; then - usage - elif [ "$SERVERS" = "" ] ; then - echo no server specified - echo - usage - else - shift - for serv in $SERVERS - do - # We try to run the rpm command in the same security - # context than the vserver, if running. - # This way, process operations will be done in the proper - # context - # If the vserver is not running, chcontext will - # pick an unused one. - CTXOPT="" - CTXFILE=/var/run/vservers/$serv.ctx - if [ -f $CTXFILE ] ; then - source $CTXFILE - CTXOPT="--ctx $S_CONTEXT" - fi - #echo rpm --root $VROOTDIR/$serv $* - echo Updating server $serv - $SBINDIR/chcontext --silent $CTXOPT rpm --root $VROOTDIR/$serv $* - done - if [ "$UNIFY" = "yes" ] ; then - PACKAGES= - for pkg in $* - do - case $pkg in - -*) - # RPM options ? - ;; - --*) - # RPM options ? - ;; - *) - pkg=`rpm -qp $pkg --queryformat %{name}` - PACKAGES="$PACKAGES $pkg" - ;; - esac - done - echo Unification - $PKGLIBDIR/vunify --excldir /var/log $SERVERS -- $PACKAGES - fi - fi -fi - +tmp=$(getopt -o +q --long help,version,debug,quiet,all -n "$0" -- "$@") || exit 1 +eval set -- "$tmp" + +declare -a send_through vsomething_opts + +while true; do + case "$1" in + (--help) showHelp $0 ;; + (--version) showVersion ;; + (--debug) send_through=( "${send_through[@]}" "$1" ); set -x;; + (--quiet|-q) send_through=( "${send_through[@]}" "$1" );; + (--all) vsomething_opts=( "${vsomething_opts[@]}" "$1" );; + (--) shift; break;; + (*) echo $"vrpm: internal error; arg=='$1'" >&2; exit 1;; + esac + shift +done + +VSOMETHING_TITLE=vrpm +VSOMETHING_WORKER=$_VRPM_WORKER +VSOMETHING_PKGMGMT=1 + +export VSOMETHING_TITLE VSOMETHING_WORKER VSOMETHING_PKGMGMT + +test ${#vsomething_opts[@]} -eq 0 || vsomething_opts=( "${vsomething_opts[@]}" -- ) +exec $_VSOMETHING "${send_through[@]}" rpm "${vsomething_opts[@]}" "$@"