[ipxe-devel] [PATCH 1/1] merge util/geniso and util/genliso

Christian Hesse mail at eworm.de
Tue May 13 17:38:52 BST 2014


---
 src/arch/i386/Makefile.pcbios |   8 +-
 src/util/geniso               | 180 ++++++++++++++++++++++++++++--------------
 src/util/genliso              |  74 -----------------
 3 files changed, 125 insertions(+), 137 deletions(-)
 delete mode 100755 src/util/genliso

diff --git a/src/arch/i386/Makefile.pcbios b/src/arch/i386/Makefile.pcbios
index d3fe8b9..50e9314 100644
--- a/src/arch/i386/Makefile.pcbios
+++ b/src/arch/i386/Makefile.pcbios
@@ -49,13 +49,13 @@ LIST_NAME_mrom := ROMS
 NON_AUTO_MEDIA	+= iso
 %iso:	%lkrn util/geniso
 	$(QM)$(ECHO) "  [GENISO] $@"
-	$(Q)ISOLINUX_BIN=$(ISOLINUX_BIN) bash util/geniso $@ $<
+	$(Q)ISOLINUX_BIN=$(ISOLINUX_BIN) VERSION="$(VERSION)" bash util/geniso -o $@ $<
 
 # rule to make a floppy emulation ISO boot image
 NON_AUTO_MEDIA	+= liso
-%liso:	%lkrn util/genliso
-	$(QM)$(ECHO) "  [GENLISO] $@"
-	$(Q)bash util/genliso $@ $<
+%liso:	%lkrn util/geniso
+	$(QM)$(ECHO) "  [GENISO] $@"
+	$(Q)VERSION="$(VERSION)" bash util/geniso -l -o $@ $<
 
 # rule to make a syslinux floppy image (mountable, bootable)
 NON_AUTO_MEDIA	+= sdsk
diff --git a/src/util/geniso b/src/util/geniso
index bcf294a..85fdd50 100755
--- a/src/util/geniso
+++ b/src/util/geniso
@@ -1,80 +1,142 @@
 #!/bin/bash
 #
 # Generate a isolinux ISO boot image
-#
-# geniso foo.iso foo.lkrn
-#
-# the ISO image is the first argument so that a list of .lkrn images
-# to include can be specified
-#
-case $# in
-0|1)
-	echo Usage: $0 foo.iso foo.lkrn ...
-	exit 1
-	;;
-esac
 
-# This should be the default location of the isolinux.bin file
-isolinux_bin=${ISOLINUX_BIN:-util/isolinux.bin}
-if [ ! -r $isolinux_bin ]
-then
-	echo $0: $isolinux_bin not found, please install, or set ISOLINUX_BIN in arch/i386/Makefile correctly
+function help() {
+	echo "usage: ${0} [OPTIONS] foo.lkrn [bar.lkrn,...]"
+	echo
+	echo "where OPTIONS are:"
+	echo " -h       show this help"
+	echo " -l       build legacy image with floppy emulation"
+	echo " -o FILE  save iso image to file"
+}
+
+LEGACY=0
+FIRST=""
+
+while getopts "hlo:" opt; do
+	case ${opt} in
+		h)
+			help
+			exit 0
+			;;
+		l)
+			LEGACY=1
+			;;
+		o)
+			OUT="${OPTARG}"
+			;;
+	esac
+done
+
+shift $((OPTIND - 1))
+
+if [ -z "${OUT}" ]; then
+	echo "${0}: no output file given" >&2
+	help
 	exit 1
 fi
 
 # There should either be mkisofs or the compatible genisoimage program
-mkisofs=`which mkisofs genisoimage 2>/dev/null | head -n1`
-if [ -z $mkisofs ]
-then
-	echo $0: mkisofs or genisoimage not found, please install or set PATH
+for command in genisoimage mkisofs; do
+	if ${command} --version >/dev/null 2>/dev/null; then
+		mkisofs=(${command})
+		break
+	fi
+done
+
+if [ -z "${mkisofs}" ]; then
+	echo "${0}: mkisofs or genisoimage not found, please install or set PATH" >&2
 	exit 1
 fi
 
-# isohybrid will be used if available
-isohybrid=`which isohybrid 2>/dev/null`
+dir=$(mktemp -d bin/iso.dir.XXXXXX)
+cfg=${dir}/isolinux.cfg
 
-out=$1
-shift
-dir=`mktemp -d bin/iso.dir.XXXXXX`
-cfg=$dir/isolinux.cfg
-cp $isolinux_bin $dir
+mkisofs+=(-quiet -l -volid "iPXE" -preparer "iPXE build system"
+	-appid "iPXE ${VERSION} - open source boot firmware"
+	-publisher "http://ipxe.org/" -c boot.cat)
 
-# syslinux 6.x needs a file called ldlinux.c32
-ldlinux_c32=$(dirname ${isolinux_bin})/ldlinux.c32
-if [ -s ${ldlinux_c32} ]
-then
-	cp ${ldlinux_c32} ${dir}
-fi
-
-cat > $cfg <<EOF
+# generate the config
+cat > ${cfg} <<EOF
 # These default options can be changed in the geniso script
 SAY iPXE ISO boot image
 TIMEOUT 30
 EOF
