#!/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