286 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			286 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash 
 | 
						|
#README################################################################
 | 
						|
# (1)Check you have  LSF installer script package and  LSF distribution packages. e.g. "lsf9.1.3_lsfinstall.tar.Z" and "lsf9.1.3_lnx26-lib23-ppc64le.tar.Z"
 | 
						|
# (2)Get LSF entitlement file for the edition you are installing. e.g. "platform_lsf_std_entitlement.dat"
 | 
						|
# (3)Prepare a install.config file, install.config should be in the same directory with install_lsf and lsf_startup scripts.
 | 
						|
# The format of install.config file
 | 
						|
# cat install.config
 | 
						|
# LSF_TOP=""
 | 
						|
# LSF_ADMINS=""
 | 
						|
# LSF_CLUSTER_NAME=""
 | 
						|
# LSF_MASTER_LIST=""
 | 
						|
# LSF_ENTITLEMENT_FILE="NEED A FULL PATH OF THE FILE"
 | 
						|
# LSF_TARDIR=""
 | 
						|
# (4)Run this script on one compute node,you can also use "updatenode <nodename> -P install_lsf" to execute this script on one compute node
 | 
						|
#   (It's not necessary to run it on each compute node).
 | 
						|
# 
 | 
						|
# NOTE for install.config:
 | 
						|
# -----------------
 | 
						|
# LSF_TOP="/usr/share/lsf"
 | 
						|
# -----------------
 | 
						|
# Full path to the top-level installation directory {REQUIRED}
 | 
						|
#
 | 
						|
# The path to LSF_TOP must be shared and accessible to all hosts
 | 
						|
# in the cluster. It cannot be the root directory (/).
 | 
						|
# The file system containing LSF_TOP must have enough disk space for
 | 
						|
# all host types (approximately 300 MB per host type).
 | 
						|
 | 
						|
# -----------------
 | 
						|
# LSF_ADMINS="lsfadmin user1 user2"
 | 
						|
# -----------------
 | 
						|
# List of LSF administrators {REQUIRED}
 | 
						|
#
 | 
						|
# The first user account name in the list is the primary LSF
 | 
						|
# administrator. It cannot be the root user account.
 | 
						|
# Typically, this account is named lsfadmin.
 | 
						|
# It owns the LSF configuration files and log files for job events.
 | 
						|
# It also has permission to reconfigure LSF and to control batch
 | 
						|
# jobs submitted by other users. It typically does not have
 | 
						|
# authority to start LSF daemons. Usually, only root has
 | 
						|
# permission to start LSF daemons.
 | 
						|
# All the LSF administrator accounts must exist on all hosts in the
 | 
						|
# cluster before you install LSF.
 | 
						|
# Secondary LSF administrators are optional.
 | 
						|
#
 | 
						|
# -----------------
 | 
						|
# LSF_CLUSTER_NAME="cluster1"
 | 
						|
# -----------------
 | 
						|
# Name of the LSF cluster {REQUIRED}
 | 
						|
#
 | 
						|
# It must be 39 characters or less, and cannot contain any
 | 
						|
# white spaces. Do not use the name of any host, user, or user group
 | 
						|
# as the name of your cluster.
 | 
						|
#
 | 
						|
# -----------------
 | 
						|
# LSF_MASTER_LIST="hostm hosta hostc"
 | 
						|
# -----------------
 | 
						|
# List of LSF server hosts to be master or master candidate in the
 | 
						|
# cluster {REQUIRED when you install for the first time or during
 | 
						|
# upgrade if the parameter does not already exist.}
 | 
						|
#
 | 
						|
# You must specify at least one valid server host to start the
 | 
						|
# cluster. The first host listed is the LSF master host.
 | 
						|
#
 | 
						|
# -----------------
 | 
						|
# LSF_ENTITLEMENT_FILE="/usr/share/lsf/lsf_distrib/platform_lsf_std_entitlement.dat"
 | 
						|
# -----------------
 | 
						|
# You must specify a full path to the LSF entitlement file.
 | 
						|
#
 | 
						|
# -----------------
 | 
						|
# LSF_TARDIR="/usr/share/lsf_distrib/"
 | 
						|
# -----------------
 | 
						|
# Full path to the directory containing the LSF distribution tar files.
 | 
						|
#
 | 
						|
# Default: Parent directory of the current working directory.
 | 
						|
#          For example, if lsfinstall is running under
 | 
						|
