[syslinux] menu.c32: not a COM32R image

Gene Cumm gene.cumm at gmail.com
Mon Mar 11 03:37:53 PDT 2013


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 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

The 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


More information about the Syslinux mailing list