From a8f037a275886ed533bb0c005bc5464757f76ca7 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 13 May 2014 18:38:52 +0200 Subject: [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 Signed-off-by: Michael Brown --- src/util/geniso | 180 +++++++++++++++++++++++++++++++++++++------------------ src/util/genliso | 74 ----------------------- 2 files changed, 121 insertions(+), 133 deletions(-) delete mode 100755 src/util/genliso (limited to 'src/util') 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 < ${cfg} <&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 <&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 -- cgit v1.2.3-55-g7522