#          /usr/share/lsf_distrib/lsf_lsfinstall
 | 
						|
#          the LSF_TARDIR default value is
 | 
						|
#          /usr/share/lsf_distrib
 | 
						|
# -----------------
 | 
						|
# LSF_ADD_SERVERS="hostm hosta hostb hostc"
 | 
						|
# -----------------
 | 
						|
# List of additional LSF server hosts
 | 
						|
#
 | 
						|
# The hosts in LSF_MASTER_LIST are always LSF servers. You can specify
 | 
						|
# additional server hosts.
 | 
						|
#README################################################################
 | 
						|
 | 
						|
 | 
						|
INSTALL_CONFIG_FILE=`pwd`/install.config
 | 
						|
#LSF_INSTALL_FILE_PATH=""
 | 
						|
#LSF_GLIBC_FILE_PATH=""
 | 
						|
 | 
						|
 | 
						|
 | 
						|
function is_parameter_set()
 | 
						|
{
 | 
						|
PARA=$1
 | 
						|
IF_SET=`grep $PARA $INSTALL_CONFIG_FILE`
 | 
						|
 | 
						|
if [[ -z $IF_SET ]] ; then
 | 
						|
	if [[ $PARA == "LSF_SILENT_INSTALL_TARLIST" ]]; then
 | 
						|
		echo "$PARA="all"" >> $INSTALL_CONFIG_FILE
 | 
						|
 	elif [[ $PARA == "LSF_DYNAMIC_HOST_WAIT_TIME" ]]; then
 | 
						|
		echo "$PARA="60"" >> $INSTALL_CONFIG_FILE	
 | 
						|
	else
 | 
						|
		echo "$PARA="Y"" >> $INSTALL_CONFIG_FILE
 | 
						|
	fi
 | 
						|
	echo "INFO: Set a recommended value for $PARA"
 | 
						|
fi
 | 
						|
return 0
 | 
						|
}
 | 
						|
 | 
						|
#verify if install.config exists
 | 
						|
if [[ ! -f ${INSTALL_CONFIG_FILE} ]]; then
 | 
						|
	echo "ERROR: $INSTALL_CONFIG_FILE not found"
 | 
						|
	exit 1
 | 
						|
fi
 | 
						|
 | 
						|
. $INSTALL_CONFIG_FILE
 | 
						|
cat $INSTALL_CONFIG_FILE
 | 
						|
#verify if the required parameters are valid in install.config
 | 
						|
 | 
						|
 | 
						|
if [[ ! -d $LSF_TOP ]]; then
 | 
						|
	echo "ERROR: No such directory $LSF_TOP. Check LSF_TOP in install.config"
 | 
						|
	exit 1
 | 
						|
fi
 | 
						|
 | 
						|
if [[ x$LSF_ADMINS == x ]]; then
 | 
						|
	echo "ERROR: You must specify LSF_ADMINS in install.config"
 | 
						|
	exit 1
 | 
						|
fi
 | 
						|
 | 
						|
for USERID in ${LSF_ADMINS} ; do
 | 
						|
	RTC=`id $USERID`
 | 
						|
	RTC=$?
 | 
						|
	if [[ $RTC -ne 0 ]] ; then
 | 
						|
		echo "ERROR: No such user id $USERID on the node. Check LSF_ADMINS in install.config"
 | 
						|
		exit 1
 | 
						|
	fi
 | 
						|
done
 | 
						|
 | 
						|
if [[ x$LSF_CLUSTER_NAME == x ]]; then
 | 
						|
	echo "ERROR: You must specify LSF_CLUSTER_NAME in install.config"
 | 
						|
	exit 1
 | 
						|
fi
 | 
						|
 | 
						|
if [[ x$LSF_MASTER_LIST == x ]]; then
 | 
						|
	echo "ERROR: You must specify LSF_MASTER_LIST in install.config"
 | 
						|
	exit 1
 | 
						|
fi
 | 
						|
 | 
						|
for MASTER_NODE in $LSF_MASTER_LIST ; do
 | 
						|
	RTC=`ssh $MASTER_NODE uptime`
 | 
						|
	RTC=$?
 | 
						|
	if [[ $RTC -ne 0 ]] ; then
 | 
						|
		echo "ERROR: MASTER_NODE $MASTER_NODE is not reachable. Check LSF_MASTER_LIST in install.config"
 | 
						|
		exit 1
 | 
						|
	fi
 | 
						|
done
 | 
						|
 | 
						|
if [[ ! -r ${LSF_ENTITLEMENT_FILE} || -d ${LSF_ENTITLEMENT_FILE} ]]; then
 | 
						|
	echo "ERROR: No such entitlement file $LSF_ENTITLEMENT_FILE. Check LSF_ENTITLEMENT_FILE in install.config"
 | 
						|
	exit 1
 | 
						|
fi
 | 
						|
 | 
						|
#CH_TMP=`expr "$LSF_ENTITLEMENT_FILE" : '\(.\).*'`
 | 
						|
#if [[ "$CH_TMP" != "/" ]]; then
 | 
						|
#	echo "Set LSF_ENTITLEMENT_FILE a full path but not relative path"
 | 
						|
#	return 1
 | 
						|
#fi
 | 
						|
 | 
						|
if [[ ! -d $LSF_TARDIR ]]; then
 | 
						|
        echo "ERROR: No such directory $LSF_TARDIR. Check LSF_TARDIR in install.config"
 | 
						|
        exit 1
 | 
						|
fi
 | 
						|
 | 
						|
if [[ x$LSF_INSTALL_FILE_PATH != x ]]; then
 | 
						|
	if [[ -r ${LSF_INSTALL_FILE_PATH} ]] && [[ ! -d ${LSF_INSTALL_FILE_PATH} ]]; then
 | 
						|
		:
 | 
						|
	else
 | 
						|
        	echo "ERROR: No such lsf install tar file $LSF_INSTALL_FILE_PATH. Check LSF_INSTALL_FILE_PATH in install.config"
 | 
						|
        	exit 1
 | 
						|
	fi
 | 
						|
else
 | 
						|
	LSF_INSTALL_FILE_PATH=`find $LSF_TARDIR -name 'lsf*lsfinstall*tar.Z'`
 | 
						|
	count=`echo $LSF_INSTALL_FILE_PATH |wc -w`
 | 
						|
	if [[ $count -gt 1 ]]; then
 | 
						|
		echo "ERROR: There are more than one lsfinstall tar file. You need to specify LSF_INSTALL_FILE_PATH in install.config or remove other useless lsfinstall TAR files in LSF_TARDIR $LSF_TARDIR."
 | 
						|
		exit 1
 | 
						|
	elif [[ $count -eq 1 ]]; then
 | 
						|
	 :
 | 
						|
	else 
 | 
						|
		echo "ERROR: lsfinstall TAR file not found in LSF_TARDIR $LSF_TARDIR."
 | 
						|
		exit 1
 | 
						|
	fi
 | 
						|
fi
 | 
						|
 | 
						|
echo "INFO: We will untar the lsfinstall TAR file $LSF_INSTALL_FILE_PATH."
 | 
						|
 | 
						|
	
 | 
						|
for SERVER_NODE in $LSF_ADD_SERVERS ; do
 | 
						|
	RTC=`ssh $SERVER_NODE uptime`
 | 
						|
	RTC=$?
 | 
						|
	if [[ $RTC -ne 0 ]] ; then
 | 
						|
		echo "ERROR: SERVER_NODE $SERVER_NODE is not reachable. Check LSF_ADD_SERVERS in install.config"
 | 
						|
		exit 1
 | 
						|
        fi
 | 
						|
done
 | 
						|
#Check if we set following parameters in install.config; if not, set them a recommended value.
 | 
						|
#ENABLE_DYNAMIC_HOSTS="Y"
 | 
						|
##LSF_DYNAMIC_HOST_WAIT_TIME="60"
 | 
						|
#ENABLE_HPC_CONFIG="Y"
 | 
						|
#SILENT_INSTALL="Y"
 | 
						|
#LSF_SILENT_INSTALL_TARLIST="all"
 | 
						|
 | 
						|
 | 
						|
is_parameter_set "ENABLE_DYNAMIC_HOSTS"
 | 
						|
is_parameter_set "LSF_DYNAMIC_HOST_WAIT_TIME"
 | 
						|
is_parameter_set "ENABLE_HPC_CONFIG"
 | 
						|
is_parameter_set "SILENT_INSTALL"
 | 
						|
is_parameter_set "LSF_SILENT_INSTALL_TARLIST"
 | 
						|
 | 
						|
 | 
						|
#Extract lsfinstall package 
 | 
						|
cd $LSF_TARDIR
 | 
						|
