live-build/scripts/build/binary_hdd

370 lines
8.4 KiB
Plaintext
Raw Normal View History

2007-09-23 08:04:46 +00:00
#!/bin/sh
## live-build(7) - System Build Scripts
## Copyright (C) 2016-2020 The Debian Live team
## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch>
##
## 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.
2007-09-23 08:04:46 +00:00
set -e
2007-09-23 08:05:11 +00:00
# Including common functions
[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh
2007-09-23 08:04:46 +00:00
2007-09-23 08:05:11 +00:00
# Setting static variables
DESCRIPTION="Build binary image"
2007-09-23 08:04:48 +00:00
USAGE="${PROGRAM} [--force]"
# Processing arguments and configuration files
Init_config_data "${@}"
2007-09-23 08:04:46 +00:00
if [ "${LB_IMAGE_TYPE}" != "hdd" ]; then
2007-09-23 08:05:11 +00:00
exit 0
fi
Echo_message "Begin building binary hdd image..."
2007-09-23 08:05:11 +00:00
# Requiring stage file
Require_stagefiles config bootstrap chroot_proc
2007-09-23 08:05:11 +00:00
# Checking stage file
Check_stagefile
2007-09-23 08:05:11 +00:00
2020-03-13 15:19:59 -01:00
# Acquire lock file
Acquire_lockfile
2007-09-23 08:05:11 +00:00
# Checking depends
case "${LB_BINARY_FILESYSTEM}" in
fat*)
Check_package chroot /sbin/mkdosfs dosfstools
;;
ntfs)
Check_package chroot /sbin/mkfs.ntfs ntfs-3g
;;
esac
Check_package chroot /usr/share/doc/mtools mtools
Check_package chroot /sbin/parted parted
Check_package host /sbin/fdisk fdisk
remove obsolete loop-aes-utils related losetup hack 677415f6d7efc1e5b888570d70af311d2900c69c (2007) in v1.0~a2-1 added a hack relating to the loop-aes-utils package and losetup. this commit bundled a bunch of changes, it was not specific to the hack, and so info about the hack is limited to a brief comment included within the related change in defaults: ``` # Workaround for loop-aes-utils divertion # (loop-aes-utils' losetup lacks features). ``` though it is very similar to the removed fdisk hack in that it seems that one package may replace a binary from another, moving the original to a new location, and this hack gives the user the opportunity to select the original instead of the one put in its place, for use in LB. the comment mentions a package called loop-aes-utils as being the package that performs such a diversion, and that the need for the hack was that losetup itself lacked features, presumably encryption support, and it is clear that it is the losetup binary that is the focus of the diversion. looking into the history of loop-aes-utils a little, this package was dropped from debian back in 2012 (#680748), favouring encrytion support of dm-crypt/cryptsetup. double checking file contents of packages, only the mount package carries an /sbin/losetup file, so presumably this means that dm-setup/cryptsetup do not perform such a diversion of losetup (i.e. their use is exclusively done directly). since the possible diversion is simply gone, that completely removes any point in having the hack of giving users choice between losetup and the diverted one. so let's remove this obsolete hack...
2020-03-11 17:43:12 -01:00
Check_package host /sbin/losetup mount
2007-09-23 08:05:11 +00:00
case "${LB_BOOTLOADER_BIOS}" in
grub-legacy)
Check_package chroot /usr/sbin/grub grub
;;
2020-05-04 16:40:23 +00:00
syslinux)
case ${LB_BINARY_FILESYSTEM} in
fat*|ntfs)
_BOOTLOADER=syslinux
;;
ext[234]|btrfs)
_BOOTLOADER=extlinux
Check_package host /usr/bin/lsattr e2fsprogs
2020-05-04 16:40:23 +00:00
;;
*)
Echo_error "syslinux/extlinux doesn't support ${LB_BINARY_FILESYSTEM}"
exit 1
;;
esac
Check_package chroot /usr/bin/${_BOOTLOADER} ${_BOOTLOADER}
;;
2007-09-23 08:05:11 +00:00
esac
2007-09-23 08:05:15 +00:00
# Restoring cache
Restore_package_cache binary
2007-09-23 08:05:15 +00:00
2007-09-23 08:05:11 +00:00
# Installing depends
Install_packages
2007-09-23 08:05:11 +00:00
# Remove old binary
if [ -f ${LB_IMAGE_NAME}.img ]
2007-09-23 08:05:11 +00:00
then
rm -f ${LB_IMAGE_NAME}.img
2007-09-23 08:05:11 +00:00
fi
case "${LB_BINARY_FILESYSTEM}" in
fat*)
# If the target does not support hardlinks, tell du to
# count them double
DU_OPTIONS="--count-links"
;;
*)
DU_OPTIONS=""
;;
esac
# 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 ${DU_OPTIONS} -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
2007-09-23 08:05:11 +00:00
# Everything which comes here needs to be cleaned up,
if [ "$LB_HDD_SIZE" = "auto" ];
then
DU_DIM="$(du ${DU_OPTIONS} -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}
remove obsolete loop-aes-utils related losetup hack 677415f6d7efc1e5b888570d70af311d2900c69c (2007) in v1.0~a2-1 added a hack relating to the loop-aes-utils package and losetup. this commit bundled a bunch of changes, it was not specific to the hack, and so info about the hack is limited to a brief comment included within the related change in defaults: ``` # Workaround for loop-aes-utils divertion # (loop-aes-utils' losetup lacks features). ``` though it is very similar to the removed fdisk hack in that it seems that one package may replace a binary from another, moving the original to a new location, and this hack gives the user the opportunity to select the original instead of the one put in its place, for use in LB. the comment mentions a package called loop-aes-utils as being the package that performs such a diversion, and that the need for the hack was that losetup itself lacked features, presumably encryption support, and it is clear that it is the losetup binary that is the focus of the diversion. looking into the history of loop-aes-utils a little, this package was dropped from debian back in 2012 (#680748), favouring encrytion support of dm-crypt/cryptsetup. double checking file contents of packages, only the mount package carries an /sbin/losetup file, so presumably this means that dm-setup/cryptsetup do not perform such a diversion of losetup (i.e. their use is exclusively done directly). since the possible diversion is simply gone, that completely removes any point in having the hack of giving users choice between losetup and the diverted one. so let's remove this obsolete hack...
2020-03-11 17:43:12 -01:00
FREELO="$(losetup -f)"
MAKEDEV=false
2007-09-23 08:05:11 +00:00
if [ ! -b chroot/${FREELO} ]
then
MAKEDEV=true
2007-09-23 08:05:11 +00:00
mv chroot/dev chroot/dev.tmp
# Don't copy mount points (e.g. /dev/shm)
find /dev -xdev | cpio -dmpu chroot
2007-09-23 08:05:11 +00:00
fi
echo "!!! The following error/warning messages can be ignored !!!"
Losetup $FREELO chroot/binary.img 0
2007-09-23 08:05:11 +00:00
PARTITION_TABLE_TYPE="msdos"
case "${LB_BINARY_FILESYSTEM}" in
ext2|ext3|ext4)
PARTITION_TYPE="ext2"
2008-06-17 05:08:24 +00:00
;;
2008-06-15 15:17:42 +00:00
fat16|fat32)
PARTITION_TYPE="${LB_BINARY_FILESYSTEM}"
2008-06-15 15:17:42 +00:00
;;
ntfs)
PARTITION_TYPE="NTFS"
;;
2008-06-15 15:17:42 +00:00
*)
Echo_error "Unsupported binary filesystem %s" "${LB_BINARY_FILESYSTEM}"
2008-06-15 15:17:42 +00:00
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
2007-09-23 08:05:16 +00:00
if [ "${LB_BOOTLOADER_BIOS}" = "syslinux" ]; then
dd if=chroot/usr/lib/$(echo ${_BOOTLOADER} | tr '[a-z]' '[A-Z]')/mbr.bin of=${FREELO} bs=440 count=1
2007-09-23 08:05:16 +00:00
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
2007-09-23 08:05:16 +00:00
if [ "${LB_BOOTLOADER_BIOS}" = "syslinux" ]; then
dd if=/usr/lib/$(echo ${_BOOTLOADER} | tr '[a-z]' '[A-Z]')/mbr.bin of=${FREELO} bs=440 count=1
2007-09-23 08:05:16 +00:00
fi
;;
esac
2007-09-23 08:05:11 +00:00
Lodetach ${FREELO}
2007-09-23 08:05:11 +00:00
remove obsolete loop-aes-utils related losetup hack 677415f6d7efc1e5b888570d70af311d2900c69c (2007) in v1.0~a2-1 added a hack relating to the loop-aes-utils package and losetup. this commit bundled a bunch of changes, it was not specific to the hack, and so info about the hack is limited to a brief comment included within the related change in defaults: ``` # Workaround for loop-aes-utils divertion # (loop-aes-utils' losetup lacks features). ``` though it is very similar to the removed fdisk hack in that it seems that one package may replace a binary from another, moving the original to a new location, and this hack gives the user the opportunity to select the original instead of the one put in its place, for use in LB. the comment mentions a package called loop-aes-utils as being the package that performs such a diversion, and that the need for the hack was that losetup itself lacked features, presumably encryption support, and it is clear that it is the losetup binary that is the focus of the diversion. looking into the history of loop-aes-utils a little, this package was dropped from debian back in 2012 (#680748), favouring encrytion support of dm-crypt/cryptsetup. double checking file contents of packages, only the mount package carries an /sbin/losetup file, so presumably this means that dm-setup/cryptsetup do not perform such a diversion of losetup (i.e. their use is exclusively done directly). since the possible diversion is simply gone, that completely removes any point in having the hack of giving users choice between losetup and the diverted one. so let's remove this obsolete hack...
2020-03-11 17:43:12 -01:00
FREELO="$(losetup -f)"
Losetup $FREELO chroot/binary.img 1
2007-09-23 08:05:16 +00:00
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)
2008-06-17 05:08:24 +00:00
MKFS="vfat"
MKFS_OPTIONS="-F 16 -n ${LB_HDD_LABEL}"
MOUNT_OPTIONS=""
;;
fat32)
2008-06-17 05:08:24 +00:00
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}"
2007-09-23 08:05:16 +00:00
;;
false)
2008-06-15 15:25:34 +00:00
mkfs.${MKFS} ${MKFS_OPTIONS} ${FREELO}
2007-09-23 08:05:16 +00:00
;;
esac
case "${LB_BINARY_FILESYSTEM}" in
fat*)
CP_OPTIONS="-r -L"
;;
*)
CP_OPTIONS="-a"
;;
esac
Echo_message "Copying binary contents into image..."
2007-09-23 08:05:12 +00:00
mkdir -p chroot/binary.tmp
mount ${MOUNT_OPTIONS} ${FREELO} chroot/binary.tmp
cp -T ${CP_OPTIONS} binary/ chroot/binary.tmp
2007-09-23 08:05:12 +00:00
FIXME()
{
if [ "${LB_BOOTLOADER_BIOS}" = "grub-legacy" ]; then
2007-09-23 08:05:12 +00:00
cat > chroot/grub.sh << EOF
#!/bin/sh
2007-09-23 08:05:12 +00:00
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"
2007-09-23 08:05:12 +00:00
echo "WAITING..." && read WAIT
2007-09-23 08:05:12 +00:00
#cat > chroot/grub.sh << EOF
#!/bin/sh
2007-09-23 08:05:12 +00:00
#grub --batch << EOM
#root $rootpartition
#setup $hdddev
2007-09-23 08:05:12 +00:00
#EOM
#EOF
#Chroot chroot "sh grub.sh"
2007-09-23 08:05:12 +00:00
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
2007-09-23 08:05:11 +00:00
if [ -n "${_SYSLINUX_INSTALLER}" ]
2007-09-23 08:05:11 +00:00
then
case "${LB_BUILD_WITH_CHROOT}" in
true)
Chroot chroot "${_SYSLINUX_INSTALLER}"
2007-09-23 08:05:16 +00:00
;;
false)
${_SYSLINUX_INSTALLER}
2007-09-23 08:05:16 +00:00
;;
esac
2007-09-23 08:05:11 +00:00
fi
case "${_BOOTLOADER}" in
extlinux)
if lsattr chroot/binary.tmp/boot/extlinux/ldlinux.sys | cut -f 1 -d " " | grep -q "i"; then
# The file ldlinux.sys is marked immutable by extlinux
# Set the timestamp
chattr -i chroot/binary.tmp/boot/extlinux/ldlinux.sys
touch -d@${SOURCE_DATE_EPOCH} chroot/binary.tmp/boot/extlinux/ldlinux.sys
chattr +i chroot/binary.tmp/boot/extlinux/ldlinux.sys
echo "f chroot/binary.tmp/boot/extlinux/ldlinux.sys" >> binary.modified_timestamps
fi
;;
*)
;;
esac
# Set the timestamp inside the image
find chroot/binary.tmp -newermt "$(date -d@${SOURCE_DATE_EPOCH} '+%Y-%m-%d %H:%M:%S')" -printf "%y %p\n" -exec touch '{}' -d@${SOURCE_DATE_EPOCH} ';' >> binary.modified_timestamps
umount chroot/binary.tmp
rmdir chroot/binary.tmp
Lodetach ${FREELO}
2007-09-23 08:05:11 +00:00
echo "!!! The above error/warning messages can be ignored !!!"
if $MAKEDEV; then
2007-09-23 08:05:13 +00:00
rm -rf chroot/dev
2007-09-23 08:05:11 +00:00
mv chroot/dev.tmp chroot/dev
fi
# Set the timestamp of the image
touch -d@${SOURCE_DATE_EPOCH} chroot/binary.img
echo "f ${LB_IMAGE_NAME}-${LB_ARCHITECTURE}.img" >> binary.modified_timestamps
mv chroot/binary.img ${LB_IMAGE_NAME}-${LB_ARCHITECTURE}.img
2007-09-23 08:05:12 +00:00
2007-09-23 08:05:15 +00:00
# Saving cache
Save_package_cache binary
2007-09-23 08:05:15 +00:00
2007-09-23 08:05:11 +00:00
# Removing depends
Remove_packages
2007-09-23 08:05:11 +00:00
# Creating stage file
Create_stagefile