SYSLINUX=$IMGPATH/usr/lib/syslinux/syslinux-nomtools set -x if [ ! -f $SYSLINUX ]; then echo "Warning: nomtools syslinux doesn't exist" SYSLINUX=$IMGPATH/usr/bin/syslinux if [ ! -f $SYSLINUX ]; then echo "$SYSLINUX doesn't exist" exit 1 fi fi prepareBootImage() { dd if=/dev/zero bs=1k count=$BOOTDISKSIZE of=/$MBD_TMPIMAGE 2>/dev/null mkdosfs -r 16 -C $MBD_TMPIMAGE $BOOTDISKSIZE >/dev/null $SYSLINUX $MBD_TMPIMAGE mount -o loop,sync -t msdos $MBD_TMPIMAGE $MBD_BOOTTREE prepareBootTree } # prepare a directory with the kernel, initrd, and various message files # used to populate a boot image prepareBootTree() { (cd $BOOTDISKDIR; find . ! -name "*.msg" -maxdepth 1 ! -type d | cpio --quiet -p $MBD_BOOTTREE) cp $MBD_FSIMAGE $MBD_BOOTTREE/initrd.img cp $KERNELROOT/boot/vmlinuz-* $MBD_BOOTTREE/vmlinuz pngtopnm $BOOTDISKDIR/syslinux-splash.png | ppmtolss16 \#000000=0 \#cdcfd5=7 \#c90000=2 \#ffffff=15 \#5b6c93=9 > $BOOTDISKDIR/splash.lss if [ $? != 0 ]; then echo $0: Failed to create splash.lss exit 1 fi cp $BOOTDISKDIR/splash.lss $MBD_BOOTTREE/splash.lss rm -f $MBD_BOOTTREE/syslinux-splash.png rm -f $MBD_BOOTTREE/memtest* for file in $BOOTDISKDIR/*.msg; do filename=`basename $file` sed -e "s/@VERSION@/$VERSION/g" $file > $MBD_BOOTTREE/$filename done if [ $? != 0 ]; then echo $0: Failed to copy messages from $BOOTDISKDIR to $MBD_BOOTTREE. umount $MBD_BOOTTREE rm -rf $MBD_BOOTTREE $MBD_TMPIMAGE exit 1 fi } mkdir -p $IMAGEPATH cat > $IMAGEPATH/README <<EOF This directory contains image files that can be used to create media capable of starting the $PRODUCT installation process. The boot.iso file is an ISO 9660 image of a bootable CD-ROM. It is useful in cases where the CD-ROM installation method is not desired, but the CD-ROM's boot speed would be an advantage. To use this image file, burn the file onto CD-R (or CD-RW) media as you normally would. The diskboot.img file is a VFAT filesystem image that can be written to a USB pendrive or other bootable media larger than a floppy. Note that booting via USB is dependent on your BIOS supporting this. It should be written to the device using dd. EOF # LATEUSBMODS go in the second stage. # FIXME: bleah, have to include sd_mod, sr_mod for usb-storage USBMODS="usbcore ohci-hcd uhci-hcd hid usb-storage sd_mod sr_mod" # usb-storage goes on both so we can reload it. *sigh* LATEUSBMODS="usb-storage" IDEMODS="cdrom ide-cd" SCSIMODS="cdrom scsi_mod sd_mod sg sr_mod st" FSMODS="fat msdos vfat ext3 reiserfs jfs xfs" LVMMODS="dm-mod dm-zero dm-snapshot dm-mirror" RAIDMODS="md raid0 raid1 raid5 raid6" SECSTAGE="agpgart $RAIDMODS $LVMMODS $FSMODS $IDEMODS $SCSIMODS $LATEUSBMODS st parport_pc parport" BTERMMODULES="vga16fb vgastate" COMMONMODULES="fat vfat nfs sunrpc lockd floppy cramfs loop edd virtio_pci $USBMODS $BTERMMODULES" LOCALMODULES="$COMMONMODULES aic7xxx megaraid_mbox sym53c8xx $IDEMODS $SCSIMODS" NETWORKMODULES="$COMMONMODULES 3c59x e100 tulip 8139too" # sis900 e100 hp100 natsemi pcnet32" PCMCIAMAINMODULES="$COMMONMODULES nfs $IDEMODS $SCSIMODS" # images we only want on the CD (usually for space reasons) ISOLINUXMODULES="usbcore ehci-hcd ieee1394 ohci1394 sbp2" # XXX hack hack PCMCIAMODULES_EXCLUDED=" apa1480_cb iflash2+_mtd iflash2_mtd memory_cb memory_cs parport_cs parport_pc parport serial_cs serial_cb sram_mtd " PCMCIAMODULES_EXCLUDED_SED="sed" for m in $PCMCIAMODULES_EXCLUDED do PCMCIAMODULES_EXCLUDED_SED="$PCMCIAMODULES_EXCLUDED_SED -e 's/$m//g'" done BOOTPCMCIAMODULES=`echo $PCMCIAMODULES | eval "$PCMCIAMODULES_EXCLUDED_SED"` # need to make sure the base modules are included BOOTPCMCIAMODULES="$BOOTPCMCIAMODULES yenta_socket i82365 tcic pcmcia_core ds" makeBootImages() { # FIXME: this is so that we can switch back and forth. if we want both # on the CD, then more needs to be done, esp for things like isolinux.cfg # Right now, last one wins if [ "$kerneltag" != "xenU" ]; then echo "Building $KERNELARCH initrd-everything.img" makeinitrd --initrdto $IMAGEPATH/pxeboot/initrd-everything.img \ --pcmcia \ --initrdsize 7000 \ --loaderbin loader \ --modules "$LOCALMODULES $NETWORKMODULES $PCMCIAMAINMODULES $BOOTPCMCIAMODULES $PCMCIAMODULES $ISOLINUXMODULES =scsi =net" [ $? = 0 ] || exit 1 if [ -f $IMGPATH/usr/lib/syslinux/isolinux.bin ]; then echo "Building isolinux directory" MBD_BOOTTREE=$TOPDESTPATH/isolinux MBD_FSIMAGE=$IMAGEPATH/pxeboot/initrd-everything.img mkdir $MBD_BOOTTREE 2>/dev/null cp $IMGPATH/usr/lib/syslinux/isolinux.bin $MBD_BOOTTREE/isolinux.bin prepareBootTree # isolinux needs the config file to be isolinux.cfg mv $MBD_BOOTTREE/syslinux.cfg $MBD_BOOTTREE/isolinux.cfg #Override with files in $SITE/build/isolinux/ if [ -z $SITE ] ; then BUILDLOC=$DEFAULT else BUILDLOC="" fi if [ -s $TOPDESTPATH/$BUILDLOC/build/isolinux/boot.msg ] ; then cp $TOPDESTPATH/$BUILDLOC/build/isolinux/boot.msg $MBD_BOOTTREE fi if [ -s $TOPDESTPATH/$BUILDLOC/build/isolinux/isolinux.cfg ] ; then cp $TOPDESTPATH/$BUILDLOC/build/isolinux/isolinux.cfg $MBD_BOOTTREE fi if [ -s $TOPDESTPATH/$BUILDLOC/build/isolinux/syslinux.cfg ] ; then cp $TOPDESTPATH/$BUILDLOC/build/isolinux/syslinux.cfg $MBD_BOOTTREE fi if [ -s $TOPDESTPATH/$BUILDLOC/build/isolinux/splash.lss ] ; then cp $TOPDESTPATH/$BUILDLOC/build/isolinux/splash.lss $MBD_BOOTTREE fi #end of override # copy in memtest if present if [ -f $IMGPATH/usr/lib/anaconda-runtime/boot/memtest* ]; then cp $IMGPATH/usr/lib/anaconda-runtime/boot/memtest* $MBD_BOOTTREE/memtest echo -e "label memtest86\n kernel memtest\n append -\n" >> $MBD_BOOTTREE/isolinux.cfg fi else echo "No isolinux binaries. Skipping isolinux creation" fi # clean up time -- being very explicit about what's linked if [ -f $TOPDESTPATH/isolinux/vmlinuz -a -f $TOPDESTPATH/isolinux/initrd.img ] ;then echo "Cleaning up images" # links for the pxeboot bits rm -f $IMAGEPATH/pxeboot/* ln $TOPDESTPATH/isolinux/vmlinuz $IMAGEPATH/pxeboot/vmlinuz ln $TOPDESTPATH/isolinux/initrd.img $IMAGEPATH/pxeboot/initrd.img # links for the autoboot bits if [ -f $TOPDESTPATH/dosutils/loadlin.exe ]; then rm -f $TOPDESTPATH/dosutils/autoboot/* mkdir -p $TOPDESTPATH/dosutils/autoboot/ ln $TOPDESTPATH/isolinux/vmlinuz $TOPDESTPATH/dosutils/autoboot/vmlinuz ln $TOPDESTPATH/isolinux/initrd.img $TOPDESTPATH/dosutils/autoboot/initrd.img fi fi # now make a boot iso mkdir -p $IMAGEPATH/isopath cp -rl $TOPDESTPATH/isolinux $IMAGEPATH/isopath mkisofs -quiet -o $IMAGEPATH/boot.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -V "$PRODUCT" -T $IMAGEPATH/isopath rm -rf $IMAGEPATH/isopath # now make a boot pendrive image mkdir -p $IMAGEPATH/fobpath dd if=/dev/zero of=$IMAGEPATH/diskboot.img bs=1M count=12 2>/dev/null mkdosfs $IMAGEPATH/diskboot.img $SYSLINUX $IMAGEPATH/diskboot.img mount -o loop $IMAGEPATH/diskboot.img $IMAGEPATH/fobpath cp -r $TOPDESTPATH/isolinux/* $IMAGEPATH/fobpath/ grep -v local $IMAGEPATH/fobpath/isolinux.cfg > $IMAGEPATH/fobpath/syslinux.cfg rm -f $IMAGEPATH/fobpath/isolinux.cfg umount -f $IMAGEPATH/fobpath rmdir $IMAGEPATH/fobpath cat > $IMAGEPATH/pxeboot/README <<EOF The files in this directory are useful for booting a machine via PXE. The following files are available: vmlinuz - the BOOT kernel used for the installer initrd.img - an initrd with support for all install methods and drivers supported for installation of $PRODUCT EOF else # set up the boot stuff for the xen guest kernel echo "Building $KERNELARCH guest initrd.img" mkdir -p $TOPDESTPATH/images/xen makeinitrd --initrdto $TOPDESTPATH/images/xen/initrd.img \ --initrdsize 8192 \ --loaderbin loader \ --modules "$LOCALMODULES $NETWORKMODULES $PCMCIAMAINMODULES $BOOTPCMCIAMODULES $PCMCIAMODULES $ISOLINUXMODULES =scsi =net" [ $? = 0 ] || exit 1 cp $KERNELROOT/boot/vmlinuz-*xen* $TOPDESTPATH/images/xen/vmlinuz fi } makeSecondStage() { echo "Building main moduleball" makemainmodules "=scsi =net $SECSTAGE" [ $? = 0 ] || exit 1 echo "Building netstg.img" makeinstimage "netstg" "=scsi $SECSTAGE" [ $? = 0 ] || exit 1 echo "Building hdstg.img" makeinstimage "hdstg" "=net $SECSTAGE" [ $? = 0 ] || exit 1 echo "Building stage2.img" makemainimage "stage2" "cramfs" [ $? = 0 ] || exit 1 }