function _pkgSetVarsBase
{
case "$vserver" in
- /*)
+ ./*|/*)
if test -d "$vserver/vdir"; then
BASEDIR=$vserver
VDIR=$(getPhysicalDir "$vserver/vdir")
test -d "$PKGDIR" || {
echo "Can not find configuration-directory for package-managment tools"
exit 1
- }
+ } >&2
findDir EXECDIR $PKGDIR/execdir /
else
VDIR=$(getPhysicalDir "$vserver")
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 /
findDir APTCACHEDIR "$VDIR"/var/cache/apt
findDir APTARCHIVDIR "$VDIR"/var/cache/apt/archives /var/cache/apt/archives
fi
+
+ findFile APT_CONFIG "$APTETCDIR"/apt.conf ""
+ test -z "$APT_CONFIG" || export APT_CONFIG
}
function _pkgMountBase
"$_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
case "$i" in
rpm) _pkgSetVarsRPM;;
apt) _pkgSetVarsApt;;
- *) echo "Unknown packaging flavor"; exit 1;;
+ *) echo "Unknown packaging flavor" >&2; exit 1;;
esac
done
_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
test -d "$i" || continue
test ! -e "$i"/disabled || continue
test -d "$i"/vdir || continue
+ case "$i" in
+ *.~*~) continue;;
+ esac
_tmp=( "${_tmp[@]}" "${i##$CONFDIR/}")
done
}
## Usage: getVserverCtx <vdir> <result-varname> [<procnumber-varname> [<do-cleanup>]]
+## Returns: 0 iff vserver is running
function getVserverStatus
{
test -r "$1"/run || return 1
- eval read "$2" <"$1"/run
+
+ local _ctx
+ read _ctx <"$1"/run
+ eval "$2"=\$_ctx
test "$3" || return 0
- local _tmp=$($_VPS ax | $_AWK '{print $2}' | $_GREP -x "$ctx" | $_WC -l )
+ local _tmp=$($_VPS ax | $_AWK '{print $2}' | $_GREP -x "$_ctx" | $_WC -l )
+ let _tmp=_tmp+0
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
}
+## Usage: isCtxRunning <ctx>
+function isCtxRunning
+{
+ local _tmp=$($_VPS ax | $_AWK '{print $2}' | $_GREP -x "$1" | $_WC -l )
+ test $_tmp -gt 0
+}
+
## Usage: isVserverRunning <vdir> [<ctx-varname>]
function isVserverRunning
{
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
test -z "$failed" || {
echo "$msg: $i"
x_failed=1
- }
+ } >&2
done
test -z "$x_failed"
}
+
+## Usage: isKernelAPI <ver> [<cmp-modifier>]
+function isKernelAPI
+{
+ local api=$($_VSERVER_INFO - APIVER) || api=0
+ test $[ $api ] -${2:-ge} $[ $1 ]
+}
+
+## Usage: callInNamespace <vserver> <command> <args>*
+function callInNamespace
+{
+ local ctx=
+
+ isAvoidNamespace "$1" || \
+ ctx=$( $_VSERVER_INFO "$1" CONTEXT t ) || ctx=
+
+ shift
+ if test "$ctx"; then
+ $_VNAMESPACE --enter "$ctx" -- "$@"
+ else
+ "$@"
+ fi
+}
+
+## Usage: pkgmgmt.guessStyle <vserver> <resultvar>
+function pkgmgmt.guessStyle()
+{
+ local vdir=$($_VSERVER_INFO "$1" VDIR) || {
+ echo $"Can not determine vserver-root" >&2
+ return 1
+ }
+ local cfgdir=$($_VSERVER_INFO "$1" APPDIR pkgmgmt) || :
+
+ if test "$cfgdir" -a -e "$cfgdir"/style; then
+ read style <"$cfgdir"/style
+ elif test -e "$vdir"/etc/redhat-release -o -e "$vdir"/etc/fedora-release; then
+ style=redhat
+ elif test -e "$vdir"/etc/mandrake-release; then
+ style=mandrake
+ elif test -e "$vdir"/etc/debian_version; then
+ style=debian
+ elif test -e "$vdir"/etc/SuSE-release; then
+ style=suse
+ else
+ echo $"Can not determine packagemanagement style" >&2
+ return 1
+ fi
+
+ eval $2=\$style
+ return 0
+}
+
+## Usage: pkgmgmt.isInternal <vserver>
+## returns true iff <vserver> is configured for internal packagemanagement
+## A typical application is
+## | is_external=
+## | pkgmgmt.isInternal "$vserver" || is_external=1
+function pkgmgmt.isInternal
+{
+ local cfgdir=$($_VSERVER_INFO "$1" APPDIR pkgmgmt) || :
+
+ test -z "$cfgdir" -o ! -d "$cfgdir" -o -e "$cfgdir"/internal
+}