# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+_VS_NEWLINE='
+'
+declare -r _VS_NEWLINE=${_VS_NEWLINE:0-1}
+
function findObject
{
local mod=$1
findObject -d "$@"
}
+function findAndCopy
+{
+ local dst=$1
+ test ! -s "$dst" || return 0
+
+ local tmp
+ shift
+ findFile tmp "$@"
+
+ test "$tmp" -a -s "$tmp" || return 0
+ cp -af "$tmp" "$dst"
+}
+
function getPhysicalDir
{
( set -P && cd "$1" && pwd )
function _pkgSetVarsBase
{
case "$vserver" in
- /*)
- echo "not supported yet"
- exit 1
+ ./*|/*)
+ if test -d "$vserver/vdir"; then
+ BASEDIR=$vserver
+ VDIR=$(getPhysicalDir "$vserver/vdir")
+
+ PKGDIR=$BASEDIR/apps/pkgmgmt
+ test -d "$PKGDIR" || {
+ echo "Can not find configuration-directory for package-managment tools"
+ exit 1
+ }
+ findDir EXECDIR $PKGDIR/execdir /
+ else
+ VDIR=$(getPhysicalDir "$vserver")
+ PKGDIR=
+ fi
;;
*)
BASEDIR=$CONFDIR/$vserver
}
VDIR=$BASEDIR/vdir
- test -d "$VDIR" || VDIR=/vservers/$vserver
+ test -d "$VDIR" || VDIR=$DEFAULT_VSERVERDIR/$vserver
VDIR=$(getPhysicalDir "$VDIR")
PKGDIR=$BASEDIR/apps/pkgmgmt
function _pkgSetVarsRPM
{
- case "$vserver" in
- /*)
- echo "not supported yet"
- exit 1
- ;;
-
- *)
- findDir RPMETCDIR $PKGDIR/rpmetc $PKGDIR/base/rpm/etc /etc/rpm
- findDir RPMSTATEDIR $PKGDIR/rpmstate $PKGDIR/base/rpm/state
+ if test "$PKGDIR"; then
+ findDir RPMETCDIR $PKGDIR/rpmetc $PKGDIR/base/rpm/etc /etc/rpm
+ findDir RPMSTATEDIR $PKGDIR/rpmstate $PKGDIR/base/rpm/state
- findDir RPMLIBDIR $PKGDIR/rpmlib /
+ findDir RPMLIBDIR $PKGDIR/rpmlib /
- RPMSTATEDIR=$(getPhysicalDir "$RPMSTATEDIR")
- RPMETCDIR=$(getPhysicalDir "$RPMETCDIR")
- ;;
- esac
+ else
+ findDir RPMETCDIR "$VDIR"/etc/rpm /etc/rpm
+ findDir RPMSTATEDIR "$VDIR"/var/lib/rpm
+ RPMLIBDIR=/
+ fi
+
+ RPMSTATEDIR=$(getPhysicalDir "$RPMSTATEDIR")
+ RPMETCDIR=$(getPhysicalDir "$RPMETCDIR")
}
function _pkgSetVarsApt
{
- case "$vserver" in
- /*)
- echo "not supported yet"
- exit 1
- ;;
-
- *)
- findDir APTETCDIR $PKGDIR/aptetc $PKGDIR/base/apt/etc /etc/apt
- findDir APTSTATEDIR $PKGDIR/aptstate $PKGDIR/base/apt/state
- findDir APTCACHEDIR $PKGDIR/aptcache $PKGDIR/base/apt/cache
- findDir APTARCHIVDIR $PKGDIR/aptarchives $PKGDIR/base/apt/archives /var/cache/apt/archives
- ;;
- esac
+ if test "$PKGDIR"; then
+ findDir APTETCDIR $PKGDIR/aptetc $PKGDIR/base/apt/etc /etc/apt
+ findDir APTSTATEDIR $PKGDIR/aptstate $PKGDIR/base/apt/state
+ findDir APTCACHEDIR $PKGDIR/aptcache $PKGDIR/base/apt/cache
+ findDir APTARCHIVDIR $PKGDIR/aptarchives $PKGDIR/base/apt/archives /var/cache/apt/archives
+ else
+ findDir APTETCDIR "$VDIR"/etc/apt /etc/apt
+ findDir APTSTATEDIR "$VDIR"/var/state/apt
+ 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
_PKG_VSERVER=$vserver
}
+function isAvoidNamespace
+{
+ test ! -e "$1"/namespace || return 1
+ test -e "$CONFDIR"/.defaults/nonamespace -o \
+ -e "$1"/nonamespace
+}
+
function getAllVservers
{
local i
- local var=$1
+ declare -a _tmp=()
for i in $CONFDIR/*; do
test -d "$i" || continue
test ! -e "$i"/disabled || continue
test -d "$i"/vdir || continue
+ case "$i" in
+ *.~*~) continue;;
+ esac
- eval "$var=\"$var ${i##$CONFDIR/}\""
+ _tmp=( "${_tmp[@]}" "${i##$CONFDIR/}")
done
+
+ eval $1='( "${_tmp[@]}" )'
}
+## Usage: getVserverCtx <vdir> <result-varname> [<procnumber-varname> [<do-cleanup>]]
+function getVserverStatus
+{
+ test -r "$1"/run || return 1
+
+ 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 )
+ eval "$3"=\$_tmp
+
+ test "$4" -a $_tmp = 0 || return 0
+ _tmp=$($_READLINK "$1/run")
+ test "$_tmp" || return 1
+ rm -f "$_tmp"
+ 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
{
- local vdir=$1
- test -r "$vdir/run" || return 1
+ local ctx procnum
+
+ getVserverStatus "$1" ctx procnum 1 || return 1
+ test $procnum != 0 || return 1
+ test -z "$2" || eval "$2"=\$ctx
+ return 0
+}
+
+## Called as 'getFileValue <varname> <filename>'
+function getFileValue
+{
+ test -r "$2" || return 0
+ eval read "$1" <"$2"
+}
+
+## Called as 'getFileArray <varname> <filename>'
+function getFileArray
+{
+ test -r "$2" || return 0
+
+ local IFS=$_VS_NEWLINE
+ eval "$1"='( $(< "$2") )'
+}
+
+function checkComponents
+{
+ local i
+ local msg=$1
+ local x_failed=
- local ctx
- read ctx <"$vdir"/run || { echo "Failed to read ctx information" >&2; return 0; }
+ shift
- local cnt=$($_VPS ax | $_AWK '{print $2}' | $_GREP -x "$ctx" | $_WC -l )
+ for i; do
+ local failed=
+ case "$i" in
+ core) test -x "$_CHBIND" || failed=1;;
+ 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'"
+ return false
+ ;;
+ esac
- if test $cnt = 0; then
- ## Remove old lock-file
- rm -f $(readlink "$vdir/run")
- return 1
- else
- return 0
- fi
+ test -z "$failed" || {
+ echo "$msg: $i"
+ x_failed=1
+ }
+ done
+
+ test -z "$x_failed"
+}
+
+## Usage: isKernelAPI <ver> [<cmp-modifier>]
+function isKernelAPI
+{
+ local api=$($_VSERVER_INFO - APIVER) || api=0
+ test $[ $api ] -${2:-ge} $[ $1 ]
}