diff options
Diffstat (limited to 'testing/scripts/function.sh')
-rwxr-xr-x | testing/scripts/function.sh | 208 |
1 files changed, 132 insertions, 76 deletions
diff --git a/testing/scripts/function.sh b/testing/scripts/function.sh index e7ecbcf83..c4769678c 100755 --- a/testing/scripts/function.sh +++ b/testing/scripts/function.sh @@ -14,31 +14,146 @@ # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # for more details. +export TERM=xterm +RED=$(tput setaf 1) +GREEN=$(tput setaf 2) +NORMAL=$(tput op) -############################################ -# print output in color -# +# exit with given error message +# $1 - error message +die() { + echo -e "${RED}$1${NORMAL}" + exit 1 +} -function cecho { - echo -e "\033[1;31m$1\033[0m" +# execute command +# $1 - command to execute +# $2 - whether or not to log command exit status +# (0 -> disable exit status logging) +execute() +{ + cmd=${1} + echo $cmd >>$LOGFILE 2>&1 + $cmd >>$LOGFILE 2>&1 + status=$? + [ "$2" != 0 ] && log_status $status + if [ $status != 0 ]; then + echo + echo "! Command $cmd failed, exiting (status $status)" + echo "! Check why here $LOGFILE" + exit 1 + fi } -function cgecho { - echo -e "\033[1;32m$1\033[0m" + +# execute command in chroot +# $1 - command to execute +execute_chroot() +{ + execute "chroot $LOOPDIR $@" } -function cecho-n { - echo -en "\033[1;31m$1\033[0m" +# write green status message to console +# $1 - msg +echo_ok() +{ + echo -e "${GREEN}$1${NORMAL}" } +# write red status message to console +# $1 - msg +echo_failed() +{ + echo -e "${RED}$1${NORMAL}" +} -############################################# -# output all args to stderr and exit with -# return code 1 -# +# log an action +# $1 - current action description +log_action() +{ + /bin/echo -n "[....] $1 " +} -die() { - echo $* 1>&2 - exit 1 +# log an action status +# $1 - exit status of action +log_status() +{ + tput hpa 0 + if [ $1 -eq 0 ]; then + /bin/echo -ne "[${GREEN} ok ${NORMAL}" + else + /bin/echo -ne "[${RED}FAIL${NORMAL}" + fi + echo +} + +# the following two functions are stolen from [1] +# [1] - http://www.linuxjournal.com/content/use-bash-trap-statement-cleanup-temporary-files + +declare -a on_exit_items + +# perform registered actions on exit +on_exit() +{ + for ((onex=${#on_exit_items[@]}-1; onex>=0; onex--)) + do + echo "On_Exit: ${on_exit_items[$onex]}" >>$LOGFILE + ${on_exit_items[$onex]} >>$LOGFILE 2>&1 + done + on_exit_items="" + trap - EXIT +} + +# register a command to execute when the calling script terminates. The +# registered commands are called in FILO order. +# $* - command to register +do_on_exit() +{ + local n=${#on_exit_items[*]} + on_exit_items[$n]="$*" + if [ $n -eq 0 ]; then + trap on_exit EXIT + fi +} + +# wait for a mount to disappear +# $1 - device/image to wait for +# $2 - maximum time to wait in seconds, default is 5 seconds +graceful_umount() +{ + secs=$2 + [ ! $secs ] && secs=5 + + let steps=$secs*100 + for st in `seq 1 $steps` + do + umount $1 >>$LOGFILE 2>&1 + mount | grep $1 >/dev/null 2>&1 + [ $? -eq 0 ] || return 0 + sleep 0.01 + done + + return 1 +} + +# load qemu NBD kernel module, if not already loaded +load_qemu_nbd() +{ + lsmod | grep ^nbd[[:space:]]* >/dev/null 2>&1 + if [ $? != 0 ] + then + log_action "Loading NBD kernel module" + execute "modprobe nbd max_part=16" + fi +} + +# check if given commands exist in $PATH +# $* - commands to check +check_commands() +{ + for i in $* + do + command -v $i >/dev/null || { die "Required command $i not found"; exit 1; } + done } ############################################# @@ -55,13 +170,6 @@ function searchandreplace { [ -d "$DESTDIR" ] || die "$DESTDIR is not a directory!" - ######################### - # create a temporary file - # - - TMPFILE="/tmp/sr.$$" - - ########################################### # search and replace in each found file the # given string @@ -69,59 +177,7 @@ function searchandreplace { for eachfoundfile in `find $DESTDIR -type f` do - sed -e "s/$SEARCHSTRING/$REPLACESTRING/g" "$eachfoundfile" > "$TMPFILE" - cp -f "$TMPFILE" "$eachfoundfile" + sed -i -e "s/$SEARCHSTRING/$REPLACESTRING/g" "$eachfoundfile" done - - ########################### - # delete the temporary file - # - - rm -f "$TMPFILE" - -} - -############################################# -# add a bridge -# - -function umlbr_add { - brctl addbr "umlbr$1" - brctl setfd "umlbr$1" 0 - brctl setageing "umlbr$1" 3600 - brctl stp "umlbr$1" off - ifconfig "umlbr$1" "$2" netmask "$3" up } - -############################################# -# delete a bridge -# - -function umlbr_del { - ifconfig "umlbr$1" down &> /dev/null 2>&1 - brctl delbr "umlbr$1" &> /dev/null 2>&1 -} - -############################################# -# add a tap interface to a bridge -# - -function umlbr_add_tap { - tunctl -t "tap$1_$2" &> /dev/null 2>&1 - ifconfig "tap$1_$2" 0.0.0.0 promisc up &> /dev/null 2>&1 - brctl addif "umlbr$1" "tap$1_$2" &> /dev/null 2>&1 - cecho-n "$2.." - } - -############################################# -# delete a tap interface from a bridge -# - -function umlbr_del_tap { - ifconfig "umlbr$2" down &> /dev/null 2>&1 - brctl delif "umlbr$1" "tap$1_$2" &> /dev/null 2>&1 - tunctl -d "tap$1_$2" &> /dev/null 2>&1 - cecho-n "$2.." - } - |