#!/bin/bash ############################################################################### # # Dell Inc. PROPRIETARY INFORMATION # This software is supplied under the terms of a license agreement or # nondisclosure agreement with Dell Inc. and may not # be copied or disclosed except in accordance with the terms of that # agreement. # # Copyright (c) 2021 Dell Inc. All Rights Reserved. # # Module Name: # # dcism-setup.sh # # # Abstract/Purpose: # # Interactive Custom Install Script to cutomize the iDRAC Service Module # RPM Package install. # This interactive script will enable the user to choose the optional # features and make them available on the local machine. # # Environment: # # Linux # ############################################################################### # Operating system ("OS") types. # These are the return values for the following function: # GetOSType # GBL_OS_TYPE_ERROR=0 GBL_OS_TYPE_UKNOWN=1 GBL_OS_TYPE_RHEL7=2 GBL_OS_TYPE_RHEL8=3 GBL_OS_TYPE_UBUNTU18=4 GBL_OS_TYPE_UBUNTU20=5 GBL_OS_TYPE_SLES15=6 GBL_OS_TYPE_STRING=$GBL_OS_TYPE_UKNOWN PATH_TO_RPMS_SUFFIX="" #Error Handling UPDATE_SUCCESS=0 UPDATE_FAILED=1 UPDATE_NOT_REQD=2 UPDATE_FAILED_NEWER_VER_AVAILABLE=3 UPDATE_PREREQ_NA=4 SERVICE_FAILED_TO_START=5 ERROR=6 UNINSTALL_FAILED=7 BASEDIR=`dirname $0` SCRIPT_SOURCE="installer" SYSIDFILEPATH="" LICENSEFILEPATH="" LICENSEFILE="$BASEDIR/prereq/license_agreement.txt" INSTALL_CONFIG="$BASEDIR/install.ini" FEATURE_COUNT=0 OPTION_COUNT=1 PREDEFINE_OPTION=0 IDRAC_HARD_RESET_STR="iDRAC Hard Reset" SUPPORT_ASSIST_STR="Support Assist" FULLPOWER_CYCLE_STR="Full Power Cycle" ALL_FEATURES_STR="All Features" SNMP_TRAPS_STR="dctrapfp" SNMP_OMSA_TRAPS_STR="dcomsatrapfp" SNMPGET_STR="dcsnmpgetfp" PREFIX_FOR_SATA="NONE" declare -A ftr declare -A dcism_feature_list declare -A feature_values declare -A dcism_sections chars=( {a..z} ) declare -A short_opts declare -A long_opts IDRAC_OPTION="dcos2idrac" SSO_OPTION="dcidraclauncher" OS2IDRAC="dcos2idracfp" READ_ONLY_OPTION="dcidraclauncherro" ADMIN_OPTION="dcidraclauncheradmin" SMART_STR="dccsfp" HISTORIC_STR="dccsfphistoricsmartlog" AHCI_MODE_STR="AhciMode" SNMP_LO="--snmptrap" OMSA_LO="--snmpomsatrap" IDRAC_PORT="" if [ -f "$INSTALL_CONFIG" ]; then IFS=$'\r\n' DCISM_FEATURE_NAMES=($(grep -vE "^#|triggered" "$INSTALL_CONFIG" | awk -F"|" '{print $1}')) DCISM_FEATURE_LIST=($(grep -vE "^#|triggered" "$INSTALL_CONFIG" | awk -F"|" '{print $2}')) DCISM_FEATURE_ARRAY=($(grep -vE "^#|triggered" "$INSTALL_CONFIG" | awk -F"|" '{print $3}')) DCISM_FEATURE_ARRAY+=("$IDRAC_HARD_RESET_STR") DCISM_FEATURE_ARRAY+=("$SUPPORT_ASSIST_STR") DCISM_FEATURE_ARRAY+=("$FULLPOWER_CYCLE_STR") DCISM_FEATURE_ARRAY+=("All Features") DCISM_TRIGGERABLE_FEATURE_ARRAY=($(grep -v ^# "$INSTALL_CONFIG" |grep -i "triggered"|awk -F"|" '{print $2}')) DCISM_FEATURES_ENABLED_ARRAY=($(grep -vE "^#|triggered" "$INSTALL_CONFIG" | awk -F"|" '{print $4}')) DCISM_FEATURES_ENABLED_ARRAY+=("true") DCISM_FEATURES_ENABLED_ARRAY+=("true") DCISM_FEATURES_ENABLED_ARRAY+=("true") DCISM_FEATURES_ENABLED_ARRAY+=("false") DCISM_SECTIONS=($(grep -vE "^#|triggered" "$INSTALL_CONFIG" | awk -F"|" '{print $1}')) SHORTOPTS_ARR=($(grep -vE "^#|triggered" "$INSTALL_CONFIG" | awk -F"|" '{print $6}')) LONGOPTS_ARR=($(grep -vE "^#|triggered" "$INSTALL_CONFIG" | awk -F"|" '{print $7}')) # silent install options SHORT_OPTS=([0]="x" [1]="a" [2]="i" [3]="d") SHORT_OPTS+=(${SHORTOPTS_ARR[@]}) LONG_OPTS=([0]="express" [1]="autostart" [2]="install" [3]="delete") LONG_OPTS+=(${LONGOPTS_ARR[@]}) COUNT=${#DCISM_FEATURE_NAMES[@]} n=0 for ((i=0; i<$COUNT; i++)) do if [[ ! ${dcism_feature_list[@]} =~ ${DCISM_FEATURE_LIST[$i]} ]]; then n=`expr $n + 1` ftr[$n,0]+="${DCISM_FEATURE_LIST[$i]}" dcism_sections[$n,0]+="${DCISM_SECTIONS[$i]}" short_opts[$n,0]+="${SHORTOPTS_ARR[$i]}" long_opts[$n,0]+="${LONGOPTS_ARR[$i]}" fi m=1 for x in "${!DCISM_FEATURE_ARRAY[@]}"; do if [ "${DCISM_FEATURE_ARRAY[$x]}" == "${DCISM_FEATURE_NAMES[$i]}" ]; then dcism_feature_list+="${DCISM_FEATURE_LIST[$x]}" char_val=`expr $m - 1` ftr[$n,${chars[$char_val]}]+="${DCISM_FEATURE_LIST[$x]}" dcism_sections[$n,${chars[$char_val]}]+="${DCISM_SECTIONS[$x]}" short_opts[$n,${chars[$char_val]}]+="${SHORTOPTS_ARR[$x]}" long_opts[$n,${chars[$char_val]}]+="${LONGOPTS_ARR[$x]}" m=`expr $m + 1` fi done done n=`expr $n + 1` ftr[$n,0]+="$IDRAC_HARD_RESET_STR" short_opts[$n,0]+="x" long_opts[$n,0]+="express" n=`expr $n + 1` ftr[$n,0]+="$SUPPORT_ASSIST_STR" short_opts[$n,0]+="a" long_opts[$n,0]+="autostart" n=`expr $n + 1` ftr[$n,0]+="$FULLPOWER_CYCLE_STR" short_opts[$n,0]+="i" long_opts[$n,0]+="install" n=`expr $n + 1` ftr[$n,0]+="$ALL_FEATURES_STR" short_opts[$n,0]+="d" long_opts[$n,0]+="delete" FEATURE_COUNT=0 COUNT=${#ftr[@]} for ((j=1;j<=$COUNT;j++)) do for ((i=0;i<=$COUNT;i++)) do if [ $i -eq 0 ]; then if [ ! -z "${ftr[$j,$i]}" ]; then value=`grep -e "${ftr[$j,$i]}" "$INSTALL_CONFIG" | awk -F"|" '{print $5}'` feature_values[$j,$i]=$value retain_j=$j FEATURE_COUNT=`expr $FEATURE_COUNT + 1` fi else char_val=`expr $i - 1` if [ ! -z "${ftr[$j,${chars[$char_val]}]}" ]; then value=`grep -e "${ftr[$j,${chars[$char_val]}]}" "$INSTALL_CONFIG" | awk -F"|" '{print $5}'` ENABLED_PATT=`[ "$value" == "true" ] && echo "[x]" || echo "[ ]"` feature_values[$j,${chars[$char_val]}]=$value retain_j=$j fi fi done done j=$retain_j feature_values[$j,0]=false j=`expr $j - 1` feature_values[$j,0]=true j=`expr $j - 1` feature_values[$j,0]=true j=`expr $j - 1` feature_values[$j,0]=true IFS=$' ' fi # silent install options SHORT_OPTS=([0]="x" [1]="a" [2]="i" [3]="d") SHORT_OPTS+=(${SHORTOPTS_ARR[@]}) LONG_OPTS=([0]="express" [1]="autostart" [2]="install" [3]="delete") LONG_OPTS+=(${LONGOPTS_ARR[@]}) SHORT_DEL="false" SHORT_INSTALL="false" MOD_CM="" OPT_FALSE=0 FIRST_SCREEN=1 CLEAR_CONTINUE="no" UPGRADE=0 DOWNGRADE=0 MODIFY=0 FEATURES_POPULATED=0 ARCH="x86_64" ISM_INI_FILE="/opt/dell/srvadmin/iSM/etc/ini/dcismdy64.ini" SERVICES_SCRIPT="/etc/init.d/dcismeng" SELECT_ALL="false" AUTO_START="false" EXPRESS="false" OS2IDRAC_INI_FILE="/opt/dell/srvadmin/iSM/etc/ini/dcos2idrac.ini" OS2IDRAC_PORT_NUM=0 PORT_ARG_STRING="port" # OS2IDRAC feature index in DCISM_FEATURES_ENABLED_ARRAY # OS2IDRAC feature specified in silent install OS2IDRAC_ENABLED="false" LCLOG_INDEX=1 SNMPTRAP_SCRIPT="/opt/dell/srvadmin/iSM/bin/Enable-iDRACSNMPTrap.sh" IBIA_SCRIPT="/opt/dell/srvadmin/iSM/bin/Enable-iDRACAccessHostRoute" TEMP_INI_FILE="/opt/dell/srvadmin/iSM/tmpdcism.ini" trap 'rm -rf "$TEMP_INI_FILE" > /dev/null 2>&1' EXIT ERR ISMMUTLOGGER="/opt/dell/srvadmin/iSM/lib64/dcism/ismmutlogger" MUT_LOG_FILE="/tmp/.dcismmutlogger" DCISM_IDRAC_LAUNCHER_INI="/opt/dell/srvadmin/iSM/etc/ini/dcismlauncher.ini" DCCS_INI_FILE="/opt/dell/srvadmin/iSM/etc/ini/dccs.ini" IPC_DIR="/opt/dell/srvadmin/iSM/var/lib/ipc" #to determine which generation of server it is like 13G/14G, server_gen will store the value like 3->13G,4->14G. #server=`dmidecode -t system | grep "Product Name" | awk -F: '{ print $2 }' | awk -F' ' '{ print $2 }'` server_gen=0 ############################################################################### # Function : SetErrorAndInterrupt # # The "tee" command used to write log, continues execution after # the "tee" when any part of the utility exits. Additionally, global # variables do not seem to be updated when execution resumes. So, all # exit errors are mapped to the signal HUP. kill works very quickly # AFTER exit is called, so to allow user messages to output, sleep # was added. ############################################################################### function SetErrorAndInterrupt { FF_EXIT=$1 sleep 1 exit $FF_EXIT kill -HUP $$ } ############################################################################### ## ## Function: GetOSType ## ## Decription: Determines the operating system type. ## ## Returns: 0 = No error ## ## Return Vars: GBL_OS_TYPE=[GBL_OS_TYPE_ERROR| ## GBL_OS_TYPE_UKNOWN| ] ## GBL_OS_TYPE_RHEL7| ## GBL_OS_TYPE_RHEL8| ## GBL_OS_TYPE_UBUNTU18| ## GBL_OS_TYPE_STRING=[RHEL7|RHEL8|UBUNTU18|UNKNOWN] ## ############################################################################### GetOSType() { # Set default values for return variables. GBL_OS_TYPE=${GBL_OS_TYPE_UKNOWN} GBL_OS_TYPE_STRING="UKNOWN" if [ -f /etc/os-release ]; then # check for operating system . /etc/os-release OS=$NAME VER=`echo $VERSION_ID | cut -d"." -f1` #check for Ubuntu20. if [ "$OS" == "Debian GNU/Linux" ] && [ "$VER" == "13" ]; then GBL_OS_TYPE=${GBL_OS_TYPE_UBUNTU20} GBL_OS_TYPE_STRING="UBUNTU20" PATH_TO_RPMS_SUFFIX=UBUNTU20 PREFIX_FOR_SATA="ubuntu20" fi #check for RHEL7, CentOS7 and AHV if [[ "$ID" == "rhel" && "$VER" == "7" ]] || [[ "$ID" == "centos" && "$VER" == "7" ]] || [ "$ID" == "ahv" ]; then GBL_OS_TYPE=${GBL_OS_TYPE_RHEL7} GBL_OS_TYPE_STRING="RHEL7" PATH_TO_RPMS_SUFFIX=RHEL7 PREFIX_FOR_SATA="el7" fi #check for RHEL8 and CentOS8 if [[ "$ID" == "rhel" && "$VER" == "8" ]] || [[ "$ID" == "centos" && "$VER" == "8" ]]; then GBL_OS_TYPE=${GBL_OS_TYPE_RHEL8} GBL_OS_TYPE_STRING="RHEL8" PATH_TO_RPMS_SUFFIX=RHEL8 PREFIX_FOR_SATA="el8" fi #check for SLES15 if [ "$OS" == "SLES" ] && [ "$VER" == "15" ]; then GBL_OS_TYPE=${GBL_OS_TYPE_SLES15} GBL_OS_TYPE_STRING="SLES15" PATH_TO_RPMS_SUFFIX=SLES15 PREFIX_FOR_SATA="sles15" fi fi return 0 } #function to retrieve the server generation. function GetServerGen { GetOSType PATH_TO_RACADMPASSTHRU="`pwd | sed "s/ /\\\ /"`" if [ -d $PATH_TO_RACADMPASSTHRU/prereq/racadmpassthru/$GBL_OS_TYPE_STRING ]; then pushd $PATH_TO_RACADMPASSTHRU/prereq/racadmpassthru/$GBL_OS_TYPE_STRING/ >/dev/null if [ -f racadmpassthrucli-$PREFIX_FOR_SATA ]; then server=`./racadmpassthrucli-$PREFIX_FOR_SATA "racadm get idrac.info.ServerGen" | grep ServerGen | awk -F= '{ print $2 }'` server_gen=${server:0:2} fi if [ -z $server_gen ]; then server_gen=0 fi popd >/dev/null fi } ############################################################################### # Function : Usage # ## Display the usage messages ############################################################################### function Usage { GetServerGen cat <]\tEnables the ${ftr[$j,${chars[$char_val]}]}." elif [[ "${dcism_sections[$j,${chars[$char_val]}]}" == "$READ_ONLY_OPTION" ]]; then echo -e "[-${short_opts[$j,${chars[$char_val]}]}|--${long_opts[$j,${chars[$char_val]}]}] \tEnables the iDRAC SSO login as Readonly user." elif [[ "${dcism_sections[$j,${chars[$char_val]}]}" == "$ADMIN_OPTION" ]]; then echo -e "[-${short_opts[$j,${chars[$char_val]}]}|--${long_opts[$j,${chars[$char_val]}]}] \t\tEnables the iDRAC SSO login as Administrator." elif [[ "${dcism_sections[$j,${chars[$char_val]}]}" == "$HISTORIC_STR" ]] && [[ $server_gen -ge 14 ]]; then echo -e "[-${short_opts[$j,${chars[$char_val]}]}|--${long_opts[$j,${chars[$char_val]}]}] \t\t\tEnables the ${ftr[$j,${chars[$char_val]}]}." elif [[ "${dcism_sections[$j,${chars[$char_val]}]}" == "$HISTORIC_STR" ]] && [[ $server_gen -le 13 ]]; then continue else echo -e "[-${short_opts[$j,${chars[$char_val]}]}|--${long_opts[$j,${chars[$char_val]}]}] \t\t\tEnables the ${ftr[$j,${chars[$char_val]}]}." fi fi fi done done if [ -n "$1" ] && [ "$1" = "Help" ] then exit 0 fi SetErrorAndInterrupt $ERROR } #check whether rpm/debian is installed. function CheckPackage() { CheckOSType if [ $? -eq 0 ]; then if rpm -q dcism &> /dev/null; then return 0 fi else if [ $(dpkg-query -W -f='${Status}' dcism 2>/dev/null | grep -c "ok installed") -eq 1 ]; then return 0 fi fi return 1 } ############################################################################### # Function : ShowLicense # Function will show license # ############################################################################### function ShowLicense() { CheckPackage if [ $? -eq 1 ] then if [ -f "$LICENSEFILEPATH" ] then more "$LICENSEFILEPATH" echo "" echo -n "Do you agree to the above license terms? ('y' for yes | 'Enter' to exit): " read ANSWER answer=`echo "${ANSWER}" | sed 's#^[[:space:]]*##; s#[[:space:]]*$##'` if echo "${answer}" | grep -qi "^y$" then clear else exit 0 fi fi fi } # check for help echo "${*}" | egrep "^.*--help.*$" >/dev/null 2>&1 if [ $? == 0 ]; then Usage Help fi echo "${*}" | egrep "^.*-h.*$" >/dev/null 2>&1 if [ $? == 0 ]; then Usage Help fi # ensure sbin utilities are available in path, so that su will also work export PATH=/usr/kerberos/sbin:/usr/local/sbin:/sbin:/usr/sbin:$PATH # check for root privileges if [ ${UID} != 0 ]; then echo "This utility requires root privileges" SetErrorAndInterrupt $UPDATE_PREREQ_NA fi ############################################### ## Prompt ############################################### function Prompt { MSG="${1}" # prompt and get response echo -n "${MSG}" 1>&2 read RESP # remove leading/trailing spaces echo "${RESP}" | sed 's#^[[:space:]]*##; s#[[:space:]]*$##' } #check OS type whether ubuntu or not function CheckOSType() { if [ "$OS" == "Debian GNU/Linux" ]; then return 1 else return 0 fi } ######################## INI FUNCTIONS SECTION START ################# function ChangeINIKeyValue { INI_FILENAME=$1 SECTION=$2 KEY=$3 VALUE=$4 FOUND_SECTION=1 FOUND_KEY=1 #do not execute without proper parameter count if [ ! $# -eq 4 ] then echo "Incorrect number of parameters" return 1 fi #exit if ini file not present if [ ! -f "$INI_FILENAME" ] then return 1 fi #read file line by line until we hit the required section #and the required key. perform the job and break while read LINE do if [ "$FOUND_SECTION" == 0 ] && [ "$FOUND_KEY" == 0 ] then echo "$LINE" >> "$TEMP_INI_FILE" continue fi #check if a section is found and set flag echo $LINE | grep -e "^\[${SECTION}\]$"> /dev/null 2>&1 if [ $? == 0 ] then FOUND_SECTION=0 fi #check if this line is the key required if [ "$FOUND_SECTION" == 0 ] then echo $LINE | grep -e "${KEY}" > /dev/null 2>&1 if [ $? == 0 ] then LINE=`echo "${LINE}" | sed "s/${KEY}=.*/${KEY}=${VALUE}/g"` FOUND_KEY=0 fi fi echo "$LINE" >> "$TEMP_INI_FILE" done < "$INI_FILENAME" cp -f "$TEMP_INI_FILE" "$INI_FILENAME" rm -f "$TEMP_INI_FILE" return 0 } function GetFeaturesEnabledFromINI { COUNT=${#ftr[@]} for ((j=1;j<=$COUNT;j++)) do for ((i=0;i<=$COUNT;i++)) do if [ $i -eq 0 ] && [ ! -z "${ftr[$j,$i]}" ]; then feature_values[$j,$i]=`GetINIKeyValue "${ISM_INI_FILE}" "${dcism_sections[$j,$i]}" "feature.enabled"` echo "${feature_values[$j,$i]}" | grep -i "true" > /dev/null 2>&1 if [ $? -eq 0 ]; then feature_values[$j,$i]="true" else feature_values[$j,$i]="false" fi else char_val=`expr $i - 1` if [ ! -z "${ftr[$j,${chars[$char_val]}]}" ]; then feature_values[$j,${chars[$char_val]}]=`GetINIKeyValue "${ISM_INI_FILE}" "${dcism_sections[$j,${chars[$char_val]}]}" "feature.enabled"` echo "${feature_values[$j,${chars[$char_val]}]}" | grep -i "true" > /dev/null 2>&1 if [ $? -eq 0 ]; then feature_values[$j,${chars[$char_val]}]="true" else feature_values[$j,${chars[$char_val]}]="false" fi fi fi done done FEATURES_POPULATED=1 } function GetINIKeyValue { INI_FILENAME=$1 SECTION=$2 KEY=$3 VALUE="" FOUND_SECTION=1 FOUND_KEY=1 #do not execute without proper parameter count if [ ! $# -eq 3 ] then echo "Incorrect number of parameters" SetErrorAndInterrupt $ERROR fi #exit if ini file not present if [ ! -f $INI_FILENAME ] then SetErrorAndInterrupt $ERROR fi #read file line by line until we hit the required section #and the required key. perform the job and break while read LINE do if [ "$FOUND_SECTION" == 0 ] && [ "$FOUND_KEY" == 0 ] then break fi #check if a section is found and set flag echo $LINE | grep -e "^\[${SECTION}\]$"> /dev/null 2>&1 if [ $? == 0 ] then FOUND_SECTION=0 fi #check if this line is the key required if [ "$FOUND_SECTION" == 0 ] then echo $LINE | grep -e "${KEY}" > /dev/null 2>&1 if [ $? == 0 ] then VALUE=`echo "${LINE}" | awk -F= '{print$2}'` FOUND_KEY=0 echo $VALUE return 0 fi fi done < $INI_FILENAME #return "" } #check package version during upgrade, modify function PackageVersionVerify() { PKG_VER=$1 PKG_VER_TO_INSTALL=$2 if [ ! -z $PKG_VER_TO_INSTALL ]; then if [ "$PKG_VER_TO_INSTALL" == "$PKG_VER" ]; then FIRST_SCREEN=2 MODIFY=1 elif [ "$PKG_VER_TO_INSTALL" \> "$PKG_VER" ]; then # upgrade FIRST_SCREEN=1 UPGRADE=1 elif [ "$PKG_VER_TO_INSTALL" \< "$PKG_VER" ]; then #downgrade -- do not support DOWNGRADE=1 #exit here for silent install if [ ! -z "${MOD_CM}" ] then exit $UPDATE_FAILED_NEWER_VER_AVAILABLE fi fi else # giving random number as 0=install 1=upgrade 2=uninstall (from webpack perspective) # using 3 as script is executed within sbin dir or rpm/debian file not found. FIRST_SCREEN=3 SCRIPT_SOURCE="sbin" fi } ######################## INI FUNCTIONS SECTION END ################# function CheckiSMInstalled { PKG_NAMES="" PKG_NAME="" PKG_VER_TO_INSTALL="" CheckOSType if [ $? -eq 0 ]; then PKG_NAMES=`rpm -qa --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH} %{VENDOR}\n' dcism | grep 'Dell Inc\.' 2>/dev/null` PKG_NAME=`echo $PKG_NAMES | cut -d " " -f 1` if [ ! -z $PKG_NAME ]; then PKG_VER=`rpm -q $PKG_NAME --qf "%{version}"|sed "s/\.//g"` PKG_VER_TO_INSTALL=`rpm -qp "$SYSIDFILEPATH/$GBL_OS_TYPE_STRING/$ARCH/dcism*.rpm" --qf "%{version}" 2>/dev/null |sed "s/\.//g"` PackageVersionVerify $PKG_VER $PKG_VER_TO_INSTALL return 0 fi else CheckPackage if [ $? -eq 0 ]; then PKG_NAME=`dpkg -s dcism | grep Package | awk '{ print $2 }'` PKG_VER=`dpkg -s dcism | grep Version | awk '{ print $2 }'` PKG_ARC=`dpkg -s dcism | grep Architecture | awk '{ print $2 }'` PKG_NAME=$PKG_NAME"-"$PKG_VER"."$PKG_ARC PKG_VER="$(cut -d'-' -f1 <<<"$PKG_VER")" if [ ! -z $PKG_NAME ]; then if [ -d $SYSIDFILEPATH/$GBL_OS_TYPE_STRING/$ARCH ]; then CMD="dpkg-deb -f "$SYSIDFILEPATH/$GBL_OS_TYPE_STRING/$ARCH/`ls $SYSIDFILEPATH/$GBL_OS_TYPE_STRING/$ARCH/ | grep deb`" Version" PKG_VER_TO_INSTALL=`$CMD` PKG_VER_TO_INSTALL="$(cut -d'-' -f1 <<<"$PKG_VER_TO_INSTALL")" fi PackageVersionVerify $PKG_VER $PKG_VER_TO_INSTALL return 0 fi fi fi return 1 } ############################################################################### # Function : PrintGreetings # ############################################################################### function PrintGreetings { cat </dev/null 2>&1 #RET=$? #echo "RET value:"$RET #if [ $RET == 0 ] && [ $OPT_FALSE == 0 ]; then if [ $OPT_FALSE == 0 ]; then if grep -q "${1}" <<< "$TEST"; then COUNT=${#ftr[@]} for ((j=1;j<=$COUNT;j++)) do for ((i=0;i<=$COUNT;i++)) do if [ $i -eq 0 ] && [ ! -z "${feature_values[$j,$i]}" ]; then feature_values[$j,$i]="false" OPT_FALSE=1 else char_val=`expr $i - 1` if [ ! -z "${ftr[$j,${chars[$char_val]}]}" ]; then feature_values[$j,${chars[$char_val]}]="false" OPT_FALSE=1 fi fi done done fi fi fi } ############################################################################### # Function : AddShortOpt # ## Process short command line options ############################################################################### function AddShortOpt { local i=0 local j=1 for SHORT_OPT in `echo "${1}" | sed "s/[a-zO]/& /g"`; do COUNT=${#ftr[@]} for ((j=1;j<=$COUNT;j++)) do for ((i=0;i<=$COUNT;i++)) do if [ $i -eq 0 ] && [ ! -z "${feature_values[$j,$i]}" ]; then if [ "${SHORT_OPT}" == "${short_opts[$j,$i]}" ]; then feature_values[$j,$i]="true" FEATURE_OPT="true" fi else char_val=`expr $i - 1` if [ ! -z "${feature_values[$j,${chars[$char_val]}]}" ]; then if [ "${SHORT_OPT}" == "${short_opts[$j,${chars[$char_val]}]}" ]; then feature_values[$j,${chars[$char_val]}]="true" FEATURE_OPT="true" fi fi fi done done if [ "${SHORT_OPT}" == "x" ]; then EXPRESS="true" elif [ "${SHORT_OPT}" == "d" ]; then SHORT_DEL="true" elif [ "${SHORT_OPT}" == "i" ]; then SHORT_INSTALL="true" elif [ "${SHORT_OPT}" == "a" ]; then AUTO_START="true" elif [ "${FEATURE_OPT}" != "true" ] && [ ${1} != "h" ]; then echo "Invalid Option ${1}. Please see usage" Usage Help fi done } ############################################################################### # Function : LongOptionFalse # #This will check if supplied options are one of the feature available in install.ini file. Then it will make all feature false and later code will make only user selected #options true. if none of the feture is provided by user then enabled feature list will be taken from install.ini file. ############################################################################### function LongOptionFalse { local i=0 local j=1 if [ -f $INSTALL_CONFIG ]; then grep -vE "^#|triggered" "$INSTALL_CONFIG" | awk -F"|" '{print $7}' | tr '\n' ' '|grep -E `echo "${1}" | tr -d '-'|sed -e "s/ /|/g"` >/dev/null 2>&1 RET=$? if [ $RET == 0 ] && [ $OPT_FALSE == 0 ]; then COUNT=${#ftr[@]} for ((j=1;j<=$COUNT;j++)) do for ((i=0;i<=$COUNT;i++)) do if [ $i -eq 0 ] && [ ! -z "${ftr[$j,$i]}" ]; then feature_values[$j,$i]=false OPT_FALSE=1 else char_val=`expr $i - 1` if [ ! -z "${ftr[$j,${chars[$char_val]}]}" ]; then feature_values[$j,${chars[$char_val]}]=false OPT_FALSE=1 fi fi done done fi fi } ############################################################################### # Function : ValidateOpts # ## Validate command line options ############################################################################### function ValidateOpts { if [ $# -gt 0 ]; then # invald characters #BY added //,.,_,0-9,A-Z echo "${*}" | sed "s/ //g" | egrep "^[-/._a-zA-Z0-9O=//]+$" >/dev/null 2>&1 if [ $? != 0 ]; then echo "Invalid Options, please see the usage below" echo "" Usage fi MOD_CM=$* local OMSA_FLAG="false" local SNMP_FLAG="false" for param in $MOD_CM; do if [ "${param}" == "-So" ] || [ "${param}" == "$OMSA_LO" ]; then OMSA_FLAG="true" fi if [ "${param}" == "-s" ] || [ "${param}" == "$SNMP_LO" ]; then SNMP_FLAG="true" fi done if [ "${OMSA_FLAG}" == "true" ] && [ "${SNMP_FLAG}" == "false" ] ; then MOD_CM+=" -s" fi local i=0 LONG_READ_ONLY_ENABLED="false" LONG_ADMIN_ENABLED="false" SHORT_READ_ONLY_ENABLED="false" SHORT_ADMIN_ENABLED="false" # replace $* by $MOD_CM which does not contain --prefix for param in $MOD_CM; do # check for long option echo "${param}" | egrep "^--[a-zO2A-Z\-]+$" >/dev/null 2>&1 if [ $? == 0 ]; then GOOD_LONG_OPT=1 COUNT=${#long_opts[@]} local j=0 local i=0 for ((j=1;j<=$COUNT;j++)) do for ((i=0;i<=$COUNT;i++)) do if [ $i -eq 0 ] && [ ! -z "${long_opts[$j,$i]}" ]; then if [ "${param}" == "--${long_opts[$j,$i]}" ]; then GOOD_LONG_OPT=0 LongOptionFalse "${MOD_CM}" AddLongOpt ${long_opts[$j,$i]} fi else char_val=`expr $i - 1` if [ ! -z "${long_opts[$j,${chars[$char_val]}]}" ] && [ "${param}" == "--${long_opts[$j,${chars[$char_val]}]}" ]; then GOOD_LONG_OPT=0 if [ "${dcism_sections[$j,${chars[$char_val]}]}" == "$OS2IDRAC" ] && [ "${param}" == "--${long_opts[$j,${chars[$char_val]}]}" ]; then OS2IDRAC_ENABLED="true" fi if [ "${dcism_sections[$j,${chars[$char_val]}]}" == "$READ_ONLY_OPTION" ] && [ "${param}" == "--${long_opts[$j,${chars[$char_val]}]}" ]; then LONG_READ_ONLY_ENABLED="true" fi if [ "${dcism_sections[$j,${chars[$char_val]}]}" == "$ADMIN_OPTION" ] && [ "${param}" == "--${long_opts[$j,${chars[$char_val]}]}" ]; then LONG_ADMIN_ENABLED="true" fi LongOptionFalse "${MOD_CM}" char_val=`expr $i - 1` AddLongOpt ${long_opts[$j,${chars[$char_val]}]} fi fi done done if [ "$LONG_READ_ONLY_ENABLED" == "true" ] && [ "$LONG_ADMIN_ENABLED" == "true" ]; then echo "Invalid Option, cannot use both Read only and Admin for SSO" exit 1 fi if [ ${GOOD_LONG_OPT} != 0 ]; then echo