Package: live-build Version: 3.0~a18-1 Severity: normal Tags: patch User: [email protected] Usertags: origin-ubuntu ubuntu-patch oneiric
genext2fs doesn't work very well with even moderately large filesystems. It wants to allocate memory roughly equivalent to the size of the filesystem it's creating. On my 2GB test filesystem, it runs out of memory even on my fairly well-provisioned laptop; on an ARM build machine, I expect that using it would be thoroughly infeasible. The attached patch converts live-build to use mkfs.ext2/mkfs.ext3 instead. Thanks, -- Colin Watson [[email protected]]
>From 0d598fbff7f17f87a19450686c2e514ec03a4992 Mon Sep 17 00:00:00 2001 From: Colin Watson <[email protected]> Date: Tue, 7 Jun 2011 14:46:25 +0100 Subject: [PATCH] Use mkfs.ext2/mkfs.ext2 instead of genext2fs. --- debian/control | 2 +- debian/live-build.bug-script | 2 +- scripts/build/lb_binary_rootfs | 31 ++++++++++++++++++++++++------- scripts/build/lb_source_debian | 1 - 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/debian/control b/debian/control index 57d60e6..3d00d98 100644 --- a/debian/control +++ b/debian/control @@ -16,7 +16,7 @@ Depends: ${misc:Depends}, debootstrap | cdebootstrap | cdebootstrap-static Recommends: cpio, gettext-base, gnu-fdisk Suggests: dosfstools, genisoimage, memtest86+ | memtest86, mtools, parted, - squashfs-tools | genext2fs | mtd-tools, sudo | fakeroot, syslinux | grub, + squashfs-tools | mtd-tools, sudo | fakeroot, syslinux | grub, uuid-runtime, win32-loader Description: Debian Live - System Build Scripts live-build contains the scripts that build a Debian Live system image from a diff --git a/debian/live-build.bug-script b/debian/live-build.bug-script index c0e56f0..0cf407a 100644 --- a/debian/live-build.bug-script +++ b/debian/live-build.bug-script @@ -6,7 +6,7 @@ DEFAULT_SETTINGS="/etc/live/build.conf" dpkg -l debootstrap cdebootstrap # Checking suggests -dpkg -l dosfstools genisoimage memtest86+ memtest86 mtools parted squashfs-tools genext2fs mtd-tools sudo fakeroot syslinux grub uuid-runtime win32-loader +dpkg -l dosfstools genisoimage memtest86+ memtest86 mtools parted squashfs-tools mtd-tools sudo fakeroot syslinux grub uuid-runtime win32-loader if [ -e "${DEFAULT_SETTINGS}" ]; then echo "Contents of ${DEFAULT_SETTINGS}:" diff --git a/scripts/build/lb_binary_rootfs b/scripts/build/lb_binary_rootfs index 417c381..70a6dc7 100755 --- a/scripts/build/lb_binary_rootfs +++ b/scripts/build/lb_binary_rootfs @@ -90,7 +90,7 @@ done case "${LB_CHROOT_FILESYSTEM}" in ext2|ext3) # Checking depends - Check_package chroot/usr/bin/genext2fs genext2fs + Check_package chroot/sbin/mkfs.ext2 e2fsprogs # Restoring cache Restore_cache cache/packages_binary @@ -106,21 +106,30 @@ case "${LB_CHROOT_FILESYSTEM}" in case "${LB_BUILD_WITH_CHROOT}" in true) - DU_DIM="$(du -ks chroot/chroot | cut -f1)" + DU_DIM="$(du -ms chroot/chroot | cut -f1)" + INODES="$(find chroot/chroot | wc -l)" ;; false) - DU_DIM="$(du -ks chroot | cut -f1)" + DU_DIM="$(du -ms chroot | cut -f1)" + INODES="$(find chroot | wc -l)" ;; esac REAL_DIM="$(Calculate_partition_size ${DU_DIM} ${LB_CHROOT_FILESYSTEM})" - - RESERVED_PERCENTAGE="--reserved-percentage" + REAL_INODES="$(Calculate_partition_size ${INODES} ${LB_CHROOT_FILESYSTEM})" case "${LB_BUILD_WITH_CHROOT}" in true) - Chroot chroot "genext2fs --size-in-blocks=${REAL_DIM} ${RESERVED_PERCENTAGE}=0 --root=chroot filesystem.${LB_CHROOT_FILESYSTEM}" + dd if=/dev/zero of=chroot/filesystem.${LB_CHROOT_FILESYSTEM} bs=1024k count=0 seek=${REAL_DIM} + Chroot chroot "mkfs.${LB_CHROOT_FILESYSTEM} -F -b 1024 -N ${REAL_INODES} -m 0 filesystem.${LB_CHROOT_FILESYSTEM}" + + mkdir -p filesystem.tmp + ${LB_ROOT_COMMAND} mount -o loop chroot/filesystem.${LB_CHROOT_FILESYSTEM} filesystem.tmp + cp -a chroot/chroot/* filesystem.tmp + + ${LB_ROOT_COMMAND} umount filesystem.tmp + rmdir filesystem.tmp # Move image mv chroot/filesystem.${LB_CHROOT_FILESYSTEM} binary/${INITFS} @@ -177,7 +186,15 @@ case "${LB_CHROOT_FILESYSTEM}" in ;; false) - genext2fs --size-in-blocks=${REAL_DIM} ${RESERVED_PERCENTAGE}=0 --root=chroot binary/${INITFS}/filesystem.${LB_CHROOT_FILESYSTEM} + dd if=/dev/zero of=binary/${INITFS}/filesystem.${LB_CHROOT_FILESYSTEM} bs=1024k count=0 seek=${REAL_DIM} + mkfs.${LB_CHROOT_FILESYSTEM} -F -b 1024 -N ${REAL_INODES} -m 0 binary/${INITFS}/filesystem.${LB_CHROOT_FILESYSTEM} + + mkdir -p filesystem.tmp + ${LB_ROOT_COMMAND} mount -o loop binary/${INITFS}/filesystem.${LB_CHROOT_FILESYSTEM} filesystem.tmp + cp -a chroot/* filesystem.tmp + + ${LB_ROOT_COMMAND} umount filesystem.tmp + rmdir filesystem.tmp ;; esac diff --git a/scripts/build/lb_source_debian b/scripts/build/lb_source_debian index 7964ccb..7566155 100755 --- a/scripts/build/lb_source_debian +++ b/scripts/build/lb_source_debian @@ -61,7 +61,6 @@ dosfstools genisoimage parted squashfs-tools -genext2fs mtd-tools EOF -- 1.7.4.1
