Sophie

Sophie

distrib > Mandriva > 10.2 > x86_64 > by-pkgid > ff3ee324c0567e1c25614ef618e7dd7f > files > 31

clusterautosetup-2.1-5mdk.src.rpm

#!/bin/bash
# version 3.3.4 
# plz report error : clic-dev-public@mandrakesoft.com
#

###########################################
# set variables
###########################################
WORK_DIR="/root/tmp"
##########################

CONFFILE="/etc/clusterserver.conf"
if  [ ! -f ${CONFFILE} ]; then 
echo "Cant find ${CONFFILE} !"
exit 1
fi
. ${CONFFILE}

# check workdir directory
check_workdir() {
if [ -z ${WORK_DIR} ]; then
       echo "Be carefull WORK_DIR has not been set"
       exit 1
fi
										
if [ ! -d "${WORK_DIR}" ]; then
        mkdir ${WORK_DIR}
fi
}

# cleaning old keys
clean_key() {
echo " - Cleaning keys"
rm -rf ${WORK_DIR}/*
}

###################################################################################
# check existence of ~/.ssh directory
###################################################################################
check_sshdir() {
echo " - Checking ssh dir for user"
if [ ! -d ${USER_SSH_DIR} ]; then
	mkdir ${USER_SSH_DIR}
fi
}

###################################################################################
# copying latest config in tftpserver dir 
###################################################################################
update_tftpdir() {
echo " - Updating ${TFTPDIR} files"
cp -f ${WORK_DIR}/${MPI_COMPUTER} ${TFTPDIR}/${MPI_COMPUTER}
cp -f ${WORK_DIR}/${KEY_AUTH} ${TFTPDIR}/${KEY_AUTH}
cp -f ${WORK_DIR}/${KEY_SSH_PUB} ${TFTPDIR}/${KEY_SSH_PUB}
cp -f ${WORK_DIR}/${LAM_NODE} ${TFTPDIR}/${LAM_NODE}
cp -f $INSTALLDIR/Mandrake/base/${RESCUE2} ${TFTPDIR}
echo $NTPSERVER > ${TFTPDIR}/$NTPFILE
}


###################################################################################
# copy existing key in Work dir
###################################################################################
cp_in_workdir() {
echo " - Copying file in ${WORK_DIR}"
cp -f ${MPICH_DIR}/${MPI_COMPUTER} ${WORK_DIR}/${MPI_COMPUTER}
cp -f ${LAM_NODES_FILE} ${WORK_DIR}/${LAM_NODE}
}


###################################################################################
# copying key in their normal dir
###################################################################################
cp_in_gooddir() {
echo " - Copying file in normal dir"
cp -f ${WORK_DIR}/${MPI_COMPUTER} ${MPICH_DIR}/${MPI_COMPUTER}
cp -f ${WORK_DIR}/${KEY_AUTH} /etc/${KEY_AUTH}
cp -f ${WORK_DIR}/auth_priv.pem /etc/auth_priv.pem
cp -f ${WORK_DIR}/${KEY_SSH_PUB} ${USER_SSH_DIR}/${KEY_SSH_PUB}
cp -f ${WORK_DIR}/${KEY_SSH} ${USER_SSH_DIR}/${KEY_SSH}
}

###################################################################################
# removing some anoying service on a server node
###################################################################################
service_adjust() {

chkconfig_stop() {
chkconfig --level 2345 $1 off
}

stop_service() {
CHECK_SERVICE_STAT=`pidof ${1}`
if [ ! -z "${CHECK_SERVICE_STAT}" ]; then
        echo "- stoping ${1} service:"
        ${INITRD}/${1} stop
fi
}

check_service() {
if [ -f ${INITRD}/${1} ]; then
	stop_service ${1}
	chkconfig_stop ${1}
fi
}

# stopping started anoying services
check_service alsa
check_service anacron
check_service linuxconf
check_service netfs
check_service atd
# check_service crond
check_service kheader
check_service rawdevices
check_service partmon
check_service sound
check_service numlock
check_service usb
check_service usbd
check_service kudzu
check_service harddrake
}

###################################################################################
# generate user ssh key
###################################################################################
generate_ssh_key() {
check_sshdir
echo " - Generating New ssh key"
/usr/bin/ssh-keygen -t dsa -f ${WORK_DIR}/${KEY_SSH} -N "" -q
# /usr/bin/ssh-keygen -t rsa -f ${WORK_DIR}/id_rsa -N ""
}


###################################################################################
# generate authd key
###################################################################################
generate_newauth() {
echo " - Generating New auth key"
openssl genrsa -rand /proc/urandom -out ${WORK_DIR}/auth_priv.pem
openssl rsa -in ${WORK_DIR}/auth_priv.pem -pubout -out ${WORK_DIR}/${KEY_AUTH}
}


###################################################################################
# active rsh service
###################################################################################
activrsh() {
RSHXINETD="/etc/xinetd.d/rsh"
if [ ! -z ${RSHXINETD} ]; then
echo " - RSH enable" 
perl -pi -e 's/disable.*/disable \= no/' ${RSHXINETD}
service xinetd restart 
fi

}