LSF_INSTALL_PACKAGE=`basename $LSF_INSTALL_FILE_PATH`
 | 
						|
zcat $LSF_INSTALL_PACKAGE | tar xvf -
 | 
						|
RTC=$?
 | 
						|
if [[ $RTC -ne 0 ]] ; then
 | 
						|
	echo "ERROR: Fail to extract LSF_INSTALL_PACKAGE $LSF_INSTALL_PACKAGE."
 | 
						|
	exit 1
 | 
						|
fi
 | 
						|
 | 
						|
#INSTALL LSF on the node
 | 
						|
 | 
						|
cd $LSF_TARDIR/lsf*lsfinstall
 | 
						|
 | 
						|
INSTALL_LOG="Install.log"
 | 
						|
#backup Install.log if there is one before installing
 | 
						|
if [[ -r $INSTALL_LOG ]]; then
 | 
						|
	mv $INSTALL_LOG `date "+%Y.%m.%d-%H:%M"`_$INSTALL_LOG
 | 
						|
fi
 | 
						|
 | 
						|
./lsfinstall -f $INSTALL_CONFIG_FILE
 | 
						|
RTC=$?
 | 
						|
IF_INSTALL_DONE=`grep "lsfinstall is done" $INSTALL_LOG`
 | 
						|
 | 
						|
if [[ $RTC -ne 0 || -z $IF_INSTALL_DONE ]] ; then
 | 
						|
         echo "ERROR: Fail to install LSF. Check Install.log and Install.err in `pwd`."
 | 
						|
	 exit 1
 | 
						|
fi
 | 
						|
 | 
						|
echo "INFO: Installation script DONE."
 | 
						|
 | 
						|
LSF_VERSION=`echo $LSF_INSTALL_PACKAGE |cut -c4-6`
 | 
						|
if [[ `echo "$LSF_VERSION >= 9.1"|bc` -eq 1 ]]
 | 
						|
then
 | 
						|
 | 
						|
#Start configuration. Update configuration files lsf.conf,lsf.hosts.
 | 
						|
 | 
						|
echo "INFO: Updating LSF Cluster Configuration Files lsf.conf and lsb.hosts"
 | 
						|
 | 
						|
LSF_CONF_FILE="$LSF_TOP/conf/lsf.conf"
 | 
						|
echo "LSF_RSH=ssh" >> $LSF_CONF_FILE
 | 
						|
echo "LSF_PE_NETWORK_NUM=2" >> $LSF_CONF_FILE
 | 
						|
echo "LSF_PE_NETWORK_UPDATE_INTERVAL=6" >> $LSF_CONF_FILE
 | 
						|
echo "EGO_DEFINE_NCPUS=threads" >> $LSF_CONF_FILE
 | 
						|
echo "LSF_HPC_EXTENSIONS="CUMULATIVE_RUSAGE"">> $LSF_CONF_FILE
 | 
						|
 | 
						|
LSB_HOSTS_FILE="$LSF_TOP/conf/lsbatch/$LSF_CLUSTER_NAME/configdir/lsb.hosts" 
 | 
						|
LSB_HOSTS_FILE_ORIG="$LSF_TOP/conf/lsbatch/$LSF_CLUSTER_NAME/configdir/lsb.hosts.orig"
 | 
						|
mv $LSB_HOSTS_FILE $LSB_HOSTS_FILE_ORIG
 | 
						|
 | 
						|
PRIMARY_MASTER_NODE=`echo $LSF_MASTER_LIST |  awk '{print $1}'`
 | 
						|
echo "Begin Host" >> lsb.hosts
 | 
						|
echo "HOST_NAME MXJ   r1m     pg    ls    tmp  DISPATCH_WINDOW  AFFINITY" >> $LSB_HOSTS_FILE
 | 
						|
echo "default	!	()	()	()	()	()	(Y)" >> $LSB_HOSTS_FILE
 | 
						|
echo "$PRIMARY_MASTER_NODE	0	()	()	()	()	()    (Y)" >> $LSB_HOSTS_FILE
 | 
						|
echo "End Host" >> $LSB_HOSTS_FILE
 | 
						|
echo "Begin HostGroup" >> $LSB_HOSTS_FILE
 | 
						|
echo "GROUP_NAME    GROUP_MEMBER" >> $LSB_HOSTS_FILE
 | 
						|
echo "End HostGroup" >> $LSB_HOSTS_FILE 
 | 
						|
 | 
						|
fi
 |