#!/bin/sh ## live-build(7) - System Build Scripts ## Copyright (C) 2006-2012 Daniel Baumann ## ## This program 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 [ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh # Setting static variables DESCRIPTION="$(Echo 'build 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 hdd "${LIVE_IMAGE_TYPE}" then exit 0 fi Echo_message "Begin building binary hdd image..." # Requiring stage file Require_stagefile .build/config .build/bootstrap .build/chroot_proc # Checking stage file Check_stagefile .build/binary_hdd # Checking lock file Check_lockfile .lock # Creating lock file Create_lockfile .lock # Checking depends case "${LB_BINARY_FILESYSTEM}" in fat*) Check_package chroot/sbin/mkdosfs dosfstools ;; ntfs) Check_package chroot/sbin/mkfs.nfts ntfs-3g ;; esac Check_package chroot/usr/share/doc/mtools mtools Check_package chroot/sbin/parted parted if [ "${LIVE_IMAGE_ARCHITECTURE}" = "sparc" ] then case "${LB_BINARY_FILESYSTEM}" in ext2|ext3|ext4) Check_package chroot/sbin/mkfs.${LB_BINARY_FILESYSTEM} e2fsprogs ;; *) Echo_error "Sparc only supports booting from ext2, ext3, ext4 or ufs." exit 1 ;; esac fi case "${LB_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 ${LIVE_iMAGE_NAME}.img ] then rm -f ${LIVE_iMAGE_NAME}.img fi # Enforce fat32 if we find individual files bigger than 2GB if [ "${LB_BINARY_FILESYSTEM}" = "fat16" ] && [ -n "$(find binary -size +1999M)" ] then Echo_warning "FAT16 doesn't support files larger than 2GB, automatically enforcing FAT32." LB_BINARY_FILESYSTEM="fat32" export LB_BINARY_FILESYSTEM fi # Enforce fat32 if we have images in total bigger than 2GB if [ "${LB_BINARY_FILESYSTEM}" = "fat16" ] && [ "$(du -s binary | awk '{ print $1 }')" -gt "1900000" ] then Echo_warning "FAT16 doesn't support partitions larger than 2GB, automatically enforcing FAT32" LB_BINARY_FILESYSTEM="fat32" export LB_BINARY_FILESYSTEM fi # Enforce ntfs if we find individual files bigger than 4GB if [ "${LB_BINARY_FILESYSTEM}" = "fat32" ] && [ -n "$(find binary -size +3999M)" ] then Echo_warning "FAT32 doesn't support files larger than 4GB, automatically enforcing NTFS." LB_BINARY_FILESYSTEM="ntfs" export LB_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} ${LB_BINARY_FILESYSTEM})" dd if=/dev/zero of=chroot/binary.img bs=1024k count=0 seek=${REAL_DIM} FREELO="$(${LB_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 "${LIVE_IMAGE_ARCHITECTURE}" in sparc) PARTITION_TABLE_TYPE="sun" ;; *) PARTITION_TABLE_TYPE="msdos" ;; esac case "${LB_BINARY_FILESYSTEM}" in ext2|ext3|ext4) PARTITION_TYPE="ext2" ;; fat16|fat32) PARTITION_TYPE="${LB_BINARY_FILESYSTEM}" ;; ntfs) PARTITION_TYPE="NTFS" ;; *) Echo_error "Unsupported binary filesystem %s" "${LB_BINARY_FILESYSTEM}" exit 1 ;; esac case "${LB_BUILD_WITH_CHROOT}" in true) Chroot chroot "parted -s ${FREELO} mklabel ${PARTITION_TABLE_TYPE}" || true Chroot chroot "parted -s ${FREELO} mkpart primary ${PARTITION_TYPE} 0.0 100%" || true Chroot chroot "parted -s ${FREELO} set 1 boot on" || true Chroot chroot "parted -s ${FREELO} set 1 lba off" || true if [ "${LB_BOOTLOADER}" = "syslinux" ] then dd if=chroot/usr/lib/syslinux/mbr.bin of=${FREELO} bs=440 count=1 fi ;; false) parted -s ${FREELO} mklabel ${PARTITION_TABLE_TYPE} || true parted -s ${FREELO} mkpart primary ${PARTITION_TYPE} 0.0 100% || true parted -s "${FREELO}" set 1 boot on || true parted -s "${FREELO}" set 1 lba off || true if [ "${LB_BOOTLOADER}" = "syslinux" ] then dd if=/usr/lib/syslinux/mbr.bin of=${FREELO} bs=440 count=1 fi ;; esac Lodetach ${FREELO} FREELO="$(${LB_LOSETUP} -f)" Losetup $FREELO chroot/binary.img 1 case "${LB_BINARY_FILESYSTEM}" in ext2|ext3|ext4) MKFS="${LB_BINARY_FILESYSTEM}" MKFS_OPTIONS="-L ${LB_HDD_LABEL} -m 0" ;; fat16) MKFS="vfat" MKFS_OPTIONS="-F 16 -n ${LB_HDD_LABEL}" ;; fat32) MKFS="vfat" MKFS_OPTIONS="-F 32 -n ${LB_HDD_LABEL}" ;; ntfs) MKFS="ntfs" MKFS_OPTIONS="-L ${LB_HDD_LABEL}" ;; esac case "${LB_BUILD_WITH_CHROOT}" in true) Chroot chroot "mkfs.${MKFS} ${MKFS_OPTIONS} ${FREELO}" ;; false) mkfs.${MKFS} ${MKFS_OPTIONS} ${FREELO} ;; esac case "${LB_BINARY_FILESYSTEM}" in fat*) CP_OPTIONS="-L" ;; esac mkdir -p chroot/binary.tmp ${LB_ROOT_COMMAND} mount ${FREELO} chroot/binary.tmp cp -r -T ${CP_OPTIONS} binary/ chroot/binary.tmp FIXME() { if [ "${LB_BOOTLOADER}" = "grub" ] then cat > chroot/grub.sh << EOF cd binary.tmp grub --batch << EOM find /live/vmlinuz EOM EOF rootpartition="$(Chroot chroot 'sh grub.sh' 2>/dev/null | grep -A 1 'find /live/vmlinuz' | grep -v 'find /live/vmlinuz')" hdddev="$(echo $rootpartition | sed -e 's|,[[:digit:]]||')" echo "Root partition is $rootpartition, device is: $hdddev" echo "WAITING..." && read WAIT #cat > chroot/grub.sh << EOF #grub --batch << EOM #root $rootpartition #setup $hdddev #EOM #EOF #Chroot chroot "sh grub.sh" rm -f chroot/grub.sh fi } ${LB_ROOT_COMMAND} umount chroot/binary.tmp rmdir chroot/binary.tmp if [ "${LB_BOOTLOADER}" = "syslinux" ] then case "${LB_BUILD_WITH_CHROOT}" in true) Chroot chroot "syslinux ${FREELO}" ;; false) syslinux ${FREELO} ;; esac fi Lodetach ${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 ${LIVE_IMAGE_NAME}-${LIVE_IMAGE_ARCHITECTURE} # Saving cache Save_cache cache/packages.binary # Removing depends Remove_package # Creating stage file Create_stagefile .build/binary_hdd