-first=
-for f
-do
-	if [ ! -r $f ]
-	then
-		echo $f does not exist, skipping 1>&2
+for f; do
+	if [ ! -r ${f} ]; then
+		echo "${f} does not exist, skipping" >&2
 		continue
 	fi
-	b=$(basename $f)
+	b=$(basename ${f})
 	g=${b%.lkrn}
-	g=${g//[^a-z0-9]}.krn
-	case "$first" in
-	"")
-		echo DEFAULT $b
-		;;
+	g=${g//[^a-z0-9]}
+	g=${g:0:8}.krn
+	case "${FIRST}" in
+		"")
+			echo "DEFAULT ${b}"
+			FIRST=${g}
+			;;
 	esac
-	first=$g
-	echo LABEL $b
-	echo "" KERNEL $g
-	cp $f $dir/$g
-done >> $cfg
-$mkisofs -quiet -l -o $out -c boot.cat -b isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table $dir
-rm -fr $dir
-if [ -n "$isohybrid" ]
-then
-    $isohybrid $out >/dev/null
-fi
+	echo "LABEL ${b}"
+	echo " KERNEL ${g}"
+	cp ${f} ${dir}/${g}
+done >> ${cfg}
+
+case "${LEGACY}" in
+	1)
+		# check for mtools
+		case "$(mtools -V)" in
+			Mtools\ version\ 3.9.9*|Mtools\ version\ 3.9.1[0-9]*|[mM]tools\ *\ [4-9].*)
+				;;
+			*)
+				echo "Mtools version 3.9.9 or later is required" >&2
+				exit 1
+				;;
+		esac
+
+		# generate floppy image
+		img=${dir}/boot.img
+		mformat -f 1440 -C -i ${img} ::
+
+		# copy lkrn file to floppy image
+		for f in ${dir}/*.krn; do
+			mcopy -m -i ${img} ${f} ::$(basename ${g})
+			rm -f ${f}
+		done
+
+		# copy config file to floppy image
+		mcopy -i ${img} ${cfg} ::syslinux.cfg
+		rm -f ${cfg}
+
+		# write syslinux bootloader to floppy image
+		if ! syslinux ${img}; then
+			echo "${0}: failed writing syslinux to floppy image ${img}" >&2
+			exit 1
+		fi
+
+		# generate the iso image
+		"${mkisofs[@]}" -b boot.img -output ${OUT} ${dir}
+		;;
+	0)
+		# copy isolinux bootloader
+		cp ${ISOLINUX_BIN} ${dir}
+
+		# syslinux 6.x needs a file called ldlinux.c32
+		LDLINUX_C32=$(dirname ${ISOLINUX_BIN})/ldlinux.c32
+		if [ -s ${LDLINUX_C32} ]; then
+			cp ${LDLINUX_C32} ${dir}
+		fi
+
+		# generate the iso image
+		"${mkisofs[@]}" -b isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -output ${OUT} ${dir}
+
+		# isohybrid will be used if available
+		if isohybrid --version >/dev/null 2>/dev/null; then
+			isohybrid ${OUT} >/dev/null
+		fi
+		;;
+esac
+
+# clean up temporary dir
+rm -fr ${dir}
diff --git a/src/util/genliso b/src/util/genliso
deleted file mode 100755
index 7a112a1..0000000
--- a/src/util/genliso
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/bin/bash
-#
-# Generate a legacy floppy emulation ISO boot image
-#
-# genliso foo.liso foo.lkrn bar.lkrn ...
-#
-# The .liso image filename is the first argument followed by
-#   a list of .lkrn images  include in .liso image
-
-case $# in
-0|1)
-	echo Usage: $0 foo.liso foo.lkrn ...
-	exit 1
-	;;
-esac
-
-case "`mtools -V`" in
-Mtools\ version\ 3.9.9*|Mtools\ version\ 3.9.1[0-9]*|[mM]tools\ *\ [4-9].*)
-	;;
-*)
-	echo Mtools version 3.9.9 or later is required
-	exit 1
-	;;
-esac
-
-out=$1
-shift
-
-dir=`mktemp -d bin/liso.dir.XXXXXX`
-
-img=$dir/boot.img
-mformat -f 1440 -C -i $img ::
-
-cfg=$dir/syslinux.cfg
-cat > $cfg <<EOF
-# These default options can be changed in the genliso script
-SAY iPXE ISO boot image generated by genliso
-TIMEOUT 30
-EOF
-
-first=
-for f
-do
-	if [ ! -r $f ]
-	then
-		echo $f does not exist, skipping 1>&2
-		continue
-	fi
-	# shorten name for 8.3 filesystem
-	b=$(basename $f)
-	g=${b%.lkrn}
-	g=${g//[^a-z0-9]}
-	g=${g:0:8}.krn
-	case "$first" in
-	"")
-		echo DEFAULT $g
-		;;
-	esac
-	first=$g
-	echo LABEL $g
-	echo "" KERNEL $g
-	mcopy -m -i $img $f ::$g
-done >> $cfg
-
-mcopy -i $img $cfg ::syslinux.cfg
-
-if ! syslinux $img
-then
-	exit 1
-fi
-
-mkisofs -q -o $out -c boot.cat -b boot.img $dir
-
-rm -fr $dir
-- 
1.9.2



More information about the ipxe-devel mailing list