[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#629533: use mkfs.ext2/mkfs.ext3 instead of genext2fs



Package: live-build
Version: 3.0~a18-1
Severity: normal
Tags: patch
User: ubuntu-devel@lists.ubuntu.com
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                                       [cjwatson@ubuntu.com]
>From 0d598fbff7f17f87a19450686c2e514ec03a4992 Mon Sep 17 00:00:00 2001
From: Colin Watson <cjwatson@canonical.com>
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


Reply to: