summaryrefslogtreecommitdiffstats
path: root/PCBSD/pc-sysinstall/backend/functions.sh
diff options
context:
space:
mode:
Diffstat (limited to 'PCBSD/pc-sysinstall/backend/functions.sh')
-rw-r--r--PCBSD/pc-sysinstall/backend/functions.sh249
1 files changed, 249 insertions, 0 deletions
diff --git a/PCBSD/pc-sysinstall/backend/functions.sh b/PCBSD/pc-sysinstall/backend/functions.sh
new file mode 100644
index 0000000..a4975c3
--- /dev/null
+++ b/PCBSD/pc-sysinstall/backend/functions.sh
@@ -0,0 +1,249 @@
+#!/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
+};
OpenPOWER on IntegriCloud