summaryrefslogtreecommitdiffstats
path: root/src/util
diff options
context:
space:
mode:
authorChristian Hesse2014-05-13 18:38:52 +0200
committerMichael Brown2014-05-14 17:00:58 +0200
commita8f037a275886ed533bb0c005bc5464757f76ca7 (patch)
treedfb2abe30793ee360ac6105640b3657b78a04353 /src/util
parent[undi] Apply quota only to number of complete received packets (diff)
downloadipxe-a8f037a275886ed533bb0c005bc5464757f76ca7.tar.gz
ipxe-a8f037a275886ed533bb0c005bc5464757f76ca7.tar.xz
ipxe-a8f037a275886ed533bb0c005bc5464757f76ca7.zip
[build] Merge util/geniso and util/genliso
Rework geniso and genliso to provide a single merged utility for generating ISO images. Modified-by: Michael Brown <mcb30@ipxe.org> Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/util')
-rwxr-xr-xsrc/util/geniso180
-rwxr-xr-xsrc/util/genliso74
2 files changed, 121 insertions, 133 deletions
diff --git a/src/util/geniso b/src/util/geniso
index bcf294a6..521c929e 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 Network 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 7a112a14..00000000
--- 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