File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / strongswan / testing / scripts / function.sh
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Jun 3 09:46:49 2020 UTC (4 years, 4 months ago) by misho
Branches: strongswan, MAIN
CVS tags: v5_9_2p0, v5_8_4p7, HEAD
Strongswan

    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>