From: Thorsten Glaser Date: Sun, 7 Jun 2009 16:15:44 +0000 (+0000) Subject: Pad official ISOs to multiples of 256 KiB. X-Git-Tag: v0.9.18~10 X-Git-Url: https://git.grml.org/?p=grml-live.git;a=commitdiff_plain;h=82345f34a6fd3441ce4c65483c056e078370d6f9 Pad official ISOs to multiples of 256 KiB. Add “-no-pad” to all mkisofs calls (the mkisofs padding for CD-ROM readahead support is 32K or 48K usually), and apply padding ourselves for partition table support. We will use cylinders of 256 KiB (split in 16 tracks à 32 sectors à 512 bytes) for these. This means that the padding we add is 512 bytes at least, and a whole 256 KiB at most. CD-ROM readahead padding is done by the “-pad” option of cdrecord, which is enabled by default and adds another 300 KiB, but only on the CD itself. Signed-off-by: Thorsten Glaser --- diff --git a/grml-live b/grml-live index 0e0a639..5e081ba 100755 --- a/grml-live +++ b/grml-live @@ -1,7 +1,9 @@ #!/bin/bash # Filename: grml-live # Purpose: build process script for generating a (grml based) Linux Live-ISO -# Authors: grml-team (grml.org), (c) Michael Prokop +# Authors: grml-team (grml.org), +# (c) Michael Prokop , +# (c) Thorsten Glaser # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2 or any later version. ################################################################################ @@ -11,6 +13,13 @@ export LANG=C export LC_ALL=C +# define function getfilesize before "set -e" +if stat --help >/dev/null 2>&1; then + getfilesize='stat -c %s' # GNU stat +else + getfilesize='stat -f %z' # BSD stat +fi + # exit on any error: set -e @@ -735,9 +744,16 @@ else log "mkisofs -V '${GRML_NAME} ${VERSION}' -publisher 'grml-live | grml.org' -l -r -J -no-emul-boot -boot-load-size 4 -boot-info-table -b $BOOT_FILE -o ${ISO_OUTPUT}/${ISO_NAME} ." mkisofs -V "${GRML_NAME} ${VERSION}" -publisher 'grml-live | grml.org' \ -l -r -J -no-emul-boot -boot-load-size 4 -boot-info-table \ - -b $BOOT_FILE \ + -b $BOOT_FILE -no-pad \ -o "${ISO_OUTPUT}/${ISO_NAME}" . ; RC=$? + # pad the output ISO to multiples of 256 KiB for partition table support + siz=$($getfilesize "${ISO_OUTPUT}/${ISO_NAME}") + cyls=$((siz / 512 / 32 / 16 + 1)) # C=$cyls H=16 S=32 + siz=$((cyls * 16 * 32 * 512)) # size after padding + dd if=/dev/zero bs=1 count=1 seek=$((siz - 1)) \ + of="${ISO_OUTPUT}/${ISO_NAME}" 2>/dev/null + # support disabling hybrid ISO image if [ "$HYBRID_METHOD" = "disable" ] ; then\ log "Skipping creation of hybrid ISO file as requested via HYBRID_METHOD=disable" diff --git a/remaster/grml-live-remaster b/remaster/grml-live-remaster index 9d62cf7..15aec22 100755 --- a/remaster/grml-live-remaster +++ b/remaster/grml-live-remaster @@ -1,7 +1,10 @@ #!/bin/sh # Filename: grml-live-remaster # Purpose: remaster a grml from the live cd -# Authors: grml-team (grml.org), (c) Michael Schierl , (c) Michael Prokop +# Authors: grml-team (grml.org), +# (c) Michael Schierl , +# (c) Michael Prokop , +# (c) Thorsten Glaser # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2 or any later version. ################################################################################ @@ -9,6 +12,13 @@ # this script currently lacks LOTS of error checking code... any help welcome... ################################################################################ +# define function getfilesize before "set -e" +if stat --help >/dev/null 2>&1; then + getfilesize='stat -c %s' # GNU stat +else + getfilesize='stat -f %z' # BSD stat +fi + set -e # exit on any error VERSION='0.0.2' @@ -20,7 +30,7 @@ GRML_LIVE_EDITOR=${VISUAL:-${EDITOR:-vi}} # }}} # make sure we have what we need {{{ -check4progs mkisofs mksquashfs || exit 1 +check4progs mkisofs mksquashfs stat || exit 1 check4root || exit 1 # }}} @@ -109,9 +119,17 @@ else fi mkisofs -b $ISOLINUX -no-emul-boot -c $ISOLINUX_BOOTCAT \ - -boot-info-table -l -r -J -o "$1" /remaster/iso + -boot-info-table -boot-load-size 4 -no-pad \ + -l -r -J -o "$1" /remaster/iso +# pad for partition table +siz=$($getfilesize "$1") +cyls=$((siz / 512 / 32 / 16 + 1)) # C=$cyls H=16 S=32 (= 256 KiB units) +siz=$((cyls * 16 * 32 * 512)) # size after padding +dd if=/dev/zero bs=1 count=1 seek=$((siz - 1)) of="$1" 2>/dev/null rm -R /remaster/iso +# here is the place to apply bootgrub.mksh ☺ + echo "" echo "ISO generation complete:" ls --color -l "$1"