X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Fscripts%2Ffunctions;h=3ffee15c14412fac2af43ee4a7b2498996324a1a;hb=3d3c9e96f398fe4eddd4c73bcc50386ca8a8812e;hp=df8129fa5e8c6d8e13e35c28c4206a7417a725db;hpb=444046f0ef47ccc25a76408fdf61177d6c393a3a;p=util-vserver.git diff --git a/util-vserver/scripts/functions b/util-vserver/scripts/functions index df8129f..3ffee15 100644 --- a/util-vserver/scripts/functions +++ b/util-vserver/scripts/functions @@ -87,7 +87,7 @@ function _pkgSetVarsBase test -d "$PKGDIR" || { echo "Can not find configuration-directory for package-managment tools" exit 1 - } + } >&2 findDir EXECDIR $PKGDIR/execdir / else VDIR=$(getPhysicalDir "$vserver") @@ -99,17 +99,17 @@ function _pkgSetVarsBase test -d "$BASEDIR" || { echo "Can not find configuration-directory" exit 1 - } + } >&2 VDIR=$BASEDIR/vdir - test -d "$VDIR" || VDIR=/vservers/$vserver + test -d "$VDIR" || VDIR=$DEFAULT_VSERVERDIR/$vserver VDIR=$(getPhysicalDir "$VDIR") PKGDIR=$BASEDIR/apps/pkgmgmt test -d "$PKGDIR" || { echo "Can not find configuration-directory for package-managment tools" exit 1 - } + } >&2 findDir EXECDIR $PKGDIR/execdir / @@ -176,6 +176,9 @@ function _pkgMountRPM "$_SECURE_MOUNT" --chroot "$VDIR" -n --secure --bind "$RPMSTATEDIR" "$_rpmdb_mntpoint" test -z "$WORKAROUND_106057" || mount -n --bind "$RPMSTATEDIR" "$_rpmdb_mntpoint" + + test -e "$VDIR"/proc/self/status || \ + "$_SECURE_MOUNT" --chroot "$VDIR" -n --secure -t proc none /proc } function _pkgSetEnvBase @@ -213,7 +216,7 @@ function pkgInit case "$i" in rpm) _pkgSetVarsRPM;; apt) _pkgSetVarsApt;; - *) echo "Unknown packaging flavor"; exit 1;; + *) echo "Unknown packaging flavor" >&2; exit 1;; esac done @@ -237,6 +240,17 @@ function pkgInit _PKG_VSERVER=$vserver } +function isAvoidNamespace +{ + local cfgdir + + $_VSERVER_INFO - FEATURE namespace || return 0 + cfgdir=$($_VSERVER_INFO "$1" CFGDIR) || return 0 + test ! -e "$cfgdir"/namespace || return 1 + test -e "$CONFDIR"/.defaults/nonamespace -o \ + -e "$cfgdir"/nonamespace +} + function getAllVservers { local i @@ -257,6 +271,7 @@ function getAllVservers } ## Usage: getVserverCtx [ []] +## Returns: 0 iff vserver is running function getVserverStatus { test -r "$1"/run || return 1 @@ -269,10 +284,12 @@ function getVserverStatus local _tmp=$($_VPS ax | $_AWK '{print $2}' | $_GREP -x "$_ctx" | $_WC -l ) eval "$3"=\$_tmp - test "$4" -a $_tmp = 0 || return 0 - _tmp=$(readlink "$1/run") - test "$_tmp" || return 1 - rm -f "$_tmp" + if test "$_tmp" = 0; then + local runfile=$($_READLINK "$1/run") + test -z "$4" || rm -f "$runfile" + return 1 + fi + return 0 } @@ -325,7 +342,7 @@ function checkComponents build) test -x "$_VSERVER_BUILD" || failed=1;; sysv) test -x "$INITRDDIR/vserver" || failed=1;; devel) test -d "$INCLUDEDIR/vserver.h" || failed=1;; - *) echo "Unknown component '$i'" + *) echo "Unknown component '$i'" >&2 return false ;; esac @@ -333,8 +350,31 @@ function checkComponents test -z "$failed" || { echo "$msg: $i" x_failed=1 - } + } >&2 done test -z "$x_failed" } + +## Usage: isKernelAPI [] +function isKernelAPI +{ + local api=$($_VSERVER_INFO - APIVER) || api=0 + test $[ $api ] -${2:-ge} $[ $1 ] +} + +## Usage: callInNamespace * +function callInNamespace +{ + local ctx= + + isAvoidNamespace "$1" || \ + ctx=$( $_VSERVER_INFO "$1" CONTEXT t ) || ctx= + + shift + if test "$ctx"; then + $_VNAMESPACE --enter "$ctx" -- "$@" + else + "$@" + fi +}