summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthijs Kooijman <matthijs@stdin.nl>2017-08-29 14:50:46 +0200
committerRaphaël Hertzog <hertzog@debian.org>2017-09-01 10:29:20 +0200
commit72ca3bcb2062fe5cceb4ae9b3855568aaaa7275d (patch)
tree7dba92ca47f616bab3b2b3c2e39211a194939926
parentfb2a5252077ec0e199b82a6ce252aba071ebde41 (diff)
downloadvyos-live-build-72ca3bcb2062fe5cceb4ae9b3855568aaaa7275d.tar.gz
vyos-live-build-72ca3bcb2062fe5cceb4ae9b3855568aaaa7275d.zip
Handle hardlinks in binary_hdd
To generate an hdd image, binary_hdd first estimates the needed size of the image using du. By default, when du finds multiple hardlinked copies of a file, it counts them only once. However, when the target filesystem is FAT, which does not support hardlinks, these files will take up more space when finally copying the contents, breaking the build: P: Copying binary contents into image... cp: error writing 'chroot/binary.tmp/live/initrd.img-4.9.0-3-amd64': No space left on device cp: error writing 'chroot/binary.tmp/efi/boot/bootx64.efi': No space left on device cp: error writing 'chroot/binary.tmp/efi/boot/bootia32.efi': No space left on device cp: cannot create directory 'chroot/binary.tmp/boot/grub': No space left on device cp: cannot create directory 'chroot/binary.tmp/isolinux': No space left on device To fix this, pass --count-links to du when the target is FAT, to make the space estimation correct. This problem is exposed by commit 9c974b26b (Instead of renaming kernel for syslinux, create hardlinks), which might need to be separately fixed (to not waste space on FAT targets), but binary_hdd should at least handle hardlinks more gracefully.
-rw-r--r--debian/changelog3
-rwxr-xr-xscripts/build/binary_hdd17
2 files changed, 18 insertions, 2 deletions
diff --git a/debian/changelog b/debian/changelog
index 32f7c2d56..f82da6520 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -7,6 +7,9 @@ live-build (1:20170830) UNRELEASED; urgency=medium
Thanks to Matthijs Kooijman <matthijs@stdin.nl> for the patch.
* Fix multiple issues with LB_BUILD_WITH_CHROOT=false. Closes: #873513
Thanks to Matthijs Kooijman <matthijs@stdin.nl> for the patch.
+ * Fix size calculation when we use FAT filesystems that do not support
+ hardlinks. Closes: #873640
+ Thanks to Matthijs Kooijman <matthijs@stdin.nl> for the patch.
-- Raphaël Hertzog <hertzog@debian.org> Tue, 29 Aug 2017 15:13:39 +0200
diff --git a/scripts/build/binary_hdd b/scripts/build/binary_hdd
index 400403c0a..c6b842e95 100755
--- a/scripts/build/binary_hdd
+++ b/scripts/build/binary_hdd
@@ -97,6 +97,19 @@ then
rm -f ${LIVE_iMAGE_NAME}.img
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
@@ -107,7 +120,7 @@ then
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" ]
+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"
@@ -127,7 +140,7 @@ fi
# Everything which comes here needs to be cleaned up,
if [ "$LB_HDD_SIZE" = "auto" ];
then
- DU_DIM="$(du -ms binary | cut -f1)"
+ 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