Sophie

Sophie

distrib > Mandriva > 2006.0 > i586 > by-pkgid > ff3ee324c0567e1c25614ef618e7dd7f > files > 30

clusterautosetup-2.1-5mdk.src.rpm

#!/bin/bash
# version 2.02 
# Run This script on server
# very simple script to setup pxe
# so you can find some error. plz report: clic-dev-public@mandrakesoft.com

CONFFILE=/etc/clusterserver.conf

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

INTELPATH=PXEClient
COMPATH=X86PC
FULLINTEL=${TFTPDIR}/${INTELPATH}
FULLCOM=${TFTPDIR}/${COMPATH}/linux
TEMPDIR=/tmp
PXEDEFAULT="pxelinux.cfg/default"
PXEMENU=${TEMPDIR}/default.clic.pxe
PXEMESSAGE=${TEMPDIR}/message.clic.pxe
FREEDOSIMAGE=${INSTALLDIR}/images/freedos.img
KAIMAGE=${INSTALLDIR}/images/ka.img
NETIMAGE=${TEMPDIR}/clic.img
NETIMAGE_NOFB=${TEMPDIR}/clic-nofb.img
SYSLINUXPATH=/usr/lib/syslinux/
PXEHELP=${TEMPDIR}/help.txt.pxe

exitOnError(){
	echo $1
        exit 1
}

deleteIsFileExist(){
if [ -f $1 ]; then
	rm -f $1
fi
}

garbage() {
	echo " - Garbage collector in action"
deleteIsFileExist $PXEMESSAGE
deleteIsFileExist $PXEMENU
deleteIsFileExist $NETIMAGE
deleteIsFileExist ${NETIMAGE_NOFB}
deleteIsFileExist ${PXEHELP}
}

setupIntel() {
	echo " - Preparing PXE for Intel cards";
	cp -f $SYSLINUXPATH/memdisk $FULLINTEL
	cp -f $SYSLINUXPATH/pxelinux.0 $FULLINTEL
	cp -f $PXEMESSAGE $FULLINTEL/messages
	cp -f $PXEHELP $FULLINTEL/help.txt
	cp -f $PXEMENU $FULLINTEL/pxelinux.cfg/default
	cp -f $NETIMAGE $FULLINTEL/images 
	cp -f $NETIMAGE_NOFB $FULLINTEL/images 
	cp -f $KAIMAGE $FULLINTEL/images 
	cp -f $FREEDOSIMAGE $FULLINTEL/images 

}


setup3com() { 
	echo " - Preparing PXE for 3Com cards";
	if [ -f /etc/pxe.conf ]; then
		        cp -f /etc/pxe.conf /etc/pxe.conf.${DATE}
	fi
		
	cp -f $SYSLINUXPATH/memdisk $FULLCOM
	cp -f $SYSLINUXPATH/pxelinux.0 $FULLCOM/linux.0 
	cp -f $PXEMESSAGE $FULLCOM/messages
	cp -f $PXEHELP $FULLCOM/help.txt
	cp -f $PXEMENU $FULLCOM/pxelinux.cfg/default
	cp -f $NETIMAGE $FULLCOM/images 
	cp -f $NETIMAGE_NOFB $FULLCOM/images 
	cp -f $KAIMAGE $FULLCOM/images
	cp -f $FREEDOSIMAGE $FULLCOM/images

	CONF=/etc/pxe.conf

	echo "	- Setting ${CONF} file"
	echo "	- Interface"
	perl -pi -e "s/interface\=.*/interface\=$INTERFACEDNS/" ${CONF}
	echo "	- address"
	perl -pi -e "s/default_address.*/default_address\=$IPSERVER/" ${CONF}
	echo "	- MTFTP address"
	perl -pi -e "s/mtftp_address.*/mtftp_address\=$IPSERVER/" ${CONF}
	echo "	- Name"
	perl -pi -e "s/Mandrake/CLIC/" ${CONF}
	echo "	- Domain"
	perl -pi -e "s/domain.*/domain\=$DOMAINNAME/" ${CONF}

	service pxe restart
}

prepareKaImage(){
	echo "	- Preparing KA Image"
cat >>$PXEMENU << EOF
label ka
       KERNEL memdisk
       APPEND initrd=images/ka.img
EOF
	echo "ka                     : Installing a CLIC node with ka installation mode" >> ${PXEHELP}
}

