#!/bin/sh # lh_binary_usb-hdd(1) - build binary usb-hdd image # Copyright (C) 2006-2008 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="${LH_BASE:-/usr/share/live-helper}" for FUNCTION in "${LH_BASE}"/functions/*.sh do . "${FUNCTION}" done # Setting static variables DESCRIPTION="build binary image" HELP="" USAGE="${PROGRAM} [--force]" Arguments "${@}" # Reading configuration files Read_conffile config/all config/common config/bootstrap config/chroot config/binary config/source Set_defaults if ! In_list usb-hdd "${LH_BINARY_IMAGES}" then exit 0 fi Echo_message "Begin building binary usb-hdd image..." # Requiring stage file Require_stagefile .stage/bootstrap Require_stagefile .stage/chroot_proc # Checking stage file Check_stagefile .stage/binary_usb-hdd # Checking lock file Check_lockfile .lock # Creating lock file Create_lockfile .lock # Checking depends Check_package chroot/sbin/mkdosfs dosfstools Check_package chroot/usr/share/doc/mtools mtools Check_package chroot/sbin/parted parted if [ "${LH_ARCHITECTURE}" = "sparc" ] then case "${LH_BINARY_FILESYSTEM}" in ext2|ext3) Check_package chroot/sbin/mkfs.ext2 e2fsprogs ;; *) Echo_error "Sparc only supports booting from ext2, ext3 (or ufs)" exit 1 ;; esac fi case "${LH_BOOTLOADER}" in grub) Check_package chroot/usr/sbin/grub grub ;; syslinux) Check_package chroot/usr/bin/syslinux syslinux ;; esac # Restoring cache Restore_cache cache/packages_binary # Installing depends Install_package # Remove old binary if [ -f binary.img ] then rm -f binary.img fi # Enforce fat32 if we find individual files bigger than 2GB if [ "${LH_BINARY_FILESYSTEM}" = "fat16" ] && [ -n "$(find binary -size +1999M)" ] then Echo_warning "FAT16 doesn't support files larger than 2GB, automatically enforcing FAT32." LH_BINARY_FILESYSTEM="fat32" export LH_BINARY_FILESYSTEM fi # Everything which comes here needs to be cleaned up, DU_DIM="$(du -ms binary | cut -f1)" REAL_DIM="$(Calculate_partition_size ${DU_DIM} ${LH_BINARY_FILESYSTEM})" dd if=/dev/zero of=chroot/binary.img bs=1024k count=0 seek=${REAL_DIM} FREELO="$(${LH_LOSETUP} -f)" if [ ! -b chroot/${FREELO} ] then MAKEDEV="true" mv chroot/dev chroot/dev.tmp find /dev | cpio -dmpu chroot fi echo "!!! The following error/warning messages can be ignored !!!" Losetup $FREELO chroot/binary.img 0 case "${LH_ARCHITECTURE}" in sparc) PARTITION_TABLE_TYPE="sun" ;; *) PARTITION_TABLE_TYPE="msdos" ;; esac case "${LH_BINARY_FILESYSTEM}" in ext2|ext3) PARTITION_TYPE="ext2" ;; fat16|fat32) PARTITION_TYPE="${LH_BINARY_FILESYSTEM}" ;; *) Echo_error "Unsupported binary filesystem %s" "${LH_BINARY_FILESYSTEM}" exit 1 ;; esac case "${LH_CHROOT_BUILD}" in enabled) Chroot "parted -s ${FREELO} mklabel ${PARTITION_TABLE_TYPE}" || true Chroot "parted -s ${FREELO} mkpart primary ${PARTITION_TYPE} 0.0 100%" || true Chroot "parted -s ${FREELO} set 1 boot on" || true Chroot "parted -s ${FREELO} set 1 lba off" || true if [ "${LH_BOOTLOADER}" = "syslinux" ] then cat chroot/usr/lib/syslinux/mbr.bin > ${FREELO} fi ;; disabled) parted -s ${FREELO} mklabel ${PARTITION_TABLE_TYPE} || true parted -s ${FREELO} mkpart primary ${PARTITION_TYPE} 0.0 100% parted -s ${FREELO} set 1 boot on || true parted -s ${FREELO} set 1 lba off || true if [ "${LH_BOOTLOADER}" = "syslinux" ] then cat /usr/lib/syslinux/mbr.bin > ${FREELO} fi ;; esac ${LH_LOSETUP} -d ${FREELO} FREELO="$(${LH_LOSETUP} -f)" Losetup $FREELO chroot/binary.img 1 case "${LH_BINARY_FILESYSTEM}" in ext2|ext3) MKFS="${LH_BINARY_FILESYSTEM}" MKFS_OPTIONS="-L DEBIAN_LIVE -m 0" ;; fat16) MKFS="vfat" MKFS_OPTIONS="-F 16 -n DEBIAN_LIVE" ;; fat32) MKFS="vfat" MKFS_OPTIONS="-F 32 -n DEBIAN_LIVE" ;; esac case "${LH_CHROOT_BUILD}" in enabled) Chroot "mkfs.${MKFS} ${MKFS_OPTIONS} ${FREELO}" ;; disabled) mkfs.${MKFS} ${MKFS_OPTIONS} ${FREELO} ;; esac case "${LH_BINARY_FILESYSTEM}" in fat*) CP_OPTIONS="-L" ;; esac mkdir -p chroot/binary.tmp ${LH_ROOT_COMMAND} mount ${FREELO} chroot/binary.tmp cp -r -T ${CP_OPTIONS} binary/ chroot/binary.tmp FIXME() { if [ "${LH_BOOTLOADER}" = "grub" ] then cat > chroot/grub.sh << EOF cd binary.tmp grub --batch << EOM find /live/vmlinuz EOM EOF rootpartition="$(Chroot 'sh grub.sh' 2>/dev/null | grep -A 1 'find /live/vmlinuz' | grep -v 'find /live/vmlinuz')" usbdev="$(echo $rootpartition | sed -e 's|,[[:digit:]]||')" echo "Root partition is $rootpartition, device is: $usbdev" echo "WAITING..." && read WAIT #cat > chroot/grub.sh << EOF #grub --batch << EOM #root $rootpartition #setup $usbdev #EOM #EOF #Chroot "sh grub.sh" rm -f chroot/grub.sh fi } ${LH_ROOT_COMMAND} umount chroot/binary.tmp rmdir chroot/binary.tmp if [ "${LH_BOOTLOADER}" = "syslinux" ] then case "${LH_CHROOT_BUILD}" in enabled) Chroot "syslinux ${FREELO}" ;; disabled) syslinux ${FREELO} ;; esac fi ${LH_LOSETUP} -d ${FREELO} echo "!!! The above error/warning messages can be ignored !!!" if [ -n "${MAKEDEV}" ] then rm -rf chroot/dev mv chroot/dev.tmp chroot/dev fi mv chroot/binary.img ./ # Saving cache Save_cache cache/packages_binary # Removing depends Remove_package # Creating stage file Create_stagefile .stage/binary_usb-hdd