#!/bin/sh # lh_binary_net(1) - build netboot binary image # Copyright (C) 2006-2009 Daniel Baumann # # live-helper comes with ABSOLUTELY NO WARRANTY; for details see COPYING. # This is free software, and you are welcome to redistribute it # under certain conditions; see COPYING for details. set -e # Including common functions . "${LH_BASE:-/usr/share/live-helper}"/functions.sh # Setting static variables DESCRIPTION="$(Echo 'build netboot binary image')" HELP="" USAGE="${PROGRAM} [--force]" Arguments "${@}" # Reading configuration files Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source Set_defaults if ! In_list net "${LH_BINARY_IMAGES}" then exit 0 fi if [ "${LH_NET_TARBALL}" = "none" ] then exit 0 fi Echo_message "Begin building binary netboot image..." # Requiring stage file Require_stagefile .stage/config .stage/bootstrap # Checking stage file Check_stagefile .stage/binary_net # Checking lock file Check_lockfile .lock # Creating lock file Create_lockfile .lock if [ "${LH_ARCHITECTURE}" = "sparc" ] then # Checking depends Check_package chroot/usr/bin/elftoaout sparc-utils # Restoring cache Restore_cache cache/packages_binary # Installing depends Install_package # Set target and source directories DESTDIR="tftpboot" case "${LH_INITRAMFS}" in casper) ORIGDIR="binary/casper" ;; live-initramfs) ORIGDIR="binary/live" ;; esac # Find defaults DEFAULT_FLAVOUR="$(echo ${LH_LINUX_FLAVOURS} | awk '{ print $1 }')" DEFAULT_KERNEL="$(basename chroot/boot/vmlinuz-*${DEFAULT_FLAVOUR})" DEFAULT_INITRD="initrd.img-$(echo ${DEFAULT_KERNEL} | sed -e 's|vmlinuz-||')" DEFAULT_MAP="$(echo chroot/boot/System.map-*${DEFAULT_FLAVOUR})" gzip -cd ${ORIGDIR}/${DEFAULT_KERNEL} > kernel.tmp mkdir -p ${DESTDIR} rm -f ${DESTDIR}/boot.img elftoaout -o ${DESTDIR}/boot.img kernel.tmp case "${DEFAULT_FLAVOUR}" in sparc32) piggyback ${DESTDIR}/boot.img ${DEFAULT_MAP} ${ORIGDIR}/${DEFAULT_INITRD} ;; sparc64) piggyback64 ${DESTDIR}/boot.img ${DEFAULT_MAP} ${ORIGDIR}/${DEFAULT_INITRD} ;; *) Echo_error "Invalid default kernel flavour for sparc \"%s\"" "${DEFAULT_FLAVOUR}" exit 1; ;; esac # Pad boot.img REMAINDER=$((( 4 - $(stat -c %s ${DESTDIR}/boot.img) % 4 ) % 4)) dd if=/dev/zero bs=1 count=${REMAINDER} >> ${DESTDIR}/boot.img # No need for kernel and initrd images in the binary rm -f ${ORIGDIR}/vmlinuz-* rm -f ${ORIGDIR}/initrd.img-* # Clean temporaries rm -f kernel.tmp # Saving cache Save_cache cache/packages_binary # Removing depends Remove_package fi # Remove old binary rm -f binary-net.tar.bz2 rm -f binary-net.tar.gz rm -f binary-net.tar # Creating image file ROOT_DIR=$(basename ${LH_NET_ROOT_PATH}) if [ "${ROOT_DIR}" = "chroot" ] then mv chroot chroot.tmp fi if [ "${ROOT_DIR}" != "binary" ] then mv binary ${ROOT_DIR} fi mkdir binary.tmp mv ${ROOT_DIR} tftpboot binary.tmp cd binary.tmp case "${LH_NET_TARBALL}" in bzip2) tar cfj ../binary-net-tar.bz2 * ;; gzip) if gzip --help | grep -qs "\-\-rsyncable" then tar cf ../binary-net.tar * gzip --rsyncable --best ../binary-net.tar else tar cfz ../binary-net.tar.gz * fi ;; tar) tar cf ../binary-net.tar * ;; esac mv * ../ cd "${OLDPWD}" rmdir binary.tmp if [ "${ROOT_DIR}" != "binary" ] then mv ${ROOT_DIR} binary fi if [ "${ROOT_DIR}" = "chroot" ] then mv chroot.tmp chroot fi # Creating stage file Create_stagefile .stage/binary_net