X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=scripts%2Ffunctions;h=a4c46b97a3ccdf7f90a37420c925a7eb6a89cf54;hb=d641b1e3fac4d105ac0c7d0739d4cff765387264;hp=32863d85591bc01c53c694d9be40ddcc0bcfd1f0;hpb=cd841ad88a1deb62271fff26455c4c2bbd23c6e0;p=util-vserver.git diff --git a/scripts/functions b/scripts/functions index 32863d8..a4c46b9 100644 --- a/scripts/functions +++ b/scripts/functions @@ -21,7 +21,6 @@ _VS_ERRFILE= _VS_NEWLINE=' ' declare -r _VS_NEWLINE=${_VS_NEWLINE:0-1} -declare -r VS_ALLVSERVERS_ARGS=all,marked,unmarked,stopped,running function findObject { @@ -355,8 +354,10 @@ function _pkgSetVarsBase function _pkgSetVarsRPM { if test -n "$PKGDIR"; then - findDir RPMETCDIR $PKGDIR/rpmetc $PKGDIR/base/rpm/etc /etc/rpm - findDir RPMSTATEDIR $PKGDIR/rpmstate $PKGDIR/base/rpm/state + findDir RPMETCDIR $PKGDIR/rpmetc $PKGDIR/base/rpm/etc \ + $PKGDIR/base/etc/rpm /etc/rpm + findDir RPMSTATEDIR $PKGDIR/rpmstate $PKGDIR/base/rpm/state \ + $PKGDIR/base/var/lib/rpm findDir RPMLIBDIR $PKGDIR/rpmlib / @@ -399,6 +400,17 @@ function _pkgSetVarsYum fi } +function _pkgSetVarsUrpmi +{ + if test -n "$PKGDIR"; then + findDir URPMIETCDIR $PKGDIR/urpmietc $PKGDIR/base/etc/urpmi /etc/urpmi + findDir URPMISTATEDIR $PKGDIR/urpmistate $PKGDIR/base/var/lib/urpmi + else + findDir URPMIETCDIR "$VDIR"/etc/urpmi /etc/urpmi + findDir URPMISTATEDIR "$VDIR"/var/lib/urpmi /var/lib/urpmi + fi +} + function _pkgMountBase { @@ -415,6 +427,11 @@ function _pkgMountYum : } +function _pkgMountUrpmi +{ + _pkgMountBindDir "$RPMSTATEDIR" "$URPMISTATEDIR/../../../.rpmdb" +} + function _pkgMountRPM { _pkgMountBindDir "$RPMETCDIR" /etc/rpm @@ -451,6 +468,11 @@ function _pkgSetEnvYum : } +function _pkgSetEnvUrpmi +{ + : +} + function _pkgSetEnvRPM { CUR_VSERVER=$vserver @@ -472,6 +494,7 @@ function pkgInit rpm) _pkgSetVarsRPM;; apt) _pkgSetVarsApt;; yum) _pkgSetVarsYum;; + urpmi) _pkgSetVarsUrpmi;; *) echo "Unknown packaging flavor" >&2; exit 1;; esac done @@ -482,6 +505,7 @@ function pkgInit rpm) _pkgMountRPM;; apt) _pkgMountApt;; yum) _pkgMountYum;; + urpmi) _pkgMountUrpmi;; esac done @@ -491,6 +515,7 @@ function pkgInit rpm) _pkgSetEnvRPM;; apt) _pkgSetEnvApt;; yum) _pkgSetEnvYum;; + urpmi) _pkgSetEnvUrpmi;; esac done @@ -527,6 +552,10 @@ function getAllVservers { local _ga_i declare -a _ga_tmp=() + local _ga_IFS="$IFS" + IFS=, + local -a _ga_marks=( $3 ) + IFS="$_ga_IFS" for _ga_i in $__CONFDIR/*; do isRegularFile "$_ga_i" -d || continue @@ -543,7 +572,19 @@ function getAllVservers (STOPPED) ! $_VSERVER "$_ga_i" running &>/dev/null || _ga_doadd=;; (RUNNING) $_VSERVER "$_ga_i" running &>/dev/null || _ga_doadd=;; (ALL) ;; - (MARK) test -s "$_ga_markfile" && grep -qx "$3" "$_ga_markfile" || _ga_doadd=;; + (MARK) local _ga_j + local _ga_mark + local _ga_f=false + local _ga_invert=false + for _ga_j in "${_ga_marks[@]}"; do + _ga_mark="$(echo "$_ga_j" | $_SED 's/^[!~]//')" + test "$_ga_j" = "$_ga_mark" || _ga_invert=true + test -s "$_ga_markfile" && $_GREP -qx "$_ga_mark" "$_ga_markfile" && \ + _ga_f=true || : + done + test $_ga_f = $_ga_invert && \ + _ga_doadd= + ;; (*) panic $"Unknown vserver tagging '$2'";; esac @@ -553,6 +594,7 @@ function getAllVservers eval $1='( "${_ga_tmp[@]}" )' } +declare -r VS_ALLVSERVERS_ARGS=all,marked,unmarked,stopped,running,mark: ## Usage: getAllVserversByArg function getAllVserversByArg { @@ -579,7 +621,8 @@ function getAllVserversByArg shift ;; (--) break;; - (*) return 1;; + (*) set -- "$_gav_v" "$@" + return 1;; esac getAllVservers _gav_tmp "$_gav_mark" $_gav_extra @@ -587,7 +630,8 @@ function getAllVserversByArg _gav_res=( "${_gav_tmp[@]}" ) else local _gav_i=0 - while test $_gav_i -lt "${#_gav_res[@]}"; do + local _gav_n="${#_gav_res[@]}" + while test $_gav_i -lt $_gav_n; do local _gav_found=0 for _gav_j in "${_gav_tmp[@]}"; do if test "$_gav_j" = "${_gav_res[$_gav_i]}"; then @@ -872,6 +916,27 @@ function pkgmgmt.isYumAvailable test -n "$have_yum" && return 0 || return 1 } +## Usage: pkgmgmt.isUrpmiAvailable [] +function pkgmgmt.isUrpmiAvailable +{ + local cfgdir="$1" + local vdir="$2" + local is_internal="$3" + + local have_urpmi i + if test -n "$is_internal"; then + have_urpmi=1 + test -d "$cfgdir"/base/var/lib/urpmi || have_urpmi= + else + have_urpmi= + for i in /bin /usr/bin /usr/local/bin; do + test ! -x "$vdir$i"/urpmi || { have_urpmi=1; break; } + done + fi + + test -n "$have_urpmi" && return 0 || return 1 +} + function vshelper.doSanityCheck {