On Thu, 14 Jan 2021 at 13:01, Anatol Belski <[email protected]> wrote: > > From: Sinan Kaya <[email protected]> > > This patch brings support for generating VHD/VHDX from WIC. It touches > different areas but it needs to be applied at once for all the parts to > concert. The patch could be split, if needed, otherwise considering > OE-Core as target. > > Signed-off-by: Sinan Kaya <[email protected]> > Signed-off-by: Anatol Belski <[email protected]> > --- > bitbake/lib/toaster/orm/models.py | 4 ++-- > meta/classes/image-live.bbclass | 2 +- > meta/classes/image_types.bbclass | 14 ++++++++++++-- > .../images/build-appliance-image_15.0.0.bb | 4 +++- > scripts/runqemu | 8 +++++--- > 5 files changed, 23 insertions(+), 9 deletions(-) > > diff --git a/bitbake/lib/toaster/orm/models.py > b/bitbake/lib/toaster/orm/models.py > index 7f7e922ade..49dc7dae36 100644 > --- a/bitbake/lib/toaster/orm/models.py > +++ b/bitbake/lib/toaster/orm/models.py > @@ -583,7 +583,7 @@ class Build(models.Model): > note that this is the actual list of extensions stored on Target > objects > for this build, and not the value of IMAGE_FSTYPES. > > - Returns comma-separated string, e.g. "vmdk, ext4" > + Returns comma-separated string, e.g. "vmdk, vhd, vhdx, ext4" > """ > extensions = [] > > @@ -970,7 +970,7 @@ class Target_Image_File(models.Model): > 'ext3', 'ext3.gz', 'ext4', 'ext4.gz', 'f2fs', 'hddimg', 'iso', > 'jffs2', > 'jffs2.sum', 'multiubi', 'squashfs', 'squashfs-lz4', 'squashfs-lzo', > 'squashfs-xz', 'tar', 'tar.bz2', 'tar.gz', 'tar.lz4', 'tar.xz', > 'ubi', > - 'ubifs', 'wic', 'wic.bz2', 'wic.gz', 'wic.lzma' > + 'ubifs', "vhd", 'vhdx', 'wic', 'wic.bz2', 'wic.gz', 'wic.lzma' > } > > target = models.ForeignKey(Target, on_delete=models.CASCADE)
The above changes to bitbake need to be submitted to the bitbake-devel list (https://lists.openembedded.org/g/bitbake-devel) and should be based on the bitbake repository (https://git.openembedded.org/bitbake/), i.e. the leading "bitbake/" in the path should be dropped. > diff --git a/meta/classes/image-live.bbclass b/meta/classes/image-live.bbclass > index 9ea5ddc312..1b2183eadd 100644 > --- a/meta/classes/image-live.bbclass > +++ b/meta/classes/image-live.bbclass > @@ -234,7 +234,7 @@ build_hddimg() { > bberror "${HDDDIR}/rootfs.img rootfs size is > greather than or equal to 4GB," > bberror "and this doesn't work on a FAT > filesystem. You can either:" > bberror "1) Reduce the size of rootfs.img, > or," > - bbfatal "2) Use wic, vmdk or vdi instead of > hddimg\n" > + bbfatal "2) Use wic, vmdk,vhd, vhdx or vdi > instead of hddimg\n" > fi > fi > > diff --git a/meta/classes/image_types.bbclass > b/meta/classes/image_types.bbclass > index 286009057e..0586c040bc 100644 > --- a/meta/classes/image_types.bbclass > +++ b/meta/classes/image_types.bbclass > @@ -269,7 +269,7 @@ IMAGE_TYPES = " \ > # CONVERSION_CMD/DEPENDS. > COMPRESSIONTYPES ?= "" > > -CONVERSIONTYPES = "gz bz2 lzma xz lz4 lzo zip zst sum md5sum sha1sum > sha224sum sha256sum sha384sum sha512sum bmap u-boot vmdk vdi qcow2 base64 > ${COMPRESSIONTYPES}" > +CONVERSIONTYPES = "gz bz2 lzma xz lz4 lzo zip zst sum md5sum sha1sum > sha224sum sha256sum sha384sum sha512sum bmap u-boot vmdk vhd vhdx vdi qcow2 > base64 ${COMPRESSIONTYPES}" > CONVERSION_CMD_lzma = "lzma -k -f -7 > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}" > CONVERSION_CMD_gz = "gzip -f -9 -n -c --rsyncable > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.gz" > CONVERSION_CMD_bz2 = "pbzip2 -f -k ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}" > @@ -288,6 +288,8 @@ CONVERSION_CMD_sha512sum = "sha512sum > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > CONVERSION_CMD_bmap = "bmaptool create > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} -o > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.bmap" > CONVERSION_CMD_u-boot = "mkimage -A ${UBOOT_ARCH} -O linux -T ramdisk -C > none -n ${IMAGE_NAME} -d ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.u-boot" > CONVERSION_CMD_vmdk = "qemu-img convert -O vmdk > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.vmdk" > +CONVERSION_CMD_vhdx = "qemu-img convert -O vhdx -o subformat=dynamic > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.vhdx" > +CONVERSION_CMD_vhd = "qemu-img convert -O vpc -o subformat=fixed > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.vhd" > CONVERSION_CMD_vdi = "qemu-img convert -O vdi > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.vdi" > CONVERSION_CMD_qcow2 = "qemu-img convert -O qcow2 > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.qcow2" > CONVERSION_CMD_base64 = "base64 ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.base64" > @@ -303,9 +305,17 @@ CONVERSION_DEPENDS_sum = "mtd-utils-native" > CONVERSION_DEPENDS_bmap = "bmap-tools-native" > CONVERSION_DEPENDS_u-boot = "u-boot-tools-native" > CONVERSION_DEPENDS_vmdk = "qemu-system-native" > +CONVERSION_DEPENDS_vhdx = "qemu-native" > +CONVERSION_DEPENDS_vhd = "qemu-native" Is this intended to be different from the dependencies from vmdk above? You've got "qemu-native", vmdk has "qemu-system-native". > CONVERSION_DEPENDS_vdi = "qemu-system-native" > CONVERSION_DEPENDS_qcow2 = "qemu-system-native" > CONVERSION_DEPENDS_base64 = "coreutils-native" > +CONVERSION_DEPENDS_u-boot = "u-boot-mkimage-native" > +CONVERSION_DEPENDS_vmdk = "qemu-native" > +CONVERSION_DEPENDS_vhdx = "qemu-native" > +CONVERSION_DEPENDS_vhd = "qemu-native" > +CONVERSION_DEPENDS_vdi = "qemu-native" > +CONVERSION_DEPENDS_qcow2 = "qemu-native" This looks like it overwrites the above assignments. It also modifies the dependencies for other image types like u-boot and qcow2. What's the reason for these lines? > > RUNNABLE_IMAGE_TYPES ?= "ext2 ext3 ext4" > RUNNABLE_MACHINE_PATTERNS ?= "qemu" > @@ -313,7 +323,7 @@ RUNNABLE_MACHINE_PATTERNS ?= "qemu" > DEPLOYABLE_IMAGE_TYPES ?= "hddimg iso" > > # The IMAGE_TYPES_MASKED variable will be used to mask out from the > IMAGE_FSTYPES, > -# images that will not be built at do_rootfs time: vmdk, vdi, qcow2, hddimg, > iso, etc. > +# images that will not be built at do_rootfs time: vmdk, vhd, vhdx, vdi, > qcow2, hddimg, iso, etc. > IMAGE_TYPES_MASKED ?= "" > > # bmap requires python3 to be in the PATH > diff --git a/meta/recipes-core/images/build-appliance-image_15.0.0.bb > b/meta/recipes-core/images/build-appliance-image_15.0.0.bb > index 8b95026218..c5c9d385ef 100644 > --- a/meta/recipes-core/images/build-appliance-image_15.0.0.bb > +++ b/meta/recipes-core/images/build-appliance-image_15.0.0.bb > @@ -20,7 +20,7 @@ IMAGE_ROOTFS_EXTRA_SPACE = "41943040" > APPEND += "rootfstype=ext4 quiet" > > DEPENDS = "zip-native python3-pip-native" > -IMAGE_FSTYPES = "wic.vmdk" > +IMAGE_FSTYPES = "wic.vmdk wic.vhd wic.vhdx" Do we need to generate vhd and vhdx images for the build appliance? Are you actually using these or just trying to build all relevant images? > > inherit core-image module-base setuptools3 > > @@ -129,6 +129,8 @@ create_bundle_files () { > mkdir -p Yocto_Build_Appliance > cp *.vmx* Yocto_Build_Appliance > ln -sf ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.wic.vmdk > Yocto_Build_Appliance/Yocto_Build_Appliance.vmdk > + ln -sf ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.wic.vhdx > Yocto_Build_Appliance/Yocto_Build_Appliance.vhdx > + ln -sf ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.wic.vhd > Yocto_Build_Appliance/Yocto_Build_Appliance.vhd > zip -r ${IMGDEPLOYDIR}/Yocto_Build_Appliance-${DATETIME}.zip > Yocto_Build_Appliance > ln -sf Yocto_Build_Appliance-${DATETIME}.zip > ${IMGDEPLOYDIR}/Yocto_Build_Appliance.zip > } > diff --git a/scripts/runqemu b/scripts/runqemu > index e5e66f3453..dd92a64553 100755 > --- a/scripts/runqemu > +++ b/scripts/runqemu > @@ -94,11 +94,13 @@ Examples: > runqemu qemux86-64 core-image-sato ext4 > runqemu qemux86-64 wic-image-minimal wic > runqemu path/to/bzImage-qemux86.bin path/to/nfsrootdir/ serial > - runqemu qemux86 iso/hddimg/wic.vmdk/wic.qcow2/wic.vdi/ramfs/cpio.gz... > + runqemu qemux86 > iso/hddimg/wic.vmdk/wic.vhd/wic.vhdx/wic.qcow2/wic.vdi/ramfs/cpio.gz... > runqemu qemux86 qemuparams="-m 256" > runqemu qemux86 bootparams="psplash=false" > runqemu path/to/<image>-<machine>.wic > runqemu path/to/<image>-<machine>.wic.vmdk > + runqemu path/to/<image>-<machine>.wic.vhdx > + runqemu path/to/<image>-<machine>.wic.vhd > """) > > def check_tun(): > @@ -179,7 +181,7 @@ class BaseConfig(object): > self.portlocks = {} > self.bitbake_e = '' > self.snapshot = False > - self.wictypes = ('wic', 'wic.vmdk', 'wic.qcow2', 'wic.vdi') > + self.wictypes = ('wic', 'wic.vmdk', 'wic.qcow2', 'wic.vdi', > "wic.vhd", "wic.vhdx") > self.fstypes = ('ext2', 'ext3', 'ext4', 'jffs2', 'nfs', 'btrfs', > 'cpio.gz', 'cpio', 'ramfs', 'tar.bz2', 'tar.gz') > self.vmtypes = ('hddimg', 'iso') > @@ -1203,7 +1205,7 @@ class BaseConfig(object): > return > if 'wic.' in self.fstype: > self.fstype = self.fstype[4:] > - rootfs_format = self.fstype if self.fstype in ('vmdk', 'qcow2', > 'vdi') else 'raw' > + rootfs_format = self.fstype if self.fstype in ('vmdk', 'vhd', > 'vhdx', 'qcow2', 'vdi') else 'raw' > > qb_rootfs_opt = self.get('QB_ROOTFS_OPT') > if qb_rootfs_opt: I actually recommend splitting the runqemu changes off into another patch. So you'd have one patch for image_types, one patch for bitbake and one patch for runqemu. Thanks, -- Paul Barker Konsulko Group
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#146870): https://lists.openembedded.org/g/openembedded-core/message/146870 Mute This Topic: https://lists.openembedded.org/mt/79674371/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
