mirror of https://github.com/ipxe/ipxe.git
[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>pull/19/head
parent
d31cf2de30
commit
a8f037a275
|
@ -49,13 +49,13 @@ LIST_NAME_mrom := ROMS
|
||||||
NON_AUTO_MEDIA += iso
|
NON_AUTO_MEDIA += iso
|
||||||
%iso: %lkrn util/geniso
|
%iso: %lkrn util/geniso
|
||||||
$(QM)$(ECHO) " [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
|
# rule to make a floppy emulation ISO boot image
|
||||||
NON_AUTO_MEDIA += liso
|
NON_AUTO_MEDIA += liso
|
||||||
%liso: %lkrn util/genliso
|
%liso: %lkrn util/geniso
|
||||||
$(QM)$(ECHO) " [GENLISO] $@"
|
$(QM)$(ECHO) " [GENISO] $@"
|
||||||
$(Q)bash util/genliso $@ $<
|
$(Q)VERSION="$(VERSION)" bash util/geniso -l -o $@ $<
|
||||||
|
|
||||||
# rule to make a syslinux floppy image (mountable, bootable)
|
# rule to make a syslinux floppy image (mountable, bootable)
|
||||||
NON_AUTO_MEDIA += sdsk
|
NON_AUTO_MEDIA += sdsk
|
||||||
|
|
180
src/util/geniso
180
src/util/geniso
|
@ -1,80 +1,142 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# Generate a isolinux ISO boot image
|
# 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
|
function help() {
|
||||||
isolinux_bin=${ISOLINUX_BIN:-util/isolinux.bin}
|
echo "usage: ${0} [OPTIONS] foo.lkrn [bar.lkrn,...]"
|
||||||
if [ ! -r $isolinux_bin ]
|
echo
|
||||||
then
|
echo "where OPTIONS are:"
|
||||||
echo $0: $isolinux_bin not found, please install, or set ISOLINUX_BIN in arch/i386/Makefile correctly
|
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
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# There should either be mkisofs or the compatible genisoimage program
|
# There should either be mkisofs or the compatible genisoimage program
|
||||||
mkisofs=`which mkisofs genisoimage 2>/dev/null | head -n1`
|
for command in genisoimage mkisofs; do
|
||||||
if [ -z $mkisofs ]
|
if ${command} --version >/dev/null 2>/dev/null; then
|
||||||
then
|
mkisofs=(${command})
|
||||||
echo $0: mkisofs or genisoimage not found, please install or set PATH
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -z "${mkisofs}" ]; then
|
||||||
|
echo "${0}: mkisofs or genisoimage not found, please install or set PATH" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# isohybrid will be used if available
|
dir=$(mktemp -d bin/iso.dir.XXXXXX)
|
||||||
isohybrid=`which isohybrid 2>/dev/null`
|
cfg=${dir}/isolinux.cfg
|
||||||
|
|
||||||
out=$1
|
mkisofs+=(-quiet -l -volid "iPXE" -preparer "iPXE build system"
|
||||||
shift
|
-appid "iPXE ${VERSION} - Open Source Network Boot Firmware"
|
||||||
dir=`mktemp -d bin/iso.dir.XXXXXX`
|
-publisher "http://ipxe.org/" -c boot.cat)
|
||||||
cfg=$dir/isolinux.cfg
|
|
||||||
cp $isolinux_bin $dir
|
|
||||||
|
|
||||||
# syslinux 6.x needs a file called ldlinux.c32
|
# generate the config
|
||||||
ldlinux_c32=$(dirname ${isolinux_bin})/ldlinux.c32
|
cat > ${cfg} <<EOF
|
||||||
if [ -s ${ldlinux_c32} ]
|
|
||||||
then
|
|
||||||
cp ${ldlinux_c32} ${dir}
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat > $cfg <<EOF
|
|
||||||
# These default options can be changed in the geniso script
|
# These default options can be changed in the geniso script
|
||||||
SAY iPXE ISO boot image
|
SAY iPXE ISO boot image
|
||||||
TIMEOUT 30
|
TIMEOUT 30
|
||||||
EOF
|
EOF
|
||||||
first=
|
for f; do
|
||||||
for f
|
if [ ! -r ${f} ]; then
|
||||||
do
|
echo "${f} does not exist, skipping" >&2
|
||||||
if [ ! -r $f ]
|
|
||||||
then
|
|
||||||
echo $f does not exist, skipping 1>&2
|
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
b=$(basename $f)
|
b=$(basename ${f})
|
||||||
g=${b%.lkrn}
|
g=${b%.lkrn}
|
||||||
g=${g//[^a-z0-9]}.krn
|
g=${g//[^a-z0-9]}
|
||||||
case "$first" in
|
g=${g:0:8}.krn
|
||||||
"")
|
case "${FIRST}" in
|
||||||
echo DEFAULT $b
|
"")
|
||||||
;;
|
echo "DEFAULT ${b}"
|
||||||
|
FIRST=${g}
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
first=$g
|
echo "LABEL ${b}"
|
||||||
echo LABEL $b
|
echo " KERNEL ${g}"
|
||||||
echo "" KERNEL $g
|
cp ${f} ${dir}/${g}
|
||||||
cp $f $dir/$g
|
done >> ${cfg}
|
||||||
done >> $cfg
|
|
||||||
$mkisofs -quiet -l -o $out -c boot.cat -b isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table $dir
|
case "${LEGACY}" in
|
||||||
rm -fr $dir
|
1)
|
||||||
if [ -n "$isohybrid" ]
|
# check for mtools
|
||||||
then
|
case "$(mtools -V)" in
|
||||||
$isohybrid $out >/dev/null
|
Mtools\ version\ 3.9.9*|Mtools\ version\ 3.9.1[0-9]*|[mM]tools\ *\ [4-9].*)
|
||||||
fi
|
;;
|
||||||
|
*)
|
||||||
|
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}
|
||||||
|
|
|
@ -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
|
|
Loading…
Reference in New Issue