-# $Id: functions,v 1.62 2005/07/03 17:42:49 ensc Exp $ --*- sh -*--
+# $Id: functions 2531 2007-04-21 14:04:35Z dhozac $ --*- sh -*--
-# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+# Copyright (C) 2003,2004,2005,2006 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
( set -P && cd "$1" && pwd )
}
+## Usage:: isDirectoryEmpty <dir> [<ignore-lost+found>]
+function isDirectoryEmpty
+{
+ (
+ shopt -s dotglob || *
+ shopt -s nullglob || *
+
+ ignore_lostfound=1
+ test -z "$2" -o "$2" = 0 || ignore_lostfound=
+
+ for i in "$1"/*; do
+ case "$i" in
+ ($1/lost+found)
+ test "$ignore_lostfound" || exit 1
+ ;;
+ (*) echo "$i"; exit 1
+ esac
+ done
+
+ exit 0
+ )
+}
+
## Usage: logging <message>
function logging
{
esac
fi
- "$@"
+ ( "$@" )
echo -ne "\e[m"
fi
}
+function colpanic
+{
+ if test -n "$_VS_ERRFILE"; then
+ echo "$@" >>"$_VS_ERRFILE"
+ else
+ colorize error echo -n "$@" >&2
+ fi
+ echo
+
+ exit 1
+}
+
+function colwarning
+{
+ colorize warning warning "$@"
+}
+
+function colinfo
+{
+ colorize info echo "$@"
+}
+
+
## Usage: xtermTitle <title>
function xtermTitle
{
## Usage: lock <lockfile> [<timeout>]
function lock
{
- local tmp=$($_MKTEMP /tmp/vserver-lock.XXXXXX)
+ local tmp=$($_MKTEMP vserver-lock.XXXXXX)
$_RM -f $tmp
$_MKFIFO -m600 $tmp
_VS_LOCKS="$@"
}
+function get_init_cwd
+{
+ if test -n "$INIT_CWD"; then
+ echo "$INIT_CWD"
+ else
+ pwd
+ fi
+}
+function set_init_cwd
+{
+ INIT_CWD="`pwd`"
+ export INIT_CWD
+}
+
+function _setVserverDir
+{
+ local vserver="$1"
+ case "$vserver" in
+ ./*) VSERVER_DIR="`get_init_cwd`/$vserver";;
+ /*) VSERVER_DIR="$vserver" ;;
+ *) VSERVER_DIR="$__CONFDIR/$vserver" ;;
+ esac
+}
+
+function _setVserverName
+{
+ if test -e "$VSERVER_DIR"/name; then
+ read VSERVER_NAME <"$VSERVER_DIR"/name
+ else
+ VSERVER_NAME=$(basename "$VSERVER_DIR")
+ fi
+}
+
function _pkgMountBindDir()
{
test "$1" != "$2" || return 0
-e "$cfgdir"/nonamespace
}
+function isNamespaceCleanup
+{
+ local cfgdir
+
+ $_VSERVER_INFO - FEATURE namespace || return 1
+ cfgdir=$($_VSERVER_INFO "$1" CFGDIR) || return 1
+ isAvoidNamespace "$1" && return 1
+ test -e "$cfgdir"/namespace-cleanup && return 0
+ test -e "$cfgdir"/nonamespace-cleanup -o \
+ -e "$__CONFDIR"/.defaults/nonamespace-cleanup && return 1
+ return 0
+}
+
## Usage: getAllVservers <var> [<KIND>*]
function getAllVservers
{
# Use /proc/virtual from kernel 2.6 when possible
if test -d "/proc/virtual"; then
- set -- $($_GREP '^PROC:' "/proc/virtual/$1/limit" 2>/dev/null)
+ set -- $($_GREP '^Tasks:' "/proc/virtual/$1/status" 2>/dev/null)
_gp_procnr_cnt=$2
else
_gp_procnr_cnt=$($_VPS ax | $_AWK '{print $2}' | $_GREP -x "$1" | $_WC -l )
eval read "$_gfv_var" <"$_gfv_file"
}
-## Called as 'getFileArray <varname> <filename>'
+## Called as 'getFileArray <varname> <filename>+'
function getFileArray
{
- test -r "$2" || return 1
-
+ local _gfa_var=$1
+ local _gfa_file
+ shift
+
+ findFile _gfa_file "$@" ''
+ test -n "$_gfa_file" -a -r "$_gfa_file" || return 0
local IFS=$_VS_NEWLINE
- eval "$1"='( $(< "$2") )'
+ eval "$_gfa_var"='( $(< "$_gfa_file") )'
}
function checkComponents
"$__CONFDIR/.defaults/apps/init/tty" \
$2 /dev/null
- exec <$ttyname
- exec &>$ttyname
+ if test -f "$ttyname"; then
+ exec </dev/null
+ else
+ exec <$ttyname
+ fi
+ exec >>$ttyname 2>&1
}
## Usage: killContext <XID> [<SIG>]
#$_VKILL -s CONT --xid "$1" 1 &>/dev/null || :
}
+function useVlogin
+{
+ test ! -e "$__CONFDIR/.defaults/apps/vlogin/disable"
+}
+
## Usage: pkgmgmt.guessStyle <vserver> <resultvar>
function pkgmgmt.guessStyle()
{
vshelper=$(cat "$proc_file")
$_CMP -s "$vshelper" "$_VSHELPER" || {
+ local readable=""
+ test -r "$vshelper" && readable=1
warnings=( "${warnings[@]}"
$"The configured vshelper '$vshelper' does not match the 'vshelper'
- script of the util-vserver package"
+ script of the util-vserver package.${readable:+ Maybe you have two versions installed?}"
)
solution_disable=1
solution_sysctl=1
function vshelper.initSync
{
local _vis_tmpdir
- _vis_tmpdir=$($_MKTEMPDIR /tmp/vserver-stop.XXXXXX) || {
+ _vis_tmpdir=$($_MKTEMPDIR vserver-stop.XXXXXX) || {
warning $"Failed to generate temporary directory for vshelper sync"
return 1
}
eval $2=\$_vgst_tmp
}
+function vshelper.initStopSync
+{
+ local _iss_sync_dir=$($_MKTEMPDIR vshelper-stop-sync.XXXXXX) || {
+ warning $"Failed to generate directory for vshelper sync"
+ exit 1
+ }
+ $_MKFIFO -m700 "$_iss_sync_dir/pipe"
+
+ eval "$1"=\$_iss_sync_dir
+ VSHELPER_STOP_SYNC="$_iss_sync_dir/pipe"
+ export VSHELPER_STOP_SYNC
+}
+
+function vshelper.waitForStopSync
+{
+ local sync_dir=$1
+ cat "$sync_dir/pipe" &> /dev/null
+ rm -fr "$sync_dir"
+}
+
+function vshelper.doStopSync
+{
+ test ! -p "$VSHELPER_STOP_SYNC" || echo stopped > "$VSHELPER_STOP_SYNC"
+}
+
+function vshelper.isStopSync
+{
+ test -p "$VSHELPER_STOP_SYNC" || return 1
+ return 0
+}
function _rpmFake.getCapFlags
{