The mkzftree is needed to allow ISO images to be compressed with
minimal runtime overhead.  Below is an example of the savings on a
core-image-minimal.

Before ls -l:
24117248 core-image-minimal-qemux86-64.iso

Using the mkzftree ls -l:
16777216 core-image-minimal-qemux86-64.iso

Signed-off-by: Jason Wessel <jason.wes...@windriver.com>
Reviewed-by: Darren Hart <dvh...@linux.intel.com>
---
 meta/classes/bootimg.bbclass                       |   24 +++++++++++++++++---
 .../zisofs-tools/zisofs-tools-native_1.0.8.bb      |   19 ++++++++++++++++
 2 files changed, 40 insertions(+), 3 deletions(-)
 create mode 100644 
meta/recipes-devtools/zisofs-tools/zisofs-tools-native_1.0.8.bb

diff --git a/meta/classes/bootimg.bbclass b/meta/classes/bootimg.bbclass
index ede6e21..395085d 100644
--- a/meta/classes/bootimg.bbclass
+++ b/meta/classes/bootimg.bbclass
@@ -19,13 +19,15 @@
 
 # External variables (also used by syslinux.bbclass)
 # ${INITRD} - indicates a filesystem image to use as an initrd (optional)
+# ${COMPRESSISO} - Transparent compress ISO, reduce size ~40% if set to 1
 # ${NOISO}  - skip building the ISO image if set to 1
 # ${NOHDD}  - skip building the HDD image if set to 1
 # ${ROOTFS} - indicates a filesystem image to include as the root filesystem 
(optional)
 
 do_bootimg[depends] += "dosfstools-native:do_populate_sysroot \
                         mtools-native:do_populate_sysroot \
-                        cdrtools-native:do_populate_sysroot"
+                        cdrtools-native:do_populate_sysroot \
+                        
${@oe.utils.ifelse(d.getVar('COMPRESSISO'),'zisofs-tools-native:do_populate_sysroot','')}"
 
 PACKAGES = " "
 EXCLUDE_FROM_WORLD = "1"
@@ -33,6 +35,8 @@ EXCLUDE_FROM_WORLD = "1"
 HDDDIR = "${S}/hddimg"
 ISODIR = "${S}/iso"
 EFIIMGDIR = "${S}/efi_img"
+COMPACT_ISODIR = "${S}/iso.z"
+COMPRESSISO ?= "0"
 
 BOOTIMG_VOLUME_ID   ?= "boot"
 BOOTIMG_EXTRA_SPACE ?= "512"
@@ -97,18 +101,32 @@ build_iso() {
                install -m 0644 ${STAGING_DATADIR}/syslinux/isolinux.bin 
${ISODIR}${ISOLINUXDIR}
        fi
 
+       if [ "${COMPRESSISO}" = "1" ] ; then
+               # create compact directory, compress iso
+               mkdir -p ${COMPACT_ISODIR}
+               mkzftree -z 9 -p 4 -F ${ISODIR}/rootfs.img 
${COMPACT_ISODIR}/rootfs.img
+
+               # move compact iso to iso, then remove compact directory
+               mv ${COMPACT_ISODIR}/rootfs.img ${ISODIR}/rootfs.img
+               rm -Rf ${COMPACT_ISODIR}
+               mkisofs_compress_opts="-R -z -D -l"
+       else
+               mkisofs_compress_opts="-r"
+       fi
+
        if [ "${PCBIOS}" = "1" ] && [ "${EFI}" != "1" ] ; then
                # PCBIOS only media
                mkisofs -V ${BOOTIMG_VOLUME_ID} \
                        -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.iso \
-                       -b ${ISO_BOOTIMG} -c ${ISO_BOOTCAT} -r \
+                       -b ${ISO_BOOTIMG} -c ${ISO_BOOTCAT} \
+                       $mkisofs_compress_opts \
                        ${MKISOFS_OPTIONS} ${ISODIR}
        else
                # EFI only OR EFI+PCBIOS
                mkisofs -A ${BOOTIMG_VOLUME_ID} -V ${BOOTIMG_VOLUME_ID} \
                        -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.iso \
                        -b ${ISO_BOOTIMG} -c ${ISO_BOOTCAT} \
-                       -r ${MKISOFS_OPTIONS} \
+                       $mkisofs_compress_opts ${MKISOFS_OPTIONS} \
                        -eltorito-alt-boot -eltorito-platform efi \
                        -b efi.img -no-emul-boot \
                        ${ISODIR}
diff --git a/meta/recipes-devtools/zisofs-tools/zisofs-tools-native_1.0.8.bb 
b/meta/recipes-devtools/zisofs-tools/zisofs-tools-native_1.0.8.bb
new file mode 100644
index 0000000..1501307
--- /dev/null
+++ b/meta/recipes-devtools/zisofs-tools/zisofs-tools-native_1.0.8.bb
@@ -0,0 +1,19 @@
+# zisofs-tools-native OE build file
+# Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+SUMMARY = "A set of tools for iso file compression"
+DESCRIPTION = "A set of tools for iso file compression"
+HOMEPAGE = "http://http://freecode.com/projects/zisofs-tools";
+SECTION = "console/utils"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+SRC_URI = 
"http://pkgs.fedoraproject.org/repo/pkgs/zisofs-tools/zisofs-tools-${PV}.tar.bz2/2d0ed8c9a1f60b45f949b136f9be1f6c/zisofs-tools-${PV}.tar.bz2";
+
+SRC_URI[md5sum] = "2d0ed8c9a1f60b45f949b136f9be1f6c"
+SRC_URI[sha256sum] = 
"ae4e53e4914934d41660248fb59d3c8761f1f1fd180d5ec993c17ddb3afd04f3"
+
+inherit native
+
+do_install() {
+       oe_runmake install INSTALLROOT=${D} bindir=${bindir}
+}
-- 
1.7.9.5

_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to