X-Git-Url: https://git.grml.org/?a=blobdiff_plain;f=grml-live;h=e43ae7ec580f2b5c49a5a430a3b1ee6643a1e3fe;hb=b0f14af53e9c397e5809583f9d69fd804e9d08bc;hp=8b3ac133fc26aa76b7e4271e5f0f6de9ce7b203a;hpb=e68d43e7395ac69d800242fbc83081b0c91e945c;p=grml-live.git diff --git a/grml-live b/grml-live index 8b3ac13..e43ae7e 100755 --- a/grml-live +++ b/grml-live @@ -56,6 +56,7 @@ Usage: $PN [options, see as follows] -N bootstrap (build chroot) only, do not create files for ISO -o main output directory of the build process -q skip mksquashfs + -Q skip netboot package build -r release name -s Debian suite; values: etch, lenny, squeeze, sid -t place of the templates @@ -183,6 +184,7 @@ bailout() { [ -n "${CHROOT_OUTPUT}" -a -d "${CHROOT_OUTPUT}" ] && chown -R "${CHOWN_USER}:" "${CHROOT_OUTPUT}" [ -n "${ISO_OUTPUT}" -a -d "${ISO_OUTPUT}" ] && chown -R "${CHOWN_USER}:" "${ISO_OUTPUT}" [ -n "${LOG_OUTPUT}" -a -d "${LOG_OUTPUT}" ] && chown -R "${CHOWN_USER}:" "${LOG_OUTPUT}" + [ -n "${NETBOOT}" -a -d "${NETBOOT}" ] && chown -R "${CHOWN_USER}:" "${NETBOOT}" [ -n "${CHROOT_ARCHIVE}" -a -f "${CHROOT_ARCHIVE}" ] && chown -R "${CHOWN_USER}:" "${CHROOT_ARCHIVE}" eend 0 fi @@ -284,7 +286,7 @@ copy_addon_file() { # }}} # command line parsing {{{ -while getopts "a:C:c:d:D:g:i:I:o:r:s:t:T:U:v:AbBFnNquVz" opt; do +while getopts "a:C:c:d:D:g:i:I:o:r:s:t:T:U:v:AbBFnNqQuVz" opt; do case "$opt" in a) ARCH="$OPTARG" ;; A) PACK_ARTIFACTS=1 ;; @@ -301,6 +303,7 @@ while getopts "a:C:c:d:D:g:i:I:o:r:s:t:T:U:v:AbBFnNquVz" opt; do N) BOOTSTRAP_ONLY=1; SKIP_MKISOFS=1; SKIP_MKSQUASHFS=1 ;; o) OUTPUT="$OPTARG" ;; q) SKIP_MKSQUASHFS=1 ;; + Q) SKIP_NETBOOT=1 ;; r) RELEASENAME="$OPTARG" ;; s) SUITE="$OPTARG" ;; t) TEMPLATE_DIRECTORY="$OPTARG";; @@ -371,6 +374,7 @@ fi [ -n "$ISO_OUTPUT" ] || ISO_OUTPUT="$OUTPUT/grml_isos" [ -n "$LOG_OUTPUT" ] || LOG_OUTPUT="$OUTPUT/grml_logs" [ -n "$REPORTS" ] || REPORTS="${LOG_OUTPUT}/reports/" +[ -n "$NETBOOT" ] || NETBOOT="${OUTPUT}/netboot/" # }}} # some misc checks before executing FAI {{{ @@ -436,6 +440,7 @@ if [ -z "$FORCE" ] ; then echo " Bootstrapping only and not building (files for) ISO." else [ -n "$SKIP_MKSQUASHFS" ] && echo " Skipping creation of SQUASHFS file." + [ -n "$SKIP_NETBOOT" ] && echo " Skipping creation of NETBOOT package." [ -n "$SKIP_MKISOFS" ] && echo " Skipping creation of ISO file." [ -n "$BUILD_ONLY" ] && echo " Executing BUILD_ONLY instead of fresh installation or UPDATE." [ -n "$BUILD_DIRTY" ] && echo " Executing BUILD_DIRTY to leave chroot untouched." @@ -457,6 +462,7 @@ if [ -n "${PACK_ARTIFACTS}" ]; then [ -n "${BUILD_OUTPUT}" -a -d "${BUILD_OUTPUT}" ] && rm -r "${BUILD_OUTPUT}" [ -n "${ISO_OUTPUT}" -a -d "${ISO_OUTPUT}" ] && rm -r "${ISO_OUTPUT}" [ -n "${LOG_OUTPUT}" -a -d "${LOG_OUTPUT}" ] && rm -r "${LOG_OUTPUT}" + [ -n "${NETBOOT}" -a -d "${NETBOOT}" ] && rm -r "${NETBOOT}" fi # }}} @@ -878,27 +884,12 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then fi cp ${TEMPLATE_DIRECTORY}/boot/grub/* "$BUILD_OUTPUT"/boot/grub/ - if [ -e ${TEMPLATE_DIRECTORY}/compat/grub/linux.mod ]; then - cp "${TEMPLATE_DIRECTORY}"/compat/grub/* "${BUILD_OUTPUT}"/boot/grub/ - else - if ! which "grub-mkimage" >/dev/null 2>&1 ; then - log "grub-mkimage not found, skipping Grub step therefore." ; eend 0 - ewarn "grub-mkimage not found, skipping Grub step therefore." - ewarn "Please install grub-pc-bin or grub-common >= 1.98+20100804-14." ; eend 0 - elif ! grub-mkimage --help | grep -q -- --format ; then - log "grub-mkimage does not support --format=i386-pc, skipping Grub step therefore." ; eend 0 - ewarn "grub-mkimage does not support --format=i386-pc, skipping Grub step therefore." - ewarn "Please install grub-common >= 1.98+20100804-14 or grub-pc-bin." ; eend 0 - else - # copy system grub files if grml-live-compat is not installed - cp -a /usr/lib/grub/*-pc/*.mod "${BUILD_OUTPUT}"/boot/grub/ - cp -a /usr/lib/grub/*-pc/*.o "${BUILD_OUTPUT}"/boot/grub/ - cp -a /usr/lib/grub/*-pc/*.lst "${BUILD_OUTPUT}"/boot/grub/ - cp -a /usr/share/grub/ascii.pf2 "${BUILD_OUTPUT}"/boot/grub/ - grub-mkimage -d /usr/lib/grub/*-pc -o \ - "${BUILD_OUTPUT}/boot/grub/core.img" biosdisk iso9660 --format=i386-pc - fi - fi + # copy grub files from target + cp -a "${CHROOT_OUTPUT}"/usr/lib/grub/*-pc/*.mod "${BUILD_OUTPUT}"/boot/grub/ + cp -a "${CHROOT_OUTPUT}"/usr/lib/grub/*-pc/*.o "${BUILD_OUTPUT}"/boot/grub/ + cp -a "${CHROOT_OUTPUT}"/usr/lib/grub/*-pc/*.lst "${BUILD_OUTPUT}"/boot/grub/ + cp -a "${CHROOT_OUTPUT}"/usr/share/grub/ascii.pf2 "${BUILD_OUTPUT}"/boot/grub/ + cp -a "${CHROOT_OUTPUT}"/boot/grub/core.img "${BUILD_OUTPUT}"/boot/grub/ if ! [ -d "${TEMPLATE_DIRECTORY}"/GRML ] ; then log "Error: ${TEMPLATE_DIRECTORY}/GRML does not exist. Exiting." @@ -1192,8 +1183,7 @@ else fi # support xorriso as well mkisofs and genisoimage - if which xorriso >/dev/null 2>&1 && \ - dpkg --compare-versions $(dpkg-query -W -f='${Version}\n' xorriso 2>/dev/null) gt-nl 1.1.6-2 ; then + if which xorriso >/dev/null 2>&1 ; then MKISOFS='xorriso -as mkisofs' elif which mkisofs >/dev/null 2>&1; then MKISOFS='mkisofs' @@ -1211,28 +1201,39 @@ else case "$MKISOFS" in xorriso*) einfo "Using xorriso for ISO generation." ; eend 0 + eindent - if [ -r "${CHROOT_OUTPUT}/var/lib/grml_live_efi.img" ] ; then - einfo "Found /var/lib/grml_live_efi.img - moving to /boot/efi.img for ISO." - log "Found /var/lib/grml_live_efi.img - moving to /boot/efi.img for ISO." - mv "${CHROOT_OUTPUT}/var/lib/grml_live_efi.img" "${BUILD_OUTPUT}/boot/efi.img" - eend $? - fi - - if [ -r "${CHROOT_OUTPUT}/var/lib/grml_live_bootx64.efi" ] ; then - einfo "Found /var/lib/grml_live_bootx64.efi - moving to /efi/boot/bootx64.efi for ISO" - log "Found /var/lib/grml_live_bootx64.efi - moving to /efi/boot/bootx64.efi for ISO" - mkdir -p "${BUILD_OUTPUT}/efi/boot/" - mv "${CHROOT_OUTPUT}/var/lib/grml_live_bootx64.efi" "${BUILD_OUTPUT}/efi/boot/bootx64.efi" - eend $? + if ! dpkg --compare-versions $(dpkg-query -W -f='${Version}\n' xorriso 2>/dev/null) gt-nl 1.1.6-1 ; then + log "Disabling (U)EFI boot support since xorriso version is not recent enough." + ewarn "Disabling (U)EFI boot support since xorriso version is not recent enough." ; eend 0 + else + log "xorriso with -eltorito-alt-boot present, enabling (U)EFI boot support." + einfo "xorriso with -eltorito-alt-boot present, enabling (U)EFI boot support." ; eend 0 + + if [ -r "${CHROOT_OUTPUT}/var/lib/grml_live_efi.img" ] ; then + einfo "Found /var/lib/grml_live_efi.img - moving to /boot/efi.img for ISO." + log "Found /var/lib/grml_live_efi.img - moving to /boot/efi.img for ISO." + mv "${CHROOT_OUTPUT}/var/lib/grml_live_efi.img" "${BUILD_OUTPUT}/boot/efi.img" + eend $? + fi + + if [ -r "${CHROOT_OUTPUT}/var/lib/grml_live_bootx64.efi" ] ; then + einfo "Found /var/lib/grml_live_bootx64.efi - moving to /efi/boot/bootx64.efi for ISO" + log "Found /var/lib/grml_live_bootx64.efi - moving to /efi/boot/bootx64.efi for ISO" + mkdir -p "${BUILD_OUTPUT}/efi/boot/" + mv "${CHROOT_OUTPUT}/var/lib/grml_live_bootx64.efi" "${BUILD_OUTPUT}/efi/boot/bootx64.efi" + eend $? + fi + + if [ -r "${BUILD_OUTPUT}"/boot/efi.img ] ; then + einfo "/boot/efi.img found and amd64 architecture present, extending boot arguments." + log "/boot/efi.img found and amd64 architecture present, extending boot arguments." + BOOT_ARGS="$BOOT_ARGS -boot-info-table -eltorito-alt-boot -e boot/efi.img -no-emul-boot" + eend $? + fi fi - if [ -r "${BUILD_OUTPUT}"/boot/efi.img ] ; then - einfo "/boot/efi.img found and amd64 architecture present, extending boot arguments." - log "/boot/efi.img found and amd64 architecture present, extending boot arguments." - BOOT_ARGS="$BOOT_ARGS -boot-info-table -eltorito-alt-boot -e boot/efi.img -no-emul-boot" - eend $? - fi + eoutdent ;; esac ;; @@ -1344,6 +1345,61 @@ else fi # }}} +# netboot package {{{ +create_netbootpackage() { + local OUTPUT_FILE="${NETBOOT}/grml_netboot_package_${GRML_NAME}_${VERSION}.tar.bz2" + + if [ -f "${OUTPUT_FILE}" -a -z "$UPDATE" -a -z "$BUILD_ONLY" -a -z "$BUILD_DIRTY" ] ; then + log "Skipping stage 'netboot' as $OUTPUT_FILE exists already." + ewarn "Skipping stage 'netboot' as $OUTPUT_FILE exists already." ; eend 0 + return 0 + elif [ -n "$SKIP_NETBOOT" ] ; then + log "Skipping stage 'netboot' as requested via option -Q" + ewarn "Skipping stage 'netboot' as requested via option -Q" ; eend 0 + return 0 + fi + + mkdir -p "$NETBOOT" + + if ! [ -r "${CHROOT}/usr/lib/syslinux/pxelinux.0" ] ; then + ewarn "File /usr/lib/syslinux/pxelinux.0 not found in build chroot." ; eend 0 + eindent + einfo "Install syslinux[-common] package in chroot to get a netboot package." + eoutdent + return 0 + fi + + local OUTPUTDIR="${NETBOOT}/build_tmp" + local WORKING_DIR="${OUTPUTDIR}/grml_netboot_package_${GRML_NAME}_${VERSION}/tftpboot/" + + mkdir -p "$WORKING_DIR" + + cp "${CHROOT_OUTPUT}"/boot/vmlinuz-* "$WORKING_DIR"/linux26 + cp "${CHROOT_OUTPUT}"/boot/initrd.img-* "$WORKING_DIR"/initrd.img + cp "${CHROOT_OUTPUT}"/usr/lib/syslinux/pxelinux.0 "${WORKING_DIR}/pxelinux.0" + + if [ -r "${BUILD_OUTPUT}/boot/isolinux/netboot.cfg" ] ; then + mkdir -p "${WORKING_DIR}/pxelinux.cfg/default" + 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 + fi + + mkdir -p "${WORKING_DIR}/pxelinux.cfg" + + if tar -C "$OUTPUTDIR" -jcf "${OUTPUT_FILE}" "grml_netboot_package_${GRML_NAME}_${VERSION}" ; then + einfo "Generated netboot package ${OUTPUT_FILE}" ; eend 0 + rm -rf "${OUTPUTDIR}" + else + rm -rf "${OUTPUTDIR}" + eerror "Could not generate netboot package ${OUTPUT_FILE}" ; eend 1 + bailout 21 + fi +} + +create_netbootpackage +# }}} + # pack artifacts {{{ if [ -n "$PACK_ARTIFACTS" ]; then log "Packing artifcats"