#!/bin/sh # functions.sh # Library of functions which pc-sysinstall may call upon # Function which displays the help-index file display_help() { if [ -e "${PROGDIR}/doc/help-index" ] then cat ${PROGDIR}/doc/help-index else echo "Error: ${PROGDIR}/doc/help-index not found" exit 1 fi }; # Function which displays the help for a specified command display_command_help() { if [ -z "$1" ] then echo "Error: No command specified to display help for" exit 1 fi if [ -e "${PROGDIR}/doc/help-${1}" ] then cat ${PROGDIR}/doc/help-${1} else echo "Error: ${PROGDIR}/doc/help-${1} not found" exit 1 fi }; # Function to convert bytes to megabytes convert_byte_to_megabyte() { if [ -z "${1}" ] then echo "Error: No bytes specified!" exit 1 fi expr -e ${1} / 1048576 }; # Function to convert blocks to megabytes convert_blocks_to_megabyte() { if [ -z "${1}" ] ; then echo "Error: No blocks specified!" exit 1 fi expr -e ${1} / 2048 }; # Takes $1 and strips the whitespace out of it, returns VAL strip_white_space() { if [ -z "${1}" ] then echo "Error: No value setup to strip whitespace from!" exit 1 fi VAL=`echo "$1" | tr -d ' '` export VAL }; # Displays an error message and exits with error 1 exit_err() { # Echo the message for the users benefit echo "$1" # Save this error to the log file echo "${1}" >>$LOGOUT # Check if we need to unmount any file-systems after this failure unmount_all_filesystems_failure echo "For more details see log file: $LOGOUT" exit 1 }; # Run-command, don't halt if command exits with non-0 rc_nohalt() { CMD="$1" if [ -z "${CMD}" ] then exit_err "Error: missing argument in rc_nohalt()" fi echo "Running: ${CMD}" >>${LOGOUT} ${CMD} >>${LOGOUT} 2>>${LOGOUT} }; # Run-command, halt if command exits with non-0 rc_halt() { CMD="$1" if [ -z "${CMD}" ] then exit_err "Error: missing argument in rc_halt()" fi echo "Running: ${CMD}" >>${LOGOUT} ${CMD} >>${LOGOUT} 2>>${LOGOUT} STATUS="$?" if [ "${STATUS}" != "0" ] then exit_err "Error ${STATUS}: ${CMD}" fi }; # Run-command w/echo to screen, halt if command exits with non-0 rc_halt_echo() { CMD="$1" if [ -z "${CMD}" ] then exit_err "Error: missing argument in rc_halt_echo()" fi echo "Running: ${CMD}" >>${LOGOUT} ${CMD} 2>&1 | tee -a ${LOGOUT} STATUS="$?" if [ "$STATUS" != "0" ] then exit_err "Error ${STATUS}: $CMD" fi }; # Run-command w/echo, don't halt if command exits with non-0 rc_nohalt_echo() { CMD="$1" if [ -z "${CMD}" ] then exit_err "Error: missing argument in rc_nohalt_echo()" fi echo "Running: ${CMD}" >>${LOGOUT} ${CMD} 2>&1 | tee -a ${LOGOUT} }; # Echo to the screen and to the log echo_log() { STR="$1" if [ -z "${STR}" ] then exit_err "Error: missing argument in echo_log()" fi echo "${STR}" | tee -a ${LOGOUT} }; # Function which uses "fetch" to download a file, and display a progress report fetch_file() { FETCHFILE="$1" FETCHOUTFILE="$2" EXITFAILED="$3" SIZEFILE="${TMPDIR}/.fetchSize" EXITFILE="${TMPDIR}/.fetchExit" rm ${SIZEFILE} 2>/dev/null >/dev/null rm ${FETCHOUTFILE} 2>/dev/null >/dev/null fetch -s "${FETCHFILE}" >${SIZEFILE} SIZE="`cat ${SIZEFILE}`" SIZE="`expr ${SIZE} / 1024`" echo "FETCH: ${FETCHFILE}" echo "FETCH: ${FETCHOUTFILE}" >>${LOGOUT} ( fetch -o ${FETCHOUTFILE} "${FETCHFILE}" >/dev/null 2>/dev/null ; echo "$?" > ${EXITFILE} ) & PID="$!" while z=1 do if [ -e "${FETCHOUTFILE}" ] then DSIZE=`du -k ${FETCHOUTFILE} | tr -d '\t' | cut -d '/' -f 1` echo "SIZE: ${SIZE} DOWNLOADED: ${DSIZE}" echo "SIZE: ${SIZE} DOWNLOADED: ${DSIZE}" >>${LOGOUT} fi # Check if the download is finished ps -p ${PID} >/dev/null 2>/dev/null if [ "$?" != "0" ] then break; fi sleep 2 done echo "FETCHDONE" EXIT="`cat ${EXITFILE}`" if [ "${EXIT}" != "0" -a "$EXITFAILED" = "1" ] then exit_err "Error: Failed to download ${FETCHFILE}" fi return $EXIT }; # Function to return a the zpool name for this device get_zpool_name() { DEVICE="$1" # Set the base name we use for zpools BASENAME="tank" if [ ! -d "${TMPDIR}/.zpools" ] ; then mkdir -p ${TMPDIR}/.zpools fi if [ -e "${TMPDIR}/.zpools/${DEVICE}" ] ; then cat ${TMPDIR}/.zpools/${DEVICE} return 0 else # Need to generate a zpool name for this device NUM=`ls ${TMPDIR}/.zpools/ | wc -l | sed 's| ||g'` NEWNAME="${BASENAME}${NUM}" echo "$NEWNAME" >${TMPDIR}/.zpools/${DEVICE} echo "${NEWNAME}" return fi };