util-vserver-0.30.208
[util-vserver.git] / scripts / vpkg
diff --git a/scripts/vpkg b/scripts/vpkg
new file mode 100755 (executable)
index 0000000..30aa766
--- /dev/null
@@ -0,0 +1,142 @@
+#!/bin/bash
+# $Id: vpkg,v 1.11 2005/03/18 00:23:02 ensc Exp $
+
+# Copyright (C) 2004 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+#  
+# 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 <vserver-name> <tag>
+
+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[@]}"