X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=scripts%2Fvpkg;fp=scripts%2Fvpkg;h=30aa766b03b4a8fbe11c909fa5e040fc5fe139d1;hb=8cf13bb177d92c93eb73dc8939777150536c2d00;hp=0000000000000000000000000000000000000000;hpb=6bf3f95de36c804c97716b2d0bdf10680c559044;p=util-vserver.git diff --git a/scripts/vpkg b/scripts/vpkg new file mode 100755 index 0000000..30aa766 --- /dev/null +++ b/scripts/vpkg @@ -0,0 +1,142 @@ +#!/bin/bash +# $Id: vpkg,v 1.11 2005/03/18 00:23:02 ensc Exp $ + +# Copyright (C) 2004 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; either version 2, or (at your option) +# any later version. +# +# 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" + +function showHelp() +{ + echo \ +$"Usage: $0 + +Report bugs to <$PACKAGE_BUGREPORT>." + exit 0 +} + +function showVersion() +{ + echo $"\ +vpkg $PACKAGE_VERSION -- shows information about packages in vservers +This program is part of $PACKAGE_STRING + +Copyright (C) 2004 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 +} + + +case "$1" in + (--help) showHelp $(basename $0);; + (--version) showVersion ;; +esac + +test "$1" -a "$2" || { + echo $"No vserver and/or tag given; use '--help' for more information" >&2 + exit 1 +} + +vserver=$1 +tag=$2 +shift 2 + +case "$tag" in + get-conffiles|install) ;; + *) echo $"Unsupport tag '$tag'" >&2; exit 1;; +esac + +cfgdir=$($_VSERVER_INFO "$vserver" APPDIR pkgmgmt) || : +vdir=$($_VSERVER_INFO "$1" VDIR) || : + +style= +is_external= +pkgmgmt.guessStyle "$vserver" style || exit 2 +pkgmgmt.isInternal "$vserver" || is_external=1 + +cmd=() + +case "$style" in + (redhat|mandrake) + rpm_param= + apt_param= + case "$tag" in + ## rpm outputs sometimes '(contains no files)', so return + ## only the valid output + (get-conffiles) + rpm_param=( -qac --pipe "$_SED '\!^/!p;d'" );; + (install) + rpm_param=( -Uvh "$@" ) + apt_param=( install "$@" ) + ;; + esac + + if test -n "$is_external"; then + have_apt=1 + test -d "$cfgdir"/base/apt -o -d "$cfgdir"/aptetc || have_apt= + else + have_apt= + for i in /bin /usr/bin /usr/local/bin; do + test ! -x "$vdir$i"/apt-get || { have_apt=1; break; } + done + fi + + if test -n "$is_external"; then + if test "$have_apt" -a "$apt_param"; then + cmd=( "$_VAPT_GET" "$vserver" -- "${apt_param[@]}" ) + else + cmd=( "$_VRPM" "$vserver" -- "${rpm_param[@]}" ) + fi + else + if test "$have_apt" -a "$apt_param"; then + cmd=( "$_VSERVER" --silent "$vserver" exec apt-get "${apt_param[@]}" ) + else + cmd=( "$_VSERVER" --silent "$vserver" exec rpm "${rpm_param[@]}" ) + fi + fi + ;; + (debian) + case "$tag" in + (get-conffiles) + cmd=( sh -c "cat /var/lib/dpkg/info/*.conffiles 2>/dev/null" ) + ;; + (install) + cmd=( apt-get install "$@" ) + ;; + esac + + if test -n "$is_external"; then + echo $"'external' packagemanagement is not supported for Debian" >&2 + exit 1 + else + cmd=( "$_VSERVER" --silent "$vserver" exec "${cmd[@]}" ) + fi + ;; + (*) + echo $"Packagemanagement is not supported for '$style' style" >&2 + exit 2 + ;; +esac + +export LANG=C +exec "${cmd[@]}"