Files
Office_Networks/WF/src/APC/PowerChute/Linux_x64/install.sh
2018-05-08 03:01:03 +02:00

1688 lines
50 KiB
Bash
Executable File

#!/bin/sh
######################################################################
#
# PowerChute Network Shutdown v.3.1.0
# Copyright (c) 1999-2013 Schneider Electric, All Rights Reserved.
#
# History:
# 16Oct2007 Initial revision
# 12Dec2008 Supported VIMA
# 16thMay2013 changed the bundled JRE to 1.7
#
######################################################################
######################################################################
# Global Constants
######################################################################
PCNS_TAR="pcns310.tar"
PCNS_ZIP="$PCNS_TAR.gz"
JRE_VERSION="jre1.7.0_45"
JRE_TGZ_FILE="jre-7u45"
JRE_REQUIRED_MAJOR=1
JRE_REQUIRED_MINOR=7
JRE_REQUIRED_MINI=0
JRE_REQUIRED_MICRO=0
LINUX="Linux"
SOLARIS="Solaris"
HPUX="HP-UX"
AIX="AIX"
VIMA="VIMA"
UNKNOWN="UNKNOWN"
XENSERVER="XenServer"
x86_64="x86_64"
GROUP1="group1"
GROUP2="group2"
GROUP3="group3"
ARCH="x64"
TRUE=0
FALSE=1
STR_YES="YES"
YES=0
NO=1
QUIT=2
INVALID=99
# PCNS-1512: Make sure we have /sbin on the path
PATH=/sbin:$PATH
######################################################################
# Exit Codes
######################################################################
EXIT_SUCCESS=0
EXIT_USAGE=1
EXIT_NOT_ROOT_USER=4
EXIT_UNSUPPORTED_OS=5
EXIT_UPGRADE_NOT_SUPPORTED=6
EXIT_USER_ABORT=7
EXIT_CONFLICT_PCPLUS=8
EXIT_CONFLICT_PCBE=9
EXIT_CONFLICT_PCS=10
EXIT_CONFLICT_VMWARE=11
EXIT_INVALID_INSTALL_DIR=12
EXIT_INVALID_JAVA_VERSION=13
EXIT_INVALID_LOCALE=14
EXIT_ZIPFILE_MISSING=15
EXIT_SILENT_CONFIG_MISSING=16
EXIT_EULA_NOT_ACCEPTED=17
EXIT_SILENT_INSTALL_JAVA_DIR=20
######################################################################
# Global Variables
######################################################################
UPDATE_INSTALL=$FALSE
OS=$UNKNOWN
SILENT_MODE=$FALSE
SRC_DIR=""
INSTALL_DIR=""
APP_DIR=""
JAVA_DIR=""
ACCEPT_EULA="NO"
REGISTER_NMC="NO"
STARTUP=""
PCBE_STARTUP=""
PCS_STARTUP=""
OLD_INSTALL_DIR=""
JRE_FILE=""
SPARC=$FALSE
TR="tr"
######################################################################
# Functions
######################################################################
# trap keyboard interrupt on the following:
# 1 SIGHUP
# 2 SIGINT
# 3 SIGQUIT
# 6 SIGABRT
trap control_c 1 2 3 6
control_c()
# run if user hits control-c
{
echo -en "\n*** User Abort Detected! Exiting ***\n"
Echo "Aborting with error code-$EXIT_USER_ABORT"
CancelAll $EXIT_USER_ABORT
}
# Waits for user key press.
Pause() {
OLDCONFIG=`stty -g`
stty -icanon -echo min 1 time 0
dd count=1 2>/dev/null
stty $OLDCONFIG
}
Echo() {
string="$1"
echo "$string"
# if [ $SILENT_MODE = $TRUE ]; then
# echo "$string" >> pcns_install.log
# fi
}
PrintUsage() {
Echo "Usage:"
Echo " $0 [-f <config file>] : Silent install with configuration file."
Echo " $0 [-h|-H] : Print help."
exit $EXIT_USAGE
}
IsYN() {
rval=$INVALID
query_string="$1"
loop=$TRUE
while [ $loop -eq $TRUE ]
do
Echo ""
Echo "$query_string "
read ynq
case "$ynq" in
[Yy]*)
rval=$YES
loop=$FALSE
;;
[Nn]*)
rval=$NO
loop=$FALSE
;;
*)
Echo "Invalid response."
;;
esac
done
return $rval
}
SetSilentConfig() {
# Check parameter
cnt=`grep '^INSTALL_DIR=' $SILENT_CONFIG | wc -l`
if [ $cnt -gt 1 ]; then
Echo "Aborting with error code-$EXIT_INVALID_INSTALL_DIR"
Echo "Error: Too many INSTALL_DIR in $SILENT_CONFIG"
exit $EXIT_INVALID_INSTALL_DIR
fi
cnt=`grep '^JAVA_DIR=' $SILENT_CONFIG | wc -l`
if [ $cnt -gt 1 ]; then
Echo "Aborting with error code-$EXIT_SILENT_INSTALL_JAVA_DIR"
Echo "Error: Too many JAVA_DIR in $SILENT_CONFIG"
exit $EXIT_SILENT_INSTALL_JAVA_DIR
fi
# Get values from config file
INSTALL_DIR=`grep '^INSTALL_DIR=' $SILENT_CONFIG | sed s/INSTALL_DIR=//`
JAVA_DIR=`grep '^JAVA_DIR=' $SILENT_CONFIG | sed s/JAVA_DIR=//`
ACCEPT_EULA=`grep '^ACCEPT_EULA=' $SILENT_CONFIG | sed s/ACCEPT_EULA=// | sed 's/[^a-zA-Z]*//g' | $TR "[:lower:]" "[:upper:]" `
REGISTER_NMC=`grep '^REGISTER_WITH_NMC=' $SILENT_CONFIG | sed s/REGISTER_WITH_NMC=// | $TR "[:lower:]" "[:upper:]" `
# Verify INSTALL_DIR
if [ -n "$INSTALL_DIR" ]; then
# Collapse multiple slashes on the path
INSTALL_DIR=`echo $INSTALL_DIR | tr -s /`
# Remove trailing slash (if any)
buf=`echo $INSTALL_DIR | grep '/$' `
if [ -n "$buf" ]; then
INSTALL_DIR=`echo $INSTALL_DIR | sed 's/\/*$//'`
fi
# Ensure leading slash
buf=`echo $INSTALL_DIR | grep '^/' `
if [ -z "$buf" ]; then
Echo "Aborting with error code-$EXIT_INVALID_INSTALL_DIR"
Echo "Error: INSTALL_DIR must start with '/'"
exit $EXIT_INVALID_INSTALL_DIR
fi
# Ensure no white space on path
buf=`echo $INSTALL_DIR | grep ' ' `
if [ -n "$buf" ]; then
Echo "Aborting with error code-$EXIT_INVALID_INSTALL_DIR"
Echo "Error: INSTALL_DIR must not contain white space."
exit $EXIT_INVALID_INSTALL_DIR
fi
# Ensure no backslashes on path
buf=`echo $INSTALL_DIR | grep '\\\' `
if [ -n "$buf" ]; then
Echo "Aborting with error code-$EXIT_INVALID_INSTALL_DIR"
Echo "Error: INSTALL_DIR must not contain back slash '\\'"
exit $EXIT_INVALID_INSTALL_DIR
fi
Echo "INSTALL_DIR=$INSTALL_DIR"
else
buf=`grep '^INSTALL_DIR=' $SILENT_CONFIG`
buf2=`grep '^#INSTALL_DIR=' $SILENT_CONFIG`
if [ -n "$buf" -o -n "$buf2" ]; then
Echo "INSTALL_DIR is not specified."
Echo "PCNS will be installed to the default directory \"/opt/APC/PowerChute\""
Echo ""
else
Echo "Aborting with error code-$EXIT_INVALID_INSTALL_DIR"
Echo "Error: INSTALL_DIR is not configured"
exit $EXIT_INVALID_INSTALL_DIR
fi
fi
# Verify JAVA_DIR
if [ -n "$JAVA_DIR" ]; then
#must have / at the end, so add it
buf=`echo $JAVA_DIR | grep '/$' `
if [ -z "$buf" ]; then
JAVA_DIR="$JAVA_DIR/bin/"
fi
# Add"/bin" at the end of JAVA_DIR if needed.
# This allows it to be backward compatible with previous versions,
# which did not have the bin
buf=`echo $JAVA_DIR | grep '/bin/$' `
if [ -z "$buf" ]; then
JAVA_DIR="$JAVA_DIR/bin/"
fi
buf=`echo $JAVA_DIR | grep '^/' `
if [ -z "$buf" ]; then
Echo "Error: JAVA_DIR must start with /"
Echo "Aborting with error code-$EXIT_SILENT_INSTALL_JAVA_DIR"
exit $EXIT_SILENT_INSTALL_JAVA_DIR
fi
buf=`echo $JAVA_DIR | grep ' ' `
if [ -n "$buf" ]; then
Echo "Error: JAVA_DIR must not contain white space \" \""
Echo "Aborting with error code-$EXIT_SILENT_INSTALL_JAVA_DIR"
exit $EXIT_SILENT_INSTALL_JAVA_DIR
fi
buf=`echo $JAVA_DIR | grep '\\\' `
if [ -n "$buf" ]; then
Echo "Error: JAVA_DIR must not contain back slash \"\\\""
Echo "Aborting with error code-$EXIT_SILENT_INSTALL_JAVA_DIR"
exit $EXIT_SILENT_INSTALL_JAVA_DIR
fi
if [ ! -d "$JAVA_DIR" ]; then
Echo "Error: Invalid JAVA_DIR. $JAVA_DIR does not exist."
Echo "Aborting with error code-$EXIT_SILENT_INSTALL_JAVA_DIR"
exit $EXIT_SILENT_INSTALL_JAVA_DIR
fi
Echo "JAVA_DIR=$JAVA_DIR"
fi
}
IsSilentMode() {
Echo "IsSilentMode"
}
IsRootUser() {
ROOT="root"
case "$OS" in
$SOLARIS)
id | grep root > /dev/null 2>&1
if [ $? -eq 0 ]; then
USER=$ROOT
fi
;;
*)
USER=`id -nu`
;;
esac
if [ $USER != $ROOT ]; then
Echo "Error: $0 must be run with root privileges!"
Echo "Aborting with error code-$EXIT_NOT_ROOT_USER"
exit $EXIT_NOT_ROOT_USER
fi
}
CheckOS() {
OS=`uname | grep -i Linux`
if [ ! -z "$OS" ]; then
# We're a Linux derivative, decide which one.
if [ -f /etc/vima-release ] || [ -f /etc/vma-release ]; then
OS=$VIMA
else
grep XenServer /etc/redhat-release > /dev/null 2>&1
if [ $? -eq 0 ]; then
OS=$XENSERVER
else
OS=$LINUX
fi
fi
else
OS=`uname | grep -i HP-UX`
if [ ! -z "$OS" ]
then
OS=$HPUX
else
OS=`uname | grep -i AIX`
if [ ! -z "$OS" ]
then
OS=$AIX
else
OS=`uname | grep -i SOLARIS`
if [ ! -z "$OS" ]
then
OS=$SOLARIS
isSparc
SPARC=$?
else
OS=`uname | grep -i SUNOS`
if [ ! -z "$OS" ]
then
OS=$SOLARIS
isSparc
SPARC=$?
else
Echo "Aborting with error code-$EXIT_UNSUPPORTED_OS"
Echo "Error: Unknown OS."
exit $EXIT_UNSUPPORTED_OS
fi
fi
fi
fi
fi
Echo "OS=$OS"
Echo ""
}
isSparc() {
rval=$FALSE
tmp=`uname -a | grep -i SPARC`
if [ ! -z "$tmp" ]
then
rval=$TRUE
fi
return $rval
}
Initialize() {
Echo "Initializing ..."
case "$OS" in
$VIMA)
Echo "This version of PowerChute Network Shutdown does not support VMWare ESX or ESXi."
Echo "Please consult www.apc.com for the required version of PowerChute Network Shutdown."
Echo "Aborting with error code-$EXIT_UNSUPPORTED_OS"
CancelAll $EXIT_UNSUPPORTED_OS
;;
$XENSERVER)
STARTUP=/etc/rc.d/init.d/PowerChute
PCBE_STARTUP=/etc/rc.d/init.d/PBEAgent
PCS_STARTUP=/etc/rc.d/init.d/pcs
;;
$LINUX)
if [ -f /etc/SuSE-release ]; then
STARTUP=/etc/init.d/PowerChute
elif [ -f /etc/vmware-release ] ; then
Echo "This version of PowerChute Network Shutdown does not support VMWare ESX or ESXi."
Echo "Please consult www.apc.com for the required version of PowerChute Network Shutdown."
Echo "Aborting with error code-$EXIT_UNSUPPORTED_OS"
CancelAll $EXIT_UNSUPPORTED_OS
elif [ -d /etc/rc.d/init.d ]; then
STARTUP=/etc/rc.d/init.d/PowerChute
else
STARTUP=/etc/init.d/PowerChute
fi
PCBE_STARTUP=/etc/rc.d/init.d/PBEAgent
PCS_STARTUP=/etc/rc.d/init.d/pcs
;;
$SOLARIS)
STARTUP=/etc/rc2.d/S99PowerChute
PCBE_STARTUP=/etc/rc2.d/S99PBEAgent
TR=/usr/xpg4/bin/tr
;;
$HPUX)
STARTUP=/sbin/init.d/pcns
;;
$AIX)
STARTUP=/etc/rc.APCpcns
;;
esac
}
IsPCNSInstalled() {
upgrade=$FALSE
version="Unknown"
if [ -f "$STARTUP" ]; then
grep 'PowerChute Network Shutdown, v2.2.4' $STARTUP 1>/dev/null 2>/dev/null
if [ $? = 0 ]; then
Echo "Found PowerChute Network Shutdown v2.2.4."
version="2.2.4"
upgrade=$FALSE
fi
grep 'PowerChute Network Shutdown, v2.2.5' $STARTUP 1>/dev/null 2>/dev/null
if [ $? = 0 ]; then
Echo "Found PowerChute Network Shutdown v2.2.5."
version="2.2.5"
upgrade=$FALSE
fi
grep 'PowerChute Network Shutdown, v2.2.6' $STARTUP 1>/dev/null 2>/dev/null
if [ $? = 0 ]; then
Echo "Found PowerChute Network Shutdown v2.2.6."
version="2.2.6"
upgrade=$FALSE
fi
grep 'PowerChute Network Shutdown, v2.2.7' $STARTUP 1>/dev/null 2>/dev/null
if [ $? = 0 ]; then
Echo "Found PowerChute Network Shutdown v2.2.7."
version="2.2.7"
upgrade=$FALSE
fi
grep 'PowerChute Network Shutdown, v3.0.0' $STARTUP 1>/dev/null 2>/dev/null
if [ $? = 0 ]; then
Echo "Found PowerChute Network Shutdown v3.0.0"
version="3.0.0"
upgrade=$TRUE
fi
grep 'PowerChute Network Shutdown, v3.0.1' $STARTUP 1>/dev/null 2>/dev/null
if [ $? = 0 ]; then
Echo "Found PowerChute Network Shutdown v3.0.1"
version="3.0.1"
upgrade=$TRUE
fi
grep 'PowerChute Network Shutdown, v3.1.0' $STARTUP 1>/dev/null 2>/dev/null
if [ $? = 0 ]; then
Echo "Found PowerChute Network Shutdown v3.1.0"
version="3.1.0"
upgrade=$TRUE
fi
if [ $upgrade = $FALSE ]; then
Echo "PowerChute Network Shutdown is already installed. Upgrade is not supported for this version."
Echo "Please uninstall existing PCNS to continue with installation of PCNS v.3.1.0"
Echo "Installation cancelled."
Echo "Aborting with error code-$EXIT_UPGRADE_NOT_SUPPORTED"
Echo ""
exit $EXIT_UPGRADE_NOT_SUPPORTED
fi
result=$FALSE
while [ $result = $FALSE ]
do
prev_install_dir=`grep '^INSTALL_PATH=' $STARTUP | sed s/INSTALL_PATH=\"// | sed s/\"//`
if [ -d "$prev_install_dir/$GROUP2" ]; then
Echo "Previous version of PowerChute Network Shutdown is installed."
Echo "Update install does not support multiple instances."
Echo "Please uninstall PCNS and run this install program again."
Echo "Aborting with error code-$EXIT_UPGRADE_NOT_SUPPORTED"
Echo "Installation cancelled."
Echo ""
exit $EXIT_UPGRADE_NOT_SUPPORTED
fi
if [ $SILENT_MODE = $TRUE ]; then
if [ $version = "3.1.0" ]; then
Echo "Current version of PowerChute Network Shutdown is installed."
else
Echo "Previous version of PowerChute Network Shutdown is installed."
fi
Echo "Start update installation."
val=$YES
else
if [ $version = "3.1.0" ]; then
Echo "Current version of PowerChute Network Shutdown is installed."
else
Echo "Previous version of PowerChute Network Shutdown is installed."
fi
IsYN "Do you want to update it [Yes|No]?"
val=$?
fi
case $val in
$YES)
Echo "Update selected for existing version of PowerChute Network Shutdown."
UPDATE_INSTALL=$TRUE
result=$TRUE
;;
$NO)
Echo "Installation cancelled."
Echo "Aborting with error code-$EXIT_USER_ABORT"
Echo ""
exit $EXIT_USER_ABORT
;;
*)
Echo "Invalid response."
;;
esac
done
fi
}
IsPCPlusInstalled() {
if [ -d "/etc/apc_repository" ]; then
Echo "PowerChute Plus is installed. Please uninstall PowerChute Plus."
Echo "Aborting with error code-$EXIT_CONFLICT_PCPLUS."
exit $EXIT_CONFLICT_PCPLUS
fi
}
IsPCBEInstalled() {
if [ -n "$PCBE_STARTUP" -a -f "$PCBE_STARTUP" ]
then
Echo "Aborting with error code-$EXIT_CONFLICT_PCBE."
Echo "PowerChute Business Edition Agent is installed. Please uninstall PCBE Agent."
exit $EXIT_CONFLICT_PCBE
fi
}
IsPCSInstalled() {
if [ -n "$PCS_STARTUP" -a -f "$PCS_STARTUP" ]
then
Echo "PowerChute Server is installed. Please uninstall PowerChute Server."
Echo "Aborting with error code-$EXIT_CONFLICT_PCS."
exit $EXIT_CONFLICT_PCS
fi
}
checkForVMWare() {
lang='ja_'
if env | grep ^LANG=$lang &>/dev/null;
then
if [ -e /usr/bin/vmware ]
then
# VMware detected!
# Check for VMware Server
if /usr/bin/vmware -v | grep Server &> /dev/null
then
Echo "VMware Server has been detected on your system. This version of PowerChute Network Shutdown does not support VMware. Please uninstall VMware Server, or consult www.apc.com for the required version of PowerChute Network Shutdown."
Echo "Aborting with error code-$EXIT_CONFLICT_VMWARE."
exit $EXIT_CONFLICT_VMWARE
fi
# Check for VMware Workstation
if /usr/bin/vmware -v | grep Workstation &> /dev/null
then
Echo "VMware Workstation has been detected on your system. This version of PowerChute Network Shutdown does not support VMware. Please uninstall VMware Workstation, or consult www.apc.com for the required version of PowerChute Network Shutdown."
Echo "Aborting with error code-$EXIT_CONFLICT_VMWARE."
exit $EXIT_CONFLICT_VMWARE
fi
fi
# Check for VMware-Player
if [ -e /usr/bin/vmplayer ]
then
# VMware Player detected.
Echo "VMware Player has been detected on your system. This version of PowerChute Network Shutdown does not support VMware. Please uninstall VMware Player, or consult www.apc.com for the required version of PowerChute Network Shutdown."
Echo "Aborting with error code-$EXIT_CONFLICT_VMWARE."
exit $EXIT_CONFLICT_VMWARE
fi
fi
}
checkForXenServer() {
grep XenServer /etc/redhat-release > /dev/null 2>&1
if [ $? -eq 0 ]; then
Echo "Xen Server has been detected on your system."
Echo "This version of PowerChute Network Shutdown does not support Xen Server."
Echo "Please consult www.apc.com for the required version of PowerChute Network Shutdown."
Echo "Aborting with error code-$EXIT_CONFLICT_VMWARE."
exit $EXIT_CONFLICT_VMWARE
fi
}
InitUpdate() {
if [ $UPDATE_INSTALL = $TRUE ]; then
# Get PCNS Path
OLD_INSTALL_DIR=`grep '^INSTALL_PATH=' $STARTUP | sed s/INSTALL_PATH=\"// | sed s/\"//`
Echo "PowerChute Network Shutdown previously installed at:$OLD_INSTALL_DIR"
# Stop daemon
case "$OS" in
$VIMA)
/etc/rc.d/init.d/PowerChute stop
;;
$XENSERVER)
/etc/rc.d/init.d/PowerChute stop
;;
$LINUX)
if [ -f /etc/SuSE-release ]; then
if [ -f /etc/init.d/PowerChute ]; then
/etc/init.d/PowerChute stop
fi
else
if [ -f /etc/rc.d/init.d/PowerChute ]; then
/etc/rc.d/init.d/PowerChute stop
fi
if [ -f /etc/init.d/PowerChute ]; then
/etc/init.d/PowerChute stop
fi
fi
;;
$SOLARIS)
/etc/rc2.d/S99PowerChute stop
;;
$HPUX)
/sbin/init.d/pcns stop
;;
$AIX)
/etc/rc.APCpcns stop
;;
esac
fi
}
BackupOldPCNS() {
if [ $UPDATE_INSTALL = $TRUE ]; then
# Install dir is same as old PCNS
if [ "$INSTALL_DIR/PowerChute" = "$OLD_INSTALL_DIR" ]; then
backup_dir="$INSTALL_DIR/PowerChute_update_backup"
rm -rf $backup_dir
mv $OLD_INSTALL_DIR $backup_dir
mkdir -p $OLD_INSTALL_DIR
OLD_INSTALL_DIR=$backup_dir
Echo "Backup old PCNS directory to $OLD_INSTALL_DIR"
fi
fi
}
UninstallOldPCNS() {
if [ $UPDATE_INSTALL = $TRUE ]; then
# remove all files
rm -rf $OLD_INSTALL_DIR
fi
}
CopyUpdateFiles() {
if [ $UPDATE_INSTALL = $TRUE ]; then
Echo "Copying update files ..."
if [ -d "$OLD_INSTALL_DIR/$GROUP1" ]; then
# PCNS 222
backup_dir="$OLD_INSTALL_DIR/$GROUP1"
else
backup_dir="$OLD_INSTALL_DIR"
fi
cp "$backup_dir/m11.cfg" "$APP_DIR/$GROUP1/" 1>/dev/null 2>/dev/null
cp "$backup_dir/EventLog.txt" "$APP_DIR/$GROUP1/" 1>/dev/null 2>/dev/null
# Convert m11.cfg to INI
oldDir=$PWD
cd $APP_DIR/$GROUP1
m11Path="$backup_dir/m11.cfg"
#merge pcnsconfig.ini files.
oldIniPath="$backup_dir/pcnsconfig.ini"
javaParams="-Xms32m -Xmx64m -cp .:comp/pcns.jar:lib/m11.jar:lib/commons-codec-1.4.jar:lib/commons-collections-3.2.1.jar:lib/commons-configuration-1.6.jar:lib/commons-lang-2.5.jar:lib/commons-logging-1.1.1.jar:lib/log4j-1.2.16.jar:lib/bcprov-jdk16-146.jar:lib/json_simple-1.1.jar:lib/jasypt-1.9.0.jar -Dm11Path=$m11Path -DoldIniPath=$oldIniPath -DapplicationDirectory=$APP_DIR -Dgroup=1 com.apcc.pcns.m11converter.M11Converter"
#Echo ${JAVA_DIR}java $javaParams
${JAVA_DIR}java $javaParams 1>/dev/null 2>/dev/null
cd $oldDir
fi
}
SetInstallDir() {
if [ $SILENT_MODE = $TRUE ]; then
if [ -z "$INSTALL_DIR" ]; then
INSTALL_DIR="/opt/APC"
fi
elif [ $UPDATE_INSTALL = $TRUE ]; then
# Use the old location
INSTALL_DIR=`dirname $OLD_INSTALL_DIR`
else
res=$FALSE
while [ $res = $FALSE ]
do
Echo ""
Echo "Please enter the installation directory or press enter to install to the default directory (/opt/APC/PowerChute):"
read val
if [ -z "$val" ]; then
INSTALL_DIR="/opt/APC"
else
INSTALL_DIR=$val
# Verify install path
if [ -n "$INSTALL_DIR" ]; then
buf=`echo $INSTALL_DIR | grep '^/' `
if [ -z "$buf" ]; then
Echo "Installation directory must start with \"/\""
Echo "Aborting with error code-$EXIT_INVALID_INSTALL_DIR"
exit $EXIT_INVALID_INSTALL_DIR
fi
buf=`echo $INSTALL_DIR | grep ' ' `
if [ -n "$buf" ]; then
Echo "Installation directory must not contain white space \" \""
Echo "Aborting with error code-$EXIT_INVALID_INSTALL_DIR"
exit $EXIT_INVALID_INSTALL_DIR
fi
buf=`echo $INSTALL_DIR | grep '\\\' `
if [ -n "$buf" ]; then
Echo "Installation directory must not contain back slash \"\\\""
Echo "Aborting with error code-$EXIT_INVALID_INSTALL_DIR"
exit $EXIT_INVALID_INSTALL_DIR
fi
fi
fi
IsYN "Are you sure you want to install PCNS to $INSTALL_DIR/PowerChute [Yes|No]?"
val=$?
case $val in
$YES)
if [ -d "$INSTALL_DIR/PowerChute" ]; then
IsYN "$INSTALL_DIR/PowerChute already exists. Do you want to use it [Yes|No]?"
val=$?
case $val in
$YES)
BackupOldPCNS
res=$TRUE
;;
$NO)
# Echo "Please enter the installation directory:"
# read INSTALL_DIR
;;
*)
Echo "Invalid response."
;;
esac
else
res=$TRUE
fi
;;
$NO)
# Echo "Please enter the installation directory (Example:/opt/APC):"
# read INSTALL_DIR
;;
*)
Echo "Invalid response."
;;
esac
done
fi
if [ ! -d "$INSTALL_DIR" ]; then
Echo "Creating $INSTALL_DIR directory ..."
mkdir -p "$INSTALL_DIR"
if [ ! $? = 0 ]; then
Echo "Failed to create directory $INSTALL_DIR."
Echo "Aborting with error code-$EXIT_INVALID_INSTALL_DIR"
exit $EXIT_INVALID_INSTALL_DIR
fi
fi
Echo "PCNS will be installed to $INSTALL_DIR/PowerChute"
}
CheckBundledJava() {
rval=$FALSE
case "$OS" in
$VIMA)
JRE_FILE=$JRE_TGZ_FILE"-linux-x64.tar.gz"
;;
$LINUX)
if [ "$ARCH" = "x64" ]; then
JRE_FILE=$JRE_TGZ_FILE"-linux-x64.tar.gz"
else
JRE_FILE=$JRE_TGZ_FILE"-linux-i586.tar.gz"
fi
;;
$SOLARIS)
if [ $SPARC = $TRUE ]; then
JRE_FILE=$JRE_TGZ_FILE"-solaris-sparc.tar.gz"
else
JRE_FILE=$JRE_TGZ_FILE"-solaris-i586.tar.gz"
fi
;;
$XENSERVER)
JRE_FILE=$JRE_TGZ_FILE"-linux-i586.tar.gz"
;;
$HPUX)
;;
$AIX)
;;
esac
if [ -f "$SRC_DIR/$JRE_FILE" ]; then
rval=$TRUE
fi
return $rval
}
AskJavaPath() {
CheckBundledJava
bundled=$?
res=$FALSE
while [ $res = $FALSE ]
do
Echo ""
if [ $bundled = $TRUE ];then
Echo "Please enter java directory if you want to use your system java (example:/usr/local/bin/jre/$JRE_VERSION) or press enter to install the bundled Java:"
else
Echo "JRE is not bundled. Please enter your java directory (example:/usr/local/bin/jre/$JRE_VERSION):"
fi
read str
if [ $bundled = $TRUE -a -z "$str" ]; then
#the empty string is ok, means use the path JRE
JAVA_DIR=""
res=$TRUE
else
JAVA_DIR=$str
res=$FALSE
fi
if [ $res = $FALSE -a -n "$JAVA_DIR" ]; then
#Fix it as needed
#must have / at the end, so add it
buf=`echo $JAVA_DIR | grep '/$' `
if [ -z "$buf" ]; then
JAVA_DIR="${JAVA_DIR}/"
fi
# Add/bin at the end of JAVA_DIR if needed
# This allows it to be backward compatible
# with previous versions, which did not have
# the bin
buf=`echo $JAVA_DIR | grep '/bin/$' `
if [ -z "$buf" ]; then
JAVA_DIR="$JAVA_DIR/bin/"
fi
buf=`echo $JAVA_DIR | grep ' ' `
if [ -n "$buf" ]; then
Echo "Java directory must not contain white space \" \""
else
buf=`echo $JAVA_DIR | grep '^/' `
if [ -z "$buf" ]; then
Echo "Java directory must start with /"
else
buf=`echo $JAVA_DIR | grep '\\\' `
if [ -n "$buf" ]; then
Echo "Java directory must not contain back slash \"\\\""
elif [ ! -d $JAVA_DIR ]; then
Echo "Invalid path: $JAVA_DIR"
else
#Check the java version before confirming, no point in
#asking them if they want it is we can't accept it anyway.
CheckJavaVersion
res=$?
fi
fi
fi
fi
done
}
InstallBundledJava() {
CheckBundledJava
if [ $? = $FALSE ]; then
Echo "No private JRE is bundled for this OS. Please install and specify a JRE"
Echo "Aborting with error code-$EXIT_INVALID_JAVA_VERSION."
CancelAll $EXIT_INVALID_JAVA_VERSION
fi
# Copy jre file
APP_JRE_DIR=$APP_DIR/$JRE_VERSION
JAVA_DIR="$APP_DIR/$JRE_VERSION/bin/"
Echo "Copying jre to $APP_DIR ..."
mkdir -p $APP_DIR
cp "$SRC_DIR/$JRE_FILE" "$APP_DIR/jre.tar.gz"
if [ ! $? -eq 0 ]; then
Echo "Failed to copy jre file."
CancelAll
fi
cd $APP_DIR
chmod 700 jre.tar.gz
# Extract Java
Echo "Extracting jre to $APP_DIR/jre ..."
gunzip jre.tar.gz
tar -xf jre.tar
if [ ! $? -eq 0 ]; then
Echo "Failed to extract jre file."
CancelAll
fi
rm -rf jre.tar
chmod -R 0755 $APP_JRE_DIR
# Regenerating the Shared Archive
if [ ! $OS = "$VIMA" ]; then
$JAVA_DIR/java -Xshare:dump 1>/dev/null 2>/dev/null
fi
cd $APP_DIR
}
CheckJavaVersion() {
Echo "Checking version of Java ..."
rval=$FALSE
# Show JRE Version
${JAVA_DIR}java -version >/dev/null 2>&1
if [ ! $? -eq 0 ]; then
Echo
Echo "Java not found at ${JAVA_DIR}."
else
VERSION=`${JAVA_DIR}java -version 2>&1 | head -n 1 | cut -d\" -f 2 | sed s/_/\./g`
Echo "Detected Java Version: $VERSION"
MAJOR=`echo $VERSION | cut -d\. -f 1`
MINOR=`echo $VERSION | cut -d\. -f 2`
MINI=`echo $VERSION | cut -d\. -f 3`
MICRO=`echo $VERSION | cut -d\. -f 4`
if [ -z "$MICRO" ]; then
MICRO=0
fi
case "$OS" in
$HPUX)
JRE_REQUIRED_MICRO=08
;;
*)
JRE_REQUIRED_MICRO=0
;;
esac
if [ $VERSION ]; then
if [ \( $MAJOR -gt $JRE_REQUIRED_MAJOR \) -o \( $MAJOR -eq $JRE_REQUIRED_MAJOR -a $MINOR -gt $JRE_REQUIRED_MINOR \) -o \( $MAJOR -eq $JRE_REQUIRED_MAJOR -a $MINOR -eq $JRE_REQUIRED_MINOR -a $MINI -gt $JRE_REQUIRED_MINI \) -o \( $MAJOR -eq $JRE_REQUIRED_MAJOR -a $MINOR -eq $JRE_REQUIRED_MINOR -a $MINI -eq $JRE_REQUIRED_MINI -a $MICRO -ge $JRE_REQUIRED_MICRO \) ]; then
Echo "Acceptable version"
rval=$TRUE
else
Echo "Wrong version of Java. Minimum Java version required is $JRE_REQUIRED_MAJOR.$JRE_REQUIRED_MINOR.$JRE_REQUIRED_MINI.$JRE_REQUIRED_MICRO "
Echo "Java can be downloaded from www.java.com"
fi
else
Echo
Echo "Java not found at $JAVA_DIR"
fi
fi
return $rval
}
CheckOSArch(){
tmp=`uname -a | grep -i x86_64`
if [ ! -z "$tmp" ]; then
#it is a 64 bit OS
if [ "$ARCH" = "x32" ]; then
echo "64 bit OS detected. This installer is for 32 bit OS. Please download the 64 bit installer for this OS"
CancelAll
fi
else
#It is a 32 bit OS
if [ "$ARCH" = "x64" ]; then
echo "32 bit OS detected. This installer is for 64 bit OS. Please download the 32 bit installer for this OS"
CancelAll
fi
fi
}
SetupJava() {
if [ $SILENT_MODE = $TRUE ]; then
if [ -z "$JAVA_DIR" ]; then
InstallBundledJava
res=$TRUE
else
CheckJavaVersion
res=$?
if [ $res -eq $FALSE ]; then
# invalid java path
Echo "Aborting with error code-$EXIT_INVALID_JAVA_VERSION."
CancelAll $EXIT_INVALID_JAVA_VERSION
fi
fi
else
AskJavaPath
if [ -z "$JAVA_DIR" ]; then
InstallBundledJava
fi
fi
# Show JRE Version
Echo ""
$JAVA_DIR/java -version
if [ ! $? -eq 0 ]; then
Echo ""
CheckOSArch
Echo "Invalid jre path."
CancelAll
fi
Echo ""
# Create java path config file
Echo "JAVA_DIR=$JAVA_DIR"
Echo ""
cd "$SRC_DIR"
}
SetupM11Cfg() {
Echo "Setup the m11.cfg file"
filename="$GROUP_DIR/m11.cfg"
setting1="host.ApplicationDirectory=$GROUP_DIR"
setting2="host.ComponentDirectory=$GROUP_DIR/comp"
setting3="Notifier.NotifierExe=$GROUP_DIR/bin/notifier"
#echo "DEBUG: $setting1"
#echo "DEBUG: $setting2"
#echo "DEBUG: $setting3"
PARAMS=" -cp .:$GROUP_DIR/comp/pcns.jar:$GROUP_DIR/lib/m11.jar com.apcc.pcns.m11cfgInit.M11cfgInit $filename $setting1 $setting2 $setting3"
#echo "DEBUG: ${JAVA_DIR}java $PARAMS"
#Note:JAVA_DIR has the \ on the end
${JAVA_DIR}java $PARAMS 1>/dev/null 2>/dev/null
}
SetupCommandFiles() {
case "$OS" in
$VIMA)
cp VIMA/notifier.sh notifier
cp VIMA/shutdown.sh shutdown
cp VIMA/shutdownhost.pl shutdownhost.pl
chmod 744 shutdownhost.pl
;;
$XENSERVER)
cp Linux/notifier.sh notifier
cp Linux/shutdown.sh shutdown
;;
$LINUX)
cp Linux/notifier.sh notifier
cp Linux/shutdown.sh shutdown
;;
$SOLARIS)
cp Solaris/notifier.sh notifier
cp Solaris/shutdown.sh shutdown
;;
$HPUX)
cp Hpux/notifier.sh notifier
cp Hpux/shutdown.sh shutdown
;;
$AIX)
cp Aix/notifier.sh notifier
cp Aix/shutdown.sh shutdown
;;
esac
chmod 744 notifier
chmod 744 shutdown
rm -rf Linux Solaris Hpux Aix VIMA ESX XenServer
cd "$APP_DIR"
}
SetupAllCommandFiles() {
cd "$APP_DIR"
if [ -d $GROUP1 ]; then
cd ./$GROUP1/bin
SetupCommandFiles
else
cd ./bin
SetupCommandFiles
fi
cd "$APP_DIR"
}
ConfigureStartup() {
APP_DIR_QUOTED=\"$APP_DIR\"
group_dir_quoted=\"$GROUP_DIR\"
# Update scripts
if [ $OS = "$HPUX" ]; then
sed -e "s:nohup:/bin/nohup:g" powerchute.sh > powerchute.sh.tmp$$
mv -f powerchute.sh.tmp$$ powerchute.sh
fi
sed -e "s:GSUB_INSTALL_PATH:$APP_DIR_QUOTED:g" startup.sh > startup.sh.tmp$$
sed -e "s:GSUB_INSTALL_PATH:$group_dir_quoted:g" powerchute.sh > powerchute.sh.tmp$$
mv -f startup.sh.tmp$$ startup.sh
cp powerchute.sh.tmp$$ $GROUP_DIR/powerchute.sh
chmod 744 $GROUP_DIR/powerchute.sh
rm -f *.tmp$$
echo $JAVA_DIR > ${GROUP_DIR}/java.cfg
}
ConfigureAllStartup() {
Echo "Configuring startup files ..."
cd "$APP_DIR"
if [ -d $GROUP1 ]; then
GROUP_DIR="$APP_DIR/$GROUP1"
ConfigureStartup
rm -f powerchute.sh*
else
GROUP_DIR=$APP_DIR
ConfigureStartup
fi
Echo "Startup script=$STARTUP"
cp startup.sh $STARTUP
chmod 0544 $STARTUP
rm -f startup.sh
}
UninstallOldStartupLink() {
if [ $UPDATE_INSTALL = $TRUE ]; then
if [ $OS = "$LINUX" -o $OS = "$VIMA" -o $OS = "$XENSERVER" ]; then
Echo "Deleting Linux symbolic link ..."
if [ -d /etc/rc0.d ]; then
rm -f /etc/rc0.d/K99PowerChute
rm -f /etc/rc1.d/K99PowerChute
rm -f /etc/rc2.d/K99PowerChute
rm -f /etc/rc3.d/K99PowerChute
rm -f /etc/rc4.d/K99PowerChute
rm -f /etc/rc5.d/K99PowerChute
rm -f /etc/rc6.d/K99PowerChute
else
rm -f /etc/rc.d/rc0.d/*99PowerChute
rm -f /etc/rc.d/rc1.d/*99PowerChute
rm -f /etc/rc.d/rc2.d/*99PowerChute
rm -f /etc/rc.d/rc3.d/*99PowerChute
rm -f /etc/rc.d/rc4.d/*99PowerChute
rm -f /etc/rc.d/rc5.d/*99PowerChute
rm -f /etc/rc.d/rc6.d/*99PowerChute
fi
fi
fi
}
ConfigureStartupLink() {
if [ $OS = "$LINUX" -o $OS = "$VIMA" -o $OS = "$XENSERVER" ]; then
Echo "Updating Linux symbolic link ..."
if [ -f /etc/SuSE-release ]; then
insserv PowerChute 1>/dev/null 2>/dev/null
elif [ -f /sbin/chkconfig ]; then
chkconfig --add PowerChute
chkconfig PowerChute on
elif [ -d /etc/rc0.d ]; then
if [ ! -L /etc/rc0.d/K99PowerChute ]; then
ln -s /etc/init.d/PowerChute /etc/rc0.d/K99PowerChute
fi
if [ ! -L /etc/rc1.d/K99PowerChute ]; then
ln -s /etc/init.d/PowerChute /etc/rc1.d/K99PowerChute
fi
if [ ! -L /etc/rc2.d/S99PowerChute ]; then
ln -s /etc/init.d/PowerChute /etc/rc2.d/S99PowerChute
fi
if [ ! -L /etc/rc3.d/S99PowerChute ]; then
ln -s /etc/init.d/PowerChute /etc/rc3.d/S99PowerChute
fi
if [ ! -L /etc/rc4.d/S99PowerChute ]; then
ln -s /etc/init.d/PowerChute /etc/rc4.d/S99PowerChute
fi
if [ ! -L /etc/rc5.d/S99PowerChute ]; then
ln -s /etc/init.d/PowerChute /etc/rc5.d/S99PowerChute
fi
if [ ! -L /etc/rc6.d/K99PowerChute ]; then
ln -s /etc/init.d/PowerChute /etc/rc6.d/K99PowerChute
fi
else
if [ ! -L /etc/rc.d/rc0.d/K99PowerChute ]; then
ln -s /etc/rc.d/init.d/PowerChute /etc/rc.d/rc0.d/K99PowerChute
fi
if [ ! -L /etc/rc.d/rc1.d/K99PowerChute ]; then
ln -s /etc/rc.d/init.d/PowerChute /etc/rc.d/rc1.d/K99PowerChute
fi
if [ ! -L /etc/rc.d/rc2.d/S99PowerChute ]; then
ln -s /etc/rc.d/init.d/PowerChute /etc/rc.d/rc2.d/S99PowerChute
fi
if [ ! -L /etc/rc.d/rc3.d/S99PowerChute ]; then
ln -s /etc/rc.d/init.d/PowerChute /etc/rc.d/rc3.d/S99PowerChute
fi
if [ ! -L /etc/rc.d/rc4.d/S99PowerChute ]; then
ln -s /etc/rc.d/init.d/PowerChute /etc/rc.d/rc4.d/S99PowerChute
fi
if [ ! -L /etc/rc.d/rc5.d/S99PowerChute ]; then
ln -s /etc/rc.d/init.d/PowerChute /etc/rc.d/rc5.d/S99PowerChute
fi
if [ ! -L /etc/rc.d/rc6.d/K99PowerChute ]; then
ln -s /etc/rc.d/init.d/PowerChute /etc/rc.d/rc6.d/K99PowerChute
fi
fi
else
case "$OS" in
$SOLARIS)
cp $STARTUP /etc/rc0.d/K99PowerChute
;;
$HPUX)
Echo "Updating HP-UX symbolic link ..."
ln -s $STARTUP /sbin/rc1.d/K990pcns
ln -s $STARTUP /sbin/rc2.d/S990pcns
;;
$AIX)
Echo "Updating AIX inittab ..."
mkitab "PCNS:2:wait:$STARTUP start #PowerChute Network Shutdown" >/dev/null 2>&1
;;
esac
fi
}
ConfigureUninstall() {
Echo "Configuring uninstall script ..."
cd "$APP_DIR"
APP_DIR_QUOTED=\"$APP_DIR\"
sed -e "s:GSUB_INSTALL_PATH:$APP_DIR_QUOTED:g" uninstall > uninstall.tmp$$
mv -f uninstall.tmp$$ uninstall
chmod 0544 uninstall
}
ConfigureOwner() {
chown -R root "$APP_DIR"
if [ $OS = "$AIX" ]; then
chgrp -R system $APP_DIR
else
chgrp -R root $APP_DIR
fi
}
RemoveStartup() {
if [ $OS = "$LINUX" -o $OS = "$VIMA" -o $OS = "$XENSERVER" ]; then
if [ -f $STARTUP ]; then
if [ -f /sbin/chkconfig ]; then
chkconfig PowerChute off
chkconfig --del PowerChute
else
rm -f /etc/rc.d/rc1.d/K99PowerChute
rm -f /etc/rc.d/rc2.d/S99PowerChute
rm -f /etc/rc.d/rc3.d/S99PowerChute
rm -f /etc/rc.d/rc4.d/S99PowerChute
rm -f /etc/rc.d/rc5.d/S99PowerChute
rm -f /etc/rc.d/rc6.d/K99PowerChute
fi
rm -f $STARTUP
fi
else
case "$OS" in
$SOLARIS)
rm -f /etc/rc2.d/S99PowerChute
rm -f /etc/rc0.d/K99PowerChute
;;
$HPUX)
if [ -f /sbin/init.d/pcns ]; then
rm -f /sbin/rc1.d/K990pcns
rm -f /sbin/rc2.d/S990pcns
rm -f /sbin/init.d/pcns
fi
;;
$AIX)
if [ -f /etc/rc.APCpcns ]; then
rmitab PCNS
rm -f /etc/rc.APCpcns
fi
;;
esac
fi
}
CancelAll() {
cd "$SRC_DIR"
if [ -n "$INSTALL_DIR" ]; then
if [ -d "$INSTALL_DIR/PowerChute" ]; then
# Fix for PCNS-2463. Perform install rollback if update installation aborts due to some error and rollback to previous configuration
RollBackInstall
else
rm -f "$INSTALL_DIR/$PCNS_TAR*"
fi
fi
Echo ""
Echo "Installation cancelled."
Echo ""
exit $1
}
RollBackInstall() {
if [ $UPDATE_INSTALL = $TRUE ]; then
if [ -d "$INSTALL_DIR/PowerChute_update_backup" ]; then
echo "Performing Install Rollback"
rm -rf "$INSTALL_DIR/PowerChute"
mv "$INSTALL_DIR/PowerChute_update_backup/" "$INSTALL_DIR/PowerChute"
Echo "Startup script=$STARTUP"
$STARTUP start
else
rm -rf "$INSTALL_DIR/PowerChute"
RemoveStartup
fi
else
rm -rf "$INSTALL_DIR/PowerChute"
RemoveStartup
fi
}
ConfigureFirewall(){
if [ -f /usr/sbin/esxcfg-firewall ]; then
esxcfg-firewall -o 80,tcp,out,"APC PowerChute Port 80"
esxcfg-firewall -o 3052,tcp,out,"APC PowerChute Port 3052"
esxcfg-firewall -o 3052,tcp,in,"APC PowerChute Port 3052"
esxcfg-firewall -o 3052,udp,out,"APC PowerChute Port 3052"
esxcfg-firewall -o 3052,udp,in,"APC PowerChute Port 3052"
esxcfg-firewall -o 6547,tcp,in,"APC PowerChute Port 6547"
else
if [ -f /sbin/iptables ] || [ -f /usr/sbin/iptables ]; then
iptables -I OUTPUT -p tcp --sport 80 -j ACCEPT
iptables -I OUTPUT -p tcp --sport 3052 -j ACCEPT
iptables -I INPUT -p tcp --dport 3052 -j ACCEPT
iptables -I OUTPUT -p udp --sport 3052 -j ACCEPT
iptables -I INPUT -p udp --dport 3052 -j ACCEPT
iptables -I INPUT -p tcp --dport 6547 -j ACCEPT
service iptables save
fi
if [ -f /sbin/ip6tables ] || [ -f /usr/sbin/ip6tables ]; then
ip6tables -I OUTPUT -p tcp --sport 80 -j ACCEPT
ip6tables -I OUTPUT -p tcp --sport 3052 -j ACCEPT
ip6tables -I INPUT -p tcp --dport 3052 -j ACCEPT
ip6tables -I OUTPUT -p udp --sport 3052 -j ACCEPT
ip6tables -I INPUT -p udp --dport 3052 -j ACCEPT
ip6tables -I INPUT -p tcp --dport 6547 -j ACCEPT
service ip6tables save
fi
fi
}
DisplayEULA(){
# Default to english license
EULA="apclicense.txt"
Echo "$LANG" | grep -i 'ja_JP.utf-*8'
if [ $? -eq 0 ]; then
EULA="apclicense.txt.ja_UTF8"
fi
Echo "$LANG" | grep -i 'ja_JP.IBM-*943'
if [ $? -eq 0 ]; then
EULA="apclicense.txt.ja_ANSI"
fi
Echo "$LANG" | grep -i 'eucJP'
if [ $? -eq 0 ]; then
EULA="apclicense.txt.ja_EUC"
fi
# Extract EULA
cp $PCNS_ZIP backup.tar.gz
gunzip $PCNS_ZIP
tar -xof $PCNS_TAR > /dev/null 2>&1
# Display EULA
printf "\nPress any key to display End User License Agreement\n"
Pause
more "PowerChute/group1/$EULA"
# Remove file, now that we've read it.
rm -rf PowerChute > /dev/null 2>&1
rm -rf $PCNS_TAR > /dev/null 2>&1
mv backup.tar.gz $PCNS_ZIP > /dev/null 2>&1
agreed=
while [ -z "$agreed" ]
do
printf "\nDo you agree to the above license terms? [yes or no]\n"
read reply leftover
case $reply in
[yY] | [yY][eE][sS])
agreed=1
;;
[nN] | [nN][oO])
printf "If you don't agree to the license you can't install this software\n"
printf "Aborting with error code-$EXIT_USER_ABORT\n"
exit $EXIT_USER_ABORT
;;
*)
printf "Please enter \"yes\" or \"no\"."
;;
esac
done
}
AddESXiTargetServer() {
if [ -f /etc/vima-release ] || [ -f /etc/vma-release ]; then
echo " "
echo "In order for PCNS to shutdown the ESXi host, it must be added as a target server."
# validIP:
# 0 - IP is valid
# 1 - IP is invalid
# 2 - User is skipping this
validIP=1
while [ $validIP -eq 1 ]
do
echo "Please enter ESXi host IP (XXX.XXX.XXX.XXX) or (q) to skip:"
read esxihostip
case $esxihostip in
[qQ])
validIP=2
printf "\nSkipping configuration of ESXi Host Shutdown.\n"
;;
esac
if [ $validIP -ne 2 ]; then
#
# Validate IP
#
valid_ip $esxihostip
if [ $? -ne 0 ]; then
# invalid ip
printf "\nInvalid IP entered.\n"
validIP=1
else
validIP=0
fi
fi
done
if [ $validIP -eq 0 ]; then
echo "Please enter ESXi host username:"
read esxihostuser
echo "Please enter ESXi host password:"
OLDCONFIG=`stty -g`
stty -icanon -echo min 1 time 0
read esxihostpwd
stty $OLDCONFIG
echo "Adding target server..."
vifp addserver $esxihostip --username $esxihostuser --password $esxihostpwd
vifp listservers | grep $esxihostip
if [ $? -eq 0 ]; then
echo "Successfully added ESXi host to target server list."
echo ""
else
echo "Failed to add ESXi host."
echo "To add the host manually please run - sudo vifp addserver <ipaddress>"
echo ""
fi
fi
fi
}
valid_ip()
{
ERROR=0
oldIFS=$IFS
IFS=.
set -f
set -- $1
if [ $# -eq 4 ]; then
for seg
do
case $seg in
""|*[!0-9]*) ERROR=1;break ;; ## Segment empty or non-numeric char
*) [ $seg -gt 255 ] && ERROR=2 ;;
esac
done
else
ERROR=3 ## Not 4 segments
fi
IFS=$oldIFS
set +f
return $ERROR
}
CheckLocale(){
Echo "$LANG" | grep -i 'ja*'
if [ $? -eq 0 ]; then
# Abort, can't install english on Japanese OS.
printf "\nThis version of PowerChute Network Shutdown does not support the Japanese language. Please consult www.apc.com for the required version of PowerChute Network Shutdown.\n"
Echo "Aborting with error code-$EXIT_INVALID_LOCALE"
exit $EXIT_INVALID_LOCALE
fi
}
ApplySilentConfig(){
if [ "$SILENT_MODE" = "$TRUE" ]; then
Echo "Applying Configuration ..."
# Register with NMC
oldDir=$PWD
cd $APP_DIR/$GROUP1
upgrade="false"
if [ "$UPDATE_INSTALL" = "$TRUE" ]; then
upgrade="true"
fi
javaParams="-Xms32m -Xmx64m -cp .:comp/pcns.jar:lib/m11.jar:lib/commons-codec-1.4.jar:lib/commons-collections-3.2.1.jar:lib/commons-configuration-1.6.jar:lib/commons-lang-2.5.jar:lib/commons-logging-1.1.1.jar:lib/log4j-1.2.16.jar:lib/bcprov-jdk16-146.jar:lib/json_simple-1.1.jar -DsilentConfig=$SILENT_CONFIG -DsourceDir=\"$SRC_DIR\" -DapplicationDirectory=\"$APP_DIR\" -Dgroup=1 -Dupgrade=$upgrade com.apcc.pcns.silentconfig.SilentConfig"
echo ${JAVA_DIR}java $javaParams 2>/dev/null > $APP_DIR/$GROUP1/run.sh
chmod +x $APP_DIR/$GROUP1/run.sh
$APP_DIR/$GROUP1/run.sh
code=$?
rm -f $APP_DIR/$GROUP1/run.sh
if [ $code -ne 0 ]; then
Echo "Error applying configuration. Error code is: $code"
CancelAll $code
fi
Echo "Configuration complete."
cd $oldDir
fi
}
InstallHelp() {
# Copy Standard Help files
HELP_DIR="$INSTALL_DIR/PowerChute/group1/comp/http/html/Help"
mv $HELP_DIR/Standard/* $HELP_DIR/.
rmdir $HELP_DIR/Standard 1>/dev/null 2>/dev/null
rm -rf $HELP_DIR/VMware/* 1>/dev/null 2>/dev/null
rmdir $HELP_DIR/VMware 1>/dev/null 2>/dev/null
}
InstallComplete(){
NODE_NAME=`uname -n`
Echo ""
Echo "Installation has completed."
Echo "PowerChute Network Shutdown can be accessed through your browser at https://<your_server_ip_address>:6547"
if [ $UPDATE_INSTALL = $FALSE ]; then
Echo "Please complete the configuration wizard so that PowerChute Network Shutdown can protect your server."
fi
Echo ""
}
######################################################################
# Main routine
######################################################################
SRC_DIR=`pwd`
# Check zipped install file
if [ ! -f $PCNS_ZIP ]; then
Echo "Can\'t find $PCNS_ZIP"
Echo "Aborting with error code-$EXIT_ZIPFILE_MISSING\n"
exit $EXIT_ZIPFILE_MISSING
fi
# Print Banner
Echo "------------------------------------------------------------------"
Echo " PowerChute Network Shutdown 3.1.0 for Linux"
Echo " Copyright (c) 1999-2013 Schneider Electric."
Echo " All Rights Reserved."
Echo "------------------------------------------------------------------"
Echo ""
# Check OS type
CheckOS
# Check root account
IsRootUser
# Check Locale Compatibility
CheckLocale
# Check the OS architecture
CheckOSArch
# Initialize
Initialize
# Check silent install
if [ -z "$1" ]; then
SILENT_MODE=$FALSE
elif [ "$1" = "-f" ]; then
if [ -r "$2" ]; then
SILENT_MODE=$TRUE
SILENT_CONFIG=$2
Echo "Silent mode input from $SILENT_CONFIG"
Echo ""
SetSilentConfig
else
Echo "Aborting with error code-$EXIT_SILENT_CONFIG_MISSING"
Echo "Error: Invalid file $2"
exit $EXIT_SILENT_CONFIG_MISSING
fi
else
PrintUsage
fi
# Show EULA
if [ $SILENT_MODE = $TRUE ]; then
if [ "$ACCEPT_EULA" = "$STR_YES" ]; then
Echo "EULA has been accepted"
else
Echo "Aborting with error code-$EXIT_EULA_NOT_ACCEPTED"
Echo "Error: EULA must be accepted by setting ACCEPT_EULA=$STR_YES in config file"
exit $EXIT_EULA_NOT_ACCEPTED
fi
else
DisplayEULA
fi
# Check installed applications
IsPCPlusInstalled
IsPCBEInstalled
IsPCSInstalled
IsPCNSInstalled
InitUpdate
# Set Install dir
SetInstallDir
BackupOldPCNS
APP_DIR="$INSTALL_DIR/PowerChute"
#Check the dependent packages to install java in 64 bit arch
# Setup java
SetupJava
# Copy tar file to install dir
Echo "Copying the installation files ..."
cp "$PCNS_ZIP" "$INSTALL_DIR"
cd "$INSTALL_DIR"
# Extract PCNS files
Echo "Extracting PCNS files ..."
gunzip $PCNS_ZIP
tar -xf $PCNS_TAR > /dev/null 2>&1
if [ ! $? = 0 ]
then
Echo "Failed to extract files"
fi
rm -rf $PCNS_TAR
cd "$APP_DIR"
Echo "PCNS is extracted to $APP_DIR"
# Setup script files
SetupAllCommandFiles
# Configure startup script
ConfigureAllStartup
UninstallOldStartupLink
ConfigureStartupLink
# Fix for PCNS-2453. Multiple entries in 'iptables' on installing PCNS over existing install
if [ $OS = $VIMA ] || [ $OS = $LINUX ]; then
service iptables status 1>/dev/null 2>/dev/null
OUT=$?
if [ $OUT -eq 0 ] && [ $UPDATE_INSTALL = $FALSE ]; then
ConfigureFirewall
fi
else
ConfigureFirewall
fi
# Configure uninstall script
ConfigureUninstall
ConfigureOwner
# For Update install
CopyUpdateFiles
#Install Help
InstallHelp
# Start the Service
SetupM11Cfg
ApplySilentConfig
# Fix for PCNS-2463. Delete the back up PowerChute folder once the update is done successfully.
UninstallOldPCNS
$STARTUP start
InstallComplete
cd "$SRC_DIR"
exit $EXIT_SUCCESS