#!/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:=/usr/lib/util-vserver/util-vserver-vars} test -e "$UTIL_VSERVER_VARS" || { echo "Can not find util-vserver installation; aborting..." >&2 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 elif test -e "$vdir"/etc/debian_version; then style=debian 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) || : vdir=$($_VSERVER_INFO "$1" VDIR) || : style= is_external= { read style <"$cfgdir"/style; } 2>/dev/null test "$style" || guessStyle "$vserver" test ! -d "$cfgdir" -o -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 ;; (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 "$is_external"; then echo $"'external' packagemanagement is not supported for Debian" >&2 exit 1 else cmd=( "$_VSERVER" --silent "$vserver" exec "${cmd[@]}" ) fi ;; esac export LANG=C exec "${cmd[@]}"