Subject: Using pre-cached bootstrap stage, if available, in order to build chroot image which dramatically speads up building of large images.

From: Daniel Baumann <[email-masked]>
Date: Fri, 16 Oct 2009 18:35:28 +0200

---
 helpers/lh_binary_chroot |  12 ++++-
 helpers/lh_binary_rootfs | 120 +++++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 127 insertions(+), 5 deletions(-)

diff --git a/helpers/lh_binary_chroot b/helpers/lh_binary_chroot
index 1591c25..2023941 100755
--- a/helpers/lh_binary_chroot
+++ b/helpers/lh_binary_chroot
@@ -84,8 +84,16 @@ ${LH_ROOT_COMMAND} rm -rf chroot/chroot
 ${LH_ROOT_COMMAND} rm -rf chroot.tmp
 
 # Copying new chroot
-${LH_ROOT_COMMAND} cp -a chroot chroot.tmp
-${LH_ROOT_COMMAND} mv chroot.tmp chroot/chroot
+if [ -d cache/stages_bootstrap ]
+then
+	${LH_ROOT_COMMAND} mv chroot chroot.tmp
+	${LH_ROOT_COMMAND} cp -a cache/stages_bootstrap chroot
+	${LH_ROOT_COMMAND} mv chroot.tmp chroot/chroot
+	${LH_ROOT_COMMAND} touch chroot/chroot.cache
+else
+	${LH_ROOT_COMMAND} cp -a chroot chroot.tmp
+	${LH_ROOT_COMMAND} mv chroot.tmp chroot/chroot
+fi
 
 if [ -f config/binary_rootfs/exclude ]
 then
diff --git a/helpers/lh_binary_rootfs b/helpers/lh_binary_rootfs
index 1b72e7c..25fbb15 100755
--- a/helpers/lh_binary_rootfs
+++ b/helpers/lh_binary_rootfs
@@ -146,7 +146,45 @@ case "${LH_CHROOT_FILESYSTEM}" in
 
 				# Move image
 				mv chroot/filesystem.${LH_CHROOT_FILESYSTEM} binary/${INITFS}
-				rm -rf chroot/chroot
+
+				if [ -e chroot/chroot.cache ]
+				then
+					rm -f .lock
+					mv chroot/chroot chroot.tmp
+
+					lh_chroot_linux-image remove ${*}
+					lh_chroot_sources remove ${*}
+					lh_chroot_apt remove ${*}
+					lh_chroot_hostname remove ${*}
+					lh_chroot_resolv remove ${*}
+					lh_chroot_hosts remove ${*}
+					lh_chroot_sysv-rc remove ${*}
+					lh_chroot_debianchroot remove ${*}
+					lh_chroot_sysfs remove ${*}
+					lh_chroot_selinuxfs remove ${*}
+					lh_chroot_proc remove ${*}
+					lh_chroot_devpts remove ${*}
+
+					rm -rf chroot
+					mv chroot.tmp chroot
+
+					lh_chroot_devpts install ${*}
+					lh_chroot_proc install ${*}
+					lh_chroot_selinuxfs install ${*}
+					lh_chroot_sysfs install ${*}
+					lh_chroot_debianchroot install ${*}
+					lh_chroot_sysv-rc install ${*}
+					lh_chroot_hosts install ${*}
+					lh_chroot_resolv install ${*}
+					lh_chroot_hostname install ${*}
+					lh_chroot_apt install ${*}
+					lh_chroot_sources install ${*}
+					lh_chroot_linux-image install ${*}
+
+					touch .lock
+				else
+					rm -rf chroot/chroot
+				fi
 				;;
 
 			disabled)
@@ -188,7 +226,43 @@ case "${LH_CHROOT_FILESYSTEM}" in
 
 				# Move image
 				mv chroot/filesystem.jffs2 binary/${INITFS}
-				rm -rf chroot/chroot
+
+				if [ -e chroot/chroot.cache ]
+				then
+					rm -f .lock
+					mv chroot/chroot chroot.tmp
+
+					lh_chroot_linux-image remove ${*}
+					lh_chroot_sources remove ${*}
+					lh_chroot_apt remove ${*}
+					lh_chroot_hostname remove ${*}
+					lh_chroot_resolv remove ${*}
+					lh_chroot_hosts remove ${*}
+					lh_chroot_sysv-rc remove ${*}
+					lh_chroot_debianchroot remove ${*}
+					lh_chroot_sysfs remove ${*}
+					lh_chroot_selinuxfs remove ${*}
+					lh_chroot_proc remove ${*}
+					lh_chroot_devpts remove ${*}
+
+					rm -rf chroot
+					mv chroot.tmp chroot
+
+					lh_chroot_devpts install ${*}
+					lh_chroot_proc install ${*}
+					lh_chroot_selinuxfs install ${*}
+					lh_chroot_sysfs install ${*}
+					lh_chroot_debianchroot install ${*}
+					lh_chroot_sysv-rc install ${*}
+					lh_chroot_hosts install ${*}
+					lh_chroot_resolv install ${*}
+					lh_chroot_hostname install ${*}
+					lh_chroot_apt install ${*}
+					lh_chroot_sources install ${*}
+					lh_chroot_linux-image install ${*}
+				else
+					rm -rf chroot/chroot
+				fi
 				;;
 
 			disabled)
@@ -262,7 +336,47 @@ case "${LH_CHROOT_FILESYSTEM}" in
 
 				# Move image
 				${LH_ROOT_COMMAND} mv chroot/filesystem.squashfs binary/${INITFS}
-				${LH_ROOT_COMMAND} rm -rf chroot/chroot chroot/squashfs.sort
+				${LH_ROOT_COMMAND} rm -f chroot/squashfs.sort
+
+				if [ -e chroot/chroot.cache ]
+				then
+					rm -f .lock
+					mv chroot/chroot chroot.tmp
+
+					lh_chroot_linux-image remove ${*}
+					lh_chroot_sources remove ${*}
+					lh_chroot_apt remove ${*}
+					lh_chroot_hostname remove ${*}
+					lh_chroot_resolv remove ${*}
+					lh_chroot_hosts remove ${*}
+					lh_chroot_sysv-rc remove ${*}
+					lh_chroot_debianchroot remove ${*}
+					lh_chroot_sysfs remove ${*}
+					lh_chroot_selinuxfs remove ${*}
+					lh_chroot_proc remove ${*}
+					lh_chroot_devpts remove ${*}
+
+					rm -rf chroot
+					mv chroot.tmp chroot
+
+					lh_chroot_devpts install ${*}
+					lh_chroot_proc install ${*}
+					lh_chroot_selinuxfs install ${*}
+					lh_chroot_sysfs install ${*}
+					lh_chroot_debianchroot install ${*}
+					lh_chroot_sysv-rc install ${*}
+					lh_chroot_hosts install ${*}
+					lh_chroot_resolv install ${*}
+					lh_chroot_hostname install ${*}
+					lh_chroot_apt install ${*}
+					lh_chroot_sources install ${*}
+					lh_chroot_linux-image install ${*}
+
+					touch .lock
+				else
+					rm -rf chroot/chroot
+				fi
+
 				${LH_ROOT_COMMAND} chmod 0644 binary/${INITFS}/filesystem.squashfs
 				;;
 
-- 
cgit v1.0