From: Enrico Scholz Date: Fri, 26 Mar 2004 07:30:33 +0000 (+0000) Subject: logging(),warning(),panic(),execute(): added X-Git-Tag: VERSION_0_10~208 X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5e65844d0c193527e61026b4a59d8d6d93de3a81;hp=8e97f7eb02e852dc7995bbcf7368eb9b05e0908a;p=util-vserver.git logging(),warning(),panic(),execute(): added pkgmgmt.isAptAvailable(): added vshelper.*(): added getFileArray(): fail, when file does not exist git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@1367 94cd875c-1c1d-0410-91d2-eb244daf1a30 --- diff --git a/util-vserver/scripts/functions b/util-vserver/scripts/functions index d315f6c..eb8e863 100644 --- a/util-vserver/scripts/functions +++ b/util-vserver/scripts/functions @@ -15,6 +15,9 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +_VS_LOGFILE= +_VS_ERRFILE= + _VS_NEWLINE=' ' declare -r _VS_NEWLINE=${_VS_NEWLINE:0-1} @@ -68,6 +71,43 @@ function getPhysicalDir ( set -P && cd "$1" && pwd ) } +function logging +{ + if test "$_VS_LOGFILE"; then + echo "$@" >>"$_VS_LOGFILE" + else + echo "$@" + fi +} + +function warning +{ + if test "$_VS_ERRFILE"; then + echo "$@" >>"$_VS_ERRFILE" + else + echo "$@" >&2 + fi +} + +function panic +{ + if test "$_VS_ERRFILE"; then + echo "$@" >>"$_VS_ERRFILE" + else + echo "$@" >&2 + fi + + exit 1 +} + +function execute +{ + test -z "${DEBUG_EXEC:-}" || echo "$@" + test "${DEBUG_EXEC:-}" = noexec || exec "$@" + exit 0 +} + + function _pkgMountBindDir() { test "$1" != "$2" || return 0 @@ -322,7 +362,7 @@ function getFileValue ## Called as 'getFileArray ' function getFileArray { - test -r "$2" || return 0 + test -r "$2" || return 1 local IFS=$_VS_NEWLINE eval "$1"='( $(< "$2") )' @@ -419,3 +459,225 @@ function pkgmgmt.isInternal test -z "$cfgdir" -o ! -d "$cfgdir" -o -e "$cfgdir"/internal } + +## Usage: pkgmgmt.isAptAvailable [] +function pkgmgmt.isAptAvailable +{ + local cfgdir="$1" + local vdir="$2" + local is_internal="$3" + + local have_apt i + if test "$is_internal"; then + have_apt=1 + test -d "$cfgdir"/base/apt -o -d "$cfgdir"/aptetc || have_apt= + else + have_apt= + for i in /bin /usr/bin /usr/local/bin; do + test ! -x "$vdir$i"/apt-get || { have_apt=1; break; } + done + fi + + test "$have_apt" && return 0 || return 1 +} + +function vshelper.doSanityCheck +{ + local vshelper this_xid i + declare -a warnings=() + local solution_disable= + local solution_sysctl= + + vshelper.isEnabled && vshelper.isEnabled warning || return 0 + + this_xid=$($_VSERVER_INFO - XID) || + panic $"Failed to determine current context; aborting..." + + ## Do nothing in other xid's; the helper will be executed in xid 0 only + test "$this_xid" = 0 || return 0 + + local proc_file=/proc/sys/kernel/vshelper + + if ! test -r "$proc_file"; then + vshelper= + warnings=( "${warnings[@]}" + $"File '$proc_file' does not exists but is required for vshelper setup" ) + solution_disable=1 + else + vshelper=$(cat "$proc_file") + + cmp -s "$vshelper" "$_VSHELPER" || { + warnings=( "${warnings[@]}" + $"The configured vshelper '$vshelper' does not match the 'vshelper' + script of the util-vserver package" + ) + solution_disable=1 + solution_sysctl=1 + } + fi + + test -d "$VSHELPERSTATEDIR" || { + warnings=( "${warnings[@]}" + $"\ +The vshelper state-directory '$VSHELPERSTATEDIR' does not exist; + since it is created by 'make install', this indicates a serious + problem with your util-vserver installation" ) + solution_disable=1 + } + + test "${#warnings[@]}" -eq 0 || { + warning $"\ +The following problem(s) were encountered while verifying vshelper +functionality:" + + for i in "${warnings[@]}"; do + warning "* $i" + done + + warning $"\ + +To fix this, you can:" + + test -z "$solution_disable" || warning $"\ +* disable vshelper entirely by executing + | touch \"$CONFDIR/.defaults/apps/vshelper/disabled\" +* disable only this message by executing + | touch \"$CONFDIR/.defaults/apps/vshelper/warning-disabled\"" + + test -x "$solution_sysctl" || warning $"\ +* configure the util-vserver vshelper script, e.g. by adding + | kernel.vshelper = \"$_VSHELPER\" + to /etc/sysctl.conf and rebooting the machine, or by executing + | echo \"$_VSHELPER\" >$proc_file" + + warning "" + + return 1 + } + + return 0 +} + +## Usage: vshelper.isEnabled [