X-Git-Url: https://git.grml.org/?p=grml-live.git;a=blobdiff_plain;f=grml-live;h=5e081bab90036b4055b3f8db3ed59484cd930973;hp=fb7d8bad28a24de209887cf1358a6d1eac5a0eb1;hb=82345f34a6fd3441ce4c65483c056e078370d6f9;hpb=d902fc9343030b767f2bd1fbecfa8877a1e527df diff --git a/grml-live b/grml-live index fb7d8ba..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,10 +13,17 @@ 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 -GRML_LIVE_VERSION='0.9.16' +GRML_LIVE_VERSION='0.9.18' PN="$(basename $0)" CMDLINE="$0 $@" ISO_DATE="$(date +%Y-%m-%d)" @@ -559,7 +568,7 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then for file in ${TEMPLATE_DIRECTORY}/boot/addons/* ; do test -f $file && cp $file "$BUILD_OUTPUT"/boot/addons/ done - + if [ -z "$NO_ADDONS_BSD4GRML" ] ; then cp -a ${TEMPLATE_DIRECTORY}/boot/addons/bsd4grml "$BUILD_OUTPUT"/boot/addons/ fi @@ -569,6 +578,9 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then if ! [ -d "${BUILD_OUTPUT}/boot/grub" ] ; then cp -a ${TEMPLATE_DIRECTORY}/boot/grub "$BUILD_OUTPUT"/boot/ fi + # make sure we have recent template files available, otherwise updating + # the strings like $GRML_NAME and $VERSION might be out of date + cp ${TEMPLATE_DIRECTORY}/boot/grub/* "$BUILD_OUTPUT"/boot/grub/ if ! [ -d "${TEMPLATE_DIRECTORY}"/GRML ] ; then log "${TEMPLATE_DIRECTORY}/GRML does not exist. Exiting." @@ -599,10 +611,14 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then sed -i "s/%VERSION%/$VERSION/" "$BUILD_OUTPUT"/boot/grub/menu.lst sed -i "s/%GRML_NAME%/$SHORT_GRML_NAME/" "$BUILD_OUTPUT"/boot/grub/menu.lst + sed -i "s/%VERSION%/$VERSION/" "$BUILD_OUTPUT"/boot/grub/grub.cfg + sed -i "s/%GRML_NAME%/$SHORT_GRML_NAME/" "$BUILD_OUTPUT"/boot/grub/grub.cfg + # make sure the squashfs filename is set accordingly: GRML_NAME_SQUASHFS="$GRML_NAME.squashfs" sed -i "s/%GRML_NAME_SQUASHFS%/$GRML_NAME_SQUASHFS/" "$BUILD_OUTPUT"/boot/isolinux/isolinux.cfg sed -i "s/%GRML_NAME_SQUASHFS%/$GRML_NAME_SQUASHFS/" "$BUILD_OUTPUT"/boot/isolinux/syslinux.cfg + sed -i "s/%GRML_NAME_SQUASHFS%/$GRML_NAME_SQUASHFS/" "$BUILD_OUTPUT"/boot/grub/menu.lst GRML_NAME_SQUASHFS="$(cut_string 20 "$GRML_NAME_SQUASHFS")" GRML_NAME_SQUASHFS="$(extend_string_end 20 "$GRML_NAME_SQUASHFS")" @@ -728,9 +744,43 @@ 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" + einfo "Skipping creation of hybrid ISO file as requested via HYBRID_METHOD=disable" + eend 0 + # use isohybrid only on request + elif [ "$HYBRID_METHOD" = "isohybrid" ] ; then + if ! which isohybrid >/dev/null 2>&1 ; then + bailout 12 "isohybrid binary not found - please install syslinux/syslinux-common" + else + log "Creating hybrid ISO file with isohybrid method" + einfo "Creating hybrid ISO file with isohybrid method" + isohybrid "${ISO_OUTPUT}/${ISO_NAME}" + eend $? + fi + # by default use our manifold boot method: + else + if ! [ -r boot/grub/core.img ] ; then + ewarn "boot/grub/core.img not found, not creating manifold boot ISO file" + else + log "Creating hybrid ISO file with manifold method" + einfo "Creating hybrid ISO file with manifold method" + echo 1 63 | mksh /usr/share/grml-live/scripts/bootgrub.mksh | cat - boot/grub/core.img | dd conv=notrunc of="${ISO_OUTPUT}/${ISO_NAME}" conv=notrunc + eend $? + fi + fi + # generate md5sum and sha1sum of ISO if we are using class 'RELEASE': case $CLASSES in *RELEASE*) [ "$RC" = 0 ] && \