From 808d4371939ec48ed62e0c0b6614b96d61b1f7b8 Mon Sep 17 00:00:00 2001 From: Jason Wessel Date: Tue, 17 Sep 2013 13:32:18 +0000 Subject: bootimage.bbclass, zisofs-tools-native: add ability to compress ISO images 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 Reviewed-by: Darren Hart Signed-off-by: Saul Wold Signed-off-by: Richard Purdie --- 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 fdd4ea9561..c61c4e985e 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 0000000000..1501307cdb --- /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} +} -- cgit 1.2.3-korg