From: Enrico Scholz Date: Sat, 17 Jan 2004 05:14:46 +0000 (+0000) Subject: initial checkin X-Git-Tag: VERSION_0_10~900 X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=54dafb19b069d8bdd2d29b2c428a1d5636862098;p=util-vserver.git initial checkin git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@627 94cd875c-1c1d-0410-91d2-eb244daf1a30 --- diff --git a/util-vserver/scripts/vpkg b/util-vserver/scripts/vpkg new file mode 100755 index 0000000..4bfd6b6 --- /dev/null +++ b/util-vserver/scripts/vpkg @@ -0,0 +1,141 @@ +#!/bin/bash + +# 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:=$(dirname $0)/util-vserver-vars} +test -e "$UTIL_VSERVER_VARS" || { + echo "Can not find util-vserver installation; aborting..." + exit 1 +} +. "$UTIL_VSERVER_VARS" + +function showHelp() +{ + echo \ +$"Usage: $0 + +Report bugs to <$PACKAGE_BUGREPORT>." + exit 0 +} + +function showVersion() +{ + echo $"\ +pkgmgmt-info $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 +} + +function guessStyle() +{ + local vdir=$($_VSERVER_INFO "$1" VDIR) || { + echo $"Can not determine vserver-root" >&2 + exit 1 + } + + if test -e "$vdir"/etc/redhat-release -o -e "$vdir"/etc/fedora-release; then + style=redhat + elif test -e "$vdir"/etc/mandrake-release; then + style=mandrake + else + echo $"Can not determine packagemanagement style" >&2 + fi +} + +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) || { + echo $"Package management not configured for vserver '$vserver'" >&2 + exit 1 +} + +vdir=$($_VSERVER_INFO "$1" VDIR) || : + +style= +is_external= +{ read style <"$cfgdir"/style; } 2>/dev/null +test "$style" || guessStyle "$vserver" + +test -e "$cfgdir"/internal || 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 "$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 "$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 + ;; +esac + +export LANG=C +exec "${cmd[@]}"