gennodelist() {
echo " - Generating node list"
ISNUM=
while [ -z $ISNUM ]; do
	echo " How many nodes will be available ?"	
	read NUM_NODES
	ISNUM=$(echo $NUM_NODES | perl -ne 'print "yes\n" if /^\d+$/')
done

if [ $NUM_NODES -lt 1 ]; then
echo "!!!!!!!! ERROR !!!!!!!"
echo "You must have more than 0 nodes :-)"
exit 1
fi

if [ $NUM_NODES -gt $FINISHNODE ]; then
echo "!!!!!!!! ERROR !!!!!!!"
echo "You have more than $FINISHNODE nodes as specified in FINISHNODE."
echo "Check your /etc/clusterserver.conf"
exit 1
fi

if [ -f $NODESFILE ]; then
mv $NODESFILE $NODESFILE.$DATE
fi

ALL_NODES=`echo $((${STARTNODE}+${NUM_NODES}-1))`
for i in `seq $STARTNODE $ALL_NODES`; do
	echo ${NODENAME}${i}.$DOMAINNAME >> $NODESFILE
done

cp -f $NODESFILE $NODESFILE.orig
}

setup_ganglia(){
if [ ! -f "$GMETAD_SOURCES" ]; then
	echo " - Gmetad seems to be not installed, exiting !!!!!"
	exit
fi
echo " - Setting basic conf for GMETAD"
GMETA="CLIC"
DEFAULT="data_source \"$GMETA\" 127.0.0.1 $IPSERVER:8649"

if [ `grep $GMETA $GMETAD_SOURCES | wc -l` -eq 0 ]; then
	echo $DEFAULT >> $GMETAD_SOURCES
else
	perl -pi -e "s|cluster_source \"$GMETA\".*|$DEFAULT|" $GMETAD_SOURCES
fi

grep -vi ^# /etc/gmond.conf | grep name || echo name  \"$GMETA\" >> /etc/gmond.conf

}


basicClusterit(){
if [ ! -f $NODESFILE ]; then
        echo " - There is no nodesfile, exiting !!!!"
        exit
fi

echo " - Setting basic conf for Clusterit"
PROFILE=/etc/profile
CLUSTERVALUE="$NODESFILE"
RCMD_CMDVALUE="/usr/bin/ssh"
RCP_CMDVALUE="/usr/bin/scp"
TEST_VAR_CLUSTER=`grep  CLUSTER $PROFILE`
if [ -z "$TEST_VAR_CLUSTER" ]; then
        echo "export CLUSTER=$CLUSTERVALUE" >> $PROFILE
        echo "export RCMD_CMD=$RCMD_CMDVALUE" >> $PROFILE
        echo "export RCP_CMD=$RCP_CMDVALUE" >> $PROFILE
        else
        perl -pi -e "s|export CLUSTER.*|export CLUSTER\=$CLUSTERVALUE|" $PROFILE
        perl -pi -e "s|export RCMD_CMD.*|export RCMD_CMD\=$RCMD_CMDVALUE|" $PROFILE
        perl -pi -e "s|export RCP_CMD.*|export RCP_CMD\=$RCP_CMDVALUE|" $PROFILE
fi
}
									
set_distcc() {
PROFILE=/etc/profile
TEST_VAR_DISTCC=`grep  DISTCC_HOSTS $PROFILE`
if [ -z "$TEST_VAR_DISTCC" ]; then
        echo "export DISTCC_HOSTS=\$GEXEC_SVRS" >> $PROFILE
fi
}

basic(){
set_distcc
basicClusterit
/usr/bin/set_list_node
echo " - Please relog to set your ENV for clusterit, gexec, pcp and ka"
}

save_dir() {
if [ ! -d ${REP_SAVE} ]; then
	mkdir -p ${REP_SAVE}
	chmod 777 ${REP_SAVE}
fi
}

short_doc() {
echo " - Link to doc"
cp -af /var/install/clic/doc/clic /var/www/html/clicdoc
chown -R apache.apache /var/www/html/clicdoc
cp -af /var/install/clic/doc/pxe /var/www/html/pxe
chown -R apache.apache /var/www/html/pxe
perl -pi -e "s|HOSTNAMESET|$HOSTNAME|" /var/www/html/index.html
echo " - Creating link for acces rpm through HTTP"
ln -sf $INSTALLDIR /var/www/html/install
}

pamdX() {
echo " - Updating Pamd"
cat > /etc/pam.d/xserver <<EOF
#%PAM-1.0
auth       sufficient   /lib/security/pam_rootok.so
auth       required     /lib/security/pam_permit.so
account    required     /lib/security/pam_permit.so
EOF
}

