gentoo: use /var/run for new /run compatibility
[util-vserver.git] / scripts / functions
index 7f2a92a..2eac61f 100644 (file)
@@ -91,7 +91,7 @@ function isDirectoryEmpty
        shopt -s nullglob || *
 
        ignore_lostfound=1
-       test -z "$2" -o "$2" = 0 || ignore_lostfound=
+       test -n "$2" -a "$2" != 0 || ignore_lostfound=
        
        for i in "$1"/*; do
            case "$i" in
@@ -354,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      /
 
@@ -398,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
 {
@@ -414,6 +427,11 @@ function _pkgMountYum
     :
 }
 
+function _pkgMountUrpmi
+{
+    _pkgMountBindDir "$RPMSTATEDIR" "$URPMISTATEDIR/../../../.rpmdb"
+}
+
 function _pkgMountRPM
 {
     _pkgMountBindDir "$RPMETCDIR" /etc/rpm
@@ -450,6 +468,11 @@ function _pkgSetEnvYum
     :
 }
 
+function _pkgSetEnvUrpmi
+{
+    :
+}
+
 function _pkgSetEnvRPM
 {
     CUR_VSERVER=$vserver
@@ -471,6 +494,7 @@ function pkgInit
            rpm)        _pkgSetVarsRPM;;
            apt)        _pkgSetVarsApt;;
            yum)        _pkgSetVarsYum;;
+           urpmi)      _pkgSetVarsUrpmi;;
            *)          echo "Unknown packaging flavor" >&2; exit 1;;
        esac
     done
@@ -481,6 +505,7 @@ function pkgInit
            rpm)        _pkgMountRPM;;
            apt)        _pkgMountApt;;
            yum)        _pkgMountYum;;
+           urpmi)      _pkgMountUrpmi;;
        esac
     done
 
@@ -490,6 +515,7 @@ function pkgInit
            rpm)        _pkgSetEnvRPM;;
            apt)        _pkgSetEnvApt;;
            yum)        _pkgSetEnvYum;;
+           urpmi)      _pkgSetEnvUrpmi;;
        esac
     done
 
@@ -546,18 +572,18 @@ function getAllVservers
            (STOPPED)   ! $_VSERVER "$_ga_i" running &>/dev/null || _ga_doadd=;;
            (RUNNING)     $_VSERVER "$_ga_i" running &>/dev/null || _ga_doadd=;;
            (ALL)       ;;
-           (MARK)      if test -s "$_ga_markfile"; then
-                           if ! grep -qx "$3" "$_ga_markfile"; then
-                               local _ga_j
-                               local _ga_f=false
-                               for _ga_j in "${_ga_marks[@]}"; do
-                                   grep -qx "$_ga_j" "$_ga_markfile" && _ga_f=true || :
-                               done
-                               "$_ga_f" || _ga_doadd=
-                           fi
-                       else
+           (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=
-                       fi
                        ;;
            (*)         panic $"Unknown vserver tagging '$2'";;
        esac
@@ -890,6 +916,27 @@ function pkgmgmt.isYumAvailable
     test -n "$have_yum" && return 0 || return 1
 }
 
+## Usage: pkgmgmt.isUrpmiAvailable <cfgdir> <vdir> [<is-internal>]
+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
 {