prepareNetImage(){
	echo "- Preparing Network Boot image";
	if [ ! -d ${INSTALLDIR} ]; then
		exitOnError "${INSTALLDIR} not present, exiting..."
	fi
	MOUNT=${TEMPDIR}/loopForClic
	
	cp -f ${INSTALLDIR}/images/rapid.img ${NETIMAGE}
	mkdir -p ${MOUNT}
	mount ${NETIMAGE}  ${MOUNT} -o loop
	perl -pi -e "s|server:[0-9]*.[0-9]*.[0-9]*.[0-9]*|server:$IPSERVER|" ${MOUNT}/syslinux.cfg
	perl -pi -e "s|kickstart=.*pl||"  ${MOUNT}/syslinux.cfg
#	perl -pi -e "s|directory:/install|directory:$INSTALLDIR|" ${MOUNT}/syslinux.cfg
	umount ${MOUNT}
	if [ -d $MOUNT ]; then
		rm -rf ${MOUNT}
	fi
	
	cp -f $NETIMAGE $NETIMAGE_NOFB
	
	cat >>$PXEMENU << EOF
label linux
	KERNEL memdisk
	APPEND initrd=images/clic.img

label linux-nofb
	KERNEL initrd=images/clic-nofb.img
EOF
	echo "linux               : Installing a CLIC node" >> ${PXEHELP}
	echo "linux-nofb          : Installing a CLIC node (no frame buffer)" >> ${PXEHELP}
}

prepareFreeDosImage() {
	cat >>$PXEMENU << EOF
label freedos
	KERNEL memdisk
	APPEND initrd=images/freedos.img
EOF
       echo "freedos             : FreeDos" >> ${PXEHELP}
}

prepareTftpboot() {
	echo "	- Creating pxe images directories"
	mkdir -p ${TFTPDIR}/${INTELPATH}/images 2>/dev/null
	mkdir -p ${TFTPDIR}/${INTELPATH}/pxelinux.cfg 2>/dev/null
	mkdir -p ${TFTPDIR}/${COMPATH}/linux/images 2>/dev/null
	mkdir -p ${TFTPDIR}/${COMPATH}/linux/pxelinux.cfg 2>/dev/null
}

prepareDefaultPXEMenu(){
	echo "	- Preparing Default PXE Menu"
	echo "Available images are: " > $PXEHELP
	cat > $PXEMENU << EOF
PROMPT 1
DEFAULT local
DISPLAY messages
TIMEOUT 50

label local
	LOCALBOOT 0
F1	help.txt
EOF
		
}

preparePXEMessage() {
echo "	- Preparing PXE Message"
cat > $PXEMESSAGE << EOF
  ##################################
  Welcome to Clic PHASE 1 PXE Server 
  ##################################

Press F1 for available images
EOF
}

removeFrameBuffer() {
echo " 		|- Removing frame buffer in $1 image"
if [ ! -d ${INSTALLDIR} ]; then
		exitOnError "${INSTALLDIR} not present, exiting..."
fi
MOUNT=${TEMPDIR}/loopForClic
	
mkdir -p ${MOUNT}
mount $1 ${MOUNT} -o loop
perl -pi -e "s|vga\=.*|vga\=normal|" ${MOUNT}/syslinux.cfg
umount ${MOUNT}

if [ -d $MOUNT ]; then
	rm -rf ${MOUNT}
fi


}


prepareCommon() {
	echo " - Preparing common configuration file"
	prepareDefaultPXEMenu
	preparePXEMessage
	prepareTftpboot
	prepareNetImage
	prepareFreeDosImage
	prepareKaImage
	removeFrameBuffer $KAIMAGE
	removeFrameBuffer $NETIMAGE_NOFB

}


isBuildEnabled(){
if [ ! -f $FULLINTEL/$PXEDEFAULT ] || [ ! -f $FULLCOM/$PXEDEFAULT ]; then
                echo " - Please use build mode before"
                exit
fi
						
}

showLabels(){
echo "	- Available labels are:"
echo "$PXELABELS"
}

isLabelExist(){
if [ `echo $PXELABELS | grep -w $1 | wc -l` -eq 0 ]; then
	echo "	- Label $1 doesn't exist !"
	showLabels
	exit
fi
}

setDefaultLabel(){
	for pxe in $FULLINTEL/$PXEDEFAULT $FULLCOM/$PXEDEFAULT; do
		echo "	- Patching $pxe"
		perl -pi -e "s|DEFAULT.*|DEFAULT $1|" $pxe
	done
}

##########################
## MAIN
#########################

case "$1" in
	build)
	echo " - Entering build mode"
	prepareCommon
	setupIntel
	setup3com
	garbage
	;;
	setup)
	echo " - Entering setup mode"
	isBuildEnabled
	PXELABELS=$(cat $FULLINTEL/$PXEDEFAULT | grep -w label | sed -e "s|label||")
 	if [ -z "$2" ]; then
		echo "	- You must provide the default pxe lablels"
		showLabels
		exit
	fi
	isLabelExist $2
	setDefaultLabel $2
	echo "PXE Server is now set to boot on \"$2\" image"
	;;
	*)
	echo "Usage $0: {build|setup}"
	echo "	build: Let's rebuild the pxe images"
	echo "	setup: Choose the default boot image"
	;;
esac