add_bg_xdm() {
XDMCONFIG_DIR="/etc/X11/xdm"
TESTBG=`grep /etc/X11/clic-1024.jpg ${XDMCONFIG_DIR}/Xsetup_0`
if [ -z "${TESTBG}" ]; then
echo " - Configuring XDM background"
cat > ${XDMCONFIG_DIR}/Xsetup_0 <<EOF
if [ -x /etc/X11/xinit/fixkeyboard ]; then
	/etc/X11/xinit/fixkeyboard
fi
/usr/X11R6/bin/xsetbg /etc/X11/clic-1024.jpg
EOF
echo "xlogin*geometry: 400x250-50-500" >> ${XDMCONFIG_DIR}/Xresources
fi
}
				    
see_var() {
echo
echo " Setting up a CLIC server with default configuration !"
echo " Look in ${CONFFILE} to adjust NIS config"
echo 
echo " Using those values to setup the NIS:"
echo " |-----------------------------------------------------------"
echo " | Hostname:              | ${NAMEOFSERVER}"
echo " |-----------------------------------------------------------"
echo " | Domainname:            | ${DOMAINNAME}"
echo " |-----------------------------------------------------------"
echo " | Nis domain             | ${NISDOMAIN}"
echo " |-----------------------------------------------------------"
echo " | Nis Server             | ${NISSERVER}"
echo " |-----------------------------------------------------------"
echo " | NFS server:            | ${NFSSERVER}"
echo " |-----------------------------------------------------------"
echo " | IP of NIS server:      | ${IPSERVER}"
echo " |-----------------------------------------------------------"
echo " | NIS home directory:    | ${HOMENIS}"
echo " |-----------------------------------------------------------"
echo " | User SSH dir           | ${USER_SSH_DIR}"
echo " |-----------------------------------------------------------"
echo " | IP of Gateway          | ${IPGW}"
echo " |-----------------------------------------------------------"
echo " | node file              | ${NODESFILE}"
echo " |-----------------------------------------------------------"
sleep 3
}


###################################################################################
# MAIN program
###################################################################################
check_workdir

case ${1} in 
	basic)
	basic
	;;
	genkey)
	clean_key
	generate_ssh_key
	generate_newauth
	;;
	cptftp)
	echo
	cp_in_workdir
	update_tftpdir
	echo 
	echo " NOW Reload configuration launch on client:"
	echo " ${INITRD}/clusterautosetup-client reload"
	echo " or you will lost all remote command on NODES !"
	;;
	updatefile)
	echo
	echo " ###################"
	echo " # !!! WARNING !!! #"
	echo " ###################"
	echo " ARE YOU sure that client NODES have retrieve all needed key?"
	echo 
	echo " launch on client:"
	echo " -----------------"
        echo " ${INITRD}/clusterautosetup-client reload" 
	echo
        echo " Or you will lost all remote command on NODES !!!"
	echo " (be sure you know what you rare doing)"
	echo			
	echo " Have you update the client with the new key ?"
	echo -n " Last time to be sure (crtl+c to abort)  "
	sleep 1; echo -n " 5....."; sleep 1; echo -n "4...."
	sleep 1; echo -n "3..."; sleep 1; echo -n "2.."; sleep 1; echo "1."
	echo " Updating Key on server"
	cp_in_gooddir
	;;
	service)
	echo
	service_adjust
	;;
	gennode)
	gennodelist
	basic
	$0 cptftp
	;;
	ganglia)
	setup_ganglia
	;;
	bg_xdm)
	add_bg_xdm
	;;
	all)
	see_var
	gennodelist
	pamdX
	short_doc
	$0 bg_xdm
	$0 basic
	$0 ganglia
	$0 genkey
	$0 service
	$0 cptftp
	$0 updatefile
	save_dir
	;;
	*) 
	echo
	echo " usage $0: {basic|gennode|genkey|activrsh|gmetad"
	echo "		set_gw|cptftp|updatefile|service|all}"
	echo " HELP:" 
	echo " |--------------------------------------------------------------------|"
	echo " | basic:       generate basic configuration for GEXEC Clusterit      |"
	echo " | ganglia:     configure gmetad and name of Metcluster               |"
	echo " | gennode:     generate node list for MPI, GEXEC, Clusterit, OpenPBS |"
	echo " | activrsh:    activate the service rsh                              |"
	echo " | genkey:      regenerate key                                        |"
        echo " | bg_xdm:      modify xdm background                                 |" 
	echo " | service:     adjust service on server                              |"
	echo " | cptftp:      copy ssh, authd keys, machines.LINUX, NTP in tfpdir   |" 
	echo " | updatefile:  copy the key in their working dir                     |"
	echo " |              authd key in /etc/ , ssh key in user dir              |"
	echo " |              machines.LINUX in MPI directory                       |"
	echo " | all:         do all above                                          |"
	echo " |--------------------------------------------------------------------|"
	;;
esac