Return to function.sh CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / strongswan / testing / scripts |
1.1 ! misho 1: #!/bin/bash ! 2: # provides some general-purpose script functions ! 3: # ! 4: # Copyright (C) 2004 Eric Marchionni, Patrik Rayo ! 5: # Zuercher Hochschule Winterthur ! 6: # ! 7: # This program is free software; you can redistribute it and/or modify it ! 8: # under the terms of the GNU General Public License as published by the ! 9: # Free Software Foundation; either version 2 of the License, or (at your ! 10: # option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. ! 11: # ! 12: # This program is distributed in the hope that it will be useful, but ! 13: # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! 14: # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! 15: # for more details. ! 16: ! 17: export TERM=xterm ! 18: RED=$(tput setaf 1) ! 19: GREEN=$(tput setaf 2) ! 20: YELLOW=$(tput setaf 3) ! 21: NORMAL=$(tput op) ! 22: ! 23: # exit with given error message ! 24: # $1 - error message ! 25: die() { ! 26: echo -e "${RED}$1${NORMAL}" ! 27: exit 1 ! 28: } ! 29: ! 30: # execute command ! 31: # $1 - command to execute ! 32: # $2 - whether or not to log command exit status ! 33: # (0 -> disable exit status logging) ! 34: execute() ! 35: { ! 36: cmd=${1} ! 37: echo $cmd >>$LOGFILE 2>&1 ! 38: $cmd >>$LOGFILE 2>&1 ! 39: status=$? ! 40: [ "$2" != 0 ] && log_status $status ! 41: if [ $status != 0 ]; then ! 42: echo ! 43: echo "! Command $cmd failed, exiting (status $status)" ! 44: echo "! Check why here $LOGFILE" ! 45: exit 1 ! 46: fi ! 47: } ! 48: ! 49: # execute command in chroot ! 50: # $1 - command to execute ! 51: execute_chroot() ! 52: { ! 53: execute "chroot $LOOPDIR env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin $@" ! 54: } ! 55: ! 56: # write green status message to console ! 57: # $1 - msg ! 58: echo_ok() ! 59: { ! 60: echo -e "${GREEN}$1${NORMAL}" ! 61: } ! 62: ! 63: # write red status message to console ! 64: # $1 - msg ! 65: echo_failed() ! 66: { ! 67: echo -e "${RED}$1${NORMAL}" ! 68: } ! 69: ! 70: # write yellow status message to console ! 71: # $1 - msg ! 72: echo_warn() ! 73: { ! 74: echo -e "${YELLOW}$1${NORMAL}" ! 75: } ! 76: ! 77: # log an action ! 78: # $1 - current action description ! 79: log_action() ! 80: { ! 81: /bin/echo -n "[....] $1 " ! 82: } ! 83: ! 84: # log an action status ! 85: # $1 - exit status of action ! 86: log_status() ! 87: { ! 88: tput hpa 0 ! 89: if [ $1 -eq 0 ]; then ! 90: /bin/echo -ne "[${GREEN} ok ${NORMAL}" ! 91: else ! 92: /bin/echo -ne "[${RED}FAIL${NORMAL}" ! 93: fi ! 94: echo ! 95: } ! 96: ! 97: # the following two functions are stolen from [1] ! 98: # [1] - http://www.linuxjournal.com/content/use-bash-trap-statement-cleanup-temporary-files ! 99: ! 100: declare -a on_exit_items ! 101: ! 102: # perform registered actions on exit ! 103: on_exit() ! 104: { ! 105: for ((onex=${#on_exit_items[@]}-1; onex>=0; onex--)) ! 106: do ! 107: echo "On_Exit: ${on_exit_items[$onex]}" >>$LOGFILE ! 108: ${on_exit_items[$onex]} >>$LOGFILE 2>&1 ! 109: done ! 110: on_exit_items="" ! 111: trap - EXIT ! 112: } ! 113: ! 114: # register a command to execute when the calling script terminates. The ! 115: # registered commands are called in FILO order. ! 116: # $* - command to register ! 117: do_on_exit() ! 118: { ! 119: local n=${#on_exit_items[*]} ! 120: on_exit_items[$n]="$*" ! 121: if [ $n -eq 0 ]; then ! 122: trap on_exit EXIT ! 123: fi ! 124: } ! 125: ! 126: # wait for a mount to disappear ! 127: # $1 - device/image to wait for ! 128: # $2 - maximum time to wait in seconds, default is 5 seconds ! 129: graceful_umount() ! 130: { ! 131: secs=$2 ! 132: [ ! $secs ] && secs=5 ! 133: ! 134: let steps=$secs*100 ! 135: for st in `seq 1 $steps` ! 136: do ! 137: umount $1 >>$LOGFILE 2>&1 ! 138: mount | grep $1 >/dev/null 2>&1 ! 139: [ $? -eq 0 ] || return 0 ! 140: sleep 0.01 ! 141: done ! 142: ! 143: return 1 ! 144: } ! 145: ! 146: # load qemu NBD kernel module, if not already loaded ! 147: load_qemu_nbd() ! 148: { ! 149: lsmod | grep ^nbd[[:space:]]* >/dev/null 2>&1 ! 150: if [ $? != 0 ] ! 151: then ! 152: log_action "Loading NBD kernel module" ! 153: execute "modprobe nbd max_part=16" ! 154: fi ! 155: } ! 156: ! 157: # check if given commands exist in $PATH ! 158: # $* - commands to check ! 159: check_commands() ! 160: { ! 161: for i in $* ! 162: do ! 163: command -v $i >/dev/null || { die "Required command $i not found"; exit 1; } ! 164: done ! 165: } ! 166: ! 167: # check if any of the given virtual guests are running ! 168: # $* - names of guests to check ! 169: running_any() ! 170: { ! 171: command -v virsh >/dev/null || return 1 ! 172: for host in $* ! 173: do ! 174: virsh list --name 2>/dev/null | grep "^$host$" >/dev/null && return 0 ! 175: done ! 176: return 1 ! 177: } ! 178: ! 179: ############################################# ! 180: # search and replace strings throughout a ! 181: # whole directory ! 182: # ! 183: ! 184: function searchandreplace { ! 185: ! 186: SEARCHSTRING="$1" ! 187: REPLACESTRING="$2" ! 188: DESTDIR="$3" ! 189: ! 190: [ -d "$DESTDIR" ] || die "$DESTDIR is not a directory!" ! 191: ! 192: ! 193: ########################################### ! 194: # search and replace in each found file the ! 195: # given string ! 196: # ! 197: ! 198: for eachfoundfile in `find $DESTDIR -type f` ! 199: do ! 200: sed -i -e "s/$SEARCHSTRING/$REPLACESTRING/g" "$eachfoundfile" ! 201: done ! 202: ! 203: }