X-Git-Url: http://git.grml.org/?p=grml-live.git;a=blobdiff_plain;f=grml-live;h=1b119c1999036568c97d984eb9098426392b3077;hp=e2719b189d4500a7f67f07d10607da4c308f9394;hb=fcd3d3c959291bc4b88f3f26c0ec3347a826eb3d;hpb=b18889f0d17b02be6477e18bdc6657f374d60631 diff --git a/grml-live b/grml-live index e2719b1..1b119c1 100755 --- a/grml-live +++ b/grml-live @@ -81,13 +81,13 @@ More details: man grml-live + /usr/share/doc/grml-live/grml-live.html Please send your bug reports and feedback to the grml-team: http://grml.org/bugs/ " + [ "$(id -u 2>/dev/null)" != 0 ] && echo "Please notice that this script requires root permissions." } # make sure it's possible to get usage information without being # root or actually executing the script if [ "$1" = '-h' -o "$1" = '--help' ] ; then usage - [ "$(id -u 2>/dev/null)" != 0 ] && echo "Please notice that this script requires root permissions." exit 0 fi # }}} @@ -152,6 +152,7 @@ umount_all() { # make sure we don't leave any mounts - FAI doesn't remove them always umount $CHROOT_OUTPUT/proc/sys/fs/binfmt_misc 2>/dev/null || /bin/true umount $CHROOT_OUTPUT/proc 2>/dev/null || /bin/true + umount $CHROOT_OUTPUT/run 2>/dev/null || /bin/true umount $CHROOT_OUTPUT/sys 2>/dev/null || /bin/true umount $CHROOT_OUTPUT/dev/pts 2>/dev/null || /bin/true umount $CHROOT_OUTPUT/dev 2>/dev/null || /bin/true @@ -291,7 +292,7 @@ copy_addon_file() { # }}} # command line parsing {{{ -while getopts "a:C:c:d:D:e:g:i:I:o:r:s:t:U:v:AbBFnNqQuVz" opt; do +while getopts "a:C:c:d:D:e:g:i:I:o:r:s:t:U:v:AbBFhnNqQuVz" opt; do case "$opt" in a) ARCH="$OPTARG" ;; A) CLEAN_ARTIFACTS=1 ;; @@ -303,6 +304,7 @@ while getopts "a:C:c:d:D:e:g:i:I:o:r:s:t:U:v:AbBFnNqQuVz" opt; do D) GRML_FAI_CONFIG="$(readlink -f $OPTARG)" ;; e) EXTRACT_ISO_NAME="$(readlink -f $OPTARG)" ;; g) GRML_NAME="$OPTARG" ;; + h) usage ; bailout 0 ;; i) ISO_NAME="$OPTARG" ;; I) CHROOT_INSTALL="$OPTARG" ;; n) SKIP_MKISOFS=1 ;; @@ -362,11 +364,11 @@ fi [ -n "$GRML_FAI_CONFIG" ] || GRML_FAI_CONFIG='/etc/grml/fai' [ -n "$GRML_NAME" ] || GRML_NAME='grml' [ -n "$HOSTNAME" ] || HOSTNAME='grml' -[ -n "$HYBRID_METHOD" ] || HYBRID_METHOD='manifold' +[ -n "$HYBRID_METHOD" ] || HYBRID_METHOD='isohybrid' [ -n "$NFSROOT_CONF" ] || NFSROOT_CONF="${GRML_FAI_CONFIG}/make-fai-nfsroot.conf" [ -n "$RELEASENAME" ] || RELEASENAME='grml-live rocks' [ -n "$SQUASHFS_EXCLUDES_FILE" ] || SQUASHFS_EXCLUDES_FILE="${GRML_FAI_CONFIG}/config/grml/squashfs-excludes" -[ -n "$SUITE" ] || SUITE='squeeze' +[ -n "$SUITE" ] || SUITE='testing' [ -n "$TEMPLATE_DIRECTORY" ] || TEMPLATE_DIRECTORY='/usr/share/grml-live/templates' [ -n "$USERNAME" ] || USERNAME='grml' [ -n "$VERSION" ] || VERSION='0.0.1' @@ -1180,8 +1182,7 @@ elif [ "$BOOT_METHOD" = "grub2" ] ; then BOOT_ARGS="-no-emul-boot -boot-load-size 4 -b boot/grub/toriboot.bin" fi -# Just until http://bts.grml.org/grml/issue945 has been resolved. -# HYBRID_METHOD defaults to manifold, so make sure the default works OOTB. +# Work around http://bts.grml.org/grml/issue945 if [[ $BOOT_METHOD != isolinux && ($HYBRID_METHOD = isohybrid || $HYBRID_METHOD = manifold) ]]; then log "Setting HYBRID_METHOD to grub2 as hybrid mode does not work with isohybrid yet." ewarn "Setting HYBRID_METHOD to grub2 as hybrid mode does not work with isohybrid yet." @@ -1269,54 +1270,61 @@ else 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 - elif [ "$HYBRID_METHOD" = "manifold" ] ; then - # isoinfo is part of both mkisofs and genisoimage so we're good - bootoff=$(isoinfo -l -i "${ISO_OUTPUT}/${ISO_NAME}" | \ - sed -n '/^.*\[ *\([0-9]*\)[] ].* ISOLINUX.BIN[;1]* *$/s//\1/p') - if ! [ -r boot/grub/core.img ] ; then - ewarn "boot/grub/core.img not found, not creating manifold boot ISO file" - elif [ "${bootoff:-0}" -lt 1 ] ; then - ewarn "isolinux.bin not found on the ISO file, disabling manifold boot" - else - log "Creating hybrid ISO file with manifold method" - einfo "Creating hybrid ISO file with manifold method" - if [ "$HYBRID_METHOD" = "grub2" ] ; then - # 512 bytes: MBR, partition table, load GRUB 2 - echo 4 63 | mksh /usr/share/grml-live/scripts/bootgrub.mksh -A -M 4:0x96 -g $cyls:16:32 - else - # read only one but 2048-byte sized (scale: << 2) sector - echo $bootoff $bootoff | \ - mksh /usr/share/grml-live/scripts/bootilnx.mksh -A -M 4:0x96 -g $cyls:16:32 -S 2 - fi | dd of="${ISO_OUTPUT}/${ISO_NAME}" conv=notrunc 2>/dev/null - eend $? - fi - # use isohybrid as default - else - 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" - # Notes for consideration: - # "-entry 4 -type 1c" - # * using 4 as the partition number is supposed to help with BIOSes - # that only support USB-Zip boot - # * using 1c (i.e. hidden FAT32 LBA), instead of the default 0x17 - # (hidden NTFS, IIRC), as the partition type is sometimes needed - # to get the BIOS even look at the partition created by isohybrid - if isohybrid --help | grep -q -- --uefi ; then - einfo "Detected uefi support for isohybrid, enabling." - ISOHYBRID_OPTIONS=--uefi - fi + 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 + elif [ "$HYBRID_METHOD" = "manifold" ] || [ "$HYBRID_METHOD" = "grub2" ] ; then + # isoinfo is part of both mkisofs and genisoimage so we're good + bootoff=$(isoinfo -l -i "${ISO_OUTPUT}/${ISO_NAME}" | \ + sed -n '/^.*\[ *\([0-9]*\)[] ].* ISOLINUX.BIN[;1]* *$/s//\1/p') + + if ! [ -r boot/grub/core.img ] ; then + log "boot/grub/core.img not found, not creating manifold boot ISO file" + ewarn "boot/grub/core.img not found, not creating manifold boot ISO file" + elif [ "${bootoff:-0}" -lt 1 ] ; then + log "isolinux.bin not found on the ISO file, disabling manifold boot" + ewarn "isolinux.bin not found on the ISO file, disabling manifold boot" + else + if [ "$HYBRID_METHOD" = "grub2" ] ; then + log "Creating hybrid ISO file with manifold/grub2 method" + einfo "Creating hybrid ISO file with manifold/grub2 method" + # 512 bytes: MBR, partition table, load GRUB 2 + echo 4 63 | mksh /usr/share/grml-live/scripts/bootgrub.mksh -A -M 4:0x96 -g $cyls:16:32 + else + log "Creating hybrid ISO file with manifold method" + einfo "Creating hybrid ISO file with manifold method" + # read only one but 2048-byte sized (scale: << 2) sector + echo $bootoff $bootoff | \ + mksh /usr/share/grml-live/scripts/bootilnx.mksh -A -M 4:0x96 -g $cyls:16:32 -S 2 + fi | dd of="${ISO_OUTPUT}/${ISO_NAME}" conv=notrunc 2>/dev/null + eend $? + fi + 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" + # Notes for consideration: + # "-entry 4 -type 1c" + # * using 4 as the partition number is supposed to help with BIOSes + # that only support USB-Zip boot + # * using 1c (i.e. hidden FAT32 LBA), instead of the default 0x17 + # (hidden NTFS, IIRC), as the partition type is sometimes needed + # to get the BIOS even look at the partition created by isohybrid + if isohybrid --help | grep -q -- --uefi ; then + log "Detected uefi support for isohybrid, enabling" + einfo "Detected uefi support for isohybrid, enabling" + ISOHYBRID_OPTIONS=--uefi + fi - log "isohybrid $ISOHYBRID_OPTIONS ${ISO_OUTPUT}/${ISO_NAME}" - isohybrid $ISOHYBRID_OPTIONS "${ISO_OUTPUT}/${ISO_NAME}" - eend $? - fi + log "isohybrid $ISOHYBRID_OPTIONS ${ISO_OUTPUT}/${ISO_NAME}" + isohybrid $ISOHYBRID_OPTIONS "${ISO_OUTPUT}/${ISO_NAME}" + eend $? + fi + else + bailout 12 "Unknown HYBRID_METHOD [${HYBRID_METHOD}]. Supported values: disable, isohybrid, grub2, manifold" fi # generate md5sum and sha1sum of ISO if we are using class 'RELEASE': @@ -1384,11 +1392,19 @@ create_netbootpackage() { if [ -r "${BUILD_OUTPUT}/boot/isolinux/netboot.cfg" ] ; then cp "${BUILD_OUTPUT}/boot/isolinux/netboot.cfg" "${WORKING_DIR}/pxelinux.cfg/default" else - ewarn "File ${BUILD_OUTPUT}/boot/isolinux/netboot.cfg not found." ; eend 0 + log "File ${BUILD_OUTPUT}/boot/isolinux/netboot.cfg not found." + ewarn "File ${BUILD_OUTPUT}/boot/isolinux/netboot.cfg not found." + eindent + log "Hint: Are you using custom templates which do not provide netboot.cfg?" + ewarn "Hint: Are you using custom templates which do not provide netboot.cfg?" ; eend 0 + eoutdent fi if tar -C "$OUTPUTDIR" -jcf "${OUTPUT_FILE}" "grml_netboot_package_${GRML_NAME}_${VERSION}" ; then - sha1sum "${OUTPUT_FILE}" > "${OUTPUT_FILE}.sha1" + ( + cd $(dirname "${OUTPUT_FILE}") + sha1sum $(basename "${OUTPUT_FILE}") > "${OUTPUT_FILE}.sha1" + ) einfo "Generated netboot package ${OUTPUT_FILE}" ; eend 0 rm -rf "${OUTPUTDIR}" else