vshost-util-vserver

Build script and sources for util-vserver.
git clone https://ccx.te2000.cz/git/vshost-util-vserver
Log | Files | Refs

vpkg (3591B)


      1 #!/bin/bash
      2 # $Id$
      3 
      4 # Copyright (C) 2004 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
      5 #  
      6 # This program is free software; you can redistribute it and/or modify
      7 # it under the terms of the GNU General Public License as published by
      8 # the Free Software Foundation; either version 2, or (at your option)
      9 # any later version.
     10 #  
     11 # This program is distributed in the hope that it will be useful,
     12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14 # GNU General Public License for more details.
     15 #  
     16 # You should have received a copy of the GNU General Public License
     17 # along with this program; if not, write to the Free Software
     18 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
     19 
     20 : ${UTIL_VSERVER_VARS:=/usr/lib/util-vserver/util-vserver-vars}
     21 test -e "$UTIL_VSERVER_VARS" || {
     22     echo $"Can not find util-vserver installation (the file '$UTIL_VSERVER_VARS' would be expected); aborting..." >&2
     23     exit 1
     24 }
     25 . "$UTIL_VSERVER_VARS"
     26 . "$_LIB_FUNCTIONS"
     27 
     28 function showHelp()
     29 {
     30     echo \
     31 $"Usage: $0 <vserver-name> <tag>
     32 
     33 Report bugs to <$PACKAGE_BUGREPORT>."
     34     exit 0
     35 }
     36 
     37 function showVersion()
     38 {
     39     echo $"\
     40 vpkg $PACKAGE_VERSION -- shows information about packages in vservers
     41 This program is part of $PACKAGE_STRING
     42 
     43 Copyright (C) 2004 Enrico Scholz
     44 This program is free software; you may redistribute it under the terms of
     45 the GNU General Public License.  This program has absolutely no warranty."
     46     exit 0
     47 }
     48 
     49 
     50 case "$1" in
     51     (--help)	showHelp $(basename $0);;
     52     (--version)	showVersion ;;
     53 esac
     54 
     55 test "$1" -a "$2" || {
     56     echo $"No vserver and/or tag given; use '--help' for more information" >&2
     57     exit 1
     58 }
     59 
     60 vserver=$1
     61 tag=$2
     62 shift 2
     63 
     64 case "$tag" in
     65     get-conffiles|install)	;;
     66     *)		echo $"Unsupport tag '$tag'" >&2; exit 1;;
     67 esac
     68 
     69 cfgdir=$($_VSERVER_INFO "$vserver" APPDIR pkgmgmt) || :
     70 vdir=$($_VSERVER_INFO "$1" VDIR) || :
     71 
     72 style=
     73 is_external=
     74 pkgmgmt.guessStyle "$vserver" style || exit 2
     75 pkgmgmt.isInternal "$vserver"       || is_external=1
     76 
     77 cmd=()
     78 
     79 case "$style" in
     80     (redhat|mandrake)
     81 	rpm_param=
     82 	apt_param=
     83 	case "$tag" in
     84 	    ## rpm outputs sometimes '(contains no files)', so return
     85 	    ## only the valid output
     86 	    (get-conffiles)
     87 		rpm_param=( -qac --pipe "$_SED '\!^/!p;d'" );;
     88 	    (install)
     89 		rpm_param=( -Uvh "$@" )
     90 		apt_param=( install "$@" )
     91 		;;
     92 	esac
     93 	
     94 	if test -n "$is_external"; then
     95 	    have_apt=1
     96 	    test -d "$cfgdir"/base/apt -o -d "$cfgdir"/aptetc || have_apt=
     97 	else
     98 	    have_apt=
     99 	    for i in /bin /usr/bin /usr/local/bin; do
    100 		test ! -x "$vdir$i"/apt-get || { have_apt=1; break; }
    101 	    done
    102 	fi
    103 	
    104 	if test -n "$is_external"; then
    105 	    if test "$have_apt" -a "$apt_param"; then
    106 		cmd=( "$_VAPT_GET" "$vserver" -- "${apt_param[@]}" )
    107 	    else
    108 		cmd=( "$_VRPM" "$vserver" -- "${rpm_param[@]}" )
    109 	    fi
    110 	else
    111 	    if test "$have_apt" -a "$apt_param"; then
    112 		cmd=( "$_VSERVER" --silent "$vserver" exec apt-get "${apt_param[@]}" )
    113 	    else
    114 		cmd=( "$_VSERVER" --silent "$vserver" exec rpm "${rpm_param[@]}" )
    115 	    fi
    116 	fi
    117 	;;
    118     (debian)
    119 	case "$tag" in
    120 	    (get-conffiles)
    121 		cmd=( sh -c "cat /var/lib/dpkg/info/*.conffiles 2>/dev/null" )
    122 		;;
    123 	    (install)
    124 		cmd=( apt-get install "$@" )
    125 		;;
    126 	esac
    127 
    128 	if test -n "$is_external"; then
    129 	    echo $"'external' packagemanagement is not supported for Debian" >&2
    130 	    exit 1
    131 	else
    132 	    cmd=( "$_VSERVER" --silent "$vserver" exec "${cmd[@]}" )
    133 	fi
    134 	;;
    135     (*)
    136 	echo $"Packagemanagement is not supported for '$style' style" >&2
    137 	exit 2
    138 	;;
    139 esac
    140 
    141 export LANG=C
    142 exec "${cmd[@]}"