]> code.ossystems Code Review - openembedded-core.git/commitdiff
bootimg.bbclass:iso: use mkisofs -iso-level 3 for large iso
authorRobert Yang <liezhi.yang@windriver.com>
Tue, 30 Jun 2015 03:06:37 +0000 (20:06 -0700)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Wed, 1 Jul 2015 14:38:23 +0000 (15:38 +0100)
There will be problems when rootfs.img is larger than 4GB:
mkisofs: Value too large for defined data type. File /path/to/iso/rootfs.img is too large for current mkisofs settings - ignoring

And will get a wrong iso.

Check the size of ${ISODIR}/rootfs.img, use mkisofs -iso-level 3
when it exceeds 3.8GB, the specification is 4G - 1 bytes, we need
leave a few space for other files.

[YOCTO #6449]

Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/classes/bootimg.bbclass

index 4abe00e94468b4b4f665c726438c31c7397a1c3a..605edc911e44ab927b79875990f53c991a5cae9d 100644 (file)
@@ -136,19 +136,30 @@ build_iso() {
                mkisofs_compress_opts="-r"
        fi
 
+       # Check the size of ${ISODIR}/rootfs.img, use mkisofs -iso-level 3
+       # when it exceeds 3.8GB, the specification is 4G - 1 bytes, we need
+       # leave a few space for other files.
+       mkisofs_iso_level=""
+       rootfs_img_size=`stat -c '%s' ${ISODIR}/rootfs.img`
+       # 4080218931 = 3.8 * 1024 * 1024 * 1024
+       if [ $rootfs_img_size -gt 4080218931 ]; then
+               bbnote "${ISODIR}/rootfs.img execeeds 3.8GB, using '-iso-level 3' for mkisofs"
+               mkisofs_iso_level="-iso-level 3"
+       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} \
                        $mkisofs_compress_opts \
-                       ${MKISOFS_OPTIONS} ${ISODIR}
+                       ${MKISOFS_OPTIONS} $mkisofs_iso_level ${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} \
-                       $mkisofs_compress_opts ${MKISOFS_OPTIONS} \
+                       $mkisofs_compress_opts ${MKISOFS_OPTIONS} $mkisofs_iso_level \
                        -eltorito-alt-boot -eltorito-platform efi \
                        -b efi.img -no-emul-boot \
                        ${ISODIR}