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