Hello, I have a simple shell script that I use to generate an iso installer depending on the release version that I want. The thing is that I extract isolinux and menu.c32 from the syslinux rpm of the latest redhat release. The reason I am doing it this way is because of the This is what does it: copymenu32() { # $ cat /local/kickstart/templates/os-updates.txt # RedHat-5.8|20120425 # RedHat-5.9|20130305 # RedHat-6.2|20120425 # RedHat-6.3|20120827 # RedHat-6.4|20130228 OSREL="`grep ^RedHat /local/kickstart/templates/os-updates.txt | sort -n | tail -1 | awk -F'|' '{print $1}'`" DEST=$2 PWD=`pwd` SYSLINUX_RPM=`find /local/yum-repo/OS/${OSREL}-x86_64/base -name 'syslinux-*.x86_64.rpm' | egrep 'syslinux-[[:digit:]]'` SYSLINUX_PATH=`rpm -qpl $SYSLINUX_RPM | grep -w menu.c32 | xargs dirname` SYSLINUX_TMPDIR=`mktemp -d /tmp/syslinux.XXXXXX` cd $SYSLINUX_TMPDIR rpm2cpio $SYSLINUX_RPM | cpio -idm .${SYSLINUX_PATH}/menu.c32 rpm2cpio $SYSLINUX_RPM | cpio -idm .${SYSLINUX_PATH}/isolinux.bin cp -f .${SYSLINUX_PATH}/menu.c32 $DEST cp -f .${SYSLINUX_PATH}/isolinux.bin $DEST cd $PWD rm -rf $SYSLINUX_TMPDIR } createiso() { TYPE=$1 if [ $TYPE == "rescue" ]; then CONFIG="/local/kickstart/templates/isolinux-${OS}-rescue.cfg" ISOFILE="${HOST}-rescue.iso" # KS="/local/kickstart/ks/${HOST}-rescue.ks" else CONFIG="/local/kickstart/templates/isolinux-${OS}-${MAJOR}.cfg" ISOFILE="${HOST}.iso" # KS="/local/kickstart/ks/${HOST}.ks" fi MAJOR=`echo $REL | awk -F. '{print $1}'` ISODIR=`mktemp -d /tmp/iso.XXXXXX` MKISOFSLOG=`mktemp /tmp/mkisofs.XXXX` cp -r /local/yum-repo/OS/${OS}-${REL}-x86_64/base/isolinux $ISODIR chmod -R u+w $ISODIR /bin/rm -f $ISODIR/isolinux/isolinux.cfg copymenu32 "${OS}-${REL}" "$ISODIR/isolinux" copymemtest "$ISODIR/isolinux" populate $CONFIG $ISODIR/isolinux/isolinux.cfg cd $ISODIR if [ -f "/local/kickstart/boot-isos/$ISOFILE" ]; then mv -f /local/kickstart/boot-isos/$ISOFILE /local/kickstart/boot-isos/${ISOFILE}.prev fi mkisofs -input-charset iso-8859-1 -log-file $MKISOFSLOG -J -T -o /local/kickstart/boot-isos/$ISOFILE -b isolinux/isolinux.bin -c isolinux/ boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -v . if [ $? -ne 0 ] ; then echo "Creation of boot ISO failed" echo "Check the log file: $MKISOFSLOG" echo "or check the build directory: $ISODIR" exit 1 fi /bin/rm -rf $ISODIR $MKISOFSLOG HOSTNAME=`uname -n` MYIP=`gethostip -d $HOSTNAME` echo "Boot from http://$MYIP/kickstart/boot-isos/$ISOFILE with" echo "vm cdrom insert http://$MYIP/kickstart/boot-isos/$ISOFILE" echo "vm cdrom set boot_once" echo "vm cdrom get" echo "power reset" } I was assuming that I'm good as long as I use isolinux and menu.c32 from the same package. Now I'm not too sure anymore. I got varying results. Last week, I was only copying menu.c32 from the rpms (I used isolinux.bin from the DVD installer). One of the users reported to me the problem, I spent a few hours on it and I still couldn't figure it out, and ended up using syslinux from the newly-released RHEL 6.4 (). Tested builds RHEL 5.6 to 6.4, checked menu.c32 checksum (i checked isolinux.bin's as well, but it seems its checksum is always changing after mkisofs), isolinux is going through, all were good. I'm using syslinux-4.02-8.el6.x86_64.rpm. Today when I was about to rebuild a server, I'm getting the "menu.c32: not a COM32R image" message. I'm pretty sure nothing has changed (syslinux rpm, the script), but I'm not sure where to begin troubleshooting anymore. Can anyone give me a clue? regards, Marc
> > Today when I was about to rebuild a server, I'm getting the "menu.c32: not > a COM32R image" message. I'm pretty sure nothing has changed (syslinux rpm, > the script), but I'm not sure where to begin troubleshooting anymore. Can > anyone give me a clue? > > regards, > MarcI would suggest, as first troubleshooting steps, using menu.c32 and isolinux.bin official binaries (not re-building) from the official Syslinux 4.02 (as that's the version you are using in your rpm archive) from ftp://ftp.kernel.org/pub/linux/utils/boot/syslinux/4.xx/ "as-is". It is possible that the problem might be related to the "x64" version of the rpm package. Testing with the official binaries might provide some clue. HTH, Ady.
On Mar 11, 2013 3:21 AM, "Marc Pascual" <marc.m.pascual at gmail.com> wrote:> > Hello, > > I have a simple shell script that I use to generate an iso installer > depending on the release version that I want. The thing is that I extract > isolinux and menu.c32 from the syslinux rpm of the latest redhat release. > The reason I am doing it this way is because of the > > This is what does it: > > copymenu32() { > # $ cat /local/kickstart/templates/os-updates.txt > # RedHat-5.8|20120425 > # RedHat-5.9|20130305 > # RedHat-6.2|20120425 > # RedHat-6.3|20120827 > # RedHat-6.4|20130228 > OSREL="`grep ^RedHat /local/kickstart/templates/os-updates.txt | sort > -n | tail -1 | awk -F'|' '{print $1}'`" > DEST=$2 > PWD=`pwd` > SYSLINUX_RPM=`find /local/yum-repo/OS/${OSREL}-x86_64/base -name > 'syslinux-*.x86_64.rpm' | egrep 'syslinux-[[:digit:]]'` > SYSLINUX_PATH=`rpm -qpl $SYSLINUX_RPM | grep -w menu.c32 | xargs > dirname` > SYSLINUX_TMPDIR=`mktemp -d /tmp/syslinux.XXXXXX` > cd $SYSLINUX_TMPDIR > rpm2cpio $SYSLINUX_RPM | cpio -idm .${SYSLINUX_PATH}/menu.c32 > rpm2cpio $SYSLINUX_RPM | cpio -idm .${SYSLINUX_PATH}/isolinux.bin > cp -f .${SYSLINUX_PATH}/menu.c32 $DEST > cp -f .${SYSLINUX_PATH}/isolinux.bin $DEST > cd $PWD > rm -rf $SYSLINUX_TMPDIR > }1) why not run rpm2cpio once?> createiso() { > TYPE=$1 > if [ $TYPE == "rescue" ]; then > CONFIG="/local/kickstart/templates/isolinux-${OS}-rescue.cfg" > ISOFILE="${HOST}-rescue.iso" > # KS="/local/kickstart/ks/${HOST}-rescue.ks" > else > CONFIG="/local/kickstart/templates/isolinux-${OS}-${MAJOR}.cfg" > ISOFILE="${HOST}.iso" > # KS="/local/kickstart/ks/${HOST}.ks" > fi > MAJOR=`echo $REL | awk -F. '{print $1}'` > ISODIR=`mktemp -d /tmp/iso.XXXXXX` > MKISOFSLOG=`mktemp /tmp/mkisofs.XXXX` > cp -r /local/yum-repo/OS/${OS}-${REL}-x86_64/base/isolinux $ISODIR > chmod -R u+w $ISODIR > /bin/rm -f $ISODIR/isolinux/isolinux.cfg > copymenu32 "${OS}-${REL}" "$ISODIR/isolinux" > copymemtest "$ISODIR/isolinux" > populate $CONFIG $ISODIR/isolinux/isolinux.cfg > cd $ISODIR > if [ -f "/local/kickstart/boot-isos/$ISOFILE" ]; then > mv -f /local/kickstart/boot-isos/$ISOFILE > /local/kickstart/boot-isos/${ISOFILE}.prev > fi > mkisofs -input-charset iso-8859-1 -log-file $MKISOFSLOG -J -T -o > /local/kickstart/boot-isos/$ISOFILE -b isolinux/isolinux.bin -c isolinux/ > boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -v . > > if [ $? -ne 0 ] ; then > echo "Creation of boot ISO failed" > echo "Check the log file: $MKISOFSLOG" > echo "or check the build directory: $ISODIR" > exit 1 > fi > /bin/rm -rf $ISODIR $MKISOFSLOG > > HOSTNAME=`uname -n` > MYIP=`gethostip -d $HOSTNAME` > echo "Boot from http://$MYIP/kickstart/boot-isos/$ISOFILE with" > echo "vm cdrom insert http://$MYIP/kickstart/boot-isos/$ISOFILE" > echo "vm cdrom set boot_once" > echo "vm cdrom get" > echo "power reset" > } > > I was assuming that I'm good as long as I use isolinux and menu.c32 from > the same package. Now I'm not too sure anymore. > I got varying results. Last week, I was only copying menu.c32 from therpms> (I used isolinux.bin from the DVD installer). One of the users reported to > me the problem, I spent a few hours on it and I still couldn't figure it > out, and ended up using syslinux from the newly-released RHEL 6.4 (). > Tested builds RHEL 5.6 to 6.4, checked menu.c32 checksum (i checked > isolinux.bin's as well, but it seems its checksum is always changing after > mkisofs), isolinux is going through, all were good. > > I'm using syslinux-4.02-8.el6.x86_64.rpm. > > Today when I was about to rebuild a server, I'm getting the "menu.c32: not > a COM32R image" message. I'm pretty sure nothing has changed (syslinuxrpm,> the script), but I'm not sure where to begin troubleshooting anymore. Can > anyone give me a clue? > > regards, > MarcThe error means you have ISOLINUX-4.xx with a non-4.xx menu.c32 (likely 3.xx or not really a COM32 at all) 2) temporarily disable your cleanups. 3) check for /boot/isolinux /boot/syslinux and /syslinux in your ISO. --Gene
Reasonably Related Threads
- [PATCH] If the specified ISO does not exist, then the script dies.
- Kickstart and CentOS 6...
- Correction to HowTos/InstallFromUSBkey
- [PATCH node] Update autobuild and autotest scripts for new build structure
- [PATCH node-image] Adds a preserve option for autotest VMs.