#!/bin/bash # This script is sourced by all ttPM scripts. It performs the following ops: ### Source the user defined vars ### Define functions used in various scripts ### Set default values for undefined vars # Source the user defined vars file if it exists. source /ttPM-bootstrap/etc/ttPM/ttPM-vars 2>/dev/null # Set the language to en_US so that all *nix utils output messages in English. export LC_ALL=C # Turn on debug output if required if [ "z$TT_DEBUG" = "ztrue" ] then set -x fi # Print the error message and exit error() { printMsg failure "$*" makeNoise -f 2>/dev/null exit 1 } # Check and set defaults setDefaultVars() { # User configurable at run-time TT_ARCH=${TT_ARCH:-`uname -m`} TT_BACKUP_BUILD=${TT_BACKUP_BUILD:-"build"} TT_COLOR=${TT_COLOR:-"true"} TT_KEEP_STATIC_LIBS=${TT_KEEP_STATIC_LIBS:-"unique"} TT_PKG_BUILD_DIR=${TT_PKG_BUILD_DIR:-$HOME} TT_PKG_DIRS=${TT_PKG_DIRS:-"/bin /boot /etc /sbin /lib /usr /opt"} TT_PKG_DOC_DIRS=${TT_PKG_DOC_DIRS:-"/usr/share/man /usr/share/info"} TT_SMP=${TT_SMP:-"1"} TT_SOUND=${TT_SOUND:-"true"} # System defaults (changing at run-time can have unexpected consequences) TT_ETC_DIR=${TT_ETC_DIR:-"/etc/ttPM"} TT_HOME_DIR=${TT_HOME_DIR:-"/home/ttPM"} TT_LIB_DIR=${TT_LIB_DIR:-"/usr/lib/ttPM"} TT_MAX_ID="9999" TT_MIN_ID="1000" TT_PKG_USER="pkg" TT_RC_DIR=${TT_RC_DIR:-"/lib/rc.d"} TT_STATIC_LIB_DIR=${TT_STATIC_LIB_DIR:-"/opt/static-libs"} TT_SUDO=${TT_SUDO:-"sudo"} TT_SYS_BIT="64" TT_UNIQ_ID="bridge" TT_VAR_DIR="/var/lib/ttPM" } # Error out if the passed env var is not set checkEnvVar() { I=${1} eval J=\$${I} if [ "z$J" = "z" ] then error "Env Var $I is not set" fi unset I J } # Error out if the passed env var is not a number checkNumericalEnvVar() { I=${1} eval J=\$${I} expr ${J} + 1 2>&1 >/dev/null || error "Env Var $I is not a numeric" unset I J } # Error out if not running as root checkRoot() { if [ $UID -ne 0 ] then printMsg warning "This scripts needs to be run as root" exit 1 fi } # Error out if running as root checkNotRoot() { if [ $UID -eq 0 ] then printMsg warning "This scripts should not be run as root" exit 1 fi } # Wrapper function to execute superuser commands # Unlike su and sudo commands, this only accepts a single option: -u USERNAME/UID changeUser() { if [ $UID -eq 0 ] then "$@" return $? fi USERNAME=root if [ "$1" = "-u" ] then USERNAME="$2" shift 2 fi ERR=0 case "$TT_SUDO" in sudo) sudo -u $USERNAME "$@" ERR="$?" ;; su) su $USERNAME "$@" ERR="$?" ;; *) printMsg error "$@" "$@" ERR="$?" ;; esac unset USERNAME return $ERR } # Prints a message in the appropriate color printMsg() { #`basename $0` warning "Usage: `basename $0` {success|info|warning|failure|error|fancy} message" #exit 1 # Set a few variables that influence the text that's printed on the screen. NORMAL="echo -en \\033[0;39m" INFO="echo -en \\033[1;36m" SUCCESS="echo -en \\033[1;32m" WARNING="echo -en \\033[1;33m" FAILURE="echo -en \\033[1;31m" FANCY="echo -en \\033[1;35m" #if [ $# -lt 2 ] #then #return #fi # If no color is requested, just print the message if [ "z$TT_COLOR" = "zfalse" ] then echo "$2" else case "$1" in success) $SUCCESS echo "$2" $NORMAL ;; info) $INFO echo "$2" $NORMAL ;; warning) $WARNING echo "$2" $NORMAL ;; failure) $FAILURE echo "$2" $NORMAL ;; error) $FAILURE echo "$2" $NORMAL ;; fancy|*) $FANCY echo "$2" $NORMAL ;; esac fi unset NORMAL INFO SUCCESS WARNING FAILURE FANCY } # Add bootstrap directories to path if required if [ "xyes" = "xyes" ] then export PATH=$PATH:/ttPM-bootstrap/bin:/ttPM-bootstrap/sbin fi # Run the setDefaults function to set the default values setDefaultVars unset setDefaultVars # Re-Source the user defined vars file if it exists since the above function may have overrode user defaults source /ttPM-bootstrap/etc/ttPM/ttPM-vars 2>/dev/null # Check if all required vars are defined checkEnvVar TT_ARCH checkEnvVar TT_BACKUP_BUILD checkEnvVar TT_COLOR checkEnvVar TT_ETC_DIR checkEnvVar TT_HOME_DIR checkEnvVar TT_KEEP_STATIC_LIBS checkEnvVar TT_LIB_DIR checkEnvVar TT_MAX_ID checkNumericalEnvVar TT_MAX_ID checkEnvVar TT_MIN_ID checkNumericalEnvVar TT_MIN_ID checkEnvVar TT_PKG_BUILD_DIR checkEnvVar TT_PKG_DIRS checkEnvVar TT_PKG_DOC_DIRS checkEnvVar TT_PKG_USER checkEnvVar TT_RC_DIR checkEnvVar TT_SMP checkNumericalEnvVar TT_SMP checkEnvVar TT_SOUND checkEnvVar TT_SUDO checkNumericalEnvVar TT_SYS_BIT if [ "$TT_SYS_BIT" != "32" ] && [ "$TT_SYS_BIT" != "64" ] then error "Valid values for SYS_BIT are 32 and 64" fi checkEnvVar TT_UNIQ_ID checkEnvVar TT_VAR_DIR # Set convenience vars TT_PKG_SRC_DIR=$HOME/src TT_PKG_PATCH_DIR=$HOME/patches TT_PKG_DATA_DIR=$HOME/data TT_PKG_CONFIG_DIR=$HOME/config TT_PKG_LOCAL_DATA_DIR=$HOME/data-ttPM-$TT_UNIQ_ID TT_PKG_BACKUP_DIR=$HOME/backup TT_FLAGS_DIR=$TT_VAR_DIR/flags TT_ROOT_DATA_DIR=$TT_VAR_DIR/root TT_TMP_DIR=$TT_VAR_DIR/tmp TT_PKG_USERNAME=`whoami 2>/dev/null` TT_PKG_NAME=`basename $HOME` TT_PKG_TMP_DIR=$TT_TMP_DIR/$TT_PKG_NAME TT_LIB_FILES_DIR=$TT_VAR_DIR/libs TT_TRACE_FILES_DIR=$TT_VAR_DIR/trace TT_DEP_FILES_DIR=$TT_VAR_DIR/deps TT_BACKUP_DIR=$TT_VAR_DIR/backup