Annotation of embedaddon/strongswan/testing/scripts/function.sh, revision 1.1

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: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>