From 32322960234c8ec91e0d42835a3ec5ee63305070 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 2 Feb 2019 11:00:00 +0100 Subject: Adding upstream version 20190202. Signed-off-by: Daniel Baumann --- system-build/scripts/build/binary_hdd | 348 ++++++++++++++++++++++++++++++++++ 1 file changed, 348 insertions(+) create mode 100755 system-build/scripts/build/binary_hdd (limited to 'system-build/scripts/build/binary_hdd') diff --git a/system-build/scripts/build/binary_hdd b/system-build/scripts/build/binary_hdd new file mode 100755 index 0000000..1e7489c --- /dev/null +++ b/system-build/scripts/build/binary_hdd @@ -0,0 +1,348 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 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/system 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 + +echo "${LB_BOOTLOADERS}" | \ +while IFS="," read -r BOOTLOADER +do + case "${BOOTLOADER}" in + grub) + Check_package chroot /usr/sbin/grub grub + ;; + esac +done + +LB_PRIMARY_BOOTLOADER=$(echo "${LB_BOOTLOADERS}" | awk -F, '{ print $1 }') + +case ${LB_PRIMARY_BOOTLOADER} in + syslinux) + case ${LB_BINARY_FILESYSTEM} in + fat*|ntfs) + _BOOTLOADER=syslinux + ;; + ext[234]|btrfs) + _BOOTLOADER=extlinux + ;; + *) + Echo_error "syslinux/extlinux doesn't support ${LB_BINARY_FILESYSTEM}" + exit 1 + ;; + esac + Check_package chroot /usr/bin/${_BOOTLOADER} ${_BOOTLOADER} + ;; +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, +if [ "$LB_HDD_SIZE" = "auto" ]; +then + DU_DIM="$(du -ms binary | cut -f1)" + REAL_DIM="$(Calculate_partition_size ${DU_DIM} ${LB_BINARY_FILESYSTEM})" +else + REAL_DIM=$LB_HDD_SIZE +fi + +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 + +PARTITION_TABLE_TYPE="msdos" + +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 + if [ "x${LB_HDD_PARTITION_START}" = "x" ]; + then + Chroot chroot "parted -a optimal -s ${FREELO} mkpart primary\ + ${PARTITION_TYPE} 0% 100%" || true + else + Echo_message "using partition start at ${LB_HDD_PARTITION_START}" + Chroot chroot "parted -s ${FREELO} mkpart primary ${PARTITION_TYPE}\ + ${LB_HDD_PARTITION_START} 100%" || true + fi + Chroot chroot "parted -s ${FREELO} set 1 boot on" || true + Chroot chroot "parted -s ${FREELO} set 1 lba off" || true + + if [ "${LB_PRIMARY_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 + if [ "x${LB_HDD_PARTITION_START}" = "x" ]; + then + parted -a optimal -s ${FREELO} mkpart primary ${PARTITION_TYPE}\ + 0% 100% || true + else + Echo_message "using partition start at ${LB_HDD_PARTITION_START}" + parted -s ${FREELO} mkpart primary ${PARTITION_TYPE}\ + ${LB_HDD_PARTITION_START} 100% || true + fi + parted -s "${FREELO}" set 1 boot on || true + parted -s "${FREELO}" set 1 lba off || true + + if [ "${LB_PRIMARY_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 -O ^64bit" + MOUNT_OPTIONS="" + ;; + + fat16) + MKFS="vfat" + MKFS_OPTIONS="-F 16 -n ${LB_HDD_LABEL}" + MOUNT_OPTIONS="" + ;; + + fat32) + MKFS="vfat" + MKFS_OPTIONS="-F 32 -n ${LB_HDD_LABEL}" + MOUNT_OPTIONS="" + ;; + + ntfs) + MKFS="ntfs" + MKFS_OPTIONS="-L ${LB_HDD_LABEL}" + MOUNT_OPTIONS="-t ntfs-3g" + ;; +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="-r -L" + ;; + + *) + CP_OPTIONS="-a" + ;; +esac + +Echo_message "Copying binary contents into image..." + +mkdir -p chroot/binary.tmp +mount ${MOUNT_OPTIONS} ${FREELO} chroot/binary.tmp +cp -T ${CP_OPTIONS} binary/ chroot/binary.tmp + +FIXME() +{ +if [ "${LB_PRIMARY_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 +} + +case "${_BOOTLOADER}" in + syslinux) + _SYSLINUX_INSTALLER="syslinux ${FREELO}" + ;; + extlinux) + _SYSLINUX_INSTALLER="extlinux --install /binary.tmp/boot/extlinux" + ;; + *) + _SYSLINUX_INSTALLER="" + ;; +esac + +if [ -n "${_SYSLINUX_INSTALLER}" ] +then + case "${LB_BUILD_WITH_CHROOT}" in + true) + Chroot chroot "${_SYSLINUX_INSTALLER}" + ;; + false) + ${_SYSLINUX_INSTALLER} + ;; + esac +fi + +umount chroot/binary.tmp +rmdir chroot/binary.tmp + +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}-${LB_ARCHITECTURES}.img + +# Saving cache +Save_cache cache/packages.binary + +# Removing depends +Remove_package + +# Creating stage file +Create_stagefile .build/binary_hdd -- cgit v1.2.3