grml-shlib-1.02.11ubuntu4/0000755000000000000000000000000011626422141012130 5ustar grml-shlib-1.02.11ubuntu4/grml-shlib.3.txt0000644000000000000000000000074510354055763015111 0ustar GRML-SHLIB(3) ============= Michael Gebetsroither NAME ---- grml-shlib - Shell script library SYNOPSIS -------- *source /etc/grml/shlib* DESCRIPTION ----------- *grml-shlib* is a Shell script library with integrated debugging support. SEE ALSO -------- /usr/share/doc/grml-shlib/, /etc/grml/sh-lib AUTHOR ------ grml-shlib was written by Michael Gebetsroither . This manual page was written by Michael Gebetsroither . grml-shlib-1.02.11ubuntu4/Makefile0000644000000000000000000000211510354051761013572 0ustar install_ = install name_ = grml-shlib etc = ${DESTDIR}/etc/ usr = ${DESTDIR}/usr usrbin = $(usr)/bin usrsbin = $(usr)/sbin usrshare = $(usr)/share/$(name_) usrdoc = $(usr)/share/doc/$(name_) man1 = $(usr)/share/man/man1/ man3 = $(usr)/share/man/man3/ man8 = $(usr)/share/man/man8/ %.html : %.txt ; asciidoc -b xhtml11 $^ %.gz : %.txt ; asciidoc -d manpage -b docbook $^ xsltproc /usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl `echo $^ |sed -e 's/.txt/.xml/'` gzip -f --best `echo $^ |sed -e 's/.txt//'` all: doc doc: doc_man doc_html doc_html: $(name_).3.html grml-shlib.3.html: $(name_).3.txt doc_man: $(name_).3.gz TODO.gz grml-shlib.3.gz: $(name_).3.txt TODO.gz: TODO gzip --best -c $^ >$@ install: all $(install_) -d -m 755 $(usrdoc) $(install_) -m 644 $(name_).3.html $(usrdoc) $(install_) -m 644 TODO.gz $(usrdoc) $(install_) -d -m 755 $(man3) $(install_) -m 644 $(name_).3.gz $(man3) $(install_) -m 755 -d ${DESTDIR}/etc/grml $(install_) -m 755 sh-lib ${DESTDIR}/etc/grml clean: rm -rf $(name_).3.html $(name_).3.xml $(name_).3 $(name_).3.gz TODO.gz grml-shlib-1.02.11ubuntu4/debian/0000755000000000000000000000000011626425625013364 5ustar grml-shlib-1.02.11ubuntu4/debian/control0000644000000000000000000000107111626422400014752 0ustar Source: grml-shlib Section: libs Priority: optional Maintainer: Ubuntu Developers XSBC-Original-Maintainer: Michael Gebetsroither Uploaders: Michael Prokop Build-Depends: debhelper (>= 7), asciidoc, xsltproc, docbook-xsl Standards-Version: 3.9.2 Package: grml-shlib Architecture: all Depends: ${misc:Depends}, procps, net-tools, iproute Conflicts: sh-lib Replaces: sh-lib Description: Generic shell library used in grml scripts The grml-shlib is developed on zsh, only partially tested on bash. grml-shlib-1.02.11ubuntu4/debian/docs0000644000000000000000000000000010335162456014221 0ustar grml-shlib-1.02.11ubuntu4/debian/compat0000644000000000000000000000000211626422310014546 0ustar 7 grml-shlib-1.02.11ubuntu4/debian/grml-shlib.doc-base0000644000000000000000000000034511626424707017025 0ustar Document: grml-shlib Title: grml-shlib manual page Author: Michael Gebetsroither Section: Shells Format: HTML Index: /usr/share/doc/grml-shlib/grml-shlib.3.html Files: /usr/share/doc/grml-shlib/grml-shlib.3.html grml-shlib-1.02.11ubuntu4/debian/rules0000755000000000000000000000003611626422334014435 0ustar #!/usr/bin/make -f %: dh $@ grml-shlib-1.02.11ubuntu4/debian/copyright0000644000000000000000000000106311626422753015316 0ustar This package was debianized by Michael Gebetsroither on Sun, 13 Feb 2005 17:57:20 +0100. It is available at: mercurial repos: http://hg.einsteinmg.dyndns.org/grml-shlib dev files: http://einsteinmg.dyndns.org/hg/grml-shlib/ Copyright 2005 Michael Gebetsroither You are free to distribute this software under the terms of the GNU General Public License (GPL) version 2. On Debian systems, the complete text of the GNU General Public License can be found in the file `/usr/share/common-licenses/GPL-2'. grml-shlib-1.02.11ubuntu4/debian/dirs0000644000000000000000000000001110335162456014234 0ustar etc/grml grml-shlib-1.02.11ubuntu4/debian/sh-lib.docs0000644000000000000000000000000510335162456015403 0ustar TODO grml-shlib-1.02.11ubuntu4/debian/changelog0000644000000000000000000001221211626425625015234 0ustar grml-shlib (1.02.11ubuntu4) oneiric; urgency=low * Fix package section (this prevented uploads), set to libs. * Use debhelper 7 with rules.tiny. * Add a doc-base control file. * Bump Standards-Version to 3.9.2. -- Ilya Barygin Sun, 28 Aug 2011 15:48:39 +0400 grml-shlib (1.02.11ubuntu3) feisty; urgency=low * Fix sh-lib to be executable also by dash (LP: #72601). -- Michael Bienia Tue, 13 Feb 2007 20:19:59 +0100 grml-shlib (1.02.11ubuntu2) dapper; urgency=low * Added docbook-xsl to build-depends. -- Benjamin Montgomery Sun, 28 May 2006 19:34:19 -0500 grml-shlib (1.02.11ubuntu1) dapper; urgency=low * Build-Depends: asciidoc, xsltproc. -- Colin Watson Thu, 25 May 2006 10:21:03 +0100 grml-shlib (1.02.11) unstable; urgency=low * a few type corrections * removed gawk from dependencies -- Michael Gebetsroither Fri, 7 Apr 2006 01:51:26 +0200 grml-shlib (1.02.10) unstable; urgency=low * another service routine related fix (sorry) -- Michael Gebetsroither Thu, 16 Feb 2006 13:18:43 +0100 grml-shlib (1.02.09) unstable; urgency=low * renamed function force-reloadService to forceReloadService -- Michael Gebetsroither Thu, 16 Feb 2006 12:35:54 +0100 grml-shlib (1.02.08) unstable; urgency=low * Workaround the '/etc/grml/sh-lib: line 622: `force-reloadService': not valid identifier' problem. Notice to workaround: 'force-reloadService' has been removed from sh-lib, it requires modifications to work with /bin/sh pointing to /bin/bash. * Added myself as Uploader to debian/control. -- Michael Gebetsroither Thu, 16 Feb 2006 02:11:13 +0100 grml-shlib (1.02.07) unstable; urgency=low * changed build system * added Manpage -- Michael Gebetsroither Mon, 26 Dec 2005 21:31:32 +0100 grml-shlib (1.02.06) unstable; urgency=low * trim the list of nameservers from netGetNameserers (no ending whitespace) * changed relToAbs to use readlink -f * reimplemented service routines * added fix to service routines * added start,stop,restart,reload,force-reload - Service functions * tab to space fix * added hook to enable debug like DEBUG=1; ./programm * added vim style options to sh-lib -- Michael Gebetsroither Wed, 21 Dec 2005 21:25:03 +0100 grml-shlib (1.02.05) unstable; urgency=low * rename -- Michael Gebetsroither Fri, 11 Nov 2005 19:39:49 +0100 sh-lib (1.02.04) unstable; urgency=low * added TODO * added iproute to dependencies (ip) * added netGetIfaces() -- Michael Gebetsroither Tue, 8 Nov 2005 18:10:49 +0100 sh-lib (1.02.03) unstable; urgency=low * fixed problems with definition of variables -- Michael Gebetsroither Sun, 25 Sep 2005 23:12:58 +0200 sh-lib (1.02.02) unstable; urgency=high * fixed a few variable definitions (make nearly all local) -- Michael Gebetsroither Mon, 15 Aug 2005 01:58:55 +0200 sh-lib (1.02.01) unstable; urgency=low * fixed error in findNextFreeLoop() -- Michael Gebetsroither Fri, 12 Aug 2005 21:03:14 +0200 sh-lib (1.02.00) unstable; urgency=low * added findNextFreeLoop() to search the next free loop device -- Michael Gebetsroither Tue, 9 Aug 2005 16:23:30 +0200 sh-lib (1.01.00) unstable; urgency=low * new upstream :D -- Michael Gebetsroither Tue, 9 Aug 2005 15:54:39 +0200 sh-lib (1.00-7) unstable; urgency=low * fixed checkRoot() * fixed message -> message_ in isExistent(), isNotExistent(), checkUser(), checkId() -- Michael Gebetsroither Sun, 8 May 2005 16:20:21 +0200 sh-lib (1.00-6) unstable; urgency=low * fixed a small typo -- Michael Gebetsroither Sun, 10 Apr 2005 13:36:49 +0200 sh-lib (1.00-5) unstable; urgency=low * get the right depencencies into the .deb -- Michael Gebetsroither Wed, 6 Apr 2005 02:33:35 +0200 sh-lib (1.00-4) unstable; urgency=low * Fixed a few small typos -- Michael Gebetsroither Sat, 19 Feb 2005 00:45:44 +0100 sh-lib (1.00-3) unstable; urgency=low * removed _checkExecutables() in INIT because it's braindamage -- Michael Gebetsroither Wed, 16 Feb 2005 01:00:47 +0100 sh-lib (1.00-2) unstable; urgency=low * WARN: fixed typo, runsFromCD() => runsFromCd() * fixed a small typo in checkID for error reporting * fixed problem in sh-lib init functions for $PROG_NAME__ * lib intern logging function is now _syslog() * added syslog() (not influenced by $SYSLOG__) * added netValidIp() for validating ip addresses * added netGetDefaultGateway() * added netGetNetmask() * added netGetIp() * added netGetNameservers() * added notice() for program notice messages -- Michael Gebetsroither Mon, 14 Feb 2005 00:55:39 +0100 sh-lib (1.00-1) unstable; urgency=low * Initial Release. -- Michael Gebetsroither Sun, 13 Feb 2005 17:57:20 +0100 grml-shlib-1.02.11ubuntu4/TODO0000644000000000000000000000057210414017213012616 0ustar * wrapper around pgrep * execute (secureInput verbessern) @mika * getUserName (is this user available on this system) function zsh_clear_env () { for V in `set +`; do case "$V" in '!'|'$'|'*'|'@'|'?'|'-'|'#'|[0-9]|V);; **) typeset +r "$V"; unset "$V";; esac; done unset V emulate zsh export IFS=" \t\n" export PATH="/bin:/usr/bin:/sbin:/usr/sbin" } grml-shlib-1.02.11ubuntu4/sh-lib0000644000000000000000000004007010564405400013231 0ustar #!/bin/sh # Filename: sh-lib # Purpose: Shellscript library # Authors: grml-team (grml.org), (c) Michael Gebetsroither # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2. # Latest change: Mon May 02 00:17:44 CEST 2005 [gebi] ################################################################################ VERBOSE__=0 VERBOSE_TMP__=0 # FIXME maybe PROG_PATH__ for better error reporting? PROG_NAME__="" # initialised within init section # directory for init scripts INITD_DIR__="/etc/init.d/" # >= level and the function will print the message EPRINT__=1 # eprint (error print) EEPRINT__=2 # 2print (intern error print) DPRINT__=3 # dprint (debug print) EXIT_FUNCTION__="_syslog" # function to call upon die (can be set by user) SYSLOG__="YES" CMD_LINE__="" # /proc/cmdline LANG__="$LANG" LC_ALL__="$LC_ALL" # CONFIG FUNCTIONS {{{ setProgName() { PROG_NAME__="$1"; } setExitFunction() { EXIT_FUNCTION__="$1"; } disableSyslog() { SYSLOG__="NO"; } enableSyslog() { SYSLOG__="YES"; } saveLang() { LANG__="$LANG"; LC_ALL__="$LC_ALL"; } restoreLang() { LANG="$LANG__"; LC_ALL="$LC_ALL__"; } setCLang() { saveLang; LANG="C"; LC_ALL="C"; } # }}} # DEBUG FRAMEWORK {{{ setVerbose() { VERBOSE__=${1:-1}; } unsetVerbose() { VERBOSE_TMP__=$VERBOSE__; VERBOSE__=0; } restoreVerbose() { VERBOSE__=$VERBOSE_TMP__; } getVerbose() { echo "$VERBOSE__"; } setDebug() { setVerbose "$DPRINT__"; } unsetDebug() { restoreVerbose; } setExitFunction() { EXIT_FUNCTION__="$1"; } resetExitFunction() { EXIT_FUNCTION__="_syslog"; } # }}} # ERROR REPORTING FUNCTIONS {{{ # default print backend (there may be other functions) vprint() { local level_="$1" local type_="$2" local message_="$3" if [ $VERBOSE__ -ge $level_ -a -n "$message_" ]; then echo -n "$type_" >&2 echo "$message_" >&2 fi } # print error output eprint() { # FIXME vprint should be a var, because we want to call user-defined functions # global var (there should be a syslog, and vprint + syslog function) vprint $EPRINT__ "Error - " "$1" } # should be used for intern silentExecutes eeprint() { vprint $EEPRINT__ " Error2 - " "$1" } # print debug output (function intern errors) dprint() { vprint $DPRINT__ "Debug - " "$1" } # for program notice messages notice() { vprint $EPRINT__ "Notice - " "$1" } die() { local error_message_="$1" # print this error message local exit_code_="$2" # command exited with this exit code echo -n "PANIC: $error_message_" >&2 if [ -n "$2" ]; then echo "; ret($exit_code_)" >&2 else echo >&2 fi if [ -n "$EXIT_FUNCTION__" ]; then $EXIT_FUNCTION__ "$error_message_" "$exit_code_" >&2 fi kill $$ } warn() { local error_message_="$1" # print this error message local exit_code_="$2" # command exits with this exit code echo -n "WARN: $error_message_" >&2 if [ -n "$exit_code_" ]; then echo "; ret($exit_code_)" >&2 else echo >&2 fi } _syslog() { local message_="$1" # error message local exit_code_="$2" if [ "$SYSLOG__" = "YES" ]; then if [ -n "$exit_code_" ]; then logger -p user.alert -t "$PROG_NAME__" -i "$message_ ret($exit_code_)" >&2 else logger -p user.alert -t "$PROG_NAME__" -i "$message_" >&2 fi fi } syslog() { local message_="$1" # error message local exit_code_="$2" if [ -n "$exit_code_" ]; then logger -p user.alert -t "$PROG_NAME__" -i "$message_ ret($exit_code_)" >&2 else logger -p user.alert -t "$PROG_NAME__" -i "$message_" >&2 fi } warnLog() { local error_message_="$1" # print this error message local exit_code_="$2" # command exits with this exit code warn "$error_message_" "$exit_code_" syslog "$error_message_" "$exit_code_" } # }}} ### # # CORE FUNCTIONS # ### ## # ATTENTION... THIS FUNCTINOS IS A BIG SECURITY HOLE # this function will be changed in future release ## # i don't want to write exit status controle stuff every time execute() { local to_exec_="$1" # command to execute local error_function_=${2:-"eprint"} # function to call on error local message_="$3" # user supplied error message local ret_='' # NOT A GOOD IDEA eval "$to_exec_" ret_=$? if [ $ret_ -eq 127 ]; then syslog "problems executing ( $to_exec_ )" $ret_ fi if [ $ret_ -ne 0 ]; then if [ -z "$message_" ]; then $error_function_ "problems executing ( $to_exec_ )" "$ret_" else $error_function_ "$message_" "$ret_" fi fi dprint "exec-$error_function_: ( $to_exec_ ) ret($ret_)" return $ret_ } silentExecute() { unsetVerbose execute "$@" local ret_=$? restoreVerbose return $ret_ } ### # # TEST FUNCTIONS # ### # if the file DOES exist, everything is fine isExistent() { local file_to_test_="$1" # file to test local error_function_=${2:-"eprint"} # function to call on error local message_="$3" # user supplied error message if [ ! -e "$file_to_test_" ]; then if [ -z "$message_" ]; then $error_function_ "file does not exist \"$file_to_test_\"" 66 else $error_function_ "$message_" fi return 1 fi dprint "isExistent(): file \"$1\" does exist => ready to go" return 0 } isNotExistent() { local file_to_test_="$1" # file to test local error_function_=${2:-"eprint"} # function to call on error local message_="$3" # user supplied error message if [ -e "$file_to_test_" ]; then if [ -z "$message_" ]; then $error_function_ "file does already exist \"$file_to_test_\"" 67 else $error_function_ "$message_" fi return 1 fi dprint "isNotExistent(): file \"$1\" does not exist => ready to go" return 0 } checkUser() { local to_check_="$1" # username to check against running process local error_function_=${2:-"eprint"} # function to call on error local message_="$3" # user supplied error message local user_='' user_=`id -un` if [ $user_ != "$to_check_" ]; then if [ -z "$message_" ]; then $error_function_ "username \"$user_\" is not \"$to_check_\"" 77 $exit_function_ else $error_function_ "$message_" fi return 1 else dprint "checkUser(): accepted, username matches \"$to_check_\"" return 0 fi } checkId() { local to_check_="$1" # user-id to check against running process local error_function_=${2:-"eprint"} # function to call on error local message_="$3" # user supplied error message local user_id_='' user_id_=`id -u` if [ $user_id_ != "$to_check_" ]; then if [ -z "$message_" ]; then $error_function_ "UID \"$user_id_\" is not \"$to_check_\"" 77 else $error_function_ "$message_" fi return 1 else dprint "checkId(): accepted, UID matches \"$to_check_\"" return 0 fi } checkRoot() { checkId 0 "$1" "$2" } isGrml() { if [ -f /etc/grml_version ] ; then dprint "isGrml(): this seems to be a grml system" return 0 else dprint "isGrml(): this is not a grml system" return 1 fi } runsFromHd() { if [ -e "/etc/grml_cd" ]; then dprint "runsFromHd(): grml is on CD" return 1 else dprint "runsFromHd(): grml is on HD" return 0 fi } runsFromCd() { if [ -e "/etc/grml_cd" ]; then dprint "runsFromCd(): grml is on CD" return 0 else dprint "runsFromCd(): grml is on HD" return 1 fi } # secure input from console secureInput() { local to_secure_="$1" local secured_='' secured_=`echo -n "$to_secure_" |tr -c '[:alnum:]/.\-,\(\)' '_'` dprint "secureInput(): \"$to_secure_\" => \"$secured_\"" echo "$secured_" } # convert all possible path formats to absolute paths relToAbs() { local relpath_="$1" local abspath_='' abspath_="`readlink -f \"$relpath_\"`" || \ warn "relToAbs(): Problems getting absolute path" "$?" || return 1 dprint "relToAbs(): \"$relpath_\" => \"$abspath_\"" echo "$abspath_" } # Simple shell grep stringInFile() { local to_test_="$1" # matching pattern local source_="$2" # source-file to grep if [ ! -e "$source_" ]; then eprint "stringInFile(): \"$source_\" does not exist" return 1 fi case "$(cat $source_)" in *$to_test_*) return 0;; esac return 1 } # same for strings stringInString() { local to_test_="$1" # matching pattern local source_="$2" # string to search in case "$source_" in *$to_test_*) return 0;; esac return 1 } # get value for bootparam given as first param getBootParam() { local param_to_search_="$1" local result_='' stringInString " $param_to_search_=" "$CMD_LINE__" || return 1 result_="${CMD_LINE__##*$param_to_search_=}" result_="${result_%%[ ]*}" echo "$result_" return 0 } # Check boot commandline for specified option checkBootParam() { stringInString " $1" "$CMD_LINE__" return "$?" } # NETWORK {{{ # validates an IP FIXME netValidIp() { local ip_="$1" # ip addresse to validate local error_function_=${2:-"eprint"} # function to call on error local message_="$3" # user supplied error message local ret_='' echo "$ip_" | grep -E -q -e '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}.[0-9]{1,3}' \ >/dev/null 2>&1 ret_=$? if [ $ret_ -ne 0 ]; then if [ -z "$message_" ]; then "$error_function_" "ip-addresse \"$ip_\" is NOT valied" $ret_ else "$error_function_" "$message_" $ret_ fi return 1 fi dprint "ip-addresse \"$ip_\" is valied" $ret_ return $ret_ } netGetIfaces() { local error_function_=${1:-"eprint"} # function to call on error local message_="$2" # user supplied error message local if_='' local ret_='' #ip a|grep 'inet ' |awk '$NF !~ /lo/{print $NF}' if_="`ip a|grep 'inet ' |awk '{print $NF}'`" ret_=$? if [ -z "$if_" ]; then if [ -z "$message_" ]; then "$error_function_" "no interfaces found" $ret_ else "$error_function_" "$message_" $ret_ fi return 1 fi dprint "interfaces found" $ret_ echo "$if_" } # FIXME netGetDefaultGateway() { local error_function_=${1:-"eprint"} # function to call on error local message_="$2" # user supplied error message local ip_='' local ret_='' setCLang ip_=`route -n | awk '/^0\.0\.0\.0/{print $2; exit}'` ret_=$? restoreLang if [ -z "$ip_" ]; then if [ -z "$message_" ]; then "$error_function_" "no default gateway found" $ret_ else "$error_function_" "$message_" $ret_ fi return 1 fi dprint "default gateway is \"$ip_\"" $ret_ echo "$ip_" return 0 } # FIXME netGetNetmask() { local iface_="$1" local error_function_=${2:-"eprint"} # function to call on error local message_="$3" # user supplied error message local nm_='' local ret_='' setCLang nm_=`ifconfig "$iface_" | awk '/[Mm]ask/{FS="[: ]*"; $0=$0; print $8; exit}'` ret_=$? restoreLang if [ -z "$nm_" ]; then if [ -z "$message_" ]; then "$error_function_" "could not find a netmask for \"$iface_\"" $ret_ else "$error_function_" "$message_" $ret_ fi return 1 fi dprint "netmask on \"$iface_\" is \"$nm_\"" $ret_ echo "$nm_" return 0 } # FIXME netGetIp() { local iface_="$1" local error_function_=${2:-"eprint"} # function to call on error local message_="$3" # user supplied error message local ip_="" local ret_="" setCLang #ip_=`ip addr list eth0 |mawk '/inet/{split($2,A,"/"); print A[1]}'` ip_=`ifconfig "$iface_" | awk '/[Ii]net [Aa]ddr/{FS="[: ]*"; $0=$0; print $4; exit}'` ret_=$? restoreLang if [ -z "$ip_" ]; then if [ -z "$message_" ]; then "$error_function_" "no ip for \"$iface_\" found" $ret_ else "$error_function_" "$message_" $ret_ fi return 1 fi dprint "addresse for \"$iface_\" is \"$ip_\"" $ret_ echo "$ip_" return 0 } netGetNameservers() { local error_function_=${1:-"eprint"} # function to call on error local message_="$2" # user supplied error message local file_="/etc/resolv.conf" local ns_="" if [ ! -e $file_ ]; then warn "file \"$file_\" does not exist, could not get nameservers" return 1 fi setCLang ns_=`awk '/^nameserver/{printf "%s ",$2}' $file_ |xargs echo` restoreLang if [ -z "$ns_" ]; then if [ -z "$message_" ]; then "$error_function_" "no nameservers found" $ret_ else "$error_function_" "$message_" $ret_ fi return 1 fi dprint "nameservers: \"$ns_\"" $ret_ echo "$ns_" return 0 } # }}} # SERVICES {{{ _touchService() { local action_="${1:-"start"}" local service_="$2" local error_function_=${3:-"eprint"} # function to call on error local message_="$4" # user supplied error message local i="" local known_action_='false' for i in "start" "stop" "restart" "reload" "force-reload"; do if [[ $i == $action_ ]]; then known_action_='true' break fi done $known_action_ || warn "_touchService(): unknown action \"$action_\"" local service_path_="" service_path_="${INITD_DIR__}/$service_" if [ ! -e "$service_path_" ]; then warn "_touchService(): service does not exist: \"$service_\"" return 1 fi if [ ! -x "$service_path_" ]; then warn "_touchService(): service is not executable: \"$service_\"" fi local ret_="" "$service_path_" "$action_" ret_=$? if [[ $ret_ != 0 ]]; then if [ -z "$message_" ]; then "$error_function_" "Problems ${action_}ing service \"$service_\"" $ret_ else "$error_function_" "$message_" $ret_ fi return 1 fi dprint "_touchService(): successfully started service \"$service_\"" return 0 } _createServiceFunctions() { for i in "start" "stop" "restart" "reload"; do eval "${i}Service() { _touchService ${i} \"\$1\" \"\$2\" \"\$3\"; }" done eval "forceReloadService() { _touchService force-reload \"\$1\" \"\$2\" \"\$3\"; }" } _createServiceFunctions # }}} # prints the next free /dev/loop* to stdout findNextFreeLoop() { local error_function_=${1:-"eprint"} # function to call on error local message_="$2" # user supplied error message local tmp_='' # tmp local i='' # counter local ret_='' # saved return value for i in 'losetup' 'losetup.orig'; do tmp_=`$i -f 2>/dev/null` if [ $? -eq 0 ]; then echo $tmp_ return 0 fi done # we have to search dprint 'findNextFreeLoop(): losetup does not recognice option -f, searching next free loop device' for i in `seq 0 100`; do test -e /dev/loop$i || continue losetup /dev/loop$i >/dev/null 2>&1 ret_=$? case "$ret_" in 2) continue ;; # losetup could not get status of loopdevice (EPERM) 0) continue ;; # device exist 1) echo "/dev/loop$i"; return 0 ;; # device does not exist and no error ?) continue ;; # return value not available in 'man losetup' esac done # hmm... could not find a loopdevice if [ -z "$message_" ]; then $error_function_ "could not find a free loop device" else $error_function_ "$message_" fi return 1 } # INIT {{{ _initProgName() { local name_="$1" # program name local tmp_name_=`basename "$name_"` || \ logger -p user.alert -i "Init-initProgName: problems executing ( basename \"$name_\" ) ret($?)" >/dev/null secureInput "$tmp_name_" } PROG_NAME__=`_initProgName "$0"` _checkExecutables() { local tmp_="" for i in tr dirname basename id logger kill cat grep route awk ifconfig; do command -v $i >/dev/null 2>&1 || tmp_="${tmp_}$i " done if [ -n "$tmp_" ]; then eprint "Init-checkExecutables: following executables not found or not executable:\n$tmp_" #syslog "Init-checkExecutables: following executables not found or not executable: $tmp_" fi } _checkExecutables _checkBootParam() { local path_="/proc/cmdline" if [ -e "$path_" ]; then CMD_LINE__=`execute "cat $path_" warnLog` return 0 fi warnLog "$path_ does not exist, thus sh-lib may not work reliable!" return 1 } _checkBootParam _setDebugLevel() { local debug_="${DEBUG:-0}" VERBOSE__="$debug_" } _setDebugLevel # }}} # END OF FILE ################################################################################ # vim:foldmethod=marker expandtab shiftwidth=2 tabstop=2