* [PATCH 0/3] some image classes @ 2020-03-27 13:27 Q. Gylstorff 2020-03-27 13:27 ` [PATCH 1/3] meta/classes: Generate a custom initramfs Q. Gylstorff ` (5 more replies) 0 siblings, 6 replies; 58+ messages in thread From: Q. Gylstorff @ 2020-03-27 13:27 UTC (permalink / raw) To: isar-users; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> - Generate cpio images for rescue images - generate custom initramfs - generate ova images Quirin Gylstorff (3): meta/classes: Generate a custom initramfs meta/classes: Generate ova image for vmware or virtualbox meta/classes: add cpiogz-img meta/classes/cpiogz-img.bbclass | 19 +++ meta/classes/initramfs.bbclass | 44 ++++++ meta/classes/ova-wic-img.bbclass | 236 +++++++++++++++++++++++++++++++ 3 files changed, 299 insertions(+) create mode 100644 meta/classes/cpiogz-img.bbclass create mode 100644 meta/classes/initramfs.bbclass create mode 100644 meta/classes/ova-wic-img.bbclass -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH 1/3] meta/classes: Generate a custom initramfs 2020-03-27 13:27 [PATCH 0/3] some image classes Q. Gylstorff @ 2020-03-27 13:27 ` Q. Gylstorff 2020-03-30 7:25 ` Gylstorff Quirin 2020-03-27 13:28 ` [PATCH 2/3] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff ` (4 subsequent siblings) 5 siblings, 1 reply; 58+ messages in thread From: Q. Gylstorff @ 2020-03-27 13:27 UTC (permalink / raw) To: isar-users; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> This class sets the Parameters for mkinitramfs before it overwrites the initrd.img of debian with a modified version. Use cases are the remove unnecessary kernel modules to reduce the size of the initrd by using the parameters: ``` INITRAMFS_MODULES = "list" INITRAMFS_MODULE_LIST += "ext4" ``` Set the boot root during the initrd generation by setting `INITRAMFS_ROOT`. see also man pages of mkinitramfs and initramfs.conf. Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- meta/classes/initramfs.bbclass | 44 ++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 meta/classes/initramfs.bbclass diff --git a/meta/classes/initramfs.bbclass b/meta/classes/initramfs.bbclass new file mode 100644 index 0000000..0cc91c2 --- /dev/null +++ b/meta/classes/initramfs.bbclass @@ -0,0 +1,44 @@ +# This software is a part of ISAR. +# Copyright (C) 2020 Siemens AG +# +# SPDX-License-Identifier: MIT + +INITRAMFS_MODULES ?= "most" +INITRAMFS_BUSYBOX ?= "auto" +INITRAMFS_COMPRESS ?= "gzip" +INITRAMFS_KEYMAP ?= "n" +INITRAMFS_NET_DEVICE ?= "" +INITRAMFS_NFSROOT ?= "auto" +INITRAMFS_RUNSIZE ?= "10%" +INITRAMFS_ROOT ?= "" +INITRAMFS_MODULE_LIST ?= "" +update_initramfs_modules() { + for modname in ${INITRAMFS_MODULE_LIST}; do + sudo -E tee --append '${ROOTFSDIR}/etc/initramfs-tools/modules' << EOF +${modname} +EOF + done +} +update_initramfs_config() { + sudo -E tee ${ROOTFSDIR}/etc/initramfs-tools/initramfs.conf << EOF +MODULES=${INITRAMFS_MODULES} +BUSYBOX=${INITRAMFS_BUSYBOX} +COMPRESS=${INITRAMFS_COMPRESS} +KEYMAP=${INITRAMFS_KEYMAP} +DEVICE=${INITRAMFS_NET_DEVICE} +NFSROOT=${INITRAMFS_NFSROOT} +RUNSIZE=${INITRAMFS_RUNSIZE} +ROOT=${INITRAMFS_ROOT} +EOF +} + +do_update_initramfs() { + update_initramfs_modules + update_initramfs_config + export KERNEL_VERSION=$(ls ${ROOTFSDIR}/lib/modules) + bbplain kernel_version: ${KERNEL_VERSION} + sudo -E chroot '${ROOTFSDIR}' \ + mkinitramfs -v -k -o /boot/initrd.img-${KERNEL_VERSION} ${KERNEL_VERSION} +} + +addtask update_initramfs before do_copy_boot_files after do_rootfs_install -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH 1/3] meta/classes: Generate a custom initramfs 2020-03-27 13:27 ` [PATCH 1/3] meta/classes: Generate a custom initramfs Q. Gylstorff @ 2020-03-30 7:25 ` Gylstorff Quirin 2020-03-30 8:08 ` Henning Schild 0 siblings, 1 reply; 58+ messages in thread From: Gylstorff Quirin @ 2020-03-30 7:25 UTC (permalink / raw) To: isar-users On 3/27/20 2:27 PM, Q. Gylstorff wrote: > From: Quirin Gylstorff <quirin.gylstorff@siemens.com> > > This class sets the Parameters for mkinitramfs before it overwrites > the initrd.img of debian with a modified version. > > Use cases are the remove unnecessary kernel modules to reduce the > size of the initrd by using the parameters: > ``` > INITRAMFS_MODULES = "list" > INITRAMFS_MODULE_LIST += "ext4" > ``` > > Set the boot root during the initrd generation by setting `INITRAMFS_ROOT`. > > see also man pages of mkinitramfs and initramfs.conf. > > Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> > --- > meta/classes/initramfs.bbclass | 44 ++++++++++++++++++++++++++++++++++ > 1 file changed, 44 insertions(+) > create mode 100644 meta/classes/initramfs.bbclass > > diff --git a/meta/classes/initramfs.bbclass b/meta/classes/initramfs.bbclass > new file mode 100644 > index 0000000..0cc91c2 > --- /dev/null > +++ b/meta/classes/initramfs.bbclass > @@ -0,0 +1,44 @@ > +# This software is a part of ISAR. > +# Copyright (C) 2020 Siemens AG > +# > +# SPDX-License-Identifier: MIT > + > +INITRAMFS_MODULES ?= "most" > +INITRAMFS_BUSYBOX ?= "auto" > +INITRAMFS_COMPRESS ?= "gzip" > +INITRAMFS_KEYMAP ?= "n" > +INITRAMFS_NET_DEVICE ?= "" > +INITRAMFS_NFSROOT ?= "auto" > +INITRAMFS_RUNSIZE ?= "10%" > +INITRAMFS_ROOT ?= "" > +INITRAMFS_MODULE_LIST ?= "" > +update_initramfs_modules() { > + for modname in ${INITRAMFS_MODULE_LIST}; do > + sudo -E tee --append '${ROOTFSDIR}/etc/initramfs-tools/modules' << EOF > +${modname} > +EOF > + done > +} > +update_initramfs_config() { > + sudo -E tee ${ROOTFSDIR}/etc/initramfs-tools/initramfs.conf << EOF > +MODULES=${INITRAMFS_MODULES} > +BUSYBOX=${INITRAMFS_BUSYBOX} > +COMPRESS=${INITRAMFS_COMPRESS} > +KEYMAP=${INITRAMFS_KEYMAP} > +DEVICE=${INITRAMFS_NET_DEVICE} > +NFSROOT=${INITRAMFS_NFSROOT} > +RUNSIZE=${INITRAMFS_RUNSIZE} > +ROOT=${INITRAMFS_ROOT} > +EOF > +} > + > +do_update_initramfs() { > + update_initramfs_modules > + update_initramfs_config > + export KERNEL_VERSION=$(ls ${ROOTFSDIR}/lib/modules) > + bbplain kernel_version: ${KERNEL_VERSION} > + sudo -E chroot '${ROOTFSDIR}' \ > + mkinitramfs -v -k -o /boot/initrd.img-${KERNEL_VERSION} ${KERNEL_VERSION} An alternative here would be dracut[1] which has a nice cmdline and don need to copy all the information into the rootfs to generate the initramfs. But we would leave the debian way and if want to update the kernel/initrd with packages we need the debian scripts. > +} > + > +addtask update_initramfs before do_copy_boot_files after do_rootfs_install > [1]: https://dracut.wiki.kernel.org/index.php/Main_Page -- Quirin ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH 1/3] meta/classes: Generate a custom initramfs 2020-03-30 7:25 ` Gylstorff Quirin @ 2020-03-30 8:08 ` Henning Schild 0 siblings, 0 replies; 58+ messages in thread From: Henning Schild @ 2020-03-30 8:08 UTC (permalink / raw) To: [ext] Gylstorff Quirin; +Cc: isar-users Am Mon, 30 Mar 2020 09:25:34 +0200 schrieb "[ext] Gylstorff Quirin" <quirin.gylstorff@siemens.com>: > On 3/27/20 2:27 PM, Q. Gylstorff wrote: > > From: Quirin Gylstorff <quirin.gylstorff@siemens.com> > > > > This class sets the Parameters for mkinitramfs before it overwrites > > the initrd.img of debian with a modified version. > > > > Use cases are the remove unnecessary kernel modules to reduce the > > size of the initrd by using the parameters: > > ``` > > INITRAMFS_MODULES = "list" > > INITRAMFS_MODULE_LIST += "ext4" > > ``` > > > > Set the boot root during the initrd generation by setting > > `INITRAMFS_ROOT`. > > > > see also man pages of mkinitramfs and initramfs.conf. > > > > Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> > > --- > > meta/classes/initramfs.bbclass | 44 > > ++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) > > create mode 100644 meta/classes/initramfs.bbclass > > > > diff --git a/meta/classes/initramfs.bbclass > > b/meta/classes/initramfs.bbclass new file mode 100644 > > index 0000000..0cc91c2 > > --- /dev/null > > +++ b/meta/classes/initramfs.bbclass > > @@ -0,0 +1,44 @@ > > +# This software is a part of ISAR. > > +# Copyright (C) 2020 Siemens AG > > +# > > +# SPDX-License-Identifier: MIT > > + > > +INITRAMFS_MODULES ?= "most" > > +INITRAMFS_BUSYBOX ?= "auto" > > +INITRAMFS_COMPRESS ?= "gzip" > > +INITRAMFS_KEYMAP ?= "n" > > +INITRAMFS_NET_DEVICE ?= "" > > +INITRAMFS_NFSROOT ?= "auto" > > +INITRAMFS_RUNSIZE ?= "10%" > > +INITRAMFS_ROOT ?= "" > > +INITRAMFS_MODULE_LIST ?= "" > > +update_initramfs_modules() { > > + for modname in ${INITRAMFS_MODULE_LIST}; do > > + sudo -E tee --append > > '${ROOTFSDIR}/etc/initramfs-tools/modules' << EOF +${modname} > > +EOF > > + done > > +} > > +update_initramfs_config() { > > + sudo -E tee ${ROOTFSDIR}/etc/initramfs-tools/initramfs.conf << > > EOF +MODULES=${INITRAMFS_MODULES} > > +BUSYBOX=${INITRAMFS_BUSYBOX} > > +COMPRESS=${INITRAMFS_COMPRESS} > > +KEYMAP=${INITRAMFS_KEYMAP} > > +DEVICE=${INITRAMFS_NET_DEVICE} > > +NFSROOT=${INITRAMFS_NFSROOT} > > +RUNSIZE=${INITRAMFS_RUNSIZE} > > +ROOT=${INITRAMFS_ROOT} > > +EOF > > +} > > + > > +do_update_initramfs() { > > + update_initramfs_modules > > + update_initramfs_config > > + export KERNEL_VERSION=$(ls ${ROOTFSDIR}/lib/modules) > > + bbplain kernel_version: ${KERNEL_VERSION} > > + sudo -E chroot '${ROOTFSDIR}' \ > > + mkinitramfs -v -k -o /boot/initrd.img-${KERNEL_VERSION} > > ${KERNEL_VERSION} > > An alternative here would be dracut[1] which has a nice cmdline and > don need to copy all the information into the rootfs to generate the > initramfs. But we would leave the debian way and if want to update > the kernel/initrd with packages we need the debian scripts. I think i would stick with the debian way of things. But changing that config outside a package is a strong violation of Isar best practices. IMHO not acceptable the way you propose it here. Whatever gets done should happen automagically on a regular update of the kernel package. That said i think that class needs to append a config-package to IMAGE_INSTALL. The tricky bit will be getting PN/PV etc right, that might need to contain the image PN/PV to not create false-sharing in multiconfig. Henning > > +} > > + > > +addtask update_initramfs before do_copy_boot_files after > > do_rootfs_install > [1]: https://dracut.wiki.kernel.org/index.php/Main_Page ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH 2/3] meta/classes: Generate ova image for vmware or virtualbox 2020-03-27 13:27 [PATCH 0/3] some image classes Q. Gylstorff 2020-03-27 13:27 ` [PATCH 1/3] meta/classes: Generate a custom initramfs Q. Gylstorff @ 2020-03-27 13:28 ` Q. Gylstorff 2020-03-27 18:50 ` Henning Schild 2020-03-27 13:28 ` [PATCH 3/3] meta/classes: add cpiogz-img Q. Gylstorff ` (3 subsequent siblings) 5 siblings, 1 reply; 58+ messages in thread From: Q. Gylstorff @ 2020-03-27 13:28 UTC (permalink / raw) To: isar-users; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- meta/classes/ova-wic-img.bbclass | 236 +++++++++++++++++++++++++++++++ 1 file changed, 236 insertions(+) create mode 100644 meta/classes/ova-wic-img.bbclass diff --git a/meta/classes/ova-wic-img.bbclass b/meta/classes/ova-wic-img.bbclass new file mode 100644 index 0000000..a03ec1b --- /dev/null +++ b/meta/classes/ova-wic-img.bbclass @@ -0,0 +1,236 @@ +# This software is a part of ISAR. +# Copyright (C) 2019-2020 Siemens AG +# +# This class allows to generate images for vmware and virtualbox +# + +inherit buildchroot +inherit wic-img +IMAGER_INSTALL += "qemu-utils gawk uuid-runtime" +OVA_NAME ?= "${IMAGE_FULLNAME}" +OVA_MEMORY ?= "8192" +OVA_NUMBER_OF_CPU ?= "4" +OVA_VRAM ?= "64" +OVA_FIRMWARE ?= "efi" +OVA_ACPI ?= "true" +OVA_3D_ACCEL ?= "true" +OVA_CLIPBOARD ?= "bidirectional" +VMDK_DISK ?= "${PP_DEPLOY}/${VMDK_IMAGE_FILE}" +RAW_INPUT_IMAGE_FILE ?= "${IMAGE_FULLNAME}.wic.img" +VMDK_IMAGE_FILE = "${IMAGE_FULLNAME}.vmdk" +VMDK_SUBFORMAT ?= "monolithicSparse" +do_convert_wic_to_vmdk() { + rm -f '${DEPLOY_DIR_IMAGE}/${VMDK_IMAGE_FILE}' + image_do_mounts + bbnote "Creating ${VMDK_IMAGE_FILE} from ${RAW_INPUT_IMAGE_FILE}" + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \ + /usr/bin/qemu-img convert -f raw -O vmdk -o subformat=${VMDK_SUBFORMAT} \ + '${PP_DEPLOY}/${RAW_INPUT_IMAGE_FILE}' '${PP_DEPLOY}/${VMDK_IMAGE_FILE}' +} + +addtask convert_wic_to_vmdk before do_build after do_wic_image do_copy_boot_files do_install_imager_deps do_transform_template + +# Generate random MAC addresses just as VirtualBox does, the format is +# their assigned prefix for the first 3 bytes followed by 3 random bytes. +VBOX_MAC_PREFIX = "080027" +macgen() { + hexdump -n3 -e "\"${VBOX_MAC_PREFIX}%06X\n\"" /dev/urandom +} +get_disksize() { + image_do_mounts + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \ + qemu-img info -f vmdk "${VMDK_DISK}" | gawk 'match($0, /^virtual size:.*\(([0-9]+) bytes\)/, a) {print a[1]}' +} +do_create_ova() { + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ova' + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ovf' + export PRIMARY_MAC=$(macgen) + export SECONDARY_MAC=$(macgen) + export DISK_NAME=$(basename -s .vmdk ${VMDK_DISK}) + export DISK_SIZE_BYTES=$(get_disksize) + export LAST_CHANGE=$(date -u "+%Y-%m-%dT%H:%M:%SZ") + export OVA_FIRMWARE_VIRTUALBOX=$(echo ${OVA_FIRMWARE} | tr '[a-z]' '[A-Z]') + image_do_mounts + sudo -Es chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} <<'EOSUDO' + export DISK_UUID=$(uuidgen) + export VM_UUID=$(uuidgen) + # create ovf + cat > "${PP_DEPLOY}/${DISK_NAME}.ovf" << EOF +<?xml version="1.0" encoding="UTF-8"?> +<Envelope ovf:version="1.0" xml:lang="en-US" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vbox="http://www.virtualbox.org/ovf/machine"> + <References> + <File ovf:href="${VMDK_IMAGE_FILE}" ovf:id="file1"/> + </References> + <DiskSection> + <Info>List of the virtual disks used in the package</Info> + <Disk ovf:capacity="${DISK_SIZE_BYTES}" ovf:capacityAllocationUnits="byte" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized" vbox:uuid="${DISK_UUID}"/> + </DiskSection> + <NetworkSection> + <Info>Logical networks used in the package</Info> + <Network ovf:name="NAT"> + <Description>Logical network used by this appliance.</Description> + </Network> + </NetworkSection> + <VirtualSystem ovf:id="${OVA_NAME}"> + <Info>A virtual machine</Info> + <OperatingSystemSection ovf:id="100"> + <Info>The kind of installed guest operating system</Info> + <Description>Debian_64</Description> + <vbox:OSType ovf:required="false">Debian_64</vbox:OSType> + </OperatingSystemSection> + <VirtualHardwareSection> + <Info>Virtual hardware requirements for a virtual machine</Info> + <System> + <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> + <vssd:InstanceID>0</vssd:InstanceID> + <vssd:VirtualSystemIdentifier>${OVA_NAME}</vssd:VirtualSystemIdentifier> + <vssd:VirtualSystemType>virtualbox-2.2</vssd:VirtualSystemType> + </System> + <Item> + <rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits> + <rasd:Caption>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:Caption> + <rasd:Description>Number of virtual CPUs</rasd:Description> + <rasd:ElementName>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:ElementName> + <rasd:InstanceID>1</rasd:InstanceID> + <rasd:ResourceType>3</rasd:ResourceType> + <rasd:VirtualQuantity>${OVA_NUMBER_OF_CPU}</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:AllocationUnits>MegaBytes</rasd:AllocationUnits> + <rasd:Caption>${OVA_MEMORY} MB of memory</rasd:Caption> + <rasd:Description>Memory Size</rasd:Description> + <rasd:ElementName>${OVA_MEMORY} MB of memory</rasd:ElementName> + <rasd:InstanceID>2</rasd:InstanceID> + <rasd:ResourceType>4</rasd:ResourceType> + <rasd:VirtualQuantity>${OVA_MEMORY}</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:Address>0</rasd:Address> + <rasd:Caption>ideController0</rasd:Caption> + <rasd:Description>IDE Controller</rasd:Description> + <rasd:ElementName>ideController0</rasd:ElementName> + <rasd:InstanceID>3</rasd:InstanceID> + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> + <rasd:ResourceType>5</rasd:ResourceType> + </Item> + <Item> + <rasd:Address>1</rasd:Address> + <rasd:Caption>ideController1</rasd:Caption> + <rasd:Description>IDE Controller</rasd:Description> + <rasd:ElementName>ideController1</rasd:ElementName> + <rasd:InstanceID>4</rasd:InstanceID> + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> + <rasd:ResourceType>5</rasd:ResourceType> + </Item> + <Item> + <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> + <rasd:Caption>Ethernet adapter on 'NAT'</rasd:Caption> + <rasd:Connection>NAT</rasd:Connection> + <rasd:ElementName>Ethernet adapter on 'NAT'</rasd:ElementName> + <rasd:InstanceID>5</rasd:InstanceID> + <rasd:ResourceSubType>E1000</rasd:ResourceSubType> + <rasd:ResourceType>10</rasd:ResourceType> + </Item> + <Item> + <rasd:AddressOnParent>0</rasd:AddressOnParent> + <rasd:Caption>disk1</rasd:Caption> + <rasd:Description>Disk Image</rasd:Description> + <rasd:ElementName>disk1</rasd:ElementName> + <rasd:HostResource>/disk/vmdisk1</rasd:HostResource> + <rasd:InstanceID>6</rasd:InstanceID> + <rasd:Parent>3</rasd:Parent> + <rasd:ResourceType>17</rasd:ResourceType> + </Item> + <vmw:Config ovf:required="false" vmw:key="firmware" vmw:value="${OVA_FIRMWARE}"/> + <vmw:Config ovf:required="false" vmw:key="tools.syncTimeWithHost" vmw:value="false"/> + <vmw:Config ovf:required="false" vmw:key="tools.afterPowerOn" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.afterResume" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.beforeGuestShutdown" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.beforeGuestStandby" vmw:value="true"/> + <vmw:ExtraConfig ovf:required="false" vmw:key="virtualHW.productCompatibility" vmw:value="hosted"/> + </VirtualHardwareSection> + <vbox:Machine ovf:required="false" version="1.12-linux" uuid="${VM_UUID}" name="${OVA_NAME}" OSType="Debian_64" snapshotFolder="Snapshots" lastStateChange="${LAST_CHANGE}"> + <ovf:Info>Complete VirtualBox machine configuration in VirtualBox format</ovf:Info> + <Hardware version="2"> + <CPU count="${OVA_NUMBER_OF_CPU}" hotplug="false"> + <HardwareVirtEx enabled="true" exclusive="true"/> + <HardwareVirtExNestedPaging enabled="true"/> + <HardwareVirtExVPID enabled="true"/> + <PAE enabled="true"/> + <HardwareVirtExLargePages enabled="false"/> + <HardwareVirtForce enabled="false"/> + </CPU> + <Memory RAMSize="${OVA_MEMORY}" PageFusion="false"/> + <Firmware type="${OVA_FIRMWARE_VIRTUALBOX}"/> + <HID Pointing="PS2Mouse" Keyboard="PS2Keyboard"/> + <HPET enabled="false"/> + <Chipset type="PIIX3"/> + <Boot> + <Order position="1" device="HardDisk"/> + <Order position="2" device="None"/> + <Order position="3" device="None"/> + <Order position="4" device="None"/> + </Boot> + <Display VRAMSize="${OVA_VRAM}" monitorCount="1" accelerate3D="${OVA_3D_ACCEL}" accelerate2DVideo="false"/> + <VideoRecording enabled="false" file="Test.webm" horzRes="640" vertRes="480"/> + <RemoteDisplay enabled="false" authType="Null"/> + <BIOS> + <ACPI enabled="${OVA_ACPI}"/> + <IOAPIC enabled="${OVA_ACPI}"/> + <Logo fadeIn="true" fadeOut="true" displayTime="0"/> + <BootMenu mode="MessageAndMenu"/> + <TimeOffset value="0"/> + <PXEDebug enabled="false"/> + </BIOS> + <USBController enabled="false" enabledEhci="false"/> + <Network> + <Adapter slot="0" enabled="true" MACAddress="${PRIMARY_MAC}" cable="true" speed="0" type="virtio"> + <DisabledModes/> + <NAT> + <DNS pass-domain="true" use-proxy="false" use-host-resolver="false"/> + <Alias logging="false" proxy-only="false" use-same-ports="false"/> + </NAT> + </Adapter> + </Network> + <UART> + <Port slot="0" enabled="false" IOBase="0x3f8" IRQ="4" hostMode="Disconnected"/> + <Port slot="1" enabled="false" IOBase="0x2f8" IRQ="3" hostMode="Disconnected"/> + </UART> + <LPT> + <Port slot="0" enabled="false" IOBase="0x378" IRQ="7"/> + <Port slot="1" enabled="false" IOBase="0x378" IRQ="7"/> + </LPT> + <AudioAdapter controller="AC97" driver="Pulse" enabled="false"/> + <RTC localOrUTC="local"/> + <SharedFolders/> + <Clipboard mode="Disabled"/> + <DragAndDrop mode="Disabled"/> + <IO> + <IoCache enabled="true" size="5"/> + <BandwidthGroups/> + </IO> + <HostPci> + <Devices/> + </HostPci> + <EmulatedUSB> + <CardReader enabled="false"/> + </EmulatedUSB> + <Guest memoryBalloonSize="0"/> + <GuestProperties/> + </Hardware> + <StorageControllers> + <StorageController name="IDE Controller" type="PIIX4" PortCount="2" useHostIOCache="true" Bootable="true"> + <AttachedDevice type="HardDisk" port="0" device="0"> + <Image uuid="{${DISK_UUID}}"/> + </AttachedDevice> + </StorageController> + </StorageControllers> + </vbox:Machine> + </VirtualSystem> +</Envelope> +EOF +tar -c -f ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${OVA_NAME}.ovf ${VMDK_IMAGE_FILE} +EOSUDO +} + +addtask do_create_ova after do_convert_wic_to_vmdk before do_deploy \ No newline at end of file -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH 2/3] meta/classes: Generate ova image for vmware or virtualbox 2020-03-27 13:28 ` [PATCH 2/3] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff @ 2020-03-27 18:50 ` Henning Schild 2020-03-30 7:27 ` Gylstorff Quirin 0 siblings, 1 reply; 58+ messages in thread From: Henning Schild @ 2020-03-27 18:50 UTC (permalink / raw) To: [ext] Q. Gylstorff; +Cc: isar-users Hi Quirin, i recently used that in a layer. In fact it does two things that maybe deserve two classes ... or the name of the class should change. 1. it converts a raw image into another format ... something that could even eventually support qcow2, vdi ... 2. it creates an ova as a follow-up step of a vmdk conversion That said, i think it can stay in one class. But the name of that class should change. "virtual-machine-image.bbclass" ? And the ova step should be done only if VIRTUAL_MACHINE_IMAGE_TYPE="vmdk". I think going with vmdk-only in a first round is good, but its important to hopefully find an interface that we do not need to change with the next sub-feature. On Fri, 27 Mar 2020 14:28:00 +0100 "[ext] Q. Gylstorff" <Quirin.Gylstorff@siemens.com> wrote: > From: Quirin Gylstorff <quirin.gylstorff@siemens.com> > > Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> > --- > meta/classes/ova-wic-img.bbclass | 236 > +++++++++++++++++++++++++++++++ 1 file changed, 236 insertions(+) > create mode 100644 meta/classes/ova-wic-img.bbclass > > diff --git a/meta/classes/ova-wic-img.bbclass > b/meta/classes/ova-wic-img.bbclass new file mode 100644 > index 0000000..a03ec1b > --- /dev/null > +++ b/meta/classes/ova-wic-img.bbclass > @@ -0,0 +1,236 @@ > +# This software is a part of ISAR. > +# Copyright (C) 2019-2020 Siemens AG > +# > +# This class allows to generate images for vmware and virtualbox > +# > + > +inherit buildchroot > +inherit wic-img > +IMAGER_INSTALL += "qemu-utils gawk uuid-runtime" > +OVA_NAME ?= "${IMAGE_FULLNAME}" > +OVA_MEMORY ?= "8192" > +OVA_NUMBER_OF_CPU ?= "4" > +OVA_VRAM ?= "64" > +OVA_FIRMWARE ?= "efi" > +OVA_ACPI ?= "true" > +OVA_3D_ACCEL ?= "true" > +OVA_CLIPBOARD ?= "bidirectional" > +VMDK_DISK ?= "${PP_DEPLOY}/${VMDK_IMAGE_FILE}" > +RAW_INPUT_IMAGE_FILE ?= "${IMAGE_FULLNAME}.wic.img" > +VMDK_IMAGE_FILE = "${IMAGE_FULLNAME}.vmdk" > +VMDK_SUBFORMAT ?= "monolithicSparse" > +do_convert_wic_to_vmdk() { > + rm -f '${DEPLOY_DIR_IMAGE}/${VMDK_IMAGE_FILE}' indent is off > + image_do_mounts > + bbnote "Creating ${VMDK_IMAGE_FILE} from ${RAW_INPUT_IMAGE_FILE}" > + sudo -E chroot --userspec=$( id -u ):$( id -g ) > ${BUILDCHROOT_DIR} \ > + /usr/bin/qemu-img convert -f raw -O vmdk -o > subformat=${VMDK_SUBFORMAT} \ > + '${PP_DEPLOY}/${RAW_INPUT_IMAGE_FILE}' > '${PP_DEPLOY}/${VMDK_IMAGE_FILE}' +} the command under sudo should be indented deeper > +addtask convert_wic_to_vmdk before do_build after do_wic_image > do_copy_boot_files do_install_imager_deps do_transform_template + > +# Generate random MAC addresses just as VirtualBox does, the format > is +# their assigned prefix for the first 3 bytes followed by 3 > random bytes. +VBOX_MAC_PREFIX = "080027" > +macgen() { > + hexdump -n3 -e "\"${VBOX_MAC_PREFIX}%06X\n\"" /dev/urandom > +} > +get_disksize() { > + image_do_mounts > + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} > \ > + qemu-img info -f vmdk "${VMDK_DISK}" | gawk 'match($0, /^virtual > size:.*\(([0-9]+) bytes\)/, a) {print a[1]}' +} > +do_create_ova() { > + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ova' > + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ovf' > + export PRIMARY_MAC=$(macgen) > + export SECONDARY_MAC=$(macgen) I am not sure, but maybe people would want to control that. But i guess default random is a good starting point. > + export DISK_NAME=$(basename -s .vmdk ${VMDK_DISK}) > + export DISK_SIZE_BYTES=$(get_disksize) > + export LAST_CHANGE=$(date -u "+%Y-%m-%dT%H:%M:%SZ") > + export OVA_FIRMWARE_VIRTUALBOX=$(echo ${OVA_FIRMWARE} | tr '[a-z]' > '[A-Z]') > + image_do_mounts > + sudo -Es chroot --userspec=$( id -u ):$( id -g ) > ${BUILDCHROOT_DIR} <<'EOSUDO' indentation again > + export DISK_UUID=$(uuidgen) > + export VM_UUID=$(uuidgen) > + # create ovf > + cat > "${PP_DEPLOY}/${DISK_NAME}.ovf" << EOF > +<?xml version="1.0" encoding="UTF-8"?> > +<Envelope ovf:version="1.0" xml:lang="en-US" The xml is pretty long-ish and makes reading the code hard. How about that gets fetch with file:/// and patched with the templating code we have. That would also allow customizations by replacing the file:/// in a layer. > xmlns="http://schemas.dmtf.org/ovf/envelope/1" > xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" > xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" > xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns:vbox="http://www.virtualbox.org/ovf/machine"> > + <References> > + <File ovf:href="${VMDK_IMAGE_FILE}" ovf:id="file1"/> > + </References> > + <DiskSection> > + <Info>List of the virtual disks used in the package</Info> > + <Disk ovf:capacity="${DISK_SIZE_BYTES}" > ovf:capacityAllocationUnits="byte" ovf:diskId="vmdisk1" > ovf:fileRef="file1" > ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized" > vbox:uuid="${DISK_UUID}"/> > + </DiskSection> > + <NetworkSection> > + <Info>Logical networks used in the package</Info> > + <Network ovf:name="NAT"> > + <Description>Logical network used by this > appliance.</Description> > + </Network> > + </NetworkSection> > + <VirtualSystem ovf:id="${OVA_NAME}"> > + <Info>A virtual machine</Info> > + <OperatingSystemSection ovf:id="100"> > + <Info>The kind of installed guest operating system</Info> > + <Description>Debian_64</Description> > + <vbox:OSType ovf:required="false">Debian_64</vbox:OSType> > + </OperatingSystemSection> > + <VirtualHardwareSection> > + <Info>Virtual hardware requirements for a virtual > machine</Info> > + <System> > + <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> > + <vssd:InstanceID>0</vssd:InstanceID> > + > <vssd:VirtualSystemIdentifier>${OVA_NAME}</vssd:VirtualSystemIdentifier> > + > <vssd:VirtualSystemType>virtualbox-2.2</vssd:VirtualSystemType> > + </System> > + <Item> > + <rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits> > + <rasd:Caption>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:Caption> > + <rasd:Description>Number of virtual CPUs</rasd:Description> > + <rasd:ElementName>${OVA_NUMBER_OF_CPU} virtual > CPU</rasd:ElementName> > + <rasd:InstanceID>1</rasd:InstanceID> > + <rasd:ResourceType>3</rasd:ResourceType> > + > <rasd:VirtualQuantity>${OVA_NUMBER_OF_CPU}</rasd:VirtualQuantity> > + </Item> > + <Item> > + <rasd:AllocationUnits>MegaBytes</rasd:AllocationUnits> > + <rasd:Caption>${OVA_MEMORY} MB of memory</rasd:Caption> > + <rasd:Description>Memory Size</rasd:Description> > + <rasd:ElementName>${OVA_MEMORY} MB of > memory</rasd:ElementName> > + <rasd:InstanceID>2</rasd:InstanceID> > + <rasd:ResourceType>4</rasd:ResourceType> > + <rasd:VirtualQuantity>${OVA_MEMORY}</rasd:VirtualQuantity> > + </Item> > + <Item> > + <rasd:Address>0</rasd:Address> > + <rasd:Caption>ideController0</rasd:Caption> > + <rasd:Description>IDE Controller</rasd:Description> > + <rasd:ElementName>ideController0</rasd:ElementName> > + <rasd:InstanceID>3</rasd:InstanceID> > + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> > + <rasd:ResourceType>5</rasd:ResourceType> > + </Item> > + <Item> > + <rasd:Address>1</rasd:Address> > + <rasd:Caption>ideController1</rasd:Caption> > + <rasd:Description>IDE Controller</rasd:Description> > + <rasd:ElementName>ideController1</rasd:ElementName> > + <rasd:InstanceID>4</rasd:InstanceID> > + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> > + <rasd:ResourceType>5</rasd:ResourceType> > + </Item> > + <Item> > + <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> > + <rasd:Caption>Ethernet adapter on 'NAT'</rasd:Caption> > + <rasd:Connection>NAT</rasd:Connection> > + <rasd:ElementName>Ethernet adapter on > 'NAT'</rasd:ElementName> > + <rasd:InstanceID>5</rasd:InstanceID> > + <rasd:ResourceSubType>E1000</rasd:ResourceSubType> > + <rasd:ResourceType>10</rasd:ResourceType> > + </Item> > + <Item> > + <rasd:AddressOnParent>0</rasd:AddressOnParent> > + <rasd:Caption>disk1</rasd:Caption> > + <rasd:Description>Disk Image</rasd:Description> > + <rasd:ElementName>disk1</rasd:ElementName> > + <rasd:HostResource>/disk/vmdisk1</rasd:HostResource> > + <rasd:InstanceID>6</rasd:InstanceID> > + <rasd:Parent>3</rasd:Parent> > + <rasd:ResourceType>17</rasd:ResourceType> > + </Item> > + <vmw:Config ovf:required="false" vmw:key="firmware" > vmw:value="${OVA_FIRMWARE}"/> > + <vmw:Config ovf:required="false" > vmw:key="tools.syncTimeWithHost" vmw:value="false"/> > + <vmw:Config ovf:required="false" vmw:key="tools.afterPowerOn" > vmw:value="true"/> > + <vmw:Config ovf:required="false" vmw:key="tools.afterResume" > vmw:value="true"/> > + <vmw:Config ovf:required="false" > vmw:key="tools.beforeGuestShutdown" vmw:value="true"/> > + <vmw:Config ovf:required="false" > vmw:key="tools.beforeGuestStandby" vmw:value="true"/> > + <vmw:ExtraConfig ovf:required="false" > vmw:key="virtualHW.productCompatibility" vmw:value="hosted"/> > + </VirtualHardwareSection> > + <vbox:Machine ovf:required="false" version="1.12-linux" > uuid="${VM_UUID}" name="${OVA_NAME}" OSType="Debian_64" > snapshotFolder="Snapshots" lastStateChange="${LAST_CHANGE}"> > + <ovf:Info>Complete VirtualBox machine configuration in > VirtualBox format</ovf:Info> > + <Hardware version="2"> > + <CPU count="${OVA_NUMBER_OF_CPU}" hotplug="false"> > + <HardwareVirtEx enabled="true" exclusive="true"/> > + <HardwareVirtExNestedPaging enabled="true"/> > + <HardwareVirtExVPID enabled="true"/> > + <PAE enabled="true"/> > + <HardwareVirtExLargePages enabled="false"/> > + <HardwareVirtForce enabled="false"/> > + </CPU> > + <Memory RAMSize="${OVA_MEMORY}" PageFusion="false"/> > + <Firmware type="${OVA_FIRMWARE_VIRTUALBOX}"/> > + <HID Pointing="PS2Mouse" Keyboard="PS2Keyboard"/> > + <HPET enabled="false"/> > + <Chipset type="PIIX3"/> > + <Boot> > + <Order position="1" device="HardDisk"/> > + <Order position="2" device="None"/> > + <Order position="3" device="None"/> > + <Order position="4" device="None"/> > + </Boot> > + <Display VRAMSize="${OVA_VRAM}" monitorCount="1" > accelerate3D="${OVA_3D_ACCEL}" accelerate2DVideo="false"/> > + <VideoRecording enabled="false" file="Test.webm" > horzRes="640" vertRes="480"/> > + <RemoteDisplay enabled="false" authType="Null"/> > + <BIOS> > + <ACPI enabled="${OVA_ACPI}"/> > + <IOAPIC enabled="${OVA_ACPI}"/> > + <Logo fadeIn="true" fadeOut="true" displayTime="0"/> > + <BootMenu mode="MessageAndMenu"/> > + <TimeOffset value="0"/> > + <PXEDebug enabled="false"/> > + </BIOS> > + <USBController enabled="false" enabledEhci="false"/> > + <Network> > + <Adapter slot="0" enabled="true" > MACAddress="${PRIMARY_MAC}" cable="true" speed="0" type="virtio"> > + <DisabledModes/> > + <NAT> > + <DNS pass-domain="true" use-proxy="false" > use-host-resolver="false"/> > + <Alias logging="false" proxy-only="false" > use-same-ports="false"/> > + </NAT> > + </Adapter> > + </Network> > + <UART> > + <Port slot="0" enabled="false" IOBase="0x3f8" IRQ="4" > hostMode="Disconnected"/> > + <Port slot="1" enabled="false" IOBase="0x2f8" IRQ="3" > hostMode="Disconnected"/> > + </UART> > + <LPT> > + <Port slot="0" enabled="false" IOBase="0x378" IRQ="7"/> > + <Port slot="1" enabled="false" IOBase="0x378" IRQ="7"/> > + </LPT> > + <AudioAdapter controller="AC97" driver="Pulse" > enabled="false"/> > + <RTC localOrUTC="local"/> > + <SharedFolders/> > + <Clipboard mode="Disabled"/> > + <DragAndDrop mode="Disabled"/> > + <IO> > + <IoCache enabled="true" size="5"/> > + <BandwidthGroups/> > + </IO> > + <HostPci> > + <Devices/> > + </HostPci> > + <EmulatedUSB> > + <CardReader enabled="false"/> > + </EmulatedUSB> > + <Guest memoryBalloonSize="0"/> > + <GuestProperties/> > + </Hardware> > + <StorageControllers> > + <StorageController name="IDE Controller" type="PIIX4" > PortCount="2" useHostIOCache="true" Bootable="true"> > + <AttachedDevice type="HardDisk" port="0" device="0"> > + <Image uuid="{${DISK_UUID}}"/> > + </AttachedDevice> > + </StorageController> > + </StorageControllers> > + </vbox:Machine> > + </VirtualSystem> > +</Envelope> > +EOF > +tar -c -f ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} > ${OVA_NAME}.ovf ${VMDK_IMAGE_FILE} +EOSUDO > +} > + > +addtask do_create_ova after do_convert_wic_to_vmdk before do_deploy > \ No newline at end of file ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH 2/3] meta/classes: Generate ova image for vmware or virtualbox 2020-03-27 18:50 ` Henning Schild @ 2020-03-30 7:27 ` Gylstorff Quirin 0 siblings, 0 replies; 58+ messages in thread From: Gylstorff Quirin @ 2020-03-30 7:27 UTC (permalink / raw) To: Henning Schild; +Cc: isar-users On 3/27/20 7:50 PM, Henning Schild wrote: > Hi Quirin, > > i recently used that in a layer. In fact it does two things that maybe > deserve two classes ... or the name of the class should change. > > 1. it converts a raw image into another format ... something that could > even eventually support qcow2, vdi ... ACK > > 2. it creates an ova as a follow-up step of a vmdk conversion > > That said, i think it can stay in one class. But the name of that class > should change. > "virtual-machine-image.bbclass" ? ACK > > And the ova step should be done only if > VIRTUAL_MACHINE_IMAGE_TYPE="vmdk". > > I think going with vmdk-only in a first round is good, but its > important to hopefully find an interface that we do not need to change > with the next sub-feature. > I will incorporate your comments in a v2. Quirin > On Fri, 27 Mar 2020 14:28:00 +0100 > "[ext] Q. Gylstorff" <Quirin.Gylstorff@siemens.com> wrote: > >> From: Quirin Gylstorff <quirin.gylstorff@siemens.com> >> >> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> >> --- >> meta/classes/ova-wic-img.bbclass | 236 >> +++++++++++++++++++++++++++++++ 1 file changed, 236 insertions(+) >> create mode 100644 meta/classes/ova-wic-img.bbclass >> >> diff --git a/meta/classes/ova-wic-img.bbclass >> b/meta/classes/ova-wic-img.bbclass new file mode 100644 >> index 0000000..a03ec1b >> --- /dev/null >> +++ b/meta/classes/ova-wic-img.bbclass >> @@ -0,0 +1,236 @@ >> +# This software is a part of ISAR. >> +# Copyright (C) 2019-2020 Siemens AG >> +# >> +# This class allows to generate images for vmware and virtualbox >> +# >> + >> +inherit buildchroot >> +inherit wic-img >> +IMAGER_INSTALL += "qemu-utils gawk uuid-runtime" >> +OVA_NAME ?= "${IMAGE_FULLNAME}" >> +OVA_MEMORY ?= "8192" >> +OVA_NUMBER_OF_CPU ?= "4" >> +OVA_VRAM ?= "64" >> +OVA_FIRMWARE ?= "efi" >> +OVA_ACPI ?= "true" >> +OVA_3D_ACCEL ?= "true" >> +OVA_CLIPBOARD ?= "bidirectional" >> +VMDK_DISK ?= "${PP_DEPLOY}/${VMDK_IMAGE_FILE}" >> +RAW_INPUT_IMAGE_FILE ?= "${IMAGE_FULLNAME}.wic.img" >> +VMDK_IMAGE_FILE = "${IMAGE_FULLNAME}.vmdk" >> +VMDK_SUBFORMAT ?= "monolithicSparse" >> +do_convert_wic_to_vmdk() { ok>> + rm -f '${DEPLOY_DIR_IMAGE}/${VMDK_IMAGE_FILE}' > > indent is off > >> + image_do_mounts >> + bbnote "Creating ${VMDK_IMAGE_FILE} from ${RAW_INPUT_IMAGE_FILE}" >> + sudo -E chroot --userspec=$( id -u ):$( id -g ) >> ${BUILDCHROOT_DIR} \ >> + /usr/bin/qemu-img convert -f raw -O vmdk -o >> subformat=${VMDK_SUBFORMAT} \ >> + '${PP_DEPLOY}/${RAW_INPUT_IMAGE_FILE}' >> '${PP_DEPLOY}/${VMDK_IMAGE_FILE}' +} > > the command under sudo should be indented deeper > >> +addtask convert_wic_to_vmdk before do_build after do_wic_image >> do_copy_boot_files do_install_imager_deps do_transform_template + >> +# Generate random MAC addresses just as VirtualBox does, the format >> is +# their assigned prefix for the first 3 bytes followed by 3 >> random bytes. +VBOX_MAC_PREFIX = "080027" >> +macgen() { >> + hexdump -n3 -e "\"${VBOX_MAC_PREFIX}%06X\n\"" /dev/urandom >> +} >> +get_disksize() { >> + image_do_mounts >> + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} >> \ >> + qemu-img info -f vmdk "${VMDK_DISK}" | gawk 'match($0, /^virtual >> size:.*\(([0-9]+) bytes\)/, a) {print a[1]}' +} >> +do_create_ova() { >> + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ova' >> + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ovf' >> + export PRIMARY_MAC=$(macgen) >> + export SECONDARY_MAC=$(macgen) > > I am not sure, but maybe people would want to control that. But i guess > default random is a good starting point. > >> + export DISK_NAME=$(basename -s .vmdk ${VMDK_DISK}) >> + export DISK_SIZE_BYTES=$(get_disksize) >> + export LAST_CHANGE=$(date -u "+%Y-%m-%dT%H:%M:%SZ") >> + export OVA_FIRMWARE_VIRTUALBOX=$(echo ${OVA_FIRMWARE} | tr '[a-z]' >> '[A-Z]') >> + image_do_mounts >> + sudo -Es chroot --userspec=$( id -u ):$( id -g ) >> ${BUILDCHROOT_DIR} <<'EOSUDO' > > indentation again > >> + export DISK_UUID=$(uuidgen) >> + export VM_UUID=$(uuidgen) >> + # create ovf >> + cat > "${PP_DEPLOY}/${DISK_NAME}.ovf" << EOF >> +<?xml version="1.0" encoding="UTF-8"?> >> +<Envelope ovf:version="1.0" xml:lang="en-US" > > The xml is pretty long-ish and makes reading the code hard. How about > that gets fetch with file:/// and patched with the templating code we > have. > That would also allow customizations by replacing the file:/// in a > layer. > >> xmlns="http://schemas.dmtf.org/ovf/envelope/1" >> xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" >> xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" >> xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" >> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >> xmlns:vbox="http://www.virtualbox.org/ovf/machine"> >> + <References> >> + <File ovf:href="${VMDK_IMAGE_FILE}" ovf:id="file1"/> >> + </References> >> + <DiskSection> >> + <Info>List of the virtual disks used in the package</Info> >> + <Disk ovf:capacity="${DISK_SIZE_BYTES}" >> ovf:capacityAllocationUnits="byte" ovf:diskId="vmdisk1" >> ovf:fileRef="file1" >> ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized" >> vbox:uuid="${DISK_UUID}"/> >> + </DiskSection> >> + <NetworkSection> >> + <Info>Logical networks used in the package</Info> >> + <Network ovf:name="NAT"> >> + <Description>Logical network used by this >> appliance.</Description> >> + </Network> >> + </NetworkSection> >> + <VirtualSystem ovf:id="${OVA_NAME}"> >> + <Info>A virtual machine</Info> >> + <OperatingSystemSection ovf:id="100"> >> + <Info>The kind of installed guest operating system</Info> >> + <Description>Debian_64</Description> >> + <vbox:OSType ovf:required="false">Debian_64</vbox:OSType> >> + </OperatingSystemSection> >> + <VirtualHardwareSection> >> + <Info>Virtual hardware requirements for a virtual >> machine</Info> >> + <System> >> + <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> >> + <vssd:InstanceID>0</vssd:InstanceID> >> + >> <vssd:VirtualSystemIdentifier>${OVA_NAME}</vssd:VirtualSystemIdentifier> >> + >> <vssd:VirtualSystemType>virtualbox-2.2</vssd:VirtualSystemType> >> + </System> >> + <Item> >> + <rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits> >> + <rasd:Caption>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:Caption> >> + <rasd:Description>Number of virtual CPUs</rasd:Description> >> + <rasd:ElementName>${OVA_NUMBER_OF_CPU} virtual >> CPU</rasd:ElementName> >> + <rasd:InstanceID>1</rasd:InstanceID> >> + <rasd:ResourceType>3</rasd:ResourceType> >> + >> <rasd:VirtualQuantity>${OVA_NUMBER_OF_CPU}</rasd:VirtualQuantity> >> + </Item> >> + <Item> >> + <rasd:AllocationUnits>MegaBytes</rasd:AllocationUnits> >> + <rasd:Caption>${OVA_MEMORY} MB of memory</rasd:Caption> >> + <rasd:Description>Memory Size</rasd:Description> >> + <rasd:ElementName>${OVA_MEMORY} MB of >> memory</rasd:ElementName> >> + <rasd:InstanceID>2</rasd:InstanceID> >> + <rasd:ResourceType>4</rasd:ResourceType> >> + <rasd:VirtualQuantity>${OVA_MEMORY}</rasd:VirtualQuantity> >> + </Item> >> + <Item> >> + <rasd:Address>0</rasd:Address> >> + <rasd:Caption>ideController0</rasd:Caption> >> + <rasd:Description>IDE Controller</rasd:Description> >> + <rasd:ElementName>ideController0</rasd:ElementName> >> + <rasd:InstanceID>3</rasd:InstanceID> >> + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> >> + <rasd:ResourceType>5</rasd:ResourceType> >> + </Item> >> + <Item> >> + <rasd:Address>1</rasd:Address> >> + <rasd:Caption>ideController1</rasd:Caption> >> + <rasd:Description>IDE Controller</rasd:Description> >> + <rasd:ElementName>ideController1</rasd:ElementName> >> + <rasd:InstanceID>4</rasd:InstanceID> >> + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> >> + <rasd:ResourceType>5</rasd:ResourceType> >> + </Item> >> + <Item> >> + <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> >> + <rasd:Caption>Ethernet adapter on 'NAT'</rasd:Caption> >> + <rasd:Connection>NAT</rasd:Connection> >> + <rasd:ElementName>Ethernet adapter on >> 'NAT'</rasd:ElementName> >> + <rasd:InstanceID>5</rasd:InstanceID> >> + <rasd:ResourceSubType>E1000</rasd:ResourceSubType> >> + <rasd:ResourceType>10</rasd:ResourceType> >> + </Item> >> + <Item> >> + <rasd:AddressOnParent>0</rasd:AddressOnParent> >> + <rasd:Caption>disk1</rasd:Caption> >> + <rasd:Description>Disk Image</rasd:Description> >> + <rasd:ElementName>disk1</rasd:ElementName> >> + <rasd:HostResource>/disk/vmdisk1</rasd:HostResource> >> + <rasd:InstanceID>6</rasd:InstanceID> >> + <rasd:Parent>3</rasd:Parent> >> + <rasd:ResourceType>17</rasd:ResourceType> >> + </Item> >> + <vmw:Config ovf:required="false" vmw:key="firmware" >> vmw:value="${OVA_FIRMWARE}"/> >> + <vmw:Config ovf:required="false" >> vmw:key="tools.syncTimeWithHost" vmw:value="false"/> >> + <vmw:Config ovf:required="false" vmw:key="tools.afterPowerOn" >> vmw:value="true"/> >> + <vmw:Config ovf:required="false" vmw:key="tools.afterResume" >> vmw:value="true"/> >> + <vmw:Config ovf:required="false" >> vmw:key="tools.beforeGuestShutdown" vmw:value="true"/> >> + <vmw:Config ovf:required="false" >> vmw:key="tools.beforeGuestStandby" vmw:value="true"/> >> + <vmw:ExtraConfig ovf:required="false" >> vmw:key="virtualHW.productCompatibility" vmw:value="hosted"/> >> + </VirtualHardwareSection> >> + <vbox:Machine ovf:required="false" version="1.12-linux" >> uuid="${VM_UUID}" name="${OVA_NAME}" OSType="Debian_64" >> snapshotFolder="Snapshots" lastStateChange="${LAST_CHANGE}"> >> + <ovf:Info>Complete VirtualBox machine configuration in >> VirtualBox format</ovf:Info> >> + <Hardware version="2"> >> + <CPU count="${OVA_NUMBER_OF_CPU}" hotplug="false"> >> + <HardwareVirtEx enabled="true" exclusive="true"/> >> + <HardwareVirtExNestedPaging enabled="true"/> >> + <HardwareVirtExVPID enabled="true"/> >> + <PAE enabled="true"/> >> + <HardwareVirtExLargePages enabled="false"/> >> + <HardwareVirtForce enabled="false"/> >> + </CPU> >> + <Memory RAMSize="${OVA_MEMORY}" PageFusion="false"/> >> + <Firmware type="${OVA_FIRMWARE_VIRTUALBOX}"/> >> + <HID Pointing="PS2Mouse" Keyboard="PS2Keyboard"/> >> + <HPET enabled="false"/> >> + <Chipset type="PIIX3"/> >> + <Boot> >> + <Order position="1" device="HardDisk"/> >> + <Order position="2" device="None"/> >> + <Order position="3" device="None"/> >> + <Order position="4" device="None"/> >> + </Boot> >> + <Display VRAMSize="${OVA_VRAM}" monitorCount="1" >> accelerate3D="${OVA_3D_ACCEL}" accelerate2DVideo="false"/> >> + <VideoRecording enabled="false" file="Test.webm" >> horzRes="640" vertRes="480"/> >> + <RemoteDisplay enabled="false" authType="Null"/> >> + <BIOS> >> + <ACPI enabled="${OVA_ACPI}"/> >> + <IOAPIC enabled="${OVA_ACPI}"/> >> + <Logo fadeIn="true" fadeOut="true" displayTime="0"/> >> + <BootMenu mode="MessageAndMenu"/> >> + <TimeOffset value="0"/> >> + <PXEDebug enabled="false"/> >> + </BIOS> >> + <USBController enabled="false" enabledEhci="false"/> >> + <Network> >> + <Adapter slot="0" enabled="true" >> MACAddress="${PRIMARY_MAC}" cable="true" speed="0" type="virtio"> >> + <DisabledModes/> >> + <NAT> >> + <DNS pass-domain="true" use-proxy="false" >> use-host-resolver="false"/> >> + <Alias logging="false" proxy-only="false" >> use-same-ports="false"/> >> + </NAT> >> + </Adapter> >> + </Network> >> + <UART> >> + <Port slot="0" enabled="false" IOBase="0x3f8" IRQ="4" >> hostMode="Disconnected"/> >> + <Port slot="1" enabled="false" IOBase="0x2f8" IRQ="3" >> hostMode="Disconnected"/> >> + </UART> >> + <LPT> >> + <Port slot="0" enabled="false" IOBase="0x378" IRQ="7"/> >> + <Port slot="1" enabled="false" IOBase="0x378" IRQ="7"/> >> + </LPT> >> + <AudioAdapter controller="AC97" driver="Pulse" >> enabled="false"/> >> + <RTC localOrUTC="local"/> >> + <SharedFolders/> >> + <Clipboard mode="Disabled"/> >> + <DragAndDrop mode="Disabled"/> >> + <IO> >> + <IoCache enabled="true" size="5"/> >> + <BandwidthGroups/> >> + </IO> >> + <HostPci> >> + <Devices/> >> + </HostPci> >> + <EmulatedUSB> >> + <CardReader enabled="false"/> >> + </EmulatedUSB> >> + <Guest memoryBalloonSize="0"/> >> + <GuestProperties/> >> + </Hardware> >> + <StorageControllers> >> + <StorageController name="IDE Controller" type="PIIX4" >> PortCount="2" useHostIOCache="true" Bootable="true"> >> + <AttachedDevice type="HardDisk" port="0" device="0"> >> + <Image uuid="{${DISK_UUID}}"/> >> + </AttachedDevice> >> + </StorageController> >> + </StorageControllers> >> + </vbox:Machine> >> + </VirtualSystem> >> +</Envelope> >> +EOF >> +tar -c -f ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} >> ${OVA_NAME}.ovf ${VMDK_IMAGE_FILE} +EOSUDO >> +} >> + >> +addtask do_create_ova after do_convert_wic_to_vmdk before do_deploy >> \ No newline at end of file > -- Quirin ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH 3/3] meta/classes: add cpiogz-img 2020-03-27 13:27 [PATCH 0/3] some image classes Q. Gylstorff 2020-03-27 13:27 ` [PATCH 1/3] meta/classes: Generate a custom initramfs Q. Gylstorff 2020-03-27 13:28 ` [PATCH 2/3] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff @ 2020-03-27 13:28 ` Q. Gylstorff 2020-03-27 19:01 ` Henning Schild 2020-03-27 14:51 ` [PATCH] Add ova configuration for testing Q. Gylstorff ` (2 subsequent siblings) 5 siblings, 1 reply; 58+ messages in thread From: Q. Gylstorff @ 2020-03-27 13:28 UTC (permalink / raw) To: isar-users; +Cc: Quirin Gylstorff, Michael Adler From: Quirin Gylstorff <quirin.gylstorff@siemens.com> to create a initramfs like filesystem. Signed-off-by: Michael Adler <michael.adler@siemens.com> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- meta/classes/cpiogz-img.bbclass | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 meta/classes/cpiogz-img.bbclass diff --git a/meta/classes/cpiogz-img.bbclass b/meta/classes/cpiogz-img.bbclass new file mode 100644 index 0000000..f665bcd --- /dev/null +++ b/meta/classes/cpiogz-img.bbclass @@ -0,0 +1,19 @@ +# This software is a part of ISAR. +# Copyright (C) 2020 Siemens AG +# +# SPDX-License-Identifier: MIT + +CPIOGZ_FNAME ?= "${IMAGE_FULLNAME}.cpio.gz" +CPIOGZ_IMAGE_FILE = "${DEPLOY_DIR_IMAGE}/${CPIOGZ_FNAME}" +IMAGER_INSTALL += "cpio" + +do_cpiogz_image() { + sudo rm -f ${CPIOGZ_IMAGE_FILE} + image_do_mounts + sudo chroot --userspec=$(id -u):$(id -g) ${BUILDCHROOT_DIR} \ + sh -c "cd ${PP_ROOTFS}; /usr/bin/find . | \ + /usr/bin/cpio -H newc -o | /usr/bin/gzip -9 > \ + ${PP_DEPLOY}/${CPIOGZ_FNAME}" +} + +addtask cpiogz_image before do_image after do_image_tools -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH 3/3] meta/classes: add cpiogz-img 2020-03-27 13:28 ` [PATCH 3/3] meta/classes: add cpiogz-img Q. Gylstorff @ 2020-03-27 19:01 ` Henning Schild 2020-03-30 7:29 ` Gylstorff Quirin 0 siblings, 1 reply; 58+ messages in thread From: Henning Schild @ 2020-03-27 19:01 UTC (permalink / raw) To: [ext] Q. Gylstorff; +Cc: isar-users, Michael Adler On Fri, 27 Mar 2020 14:28:01 +0100 "[ext] Q. Gylstorff" <Quirin.Gylstorff@siemens.com> wrote: > From: Quirin Gylstorff <quirin.gylstorff@siemens.com> > > to create a initramfs like filesystem. > > Signed-off-by: Michael Adler <michael.adler@siemens.com> > Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> > --- > meta/classes/cpiogz-img.bbclass | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > create mode 100644 meta/classes/cpiogz-img.bbclass > > diff --git a/meta/classes/cpiogz-img.bbclass > b/meta/classes/cpiogz-img.bbclass new file mode 100644 > index 0000000..f665bcd > --- /dev/null > +++ b/meta/classes/cpiogz-img.bbclass > @@ -0,0 +1,19 @@ > +# This software is a part of ISAR. > +# Copyright (C) 2020 Siemens AG > +# > +# SPDX-License-Identifier: MIT > + > +CPIOGZ_FNAME ?= "${IMAGE_FULLNAME}.cpio.gz" > +CPIOGZ_IMAGE_FILE = "${DEPLOY_DIR_IMAGE}/${CPIOGZ_FNAME}" > +IMAGER_INSTALL += "cpio" > + > +do_cpiogz_image() { > + sudo rm -f ${CPIOGZ_IMAGE_FILE} "${DEPLOY_DIR_IMAGE}/${CPIOGZ_FNAME}" and drop the variable > + image_do_mounts > + sudo chroot --userspec=$(id -u):$(id -g) ${BUILDCHROOT_DIR} \ I am not sure we really need to use the tools from the buildchroot here, but that is fair. The targz image does not go that far but cpio does not seem to be an essential package so might not be available. But you are going in as regular user, so you will fail to read root-owned content, and probably mess up permissions. > + sh -c "cd ${PP_ROOTFS}; /usr/bin/find . | \ > + /usr/bin/cpio -H newc -o | /usr/bin/gzip -9 > > \ > + ${PP_DEPLOY}/${CPIOGZ_FNAME}" Say you drop the userspec, you will need the chown seen in targz because the file in DEPLOY should be owned by who is building. Henning > +} > + > +addtask cpiogz_image before do_image after do_image_tools ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH 3/3] meta/classes: add cpiogz-img 2020-03-27 19:01 ` Henning Schild @ 2020-03-30 7:29 ` Gylstorff Quirin 0 siblings, 0 replies; 58+ messages in thread From: Gylstorff Quirin @ 2020-03-30 7:29 UTC (permalink / raw) To: Henning Schild; +Cc: isar-users, Michael Adler On 3/27/20 8:01 PM, Henning Schild wrote: > On Fri, 27 Mar 2020 14:28:01 +0100 > "[ext] Q. Gylstorff" <Quirin.Gylstorff@siemens.com> wrote: > >> From: Quirin Gylstorff <quirin.gylstorff@siemens.com> >> >> to create a initramfs like filesystem. >> >> Signed-off-by: Michael Adler <michael.adler@siemens.com> >> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> >> --- >> meta/classes/cpiogz-img.bbclass | 19 +++++++++++++++++++ >> 1 file changed, 19 insertions(+) >> create mode 100644 meta/classes/cpiogz-img.bbclass >> >> diff --git a/meta/classes/cpiogz-img.bbclass >> b/meta/classes/cpiogz-img.bbclass new file mode 100644 >> index 0000000..f665bcd >> --- /dev/null >> +++ b/meta/classes/cpiogz-img.bbclass >> @@ -0,0 +1,19 @@ >> +# This software is a part of ISAR. >> +# Copyright (C) 2020 Siemens AG >> +# >> +# SPDX-License-Identifier: MIT >> + >> +CPIOGZ_FNAME ?= "${IMAGE_FULLNAME}.cpio.gz" >> +CPIOGZ_IMAGE_FILE = "${DEPLOY_DIR_IMAGE}/${CPIOGZ_FNAME}" >> +IMAGER_INSTALL += "cpio" >> + >> +do_cpiogz_image() { >> + sudo rm -f ${CPIOGZ_IMAGE_FILE} > > "${DEPLOY_DIR_IMAGE}/${CPIOGZ_FNAME}" and drop the variable > >> + image_do_mounts >> + sudo chroot --userspec=$(id -u):$(id -g) ${BUILDCHROOT_DIR} \ > > I am not sure we really need to use the tools from the buildchroot > here, but that is fair. The targz image does not go that far but cpio > does not seem to be an essential package so might not be available. > > But you are going in as regular user, so you will fail to read > root-owned content, and probably mess up permissions. > >> + sh -c "cd ${PP_ROOTFS}; /usr/bin/find . | \ >> + /usr/bin/cpio -H newc -o | /usr/bin/gzip -9 > >> \ >> + ${PP_DEPLOY}/${CPIOGZ_FNAME}" > > Say you drop the userspec, you will need the chown seen in targz because > the file in DEPLOY should be owned by who is building. > > Henning > >> +} >> + >> +addtask cpiogz_image before do_image after do_image_tools > Will do a v2 with your comments. -- Quirin ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH] Add ova configuration for testing 2020-03-27 13:27 [PATCH 0/3] some image classes Q. Gylstorff ` (2 preceding siblings ...) 2020-03-27 13:28 ` [PATCH 3/3] meta/classes: add cpiogz-img Q. Gylstorff @ 2020-03-27 14:51 ` Q. Gylstorff 2020-03-27 18:46 ` Henning Schild 2020-03-27 14:52 ` [PATCH] conf: Add multiconfig for cpiogz Q. Gylstorff 2020-04-03 14:55 ` [PATCH v2 0/3] some images classes Q. Gylstorff 5 siblings, 1 reply; 58+ messages in thread From: Q. Gylstorff @ 2020-03-27 14:51 UTC (permalink / raw) To: isar-users; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- meta-isar/conf/machine/virtualbox.conf | 16 ++++++++++++++++ .../conf/multiconfig/virtualbox-ova-buster.conf | 8 ++++++++ .../lib/wic/canned-wks/virtualmachine-grub.wks | 11 +++++++++++ 3 files changed, 35 insertions(+) create mode 100644 meta-isar/conf/machine/virtualbox.conf create mode 100644 meta-isar/conf/multiconfig/virtualbox-ova-buster.conf create mode 100644 meta-isar/scripts/lib/wic/canned-wks/virtualmachine-grub.wks diff --git a/meta-isar/conf/machine/virtualbox.conf b/meta-isar/conf/machine/virtualbox.conf new file mode 100644 index 0000000..7e44c83 --- /dev/null +++ b/meta-isar/conf/machine/virtualbox.conf @@ -0,0 +1,16 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +DISTRO_ARCH ?= "amd64" + +KERNEL_NAME ?= "amd64" +BOOTLOADER ?= "grub" + +WKS_FILE ?= "virtualmachine-grub" + +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" + + +IMAGE_TYPE ?= "ova-wic-img" diff --git a/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf new file mode 100644 index 0000000..3042556 --- /dev/null +++ b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf @@ -0,0 +1,8 @@ +# +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + + +MACHINE = "virtualbox" +DISTRO = "debian-buster" diff --git a/meta-isar/scripts/lib/wic/canned-wks/virtualmachine-grub.wks b/meta-isar/scripts/lib/wic/canned-wks/virtualmachine-grub.wks new file mode 100644 index 0000000..cbd5057 --- /dev/null +++ b/meta-isar/scripts/lib/wic/canned-wks/virtualmachine-grub.wks @@ -0,0 +1,11 @@ +# +# Copyright (c) Siemens AG, 2019 +# +# Licensed under the Siemens Inner Source License 1.2, or at your option any +# later version. +# + +part /boot --source bootimg-efi-isar --sourceparams "loader=grub-efi" --ondisk sda --label efi --part-type EF00 --align 1024 +part / --source rootfs --ondisk sda --fstype ext4 --label platform --align 1024 --use-uuid --size 50G + +bootloader --ptable gpt --timeout 3 --append "rootwait console=ttyS0,115200 console=tty0" -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH] Add ova configuration for testing 2020-03-27 14:51 ` [PATCH] Add ova configuration for testing Q. Gylstorff @ 2020-03-27 18:46 ` Henning Schild 0 siblings, 0 replies; 58+ messages in thread From: Henning Schild @ 2020-03-27 18:46 UTC (permalink / raw) To: [ext] Q. Gylstorff; +Cc: isar-users On Fri, 27 Mar 2020 15:51:11 +0100 "[ext] Q. Gylstorff" <Quirin.Gylstorff@siemens.com> wrote: > From: Quirin Gylstorff <quirin.gylstorff@siemens.com> > > Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> > --- > meta-isar/conf/machine/virtualbox.conf | 16 > ++++++++++++++++ .../conf/multiconfig/virtualbox-ova-buster.conf | > 8 ++++++++ .../lib/wic/canned-wks/virtualmachine-grub.wks | 11 > +++++++++++ 3 files changed, 35 insertions(+) > create mode 100644 meta-isar/conf/machine/virtualbox.conf > create mode 100644 > meta-isar/conf/multiconfig/virtualbox-ova-buster.conf create mode > 100644 meta-isar/scripts/lib/wic/canned-wks/virtualmachine-grub.wks > > diff --git a/meta-isar/conf/machine/virtualbox.conf > b/meta-isar/conf/machine/virtualbox.conf new file mode 100644 > index 0000000..7e44c83 > --- /dev/null > +++ b/meta-isar/conf/machine/virtualbox.conf > @@ -0,0 +1,16 @@ > +# This software is a part of ISAR. > +# Copyright (c) Siemens AG, 2020 > +# > +# SPDX-License-Identifier: MIT > + > +DISTRO_ARCH ?= "amd64" > + > +KERNEL_NAME ?= "amd64" > +BOOTLOADER ?= "grub" > + > +WKS_FILE ?= "virtualmachine-grub" I think you can skip that copy, seems to just set the size ... With ROOTFS_EXTRA, a relative size to what you fill in. I think ROOTFS_SIZE would work as well, for an absolute value. I would have to read the wic code ... Henning > +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" > + > + > +IMAGE_TYPE ?= "ova-wic-img" > > diff --git a/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf > b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf new file mode > 100644 index 0000000..3042556 > --- /dev/null > +++ b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf > @@ -0,0 +1,8 @@ > +# > +# Copyright (c) Siemens AG, 2020 > +# > +# SPDX-License-Identifier: MIT > + > + > +MACHINE = "virtualbox" > +DISTRO = "debian-buster" > diff --git > a/meta-isar/scripts/lib/wic/canned-wks/virtualmachine-grub.wks > b/meta-isar/scripts/lib/wic/canned-wks/virtualmachine-grub.wks new > file mode 100644 index 0000000..cbd5057 --- /dev/null > +++ b/meta-isar/scripts/lib/wic/canned-wks/virtualmachine-grub.wks > @@ -0,0 +1,11 @@ > +# > +# Copyright (c) Siemens AG, 2019 > +# > +# Licensed under the Siemens Inner Source License 1.2, or at your > option any +# later version. > +# > + > +part /boot --source bootimg-efi-isar --sourceparams > "loader=grub-efi" --ondisk sda --label efi --part-type EF00 --align > 1024 +part / --source rootfs --ondisk sda --fstype ext4 --label > platform --align 1024 --use-uuid --size 50G + +bootloader --ptable > gpt --timeout 3 --append "rootwait console=ttyS0,115200 console=tty0" ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH] conf: Add multiconfig for cpiogz 2020-03-27 13:27 [PATCH 0/3] some image classes Q. Gylstorff ` (3 preceding siblings ...) 2020-03-27 14:51 ` [PATCH] Add ova configuration for testing Q. Gylstorff @ 2020-03-27 14:52 ` Q. Gylstorff 2020-04-03 14:55 ` [PATCH v2 0/3] some images classes Q. Gylstorff 5 siblings, 0 replies; 58+ messages in thread From: Q. Gylstorff @ 2020-03-27 14:52 UTC (permalink / raw) To: isar-users; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> as testcase Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf diff --git a/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf b/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf new file mode 100644 index 0000000..cadcdac --- /dev/null +++ b/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf @@ -0,0 +1,9 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +MACHINE ?= "qemuamd64" +DISTRO ?= "debian-buster" + +IMAGE_TYPE = "cpiogz-img" -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v2 0/3] some images classes 2020-03-27 13:27 [PATCH 0/3] some image classes Q. Gylstorff ` (4 preceding siblings ...) 2020-03-27 14:52 ` [PATCH] conf: Add multiconfig for cpiogz Q. Gylstorff @ 2020-04-03 14:55 ` Q. Gylstorff 2020-04-03 14:55 ` [PATCH v2 1/3] meta/support: Generate a custom initramfs Q. Gylstorff ` (3 more replies) 5 siblings, 4 replies; 58+ messages in thread From: Q. Gylstorff @ 2020-04-03 14:55 UTC (permalink / raw) To: isar-users, henning.schild; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> - Generate cpio images for rescue images - generate custom initramfs - generate ova images Changes V2: - initramfs modification is now a package - ova-wic-img was renamed to virtual-machine-image - virtual-machine-image do_convert_wic supports now other image formats - Add tests - cpiogz now use chown instead of userspec Quirin Gylstorff (3): meta/support: Generate a custom initramfs meta/classes: Generate ova image for vmware or virtualbox meta/classes: add cpiogz-img meta-isar/conf/machine/virtualbox.conf | 16 ++ meta-isar/conf/machine/vmware.conf | 16 ++ .../multiconfig/qemuamd64-buster-cpiogz.conf | 9 + .../multiconfig/virtualbox-ova-buster.conf | 8 + .../wic/canned-wks/virtualmachine-grub.wks | 11 + meta/classes/cpiogz-img.bbclass | 20 ++ meta/classes/initramfs.bbclass | 44 +++ meta/classes/virtual-machine-image.bbclass | 265 ++++++++++++++++++ .../initramfs-config/files/control.tmpl | 12 + .../initramfs-config/files/postinst.tmpl | 28 ++ .../initramfs-config/initramfs-config_0.1.bb | 30 ++ 11 files changed, 459 insertions(+) create mode 100644 meta-isar/conf/machine/virtualbox.conf create mode 100644 meta-isar/conf/machine/vmware.conf create mode 100644 meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf create mode 100644 meta-isar/conf/multiconfig/virtualbox-ova-buster.conf create mode 100644 meta-isar/scripts/lib/wic/canned-wks/virtualmachine-grub.wks create mode 100644 meta/classes/cpiogz-img.bbclass create mode 100644 meta/classes/initramfs.bbclass create mode 100644 meta/classes/virtual-machine-image.bbclass create mode 100644 meta/recipes-support/initramfs-config/files/control.tmpl create mode 100644 meta/recipes-support/initramfs-config/files/postinst.tmpl create mode 100644 meta/recipes-support/initramfs-config/initramfs-config_0.1.bb -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v2 1/3] meta/support: Generate a custom initramfs 2020-04-03 14:55 ` [PATCH v2 0/3] some images classes Q. Gylstorff @ 2020-04-03 14:55 ` Q. Gylstorff 2020-04-09 6:39 ` Henning Schild 2020-04-03 14:55 ` [PATCH v2 2/3] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff ` (2 subsequent siblings) 3 siblings, 1 reply; 58+ messages in thread From: Q. Gylstorff @ 2020-04-03 14:55 UTC (permalink / raw) To: isar-users, henning.schild; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> This package sets the Parameters for mkinitramfs/update-intramfs before it regenerates the initrd.img of debian with a modified version. Use cases are the remove unnecessary kernel modules to reduce the size of the initrd by using the parameters: ``` INITRAMFS_MODULES = "list" INITRAMFS_MODULE_LIST += "ext4" ``` Set the boot root during the initrd generation by setting `INITRAMFS_ROOT`. see also man pages of mkinitramfs and initramfs.conf. Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- meta/classes/initramfs.bbclass | 44 +++++++++++++++++++ .../initramfs-config/files/control.tmpl | 12 +++++ .../initramfs-config/files/postinst.tmpl | 28 ++++++++++++ .../initramfs-config/initramfs-config_0.1.bb | 30 +++++++++++++ 4 files changed, 114 insertions(+) create mode 100644 meta/classes/initramfs.bbclass create mode 100644 meta/recipes-support/initramfs-config/files/control.tmpl create mode 100644 meta/recipes-support/initramfs-config/files/postinst.tmpl create mode 100644 meta/recipes-support/initramfs-config/initramfs-config_0.1.bb diff --git a/meta/classes/initramfs.bbclass b/meta/classes/initramfs.bbclass new file mode 100644 index 0000000..0cc91c2 --- /dev/null +++ b/meta/classes/initramfs.bbclass @@ -0,0 +1,44 @@ +# This software is a part of ISAR. +# Copyright (C) 2020 Siemens AG +# +# SPDX-License-Identifier: MIT + +INITRAMFS_MODULES ?= "most" +INITRAMFS_BUSYBOX ?= "auto" +INITRAMFS_COMPRESS ?= "gzip" +INITRAMFS_KEYMAP ?= "n" +INITRAMFS_NET_DEVICE ?= "" +INITRAMFS_NFSROOT ?= "auto" +INITRAMFS_RUNSIZE ?= "10%" +INITRAMFS_ROOT ?= "" +INITRAMFS_MODULE_LIST ?= "" +update_initramfs_modules() { + for modname in ${INITRAMFS_MODULE_LIST}; do + sudo -E tee --append '${ROOTFSDIR}/etc/initramfs-tools/modules' << EOF +${modname} +EOF + done +} +update_initramfs_config() { + sudo -E tee ${ROOTFSDIR}/etc/initramfs-tools/initramfs.conf << EOF +MODULES=${INITRAMFS_MODULES} +BUSYBOX=${INITRAMFS_BUSYBOX} +COMPRESS=${INITRAMFS_COMPRESS} +KEYMAP=${INITRAMFS_KEYMAP} +DEVICE=${INITRAMFS_NET_DEVICE} +NFSROOT=${INITRAMFS_NFSROOT} +RUNSIZE=${INITRAMFS_RUNSIZE} +ROOT=${INITRAMFS_ROOT} +EOF +} + +do_update_initramfs() { + update_initramfs_modules + update_initramfs_config + export KERNEL_VERSION=$(ls ${ROOTFSDIR}/lib/modules) + bbplain kernel_version: ${KERNEL_VERSION} + sudo -E chroot '${ROOTFSDIR}' \ + mkinitramfs -v -k -o /boot/initrd.img-${KERNEL_VERSION} ${KERNEL_VERSION} +} + +addtask update_initramfs before do_copy_boot_files after do_rootfs_install diff --git a/meta/recipes-support/initramfs-config/files/control.tmpl b/meta/recipes-support/initramfs-config/files/control.tmpl new file mode 100644 index 0000000..5f57828 --- /dev/null +++ b/meta/recipes-support/initramfs-config/files/control.tmpl @@ -0,0 +1,12 @@ +Source: initramfs-config +Section: misc +Priority: optional +Standards-Version: 3.9.6 +Maintainer: Unknown maintainer <unknown@example.com> +Build-Depends: debhelper (>= 9) + + +Package: initramfs-config +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, initramfs-tools-core, ${KERNEL_PACKAGE} +Description: Configuration files for a custom initramfs \ No newline at end of file diff --git a/meta/recipes-support/initramfs-config/files/postinst.tmpl b/meta/recipes-support/initramfs-config/files/postinst.tmpl new file mode 100644 index 0000000..b03b09e --- /dev/null +++ b/meta/recipes-support/initramfs-config/files/postinst.tmpl @@ -0,0 +1,28 @@ +#!/bin/bash +set -x +INITRAMFS_CONF=/etc/initramfs-tools/initramfs.conf +if [ -f ${INITRAMFS_CONF} ]; then + sed -i -E 's/(^MODULES=).*/\1${INITRAMFS_MODULES}/' ${INITRAMFS_CONF} + sed -i -E 's/(^BUSYBOX=).*/\1${INITRAMFS_BUSYBOX}/' ${INITRAMFS_CONF} + sed -i -E 's/(^COMPRESS=).*/\1${INITRAMFS_COMPRESS}/' ${INITRAMFS_CONF} + sed -i -E 's/(^KEYMAP=).*/\1${INITRAMFS_KEYMAP}/' ${INITRAMFS_CONF} + sed -i -E 's/(^DEVICE=).*/\1${INITRAMFS_DEVICE}/' ${INITRAMFS_CONF} + sed -i -E 's/(^NFSROOT=).*/\1${INITRAMFS_NFSROOT}/' ${INITRAMFS_CONF} + sed -i -E 's/(^RUNSIZE=).*/\1${INITRAMFS_RUNSIZE}/' ${INITRAMFS_CONF} + if ! grep -Fxq "ROOT" "${INITRAMFS_CONF}"; then + sed -i -E 's/(^ROOT=).*/\1${INITRAMFS_ROOT}/' ${INITRAMFS_CONF} + else + sed -i -E "$aROOT=${INITRAMFS_ROOT}" ${INITRAMFS_CONF} + fi +fi + +MODULES_LIST_FILE=/etc/initramfs-tools/modules +if [ -f ${MODULES_LIST_FILE} ]; then + for modname in ${INITRAMFS_MODULE_LIST}; do + if ! grep -Fxq "$modname" "${MODULES_LIST_FILE}"; then + echo "$modname" >> "${MODULES_LIST_FILE}" + fi + done +fi + +update-initramfs -v -u diff --git a/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb b/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb new file mode 100644 index 0000000..8352681 --- /dev/null +++ b/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb @@ -0,0 +1,30 @@ +# This software is a part of ISAR. +# Copyright (C) 2020 Siemens AG +# +# SPDX-License-Identifier: MIT +inherit dpkg-raw +inherit template +DESCRIPTION = "Recipe to set the initramfs configuration and generate a new ramfs" + + +SRC_URI = "file://postinst.tmpl \ + file://control.tmpl \ + " + +INITRAMFS_MODULES ?= "most" +INITRAMFS_BUSYBOX ?= "auto" +INITRAMFS_COMPRESS ?= "gzip" +INITRAMFS_KEYMAP ?= "n" +INITRAMFS_NET_DEVICE ?= "" +INITRAMFS_NFSROOT ?= "auto" +INITRAMFS_RUNSIZE ?= "10%" +INITRAMFS_ROOT ?= "" +INITRAMFS_MODULE_LIST ?= "" +CREATE_NEW_INITRAMFS ?= "n" +KERNEL_PACKAGE = "${@ ("linux-image-" + d.getVar("KERNEL_NAME", True)) if d.getVar("KERNEL_NAME", True) else ""}" +TEMPLATE_FILES = "postinst.tmpl control.tmpl" +TEMPLATE_VARS += "INITRAMFS_MODULES INITRAMFS_BUSYBOX INITRAMFS_COMPRESS \ + INITRAMFS_KEYMAP INITRAMFS_NET_DEVICE INITRAMFS_NFSROOT \ + INITRAMFS_RUNSIZE INITRAMFS_ROOT INITRAMFS_MODULE_LIST CREATE_NEW_INITRAMFS KERNEL_PACKAGE" + + -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v2 1/3] meta/support: Generate a custom initramfs 2020-04-03 14:55 ` [PATCH v2 1/3] meta/support: Generate a custom initramfs Q. Gylstorff @ 2020-04-09 6:39 ` Henning Schild 2020-04-09 13:59 ` Gylstorff Quirin 0 siblings, 1 reply; 58+ messages in thread From: Henning Schild @ 2020-04-09 6:39 UTC (permalink / raw) To: Q. Gylstorff; +Cc: isar-users Am Fri, 3 Apr 2020 16:55:08 +0200 schrieb "Q. Gylstorff" <Quirin.Gylstorff@siemens.com>: > From: Quirin Gylstorff <quirin.gylstorff@siemens.com> > > This package sets the Parameters for mkinitramfs/update-intramfs > before it regenerates the initrd.img of debian with a modified > version. > > Use cases are the remove unnecessary kernel modules to reduce the > size of the initrd by using the parameters: > ``` > INITRAMFS_MODULES = "list" > INITRAMFS_MODULE_LIST += "ext4" > ``` > > Set the boot root during the initrd generation by setting > `INITRAMFS_ROOT`. > > see also man pages of mkinitramfs and initramfs.conf. > > Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> > --- > meta/classes/initramfs.bbclass | 44 > +++++++++++++++++++ .../initramfs-config/files/control.tmpl | > 12 +++++ .../initramfs-config/files/postinst.tmpl | 28 > ++++++++++++ .../initramfs-config/initramfs-config_0.1.bb | 30 > +++++++++++++ 4 files changed, 114 insertions(+) > create mode 100644 meta/classes/initramfs.bbclass > create mode 100644 > meta/recipes-support/initramfs-config/files/control.tmpl create mode > 100644 meta/recipes-support/initramfs-config/files/postinst.tmpl > create mode 100644 > meta/recipes-support/initramfs-config/initramfs-config_0.1.bb > > diff --git a/meta/classes/initramfs.bbclass > b/meta/classes/initramfs.bbclass new file mode 100644 > index 0000000..0cc91c2 > --- /dev/null > +++ b/meta/classes/initramfs.bbclass > @@ -0,0 +1,44 @@ > +# This software is a part of ISAR. > +# Copyright (C) 2020 Siemens AG > +# > +# SPDX-License-Identifier: MIT > + > +INITRAMFS_MODULES ?= "most" > +INITRAMFS_BUSYBOX ?= "auto" > +INITRAMFS_COMPRESS ?= "gzip" > +INITRAMFS_KEYMAP ?= "n" > +INITRAMFS_NET_DEVICE ?= "" > +INITRAMFS_NFSROOT ?= "auto" > +INITRAMFS_RUNSIZE ?= "10%" > +INITRAMFS_ROOT ?= "" > +INITRAMFS_MODULE_LIST ?= "" > +update_initramfs_modules() { > + for modname in ${INITRAMFS_MODULE_LIST}; do > + sudo -E tee --append '${ROOTFSDIR}/etc/initramfs-tools/modules' > << EOF +${modname} > +EOF > + done > +} > +update_initramfs_config() { > + sudo -E tee ${ROOTFSDIR}/etc/initramfs-tools/initramfs.conf << > EOF +MODULES=${INITRAMFS_MODULES} > +BUSYBOX=${INITRAMFS_BUSYBOX} > +COMPRESS=${INITRAMFS_COMPRESS} > +KEYMAP=${INITRAMFS_KEYMAP} > +DEVICE=${INITRAMFS_NET_DEVICE} > +NFSROOT=${INITRAMFS_NFSROOT} > +RUNSIZE=${INITRAMFS_RUNSIZE} > +ROOT=${INITRAMFS_ROOT} > +EOF > +} > + > +do_update_initramfs() { > + update_initramfs_modules > + update_initramfs_config > + export KERNEL_VERSION=$(ls ${ROOTFSDIR}/lib/modules) > + bbplain kernel_version: ${KERNEL_VERSION} > + sudo -E chroot '${ROOTFSDIR}' \ > + mkinitramfs -v -k -o /boot/initrd.img-${KERNEL_VERSION} > ${KERNEL_VERSION} +} > + > +addtask update_initramfs before do_copy_boot_files after > do_rootfs_install diff --git > a/meta/recipes-support/initramfs-config/files/control.tmpl > b/meta/recipes-support/initramfs-config/files/control.tmpl new file > mode 100644 index 0000000..5f57828 --- /dev/null > +++ b/meta/recipes-support/initramfs-config/files/control.tmpl > @@ -0,0 +1,12 @@ > +Source: initramfs-config I guess that could contain "isar", not sure but would like to avoid collisions. > +Section: misc > +Priority: optional > +Standards-Version: 3.9.6 > +Maintainer: Unknown maintainer <unknown@example.com> MAINTAINER = "isar-users <isar-users@googlegroups.com>" > +Build-Depends: debhelper (>= 9) > + > + > +Package: initramfs-config > +Architecture: any > +Depends: ${shlibs:Depends}, ${misc:Depends}, initramfs-tools-core, > ${KERNEL_PACKAGE} +Description: Configuration files for a custom > initramfs \ No newline at end of file > diff --git > a/meta/recipes-support/initramfs-config/files/postinst.tmpl > b/meta/recipes-support/initramfs-config/files/postinst.tmpl new file > mode 100644 index 0000000..b03b09e --- /dev/null > +++ b/meta/recipes-support/initramfs-config/files/postinst.tmpl > @@ -0,0 +1,28 @@ > +#!/bin/bash > +set -x > +INITRAMFS_CONF=/etc/initramfs-tools/initramfs.conf > +if [ -f ${INITRAMFS_CONF} ]; then > + sed -i -E 's/(^MODULES=).*/\1${INITRAMFS_MODULES}/' > ${INITRAMFS_CONF} > + sed -i -E 's/(^BUSYBOX=).*/\1${INITRAMFS_BUSYBOX}/' > ${INITRAMFS_CONF} > + sed -i -E 's/(^COMPRESS=).*/\1${INITRAMFS_COMPRESS}/' > ${INITRAMFS_CONF} > + sed -i -E 's/(^KEYMAP=).*/\1${INITRAMFS_KEYMAP}/' > ${INITRAMFS_CONF} > + sed -i -E 's/(^DEVICE=).*/\1${INITRAMFS_DEVICE}/' > ${INITRAMFS_CONF} > + sed -i -E 's/(^NFSROOT=).*/\1${INITRAMFS_NFSROOT}/' > ${INITRAMFS_CONF} > + sed -i -E 's/(^RUNSIZE=).*/\1${INITRAMFS_RUNSIZE}/' > ${INITRAMFS_CONF} > + if ! grep -Fxq "ROOT" "${INITRAMFS_CONF}"; then > + sed -i -E 's/(^ROOT=).*/\1${INITRAMFS_ROOT}/' > ${INITRAMFS_CONF} > + else > + sed -i -E "$aROOT=${INITRAMFS_ROOT}" ${INITRAMFS_CONF} > + fi > +fi > + > +MODULES_LIST_FILE=/etc/initramfs-tools/modules > +if [ -f ${MODULES_LIST_FILE} ]; then > + for modname in ${INITRAMFS_MODULE_LIST}; do > + if ! grep -Fxq "$modname" "${MODULES_LIST_FILE}"; then > + echo "$modname" >> "${MODULES_LIST_FILE}" > + fi > + done > +fi I might be wrong but this looks like it can not run twice, which it would on a package update. Need a postrm or prerm? Henning > +update-initramfs -v -u > diff --git > a/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb > b/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb new > file mode 100644 index 0000000..8352681 --- /dev/null > +++ b/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb > @@ -0,0 +1,30 @@ > +# This software is a part of ISAR. > +# Copyright (C) 2020 Siemens AG > +# > +# SPDX-License-Identifier: MIT > +inherit dpkg-raw > +inherit template > +DESCRIPTION = "Recipe to set the initramfs configuration and > generate a new ramfs" + > + > +SRC_URI = "file://postinst.tmpl \ > + file://control.tmpl \ > + " > + > +INITRAMFS_MODULES ?= "most" > +INITRAMFS_BUSYBOX ?= "auto" > +INITRAMFS_COMPRESS ?= "gzip" > +INITRAMFS_KEYMAP ?= "n" > +INITRAMFS_NET_DEVICE ?= "" > +INITRAMFS_NFSROOT ?= "auto" > +INITRAMFS_RUNSIZE ?= "10%" > +INITRAMFS_ROOT ?= "" > +INITRAMFS_MODULE_LIST ?= "" > +CREATE_NEW_INITRAMFS ?= "n" > +KERNEL_PACKAGE = "${@ ("linux-image-" + d.getVar("KERNEL_NAME", > True)) if d.getVar("KERNEL_NAME", True) else ""}" +TEMPLATE_FILES = > "postinst.tmpl control.tmpl" +TEMPLATE_VARS += "INITRAMFS_MODULES > INITRAMFS_BUSYBOX INITRAMFS_COMPRESS \ > + INITRAMFS_KEYMAP INITRAMFS_NET_DEVICE > INITRAMFS_NFSROOT \ > + INITRAMFS_RUNSIZE INITRAMFS_ROOT > INITRAMFS_MODULE_LIST CREATE_NEW_INITRAMFS KERNEL_PACKAGE" + > + ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v2 1/3] meta/support: Generate a custom initramfs 2020-04-09 6:39 ` Henning Schild @ 2020-04-09 13:59 ` Gylstorff Quirin 2020-04-09 17:18 ` Henning Schild 0 siblings, 1 reply; 58+ messages in thread From: Gylstorff Quirin @ 2020-04-09 13:59 UTC (permalink / raw) To: Henning Schild; +Cc: isar-users On 4/9/20 8:39 AM, Henning Schild wrote: > might be wrong but this looks like it can not run twice, which it > would on a package update. Need a postrm or prerm? It can run twice but the second time it will not add existing entries to the list. Your are right we need for this a post rm to remove all added modules. > > Henning Quirin ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v2 1/3] meta/support: Generate a custom initramfs 2020-04-09 13:59 ` Gylstorff Quirin @ 2020-04-09 17:18 ` Henning Schild 0 siblings, 0 replies; 58+ messages in thread From: Henning Schild @ 2020-04-09 17:18 UTC (permalink / raw) To: Gylstorff Quirin; +Cc: isar-users Am Thu, 9 Apr 2020 15:59:35 +0200 schrieb Gylstorff Quirin <quirin.gylstorff@siemens.com>: > On 4/9/20 8:39 AM, Henning Schild wrote: > > might be wrong but this looks like it can not run twice, which it > > would on a package update. Need a postrm or prerm? > > It can run twice but the second time it will not add existing entries > to the list. Your are right we need for this a post rm to remove > all added modules. And probably generate a new initrd after. The other postinst examples are also not updatable and removable, because their postinst can not run twice or they lack a postrm. But hopefully not anything in meta/ ... meta-isar/ is allowed to make such mistakes. Henning > > > > Henning > > Quirin ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v2 2/3] meta/classes: Generate ova image for vmware or virtualbox 2020-04-03 14:55 ` [PATCH v2 0/3] some images classes Q. Gylstorff 2020-04-03 14:55 ` [PATCH v2 1/3] meta/support: Generate a custom initramfs Q. Gylstorff @ 2020-04-03 14:55 ` Q. Gylstorff 2020-04-09 6:48 ` Henning Schild 2020-04-03 14:55 ` [PATCH v2 3/3] meta/classes: add cpiogz-img Q. Gylstorff 2020-04-09 6:54 ` [PATCH v2 0/3] some images classes Henning Schild 3 siblings, 1 reply; 58+ messages in thread From: Q. Gylstorff @ 2020-04-03 14:55 UTC (permalink / raw) To: isar-users, henning.schild; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- meta-isar/conf/machine/virtualbox.conf | 16 ++ meta-isar/conf/machine/vmware.conf | 16 ++ .../multiconfig/virtualbox-ova-buster.conf | 8 + .../wic/canned-wks/virtualmachine-grub.wks | 11 + meta/classes/virtual-machine-image.bbclass | 265 ++++++++++++++++++ 5 files changed, 316 insertions(+) create mode 100644 meta-isar/conf/machine/virtualbox.conf create mode 100644 meta-isar/conf/machine/vmware.conf create mode 100644 meta-isar/conf/multiconfig/virtualbox-ova-buster.conf create mode 100644 meta-isar/scripts/lib/wic/canned-wks/virtualmachine-grub.wks create mode 100644 meta/classes/virtual-machine-image.bbclass diff --git a/meta-isar/conf/machine/virtualbox.conf b/meta-isar/conf/machine/virtualbox.conf new file mode 100644 index 0000000..987ab4e --- /dev/null +++ b/meta-isar/conf/machine/virtualbox.conf @@ -0,0 +1,16 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +DISTRO_ARCH ?= "amd64" + +KERNEL_NAME ?= "amd64" +BOOTLOADER ?= "grub" + +WKS_FILE ?= "virtualmachine-grub" + +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" + +VMDK_SUBFORMAT = "monolithicSparse" +IMAGE_TYPE ?= "virtual-machine-image" diff --git a/meta-isar/conf/machine/vmware.conf b/meta-isar/conf/machine/vmware.conf new file mode 100644 index 0000000..8f0c152 --- /dev/null +++ b/meta-isar/conf/machine/vmware.conf @@ -0,0 +1,16 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +DISTRO_ARCH ?= "amd64" + +KERNEL_NAME ?= "amd64" +BOOTLOADER ?= "grub" + +WKS_FILE ?= "virtualmachine-grub" + +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" + +VMDK_SUBFORMAT = "streamOptimized" +IMAGE_TYPE ?= "virtual-machine-image" diff --git a/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf new file mode 100644 index 0000000..3042556 --- /dev/null +++ b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf @@ -0,0 +1,8 @@ +# +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + + +MACHINE = "virtualbox" +DISTRO = "debian-buster" diff --git a/meta-isar/scripts/lib/wic/canned-wks/virtualmachine-grub.wks b/meta-isar/scripts/lib/wic/canned-wks/virtualmachine-grub.wks new file mode 100644 index 0000000..cbd5057 --- /dev/null +++ b/meta-isar/scripts/lib/wic/canned-wks/virtualmachine-grub.wks @@ -0,0 +1,11 @@ +# +# Copyright (c) Siemens AG, 2019 +# +# Licensed under the Siemens Inner Source License 1.2, or at your option any +# later version. +# + +part /boot --source bootimg-efi-isar --sourceparams "loader=grub-efi" --ondisk sda --label efi --part-type EF00 --align 1024 +part / --source rootfs --ondisk sda --fstype ext4 --label platform --align 1024 --use-uuid --size 50G + +bootloader --ptable gpt --timeout 3 --append "rootwait console=ttyS0,115200 console=tty0" diff --git a/meta/classes/virtual-machine-image.bbclass b/meta/classes/virtual-machine-image.bbclass new file mode 100644 index 0000000..aa45e47 --- /dev/null +++ b/meta/classes/virtual-machine-image.bbclass @@ -0,0 +1,265 @@ +# This software is a part of ISAR. +# Copyright (C) 2019-2020 Siemens AG +# +# This class allows to generate images for vmware and virtualbox +# + +inherit buildchroot +inherit wic-img +IMAGER_INSTALL += "qemu-utils gawk uuid-runtime" +OVA_NAME ?= "${IMAGE_FULLNAME}" +OVA_MEMORY ?= "8192" +OVA_NUMBER_OF_CPU ?= "4" +OVA_VRAM ?= "64" +OVA_FIRMWARE ?= "efi" +OVA_ACPI ?= "true" +OVA_3D_ACCEL ?= "false" +OVA_CLIPBOARD ?= "bidirectional" +SOURCE_IMAGE_FILE ?= "${IMAGE_FULLNAME}.wic.img" +OVA_SHA_ALG ?= "1" +VIRTUAL_MACHINE_IMAGE_TYPE ?= "vmdk" +VIRTUAL_MACHINE_IMAGE_FILE ?= "${IMAGE_FULLNAME}-disk1.${VIRTUAL_MACHINE_IMAGE_TYPE}" +VIRTUAL_MACHINE_DISK ?= "${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE}" +# for virtualbox this needs to be monolithicSparse +# for virtualbox this needs to be streamOptimized +#VMDK_SUBFORMAT ?= "streamOptimized" +VMDK_SUBFORMAT ?= "monolithicSparse" +def set_convert_options(d): + format = d.getVar("VIRTUAL_MACHINE_IMAGE_TYPE") + if format == "vmdk": + return "-o subformat=%s" % d.getVar("VMDK_SUBFORMAT") + else: + return "" + + +CONVERSION_OPTIONS = "${@set_convert_options(d)}" + +do_convert_wic() { + rm -f '${DEPLOY_DIR_IMAGE}/${VIRTUAL_MACHINE_IMAGE_FILE}' + image_do_mounts + bbnote "Creating ${VIRTUAL_MACHINE_IMAGE_FILE} from ${WIC_IMAGE_FILE}" + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \ + /usr/bin/qemu-img convert -f raw -O ${VIRTUAL_MACHINE_IMAGE_TYPE} ${CONVERSION_OPTIONS} \ + '${PP_DEPLOY}/${SOURCE_IMAGE_FILE}' '${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE}' +} + +addtask convert_wic before do_build after do_wic_image do_copy_boot_files do_install_imager_deps do_transform_template + +# Generate random MAC addresses just as VirtualBox does, the format is +# their assigned prefix for the first 3 bytes followed by 3 random bytes. +VBOX_MAC_PREFIX = "080027" +macgen() { + hexdump -n3 -e "\"${VBOX_MAC_PREFIX}%06X\n\"" /dev/urandom +} +get_disksize() { + image_do_mounts + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \ + qemu-img info -f vmdk "${VIRTUAL_MACHINE_DISK}" | gawk 'match($0, /^virtual size:.*\(([0-9]+) bytes\)/, a) {print a[1]}' +} + +do_create_ova() { + if [ ! ${VIRTUAL_MACHINE_IMAGE_TYPE} = "vmdk" ]; then + exit 0 + fi + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ova' + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ovf' + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.mf' + + export PRIMARY_MAC=$(macgen) + export SECONDARY_MAC=$(macgen) + export DISK_NAME=$(basename -s .vmdk ${VIRTUAL_MACHINE_DISK}) + export DISK_SIZE_BYTES=$(get_disksize) + export LAST_CHANGE=$(date -u "+%Y-%m-%dT%H:%M:%SZ") + export OVA_FIRMWARE_VIRTUALBOX=$(echo ${OVA_FIRMWARE} | tr '[a-z]' '[A-Z]') + image_do_mounts + sudo -Es chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} <<'EOSUDO' + export DISK_UUID=$(uuidgen) + export VM_UUID=$(uuidgen) + # create ovf + cat > "${PP_DEPLOY}/${OVA_NAME}.ovf" << EOF +<?xml version="1.0" encoding="UTF-8"?> +<Envelope ovf:version="1.0" xml:lang="en-US" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vbox="http://www.virtualbox.org/ovf/machine"> + <References> + <File ovf:href="${VIRTUAL_MACHINE_IMAGE_FILE}" ovf:id="file1"/> + </References> + <DiskSection> + <Info>List of the virtual disks used in the package</Info> + <Disk ovf:capacity="${DISK_SIZE_BYTES}" ovf:capacityAllocationUnits="byte" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#${VMDK_SUBFORMAT}" vbox:uuid="${DISK_UUID}"/> + </DiskSection> + <NetworkSection> + <Info>Logical networks used in the package</Info> + <Network ovf:name="NAT"> + <Description>Logical network used by this appliance.</Description> + </Network> + </NetworkSection> + <VirtualSystem ovf:id="${OVA_NAME}"> + <Info>A virtual machine</Info> + <OperatingSystemSection ovf:id="100"> + <Info>The kind of installed guest operating system</Info> + <Description>Debian_64</Description> + <vbox:OSType ovf:required="false">Debian_64</vbox:OSType> + </OperatingSystemSection> + <VirtualHardwareSection> + <Info>Virtual hardware requirements for a virtual machine</Info> + <System> + <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> + <vssd:InstanceID>0</vssd:InstanceID> + <vssd:VirtualSystemIdentifier>${OVA_NAME}</vssd:VirtualSystemIdentifier> + <vssd:VirtualSystemType>virtualbox-2.2</vssd:VirtualSystemType> + </System> + <Item> + <rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits> + <rasd:Caption>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:Caption> + <rasd:Description>Number of virtual CPUs</rasd:Description> + <rasd:ElementName>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:ElementName> + <rasd:InstanceID>1</rasd:InstanceID> + <rasd:ResourceType>3</rasd:ResourceType> + <rasd:VirtualQuantity>${OVA_NUMBER_OF_CPU}</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:AllocationUnits>MegaBytes</rasd:AllocationUnits> + <rasd:Caption>${OVA_MEMORY} MB of memory</rasd:Caption> + <rasd:Description>Memory Size</rasd:Description> + <rasd:ElementName>${OVA_MEMORY} MB of memory</rasd:ElementName> + <rasd:InstanceID>2</rasd:InstanceID> + <rasd:ResourceType>4</rasd:ResourceType> + <rasd:VirtualQuantity>${OVA_MEMORY}</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:Address>0</rasd:Address> + <rasd:Caption>ideController0</rasd:Caption> + <rasd:Description>IDE Controller</rasd:Description> + <rasd:ElementName>ideController0</rasd:ElementName> + <rasd:InstanceID>3</rasd:InstanceID> + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> + <rasd:ResourceType>5</rasd:ResourceType> + </Item> + <Item> + <rasd:Address>1</rasd:Address> + <rasd:Caption>ideController1</rasd:Caption> + <rasd:Description>IDE Controller</rasd:Description> + <rasd:ElementName>ideController1</rasd:ElementName> + <rasd:InstanceID>4</rasd:InstanceID> + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> + <rasd:ResourceType>5</rasd:ResourceType> + </Item> + <Item> + <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> + <rasd:Caption>Ethernet adapter on 'NAT'</rasd:Caption> + <rasd:Connection>NAT</rasd:Connection> + <rasd:ElementName>Ethernet adapter on 'NAT'</rasd:ElementName> + <rasd:InstanceID>5</rasd:InstanceID> + <rasd:ResourceSubType>E1000</rasd:ResourceSubType> + <rasd:ResourceType>10</rasd:ResourceType> + </Item> + <Item> + <rasd:AddressOnParent>0</rasd:AddressOnParent> + <rasd:Caption>disk1</rasd:Caption> + <rasd:Description>Disk Image</rasd:Description> + <rasd:ElementName>disk1</rasd:ElementName> + <rasd:HostResource>/disk/vmdisk1</rasd:HostResource> + <rasd:InstanceID>6</rasd:InstanceID> + <rasd:Parent>3</rasd:Parent> + <rasd:ResourceType>17</rasd:ResourceType> + </Item> + <vmw:Config ovf:required="false" vmw:key="firmware" vmw:value="${OVA_FIRMWARE}"/> + <vmw:Config ovf:required="false" vmw:key="tools.syncTimeWithHost" vmw:value="false"/> + <vmw:Config ovf:required="false" vmw:key="tools.afterPowerOn" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.afterResume" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.beforeGuestShutdown" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.beforeGuestStandby" vmw:value="true"/> + <vmw:ExtraConfig ovf:required="false" vmw:key="virtualHW.productCompatibility" vmw:value="hosted"/> + </VirtualHardwareSection> + <vbox:Machine ovf:required="false" version="1.12-linux" uuid="${VM_UUID}" name="${OVA_NAME}" OSType="Debian_64" snapshotFolder="Snapshots" lastStateChange="${LAST_CHANGE}"> + <ovf:Info>Complete VirtualBox machine configuration in VirtualBox format</ovf:Info> + <Hardware version="2"> + <CPU count="${OVA_NUMBER_OF_CPU}" hotplug="false"> + <HardwareVirtEx enabled="true" exclusive="true"/> + <HardwareVirtExNestedPaging enabled="true"/> + <HardwareVirtExVPID enabled="true"/> + <PAE enabled="true"/> + <HardwareVirtExLargePages enabled="false"/> + <HardwareVirtForce enabled="false"/> + </CPU> + <Memory RAMSize="${OVA_MEMORY}" PageFusion="false"/> + <Firmware type="${OVA_FIRMWARE_VIRTUALBOX}"/> + <HID Pointing="PS2Mouse" Keyboard="PS2Keyboard"/> + <HPET enabled="false"/> + <Chipset type="PIIX3"/> + <Boot> + <Order position="1" device="HardDisk"/> + <Order position="2" device="None"/> + <Order position="3" device="None"/> + <Order position="4" device="None"/> + </Boot> + <Display VRAMSize="${OVA_VRAM}" monitorCount="1" accelerate3D="${OVA_3D_ACCEL}" accelerate2DVideo="false"/> + <VideoRecording enabled="false" file="Test.webm" horzRes="640" vertRes="480"/> + <RemoteDisplay enabled="false" authType="Null"/> + <BIOS> + <ACPI enabled="${OVA_ACPI}"/> + <IOAPIC enabled="${OVA_ACPI}"/> + <Logo fadeIn="true" fadeOut="true" displayTime="0"/> + <BootMenu mode="MessageAndMenu"/> + <TimeOffset value="0"/> + <PXEDebug enabled="false"/> + </BIOS> + <USBController enabled="false" enabledEhci="false"/> + <Network> + <Adapter slot="0" enabled="true" MACAddress="${PRIMARY_MAC}" cable="true" speed="0" type="virtio"> + <DisabledModes/> + <NAT> + <DNS pass-domain="true" use-proxy="false" use-host-resolver="false"/> + <Alias logging="false" proxy-only="false" use-same-ports="false"/> + </NAT> + </Adapter> + </Network> + <UART> + <Port slot="0" enabled="false" IOBase="0x3f8" IRQ="4" hostMode="Disconnected"/> + <Port slot="1" enabled="false" IOBase="0x2f8" IRQ="3" hostMode="Disconnected"/> + </UART> + <LPT> + <Port slot="0" enabled="false" IOBase="0x378" IRQ="7"/> + <Port slot="1" enabled="false" IOBase="0x378" IRQ="7"/> + </LPT> + <AudioAdapter controller="AC97" driver="Pulse" enabled="false"/> + <RTC localOrUTC="local"/> + <SharedFolders/> + <Clipboard mode="Disabled"/> + <DragAndDrop mode="Disabled"/> + <IO> + <IoCache enabled="true" size="5"/> + <BandwidthGroups/> + </IO> + <HostPci> + <Devices/> + </HostPci> + <EmulatedUSB> + <CardReader enabled="false"/> + </EmulatedUSB> + <Guest memoryBalloonSize="0"/> + <GuestProperties/> + </Hardware> + <StorageControllers> + <StorageController name="IDE Controller" type="PIIX4" PortCount="2" useHostIOCache="true" Bootable="true"> + <AttachedDevice type="HardDisk" port="0" device="0"> + <Image uuid="{${DISK_UUID}}"/> + </AttachedDevice> + </StorageController> + </StorageControllers> + </vbox:Machine> + </VirtualSystem> +</Envelope> +EOF +tar -H ustar -cvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${OVA_NAME}.ovf +tar -H ustar -uvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${VIRTUAL_MACHINE_IMAGE_FILE} + +# virtual box needs here a manifest file vmware does not want to accept the format +if [ "${VMDK_SUBFORMAT}" = "monolithicSparse" ]; then + echo "SHA${OVA_SHA_ALG}(${VIRTUAL_MACHINE_IMAGE_FILE})= $(sha${OVA_SHA_ALG}sum ${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE} | cut -d' ' -f1)" >> ${PP_DEPLOY}/${OVA_NAME}.mf + echo "SHA${OVA_SHA_ALG}(${OVA_NAME}.ovf)= $(sha${OVA_SHA_ALG}sum ${PP_DEPLOY}/${OVA_NAME}.ovf | cut -d' ' -f1)" >> ${PP_DEPLOY}/${OVA_NAME}.mf + tar -H ustar -uvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${OVA_NAME}.mf +fi +EOSUDO +} + +addtask do_create_ova after do_convert_wic before do_deploy -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v2 2/3] meta/classes: Generate ova image for vmware or virtualbox 2020-04-03 14:55 ` [PATCH v2 2/3] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff @ 2020-04-09 6:48 ` Henning Schild 2020-04-09 14:28 ` Gylstorff Quirin 0 siblings, 1 reply; 58+ messages in thread From: Henning Schild @ 2020-04-09 6:48 UTC (permalink / raw) To: Q. Gylstorff; +Cc: isar-users, Adler, Michael (CT RDA IOT SES-DE) Am Fri, 3 Apr 2020 16:55:09 +0200 schrieb "Q. Gylstorff" <Quirin.Gylstorff@siemens.com>: > From: Quirin Gylstorff <quirin.gylstorff@siemens.com> > > Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> > --- > meta-isar/conf/machine/virtualbox.conf | 16 ++ > meta-isar/conf/machine/vmware.conf | 16 ++ > .../multiconfig/virtualbox-ova-buster.conf | 8 + > .../wic/canned-wks/virtualmachine-grub.wks | 11 + > meta/classes/virtual-machine-image.bbclass | 265 > ++++++++++++++++++ 5 files changed, 316 insertions(+) > create mode 100644 meta-isar/conf/machine/virtualbox.conf > create mode 100644 meta-isar/conf/machine/vmware.conf > create mode 100644 > meta-isar/conf/multiconfig/virtualbox-ova-buster.conf create mode > 100644 meta-isar/scripts/lib/wic/canned-wks/virtualmachine-grub.wks > create mode 100644 meta/classes/virtual-machine-image.bbclass > > diff --git a/meta-isar/conf/machine/virtualbox.conf > b/meta-isar/conf/machine/virtualbox.conf new file mode 100644 > index 0000000..987ab4e > --- /dev/null > +++ b/meta-isar/conf/machine/virtualbox.conf > @@ -0,0 +1,16 @@ > +# This software is a part of ISAR. > +# Copyright (c) Siemens AG, 2020 > +# > +# SPDX-License-Identifier: MIT > + > +DISTRO_ARCH ?= "amd64" > + > +KERNEL_NAME ?= "amd64" > +BOOTLOADER ?= "grub" > + > +WKS_FILE ?= "virtualmachine-grub" > + > +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" > + > +VMDK_SUBFORMAT = "monolithicSparse" > +IMAGE_TYPE ?= "virtual-machine-image" > diff --git a/meta-isar/conf/machine/vmware.conf > b/meta-isar/conf/machine/vmware.conf new file mode 100644 > index 0000000..8f0c152 > --- /dev/null > +++ b/meta-isar/conf/machine/vmware.conf > @@ -0,0 +1,16 @@ > +# This software is a part of ISAR. > +# Copyright (c) Siemens AG, 2020 > +# > +# SPDX-License-Identifier: MIT > + > +DISTRO_ARCH ?= "amd64" > + > +KERNEL_NAME ?= "amd64" > +BOOTLOADER ?= "grub" > + > +WKS_FILE ?= "virtualmachine-grub" > + > +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" > + > +VMDK_SUBFORMAT = "streamOptimized" > +IMAGE_TYPE ?= "virtual-machine-image" > diff --git a/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf > b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf new file mode > 100644 index 0000000..3042556 > --- /dev/null > +++ b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf > @@ -0,0 +1,8 @@ > +# > +# Copyright (c) Siemens AG, 2020 > +# > +# SPDX-License-Identifier: MIT > + > + > +MACHINE = "virtualbox" > +DISTRO = "debian-buster" > diff --git > a/meta-isar/scripts/lib/wic/canned-wks/virtualmachine-grub.wks > b/meta-isar/scripts/lib/wic/canned-wks/virtualmachine-grub.wks new > file mode 100644 index 0000000..cbd5057 --- /dev/null > +++ b/meta-isar/scripts/lib/wic/canned-wks/virtualmachine-grub.wks > @@ -0,0 +1,11 @@ > +# > +# Copyright (c) Siemens AG, 2019 > +# > +# Licensed under the Siemens Inner Source License 1.2, or at your > option any +# later version. > +# > + > +part /boot --source bootimg-efi-isar --sourceparams > "loader=grub-efi" --ondisk sda --label efi --part-type EF00 --align > 1024 +part / --source rootfs --ondisk sda --fstype ext4 --label > platform --align 1024 --use-uuid --size 50G + +bootloader --ptable > gpt --timeout 3 --append "rootwait console=ttyS0,115200 console=tty0" Looks like the only change is the absolute size. Not sure that justifies a copy. You can reach a good-enough size with ROOTFS_EXTRA. Note that Michael is currently working on getting IMAGE_ROOTFS_SIZE into Isar. Such a hardcoded size in the wks just is not a good example for people to copy. Henning > diff --git a/meta/classes/virtual-machine-image.bbclass > b/meta/classes/virtual-machine-image.bbclass new file mode 100644 > index 0000000..aa45e47 --- /dev/null > +++ b/meta/classes/virtual-machine-image.bbclass > @@ -0,0 +1,265 @@ > +# This software is a part of ISAR. > +# Copyright (C) 2019-2020 Siemens AG > +# > +# This class allows to generate images for vmware and virtualbox > +# > + > +inherit buildchroot > +inherit wic-img > +IMAGER_INSTALL += "qemu-utils gawk uuid-runtime" > +OVA_NAME ?= "${IMAGE_FULLNAME}" > +OVA_MEMORY ?= "8192" > +OVA_NUMBER_OF_CPU ?= "4" > +OVA_VRAM ?= "64" > +OVA_FIRMWARE ?= "efi" > +OVA_ACPI ?= "true" > +OVA_3D_ACCEL ?= "false" > +OVA_CLIPBOARD ?= "bidirectional" > +SOURCE_IMAGE_FILE ?= "${IMAGE_FULLNAME}.wic.img" > +OVA_SHA_ALG ?= "1" > +VIRTUAL_MACHINE_IMAGE_TYPE ?= "vmdk" > +VIRTUAL_MACHINE_IMAGE_FILE ?= > "${IMAGE_FULLNAME}-disk1.${VIRTUAL_MACHINE_IMAGE_TYPE}" > +VIRTUAL_MACHINE_DISK ?= "${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE}" > +# for virtualbox this needs to be monolithicSparse +# for virtualbox > this needs to be streamOptimized +#VMDK_SUBFORMAT ?= "streamOptimized" > +VMDK_SUBFORMAT ?= "monolithicSparse" > +def set_convert_options(d): > + format = d.getVar("VIRTUAL_MACHINE_IMAGE_TYPE") > + if format == "vmdk": > + return "-o subformat=%s" % d.getVar("VMDK_SUBFORMAT") > + else: > + return "" > + > + > +CONVERSION_OPTIONS = "${@set_convert_options(d)}" > + > +do_convert_wic() { > + rm -f '${DEPLOY_DIR_IMAGE}/${VIRTUAL_MACHINE_IMAGE_FILE}' > + image_do_mounts > + bbnote "Creating ${VIRTUAL_MACHINE_IMAGE_FILE} from > ${WIC_IMAGE_FILE}" > + sudo -E chroot --userspec=$( id -u ):$( id -g ) > ${BUILDCHROOT_DIR} \ > + /usr/bin/qemu-img convert -f raw -O ${VIRTUAL_MACHINE_IMAGE_TYPE} > ${CONVERSION_OPTIONS} \ > + '${PP_DEPLOY}/${SOURCE_IMAGE_FILE}' > '${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE}' +} > + > +addtask convert_wic before do_build after do_wic_image > do_copy_boot_files do_install_imager_deps do_transform_template + > +# Generate random MAC addresses just as VirtualBox does, the format > is +# their assigned prefix for the first 3 bytes followed by 3 > random bytes. +VBOX_MAC_PREFIX = "080027" > +macgen() { > + hexdump -n3 -e "\"${VBOX_MAC_PREFIX}%06X\n\"" /dev/urandom > +} > +get_disksize() { > + image_do_mounts > + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} > \ > + qemu-img info -f vmdk "${VIRTUAL_MACHINE_DISK}" | gawk 'match($0, > /^virtual size:.*\(([0-9]+) bytes\)/, a) {print a[1]}' +} > + > +do_create_ova() { > + if [ ! ${VIRTUAL_MACHINE_IMAGE_TYPE} = "vmdk" ]; then > + exit 0 > + fi > + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ova' > + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ovf' > + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.mf' > + > + export PRIMARY_MAC=$(macgen) > + export SECONDARY_MAC=$(macgen) > + export DISK_NAME=$(basename -s .vmdk ${VIRTUAL_MACHINE_DISK}) > + export DISK_SIZE_BYTES=$(get_disksize) > + export LAST_CHANGE=$(date -u "+%Y-%m-%dT%H:%M:%SZ") > + export OVA_FIRMWARE_VIRTUALBOX=$(echo ${OVA_FIRMWARE} | tr '[a-z]' > '[A-Z]') > + image_do_mounts > + sudo -Es chroot --userspec=$( id -u ):$( id -g ) > ${BUILDCHROOT_DIR} <<'EOSUDO' > + export DISK_UUID=$(uuidgen) > + export VM_UUID=$(uuidgen) > + # create ovf > + cat > "${PP_DEPLOY}/${OVA_NAME}.ovf" << EOF > +<?xml version="1.0" encoding="UTF-8"?> > +<Envelope ovf:version="1.0" xml:lang="en-US" > xmlns="http://schemas.dmtf.org/ovf/envelope/1" > xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" > xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" > xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns:vbox="http://www.virtualbox.org/ovf/machine"> > + <References> > + <File ovf:href="${VIRTUAL_MACHINE_IMAGE_FILE}" ovf:id="file1"/> > + </References> > + <DiskSection> > + <Info>List of the virtual disks used in the package</Info> > + <Disk ovf:capacity="${DISK_SIZE_BYTES}" > ovf:capacityAllocationUnits="byte" ovf:diskId="vmdisk1" > ovf:fileRef="file1" > ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#${VMDK_SUBFORMAT}" > vbox:uuid="${DISK_UUID}"/> > + </DiskSection> > + <NetworkSection> > + <Info>Logical networks used in the package</Info> > + <Network ovf:name="NAT"> > + <Description>Logical network used by this > appliance.</Description> > + </Network> > + </NetworkSection> > + <VirtualSystem ovf:id="${OVA_NAME}"> > + <Info>A virtual machine</Info> > + <OperatingSystemSection ovf:id="100"> > + <Info>The kind of installed guest operating system</Info> > + <Description>Debian_64</Description> > + <vbox:OSType ovf:required="false">Debian_64</vbox:OSType> > + </OperatingSystemSection> > + <VirtualHardwareSection> > + <Info>Virtual hardware requirements for a virtual > machine</Info> > + <System> > + <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> > + <vssd:InstanceID>0</vssd:InstanceID> > + > <vssd:VirtualSystemIdentifier>${OVA_NAME}</vssd:VirtualSystemIdentifier> > + > <vssd:VirtualSystemType>virtualbox-2.2</vssd:VirtualSystemType> > + </System> > + <Item> > + <rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits> > + <rasd:Caption>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:Caption> > + <rasd:Description>Number of virtual CPUs</rasd:Description> > + <rasd:ElementName>${OVA_NUMBER_OF_CPU} virtual > CPU</rasd:ElementName> > + <rasd:InstanceID>1</rasd:InstanceID> > + <rasd:ResourceType>3</rasd:ResourceType> > + > <rasd:VirtualQuantity>${OVA_NUMBER_OF_CPU}</rasd:VirtualQuantity> > + </Item> > + <Item> > + <rasd:AllocationUnits>MegaBytes</rasd:AllocationUnits> > + <rasd:Caption>${OVA_MEMORY} MB of memory</rasd:Caption> > + <rasd:Description>Memory Size</rasd:Description> > + <rasd:ElementName>${OVA_MEMORY} MB of > memory</rasd:ElementName> > + <rasd:InstanceID>2</rasd:InstanceID> > + <rasd:ResourceType>4</rasd:ResourceType> > + <rasd:VirtualQuantity>${OVA_MEMORY}</rasd:VirtualQuantity> > + </Item> > + <Item> > + <rasd:Address>0</rasd:Address> > + <rasd:Caption>ideController0</rasd:Caption> > + <rasd:Description>IDE Controller</rasd:Description> > + <rasd:ElementName>ideController0</rasd:ElementName> > + <rasd:InstanceID>3</rasd:InstanceID> > + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> > + <rasd:ResourceType>5</rasd:ResourceType> > + </Item> > + <Item> > + <rasd:Address>1</rasd:Address> > + <rasd:Caption>ideController1</rasd:Caption> > + <rasd:Description>IDE Controller</rasd:Description> > + <rasd:ElementName>ideController1</rasd:ElementName> > + <rasd:InstanceID>4</rasd:InstanceID> > + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> > + <rasd:ResourceType>5</rasd:ResourceType> > + </Item> > + <Item> > + <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> > + <rasd:Caption>Ethernet adapter on 'NAT'</rasd:Caption> > + <rasd:Connection>NAT</rasd:Connection> > + <rasd:ElementName>Ethernet adapter on > 'NAT'</rasd:ElementName> > + <rasd:InstanceID>5</rasd:InstanceID> > + <rasd:ResourceSubType>E1000</rasd:ResourceSubType> > + <rasd:ResourceType>10</rasd:ResourceType> > + </Item> > + <Item> > + <rasd:AddressOnParent>0</rasd:AddressOnParent> > + <rasd:Caption>disk1</rasd:Caption> > + <rasd:Description>Disk Image</rasd:Description> > + <rasd:ElementName>disk1</rasd:ElementName> > + <rasd:HostResource>/disk/vmdisk1</rasd:HostResource> > + <rasd:InstanceID>6</rasd:InstanceID> > + <rasd:Parent>3</rasd:Parent> > + <rasd:ResourceType>17</rasd:ResourceType> > + </Item> > + <vmw:Config ovf:required="false" vmw:key="firmware" > vmw:value="${OVA_FIRMWARE}"/> > + <vmw:Config ovf:required="false" > vmw:key="tools.syncTimeWithHost" vmw:value="false"/> > + <vmw:Config ovf:required="false" vmw:key="tools.afterPowerOn" > vmw:value="true"/> > + <vmw:Config ovf:required="false" vmw:key="tools.afterResume" > vmw:value="true"/> > + <vmw:Config ovf:required="false" > vmw:key="tools.beforeGuestShutdown" vmw:value="true"/> > + <vmw:Config ovf:required="false" > vmw:key="tools.beforeGuestStandby" vmw:value="true"/> > + <vmw:ExtraConfig ovf:required="false" > vmw:key="virtualHW.productCompatibility" vmw:value="hosted"/> > + </VirtualHardwareSection> > + <vbox:Machine ovf:required="false" version="1.12-linux" > uuid="${VM_UUID}" name="${OVA_NAME}" OSType="Debian_64" > snapshotFolder="Snapshots" lastStateChange="${LAST_CHANGE}"> > + <ovf:Info>Complete VirtualBox machine configuration in > VirtualBox format</ovf:Info> > + <Hardware version="2"> > + <CPU count="${OVA_NUMBER_OF_CPU}" hotplug="false"> > + <HardwareVirtEx enabled="true" exclusive="true"/> > + <HardwareVirtExNestedPaging enabled="true"/> > + <HardwareVirtExVPID enabled="true"/> > + <PAE enabled="true"/> > + <HardwareVirtExLargePages enabled="false"/> > + <HardwareVirtForce enabled="false"/> > + </CPU> > + <Memory RAMSize="${OVA_MEMORY}" PageFusion="false"/> > + <Firmware type="${OVA_FIRMWARE_VIRTUALBOX}"/> > + <HID Pointing="PS2Mouse" Keyboard="PS2Keyboard"/> > + <HPET enabled="false"/> > + <Chipset type="PIIX3"/> > + <Boot> > + <Order position="1" device="HardDisk"/> > + <Order position="2" device="None"/> > + <Order position="3" device="None"/> > + <Order position="4" device="None"/> > + </Boot> > + <Display VRAMSize="${OVA_VRAM}" monitorCount="1" > accelerate3D="${OVA_3D_ACCEL}" accelerate2DVideo="false"/> > + <VideoRecording enabled="false" file="Test.webm" > horzRes="640" vertRes="480"/> > + <RemoteDisplay enabled="false" authType="Null"/> > + <BIOS> > + <ACPI enabled="${OVA_ACPI}"/> > + <IOAPIC enabled="${OVA_ACPI}"/> > + <Logo fadeIn="true" fadeOut="true" displayTime="0"/> > + <BootMenu mode="MessageAndMenu"/> > + <TimeOffset value="0"/> > + <PXEDebug enabled="false"/> > + </BIOS> > + <USBController enabled="false" enabledEhci="false"/> > + <Network> > + <Adapter slot="0" enabled="true" > MACAddress="${PRIMARY_MAC}" cable="true" speed="0" type="virtio"> > + <DisabledModes/> > + <NAT> > + <DNS pass-domain="true" use-proxy="false" > use-host-resolver="false"/> > + <Alias logging="false" proxy-only="false" > use-same-ports="false"/> > + </NAT> > + </Adapter> > + </Network> > + <UART> > + <Port slot="0" enabled="false" IOBase="0x3f8" IRQ="4" > hostMode="Disconnected"/> > + <Port slot="1" enabled="false" IOBase="0x2f8" IRQ="3" > hostMode="Disconnected"/> > + </UART> > + <LPT> > + <Port slot="0" enabled="false" IOBase="0x378" IRQ="7"/> > + <Port slot="1" enabled="false" IOBase="0x378" IRQ="7"/> > + </LPT> > + <AudioAdapter controller="AC97" driver="Pulse" > enabled="false"/> > + <RTC localOrUTC="local"/> > + <SharedFolders/> > + <Clipboard mode="Disabled"/> > + <DragAndDrop mode="Disabled"/> > + <IO> > + <IoCache enabled="true" size="5"/> > + <BandwidthGroups/> > + </IO> > + <HostPci> > + <Devices/> > + </HostPci> > + <EmulatedUSB> > + <CardReader enabled="false"/> > + </EmulatedUSB> > + <Guest memoryBalloonSize="0"/> > + <GuestProperties/> > + </Hardware> > + <StorageControllers> > + <StorageController name="IDE Controller" type="PIIX4" > PortCount="2" useHostIOCache="true" Bootable="true"> > + <AttachedDevice type="HardDisk" port="0" device="0"> > + <Image uuid="{${DISK_UUID}}"/> > + </AttachedDevice> > + </StorageController> > + </StorageControllers> > + </vbox:Machine> > + </VirtualSystem> > +</Envelope> > +EOF > +tar -H ustar -cvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} > ${OVA_NAME}.ovf +tar -H ustar -uvf ${PP_DEPLOY}/${OVA_NAME}.ova -C > ${PP_DEPLOY} ${VIRTUAL_MACHINE_IMAGE_FILE} + > +# virtual box needs here a manifest file vmware does not want to > accept the format +if [ "${VMDK_SUBFORMAT}" = "monolithicSparse" ]; > then > + echo "SHA${OVA_SHA_ALG}(${VIRTUAL_MACHINE_IMAGE_FILE})= > $(sha${OVA_SHA_ALG}sum ${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE} | > cut -d' ' -f1)" >> ${PP_DEPLOY}/${OVA_NAME}.mf > + echo "SHA${OVA_SHA_ALG}(${OVA_NAME}.ovf)= $(sha${OVA_SHA_ALG}sum > ${PP_DEPLOY}/${OVA_NAME}.ovf | cut -d' ' -f1)" >> > ${PP_DEPLOY}/${OVA_NAME}.mf > + tar -H ustar -uvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} > ${OVA_NAME}.mf +fi > +EOSUDO > +} > + > +addtask do_create_ova after do_convert_wic before do_deploy ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v2 2/3] meta/classes: Generate ova image for vmware or virtualbox 2020-04-09 6:48 ` Henning Schild @ 2020-04-09 14:28 ` Gylstorff Quirin 0 siblings, 0 replies; 58+ messages in thread From: Gylstorff Quirin @ 2020-04-09 14:28 UTC (permalink / raw) To: Henning Schild; +Cc: isar-users, Adler, Michael (CT RDA IOT SES-DE) On 4/9/20 8:48 AM, Henning Schild wrote: > Am Fri, 3 Apr 2020 16:55:09 +0200 > schrieb "Q. Gylstorff" <Quirin.Gylstorff@siemens.com>: > >> From: Quirin Gylstorff <quirin.gylstorff@siemens.com> >> >> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> >> --- >> meta-isar/conf/machine/virtualbox.conf | 16 ++ >> meta-isar/conf/machine/vmware.conf | 16 ++ >> .../multiconfig/virtualbox-ova-buster.conf | 8 + >> .../wic/canned-wks/virtualmachine-grub.wks | 11 + >> meta/classes/virtual-machine-image.bbclass | 265 >> ++++++++++++++++++ 5 files changed, 316 insertions(+) >> create mode 100644 meta-isar/conf/machine/virtualbox.conf >> create mode 100644 meta-isar/conf/machine/vmware.conf >> create mode 100644 >> meta-isar/conf/multiconfig/virtualbox-ova-buster.conf create mode >> 100644 meta-isar/scripts/lib/wic/canned-wks/virtualmachine-grub.wks >> create mode 100644 meta/classes/virtual-machine-image.bbclass >> >> diff --git a/meta-isar/conf/machine/virtualbox.conf >> b/meta-isar/conf/machine/virtualbox.conf new file mode 100644 >> index 0000000..987ab4e >> --- /dev/null >> +++ b/meta-isar/conf/machine/virtualbox.conf >> @@ -0,0 +1,16 @@ >> +# This software is a part of ISAR. >> +# Copyright (c) Siemens AG, 2020 >> +# >> +# SPDX-License-Identifier: MIT >> + >> +DISTRO_ARCH ?= "amd64" >> + >> +KERNEL_NAME ?= "amd64" >> +BOOTLOADER ?= "grub" >> + >> +WKS_FILE ?= "virtualmachine-grub" >> + >> +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" >> + >> +VMDK_SUBFORMAT = "monolithicSparse" >> +IMAGE_TYPE ?= "virtual-machine-image" >> diff --git a/meta-isar/conf/machine/vmware.conf >> b/meta-isar/conf/machine/vmware.conf new file mode 100644 >> index 0000000..8f0c152 >> --- /dev/null >> +++ b/meta-isar/conf/machine/vmware.conf >> @@ -0,0 +1,16 @@ >> +# This software is a part of ISAR. >> +# Copyright (c) Siemens AG, 2020 >> +# >> +# SPDX-License-Identifier: MIT >> + >> +DISTRO_ARCH ?= "amd64" >> + >> +KERNEL_NAME ?= "amd64" >> +BOOTLOADER ?= "grub" >> + >> +WKS_FILE ?= "virtualmachine-grub" >> + >> +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" >> + >> +VMDK_SUBFORMAT = "streamOptimized" >> +IMAGE_TYPE ?= "virtual-machine-image" >> diff --git a/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf >> b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf new file mode >> 100644 index 0000000..3042556 >> --- /dev/null >> +++ b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf >> @@ -0,0 +1,8 @@ >> +# >> +# Copyright (c) Siemens AG, 2020 >> +# >> +# SPDX-License-Identifier: MIT >> + >> + >> +MACHINE = "virtualbox" >> +DISTRO = "debian-buster" >> diff --git >> a/meta-isar/scripts/lib/wic/canned-wks/virtualmachine-grub.wks >> b/meta-isar/scripts/lib/wic/canned-wks/virtualmachine-grub.wks new >> file mode 100644 index 0000000..cbd5057 --- /dev/null >> +++ b/meta-isar/scripts/lib/wic/canned-wks/virtualmachine-grub.wks >> @@ -0,0 +1,11 @@ >> +# >> +# Copyright (c) Siemens AG, 2019 >> +# >> +# Licensed under the Siemens Inner Source License 1.2, or at your >> option any +# later version. >> +# >> + >> +part /boot --source bootimg-efi-isar --sourceparams >> "loader=grub-efi" --ondisk sda --label efi --part-type EF00 --align >> 1024 +part / --source rootfs --ondisk sda --fstype ext4 --label >> platform --align 1024 --use-uuid --size 50G + +bootloader --ptable >> gpt --timeout 3 --append "rootwait console=ttyS0,115200 console=tty0" > > Looks like the only change is the absolute size. Not sure that > justifies a copy. You can reach a good-enough size with ROOTFS_EXTRA. > Note that Michael is currently working on getting IMAGE_ROOTFS_SIZE > into Isar. > > Such a hardcoded size in the wks just is not a good example for people > to copy. > > Henning > oops that code is not necessary as it is more or less from the original ova implementation and I will switch to the sdimage-efi wks for isar. Quirin >> diff --git a/meta/classes/virtual-machine-image.bbclass >> b/meta/classes/virtual-machine-image.bbclass new file mode 100644 >> index 0000000..aa45e47 --- /dev/null >> +++ b/meta/classes/virtual-machine-image.bbclass >> @@ -0,0 +1,265 @@ >> +# This software is a part of ISAR. >> +# Copyright (C) 2019-2020 Siemens AG >> +# >> +# This class allows to generate images for vmware and virtualbox >> +# >> + >> +inherit buildchroot >> +inherit wic-img >> +IMAGER_INSTALL += "qemu-utils gawk uuid-runtime" >> +OVA_NAME ?= "${IMAGE_FULLNAME}" >> +OVA_MEMORY ?= "8192" >> +OVA_NUMBER_OF_CPU ?= "4" >> +OVA_VRAM ?= "64" >> +OVA_FIRMWARE ?= "efi" >> +OVA_ACPI ?= "true" >> +OVA_3D_ACCEL ?= "false" >> +OVA_CLIPBOARD ?= "bidirectional" >> +SOURCE_IMAGE_FILE ?= "${IMAGE_FULLNAME}.wic.img" >> +OVA_SHA_ALG ?= "1" >> +VIRTUAL_MACHINE_IMAGE_TYPE ?= "vmdk" >> +VIRTUAL_MACHINE_IMAGE_FILE ?= >> "${IMAGE_FULLNAME}-disk1.${VIRTUAL_MACHINE_IMAGE_TYPE}" >> +VIRTUAL_MACHINE_DISK ?= "${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE}" >> +# for virtualbox this needs to be monolithicSparse +# for virtualbox >> this needs to be streamOptimized +#VMDK_SUBFORMAT ?= "streamOptimized" >> +VMDK_SUBFORMAT ?= "monolithicSparse" >> +def set_convert_options(d): >> + format = d.getVar("VIRTUAL_MACHINE_IMAGE_TYPE") >> + if format == "vmdk": >> + return "-o subformat=%s" % d.getVar("VMDK_SUBFORMAT") >> + else: >> + return "" >> + >> + >> +CONVERSION_OPTIONS = "${@set_convert_options(d)}" >> + >> +do_convert_wic() { >> + rm -f '${DEPLOY_DIR_IMAGE}/${VIRTUAL_MACHINE_IMAGE_FILE}' >> + image_do_mounts >> + bbnote "Creating ${VIRTUAL_MACHINE_IMAGE_FILE} from >> ${WIC_IMAGE_FILE}" >> + sudo -E chroot --userspec=$( id -u ):$( id -g ) >> ${BUILDCHROOT_DIR} \ >> + /usr/bin/qemu-img convert -f raw -O ${VIRTUAL_MACHINE_IMAGE_TYPE} >> ${CONVERSION_OPTIONS} \ >> + '${PP_DEPLOY}/${SOURCE_IMAGE_FILE}' >> '${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE}' +} >> + >> +addtask convert_wic before do_build after do_wic_image >> do_copy_boot_files do_install_imager_deps do_transform_template + >> +# Generate random MAC addresses just as VirtualBox does, the format >> is +# their assigned prefix for the first 3 bytes followed by 3 >> random bytes. +VBOX_MAC_PREFIX = "080027" >> +macgen() { >> + hexdump -n3 -e "\"${VBOX_MAC_PREFIX}%06X\n\"" /dev/urandom >> +} >> +get_disksize() { >> + image_do_mounts >> + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} >> \ >> + qemu-img info -f vmdk "${VIRTUAL_MACHINE_DISK}" | gawk 'match($0, >> /^virtual size:.*\(([0-9]+) bytes\)/, a) {print a[1]}' +} >> + >> +do_create_ova() { >> + if [ ! ${VIRTUAL_MACHINE_IMAGE_TYPE} = "vmdk" ]; then >> + exit 0 >> + fi >> + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ova' >> + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ovf' >> + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.mf' >> + >> + export PRIMARY_MAC=$(macgen) >> + export SECONDARY_MAC=$(macgen) >> + export DISK_NAME=$(basename -s .vmdk ${VIRTUAL_MACHINE_DISK}) >> + export DISK_SIZE_BYTES=$(get_disksize) >> + export LAST_CHANGE=$(date -u "+%Y-%m-%dT%H:%M:%SZ") >> + export OVA_FIRMWARE_VIRTUALBOX=$(echo ${OVA_FIRMWARE} | tr '[a-z]' >> '[A-Z]') >> + image_do_mounts >> + sudo -Es chroot --userspec=$( id -u ):$( id -g ) >> ${BUILDCHROOT_DIR} <<'EOSUDO' >> + export DISK_UUID=$(uuidgen) >> + export VM_UUID=$(uuidgen) >> + # create ovf >> + cat > "${PP_DEPLOY}/${OVA_NAME}.ovf" << EOF >> +<?xml version="1.0" encoding="UTF-8"?> >> +<Envelope ovf:version="1.0" xml:lang="en-US" >> xmlns="http://schemas.dmtf.org/ovf/envelope/1" >> xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" >> xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" >> xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" >> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >> xmlns:vbox="http://www.virtualbox.org/ovf/machine"> >> + <References> >> + <File ovf:href="${VIRTUAL_MACHINE_IMAGE_FILE}" ovf:id="file1"/> >> + </References> >> + <DiskSection> >> + <Info>List of the virtual disks used in the package</Info> >> + <Disk ovf:capacity="${DISK_SIZE_BYTES}" >> ovf:capacityAllocationUnits="byte" ovf:diskId="vmdisk1" >> ovf:fileRef="file1" >> ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#${VMDK_SUBFORMAT}" >> vbox:uuid="${DISK_UUID}"/> >> + </DiskSection> >> + <NetworkSection> >> + <Info>Logical networks used in the package</Info> >> + <Network ovf:name="NAT"> >> + <Description>Logical network used by this >> appliance.</Description> >> + </Network> >> + </NetworkSection> >> + <VirtualSystem ovf:id="${OVA_NAME}"> >> + <Info>A virtual machine</Info> >> + <OperatingSystemSection ovf:id="100"> >> + <Info>The kind of installed guest operating system</Info> >> + <Description>Debian_64</Description> >> + <vbox:OSType ovf:required="false">Debian_64</vbox:OSType> >> + </OperatingSystemSection> >> + <VirtualHardwareSection> >> + <Info>Virtual hardware requirements for a virtual >> machine</Info> >> + <System> >> + <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> >> + <vssd:InstanceID>0</vssd:InstanceID> >> + >> <vssd:VirtualSystemIdentifier>${OVA_NAME}</vssd:VirtualSystemIdentifier> >> + >> <vssd:VirtualSystemType>virtualbox-2.2</vssd:VirtualSystemType> >> + </System> >> + <Item> >> + <rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits> >> + <rasd:Caption>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:Caption> >> + <rasd:Description>Number of virtual CPUs</rasd:Description> >> + <rasd:ElementName>${OVA_NUMBER_OF_CPU} virtual >> CPU</rasd:ElementName> >> + <rasd:InstanceID>1</rasd:InstanceID> >> + <rasd:ResourceType>3</rasd:ResourceType> >> + >> <rasd:VirtualQuantity>${OVA_NUMBER_OF_CPU}</rasd:VirtualQuantity> >> + </Item> >> + <Item> >> + <rasd:AllocationUnits>MegaBytes</rasd:AllocationUnits> >> + <rasd:Caption>${OVA_MEMORY} MB of memory</rasd:Caption> >> + <rasd:Description>Memory Size</rasd:Description> >> + <rasd:ElementName>${OVA_MEMORY} MB of >> memory</rasd:ElementName> >> + <rasd:InstanceID>2</rasd:InstanceID> >> + <rasd:ResourceType>4</rasd:ResourceType> >> + <rasd:VirtualQuantity>${OVA_MEMORY}</rasd:VirtualQuantity> >> + </Item> >> + <Item> >> + <rasd:Address>0</rasd:Address> >> + <rasd:Caption>ideController0</rasd:Caption> >> + <rasd:Description>IDE Controller</rasd:Description> >> + <rasd:ElementName>ideController0</rasd:ElementName> >> + <rasd:InstanceID>3</rasd:InstanceID> >> + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> >> + <rasd:ResourceType>5</rasd:ResourceType> >> + </Item> >> + <Item> >> + <rasd:Address>1</rasd:Address> >> + <rasd:Caption>ideController1</rasd:Caption> >> + <rasd:Description>IDE Controller</rasd:Description> >> + <rasd:ElementName>ideController1</rasd:ElementName> >> + <rasd:InstanceID>4</rasd:InstanceID> >> + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> >> + <rasd:ResourceType>5</rasd:ResourceType> >> + </Item> >> + <Item> >> + <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> >> + <rasd:Caption>Ethernet adapter on 'NAT'</rasd:Caption> >> + <rasd:Connection>NAT</rasd:Connection> >> + <rasd:ElementName>Ethernet adapter on >> 'NAT'</rasd:ElementName> >> + <rasd:InstanceID>5</rasd:InstanceID> >> + <rasd:ResourceSubType>E1000</rasd:ResourceSubType> >> + <rasd:ResourceType>10</rasd:ResourceType> >> + </Item> >> + <Item> >> + <rasd:AddressOnParent>0</rasd:AddressOnParent> >> + <rasd:Caption>disk1</rasd:Caption> >> + <rasd:Description>Disk Image</rasd:Description> >> + <rasd:ElementName>disk1</rasd:ElementName> >> + <rasd:HostResource>/disk/vmdisk1</rasd:HostResource> >> + <rasd:InstanceID>6</rasd:InstanceID> >> + <rasd:Parent>3</rasd:Parent> >> + <rasd:ResourceType>17</rasd:ResourceType> >> + </Item> >> + <vmw:Config ovf:required="false" vmw:key="firmware" >> vmw:value="${OVA_FIRMWARE}"/> >> + <vmw:Config ovf:required="false" >> vmw:key="tools.syncTimeWithHost" vmw:value="false"/> >> + <vmw:Config ovf:required="false" vmw:key="tools.afterPowerOn" >> vmw:value="true"/> >> + <vmw:Config ovf:required="false" vmw:key="tools.afterResume" >> vmw:value="true"/> >> + <vmw:Config ovf:required="false" >> vmw:key="tools.beforeGuestShutdown" vmw:value="true"/> >> + <vmw:Config ovf:required="false" >> vmw:key="tools.beforeGuestStandby" vmw:value="true"/> >> + <vmw:ExtraConfig ovf:required="false" >> vmw:key="virtualHW.productCompatibility" vmw:value="hosted"/> >> + </VirtualHardwareSection> >> + <vbox:Machine ovf:required="false" version="1.12-linux" >> uuid="${VM_UUID}" name="${OVA_NAME}" OSType="Debian_64" >> snapshotFolder="Snapshots" lastStateChange="${LAST_CHANGE}"> >> + <ovf:Info>Complete VirtualBox machine configuration in >> VirtualBox format</ovf:Info> >> + <Hardware version="2"> >> + <CPU count="${OVA_NUMBER_OF_CPU}" hotplug="false"> >> + <HardwareVirtEx enabled="true" exclusive="true"/> >> + <HardwareVirtExNestedPaging enabled="true"/> >> + <HardwareVirtExVPID enabled="true"/> >> + <PAE enabled="true"/> >> + <HardwareVirtExLargePages enabled="false"/> >> + <HardwareVirtForce enabled="false"/> >> + </CPU> >> + <Memory RAMSize="${OVA_MEMORY}" PageFusion="false"/> >> + <Firmware type="${OVA_FIRMWARE_VIRTUALBOX}"/> >> + <HID Pointing="PS2Mouse" Keyboard="PS2Keyboard"/> >> + <HPET enabled="false"/> >> + <Chipset type="PIIX3"/> >> + <Boot> >> + <Order position="1" device="HardDisk"/> >> + <Order position="2" device="None"/> >> + <Order position="3" device="None"/> >> + <Order position="4" device="None"/> >> + </Boot> >> + <Display VRAMSize="${OVA_VRAM}" monitorCount="1" >> accelerate3D="${OVA_3D_ACCEL}" accelerate2DVideo="false"/> >> + <VideoRecording enabled="false" file="Test.webm" >> horzRes="640" vertRes="480"/> >> + <RemoteDisplay enabled="false" authType="Null"/> >> + <BIOS> >> + <ACPI enabled="${OVA_ACPI}"/> >> + <IOAPIC enabled="${OVA_ACPI}"/> >> + <Logo fadeIn="true" fadeOut="true" displayTime="0"/> >> + <BootMenu mode="MessageAndMenu"/> >> + <TimeOffset value="0"/> >> + <PXEDebug enabled="false"/> >> + </BIOS> >> + <USBController enabled="false" enabledEhci="false"/> >> + <Network> >> + <Adapter slot="0" enabled="true" >> MACAddress="${PRIMARY_MAC}" cable="true" speed="0" type="virtio"> >> + <DisabledModes/> >> + <NAT> >> + <DNS pass-domain="true" use-proxy="false" >> use-host-resolver="false"/> >> + <Alias logging="false" proxy-only="false" >> use-same-ports="false"/> >> + </NAT> >> + </Adapter> >> + </Network> >> + <UART> >> + <Port slot="0" enabled="false" IOBase="0x3f8" IRQ="4" >> hostMode="Disconnected"/> >> + <Port slot="1" enabled="false" IOBase="0x2f8" IRQ="3" >> hostMode="Disconnected"/> >> + </UART> >> + <LPT> >> + <Port slot="0" enabled="false" IOBase="0x378" IRQ="7"/> >> + <Port slot="1" enabled="false" IOBase="0x378" IRQ="7"/> >> + </LPT> >> + <AudioAdapter controller="AC97" driver="Pulse" >> enabled="false"/> >> + <RTC localOrUTC="local"/> >> + <SharedFolders/> >> + <Clipboard mode="Disabled"/> >> + <DragAndDrop mode="Disabled"/> >> + <IO> >> + <IoCache enabled="true" size="5"/> >> + <BandwidthGroups/> >> + </IO> >> + <HostPci> >> + <Devices/> >> + </HostPci> >> + <EmulatedUSB> >> + <CardReader enabled="false"/> >> + </EmulatedUSB> >> + <Guest memoryBalloonSize="0"/> >> + <GuestProperties/> >> + </Hardware> >> + <StorageControllers> >> + <StorageController name="IDE Controller" type="PIIX4" >> PortCount="2" useHostIOCache="true" Bootable="true"> >> + <AttachedDevice type="HardDisk" port="0" device="0"> >> + <Image uuid="{${DISK_UUID}}"/> >> + </AttachedDevice> >> + </StorageController> >> + </StorageControllers> >> + </vbox:Machine> >> + </VirtualSystem> >> +</Envelope> >> +EOF >> +tar -H ustar -cvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} >> ${OVA_NAME}.ovf +tar -H ustar -uvf ${PP_DEPLOY}/${OVA_NAME}.ova -C >> ${PP_DEPLOY} ${VIRTUAL_MACHINE_IMAGE_FILE} + >> +# virtual box needs here a manifest file vmware does not want to >> accept the format +if [ "${VMDK_SUBFORMAT}" = "monolithicSparse" ]; >> then >> + echo "SHA${OVA_SHA_ALG}(${VIRTUAL_MACHINE_IMAGE_FILE})= >> $(sha${OVA_SHA_ALG}sum ${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE} | >> cut -d' ' -f1)" >> ${PP_DEPLOY}/${OVA_NAME}.mf >> + echo "SHA${OVA_SHA_ALG}(${OVA_NAME}.ovf)= $(sha${OVA_SHA_ALG}sum >> ${PP_DEPLOY}/${OVA_NAME}.ovf | cut -d' ' -f1)" >> >> ${PP_DEPLOY}/${OVA_NAME}.mf >> + tar -H ustar -uvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} >> ${OVA_NAME}.mf +fi >> +EOSUDO >> +} >> + >> +addtask do_create_ova after do_convert_wic before do_deploy > ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v2 3/3] meta/classes: add cpiogz-img 2020-04-03 14:55 ` [PATCH v2 0/3] some images classes Q. Gylstorff 2020-04-03 14:55 ` [PATCH v2 1/3] meta/support: Generate a custom initramfs Q. Gylstorff 2020-04-03 14:55 ` [PATCH v2 2/3] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff @ 2020-04-03 14:55 ` Q. Gylstorff 2020-04-09 6:54 ` [PATCH v2 0/3] some images classes Henning Schild 3 siblings, 0 replies; 58+ messages in thread From: Q. Gylstorff @ 2020-04-03 14:55 UTC (permalink / raw) To: isar-users, henning.schild; +Cc: Quirin Gylstorff, Michael Adler From: Quirin Gylstorff <quirin.gylstorff@siemens.com> to create a initramfs like filesystem. Signed-off-by: Michael Adler <michael.adler@siemens.com> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- .../multiconfig/qemuamd64-buster-cpiogz.conf | 9 +++++++++ meta/classes/cpiogz-img.bbclass | 20 +++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf create mode 100644 meta/classes/cpiogz-img.bbclass diff --git a/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf b/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf new file mode 100644 index 0000000..cadcdac --- /dev/null +++ b/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf @@ -0,0 +1,9 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +MACHINE ?= "qemuamd64" +DISTRO ?= "debian-buster" + +IMAGE_TYPE = "cpiogz-img" diff --git a/meta/classes/cpiogz-img.bbclass b/meta/classes/cpiogz-img.bbclass new file mode 100644 index 0000000..8efdcb4 --- /dev/null +++ b/meta/classes/cpiogz-img.bbclass @@ -0,0 +1,20 @@ +# This software is a part of ISAR. +# Copyright (C) 2020 Siemens AG +# +# SPDX-License-Identifier: MIT + +CPIOGZ_FNAME ?= "${IMAGE_FULLNAME}.cpio.gz" +CPIOGZ_IMAGE_FILE = "${DEPLOY_DIR_IMAGE}/${CPIOGZ_FNAME}" +IMAGER_INSTALL += "cpio" +CPIO_IMAGE_FORMAT ?= "newc" +do_cpiogz_image() { + sudo rm -f ${CPIOGZ_IMAGE_FILE} + image_do_mounts + sudo chroot ${BUILDCHROOT_DIR} \ + sh -c "cd ${PP_ROOTFS}; /usr/bin/find . | \ + /usr/bin/cpio -H ${CPIO_IMAGE_FORMAT} -o | /usr/bin/gzip -9 > \ + ${PP_DEPLOY}/${CPIOGZ_FNAME}" + sudo chown $(id -u):$(id -g) ${CPIOGZ_IMAGE_FILE} +} + +addtask cpiogz_image before do_image after do_image_tools -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v2 0/3] some images classes 2020-04-03 14:55 ` [PATCH v2 0/3] some images classes Q. Gylstorff ` (2 preceding siblings ...) 2020-04-03 14:55 ` [PATCH v2 3/3] meta/classes: add cpiogz-img Q. Gylstorff @ 2020-04-09 6:54 ` Henning Schild 2020-04-14 12:24 ` [PATCH v3 " Q. Gylstorff 3 siblings, 1 reply; 58+ messages in thread From: Henning Schild @ 2020-04-09 6:54 UTC (permalink / raw) To: Q. Gylstorff; +Cc: isar-users Am Fri, 3 Apr 2020 16:55:07 +0200 schrieb "Q. Gylstorff" <Quirin.Gylstorff@siemens.com>: > From: Quirin Gylstorff <quirin.gylstorff@siemens.com> > > - Generate cpio images for rescue images > - generate custom initramfs > - generate ova images > > Changes V2: > - initramfs modification is now a package > - ova-wic-img was renamed to virtual-machine-image > - virtual-machine-image do_convert_wic supports now other image > formats > - Add tests Those test images need to be added somewhere in scripts/ci_build.sh Henning > - cpiogz now use chown instead of userspec > > Quirin Gylstorff (3): > meta/support: Generate a custom initramfs > meta/classes: Generate ova image for vmware or virtualbox > meta/classes: add cpiogz-img > > meta-isar/conf/machine/virtualbox.conf | 16 ++ > meta-isar/conf/machine/vmware.conf | 16 ++ > .../multiconfig/qemuamd64-buster-cpiogz.conf | 9 + > .../multiconfig/virtualbox-ova-buster.conf | 8 + > .../wic/canned-wks/virtualmachine-grub.wks | 11 + > meta/classes/cpiogz-img.bbclass | 20 ++ > meta/classes/initramfs.bbclass | 44 +++ > meta/classes/virtual-machine-image.bbclass | 265 > ++++++++++++++++++ .../initramfs-config/files/control.tmpl | > 12 + .../initramfs-config/files/postinst.tmpl | 28 ++ > .../initramfs-config/initramfs-config_0.1.bb | 30 ++ > 11 files changed, 459 insertions(+) > create mode 100644 meta-isar/conf/machine/virtualbox.conf > create mode 100644 meta-isar/conf/machine/vmware.conf > create mode 100644 > meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf create mode > 100644 meta-isar/conf/multiconfig/virtualbox-ova-buster.conf create > mode 100644 > meta-isar/scripts/lib/wic/canned-wks/virtualmachine-grub.wks create > mode 100644 meta/classes/cpiogz-img.bbclass create mode 100644 > meta/classes/initramfs.bbclass create mode 100644 > meta/classes/virtual-machine-image.bbclass create mode 100644 > meta/recipes-support/initramfs-config/files/control.tmpl create mode > 100644 meta/recipes-support/initramfs-config/files/postinst.tmpl > create mode 100644 > meta/recipes-support/initramfs-config/initramfs-config_0.1.bb > ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v3 0/3] some images classes 2020-04-09 6:54 ` [PATCH v2 0/3] some images classes Henning Schild @ 2020-04-14 12:24 ` Q. Gylstorff 2020-04-14 12:24 ` [PATCH v3 1/3] meta/support: Generate a custom initramfs Q. Gylstorff ` (3 more replies) 0 siblings, 4 replies; 58+ messages in thread From: Q. Gylstorff @ 2020-04-14 12:24 UTC (permalink / raw) To: isar-users; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> - Generate cpio images for rescue images - generate custom initramfs - generate ova images Changes V2: - initramfs modification is now a package - ova-wic-img was renamed to virtual-machine-image - virtual-machine-image do_convert_wic supports now other image formats - Add tests - cpiogz now use chown instead of userspec Changes V3: - Add tests to build-ci - add postrm to initramfs-config - use sdimage-efi for virtualbox images Quirin Gylstorff (3): meta/support: Generate a custom initramfs meta/classes: Generate ova image for vmware or virtualbox meta/classes: add cpiogz-img meta-isar/conf/machine/virtualbox.conf | 16 ++ meta-isar/conf/machine/vmware.conf | 16 ++ .../multiconfig/qemuamd64-buster-cpiogz.conf | 9 + .../multiconfig/virtualbox-ova-buster.conf | 8 + meta/classes/cpiogz-img.bbclass | 20 ++ meta/classes/virtual-machine-image.bbclass | 265 ++++++++++++++++++ .../initramfs-config/files/control.tmpl | 12 + .../initramfs-config/files/postinst.tmpl | 27 ++ .../initramfs-config/files/postrm.tmpl | 19 ++ .../initramfs-config/initramfs-config_0.1.bb | 31 ++ scripts/ci_build.sh | 4 +- 11 files changed, 426 insertions(+), 1 deletion(-) create mode 100644 meta-isar/conf/machine/virtualbox.conf create mode 100644 meta-isar/conf/machine/vmware.conf create mode 100644 meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf create mode 100644 meta-isar/conf/multiconfig/virtualbox-ova-buster.conf create mode 100644 meta/classes/cpiogz-img.bbclass create mode 100644 meta/classes/virtual-machine-image.bbclass create mode 100644 meta/recipes-support/initramfs-config/files/control.tmpl create mode 100644 meta/recipes-support/initramfs-config/files/postinst.tmpl create mode 100644 meta/recipes-support/initramfs-config/files/postrm.tmpl create mode 100644 meta/recipes-support/initramfs-config/initramfs-config_0.1.bb -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v3 1/3] meta/support: Generate a custom initramfs 2020-04-14 12:24 ` [PATCH v3 " Q. Gylstorff @ 2020-04-14 12:24 ` Q. Gylstorff 2020-04-20 20:14 ` Henning Schild 2020-04-14 12:24 ` [PATCH v3 2/3] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff ` (2 subsequent siblings) 3 siblings, 1 reply; 58+ messages in thread From: Q. Gylstorff @ 2020-04-14 12:24 UTC (permalink / raw) To: isar-users; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> This package sets the Parameters for mkinitramfs/update-intramfs before it regenerates the initrd.img of debian with a modified version. Use cases are the remove unnecessary kernel modules to reduce the size of the initrd by using the parameters: ``` INITRAMFS_MODULES = "list" INITRAMFS_MODULE_LIST += "ext4" ``` Set the boot root during the initrd generation by setting `INITRAMFS_ROOT`. see also man pages of mkinitramfs and initramfs.conf. Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- .../initramfs-config/files/control.tmpl | 12 +++++++ .../initramfs-config/files/postinst.tmpl | 27 ++++++++++++++++ .../initramfs-config/files/postrm.tmpl | 19 +++++++++++ .../initramfs-config/initramfs-config_0.1.bb | 32 +++++++++++++++++++ 4 files changed, 90 insertions(+) create mode 100644 meta/recipes-support/initramfs-config/files/control.tmpl create mode 100644 meta/recipes-support/initramfs-config/files/postinst.tmpl create mode 100644 meta/recipes-support/initramfs-config/files/postrm.tmpl create mode 100644 meta/recipes-support/initramfs-config/initramfs-config_0.1.bb diff --git a/meta/recipes-support/initramfs-config/files/control.tmpl b/meta/recipes-support/initramfs-config/files/control.tmpl new file mode 100644 index 0000000..8739b4a --- /dev/null +++ b/meta/recipes-support/initramfs-config/files/control.tmpl @@ -0,0 +1,12 @@ +Source: initramfs-config +Section: misc +Priority: optional +Standards-Version: 3.9.6 +Maintainer: isar-users <isar-users@googlegroups.com> +Build-Depends: debhelper (>= 9) + + +Package: initramfs-config +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, initramfs-tools-core, ${DEBIAN_DEPENDS} +Description: Configuration files for a custom initramfs \ No newline at end of file diff --git a/meta/recipes-support/initramfs-config/files/postinst.tmpl b/meta/recipes-support/initramfs-config/files/postinst.tmpl new file mode 100644 index 0000000..ca8c9c6 --- /dev/null +++ b/meta/recipes-support/initramfs-config/files/postinst.tmpl @@ -0,0 +1,27 @@ +#!/bin/bash +INITRAMFS_CONF=/etc/initramfs-tools/initramfs.conf +if [ -f ${INITRAMFS_CONF} ]; then + sed -i -E 's/(^MODULES=).*/\1${INITRAMFS_MODULES}/' ${INITRAMFS_CONF} + sed -i -E 's/(^BUSYBOX=).*/\1${INITRAMFS_BUSYBOX}/' ${INITRAMFS_CONF} + sed -i -E 's/(^COMPRESS=).*/\1${INITRAMFS_COMPRESS}/' ${INITRAMFS_CONF} + sed -i -E 's/(^KEYMAP=).*/\1${INITRAMFS_KEYMAP}/' ${INITRAMFS_CONF} + sed -i -E 's/(^DEVICE=).*/\1${INITRAMFS_NET_DEVICE}/' ${INITRAMFS_CONF} + sed -i -E 's/(^NFSROOT=).*/\1${INITRAMFS_NFSROOT}/' ${INITRAMFS_CONF} + sed -i -E 's/(^RUNSIZE=).*/\1${INITRAMFS_RUNSIZE}/' ${INITRAMFS_CONF} + if grep -Fxq "ROOT=" "${INITRAMFS_CONF}"; then + sed -i -E 's/(^ROOT=).*/\1${INITRAMFS_ROOT}/' ${INITRAMFS_CONF} + else + sed -i -E "\$aROOT=${INITRAMFS_ROOT}" ${INITRAMFS_CONF} + fi +fi + +MODULES_LIST_FILE=/etc/initramfs-tools/modules +if [ -f ${MODULES_LIST_FILE} ]; then + for modname in ${INITRAMFS_MODULE_LIST}; do + if ! grep -Fxq "$modname" "${MODULES_LIST_FILE}"; then + echo "$modname" >> "${MODULES_LIST_FILE}" + fi + done +fi + +update-initramfs -v -u diff --git a/meta/recipes-support/initramfs-config/files/postrm.tmpl b/meta/recipes-support/initramfs-config/files/postrm.tmpl new file mode 100644 index 0000000..55399d5 --- /dev/null +++ b/meta/recipes-support/initramfs-config/files/postrm.tmpl @@ -0,0 +1,19 @@ +#!/bin/bash +# back to the debian defaults +INITRAMFS_CONF=/etc/initramfs-tools/initramfs.conf +sed -i -E 's/(^MODULES=).*/\1most/' ${INITRAMFS_CONF} +sed -i -E 's/(^BUSYBOX=).*/\1auto/' ${INITRAMFS_CONF} +sed -i -E 's/(^COMPRESS=).*/\1gzip/' ${INITRAMFS_CONF} +sed -i -E 's/(^KEYMAP=).*/\1n/' ${INITRAMFS_CONF} +sed -i -E 's/(^DEVICE=).*/\1/' ${INITRAMFS_CONF} +sed -i -E 's/(^NFSROOT=).*/\1auto/' ${INITRAMFS_CONF} +sed -i -E 's/(^RUNSIZE=).*/\110%/' ${INITRAMFS_CONF} +sed -i -E 's/(^ROOT=).*//' ${INITRAMFS_CONF} + +# remove the added modules +MODULES_LIST_FILE=/etc/initramfs-tools/modules +for modname in ${INITRAMFS_MODULE_LIST}; do + sed -i -E 's/$modname//' +done + +update-initramfs -v -u diff --git a/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb b/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb new file mode 100644 index 0000000..34bb25b --- /dev/null +++ b/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb @@ -0,0 +1,32 @@ +# This software is a part of ISAR. +# Copyright (C) 2020 Siemens AG +# +# SPDX-License-Identifier: MIT +inherit dpkg-raw +inherit template +DESCRIPTION = "Recipe to set the initramfs configuration and generate a new ramfs" + + +SRC_URI = "file://postinst.tmpl \ + file://postrm.tmpl \ + file://control.tmpl \ + " + +INITRAMFS_MODULES ?= "most" +INITRAMFS_BUSYBOX ?= "auto" +INITRAMFS_COMPRESS ?= "gzip" +INITRAMFS_KEYMAP ?= "n" +INITRAMFS_NET_DEVICE ?= "" +INITRAMFS_NFSROOT ?= "auto" +INITRAMFS_RUNSIZE ?= "10%" +INITRAMFS_ROOT ?= "" +INITRAMFS_MODULE_LIST ?= "" +CREATE_NEW_INITRAMFS ?= "n" +KERNEL_PACKAGE = "${@ ("linux-image-" + d.getVar("KERNEL_NAME", True)) if d.getVar("KERNEL_NAME", True) else ""}" +DEBIAN_DEPENDS += ", ${KERNEL_PACKAGE}" +TEMPLATE_FILES = "postinst.tmpl control.tmpl postrm.tmpl" +TEMPLATE_VARS += "INITRAMFS_MODULES INITRAMFS_BUSYBOX INITRAMFS_COMPRESS \ + INITRAMFS_KEYMAP INITRAMFS_NET_DEVICE INITRAMFS_NFSROOT \ + INITRAMFS_RUNSIZE INITRAMFS_ROOT INITRAMFS_MODULE_LIST CREATE_NEW_INITRAMFS DEBIAN_DEPENDS" + + -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v3 1/3] meta/support: Generate a custom initramfs 2020-04-14 12:24 ` [PATCH v3 1/3] meta/support: Generate a custom initramfs Q. Gylstorff @ 2020-04-20 20:14 ` Henning Schild 2020-04-21 14:30 ` Gylstorff Quirin 0 siblings, 1 reply; 58+ messages in thread From: Henning Schild @ 2020-04-20 20:14 UTC (permalink / raw) To: [ext] Q. Gylstorff; +Cc: isar-users Am Tue, 14 Apr 2020 14:24:47 +0200 schrieb "[ext] Q. Gylstorff" <Quirin.Gylstorff@siemens.com>: > From: Quirin Gylstorff <quirin.gylstorff@siemens.com> > > This package sets the Parameters for mkinitramfs/update-intramfs > before it regenerates the initrd.img of debian with a modified > version. > > Use cases are the remove unnecessary kernel modules to reduce the > size of the initrd by using the parameters: > ``` > INITRAMFS_MODULES = "list" > INITRAMFS_MODULE_LIST += "ext4" > ``` > > Set the boot root during the initrd generation by setting > `INITRAMFS_ROOT`. > > see also man pages of mkinitramfs and initramfs.conf. > > Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> > --- > .../initramfs-config/files/control.tmpl | 12 +++++++ > .../initramfs-config/files/postinst.tmpl | 27 ++++++++++++++++ > .../initramfs-config/files/postrm.tmpl | 19 +++++++++++ > .../initramfs-config/initramfs-config_0.1.bb | 32 > +++++++++++++++++++ 4 files changed, 90 insertions(+) > create mode 100644 > meta/recipes-support/initramfs-config/files/control.tmpl create mode > 100644 meta/recipes-support/initramfs-config/files/postinst.tmpl > create mode 100644 > meta/recipes-support/initramfs-config/files/postrm.tmpl create mode > 100644 meta/recipes-support/initramfs-config/initramfs-config_0.1.bb > > diff --git a/meta/recipes-support/initramfs-config/files/control.tmpl > b/meta/recipes-support/initramfs-config/files/control.tmpl new file > mode 100644 index 0000000..8739b4a > --- /dev/null > +++ b/meta/recipes-support/initramfs-config/files/control.tmpl > @@ -0,0 +1,12 @@ > +Source: initramfs-config > +Section: misc > +Priority: optional > +Standards-Version: 3.9.6 > +Maintainer: isar-users <isar-users@googlegroups.com> > +Build-Depends: debhelper (>= 9) > + > + > +Package: initramfs-config > +Architecture: any > +Depends: ${shlibs:Depends}, ${misc:Depends}, initramfs-tools-core, > ${DEBIAN_DEPENDS} +Description: Configuration files for a custom > initramfs \ No newline at end of file > diff --git > a/meta/recipes-support/initramfs-config/files/postinst.tmpl > b/meta/recipes-support/initramfs-config/files/postinst.tmpl new file > mode 100644 index 0000000..ca8c9c6 --- /dev/null > +++ b/meta/recipes-support/initramfs-config/files/postinst.tmpl > @@ -0,0 +1,27 @@ > +#!/bin/bash can this be /bin/sh, and if not does that add a dep? Henning > +INITRAMFS_CONF=/etc/initramfs-tools/initramfs.conf > +if [ -f ${INITRAMFS_CONF} ]; then > + sed -i -E 's/(^MODULES=).*/\1${INITRAMFS_MODULES}/' > ${INITRAMFS_CONF} > + sed -i -E 's/(^BUSYBOX=).*/\1${INITRAMFS_BUSYBOX}/' > ${INITRAMFS_CONF} > + sed -i -E 's/(^COMPRESS=).*/\1${INITRAMFS_COMPRESS}/' > ${INITRAMFS_CONF} > + sed -i -E 's/(^KEYMAP=).*/\1${INITRAMFS_KEYMAP}/' > ${INITRAMFS_CONF} > + sed -i -E 's/(^DEVICE=).*/\1${INITRAMFS_NET_DEVICE}/' > ${INITRAMFS_CONF} > + sed -i -E 's/(^NFSROOT=).*/\1${INITRAMFS_NFSROOT}/' > ${INITRAMFS_CONF} > + sed -i -E 's/(^RUNSIZE=).*/\1${INITRAMFS_RUNSIZE}/' > ${INITRAMFS_CONF} > + if grep -Fxq "ROOT=" "${INITRAMFS_CONF}"; then > + sed -i -E 's/(^ROOT=).*/\1${INITRAMFS_ROOT}/' > ${INITRAMFS_CONF} > + else > + sed -i -E "\$aROOT=${INITRAMFS_ROOT}" ${INITRAMFS_CONF} > + fi > +fi > + > +MODULES_LIST_FILE=/etc/initramfs-tools/modules > +if [ -f ${MODULES_LIST_FILE} ]; then > + for modname in ${INITRAMFS_MODULE_LIST}; do > + if ! grep -Fxq "$modname" "${MODULES_LIST_FILE}"; then > + echo "$modname" >> "${MODULES_LIST_FILE}" > + fi > + done > +fi > + > +update-initramfs -v -u > diff --git a/meta/recipes-support/initramfs-config/files/postrm.tmpl > b/meta/recipes-support/initramfs-config/files/postrm.tmpl new file > mode 100644 index 0000000..55399d5 > --- /dev/null > +++ b/meta/recipes-support/initramfs-config/files/postrm.tmpl > @@ -0,0 +1,19 @@ > +#!/bin/bash > +# back to the debian defaults > +INITRAMFS_CONF=/etc/initramfs-tools/initramfs.conf > +sed -i -E 's/(^MODULES=).*/\1most/' ${INITRAMFS_CONF} > +sed -i -E 's/(^BUSYBOX=).*/\1auto/' ${INITRAMFS_CONF} > +sed -i -E 's/(^COMPRESS=).*/\1gzip/' ${INITRAMFS_CONF} > +sed -i -E 's/(^KEYMAP=).*/\1n/' ${INITRAMFS_CONF} > +sed -i -E 's/(^DEVICE=).*/\1/' ${INITRAMFS_CONF} > +sed -i -E 's/(^NFSROOT=).*/\1auto/' ${INITRAMFS_CONF} > +sed -i -E 's/(^RUNSIZE=).*/\110%/' ${INITRAMFS_CONF} > +sed -i -E 's/(^ROOT=).*//' ${INITRAMFS_CONF} > + > +# remove the added modules > +MODULES_LIST_FILE=/etc/initramfs-tools/modules > +for modname in ${INITRAMFS_MODULE_LIST}; do > + sed -i -E 's/$modname//' > +done > + > +update-initramfs -v -u > diff --git > a/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb > b/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb new > file mode 100644 index 0000000..34bb25b --- /dev/null > +++ b/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb > @@ -0,0 +1,32 @@ > +# This software is a part of ISAR. > +# Copyright (C) 2020 Siemens AG > +# > +# SPDX-License-Identifier: MIT > +inherit dpkg-raw > +inherit template > +DESCRIPTION = "Recipe to set the initramfs configuration and > generate a new ramfs" + > + > +SRC_URI = "file://postinst.tmpl \ > + file://postrm.tmpl \ > + file://control.tmpl \ > + " > + > +INITRAMFS_MODULES ?= "most" > +INITRAMFS_BUSYBOX ?= "auto" > +INITRAMFS_COMPRESS ?= "gzip" > +INITRAMFS_KEYMAP ?= "n" > +INITRAMFS_NET_DEVICE ?= "" > +INITRAMFS_NFSROOT ?= "auto" > +INITRAMFS_RUNSIZE ?= "10%" > +INITRAMFS_ROOT ?= "" > +INITRAMFS_MODULE_LIST ?= "" > +CREATE_NEW_INITRAMFS ?= "n" > +KERNEL_PACKAGE = "${@ ("linux-image-" + d.getVar("KERNEL_NAME", > True)) if d.getVar("KERNEL_NAME", True) else ""}" +DEBIAN_DEPENDS += > ", ${KERNEL_PACKAGE}" +TEMPLATE_FILES = "postinst.tmpl control.tmpl > postrm.tmpl" +TEMPLATE_VARS += "INITRAMFS_MODULES INITRAMFS_BUSYBOX > INITRAMFS_COMPRESS \ > + INITRAMFS_KEYMAP INITRAMFS_NET_DEVICE > INITRAMFS_NFSROOT \ > + INITRAMFS_RUNSIZE INITRAMFS_ROOT > INITRAMFS_MODULE_LIST CREATE_NEW_INITRAMFS DEBIAN_DEPENDS" + > + ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v3 1/3] meta/support: Generate a custom initramfs 2020-04-20 20:14 ` Henning Schild @ 2020-04-21 14:30 ` Gylstorff Quirin 0 siblings, 0 replies; 58+ messages in thread From: Gylstorff Quirin @ 2020-04-21 14:30 UTC (permalink / raw) To: Henning Schild; +Cc: isar-users On 4/20/20 10:14 PM, Henning Schild wrote: > Am Tue, 14 Apr 2020 14:24:47 +0200 > schrieb "[ext] Q. Gylstorff" <Quirin.Gylstorff@siemens.com>: > >> From: Quirin Gylstorff <quirin.gylstorff@siemens.com> >> >> This package sets the Parameters for mkinitramfs/update-intramfs >> before it regenerates the initrd.img of debian with a modified >> version. >> >> Use cases are the remove unnecessary kernel modules to reduce the >> size of the initrd by using the parameters: >> ``` >> INITRAMFS_MODULES = "list" >> INITRAMFS_MODULE_LIST += "ext4" >> ``` >> >> Set the boot root during the initrd generation by setting >> `INITRAMFS_ROOT`. >> >> see also man pages of mkinitramfs and initramfs.conf. >> >> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> >> --- >> .../initramfs-config/files/control.tmpl | 12 +++++++ >> .../initramfs-config/files/postinst.tmpl | 27 ++++++++++++++++ >> .../initramfs-config/files/postrm.tmpl | 19 +++++++++++ >> .../initramfs-config/initramfs-config_0.1.bb | 32 >> +++++++++++++++++++ 4 files changed, 90 insertions(+) >> create mode 100644 >> meta/recipes-support/initramfs-config/files/control.tmpl create mode >> 100644 meta/recipes-support/initramfs-config/files/postinst.tmpl >> create mode 100644 >> meta/recipes-support/initramfs-config/files/postrm.tmpl create mode >> 100644 meta/recipes-support/initramfs-config/initramfs-config_0.1.bb >> >> diff --git a/meta/recipes-support/initramfs-config/files/control.tmpl >> b/meta/recipes-support/initramfs-config/files/control.tmpl new file >> mode 100644 index 0000000..8739b4a >> --- /dev/null >> +++ b/meta/recipes-support/initramfs-config/files/control.tmpl >> @@ -0,0 +1,12 @@ >> +Source: initramfs-config >> +Section: misc >> +Priority: optional >> +Standards-Version: 3.9.6 >> +Maintainer: isar-users <isar-users@googlegroups.com> >> +Build-Depends: debhelper (>= 9) >> + >> + >> +Package: initramfs-config >> +Architecture: any >> +Depends: ${shlibs:Depends}, ${misc:Depends}, initramfs-tools-core, >> ${DEBIAN_DEPENDS} +Description: Configuration files for a custom >> initramfs \ No newline at end of file >> diff --git >> a/meta/recipes-support/initramfs-config/files/postinst.tmpl >> b/meta/recipes-support/initramfs-config/files/postinst.tmpl new file >> mode 100644 index 0000000..ca8c9c6 --- /dev/null >> +++ b/meta/recipes-support/initramfs-config/files/postinst.tmpl >> @@ -0,0 +1,27 @@ >> +#!/bin/bash > > can this be /bin/sh, and if not does that add a dep? Yes it can. Quirin > > Henning > >> +INITRAMFS_CONF=/etc/initramfs-tools/initramfs.conf >> +if [ -f ${INITRAMFS_CONF} ]; then >> + sed -i -E 's/(^MODULES=).*/\1${INITRAMFS_MODULES}/' >> ${INITRAMFS_CONF} >> + sed -i -E 's/(^BUSYBOX=).*/\1${INITRAMFS_BUSYBOX}/' >> ${INITRAMFS_CONF} >> + sed -i -E 's/(^COMPRESS=).*/\1${INITRAMFS_COMPRESS}/' >> ${INITRAMFS_CONF} >> + sed -i -E 's/(^KEYMAP=).*/\1${INITRAMFS_KEYMAP}/' >> ${INITRAMFS_CONF} >> + sed -i -E 's/(^DEVICE=).*/\1${INITRAMFS_NET_DEVICE}/' >> ${INITRAMFS_CONF} >> + sed -i -E 's/(^NFSROOT=).*/\1${INITRAMFS_NFSROOT}/' >> ${INITRAMFS_CONF} >> + sed -i -E 's/(^RUNSIZE=).*/\1${INITRAMFS_RUNSIZE}/' >> ${INITRAMFS_CONF} >> + if grep -Fxq "ROOT=" "${INITRAMFS_CONF}"; then >> + sed -i -E 's/(^ROOT=).*/\1${INITRAMFS_ROOT}/' >> ${INITRAMFS_CONF} >> + else >> + sed -i -E "\$aROOT=${INITRAMFS_ROOT}" ${INITRAMFS_CONF} >> + fi >> +fi >> + >> +MODULES_LIST_FILE=/etc/initramfs-tools/modules >> +if [ -f ${MODULES_LIST_FILE} ]; then >> + for modname in ${INITRAMFS_MODULE_LIST}; do >> + if ! grep -Fxq "$modname" "${MODULES_LIST_FILE}"; then >> + echo "$modname" >> "${MODULES_LIST_FILE}" >> + fi >> + done >> +fi >> + >> +update-initramfs -v -u >> diff --git a/meta/recipes-support/initramfs-config/files/postrm.tmpl >> b/meta/recipes-support/initramfs-config/files/postrm.tmpl new file >> mode 100644 index 0000000..55399d5 >> --- /dev/null >> +++ b/meta/recipes-support/initramfs-config/files/postrm.tmpl >> @@ -0,0 +1,19 @@ >> +#!/bin/bash >> +# back to the debian defaults >> +INITRAMFS_CONF=/etc/initramfs-tools/initramfs.conf >> +sed -i -E 's/(^MODULES=).*/\1most/' ${INITRAMFS_CONF} >> +sed -i -E 's/(^BUSYBOX=).*/\1auto/' ${INITRAMFS_CONF} >> +sed -i -E 's/(^COMPRESS=).*/\1gzip/' ${INITRAMFS_CONF} >> +sed -i -E 's/(^KEYMAP=).*/\1n/' ${INITRAMFS_CONF} >> +sed -i -E 's/(^DEVICE=).*/\1/' ${INITRAMFS_CONF} >> +sed -i -E 's/(^NFSROOT=).*/\1auto/' ${INITRAMFS_CONF} >> +sed -i -E 's/(^RUNSIZE=).*/\110%/' ${INITRAMFS_CONF} >> +sed -i -E 's/(^ROOT=).*//' ${INITRAMFS_CONF} >> + >> +# remove the added modules >> +MODULES_LIST_FILE=/etc/initramfs-tools/modules >> +for modname in ${INITRAMFS_MODULE_LIST}; do >> + sed -i -E 's/$modname//' >> +done >> + >> +update-initramfs -v -u >> diff --git >> a/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb >> b/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb new >> file mode 100644 index 0000000..34bb25b --- /dev/null >> +++ b/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb >> @@ -0,0 +1,32 @@ >> +# This software is a part of ISAR. >> +# Copyright (C) 2020 Siemens AG >> +# >> +# SPDX-License-Identifier: MIT >> +inherit dpkg-raw >> +inherit template >> +DESCRIPTION = "Recipe to set the initramfs configuration and >> generate a new ramfs" + >> + >> +SRC_URI = "file://postinst.tmpl \ >> + file://postrm.tmpl \ >> + file://control.tmpl \ >> + " >> + >> +INITRAMFS_MODULES ?= "most" >> +INITRAMFS_BUSYBOX ?= "auto" >> +INITRAMFS_COMPRESS ?= "gzip" >> +INITRAMFS_KEYMAP ?= "n" >> +INITRAMFS_NET_DEVICE ?= "" >> +INITRAMFS_NFSROOT ?= "auto" >> +INITRAMFS_RUNSIZE ?= "10%" >> +INITRAMFS_ROOT ?= "" >> +INITRAMFS_MODULE_LIST ?= "" >> +CREATE_NEW_INITRAMFS ?= "n" >> +KERNEL_PACKAGE = "${@ ("linux-image-" + d.getVar("KERNEL_NAME", >> True)) if d.getVar("KERNEL_NAME", True) else ""}" +DEBIAN_DEPENDS += >> ", ${KERNEL_PACKAGE}" +TEMPLATE_FILES = "postinst.tmpl control.tmpl >> postrm.tmpl" +TEMPLATE_VARS += "INITRAMFS_MODULES INITRAMFS_BUSYBOX >> INITRAMFS_COMPRESS \ >> + INITRAMFS_KEYMAP INITRAMFS_NET_DEVICE >> INITRAMFS_NFSROOT \ >> + INITRAMFS_RUNSIZE INITRAMFS_ROOT >> INITRAMFS_MODULE_LIST CREATE_NEW_INITRAMFS DEBIAN_DEPENDS" + >> + > -- Quirin Gylstorff Siemens AG Corporate Technology Research in Digitalization and Automation Smart Embedded Systems CT RDA IOT SES-DE Otto-Hahn-Ring 6 81739 Muenchen, Germany Mobile: +49 173 3746683 mailto:quirin.gylstorff@siemens.com www.siemens.com/ingenuityforlife Siemens Aktiengesellschaft: Chairman of the Supervisory Board: Jim Hagemann Snabe; Managing Board: Joe Kaeser, Chairman, President and Chief Executive Officer; Roland Busch, Lisa Davis, Klaus Helmrich, Cedrik Neike, Michael Sen, Ralf P. Thomas; Registered offices: Berlin and Munich, Germany; Commercial registries: Berlin Charlottenburg, HRB 12300, Munich, HRB 6684; WEEE-Reg.-No. DE 23691322 Important notice: This e-mail and any attachment thereof contain corporate proprietary information. If you have received it by mistake, please notify us immediately by reply e-mail and delete this e-mail and its attachments from your system. Thank you. ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v3 2/3] meta/classes: Generate ova image for vmware or virtualbox 2020-04-14 12:24 ` [PATCH v3 " Q. Gylstorff 2020-04-14 12:24 ` [PATCH v3 1/3] meta/support: Generate a custom initramfs Q. Gylstorff @ 2020-04-14 12:24 ` Q. Gylstorff 2020-04-14 12:24 ` [PATCH v3 3/3] meta/classes: add cpiogz-img Q. Gylstorff 2020-04-20 20:14 ` [PATCH v3 0/3] some images classes Henning Schild 3 siblings, 0 replies; 58+ messages in thread From: Q. Gylstorff @ 2020-04-14 12:24 UTC (permalink / raw) To: isar-users; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- meta-isar/conf/machine/virtualbox.conf | 16 ++ meta-isar/conf/machine/vmware.conf | 16 ++ .../multiconfig/virtualbox-ova-buster.conf | 8 + meta/classes/virtual-machine-image.bbclass | 265 ++++++++++++++++++ scripts/ci_build.sh | 3 +- 5 files changed, 307 insertions(+), 1 deletion(-) create mode 100644 meta-isar/conf/machine/virtualbox.conf create mode 100644 meta-isar/conf/machine/vmware.conf create mode 100644 meta-isar/conf/multiconfig/virtualbox-ova-buster.conf create mode 100644 meta/classes/virtual-machine-image.bbclass diff --git a/meta-isar/conf/machine/virtualbox.conf b/meta-isar/conf/machine/virtualbox.conf new file mode 100644 index 0000000..9b823ff --- /dev/null +++ b/meta-isar/conf/machine/virtualbox.conf @@ -0,0 +1,16 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +DISTRO_ARCH ?= "amd64" + +KERNEL_NAME ?= "amd64" +BOOTLOADER ?= "grub" + +WKS_FILE ?= "sdimage-efi" + +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" + +VMDK_SUBFORMAT = "monolithicSparse" +IMAGE_TYPE ?= "virtual-machine-image" diff --git a/meta-isar/conf/machine/vmware.conf b/meta-isar/conf/machine/vmware.conf new file mode 100644 index 0000000..b6b4cc7 --- /dev/null +++ b/meta-isar/conf/machine/vmware.conf @@ -0,0 +1,16 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +DISTRO_ARCH ?= "amd64" + +KERNEL_NAME ?= "amd64" +BOOTLOADER ?= "grub" + +WKS_FILE ?= "sdimage-efi" + +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" + +VMDK_SUBFORMAT = "streamOptimized" +IMAGE_TYPE ?= "virtual-machine-image" diff --git a/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf new file mode 100644 index 0000000..3042556 --- /dev/null +++ b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf @@ -0,0 +1,8 @@ +# +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + + +MACHINE = "virtualbox" +DISTRO = "debian-buster" diff --git a/meta/classes/virtual-machine-image.bbclass b/meta/classes/virtual-machine-image.bbclass new file mode 100644 index 0000000..aa45e47 --- /dev/null +++ b/meta/classes/virtual-machine-image.bbclass @@ -0,0 +1,265 @@ +# This software is a part of ISAR. +# Copyright (C) 2019-2020 Siemens AG +# +# This class allows to generate images for vmware and virtualbox +# + +inherit buildchroot +inherit wic-img +IMAGER_INSTALL += "qemu-utils gawk uuid-runtime" +OVA_NAME ?= "${IMAGE_FULLNAME}" +OVA_MEMORY ?= "8192" +OVA_NUMBER_OF_CPU ?= "4" +OVA_VRAM ?= "64" +OVA_FIRMWARE ?= "efi" +OVA_ACPI ?= "true" +OVA_3D_ACCEL ?= "false" +OVA_CLIPBOARD ?= "bidirectional" +SOURCE_IMAGE_FILE ?= "${IMAGE_FULLNAME}.wic.img" +OVA_SHA_ALG ?= "1" +VIRTUAL_MACHINE_IMAGE_TYPE ?= "vmdk" +VIRTUAL_MACHINE_IMAGE_FILE ?= "${IMAGE_FULLNAME}-disk1.${VIRTUAL_MACHINE_IMAGE_TYPE}" +VIRTUAL_MACHINE_DISK ?= "${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE}" +# for virtualbox this needs to be monolithicSparse +# for virtualbox this needs to be streamOptimized +#VMDK_SUBFORMAT ?= "streamOptimized" +VMDK_SUBFORMAT ?= "monolithicSparse" +def set_convert_options(d): + format = d.getVar("VIRTUAL_MACHINE_IMAGE_TYPE") + if format == "vmdk": + return "-o subformat=%s" % d.getVar("VMDK_SUBFORMAT") + else: + return "" + + +CONVERSION_OPTIONS = "${@set_convert_options(d)}" + +do_convert_wic() { + rm -f '${DEPLOY_DIR_IMAGE}/${VIRTUAL_MACHINE_IMAGE_FILE}' + image_do_mounts + bbnote "Creating ${VIRTUAL_MACHINE_IMAGE_FILE} from ${WIC_IMAGE_FILE}" + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \ + /usr/bin/qemu-img convert -f raw -O ${VIRTUAL_MACHINE_IMAGE_TYPE} ${CONVERSION_OPTIONS} \ + '${PP_DEPLOY}/${SOURCE_IMAGE_FILE}' '${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE}' +} + +addtask convert_wic before do_build after do_wic_image do_copy_boot_files do_install_imager_deps do_transform_template + +# Generate random MAC addresses just as VirtualBox does, the format is +# their assigned prefix for the first 3 bytes followed by 3 random bytes. +VBOX_MAC_PREFIX = "080027" +macgen() { + hexdump -n3 -e "\"${VBOX_MAC_PREFIX}%06X\n\"" /dev/urandom +} +get_disksize() { + image_do_mounts + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \ + qemu-img info -f vmdk "${VIRTUAL_MACHINE_DISK}" | gawk 'match($0, /^virtual size:.*\(([0-9]+) bytes\)/, a) {print a[1]}' +} + +do_create_ova() { + if [ ! ${VIRTUAL_MACHINE_IMAGE_TYPE} = "vmdk" ]; then + exit 0 + fi + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ova' + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ovf' + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.mf' + + export PRIMARY_MAC=$(macgen) + export SECONDARY_MAC=$(macgen) + export DISK_NAME=$(basename -s .vmdk ${VIRTUAL_MACHINE_DISK}) + export DISK_SIZE_BYTES=$(get_disksize) + export LAST_CHANGE=$(date -u "+%Y-%m-%dT%H:%M:%SZ") + export OVA_FIRMWARE_VIRTUALBOX=$(echo ${OVA_FIRMWARE} | tr '[a-z]' '[A-Z]') + image_do_mounts + sudo -Es chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} <<'EOSUDO' + export DISK_UUID=$(uuidgen) + export VM_UUID=$(uuidgen) + # create ovf + cat > "${PP_DEPLOY}/${OVA_NAME}.ovf" << EOF +<?xml version="1.0" encoding="UTF-8"?> +<Envelope ovf:version="1.0" xml:lang="en-US" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vbox="http://www.virtualbox.org/ovf/machine"> + <References> + <File ovf:href="${VIRTUAL_MACHINE_IMAGE_FILE}" ovf:id="file1"/> + </References> + <DiskSection> + <Info>List of the virtual disks used in the package</Info> + <Disk ovf:capacity="${DISK_SIZE_BYTES}" ovf:capacityAllocationUnits="byte" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#${VMDK_SUBFORMAT}" vbox:uuid="${DISK_UUID}"/> + </DiskSection> + <NetworkSection> + <Info>Logical networks used in the package</Info> + <Network ovf:name="NAT"> + <Description>Logical network used by this appliance.</Description> + </Network> + </NetworkSection> + <VirtualSystem ovf:id="${OVA_NAME}"> + <Info>A virtual machine</Info> + <OperatingSystemSection ovf:id="100"> + <Info>The kind of installed guest operating system</Info> + <Description>Debian_64</Description> + <vbox:OSType ovf:required="false">Debian_64</vbox:OSType> + </OperatingSystemSection> + <VirtualHardwareSection> + <Info>Virtual hardware requirements for a virtual machine</Info> + <System> + <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> + <vssd:InstanceID>0</vssd:InstanceID> + <vssd:VirtualSystemIdentifier>${OVA_NAME}</vssd:VirtualSystemIdentifier> + <vssd:VirtualSystemType>virtualbox-2.2</vssd:VirtualSystemType> + </System> + <Item> + <rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits> + <rasd:Caption>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:Caption> + <rasd:Description>Number of virtual CPUs</rasd:Description> + <rasd:ElementName>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:ElementName> + <rasd:InstanceID>1</rasd:InstanceID> + <rasd:ResourceType>3</rasd:ResourceType> + <rasd:VirtualQuantity>${OVA_NUMBER_OF_CPU}</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:AllocationUnits>MegaBytes</rasd:AllocationUnits> + <rasd:Caption>${OVA_MEMORY} MB of memory</rasd:Caption> + <rasd:Description>Memory Size</rasd:Description> + <rasd:ElementName>${OVA_MEMORY} MB of memory</rasd:ElementName> + <rasd:InstanceID>2</rasd:InstanceID> + <rasd:ResourceType>4</rasd:ResourceType> + <rasd:VirtualQuantity>${OVA_MEMORY}</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:Address>0</rasd:Address> + <rasd:Caption>ideController0</rasd:Caption> + <rasd:Description>IDE Controller</rasd:Description> + <rasd:ElementName>ideController0</rasd:ElementName> + <rasd:InstanceID>3</rasd:InstanceID> + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> + <rasd:ResourceType>5</rasd:ResourceType> + </Item> + <Item> + <rasd:Address>1</rasd:Address> + <rasd:Caption>ideController1</rasd:Caption> + <rasd:Description>IDE Controller</rasd:Description> + <rasd:ElementName>ideController1</rasd:ElementName> + <rasd:InstanceID>4</rasd:InstanceID> + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> + <rasd:ResourceType>5</rasd:ResourceType> + </Item> + <Item> + <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> + <rasd:Caption>Ethernet adapter on 'NAT'</rasd:Caption> + <rasd:Connection>NAT</rasd:Connection> + <rasd:ElementName>Ethernet adapter on 'NAT'</rasd:ElementName> + <rasd:InstanceID>5</rasd:InstanceID> + <rasd:ResourceSubType>E1000</rasd:ResourceSubType> + <rasd:ResourceType>10</rasd:ResourceType> + </Item> + <Item> + <rasd:AddressOnParent>0</rasd:AddressOnParent> + <rasd:Caption>disk1</rasd:Caption> + <rasd:Description>Disk Image</rasd:Description> + <rasd:ElementName>disk1</rasd:ElementName> + <rasd:HostResource>/disk/vmdisk1</rasd:HostResource> + <rasd:InstanceID>6</rasd:InstanceID> + <rasd:Parent>3</rasd:Parent> + <rasd:ResourceType>17</rasd:ResourceType> + </Item> + <vmw:Config ovf:required="false" vmw:key="firmware" vmw:value="${OVA_FIRMWARE}"/> + <vmw:Config ovf:required="false" vmw:key="tools.syncTimeWithHost" vmw:value="false"/> + <vmw:Config ovf:required="false" vmw:key="tools.afterPowerOn" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.afterResume" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.beforeGuestShutdown" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.beforeGuestStandby" vmw:value="true"/> + <vmw:ExtraConfig ovf:required="false" vmw:key="virtualHW.productCompatibility" vmw:value="hosted"/> + </VirtualHardwareSection> + <vbox:Machine ovf:required="false" version="1.12-linux" uuid="${VM_UUID}" name="${OVA_NAME}" OSType="Debian_64" snapshotFolder="Snapshots" lastStateChange="${LAST_CHANGE}"> + <ovf:Info>Complete VirtualBox machine configuration in VirtualBox format</ovf:Info> + <Hardware version="2"> + <CPU count="${OVA_NUMBER_OF_CPU}" hotplug="false"> + <HardwareVirtEx enabled="true" exclusive="true"/> + <HardwareVirtExNestedPaging enabled="true"/> + <HardwareVirtExVPID enabled="true"/> + <PAE enabled="true"/> + <HardwareVirtExLargePages enabled="false"/> + <HardwareVirtForce enabled="false"/> + </CPU> + <Memory RAMSize="${OVA_MEMORY}" PageFusion="false"/> + <Firmware type="${OVA_FIRMWARE_VIRTUALBOX}"/> + <HID Pointing="PS2Mouse" Keyboard="PS2Keyboard"/> + <HPET enabled="false"/> + <Chipset type="PIIX3"/> + <Boot> + <Order position="1" device="HardDisk"/> + <Order position="2" device="None"/> + <Order position="3" device="None"/> + <Order position="4" device="None"/> + </Boot> + <Display VRAMSize="${OVA_VRAM}" monitorCount="1" accelerate3D="${OVA_3D_ACCEL}" accelerate2DVideo="false"/> + <VideoRecording enabled="false" file="Test.webm" horzRes="640" vertRes="480"/> + <RemoteDisplay enabled="false" authType="Null"/> + <BIOS> + <ACPI enabled="${OVA_ACPI}"/> + <IOAPIC enabled="${OVA_ACPI}"/> + <Logo fadeIn="true" fadeOut="true" displayTime="0"/> + <BootMenu mode="MessageAndMenu"/> + <TimeOffset value="0"/> + <PXEDebug enabled="false"/> + </BIOS> + <USBController enabled="false" enabledEhci="false"/> + <Network> + <Adapter slot="0" enabled="true" MACAddress="${PRIMARY_MAC}" cable="true" speed="0" type="virtio"> + <DisabledModes/> + <NAT> + <DNS pass-domain="true" use-proxy="false" use-host-resolver="false"/> + <Alias logging="false" proxy-only="false" use-same-ports="false"/> + </NAT> + </Adapter> + </Network> + <UART> + <Port slot="0" enabled="false" IOBase="0x3f8" IRQ="4" hostMode="Disconnected"/> + <Port slot="1" enabled="false" IOBase="0x2f8" IRQ="3" hostMode="Disconnected"/> + </UART> + <LPT> + <Port slot="0" enabled="false" IOBase="0x378" IRQ="7"/> + <Port slot="1" enabled="false" IOBase="0x378" IRQ="7"/> + </LPT> + <AudioAdapter controller="AC97" driver="Pulse" enabled="false"/> + <RTC localOrUTC="local"/> + <SharedFolders/> + <Clipboard mode="Disabled"/> + <DragAndDrop mode="Disabled"/> + <IO> + <IoCache enabled="true" size="5"/> + <BandwidthGroups/> + </IO> + <HostPci> + <Devices/> + </HostPci> + <EmulatedUSB> + <CardReader enabled="false"/> + </EmulatedUSB> + <Guest memoryBalloonSize="0"/> + <GuestProperties/> + </Hardware> + <StorageControllers> + <StorageController name="IDE Controller" type="PIIX4" PortCount="2" useHostIOCache="true" Bootable="true"> + <AttachedDevice type="HardDisk" port="0" device="0"> + <Image uuid="{${DISK_UUID}}"/> + </AttachedDevice> + </StorageController> + </StorageControllers> + </vbox:Machine> + </VirtualSystem> +</Envelope> +EOF +tar -H ustar -cvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${OVA_NAME}.ovf +tar -H ustar -uvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${VIRTUAL_MACHINE_IMAGE_FILE} + +# virtual box needs here a manifest file vmware does not want to accept the format +if [ "${VMDK_SUBFORMAT}" = "monolithicSparse" ]; then + echo "SHA${OVA_SHA_ALG}(${VIRTUAL_MACHINE_IMAGE_FILE})= $(sha${OVA_SHA_ALG}sum ${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE} | cut -d' ' -f1)" >> ${PP_DEPLOY}/${OVA_NAME}.mf + echo "SHA${OVA_SHA_ALG}(${OVA_NAME}.ovf)= $(sha${OVA_SHA_ALG}sum ${PP_DEPLOY}/${OVA_NAME}.ovf | cut -d' ' -f1)" >> ${PP_DEPLOY}/${OVA_NAME}.mf + tar -H ustar -uvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${OVA_NAME}.mf +fi +EOSUDO +} + +addtask do_create_ova after do_convert_wic before do_deploy diff --git a/scripts/ci_build.sh b/scripts/ci_build.sh index 7cd5a2f..aa21a6f 100755 --- a/scripts/ci_build.sh +++ b/scripts/ci_build.sh @@ -35,7 +35,8 @@ TARGETS_SET="\ mc:qemumipsel-buster:isar-image-base \ mc:qemumipsel-bullseye:isar-image-base \ mc:nand-ubi-demo-buster:isar-image-ubi \ - mc:rpi-stretch:isar-image-base" + mc:rpi-stretch:isar-image-base \ + mc:virtualbox-ova-buster:isar-image-base" # qemu-user-static of <= buster too old to build that # mc:qemuarm64-buster:isar-image-base # mc:qemuarm64-bullseye:isar-image-base -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v3 3/3] meta/classes: add cpiogz-img 2020-04-14 12:24 ` [PATCH v3 " Q. Gylstorff 2020-04-14 12:24 ` [PATCH v3 1/3] meta/support: Generate a custom initramfs Q. Gylstorff 2020-04-14 12:24 ` [PATCH v3 2/3] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff @ 2020-04-14 12:24 ` Q. Gylstorff 2020-04-20 20:14 ` [PATCH v3 0/3] some images classes Henning Schild 3 siblings, 0 replies; 58+ messages in thread From: Q. Gylstorff @ 2020-04-14 12:24 UTC (permalink / raw) To: isar-users; +Cc: Quirin Gylstorff, Michael Adler From: Quirin Gylstorff <quirin.gylstorff@siemens.com> to create a initramfs like filesystem. Signed-off-by: Michael Adler <michael.adler@siemens.com> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- .../multiconfig/qemuamd64-buster-cpiogz.conf | 9 +++++++++ meta/classes/cpiogz-img.bbclass | 20 +++++++++++++++++++ scripts/ci_build.sh | 1 + 3 files changed, 30 insertions(+) create mode 100644 meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf create mode 100644 meta/classes/cpiogz-img.bbclass diff --git a/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf b/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf new file mode 100644 index 0000000..cadcdac --- /dev/null +++ b/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf @@ -0,0 +1,9 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +MACHINE ?= "qemuamd64" +DISTRO ?= "debian-buster" + +IMAGE_TYPE = "cpiogz-img" diff --git a/meta/classes/cpiogz-img.bbclass b/meta/classes/cpiogz-img.bbclass new file mode 100644 index 0000000..8efdcb4 --- /dev/null +++ b/meta/classes/cpiogz-img.bbclass @@ -0,0 +1,20 @@ +# This software is a part of ISAR. +# Copyright (C) 2020 Siemens AG +# +# SPDX-License-Identifier: MIT + +CPIOGZ_FNAME ?= "${IMAGE_FULLNAME}.cpio.gz" +CPIOGZ_IMAGE_FILE = "${DEPLOY_DIR_IMAGE}/${CPIOGZ_FNAME}" +IMAGER_INSTALL += "cpio" +CPIO_IMAGE_FORMAT ?= "newc" +do_cpiogz_image() { + sudo rm -f ${CPIOGZ_IMAGE_FILE} + image_do_mounts + sudo chroot ${BUILDCHROOT_DIR} \ + sh -c "cd ${PP_ROOTFS}; /usr/bin/find . | \ + /usr/bin/cpio -H ${CPIO_IMAGE_FORMAT} -o | /usr/bin/gzip -9 > \ + ${PP_DEPLOY}/${CPIOGZ_FNAME}" + sudo chown $(id -u):$(id -g) ${CPIOGZ_IMAGE_FILE} +} + +addtask cpiogz_image before do_image after do_image_tools diff --git a/scripts/ci_build.sh b/scripts/ci_build.sh index aa21a6f..bb4525a 100755 --- a/scripts/ci_build.sh +++ b/scripts/ci_build.sh @@ -30,6 +30,7 @@ TARGETS_SET="\ mc:qemuamd64-stretch:isar-image-base \ mc:qemuamd64-buster:isar-image-base \ mc:qemuamd64-buster-tgz:isar-image-base \ + mc:qemuamd64-buster-cpiogz:isar-image-base \ mc:qemuamd64-bullseye:isar-image-base \ mc:qemumipsel-stretch:isar-image-base \ mc:qemumipsel-buster:isar-image-base \ -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v3 0/3] some images classes 2020-04-14 12:24 ` [PATCH v3 " Q. Gylstorff ` (2 preceding siblings ...) 2020-04-14 12:24 ` [PATCH v3 3/3] meta/classes: add cpiogz-img Q. Gylstorff @ 2020-04-20 20:14 ` Henning Schild 2020-04-21 14:57 ` [PATCH v4 0/3] some images Q. Gylstorff 3 siblings, 1 reply; 58+ messages in thread From: Henning Schild @ 2020-04-20 20:14 UTC (permalink / raw) To: [ext] Q. Gylstorff; +Cc: isar-users Am Tue, 14 Apr 2020 14:24:46 +0200 schrieb "[ext] Q. Gylstorff" <Quirin.Gylstorff@siemens.com>: > From: Quirin Gylstorff <quirin.gylstorff@siemens.com> > > - Generate cpio images for rescue images > - generate custom initramfs > - generate ova images > > Changes V2: > - initramfs modification is now a package > - ova-wic-img was renamed to virtual-machine-image > - virtual-machine-image do_convert_wic supports now other image > formats > - Add tests > - cpiogz now use chown instead of userspec > > Changes V3: > - Add tests to build-ci > - add postrm to initramfs-config > - use sdimage-efi for virtualbox images - changed maintainer in p1 > > Quirin Gylstorff (3): > meta/support: Generate a custom initramfs > meta/classes: Generate ova image for vmware or virtualbox > meta/classes: add cpiogz-img > > meta-isar/conf/machine/virtualbox.conf | 16 ++ > meta-isar/conf/machine/vmware.conf | 16 ++ > .../multiconfig/qemuamd64-buster-cpiogz.conf | 9 + > .../multiconfig/virtualbox-ova-buster.conf | 8 + > meta/classes/cpiogz-img.bbclass | 20 ++ > meta/classes/virtual-machine-image.bbclass | 265 > ++++++++++++++++++ .../initramfs-config/files/control.tmpl | > 12 + .../initramfs-config/files/postinst.tmpl | 27 ++ > .../initramfs-config/files/postrm.tmpl | 19 ++ > .../initramfs-config/initramfs-config_0.1.bb | 31 ++ > scripts/ci_build.sh | 4 +- > 11 files changed, 426 insertions(+), 1 deletion(-) > create mode 100644 meta-isar/conf/machine/virtualbox.conf > create mode 100644 meta-isar/conf/machine/vmware.conf > create mode 100644 > meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf create mode > 100644 meta-isar/conf/multiconfig/virtualbox-ova-buster.conf create > mode 100644 meta/classes/cpiogz-img.bbclass create mode 100644 > meta/classes/virtual-machine-image.bbclass create mode 100644 > meta/recipes-support/initramfs-config/files/control.tmpl create mode > 100644 meta/recipes-support/initramfs-config/files/postinst.tmpl > create mode 100644 > meta/recipes-support/initramfs-config/files/postrm.tmpl create mode > 100644 meta/recipes-support/initramfs-config/initramfs-config_0.1.bb > ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v4 0/3] some images 2020-04-20 20:14 ` [PATCH v3 0/3] some images classes Henning Schild @ 2020-04-21 14:57 ` Q. Gylstorff 2020-04-21 14:57 ` [PATCH v4 1/3] meta/support: Generate a custom initramfs Q. Gylstorff ` (2 more replies) 0 siblings, 3 replies; 58+ messages in thread From: Q. Gylstorff @ 2020-04-21 14:57 UTC (permalink / raw) To: isar-users, henning.schild; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> - Generate cpio images for rescue images - generate custom initramfs - generate ova images Changes V2: - initramfs modification is now a package - ova-wic-img was renamed to virtual-machine-image - virtual-machine-image do_convert_wic supports now other image formats - Add tests - cpiogz now use chown instead of userspec Changes V3: - Add tests to build-ci - add postrm to initramfs-config - use sdimage-efi for virtualbox images - changed maintainer in p1 Changes V4: - use templates from debhelper for postinst and postrm scripts Quirin Gylstorff (3): meta/support: Generate a custom initramfs meta/classes: Generate ova image for vmware or virtualbox meta/classes: add cpiogz-img meta-isar/conf/machine/virtualbox.conf | 16 ++ meta-isar/conf/machine/vmware.conf | 16 ++ .../multiconfig/qemuamd64-buster-cpiogz.conf | 9 + .../multiconfig/virtualbox-ova-buster.conf | 8 + meta/classes/cpiogz-img.bbclass | 20 ++ meta/classes/virtual-machine-image.bbclass | 265 ++++++++++++++++++ .../initramfs-config/files/control.tmpl | 12 + .../initramfs-config/files/postinst.tmpl | 50 ++++ .../initramfs-config/files/postrm.tmpl | 41 +++ .../initramfs-config/initramfs-config_0.1.bb | 32 +++ scripts/ci_build.sh | 4 +- 11 files changed, 472 insertions(+), 1 deletion(-) create mode 100644 meta-isar/conf/machine/virtualbox.conf create mode 100644 meta-isar/conf/machine/vmware.conf create mode 100644 meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf create mode 100644 meta-isar/conf/multiconfig/virtualbox-ova-buster.conf create mode 100644 meta/classes/cpiogz-img.bbclass create mode 100644 meta/classes/virtual-machine-image.bbclass create mode 100644 meta/recipes-support/initramfs-config/files/control.tmpl create mode 100644 meta/recipes-support/initramfs-config/files/postinst.tmpl create mode 100644 meta/recipes-support/initramfs-config/files/postrm.tmpl create mode 100644 meta/recipes-support/initramfs-config/initramfs-config_0.1.bb -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v4 1/3] meta/support: Generate a custom initramfs 2020-04-21 14:57 ` [PATCH v4 0/3] some images Q. Gylstorff @ 2020-04-21 14:57 ` Q. Gylstorff 2020-04-21 14:57 ` [PATCH v4 2/3] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff 2020-04-21 14:57 ` [PATCH v4 " Q. Gylstorff 2 siblings, 0 replies; 58+ messages in thread From: Q. Gylstorff @ 2020-04-21 14:57 UTC (permalink / raw) To: isar-users, henning.schild; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> This package sets the Parameters for mkinitramfs/update-intramfs before it regenerates the initrd.img of debian with a modified version. Use cases are the remove unnecessary kernel modules to reduce the size of the initrd by using the parameters: ``` INITRAMFS_MODULES = "list" INITRAMFS_MODULE_LIST += "ext4" ``` Set the boot root during the initrd generation by setting `INITRAMFS_ROOT`. see also man pages of mkinitramfs and initramfs.conf. Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- .../initramfs-config/files/control.tmpl | 12 +++++ .../initramfs-config/files/postinst.tmpl | 50 +++++++++++++++++++ .../initramfs-config/files/postrm.tmpl | 41 +++++++++++++++ .../initramfs-config/initramfs-config_0.1.bb | 32 ++++++++++++ 4 files changed, 135 insertions(+) create mode 100644 meta/recipes-support/initramfs-config/files/control.tmpl create mode 100644 meta/recipes-support/initramfs-config/files/postinst.tmpl create mode 100644 meta/recipes-support/initramfs-config/files/postrm.tmpl create mode 100644 meta/recipes-support/initramfs-config/initramfs-config_0.1.bb diff --git a/meta/recipes-support/initramfs-config/files/control.tmpl b/meta/recipes-support/initramfs-config/files/control.tmpl new file mode 100644 index 0000000..8739b4a --- /dev/null +++ b/meta/recipes-support/initramfs-config/files/control.tmpl @@ -0,0 +1,12 @@ +Source: initramfs-config +Section: misc +Priority: optional +Standards-Version: 3.9.6 +Maintainer: isar-users <isar-users@googlegroups.com> +Build-Depends: debhelper (>= 9) + + +Package: initramfs-config +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, initramfs-tools-core, ${DEBIAN_DEPENDS} +Description: Configuration files for a custom initramfs \ No newline at end of file diff --git a/meta/recipes-support/initramfs-config/files/postinst.tmpl b/meta/recipes-support/initramfs-config/files/postinst.tmpl new file mode 100644 index 0000000..e523906 --- /dev/null +++ b/meta/recipes-support/initramfs-config/files/postinst.tmpl @@ -0,0 +1,50 @@ +#!/bin/sh +# postinst script for initramfs-config +# +# see: dh_installdeb(1) + +set -e + +case "$1" in + configure) + INITRAMFS_CONF=/etc/initramfs-tools/initramfs.conf + if [ -f ${INITRAMFS_CONF} ]; then + sed -i -E 's/(^MODULES=).*/\1${INITRAMFS_MODULES}/' ${INITRAMFS_CONF} + sed -i -E 's/(^BUSYBOX=).*/\1${INITRAMFS_BUSYBOX}/' ${INITRAMFS_CONF} + sed -i -E 's/(^COMPRESS=).*/\1${INITRAMFS_COMPRESS}/' ${INITRAMFS_CONF} + sed -i -E 's/(^KEYMAP=).*/\1${INITRAMFS_KEYMAP}/' ${INITRAMFS_CONF} + sed -i -E 's/(^DEVICE=).*/\1${INITRAMFS_NET_DEVICE}/' ${INITRAMFS_CONF} + sed -i -E 's/(^NFSROOT=).*/\1${INITRAMFS_NFSROOT}/' ${INITRAMFS_CONF} + sed -i -E 's/(^RUNSIZE=).*/\1${INITRAMFS_RUNSIZE}/' ${INITRAMFS_CONF} + if grep -Fxq "ROOT=" "${INITRAMFS_CONF}"; then + sed -i -E 's/(^ROOT=).*/\1${INITRAMFS_ROOT}/' ${INITRAMFS_CONF} + else + sed -i -E "\$aROOT=${INITRAMFS_ROOT}" ${INITRAMFS_CONF} + fi + fi + + MODULES_LIST_FILE=/etc/initramfs-tools/modules + if [ -f ${MODULES_LIST_FILE} ]; then + for modname in ${INITRAMFS_MODULE_LIST}; do + if ! grep -Fxq "$modname" "${MODULES_LIST_FILE}"; then + echo "$modname" >> "${MODULES_LIST_FILE}" + fi + done + fi + + update-initramfs -v -u + + ;; + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. +#DEBHELPER# + +exit 0 diff --git a/meta/recipes-support/initramfs-config/files/postrm.tmpl b/meta/recipes-support/initramfs-config/files/postrm.tmpl new file mode 100644 index 0000000..115d9b6 --- /dev/null +++ b/meta/recipes-support/initramfs-config/files/postrm.tmpl @@ -0,0 +1,41 @@ +#!/bin/sh +# postrm script for initramfs-config +# +# see: dh_installdeb(1) + +set -e + +case "$1" in + purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + # back to the debian defaults + INITRAMFS_CONF=/etc/initramfs-tools/initramfs.conf + sed -i -E 's/(^MODULES=).*/\1most/' ${INITRAMFS_CONF} + sed -i -E 's/(^BUSYBOX=).*/\1auto/' ${INITRAMFS_CONF} + sed -i -E 's/(^COMPRESS=).*/\1gzip/' ${INITRAMFS_CONF} + sed -i -E 's/(^KEYMAP=).*/\1n/' ${INITRAMFS_CONF} + sed -i -E 's/(^DEVICE=).*/\1/' ${INITRAMFS_CONF} + sed -i -E 's/(^NFSROOT=).*/\1auto/' ${INITRAMFS_CONF} + sed -i -E 's/(^RUNSIZE=).*/\110%/' ${INITRAMFS_CONF} + sed -i -E 's/(^ROOT=).*//' ${INITRAMFS_CONF} + + # remove the added modules + MODULES_LIST_FILE=/etc/initramfs-tools/modules + for modname in ${INITRAMFS_MODULE_LIST}; do + sed -i -E 's/$modname//' + done + + update-initramfs -v -u + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb b/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb new file mode 100644 index 0000000..34bb25b --- /dev/null +++ b/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb @@ -0,0 +1,32 @@ +# This software is a part of ISAR. +# Copyright (C) 2020 Siemens AG +# +# SPDX-License-Identifier: MIT +inherit dpkg-raw +inherit template +DESCRIPTION = "Recipe to set the initramfs configuration and generate a new ramfs" + + +SRC_URI = "file://postinst.tmpl \ + file://postrm.tmpl \ + file://control.tmpl \ + " + +INITRAMFS_MODULES ?= "most" +INITRAMFS_BUSYBOX ?= "auto" +INITRAMFS_COMPRESS ?= "gzip" +INITRAMFS_KEYMAP ?= "n" +INITRAMFS_NET_DEVICE ?= "" +INITRAMFS_NFSROOT ?= "auto" +INITRAMFS_RUNSIZE ?= "10%" +INITRAMFS_ROOT ?= "" +INITRAMFS_MODULE_LIST ?= "" +CREATE_NEW_INITRAMFS ?= "n" +KERNEL_PACKAGE = "${@ ("linux-image-" + d.getVar("KERNEL_NAME", True)) if d.getVar("KERNEL_NAME", True) else ""}" +DEBIAN_DEPENDS += ", ${KERNEL_PACKAGE}" +TEMPLATE_FILES = "postinst.tmpl control.tmpl postrm.tmpl" +TEMPLATE_VARS += "INITRAMFS_MODULES INITRAMFS_BUSYBOX INITRAMFS_COMPRESS \ + INITRAMFS_KEYMAP INITRAMFS_NET_DEVICE INITRAMFS_NFSROOT \ + INITRAMFS_RUNSIZE INITRAMFS_ROOT INITRAMFS_MODULE_LIST CREATE_NEW_INITRAMFS DEBIAN_DEPENDS" + + -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v4 2/3] meta/classes: Generate ova image for vmware or virtualbox 2020-04-21 14:57 ` [PATCH v4 0/3] some images Q. Gylstorff 2020-04-21 14:57 ` [PATCH v4 1/3] meta/support: Generate a custom initramfs Q. Gylstorff @ 2020-04-21 14:57 ` Q. Gylstorff 2020-04-21 15:17 ` Jan Kiszka 2020-04-21 14:57 ` [PATCH v4 " Q. Gylstorff 2 siblings, 1 reply; 58+ messages in thread From: Q. Gylstorff @ 2020-04-21 14:57 UTC (permalink / raw) To: isar-users, henning.schild; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- meta-isar/conf/machine/virtualbox.conf | 16 ++ meta-isar/conf/machine/vmware.conf | 16 ++ .../multiconfig/virtualbox-ova-buster.conf | 8 + meta/classes/virtual-machine-image.bbclass | 265 ++++++++++++++++++ scripts/ci_build.sh | 3 +- 5 files changed, 307 insertions(+), 1 deletion(-) create mode 100644 meta-isar/conf/machine/virtualbox.conf create mode 100644 meta-isar/conf/machine/vmware.conf create mode 100644 meta-isar/conf/multiconfig/virtualbox-ova-buster.conf create mode 100644 meta/classes/virtual-machine-image.bbclass diff --git a/meta-isar/conf/machine/virtualbox.conf b/meta-isar/conf/machine/virtualbox.conf new file mode 100644 index 0000000..9b823ff --- /dev/null +++ b/meta-isar/conf/machine/virtualbox.conf @@ -0,0 +1,16 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +DISTRO_ARCH ?= "amd64" + +KERNEL_NAME ?= "amd64" +BOOTLOADER ?= "grub" + +WKS_FILE ?= "sdimage-efi" + +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" + +VMDK_SUBFORMAT = "monolithicSparse" +IMAGE_TYPE ?= "virtual-machine-image" diff --git a/meta-isar/conf/machine/vmware.conf b/meta-isar/conf/machine/vmware.conf new file mode 100644 index 0000000..b6b4cc7 --- /dev/null +++ b/meta-isar/conf/machine/vmware.conf @@ -0,0 +1,16 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +DISTRO_ARCH ?= "amd64" + +KERNEL_NAME ?= "amd64" +BOOTLOADER ?= "grub" + +WKS_FILE ?= "sdimage-efi" + +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" + +VMDK_SUBFORMAT = "streamOptimized" +IMAGE_TYPE ?= "virtual-machine-image" diff --git a/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf new file mode 100644 index 0000000..3042556 --- /dev/null +++ b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf @@ -0,0 +1,8 @@ +# +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + + +MACHINE = "virtualbox" +DISTRO = "debian-buster" diff --git a/meta/classes/virtual-machine-image.bbclass b/meta/classes/virtual-machine-image.bbclass new file mode 100644 index 0000000..aa45e47 --- /dev/null +++ b/meta/classes/virtual-machine-image.bbclass @@ -0,0 +1,265 @@ +# This software is a part of ISAR. +# Copyright (C) 2019-2020 Siemens AG +# +# This class allows to generate images for vmware and virtualbox +# + +inherit buildchroot +inherit wic-img +IMAGER_INSTALL += "qemu-utils gawk uuid-runtime" +OVA_NAME ?= "${IMAGE_FULLNAME}" +OVA_MEMORY ?= "8192" +OVA_NUMBER_OF_CPU ?= "4" +OVA_VRAM ?= "64" +OVA_FIRMWARE ?= "efi" +OVA_ACPI ?= "true" +OVA_3D_ACCEL ?= "false" +OVA_CLIPBOARD ?= "bidirectional" +SOURCE_IMAGE_FILE ?= "${IMAGE_FULLNAME}.wic.img" +OVA_SHA_ALG ?= "1" +VIRTUAL_MACHINE_IMAGE_TYPE ?= "vmdk" +VIRTUAL_MACHINE_IMAGE_FILE ?= "${IMAGE_FULLNAME}-disk1.${VIRTUAL_MACHINE_IMAGE_TYPE}" +VIRTUAL_MACHINE_DISK ?= "${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE}" +# for virtualbox this needs to be monolithicSparse +# for virtualbox this needs to be streamOptimized +#VMDK_SUBFORMAT ?= "streamOptimized" +VMDK_SUBFORMAT ?= "monolithicSparse" +def set_convert_options(d): + format = d.getVar("VIRTUAL_MACHINE_IMAGE_TYPE") + if format == "vmdk": + return "-o subformat=%s" % d.getVar("VMDK_SUBFORMAT") + else: + return "" + + +CONVERSION_OPTIONS = "${@set_convert_options(d)}" + +do_convert_wic() { + rm -f '${DEPLOY_DIR_IMAGE}/${VIRTUAL_MACHINE_IMAGE_FILE}' + image_do_mounts + bbnote "Creating ${VIRTUAL_MACHINE_IMAGE_FILE} from ${WIC_IMAGE_FILE}" + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \ + /usr/bin/qemu-img convert -f raw -O ${VIRTUAL_MACHINE_IMAGE_TYPE} ${CONVERSION_OPTIONS} \ + '${PP_DEPLOY}/${SOURCE_IMAGE_FILE}' '${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE}' +} + +addtask convert_wic before do_build after do_wic_image do_copy_boot_files do_install_imager_deps do_transform_template + +# Generate random MAC addresses just as VirtualBox does, the format is +# their assigned prefix for the first 3 bytes followed by 3 random bytes. +VBOX_MAC_PREFIX = "080027" +macgen() { + hexdump -n3 -e "\"${VBOX_MAC_PREFIX}%06X\n\"" /dev/urandom +} +get_disksize() { + image_do_mounts + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \ + qemu-img info -f vmdk "${VIRTUAL_MACHINE_DISK}" | gawk 'match($0, /^virtual size:.*\(([0-9]+) bytes\)/, a) {print a[1]}' +} + +do_create_ova() { + if [ ! ${VIRTUAL_MACHINE_IMAGE_TYPE} = "vmdk" ]; then + exit 0 + fi + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ova' + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ovf' + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.mf' + + export PRIMARY_MAC=$(macgen) + export SECONDARY_MAC=$(macgen) + export DISK_NAME=$(basename -s .vmdk ${VIRTUAL_MACHINE_DISK}) + export DISK_SIZE_BYTES=$(get_disksize) + export LAST_CHANGE=$(date -u "+%Y-%m-%dT%H:%M:%SZ") + export OVA_FIRMWARE_VIRTUALBOX=$(echo ${OVA_FIRMWARE} | tr '[a-z]' '[A-Z]') + image_do_mounts + sudo -Es chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} <<'EOSUDO' + export DISK_UUID=$(uuidgen) + export VM_UUID=$(uuidgen) + # create ovf + cat > "${PP_DEPLOY}/${OVA_NAME}.ovf" << EOF +<?xml version="1.0" encoding="UTF-8"?> +<Envelope ovf:version="1.0" xml:lang="en-US" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vbox="http://www.virtualbox.org/ovf/machine"> + <References> + <File ovf:href="${VIRTUAL_MACHINE_IMAGE_FILE}" ovf:id="file1"/> + </References> + <DiskSection> + <Info>List of the virtual disks used in the package</Info> + <Disk ovf:capacity="${DISK_SIZE_BYTES}" ovf:capacityAllocationUnits="byte" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#${VMDK_SUBFORMAT}" vbox:uuid="${DISK_UUID}"/> + </DiskSection> + <NetworkSection> + <Info>Logical networks used in the package</Info> + <Network ovf:name="NAT"> + <Description>Logical network used by this appliance.</Description> + </Network> + </NetworkSection> + <VirtualSystem ovf:id="${OVA_NAME}"> + <Info>A virtual machine</Info> + <OperatingSystemSection ovf:id="100"> + <Info>The kind of installed guest operating system</Info> + <Description>Debian_64</Description> + <vbox:OSType ovf:required="false">Debian_64</vbox:OSType> + </OperatingSystemSection> + <VirtualHardwareSection> + <Info>Virtual hardware requirements for a virtual machine</Info> + <System> + <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> + <vssd:InstanceID>0</vssd:InstanceID> + <vssd:VirtualSystemIdentifier>${OVA_NAME}</vssd:VirtualSystemIdentifier> + <vssd:VirtualSystemType>virtualbox-2.2</vssd:VirtualSystemType> + </System> + <Item> + <rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits> + <rasd:Caption>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:Caption> + <rasd:Description>Number of virtual CPUs</rasd:Description> + <rasd:ElementName>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:ElementName> + <rasd:InstanceID>1</rasd:InstanceID> + <rasd:ResourceType>3</rasd:ResourceType> + <rasd:VirtualQuantity>${OVA_NUMBER_OF_CPU}</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:AllocationUnits>MegaBytes</rasd:AllocationUnits> + <rasd:Caption>${OVA_MEMORY} MB of memory</rasd:Caption> + <rasd:Description>Memory Size</rasd:Description> + <rasd:ElementName>${OVA_MEMORY} MB of memory</rasd:ElementName> + <rasd:InstanceID>2</rasd:InstanceID> + <rasd:ResourceType>4</rasd:ResourceType> + <rasd:VirtualQuantity>${OVA_MEMORY}</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:Address>0</rasd:Address> + <rasd:Caption>ideController0</rasd:Caption> + <rasd:Description>IDE Controller</rasd:Description> + <rasd:ElementName>ideController0</rasd:ElementName> + <rasd:InstanceID>3</rasd:InstanceID> + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> + <rasd:ResourceType>5</rasd:ResourceType> + </Item> + <Item> + <rasd:Address>1</rasd:Address> + <rasd:Caption>ideController1</rasd:Caption> + <rasd:Description>IDE Controller</rasd:Description> + <rasd:ElementName>ideController1</rasd:ElementName> + <rasd:InstanceID>4</rasd:InstanceID> + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> + <rasd:ResourceType>5</rasd:ResourceType> + </Item> + <Item> + <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> + <rasd:Caption>Ethernet adapter on 'NAT'</rasd:Caption> + <rasd:Connection>NAT</rasd:Connection> + <rasd:ElementName>Ethernet adapter on 'NAT'</rasd:ElementName> + <rasd:InstanceID>5</rasd:InstanceID> + <rasd:ResourceSubType>E1000</rasd:ResourceSubType> + <rasd:ResourceType>10</rasd:ResourceType> + </Item> + <Item> + <rasd:AddressOnParent>0</rasd:AddressOnParent> + <rasd:Caption>disk1</rasd:Caption> + <rasd:Description>Disk Image</rasd:Description> + <rasd:ElementName>disk1</rasd:ElementName> + <rasd:HostResource>/disk/vmdisk1</rasd:HostResource> + <rasd:InstanceID>6</rasd:InstanceID> + <rasd:Parent>3</rasd:Parent> + <rasd:ResourceType>17</rasd:ResourceType> + </Item> + <vmw:Config ovf:required="false" vmw:key="firmware" vmw:value="${OVA_FIRMWARE}"/> + <vmw:Config ovf:required="false" vmw:key="tools.syncTimeWithHost" vmw:value="false"/> + <vmw:Config ovf:required="false" vmw:key="tools.afterPowerOn" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.afterResume" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.beforeGuestShutdown" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.beforeGuestStandby" vmw:value="true"/> + <vmw:ExtraConfig ovf:required="false" vmw:key="virtualHW.productCompatibility" vmw:value="hosted"/> + </VirtualHardwareSection> + <vbox:Machine ovf:required="false" version="1.12-linux" uuid="${VM_UUID}" name="${OVA_NAME}" OSType="Debian_64" snapshotFolder="Snapshots" lastStateChange="${LAST_CHANGE}"> + <ovf:Info>Complete VirtualBox machine configuration in VirtualBox format</ovf:Info> + <Hardware version="2"> + <CPU count="${OVA_NUMBER_OF_CPU}" hotplug="false"> + <HardwareVirtEx enabled="true" exclusive="true"/> + <HardwareVirtExNestedPaging enabled="true"/> + <HardwareVirtExVPID enabled="true"/> + <PAE enabled="true"/> + <HardwareVirtExLargePages enabled="false"/> + <HardwareVirtForce enabled="false"/> + </CPU> + <Memory RAMSize="${OVA_MEMORY}" PageFusion="false"/> + <Firmware type="${OVA_FIRMWARE_VIRTUALBOX}"/> + <HID Pointing="PS2Mouse" Keyboard="PS2Keyboard"/> + <HPET enabled="false"/> + <Chipset type="PIIX3"/> + <Boot> + <Order position="1" device="HardDisk"/> + <Order position="2" device="None"/> + <Order position="3" device="None"/> + <Order position="4" device="None"/> + </Boot> + <Display VRAMSize="${OVA_VRAM}" monitorCount="1" accelerate3D="${OVA_3D_ACCEL}" accelerate2DVideo="false"/> + <VideoRecording enabled="false" file="Test.webm" horzRes="640" vertRes="480"/> + <RemoteDisplay enabled="false" authType="Null"/> + <BIOS> + <ACPI enabled="${OVA_ACPI}"/> + <IOAPIC enabled="${OVA_ACPI}"/> + <Logo fadeIn="true" fadeOut="true" displayTime="0"/> + <BootMenu mode="MessageAndMenu"/> + <TimeOffset value="0"/> + <PXEDebug enabled="false"/> + </BIOS> + <USBController enabled="false" enabledEhci="false"/> + <Network> + <Adapter slot="0" enabled="true" MACAddress="${PRIMARY_MAC}" cable="true" speed="0" type="virtio"> + <DisabledModes/> + <NAT> + <DNS pass-domain="true" use-proxy="false" use-host-resolver="false"/> + <Alias logging="false" proxy-only="false" use-same-ports="false"/> + </NAT> + </Adapter> + </Network> + <UART> + <Port slot="0" enabled="false" IOBase="0x3f8" IRQ="4" hostMode="Disconnected"/> + <Port slot="1" enabled="false" IOBase="0x2f8" IRQ="3" hostMode="Disconnected"/> + </UART> + <LPT> + <Port slot="0" enabled="false" IOBase="0x378" IRQ="7"/> + <Port slot="1" enabled="false" IOBase="0x378" IRQ="7"/> + </LPT> + <AudioAdapter controller="AC97" driver="Pulse" enabled="false"/> + <RTC localOrUTC="local"/> + <SharedFolders/> + <Clipboard mode="Disabled"/> + <DragAndDrop mode="Disabled"/> + <IO> + <IoCache enabled="true" size="5"/> + <BandwidthGroups/> + </IO> + <HostPci> + <Devices/> + </HostPci> + <EmulatedUSB> + <CardReader enabled="false"/> + </EmulatedUSB> + <Guest memoryBalloonSize="0"/> + <GuestProperties/> + </Hardware> + <StorageControllers> + <StorageController name="IDE Controller" type="PIIX4" PortCount="2" useHostIOCache="true" Bootable="true"> + <AttachedDevice type="HardDisk" port="0" device="0"> + <Image uuid="{${DISK_UUID}}"/> + </AttachedDevice> + </StorageController> + </StorageControllers> + </vbox:Machine> + </VirtualSystem> +</Envelope> +EOF +tar -H ustar -cvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${OVA_NAME}.ovf +tar -H ustar -uvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${VIRTUAL_MACHINE_IMAGE_FILE} + +# virtual box needs here a manifest file vmware does not want to accept the format +if [ "${VMDK_SUBFORMAT}" = "monolithicSparse" ]; then + echo "SHA${OVA_SHA_ALG}(${VIRTUAL_MACHINE_IMAGE_FILE})= $(sha${OVA_SHA_ALG}sum ${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE} | cut -d' ' -f1)" >> ${PP_DEPLOY}/${OVA_NAME}.mf + echo "SHA${OVA_SHA_ALG}(${OVA_NAME}.ovf)= $(sha${OVA_SHA_ALG}sum ${PP_DEPLOY}/${OVA_NAME}.ovf | cut -d' ' -f1)" >> ${PP_DEPLOY}/${OVA_NAME}.mf + tar -H ustar -uvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${OVA_NAME}.mf +fi +EOSUDO +} + +addtask do_create_ova after do_convert_wic before do_deploy diff --git a/scripts/ci_build.sh b/scripts/ci_build.sh index 7cd5a2f..aa21a6f 100755 --- a/scripts/ci_build.sh +++ b/scripts/ci_build.sh @@ -35,7 +35,8 @@ TARGETS_SET="\ mc:qemumipsel-buster:isar-image-base \ mc:qemumipsel-bullseye:isar-image-base \ mc:nand-ubi-demo-buster:isar-image-ubi \ - mc:rpi-stretch:isar-image-base" + mc:rpi-stretch:isar-image-base \ + mc:virtualbox-ova-buster:isar-image-base" # qemu-user-static of <= buster too old to build that # mc:qemuarm64-buster:isar-image-base # mc:qemuarm64-bullseye:isar-image-base -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v4 2/3] meta/classes: Generate ova image for vmware or virtualbox 2020-04-21 14:57 ` [PATCH v4 2/3] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff @ 2020-04-21 15:17 ` Jan Kiszka 2020-04-23 9:46 ` [PATCH v5 0/3] some images Q. Gylstorff 0 siblings, 1 reply; 58+ messages in thread From: Jan Kiszka @ 2020-04-21 15:17 UTC (permalink / raw) To: [ext] Q. Gylstorff, isar-users, henning.schild On 21.04.20 16:57, [ext] Q. Gylstorff wrote: > From: Quirin Gylstorff <quirin.gylstorff@siemens.com> > > Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> > --- > meta-isar/conf/machine/virtualbox.conf | 16 ++ > meta-isar/conf/machine/vmware.conf | 16 ++ > .../multiconfig/virtualbox-ova-buster.conf | 8 + > meta/classes/virtual-machine-image.bbclass | 265 ++++++++++++++++++ > scripts/ci_build.sh | 3 +- > 5 files changed, 307 insertions(+), 1 deletion(-) > create mode 100644 meta-isar/conf/machine/virtualbox.conf > create mode 100644 meta-isar/conf/machine/vmware.conf > create mode 100644 meta-isar/conf/multiconfig/virtualbox-ova-buster.conf > create mode 100644 meta/classes/virtual-machine-image.bbclass > > diff --git a/meta-isar/conf/machine/virtualbox.conf b/meta-isar/conf/machine/virtualbox.conf > new file mode 100644 > index 0000000..9b823ff > --- /dev/null > +++ b/meta-isar/conf/machine/virtualbox.conf > @@ -0,0 +1,16 @@ > +# This software is a part of ISAR. > +# Copyright (c) Siemens AG, 2020 > +# > +# SPDX-License-Identifier: MIT > + > +DISTRO_ARCH ?= "amd64" > + > +KERNEL_NAME ?= "amd64" > +BOOTLOADER ?= "grub" > + > +WKS_FILE ?= "sdimage-efi" > + > +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" > + > +VMDK_SUBFORMAT = "monolithicSparse" > +IMAGE_TYPE ?= "virtual-machine-image" > diff --git a/meta-isar/conf/machine/vmware.conf b/meta-isar/conf/machine/vmware.conf > new file mode 100644 > index 0000000..b6b4cc7 > --- /dev/null > +++ b/meta-isar/conf/machine/vmware.conf > @@ -0,0 +1,16 @@ > +# This software is a part of ISAR. > +# Copyright (c) Siemens AG, 2020 > +# > +# SPDX-License-Identifier: MIT > + > +DISTRO_ARCH ?= "amd64" > + > +KERNEL_NAME ?= "amd64" > +BOOTLOADER ?= "grub" > + > +WKS_FILE ?= "sdimage-efi" > + > +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" > + > +VMDK_SUBFORMAT = "streamOptimized" > +IMAGE_TYPE ?= "virtual-machine-image" > diff --git a/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf > new file mode 100644 > index 0000000..3042556 > --- /dev/null > +++ b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf > @@ -0,0 +1,8 @@ > +# > +# Copyright (c) Siemens AG, 2020 > +# > +# SPDX-License-Identifier: MIT > + > + > +MACHINE = "virtualbox" > +DISTRO = "debian-buster" > diff --git a/meta/classes/virtual-machine-image.bbclass b/meta/classes/virtual-machine-image.bbclass > new file mode 100644 > index 0000000..aa45e47 > --- /dev/null > +++ b/meta/classes/virtual-machine-image.bbclass > @@ -0,0 +1,265 @@ > +# This software is a part of ISAR. > +# Copyright (C) 2019-2020 Siemens AG > +# > +# This class allows to generate images for vmware and virtualbox > +# > + > +inherit buildchroot > +inherit wic-img > +IMAGER_INSTALL += "qemu-utils gawk uuid-runtime" > +OVA_NAME ?= "${IMAGE_FULLNAME}" > +OVA_MEMORY ?= "8192" > +OVA_NUMBER_OF_CPU ?= "4" > +OVA_VRAM ?= "64" > +OVA_FIRMWARE ?= "efi" > +OVA_ACPI ?= "true" > +OVA_3D_ACCEL ?= "false" > +OVA_CLIPBOARD ?= "bidirectional" > +SOURCE_IMAGE_FILE ?= "${IMAGE_FULLNAME}.wic.img" > +OVA_SHA_ALG ?= "1" > +VIRTUAL_MACHINE_IMAGE_TYPE ?= "vmdk" > +VIRTUAL_MACHINE_IMAGE_FILE ?= "${IMAGE_FULLNAME}-disk1.${VIRTUAL_MACHINE_IMAGE_TYPE}" > +VIRTUAL_MACHINE_DISK ?= "${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE}" > +# for virtualbox this needs to be monolithicSparse > +# for virtualbox this needs to be streamOptimized > +#VMDK_SUBFORMAT ?= "streamOptimized" > +VMDK_SUBFORMAT ?= "monolithicSparse" > +def set_convert_options(d): > + format = d.getVar("VIRTUAL_MACHINE_IMAGE_TYPE") > + if format == "vmdk": > + return "-o subformat=%s" % d.getVar("VMDK_SUBFORMAT") > + else: > + return "" > + > + > +CONVERSION_OPTIONS = "${@set_convert_options(d)}" > + > +do_convert_wic() { > + rm -f '${DEPLOY_DIR_IMAGE}/${VIRTUAL_MACHINE_IMAGE_FILE}' > + image_do_mounts > + bbnote "Creating ${VIRTUAL_MACHINE_IMAGE_FILE} from ${WIC_IMAGE_FILE}" > + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \ > + /usr/bin/qemu-img convert -f raw -O ${VIRTUAL_MACHINE_IMAGE_TYPE} ${CONVERSION_OPTIONS} \ > + '${PP_DEPLOY}/${SOURCE_IMAGE_FILE}' '${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE}' > +} > + > +addtask convert_wic before do_build after do_wic_image do_copy_boot_files do_install_imager_deps do_transform_template > + > +# Generate random MAC addresses just as VirtualBox does, the format is > +# their assigned prefix for the first 3 bytes followed by 3 random bytes. > +VBOX_MAC_PREFIX = "080027" > +macgen() { > + hexdump -n3 -e "\"${VBOX_MAC_PREFIX}%06X\n\"" /dev/urandom > +} > +get_disksize() { > + image_do_mounts > + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \ > + qemu-img info -f vmdk "${VIRTUAL_MACHINE_DISK}" | gawk 'match($0, /^virtual size:.*\(([0-9]+) bytes\)/, a) {print a[1]}' > +} > + > +do_create_ova() { > + if [ ! ${VIRTUAL_MACHINE_IMAGE_TYPE} = "vmdk" ]; then > + exit 0 > + fi > + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ova' > + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ovf' > + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.mf' > + > + export PRIMARY_MAC=$(macgen) > + export SECONDARY_MAC=$(macgen) > + export DISK_NAME=$(basename -s .vmdk ${VIRTUAL_MACHINE_DISK}) > + export DISK_SIZE_BYTES=$(get_disksize) > + export LAST_CHANGE=$(date -u "+%Y-%m-%dT%H:%M:%SZ") > + export OVA_FIRMWARE_VIRTUALBOX=$(echo ${OVA_FIRMWARE} | tr '[a-z]' '[A-Z]') > + image_do_mounts > + sudo -Es chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} <<'EOSUDO' > + export DISK_UUID=$(uuidgen) > + export VM_UUID=$(uuidgen) > + # create ovf > + cat > "${PP_DEPLOY}/${OVA_NAME}.ovf" << EOF Wouldn't it be more maintainable to carry the xml struff below as template file? Jan > +<?xml version="1.0" encoding="UTF-8"?> > +<Envelope ovf:version="1.0" xml:lang="en-US" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vbox="http://www.virtualbox.org/ovf/machine"> > + <References> > + <File ovf:href="${VIRTUAL_MACHINE_IMAGE_FILE}" ovf:id="file1"/> > + </References> > + <DiskSection> > + <Info>List of the virtual disks used in the package</Info> > + <Disk ovf:capacity="${DISK_SIZE_BYTES}" ovf:capacityAllocationUnits="byte" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#${VMDK_SUBFORMAT}" vbox:uuid="${DISK_UUID}"/> > + </DiskSection> > + <NetworkSection> > + <Info>Logical networks used in the package</Info> > + <Network ovf:name="NAT"> > + <Description>Logical network used by this appliance.</Description> > + </Network> > + </NetworkSection> > + <VirtualSystem ovf:id="${OVA_NAME}"> > + <Info>A virtual machine</Info> > + <OperatingSystemSection ovf:id="100"> > + <Info>The kind of installed guest operating system</Info> > + <Description>Debian_64</Description> > + <vbox:OSType ovf:required="false">Debian_64</vbox:OSType> > + </OperatingSystemSection> > + <VirtualHardwareSection> > + <Info>Virtual hardware requirements for a virtual machine</Info> > + <System> > + <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> > + <vssd:InstanceID>0</vssd:InstanceID> > + <vssd:VirtualSystemIdentifier>${OVA_NAME}</vssd:VirtualSystemIdentifier> > + <vssd:VirtualSystemType>virtualbox-2.2</vssd:VirtualSystemType> > + </System> > + <Item> > + <rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits> > + <rasd:Caption>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:Caption> > + <rasd:Description>Number of virtual CPUs</rasd:Description> > + <rasd:ElementName>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:ElementName> > + <rasd:InstanceID>1</rasd:InstanceID> > + <rasd:ResourceType>3</rasd:ResourceType> > + <rasd:VirtualQuantity>${OVA_NUMBER_OF_CPU}</rasd:VirtualQuantity> > + </Item> > + <Item> > + <rasd:AllocationUnits>MegaBytes</rasd:AllocationUnits> > + <rasd:Caption>${OVA_MEMORY} MB of memory</rasd:Caption> > + <rasd:Description>Memory Size</rasd:Description> > + <rasd:ElementName>${OVA_MEMORY} MB of memory</rasd:ElementName> > + <rasd:InstanceID>2</rasd:InstanceID> > + <rasd:ResourceType>4</rasd:ResourceType> > + <rasd:VirtualQuantity>${OVA_MEMORY}</rasd:VirtualQuantity> > + </Item> > + <Item> > + <rasd:Address>0</rasd:Address> > + <rasd:Caption>ideController0</rasd:Caption> > + <rasd:Description>IDE Controller</rasd:Description> > + <rasd:ElementName>ideController0</rasd:ElementName> > + <rasd:InstanceID>3</rasd:InstanceID> > + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> > + <rasd:ResourceType>5</rasd:ResourceType> > + </Item> > + <Item> > + <rasd:Address>1</rasd:Address> > + <rasd:Caption>ideController1</rasd:Caption> > + <rasd:Description>IDE Controller</rasd:Description> > + <rasd:ElementName>ideController1</rasd:ElementName> > + <rasd:InstanceID>4</rasd:InstanceID> > + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> > + <rasd:ResourceType>5</rasd:ResourceType> > + </Item> > + <Item> > + <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> > + <rasd:Caption>Ethernet adapter on 'NAT'</rasd:Caption> > + <rasd:Connection>NAT</rasd:Connection> > + <rasd:ElementName>Ethernet adapter on 'NAT'</rasd:ElementName> > + <rasd:InstanceID>5</rasd:InstanceID> > + <rasd:ResourceSubType>E1000</rasd:ResourceSubType> > + <rasd:ResourceType>10</rasd:ResourceType> > + </Item> > + <Item> > + <rasd:AddressOnParent>0</rasd:AddressOnParent> > + <rasd:Caption>disk1</rasd:Caption> > + <rasd:Description>Disk Image</rasd:Description> > + <rasd:ElementName>disk1</rasd:ElementName> > + <rasd:HostResource>/disk/vmdisk1</rasd:HostResource> > + <rasd:InstanceID>6</rasd:InstanceID> > + <rasd:Parent>3</rasd:Parent> > + <rasd:ResourceType>17</rasd:ResourceType> > + </Item> > + <vmw:Config ovf:required="false" vmw:key="firmware" vmw:value="${OVA_FIRMWARE}"/> > + <vmw:Config ovf:required="false" vmw:key="tools.syncTimeWithHost" vmw:value="false"/> > + <vmw:Config ovf:required="false" vmw:key="tools.afterPowerOn" vmw:value="true"/> > + <vmw:Config ovf:required="false" vmw:key="tools.afterResume" vmw:value="true"/> > + <vmw:Config ovf:required="false" vmw:key="tools.beforeGuestShutdown" vmw:value="true"/> > + <vmw:Config ovf:required="false" vmw:key="tools.beforeGuestStandby" vmw:value="true"/> > + <vmw:ExtraConfig ovf:required="false" vmw:key="virtualHW.productCompatibility" vmw:value="hosted"/> > + </VirtualHardwareSection> > + <vbox:Machine ovf:required="false" version="1.12-linux" uuid="${VM_UUID}" name="${OVA_NAME}" OSType="Debian_64" snapshotFolder="Snapshots" lastStateChange="${LAST_CHANGE}"> > + <ovf:Info>Complete VirtualBox machine configuration in VirtualBox format</ovf:Info> > + <Hardware version="2"> > + <CPU count="${OVA_NUMBER_OF_CPU}" hotplug="false"> > + <HardwareVirtEx enabled="true" exclusive="true"/> > + <HardwareVirtExNestedPaging enabled="true"/> > + <HardwareVirtExVPID enabled="true"/> > + <PAE enabled="true"/> > + <HardwareVirtExLargePages enabled="false"/> > + <HardwareVirtForce enabled="false"/> > + </CPU> > + <Memory RAMSize="${OVA_MEMORY}" PageFusion="false"/> > + <Firmware type="${OVA_FIRMWARE_VIRTUALBOX}"/> > + <HID Pointing="PS2Mouse" Keyboard="PS2Keyboard"/> > + <HPET enabled="false"/> > + <Chipset type="PIIX3"/> > + <Boot> > + <Order position="1" device="HardDisk"/> > + <Order position="2" device="None"/> > + <Order position="3" device="None"/> > + <Order position="4" device="None"/> > + </Boot> > + <Display VRAMSize="${OVA_VRAM}" monitorCount="1" accelerate3D="${OVA_3D_ACCEL}" accelerate2DVideo="false"/> > + <VideoRecording enabled="false" file="Test.webm" horzRes="640" vertRes="480"/> > + <RemoteDisplay enabled="false" authType="Null"/> > + <BIOS> > + <ACPI enabled="${OVA_ACPI}"/> > + <IOAPIC enabled="${OVA_ACPI}"/> > + <Logo fadeIn="true" fadeOut="true" displayTime="0"/> > + <BootMenu mode="MessageAndMenu"/> > + <TimeOffset value="0"/> > + <PXEDebug enabled="false"/> > + </BIOS> > + <USBController enabled="false" enabledEhci="false"/> > + <Network> > + <Adapter slot="0" enabled="true" MACAddress="${PRIMARY_MAC}" cable="true" speed="0" type="virtio"> > + <DisabledModes/> > + <NAT> > + <DNS pass-domain="true" use-proxy="false" use-host-resolver="false"/> > + <Alias logging="false" proxy-only="false" use-same-ports="false"/> > + </NAT> > + </Adapter> > + </Network> > + <UART> > + <Port slot="0" enabled="false" IOBase="0x3f8" IRQ="4" hostMode="Disconnected"/> > + <Port slot="1" enabled="false" IOBase="0x2f8" IRQ="3" hostMode="Disconnected"/> > + </UART> > + <LPT> > + <Port slot="0" enabled="false" IOBase="0x378" IRQ="7"/> > + <Port slot="1" enabled="false" IOBase="0x378" IRQ="7"/> > + </LPT> > + <AudioAdapter controller="AC97" driver="Pulse" enabled="false"/> > + <RTC localOrUTC="local"/> > + <SharedFolders/> > + <Clipboard mode="Disabled"/> > + <DragAndDrop mode="Disabled"/> > + <IO> > + <IoCache enabled="true" size="5"/> > + <BandwidthGroups/> > + </IO> > + <HostPci> > + <Devices/> > + </HostPci> > + <EmulatedUSB> > + <CardReader enabled="false"/> > + </EmulatedUSB> > + <Guest memoryBalloonSize="0"/> > + <GuestProperties/> > + </Hardware> > + <StorageControllers> > + <StorageController name="IDE Controller" type="PIIX4" PortCount="2" useHostIOCache="true" Bootable="true"> > + <AttachedDevice type="HardDisk" port="0" device="0"> > + <Image uuid="{${DISK_UUID}}"/> > + </AttachedDevice> > + </StorageController> > + </StorageControllers> > + </vbox:Machine> > + </VirtualSystem> > +</Envelope> > +EOF > +tar -H ustar -cvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${OVA_NAME}.ovf > +tar -H ustar -uvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${VIRTUAL_MACHINE_IMAGE_FILE} > + > +# virtual box needs here a manifest file vmware does not want to accept the format > +if [ "${VMDK_SUBFORMAT}" = "monolithicSparse" ]; then > + echo "SHA${OVA_SHA_ALG}(${VIRTUAL_MACHINE_IMAGE_FILE})= $(sha${OVA_SHA_ALG}sum ${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE} | cut -d' ' -f1)" >> ${PP_DEPLOY}/${OVA_NAME}.mf > + echo "SHA${OVA_SHA_ALG}(${OVA_NAME}.ovf)= $(sha${OVA_SHA_ALG}sum ${PP_DEPLOY}/${OVA_NAME}.ovf | cut -d' ' -f1)" >> ${PP_DEPLOY}/${OVA_NAME}.mf > + tar -H ustar -uvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${OVA_NAME}.mf > +fi > +EOSUDO > +} > + > +addtask do_create_ova after do_convert_wic before do_deploy > diff --git a/scripts/ci_build.sh b/scripts/ci_build.sh > index 7cd5a2f..aa21a6f 100755 > --- a/scripts/ci_build.sh > +++ b/scripts/ci_build.sh > @@ -35,7 +35,8 @@ TARGETS_SET="\ > mc:qemumipsel-buster:isar-image-base \ > mc:qemumipsel-bullseye:isar-image-base \ > mc:nand-ubi-demo-buster:isar-image-ubi \ > - mc:rpi-stretch:isar-image-base" > + mc:rpi-stretch:isar-image-base \ > + mc:virtualbox-ova-buster:isar-image-base" > # qemu-user-static of <= buster too old to build that > # mc:qemuarm64-buster:isar-image-base > # mc:qemuarm64-bullseye:isar-image-base > -- Siemens AG, Corporate Technology, CT RDA IOT SES-DE Corporate Competence Center Embedded Linux ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v5 0/3] some images 2020-04-21 15:17 ` Jan Kiszka @ 2020-04-23 9:46 ` Q. Gylstorff 2020-04-23 9:46 ` [PATCH v5 1/3] meta/support: Generate a custom initramfs Q. Gylstorff ` (2 more replies) 0 siblings, 3 replies; 58+ messages in thread From: Q. Gylstorff @ 2020-04-23 9:46 UTC (permalink / raw) To: isar-users, Jan.Kiszka; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> - Generate cpio images for rescue images - generate custom initramfs - generate ova images Changes V2: - initramfs modification is now a package - ova-wic-img was renamed to virtual-machine-image - virtual-machine-image do_convert_wic supports now other image formats - Add tests - cpiogz now use chown instead of userspec Changes V3: - Add tests to build-ci - add postrm to initramfs-config - use sdimage-efi for virtualbox images - changed maintainer Changes V4: - use templates from debhelper for postinst and postrm scripts Changes V5: - add virtual-machine-template package to add the template as extra file to the build Quirin Gylstorff (3): meta/support: Generate a custom initramfs meta/classes: Generate ova image for vmware or virtualbox meta/classes: add cpiogz-img meta-isar/conf/machine/virtualbox.conf | 16 ++ meta-isar/conf/machine/vmware.conf | 16 ++ .../multiconfig/qemuamd64-buster-cpiogz.conf | 9 + .../multiconfig/virtualbox-ova-buster.conf | 8 + meta/classes/cpiogz-img.bbclass | 20 +++ meta/classes/virtual-machine-image.bbclass | 92 +++++++++++ .../files/virtual-machine-template.ovf.tmpl | 155 ++++++++++++++++++ .../virtual-machine-template_0.1.bb | 17 ++ .../initramfs-config/files/control.tmpl | 12 ++ .../initramfs-config/files/postinst.tmpl | 50 ++++++ .../initramfs-config/files/postrm.tmpl | 41 +++++ .../initramfs-config/initramfs-config_0.1.bb | 32 ++++ scripts/ci_build.sh | 4 +- 13 files changed, 471 insertions(+), 1 deletion(-) create mode 100644 meta-isar/conf/machine/virtualbox.conf create mode 100644 meta-isar/conf/machine/vmware.conf create mode 100644 meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf create mode 100644 meta-isar/conf/multiconfig/virtualbox-ova-buster.conf create mode 100644 meta/classes/cpiogz-img.bbclass create mode 100644 meta/classes/virtual-machine-image.bbclass create mode 100644 meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl create mode 100644 meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb create mode 100644 meta/recipes-support/initramfs-config/files/control.tmpl create mode 100644 meta/recipes-support/initramfs-config/files/postinst.tmpl create mode 100644 meta/recipes-support/initramfs-config/files/postrm.tmpl create mode 100644 meta/recipes-support/initramfs-config/initramfs-config_0.1.bb -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v5 1/3] meta/support: Generate a custom initramfs 2020-04-23 9:46 ` [PATCH v5 0/3] some images Q. Gylstorff @ 2020-04-23 9:46 ` Q. Gylstorff 2020-06-18 15:54 ` Harald Seiler 2021-02-05 10:52 ` [PATCH v7 0/2] CPIO & OVA Images Q. Gylstorff 2020-04-23 9:46 ` [PATCH v5 2/3] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff 2020-04-23 9:46 ` [PATCH v5 3/3] meta/classes: add cpiogz-img Q. Gylstorff 2 siblings, 2 replies; 58+ messages in thread From: Q. Gylstorff @ 2020-04-23 9:46 UTC (permalink / raw) To: isar-users, Jan.Kiszka; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> This package sets the Parameters for mkinitramfs/update-intramfs before it regenerates the initrd.img of debian with a modified version. Use cases are the remove unnecessary kernel modules to reduce the size of the initrd by using the parameters: ``` INITRAMFS_MODULES = "list" INITRAMFS_MODULE_LIST += "ext4" ``` Set the boot root during the initrd generation by setting `INITRAMFS_ROOT`. see also man pages of mkinitramfs and initramfs.conf. Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- .../initramfs-config/files/control.tmpl | 12 +++++ .../initramfs-config/files/postinst.tmpl | 50 +++++++++++++++++++ .../initramfs-config/files/postrm.tmpl | 41 +++++++++++++++ .../initramfs-config/initramfs-config_0.1.bb | 32 ++++++++++++ 4 files changed, 135 insertions(+) create mode 100644 meta/recipes-support/initramfs-config/files/control.tmpl create mode 100644 meta/recipes-support/initramfs-config/files/postinst.tmpl create mode 100644 meta/recipes-support/initramfs-config/files/postrm.tmpl create mode 100644 meta/recipes-support/initramfs-config/initramfs-config_0.1.bb diff --git a/meta/recipes-support/initramfs-config/files/control.tmpl b/meta/recipes-support/initramfs-config/files/control.tmpl new file mode 100644 index 0000000..e0f5543 --- /dev/null +++ b/meta/recipes-support/initramfs-config/files/control.tmpl @@ -0,0 +1,12 @@ +Source: initramfs-config +Section: misc +Priority: optional +Standards-Version: 3.9.6 +Maintainer: isar-users <isar-users@googlegroups.com> +Build-Depends: debhelper (>= 9) + + +Package: initramfs-config +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, initramfs-tools-core, ${DEBIAN_DEPENDS} +Description: Configuration files for a custom initramfs diff --git a/meta/recipes-support/initramfs-config/files/postinst.tmpl b/meta/recipes-support/initramfs-config/files/postinst.tmpl new file mode 100644 index 0000000..e523906 --- /dev/null +++ b/meta/recipes-support/initramfs-config/files/postinst.tmpl @@ -0,0 +1,50 @@ +#!/bin/sh +# postinst script for initramfs-config +# +# see: dh_installdeb(1) + +set -e + +case "$1" in + configure) + INITRAMFS_CONF=/etc/initramfs-tools/initramfs.conf + if [ -f ${INITRAMFS_CONF} ]; then + sed -i -E 's/(^MODULES=).*/\1${INITRAMFS_MODULES}/' ${INITRAMFS_CONF} + sed -i -E 's/(^BUSYBOX=).*/\1${INITRAMFS_BUSYBOX}/' ${INITRAMFS_CONF} + sed -i -E 's/(^COMPRESS=).*/\1${INITRAMFS_COMPRESS}/' ${INITRAMFS_CONF} + sed -i -E 's/(^KEYMAP=).*/\1${INITRAMFS_KEYMAP}/' ${INITRAMFS_CONF} + sed -i -E 's/(^DEVICE=).*/\1${INITRAMFS_NET_DEVICE}/' ${INITRAMFS_CONF} + sed -i -E 's/(^NFSROOT=).*/\1${INITRAMFS_NFSROOT}/' ${INITRAMFS_CONF} + sed -i -E 's/(^RUNSIZE=).*/\1${INITRAMFS_RUNSIZE}/' ${INITRAMFS_CONF} + if grep -Fxq "ROOT=" "${INITRAMFS_CONF}"; then + sed -i -E 's/(^ROOT=).*/\1${INITRAMFS_ROOT}/' ${INITRAMFS_CONF} + else + sed -i -E "\$aROOT=${INITRAMFS_ROOT}" ${INITRAMFS_CONF} + fi + fi + + MODULES_LIST_FILE=/etc/initramfs-tools/modules + if [ -f ${MODULES_LIST_FILE} ]; then + for modname in ${INITRAMFS_MODULE_LIST}; do + if ! grep -Fxq "$modname" "${MODULES_LIST_FILE}"; then + echo "$modname" >> "${MODULES_LIST_FILE}" + fi + done + fi + + update-initramfs -v -u + + ;; + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. +#DEBHELPER# + +exit 0 diff --git a/meta/recipes-support/initramfs-config/files/postrm.tmpl b/meta/recipes-support/initramfs-config/files/postrm.tmpl new file mode 100644 index 0000000..115d9b6 --- /dev/null +++ b/meta/recipes-support/initramfs-config/files/postrm.tmpl @@ -0,0 +1,41 @@ +#!/bin/sh +# postrm script for initramfs-config +# +# see: dh_installdeb(1) + +set -e + +case "$1" in + purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + # back to the debian defaults + INITRAMFS_CONF=/etc/initramfs-tools/initramfs.conf + sed -i -E 's/(^MODULES=).*/\1most/' ${INITRAMFS_CONF} + sed -i -E 's/(^BUSYBOX=).*/\1auto/' ${INITRAMFS_CONF} + sed -i -E 's/(^COMPRESS=).*/\1gzip/' ${INITRAMFS_CONF} + sed -i -E 's/(^KEYMAP=).*/\1n/' ${INITRAMFS_CONF} + sed -i -E 's/(^DEVICE=).*/\1/' ${INITRAMFS_CONF} + sed -i -E 's/(^NFSROOT=).*/\1auto/' ${INITRAMFS_CONF} + sed -i -E 's/(^RUNSIZE=).*/\110%/' ${INITRAMFS_CONF} + sed -i -E 's/(^ROOT=).*//' ${INITRAMFS_CONF} + + # remove the added modules + MODULES_LIST_FILE=/etc/initramfs-tools/modules + for modname in ${INITRAMFS_MODULE_LIST}; do + sed -i -E 's/$modname//' + done + + update-initramfs -v -u + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb b/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb new file mode 100644 index 0000000..34bb25b --- /dev/null +++ b/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb @@ -0,0 +1,32 @@ +# This software is a part of ISAR. +# Copyright (C) 2020 Siemens AG +# +# SPDX-License-Identifier: MIT +inherit dpkg-raw +inherit template +DESCRIPTION = "Recipe to set the initramfs configuration and generate a new ramfs" + + +SRC_URI = "file://postinst.tmpl \ + file://postrm.tmpl \ + file://control.tmpl \ + " + +INITRAMFS_MODULES ?= "most" +INITRAMFS_BUSYBOX ?= "auto" +INITRAMFS_COMPRESS ?= "gzip" +INITRAMFS_KEYMAP ?= "n" +INITRAMFS_NET_DEVICE ?= "" +INITRAMFS_NFSROOT ?= "auto" +INITRAMFS_RUNSIZE ?= "10%" +INITRAMFS_ROOT ?= "" +INITRAMFS_MODULE_LIST ?= "" +CREATE_NEW_INITRAMFS ?= "n" +KERNEL_PACKAGE = "${@ ("linux-image-" + d.getVar("KERNEL_NAME", True)) if d.getVar("KERNEL_NAME", True) else ""}" +DEBIAN_DEPENDS += ", ${KERNEL_PACKAGE}" +TEMPLATE_FILES = "postinst.tmpl control.tmpl postrm.tmpl" +TEMPLATE_VARS += "INITRAMFS_MODULES INITRAMFS_BUSYBOX INITRAMFS_COMPRESS \ + INITRAMFS_KEYMAP INITRAMFS_NET_DEVICE INITRAMFS_NFSROOT \ + INITRAMFS_RUNSIZE INITRAMFS_ROOT INITRAMFS_MODULE_LIST CREATE_NEW_INITRAMFS DEBIAN_DEPENDS" + + -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v5 1/3] meta/support: Generate a custom initramfs 2020-04-23 9:46 ` [PATCH v5 1/3] meta/support: Generate a custom initramfs Q. Gylstorff @ 2020-06-18 15:54 ` Harald Seiler 2020-06-22 13:44 ` Gylstorff Quirin 2020-06-25 12:56 ` [PATCH v6 0/3] some images Q. Gylstorff 2021-02-05 10:52 ` [PATCH v7 0/2] CPIO & OVA Images Q. Gylstorff 1 sibling, 2 replies; 58+ messages in thread From: Harald Seiler @ 2020-06-18 15:54 UTC (permalink / raw) To: Q. Gylstorff, isar-users, Jan.Kiszka Hello Quirin, I'm currently trying out the MR you prepared for me. As this patch is a part of it, and it concerns ISAR upstream, I think talking about it here makes more sense than only internally. On Thu, 2020-04-23 at 11:46 +0200, Q. Gylstorff wrote: > From: Quirin Gylstorff <quirin.gylstorff@siemens.com> > > This package sets the Parameters for mkinitramfs/update-intramfs > before it regenerates the initrd.img of debian with a modified version. > > Use cases are the remove unnecessary kernel modules to reduce the > size of the initrd by using the parameters: > ``` > INITRAMFS_MODULES = "list" > INITRAMFS_MODULE_LIST += "ext4" > ``` > > Set the boot root during the initrd generation by setting `INITRAMFS_ROOT`. > > see also man pages of mkinitramfs and initramfs.conf. > > Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> > --- > .../initramfs-config/files/control.tmpl | 12 +++++ > .../initramfs-config/files/postinst.tmpl | 50 +++++++++++++++++++ > .../initramfs-config/files/postrm.tmpl | 41 +++++++++++++++ > .../initramfs-config/initramfs-config_0.1.bb | 32 ++++++++++++ > 4 files changed, 135 insertions(+) > create mode 100644 meta/recipes-support/initramfs-config/files/control.tmpl > create mode 100644 meta/recipes-support/initramfs-config/files/postinst.tmpl > create mode 100644 meta/recipes-support/initramfs-config/files/postrm.tmpl > create mode 100644 meta/recipes-support/initramfs-config/initramfs-config_0.1.bb > > diff --git a/meta/recipes-support/initramfs-config/files/control.tmpl b/meta/recipes-support/initramfs-config/files/control.tmpl > new file mode 100644 > index 0000000..e0f5543 > --- /dev/null > +++ b/meta/recipes-support/initramfs-config/files/control.tmpl > @@ -0,0 +1,12 @@ > +Source: initramfs-config > +Section: misc > +Priority: optional > +Standards-Version: 3.9.6 > +Maintainer: isar-users <isar-users@googlegroups.com> > +Build-Depends: debhelper (>= 9) > + > + > +Package: initramfs-config > +Architecture: any > +Depends: ${shlibs:Depends}, ${misc:Depends}, initramfs-tools-core, ${DEBIAN_DEPENDS} > +Description: Configuration files for a custom initramfs > diff --git a/meta/recipes-support/initramfs-config/files/postinst.tmpl b/meta/recipes-support/initramfs-config/files/postinst.tmpl > new file mode 100644 > index 0000000..e523906 > --- /dev/null > +++ b/meta/recipes-support/initramfs-config/files/postinst.tmpl > @@ -0,0 +1,50 @@ > +#!/bin/sh > +# postinst script for initramfs-config > +# > +# see: dh_installdeb(1) > + > +set -e > + > +case "$1" in > + configure) > + INITRAMFS_CONF=/etc/initramfs-tools/initramfs.conf > + if [ -f ${INITRAMFS_CONF} ]; then > + sed -i -E 's/(^MODULES=).*/\1${INITRAMFS_MODULES}/' ${INITRAMFS_CONF} > + sed -i -E 's/(^BUSYBOX=).*/\1${INITRAMFS_BUSYBOX}/' ${INITRAMFS_CONF} > + sed -i -E 's/(^COMPRESS=).*/\1${INITRAMFS_COMPRESS}/' ${INITRAMFS_CONF} > + sed -i -E 's/(^KEYMAP=).*/\1${INITRAMFS_KEYMAP}/' ${INITRAMFS_CONF} > + sed -i -E 's/(^DEVICE=).*/\1${INITRAMFS_NET_DEVICE}/' ${INITRAMFS_CONF} > + sed -i -E 's/(^NFSROOT=).*/\1${INITRAMFS_NFSROOT}/' ${INITRAMFS_CONF} > + sed -i -E 's/(^RUNSIZE=).*/\1${INITRAMFS_RUNSIZE}/' ${INITRAMFS_CONF} > + if grep -Fxq "ROOT=" "${INITRAMFS_CONF}"; then > + sed -i -E 's/(^ROOT=).*/\1${INITRAMFS_ROOT}/' ${INITRAMFS_CONF} > + else > + sed -i -E "\$aROOT=${INITRAMFS_ROOT}" ${INITRAMFS_CONF} > + fi > + fi > + > + MODULES_LIST_FILE=/etc/initramfs-tools/modules > + if [ -f ${MODULES_LIST_FILE} ]; then > + for modname in ${INITRAMFS_MODULE_LIST}; do > + if ! grep -Fxq "$modname" "${MODULES_LIST_FILE}"; then > + echo "$modname" >> "${MODULES_LIST_FILE}" > + fi > + done > + fi > + > + update-initramfs -v -u > + > + ;; > + abort-upgrade|abort-remove|abort-deconfigure) > + ;; > + > + *) > + echo "postinst called with unknown argument \`$1'" >&2 > + exit 1 > + ;; > +esac > +# dh_installdeb will replace this with shell code automatically > +# generated by other debhelper scripts. > +#DEBHELPER# > + > +exit 0 > diff --git a/meta/recipes-support/initramfs-config/files/postrm.tmpl b/meta/recipes-support/initramfs-config/files/postrm.tmpl > new file mode 100644 > index 0000000..115d9b6 > --- /dev/null > +++ b/meta/recipes-support/initramfs-config/files/postrm.tmpl > @@ -0,0 +1,41 @@ > +#!/bin/sh > +# postrm script for initramfs-config > +# > +# see: dh_installdeb(1) > + > +set -e > + > +case "$1" in > + purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) > + # back to the debian defaults > + INITRAMFS_CONF=/etc/initramfs-tools/initramfs.conf > + sed -i -E 's/(^MODULES=).*/\1most/' ${INITRAMFS_CONF} > + sed -i -E 's/(^BUSYBOX=).*/\1auto/' ${INITRAMFS_CONF} > + sed -i -E 's/(^COMPRESS=).*/\1gzip/' ${INITRAMFS_CONF} > + sed -i -E 's/(^KEYMAP=).*/\1n/' ${INITRAMFS_CONF} > + sed -i -E 's/(^DEVICE=).*/\1/' ${INITRAMFS_CONF} > + sed -i -E 's/(^NFSROOT=).*/\1auto/' ${INITRAMFS_CONF} > + sed -i -E 's/(^RUNSIZE=).*/\110%/' ${INITRAMFS_CONF} > + sed -i -E 's/(^ROOT=).*//' ${INITRAMFS_CONF} > + > + # remove the added modules > + MODULES_LIST_FILE=/etc/initramfs-tools/modules > + for modname in ${INITRAMFS_MODULE_LIST}; do > + sed -i -E 's/$modname//' > + done > + > + update-initramfs -v -u > + ;; > + > + *) > + echo "postrm called with unknown argument \`$1'" >&2 > + exit 1 > + ;; > +esac > + > +# dh_installdeb will replace this with shell code automatically > +# generated by other debhelper scripts. > + > +#DEBHELPER# > + > +exit 0 > diff --git a/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb b/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb > new file mode 100644 > index 0000000..34bb25b > --- /dev/null > +++ b/meta/recipes-support/initramfs-config/initramfs-config_0.1.bb Shouldn't this be a .inc file instead of a concrete recipe (similar to u-boot-custom.inc)? The way it is right now, customizations to the recipe via bbappend files are always pulled in. This means if a layer I pull in customizes this recipe, I can't decide whether I want those changes or not. With an inc-file, layers would instead provide individual recipes for each initramfs config change which a downstream layer could then decide to pull in, or not to pull in. Each of these recipes 'requires' this base inc-file. I think this pattern would compose better. > @@ -0,0 +1,32 @@ > +# This software is a part of ISAR. > +# Copyright (C) 2020 Siemens AG > +# > +# SPDX-License-Identifier: MIT > +inherit dpkg-raw > +inherit template > +DESCRIPTION = "Recipe to set the initramfs configuration and generate a new ramfs" > + > + > +SRC_URI = "file://postinst.tmpl \ > + file://postrm.tmpl \ > + file://control.tmpl \ > + " > + > +INITRAMFS_MODULES ?= "most" > +INITRAMFS_BUSYBOX ?= "auto" > +INITRAMFS_COMPRESS ?= "gzip" > +INITRAMFS_KEYMAP ?= "n" > +INITRAMFS_NET_DEVICE ?= "" > +INITRAMFS_NFSROOT ?= "auto" > +INITRAMFS_RUNSIZE ?= "10%" > +INITRAMFS_ROOT ?= "" > +INITRAMFS_MODULE_LIST ?= "" > +CREATE_NEW_INITRAMFS ?= "n" > +KERNEL_PACKAGE = "${@ ("linux-image-" + d.getVar("KERNEL_NAME", True)) if d.getVar("KERNEL_NAME", True) else ""}" > +DEBIAN_DEPENDS += ", ${KERNEL_PACKAGE}" > +TEMPLATE_FILES = "postinst.tmpl control.tmpl postrm.tmpl" > +TEMPLATE_VARS += "INITRAMFS_MODULES INITRAMFS_BUSYBOX INITRAMFS_COMPRESS \ > + INITRAMFS_KEYMAP INITRAMFS_NET_DEVICE INITRAMFS_NFSROOT \ > + INITRAMFS_RUNSIZE INITRAMFS_ROOT INITRAMFS_MODULE_LIST CREATE_NEW_INITRAMFS DEBIAN_DEPENDS" > + > + > -- > 2.20.1 > -- Harald DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-62 Fax: +49-8142-66989-80 Email: hws@denx.de ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v5 1/3] meta/support: Generate a custom initramfs 2020-06-18 15:54 ` Harald Seiler @ 2020-06-22 13:44 ` Gylstorff Quirin 2020-06-25 12:56 ` [PATCH v6 0/3] some images Q. Gylstorff 1 sibling, 0 replies; 58+ messages in thread From: Gylstorff Quirin @ 2020-06-22 13:44 UTC (permalink / raw) To: Harald Seiler, isar-users, Jan.Kiszka On 6/18/20 5:54 PM, Harald Seiler wrote: > With an inc-file, layers would instead provide individual recipes for each > initramfs config change which a downstream layer could then decide to pull > in, or not to pull in. Each of these recipes 'requires' this base > inc-file. I think this pattern would compose better. Sure that's sounds better. I will create an update for this. Quirin ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v6 0/3] some images 2020-06-18 15:54 ` Harald Seiler 2020-06-22 13:44 ` Gylstorff Quirin @ 2020-06-25 12:56 ` Q. Gylstorff 2020-06-25 12:56 ` [PATCH v6 1/3] meta/support: Generate a custom initramfs Q. Gylstorff ` (3 more replies) 1 sibling, 4 replies; 58+ messages in thread From: Q. Gylstorff @ 2020-06-25 12:56 UTC (permalink / raw) To: isar-users, hws, jan.kiszka; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> - Generate cpio images for rescue images - generate custom initramfs - generate ova images Changes V2: - initramfs modification is now a package - ova-wic-img was renamed to virtual-machine-image - virtual-machine-image do_convert_wic supports now other image formats - Add tests - cpiogz now use chown instead of userspec Changes V3: - Add tests to build-ci - add postrm to initramfs-config - use sdimage-efi for virtualbox images - changed maintainer Changes V4: - use templates from debhelper for postinst and postrm scripts Changes V5: - add virtual-machine-template package to add the template as extra file to the build Changes V6: - whitespace fix - initramfs-config is now a inc file instead of a recipe - meta isar contains a default implementation of intramfs-config Quirin Gylstorff (3): meta/support: Generate a custom initramfs meta/classes: Generate ova image for vmware or virtualbox meta/classes: add cpiogz-img meta-isar/conf/machine/virtualbox.conf | 16 ++ meta-isar/conf/machine/vmware.conf | 16 ++ .../multiconfig/qemuamd64-buster-cpiogz.conf | 9 + .../multiconfig/virtualbox-ova-buster.conf | 8 + .../initramfs-config/initramfs-config_0.1.bb | 7 + meta/classes/cpiogz-img.bbclass | 20 +++ meta/classes/virtual-machine-image.bbclass | 92 +++++++++++ .../files/virtual-machine-template.ovf.tmpl | 155 ++++++++++++++++++ .../virtual-machine-template_0.1.bb | 17 ++ .../initramfs-config/files/control.tmpl | 12 ++ .../initramfs-config/files/postinst.tmpl | 50 ++++++ .../initramfs-config/files/postrm.tmpl | 41 +++++ .../initramfs-config/initramfs-config.inc | 32 ++++ scripts/ci_build.sh | 4 +- 14 files changed, 478 insertions(+), 1 deletion(-) create mode 100644 meta-isar/conf/machine/virtualbox.conf create mode 100644 meta-isar/conf/machine/vmware.conf create mode 100644 meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf create mode 100644 meta-isar/conf/multiconfig/virtualbox-ova-buster.conf create mode 100644 meta-isar/recipes-support/initramfs-config/initramfs-config_0.1.bb create mode 100644 meta/classes/cpiogz-img.bbclass create mode 100644 meta/classes/virtual-machine-image.bbclass create mode 100644 meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl create mode 100644 meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb create mode 100644 meta/recipes-support/initramfs-config/files/control.tmpl create mode 100644 meta/recipes-support/initramfs-config/files/postinst.tmpl create mode 100644 meta/recipes-support/initramfs-config/files/postrm.tmpl create mode 100644 meta/recipes-support/initramfs-config/initramfs-config.inc -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v6 1/3] meta/support: Generate a custom initramfs 2020-06-25 12:56 ` [PATCH v6 0/3] some images Q. Gylstorff @ 2020-06-25 12:56 ` Q. Gylstorff 2020-09-16 12:24 ` Harald Seiler 2020-06-25 12:56 ` [PATCH v6 2/3] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff ` (2 subsequent siblings) 3 siblings, 1 reply; 58+ messages in thread From: Q. Gylstorff @ 2020-06-25 12:56 UTC (permalink / raw) To: isar-users, hws, jan.kiszka; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> This package sets the Parameters for mkinitramfs/update-intramfs before it regenerates the initrd.img of debian with a modified version. Use cases are the remove unnecessary kernel modules to reduce the size of the initrd by using the parameters: ``` INITRAMFS_MODULES = "list" INITRAMFS_MODULE_LIST += "ext4" ``` Set the boot root during the initrd generation by setting `INITRAMFS_ROOT`. see also man pages of mkinitramfs and initramfs.conf. Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- .../initramfs-config/initramfs-config_0.1.bb | 7 +++ .../initramfs-config/files/control.tmpl | 12 +++++ .../initramfs-config/files/postinst.tmpl | 50 +++++++++++++++++++ .../initramfs-config/files/postrm.tmpl | 41 +++++++++++++++ .../initramfs-config/initramfs-config.inc | 32 ++++++++++++ 5 files changed, 142 insertions(+) create mode 100644 meta-isar/recipes-support/initramfs-config/initramfs-config_0.1.bb create mode 100644 meta/recipes-support/initramfs-config/files/control.tmpl create mode 100644 meta/recipes-support/initramfs-config/files/postinst.tmpl create mode 100644 meta/recipes-support/initramfs-config/files/postrm.tmpl create mode 100644 meta/recipes-support/initramfs-config/initramfs-config.inc diff --git a/meta-isar/recipes-support/initramfs-config/initramfs-config_0.1.bb b/meta-isar/recipes-support/initramfs-config/initramfs-config_0.1.bb new file mode 100644 index 0000000..0eb70d7 --- /dev/null +++ b/meta-isar/recipes-support/initramfs-config/initramfs-config_0.1.bb @@ -0,0 +1,7 @@ +# +# Copyright (C) Siemens ag, 2020 +# +# SPDX-License-Identifier: MIT + +require recipes-support/initramfs-config/initramfs-config.inc + diff --git a/meta/recipes-support/initramfs-config/files/control.tmpl b/meta/recipes-support/initramfs-config/files/control.tmpl new file mode 100644 index 0000000..66984eb --- /dev/null +++ b/meta/recipes-support/initramfs-config/files/control.tmpl @@ -0,0 +1,12 @@ +Source: ${PN} +Section: misc +Priority: optional +Standards-Version: 3.9.6 +Maintainer: isar-users <isar-users@googlegroups.com> +Build-Depends: debhelper (>= 9) + + +Package: ${PN} +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, initramfs-tools-core, ${DEBIAN_DEPENDS} +Description: Configuration files for a custom initramfs diff --git a/meta/recipes-support/initramfs-config/files/postinst.tmpl b/meta/recipes-support/initramfs-config/files/postinst.tmpl new file mode 100644 index 0000000..e523906 --- /dev/null +++ b/meta/recipes-support/initramfs-config/files/postinst.tmpl @@ -0,0 +1,50 @@ +#!/bin/sh +# postinst script for initramfs-config +# +# see: dh_installdeb(1) + +set -e + +case "$1" in + configure) + INITRAMFS_CONF=/etc/initramfs-tools/initramfs.conf + if [ -f ${INITRAMFS_CONF} ]; then + sed -i -E 's/(^MODULES=).*/\1${INITRAMFS_MODULES}/' ${INITRAMFS_CONF} + sed -i -E 's/(^BUSYBOX=).*/\1${INITRAMFS_BUSYBOX}/' ${INITRAMFS_CONF} + sed -i -E 's/(^COMPRESS=).*/\1${INITRAMFS_COMPRESS}/' ${INITRAMFS_CONF} + sed -i -E 's/(^KEYMAP=).*/\1${INITRAMFS_KEYMAP}/' ${INITRAMFS_CONF} + sed -i -E 's/(^DEVICE=).*/\1${INITRAMFS_NET_DEVICE}/' ${INITRAMFS_CONF} + sed -i -E 's/(^NFSROOT=).*/\1${INITRAMFS_NFSROOT}/' ${INITRAMFS_CONF} + sed -i -E 's/(^RUNSIZE=).*/\1${INITRAMFS_RUNSIZE}/' ${INITRAMFS_CONF} + if grep -Fxq "ROOT=" "${INITRAMFS_CONF}"; then + sed -i -E 's/(^ROOT=).*/\1${INITRAMFS_ROOT}/' ${INITRAMFS_CONF} + else + sed -i -E "\$aROOT=${INITRAMFS_ROOT}" ${INITRAMFS_CONF} + fi + fi + + MODULES_LIST_FILE=/etc/initramfs-tools/modules + if [ -f ${MODULES_LIST_FILE} ]; then + for modname in ${INITRAMFS_MODULE_LIST}; do + if ! grep -Fxq "$modname" "${MODULES_LIST_FILE}"; then + echo "$modname" >> "${MODULES_LIST_FILE}" + fi + done + fi + + update-initramfs -v -u + + ;; + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. +#DEBHELPER# + +exit 0 diff --git a/meta/recipes-support/initramfs-config/files/postrm.tmpl b/meta/recipes-support/initramfs-config/files/postrm.tmpl new file mode 100644 index 0000000..115d9b6 --- /dev/null +++ b/meta/recipes-support/initramfs-config/files/postrm.tmpl @@ -0,0 +1,41 @@ +#!/bin/sh +# postrm script for initramfs-config +# +# see: dh_installdeb(1) + +set -e + +case "$1" in + purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + # back to the debian defaults + INITRAMFS_CONF=/etc/initramfs-tools/initramfs.conf + sed -i -E 's/(^MODULES=).*/\1most/' ${INITRAMFS_CONF} + sed -i -E 's/(^BUSYBOX=).*/\1auto/' ${INITRAMFS_CONF} + sed -i -E 's/(^COMPRESS=).*/\1gzip/' ${INITRAMFS_CONF} + sed -i -E 's/(^KEYMAP=).*/\1n/' ${INITRAMFS_CONF} + sed -i -E 's/(^DEVICE=).*/\1/' ${INITRAMFS_CONF} + sed -i -E 's/(^NFSROOT=).*/\1auto/' ${INITRAMFS_CONF} + sed -i -E 's/(^RUNSIZE=).*/\110%/' ${INITRAMFS_CONF} + sed -i -E 's/(^ROOT=).*//' ${INITRAMFS_CONF} + + # remove the added modules + MODULES_LIST_FILE=/etc/initramfs-tools/modules + for modname in ${INITRAMFS_MODULE_LIST}; do + sed -i -E 's/$modname//' + done + + update-initramfs -v -u + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/meta/recipes-support/initramfs-config/initramfs-config.inc b/meta/recipes-support/initramfs-config/initramfs-config.inc new file mode 100644 index 0000000..16049a9 --- /dev/null +++ b/meta/recipes-support/initramfs-config/initramfs-config.inc @@ -0,0 +1,32 @@ +# This software is a part of ISAR. +# Copyright (C) 2020 Siemens AG +# +# SPDX-License-Identifier: MIT +inherit dpkg-raw +inherit template +DESCRIPTION = "Recipe to set the initramfs configuration and generate a new ramfs" + +FILESEXTRAPATHS_prepend := "${FILE_DIRNAME}/files:" + +SRC_URI = "file://postinst.tmpl \ + file://postrm.tmpl \ + file://control.tmpl \ + " + +INITRAMFS_MODULES ?= "most" +INITRAMFS_BUSYBOX ?= "auto" +INITRAMFS_COMPRESS ?= "gzip" +INITRAMFS_KEYMAP ?= "n" +INITRAMFS_NET_DEVICE ?= "" +INITRAMFS_NFSROOT ?= "auto" +INITRAMFS_RUNSIZE ?= "10%" +INITRAMFS_ROOT ?= "" +INITRAMFS_MODULE_LIST ?= "" +CREATE_NEW_INITRAMFS ?= "n" +KERNEL_PACKAGE = "${@ ("linux-image-" + d.getVar("KERNEL_NAME", True)) if d.getVar("KERNEL_NAME", True) else ""}" +DEBIAN_DEPENDS += ", ${KERNEL_PACKAGE}" +TEMPLATE_FILES = "postinst.tmpl control.tmpl postrm.tmpl" +TEMPLATE_VARS += "INITRAMFS_MODULES INITRAMFS_BUSYBOX INITRAMFS_COMPRESS \ + INITRAMFS_KEYMAP INITRAMFS_NET_DEVICE INITRAMFS_NFSROOT \ + INITRAMFS_RUNSIZE INITRAMFS_ROOT INITRAMFS_MODULE_LIST \ + CREATE_NEW_INITRAMFS DEBIAN_DEPENDS PN" -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v6 1/3] meta/support: Generate a custom initramfs 2020-06-25 12:56 ` [PATCH v6 1/3] meta/support: Generate a custom initramfs Q. Gylstorff @ 2020-09-16 12:24 ` Harald Seiler 0 siblings, 0 replies; 58+ messages in thread From: Harald Seiler @ 2020-09-16 12:24 UTC (permalink / raw) To: isar-users, Q. Gylstorff; +Cc: jan.kiszka Hello, On Thu, 2020-06-25 at 14:56 +0200, Q. Gylstorff wrote: > From: Quirin Gylstorff <quirin.gylstorff@siemens.com> > > This package sets the Parameters for mkinitramfs/update-intramfs > before it regenerates the initrd.img of debian with a modified version. > > Use cases are the remove unnecessary kernel modules to reduce the > size of the initrd by using the parameters: > ``` > INITRAMFS_MODULES = "list" > INITRAMFS_MODULE_LIST += "ext4" > ``` > > Set the boot root during the initrd generation by setting `INITRAMFS_ROOT`. > > see also man pages of mkinitramfs and initramfs.conf. > > Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> > --- Are there any news on this patch? One thing that just came to my mind: Maybe a mechanism should be added to prevent multiple initramfs-config packages from being installed into the same image? I fear that otherwise it could be easy to accidentally pull in multiple such packages which would interfere with each other ... -- Harald > .../initramfs-config/initramfs-config_0.1.bb | 7 +++ > .../initramfs-config/files/control.tmpl | 12 +++++ > .../initramfs-config/files/postinst.tmpl | 50 +++++++++++++++++++ > .../initramfs-config/files/postrm.tmpl | 41 +++++++++++++++ > .../initramfs-config/initramfs-config.inc | 32 ++++++++++++ > 5 files changed, 142 insertions(+) > create mode 100644 meta-isar/recipes-support/initramfs-config/initramfs-config_0.1.bb > create mode 100644 meta/recipes-support/initramfs-config/files/control.tmpl > create mode 100644 meta/recipes-support/initramfs-config/files/postinst.tmpl > create mode 100644 meta/recipes-support/initramfs-config/files/postrm.tmpl > create mode 100644 meta/recipes-support/initramfs-config/initramfs-config.inc > > diff --git a/meta-isar/recipes-support/initramfs-config/initramfs-config_0.1.bb b/meta-isar/recipes-support/initramfs-config/initramfs-config_0.1.bb > new file mode 100644 > index 0000000..0eb70d7 > --- /dev/null > +++ b/meta-isar/recipes-support/initramfs-config/initramfs-config_0.1.bb > @@ -0,0 +1,7 @@ > +# > +# Copyright (C) Siemens ag, 2020 > +# > +# SPDX-License-Identifier: MIT > + > +require recipes-support/initramfs-config/initramfs-config.inc > + > diff --git a/meta/recipes-support/initramfs-config/files/control.tmpl b/meta/recipes-support/initramfs-config/files/control.tmpl > new file mode 100644 > index 0000000..66984eb > --- /dev/null > +++ b/meta/recipes-support/initramfs-config/files/control.tmpl > @@ -0,0 +1,12 @@ > +Source: ${PN} > +Section: misc > +Priority: optional > +Standards-Version: 3.9.6 > +Maintainer: isar-users <isar-users@googlegroups.com> > +Build-Depends: debhelper (>= 9) > + > + > +Package: ${PN} > +Architecture: any > +Depends: ${shlibs:Depends}, ${misc:Depends}, initramfs-tools-core, ${DEBIAN_DEPENDS} > +Description: Configuration files for a custom initramfs > diff --git a/meta/recipes-support/initramfs-config/files/postinst.tmpl b/meta/recipes-support/initramfs-config/files/postinst.tmpl > new file mode 100644 > index 0000000..e523906 > --- /dev/null > +++ b/meta/recipes-support/initramfs-config/files/postinst.tmpl > @@ -0,0 +1,50 @@ > +#!/bin/sh > +# postinst script for initramfs-config > +# > +# see: dh_installdeb(1) > + > +set -e > + > +case "$1" in > + configure) > + INITRAMFS_CONF=/etc/initramfs-tools/initramfs.conf > + if [ -f ${INITRAMFS_CONF} ]; then > + sed -i -E 's/(^MODULES=).*/\1${INITRAMFS_MODULES}/' ${INITRAMFS_CONF} > + sed -i -E 's/(^BUSYBOX=).*/\1${INITRAMFS_BUSYBOX}/' ${INITRAMFS_CONF} > + sed -i -E 's/(^COMPRESS=).*/\1${INITRAMFS_COMPRESS}/' ${INITRAMFS_CONF} > + sed -i -E 's/(^KEYMAP=).*/\1${INITRAMFS_KEYMAP}/' ${INITRAMFS_CONF} > + sed -i -E 's/(^DEVICE=).*/\1${INITRAMFS_NET_DEVICE}/' ${INITRAMFS_CONF} > + sed -i -E 's/(^NFSROOT=).*/\1${INITRAMFS_NFSROOT}/' ${INITRAMFS_CONF} > + sed -i -E 's/(^RUNSIZE=).*/\1${INITRAMFS_RUNSIZE}/' ${INITRAMFS_CONF} > + if grep -Fxq "ROOT=" "${INITRAMFS_CONF}"; then > + sed -i -E 's/(^ROOT=).*/\1${INITRAMFS_ROOT}/' ${INITRAMFS_CONF} > + else > + sed -i -E "\$aROOT=${INITRAMFS_ROOT}" ${INITRAMFS_CONF} > + fi > + fi > + > + MODULES_LIST_FILE=/etc/initramfs-tools/modules > + if [ -f ${MODULES_LIST_FILE} ]; then > + for modname in ${INITRAMFS_MODULE_LIST}; do > + if ! grep -Fxq "$modname" "${MODULES_LIST_FILE}"; then > + echo "$modname" >> "${MODULES_LIST_FILE}" > + fi > + done > + fi > + > + update-initramfs -v -u > + > + ;; > + abort-upgrade|abort-remove|abort-deconfigure) > + ;; > + > + *) > + echo "postinst called with unknown argument \`$1'" >&2 > + exit 1 > + ;; > +esac > +# dh_installdeb will replace this with shell code automatically > +# generated by other debhelper scripts. > +#DEBHELPER# > + > +exit 0 > diff --git a/meta/recipes-support/initramfs-config/files/postrm.tmpl b/meta/recipes-support/initramfs-config/files/postrm.tmpl > new file mode 100644 > index 0000000..115d9b6 > --- /dev/null > +++ b/meta/recipes-support/initramfs-config/files/postrm.tmpl > @@ -0,0 +1,41 @@ > +#!/bin/sh > +# postrm script for initramfs-config > +# > +# see: dh_installdeb(1) > + > +set -e > + > +case "$1" in > + purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) > + # back to the debian defaults > + INITRAMFS_CONF=/etc/initramfs-tools/initramfs.conf > + sed -i -E 's/(^MODULES=).*/\1most/' ${INITRAMFS_CONF} > + sed -i -E 's/(^BUSYBOX=).*/\1auto/' ${INITRAMFS_CONF} > + sed -i -E 's/(^COMPRESS=).*/\1gzip/' ${INITRAMFS_CONF} > + sed -i -E 's/(^KEYMAP=).*/\1n/' ${INITRAMFS_CONF} > + sed -i -E 's/(^DEVICE=).*/\1/' ${INITRAMFS_CONF} > + sed -i -E 's/(^NFSROOT=).*/\1auto/' ${INITRAMFS_CONF} > + sed -i -E 's/(^RUNSIZE=).*/\110%/' ${INITRAMFS_CONF} > + sed -i -E 's/(^ROOT=).*//' ${INITRAMFS_CONF} > + > + # remove the added modules > + MODULES_LIST_FILE=/etc/initramfs-tools/modules > + for modname in ${INITRAMFS_MODULE_LIST}; do > + sed -i -E 's/$modname//' > + done > + > + update-initramfs -v -u > + ;; > + > + *) > + echo "postrm called with unknown argument \`$1'" >&2 > + exit 1 > + ;; > +esac > + > +# dh_installdeb will replace this with shell code automatically > +# generated by other debhelper scripts. > + > +#DEBHELPER# > + > +exit 0 > diff --git a/meta/recipes-support/initramfs-config/initramfs-config.inc b/meta/recipes-support/initramfs-config/initramfs-config.inc > new file mode 100644 > index 0000000..16049a9 > --- /dev/null > +++ b/meta/recipes-support/initramfs-config/initramfs-config.inc > @@ -0,0 +1,32 @@ > +# This software is a part of ISAR. > +# Copyright (C) 2020 Siemens AG > +# > +# SPDX-License-Identifier: MIT > +inherit dpkg-raw > +inherit template > +DESCRIPTION = "Recipe to set the initramfs configuration and generate a new ramfs" > + > +FILESEXTRAPATHS_prepend := "${FILE_DIRNAME}/files:" > + > +SRC_URI = "file://postinst.tmpl \ > + file://postrm.tmpl \ > + file://control.tmpl \ > + " > + > +INITRAMFS_MODULES ?= "most" > +INITRAMFS_BUSYBOX ?= "auto" > +INITRAMFS_COMPRESS ?= "gzip" > +INITRAMFS_KEYMAP ?= "n" > +INITRAMFS_NET_DEVICE ?= "" > +INITRAMFS_NFSROOT ?= "auto" > +INITRAMFS_RUNSIZE ?= "10%" > +INITRAMFS_ROOT ?= "" > +INITRAMFS_MODULE_LIST ?= "" > +CREATE_NEW_INITRAMFS ?= "n" > +KERNEL_PACKAGE = "${@ ("linux-image-" + d.getVar("KERNEL_NAME", True)) if d.getVar("KERNEL_NAME", True) else ""}" > +DEBIAN_DEPENDS += ", ${KERNEL_PACKAGE}" > +TEMPLATE_FILES = "postinst.tmpl control.tmpl postrm.tmpl" > +TEMPLATE_VARS += "INITRAMFS_MODULES INITRAMFS_BUSYBOX INITRAMFS_COMPRESS \ > + INITRAMFS_KEYMAP INITRAMFS_NET_DEVICE INITRAMFS_NFSROOT \ > + INITRAMFS_RUNSIZE INITRAMFS_ROOT INITRAMFS_MODULE_LIST \ > + CREATE_NEW_INITRAMFS DEBIAN_DEPENDS PN" > -- > 2.20.1 > ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v6 2/3] meta/classes: Generate ova image for vmware or virtualbox 2020-06-25 12:56 ` [PATCH v6 0/3] some images Q. Gylstorff 2020-06-25 12:56 ` [PATCH v6 1/3] meta/support: Generate a custom initramfs Q. Gylstorff @ 2020-06-25 12:56 ` Q. Gylstorff 2020-06-25 12:56 ` [PATCH v6 3/3] meta/classes: add cpiogz-img Q. Gylstorff 2020-10-13 10:22 ` [PATCH v6 0/3] some images Jan Kiszka 3 siblings, 0 replies; 58+ messages in thread From: Q. Gylstorff @ 2020-06-25 12:56 UTC (permalink / raw) To: isar-users, hws, jan.kiszka; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- meta-isar/conf/machine/virtualbox.conf | 16 ++ meta-isar/conf/machine/vmware.conf | 16 ++ .../multiconfig/virtualbox-ova-buster.conf | 8 + meta/classes/virtual-machine-image.bbclass | 92 +++++++++++ .../files/virtual-machine-template.ovf.tmpl | 155 ++++++++++++++++++ .../virtual-machine-template_0.1.bb | 17 ++ scripts/ci_build.sh | 3 +- 7 files changed, 306 insertions(+), 1 deletion(-) create mode 100644 meta-isar/conf/machine/virtualbox.conf create mode 100644 meta-isar/conf/machine/vmware.conf create mode 100644 meta-isar/conf/multiconfig/virtualbox-ova-buster.conf create mode 100644 meta/classes/virtual-machine-image.bbclass create mode 100644 meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl create mode 100644 meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb diff --git a/meta-isar/conf/machine/virtualbox.conf b/meta-isar/conf/machine/virtualbox.conf new file mode 100644 index 0000000..9b823ff --- /dev/null +++ b/meta-isar/conf/machine/virtualbox.conf @@ -0,0 +1,16 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +DISTRO_ARCH ?= "amd64" + +KERNEL_NAME ?= "amd64" +BOOTLOADER ?= "grub" + +WKS_FILE ?= "sdimage-efi" + +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" + +VMDK_SUBFORMAT = "monolithicSparse" +IMAGE_TYPE ?= "virtual-machine-image" diff --git a/meta-isar/conf/machine/vmware.conf b/meta-isar/conf/machine/vmware.conf new file mode 100644 index 0000000..b6b4cc7 --- /dev/null +++ b/meta-isar/conf/machine/vmware.conf @@ -0,0 +1,16 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +DISTRO_ARCH ?= "amd64" + +KERNEL_NAME ?= "amd64" +BOOTLOADER ?= "grub" + +WKS_FILE ?= "sdimage-efi" + +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" + +VMDK_SUBFORMAT = "streamOptimized" +IMAGE_TYPE ?= "virtual-machine-image" diff --git a/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf new file mode 100644 index 0000000..3042556 --- /dev/null +++ b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf @@ -0,0 +1,8 @@ +# +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + + +MACHINE = "virtualbox" +DISTRO = "debian-buster" diff --git a/meta/classes/virtual-machine-image.bbclass b/meta/classes/virtual-machine-image.bbclass new file mode 100644 index 0000000..4d382b4 --- /dev/null +++ b/meta/classes/virtual-machine-image.bbclass @@ -0,0 +1,92 @@ +# This software is a part of ISAR. +# Copyright (C) 2019-2020 Siemens AG +# +# This class allows to generate images for vmware and virtualbox +# + +inherit buildchroot +inherit wic-img +IMAGER_BUILD_DEPS += "virtual-machine-template" +IMAGER_INSTALL += "qemu-utils gawk uuid-runtime virtual-machine-template" +export OVA_NAME ?= "${IMAGE_FULLNAME}" +export OVA_MEMORY ?= "8192" +export OVA_NUMBER_OF_CPU ?= "4" +export OVA_VRAM ?= "64" +export OVA_FIRMWARE ?= "efi" +export OVA_ACPI ?= "true" +export OVA_3D_ACCEL ?= "false" +export OVA_CLIPBOARD ?= "bidirectional" +SOURCE_IMAGE_FILE ?= "${IMAGE_FULLNAME}.wic.img" +OVA_SHA_ALG ?= "1" +VIRTUAL_MACHINE_IMAGE_TYPE ?= "vmdk" +export VIRTUAL_MACHINE_IMAGE_FILE ?= "${IMAGE_FULLNAME}-disk001.${VIRTUAL_MACHINE_IMAGE_TYPE}" +VIRTUAL_MACHINE_DISK ?= "${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE}" +# for virtualbox this needs to be monolithicSparse +# for vmware this needs to be streamOptimized +#VMDK_SUBFORMAT ?= "streamOptimized" +export VMDK_SUBFORMAT ?= "monolithicSparse" +def set_convert_options(d): + format = d.getVar("VIRTUAL_MACHINE_IMAGE_TYPE") + if format == "vmdk": + return "-o subformat=%s" % d.getVar("VMDK_SUBFORMAT") + else: + return "" + + +CONVERSION_OPTIONS = "${@set_convert_options(d)}" + +do_convert_wic() { + rm -f '${DEPLOY_DIR_IMAGE}/${VIRTUAL_MACHINE_IMAGE_FILE}' + image_do_mounts + bbnote "Creating ${VIRTUAL_MACHINE_IMAGE_FILE} from ${WIC_IMAGE_FILE}" + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \ + /usr/bin/qemu-img convert -f raw -O ${VIRTUAL_MACHINE_IMAGE_TYPE} ${CONVERSION_OPTIONS} \ + '${PP_DEPLOY}/${SOURCE_IMAGE_FILE}' '${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE}' +} + +addtask convert_wic before do_build after do_wic_image do_copy_boot_files do_install_imager_deps do_transform_template + +# Generate random MAC addresses just as VirtualBox does, the format is +# their assigned prefix for the first 3 bytes followed by 3 random bytes. +VBOX_MAC_PREFIX = "080027" +macgen() { + hexdump -n3 -e "\"${VBOX_MAC_PREFIX}%06X\n\"" /dev/urandom +} +get_disksize() { + image_do_mounts + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \ + qemu-img info -f vmdk "${VIRTUAL_MACHINE_DISK}" | gawk 'match($0, /^virtual size:.*\(([0-9]+) bytes\)/, a) {print a[1]}' +} +do_create_ova() { + if [ ! ${VIRTUAL_MACHINE_IMAGE_TYPE} = "vmdk" ]; then + exit 0 + fi + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ova' + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ovf' + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.mf' + + export PRIMARY_MAC=$(macgen) + export SECONDARY_MAC=$(macgen) + export DISK_NAME=$(basename -s .vmdk ${VIRTUAL_MACHINE_DISK}) + export DISK_SIZE_BYTES=$(get_disksize) + export LAST_CHANGE=$(date -u "+%Y-%m-%dT%H:%M:%SZ") + export OVA_FIRMWARE_VIRTUALBOX=$(echo ${OVA_FIRMWARE} | tr '[a-z]' '[A-Z]') + image_do_mounts + sudo -Es chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} <<'EOSUDO' + export DISK_UUID=$(uuidgen) + export VM_UUID=$(uuidgen) + # create ovf + cat /usr/share/virtual-machine-template/virtual-machine-template.ovf.tmpl | envsubst > ${PP_DEPLOY}/${OVA_NAME}.ovf + tar -H ustar -cvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${OVA_NAME}.ovf + + # virtual box needs here a manifest file vmware does not want to accept the format + if [ "${VMDK_SUBFORMAT}" = "monolithicSparse" ]; then + echo "SHA${OVA_SHA_ALG}(${VIRTUAL_MACHINE_IMAGE_FILE})= $(sha${OVA_SHA_ALG}sum ${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE} | cut -d' ' -f1)" >> ${PP_DEPLOY}/${OVA_NAME}.mf + echo "SHA${OVA_SHA_ALG}(${OVA_NAME}.ovf)= $(sha${OVA_SHA_ALG}sum ${PP_DEPLOY}/${OVA_NAME}.ovf | cut -d' ' -f1)" >> ${PP_DEPLOY}/${OVA_NAME}.mf + tar -H ustar -uvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${OVA_NAME}.mf + fi + tar -H ustar -uvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${VIRTUAL_MACHINE_IMAGE_FILE} +EOSUDO +} + +addtask do_create_ova after do_convert_wic before do_deploy diff --git a/meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl b/meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl new file mode 100644 index 0000000..e6b5305 --- /dev/null +++ b/meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl @@ -0,0 +1,155 @@ +<?xml version="1.0"?> +<Envelope ovf:version="1.0" xml:lang="en-US" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vbox="http://www.virtualbox.org/ovf/machine"> + <References> + <File ovf:href="${VIRTUAL_MACHINE_IMAGE_FILE}" ovf:id="file1"/> + </References> + <DiskSection> + <Info>List of the virtual disks used in the package</Info> + <Disk ovf:capacity="${DISK_SIZE_BYTES}" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#${VMDK_SUBFORMAT}" vbox:uuid="${DISK_UUID}"/> + </DiskSection> + <NetworkSection> + <Info>Logical networks used in the package</Info> + <Network ovf:name="NAT"> + <Description>Logical network used by this appliance.</Description> + </Network> + </NetworkSection> + <VirtualSystem ovf:id="${OVA_NAME}"> + <Info>A virtual machine</Info> + <OperatingSystemSection ovf:id="96"> + <Info>The kind of installed guest operating system</Info> + <Description>Debian_64</Description> + <vbox:OSType ovf:required="false">Debian_64</vbox:OSType> + </OperatingSystemSection> + <VirtualHardwareSection> + <Info>Virtual hardware requirements for a virtual machine</Info> + <System> + <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> + <vssd:InstanceID>0</vssd:InstanceID> + <vssd:VirtualSystemIdentifier>${OVA_NAME}</vssd:VirtualSystemIdentifier> + <vssd:VirtualSystemType>virtualbox-2.2</vssd:VirtualSystemType> + </System> + <Item> + <rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits> + <rasd:Caption>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:Caption> + <rasd:Description>Number of virtual CPUs</rasd:Description> + <rasd:ElementName>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:ElementName> + <rasd:InstanceID>1</rasd:InstanceID> + <rasd:ResourceType>3</rasd:ResourceType> + <rasd:VirtualQuantity>${OVA_NUMBER_OF_CPU}</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:AllocationUnits>MegaBytes</rasd:AllocationUnits> + <rasd:Caption>${OVA_MEMORY} MB of memory</rasd:Caption> + <rasd:Description>Memory Size</rasd:Description> + <rasd:ElementName>${OVA_MEMORY} MB of memory</rasd:ElementName> + <rasd:InstanceID>2</rasd:InstanceID> + <rasd:ResourceType>4</rasd:ResourceType> + <rasd:VirtualQuantity>${OVA_MEMORY}</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:Address>0</rasd:Address> + <rasd:Caption>ideController0</rasd:Caption> + <rasd:Description>IDE Controller</rasd:Description> + <rasd:ElementName>ideController0</rasd:ElementName> + <rasd:InstanceID>3</rasd:InstanceID> + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> + <rasd:ResourceType>5</rasd:ResourceType> + </Item> + <Item> + <rasd:Address>1</rasd:Address> + <rasd:Caption>ideController1</rasd:Caption> + <rasd:Description>IDE Controller</rasd:Description> + <rasd:ElementName>ideController1</rasd:ElementName> + <rasd:InstanceID>4</rasd:InstanceID> + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> + <rasd:ResourceType>5</rasd:ResourceType> + </Item> + <Item> + <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> + <rasd:Caption>Ethernet adapter on 'NAT'</rasd:Caption> + <rasd:Connection>NAT</rasd:Connection> + <rasd:ElementName>Ethernet adapter on 'NAT'</rasd:ElementName> + <rasd:InstanceID>5</rasd:InstanceID> + <rasd:ResourceSubType>E1000</rasd:ResourceSubType> + <rasd:ResourceType>10</rasd:ResourceType> + </Item> + <Item> + <rasd:AddressOnParent>0</rasd:AddressOnParent> + <rasd:Caption>disk1</rasd:Caption> + <rasd:Description>Disk Image</rasd:Description> + <rasd:ElementName>disk1</rasd:ElementName> + <rasd:HostResource>/disk/vmdisk1</rasd:HostResource> + <rasd:InstanceID>6</rasd:InstanceID> + <rasd:Parent>3</rasd:Parent> + <rasd:ResourceType>17</rasd:ResourceType> + </Item> + <vmw:Config ovf:required="false" vmw:key="firmware" vmw:value="${OVA_FIRMWARE}"/> + <vmw:Config ovf:required="false" vmw:key="tools.syncTimeWithHost" vmw:value="false"/> + <vmw:Config ovf:required="false" vmw:key="tools.afterPowerOn" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.afterResume" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.beforeGuestShutdown" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.beforeGuestStandby" vmw:value="true"/> + <vmw:ExtraConfig ovf:required="false" vmw:key="virtualHW.productCompatibility" vmw:value="hosted"/> + </VirtualHardwareSection> + <vbox:Machine ovf:required="false" version="1.12-linux" uuid="{${VM_UUID}}" name="${OVA_NAME}" OSType="Debian_64" snapshotFolder="Snapshots" lastStateChange="${LAST_CHANGE}"> + <ovf:Info>Complete VirtualBox machine configuration in VirtualBox format</ovf:Info> + <Hardware> + <CPU count="${OVA_NUMBER_OF_CPU}"> + <PAE enabled="true"/> + <HardwareVirtExLargePages enabled="false"/> + </CPU> + <Memory RAMSize="${OVA_MEMORY}"/> + <Firmware type="${OVA_FIRMWARE_VIRTUALBOX}"/> + <Boot> + <Order position="1" device="HardDisk"/> + <Order position="2" device="None"/> + <Order position="3" device="None"/> + <Order position="4" device="None"/> + </Boot> + <Display VRAMSize="${OVA_VRAM}" monitorCount="1" accelerate3D="${OVA_3D_ACCEL}" accelerate2DVideo="false"/> + <VideoRecording enabled="false" file="Test.webm" horzRes="640" vertRes="480"/> + <RemoteDisplay enabled="false" authType="Null"/> + <BIOS> + <IOAPIC enabled="${OVA_ACPI}"/> + </BIOS> + <USBController enabled="false" enabledEhci="false"/> + <Network> + <Adapter slot="0" enabled="true" MACAddress="${PRIMARY_MAC}" cable="true" speed="0" type="virtio"> + <DisabledModes/> + <NAT> + <DNS pass-domain="true" use-proxy="false" use-host-resolver="false"/> + <Alias logging="false" proxy-only="false" use-same-ports="false"/> + </NAT> + </Adapter> + </Network> + <LPT> + <Port slot="1" enabled="false" IOBase="0x378" IRQ="7"/> + </LPT> + <AudioAdapter driver="Pulse" enabled="false"/> + <RTC localOrUTC="local"/> + <SharedFolders/> + <Clipboard mode="Disabled"/> + <DragAndDrop mode="Disabled"/> + <IO> + <IoCache enabled="true" size="5"/> + <BandwidthGroups/> + </IO> + <HostPci> + <Devices/> + </HostPci> + <EmulatedUSB> + <CardReader enabled="false"/> + </EmulatedUSB> + <Guest memoryBalloonSize="0"/> + <GuestProperties/> + </Hardware> + <StorageControllers> + <StorageController name="IDE Controller" type="PIIX4" PortCount="2" useHostIOCache="true" Bootable="true"> + <AttachedDevice type="HardDisk" port="0" device="0"> + <Image uuid="{${DISK_UUID}}"/> + </AttachedDevice> + </StorageController> + </StorageControllers> + </vbox:Machine> + </VirtualSystem> +</Envelope> diff --git a/meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb b/meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb new file mode 100644 index 0000000..dc67355 --- /dev/null +++ b/meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb @@ -0,0 +1,17 @@ +# This software is a part of ISAR. +# +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +inherit dpkg-raw + + +SRC_URI += "file://virtual-machine-template.ovf.tmpl" + +do_install() { + TARGET=${D}/usr/share/virtual-machine-template + install -m 0755 -d ${TARGET} + install -m 0740 ${WORKDIR}/virtual-machine-template.ovf.tmpl \ + ${TARGET}/virtual-machine-template.ovf.tmpl +} diff --git a/scripts/ci_build.sh b/scripts/ci_build.sh index adc403b..419b699 100755 --- a/scripts/ci_build.sh +++ b/scripts/ci_build.sh @@ -35,7 +35,8 @@ TARGETS_SET="\ mc:qemumipsel-buster:isar-image-base \ mc:qemumipsel-bullseye:isar-image-base \ mc:nand-ubi-demo-buster:isar-image-ubi \ - mc:rpi-stretch:isar-image-base" + mc:rpi-stretch:isar-image-base \ + mc:virtualbox-ova-buster:isar-image-base" # qemu-user-static of <= buster too old to build that # mc:qemuarm64-buster:isar-image-base # mc:qemuarm64-bullseye:isar-image-base -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v6 3/3] meta/classes: add cpiogz-img 2020-06-25 12:56 ` [PATCH v6 0/3] some images Q. Gylstorff 2020-06-25 12:56 ` [PATCH v6 1/3] meta/support: Generate a custom initramfs Q. Gylstorff 2020-06-25 12:56 ` [PATCH v6 2/3] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff @ 2020-06-25 12:56 ` Q. Gylstorff 2020-10-13 10:22 ` [PATCH v6 0/3] some images Jan Kiszka 3 siblings, 0 replies; 58+ messages in thread From: Q. Gylstorff @ 2020-06-25 12:56 UTC (permalink / raw) To: isar-users, hws, jan.kiszka; +Cc: Quirin Gylstorff, Michael Adler From: Quirin Gylstorff <quirin.gylstorff@siemens.com> to create a initramfs like filesystem. Signed-off-by: Michael Adler <michael.adler@siemens.com> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- .../multiconfig/qemuamd64-buster-cpiogz.conf | 9 +++++++++ meta/classes/cpiogz-img.bbclass | 20 +++++++++++++++++++ scripts/ci_build.sh | 1 + 3 files changed, 30 insertions(+) create mode 100644 meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf create mode 100644 meta/classes/cpiogz-img.bbclass diff --git a/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf b/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf new file mode 100644 index 0000000..cadcdac --- /dev/null +++ b/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf @@ -0,0 +1,9 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +MACHINE ?= "qemuamd64" +DISTRO ?= "debian-buster" + +IMAGE_TYPE = "cpiogz-img" diff --git a/meta/classes/cpiogz-img.bbclass b/meta/classes/cpiogz-img.bbclass new file mode 100644 index 0000000..8efdcb4 --- /dev/null +++ b/meta/classes/cpiogz-img.bbclass @@ -0,0 +1,20 @@ +# This software is a part of ISAR. +# Copyright (C) 2020 Siemens AG +# +# SPDX-License-Identifier: MIT + +CPIOGZ_FNAME ?= "${IMAGE_FULLNAME}.cpio.gz" +CPIOGZ_IMAGE_FILE = "${DEPLOY_DIR_IMAGE}/${CPIOGZ_FNAME}" +IMAGER_INSTALL += "cpio" +CPIO_IMAGE_FORMAT ?= "newc" +do_cpiogz_image() { + sudo rm -f ${CPIOGZ_IMAGE_FILE} + image_do_mounts + sudo chroot ${BUILDCHROOT_DIR} \ + sh -c "cd ${PP_ROOTFS}; /usr/bin/find . | \ + /usr/bin/cpio -H ${CPIO_IMAGE_FORMAT} -o | /usr/bin/gzip -9 > \ + ${PP_DEPLOY}/${CPIOGZ_FNAME}" + sudo chown $(id -u):$(id -g) ${CPIOGZ_IMAGE_FILE} +} + +addtask cpiogz_image before do_image after do_image_tools diff --git a/scripts/ci_build.sh b/scripts/ci_build.sh index 419b699..eb89b87 100755 --- a/scripts/ci_build.sh +++ b/scripts/ci_build.sh @@ -30,6 +30,7 @@ TARGETS_SET="\ mc:qemuamd64-stretch:isar-image-base \ mc:qemuamd64-buster:isar-image-base \ mc:qemuamd64-buster-tgz:isar-image-base \ + mc:qemuamd64-buster-cpiogz:isar-image-base \ mc:qemuamd64-bullseye:isar-image-base \ mc:qemumipsel-stretch:isar-image-base \ mc:qemumipsel-buster:isar-image-base \ -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v6 0/3] some images 2020-06-25 12:56 ` [PATCH v6 0/3] some images Q. Gylstorff ` (2 preceding siblings ...) 2020-06-25 12:56 ` [PATCH v6 3/3] meta/classes: add cpiogz-img Q. Gylstorff @ 2020-10-13 10:22 ` Jan Kiszka 2021-02-05 10:07 ` Gylstorff Quirin 3 siblings, 1 reply; 58+ messages in thread From: Jan Kiszka @ 2020-10-13 10:22 UTC (permalink / raw) To: Q. Gylstorff, isar-users, hws On 25.06.20 14:56, Q. Gylstorff wrote: > From: Quirin Gylstorff <quirin.gylstorff@siemens.com> > > - Generate cpio images for rescue images > - generate custom initramfs > - generate ova images > > Changes V2: > - initramfs modification is now a package > - ova-wic-img was renamed to virtual-machine-image > - virtual-machine-image do_convert_wic supports now other image > formats > - Add tests > - cpiogz now use chown instead of userspec > > Changes V3: > - Add tests to build-ci > - add postrm to initramfs-config > - use sdimage-efi for virtualbox images > - changed maintainer > > Changes V4: > - use templates from debhelper for postinst and postrm scripts > > Changes V5: > - add virtual-machine-template package to add the template as extra file to the build > > Changes V6: > - whitespace fix > - initramfs-config is now a inc file instead of a recipe > - meta isar contains a default implementation of intramfs-config > > Quirin Gylstorff (3): > meta/support: Generate a custom initramfs > meta/classes: Generate ova image for vmware or virtualbox > meta/classes: add cpiogz-img > > meta-isar/conf/machine/virtualbox.conf | 16 ++ > meta-isar/conf/machine/vmware.conf | 16 ++ > .../multiconfig/qemuamd64-buster-cpiogz.conf | 9 + > .../multiconfig/virtualbox-ova-buster.conf | 8 + > .../initramfs-config/initramfs-config_0.1.bb | 7 + > meta/classes/cpiogz-img.bbclass | 20 +++ > meta/classes/virtual-machine-image.bbclass | 92 +++++++++++ > .../files/virtual-machine-template.ovf.tmpl | 155 ++++++++++++++++++ > .../virtual-machine-template_0.1.bb | 17 ++ > .../initramfs-config/files/control.tmpl | 12 ++ > .../initramfs-config/files/postinst.tmpl | 50 ++++++ > .../initramfs-config/files/postrm.tmpl | 41 +++++ > .../initramfs-config/initramfs-config.inc | 32 ++++ > scripts/ci_build.sh | 4 +- > 14 files changed, 478 insertions(+), 1 deletion(-) > create mode 100644 meta-isar/conf/machine/virtualbox.conf > create mode 100644 meta-isar/conf/machine/vmware.conf > create mode 100644 meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf > create mode 100644 meta-isar/conf/multiconfig/virtualbox-ova-buster.conf > create mode 100644 meta-isar/recipes-support/initramfs-config/initramfs-config_0.1.bb > create mode 100644 meta/classes/cpiogz-img.bbclass > create mode 100644 meta/classes/virtual-machine-image.bbclass > create mode 100644 meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl > create mode 100644 meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb > create mode 100644 meta/recipes-support/initramfs-config/files/control.tmpl > create mode 100644 meta/recipes-support/initramfs-config/files/postinst.tmpl > create mode 100644 meta/recipes-support/initramfs-config/files/postrm.tmpl > create mode 100644 meta/recipes-support/initramfs-config/initramfs-config.inc > What is the status of this, also compared to Harald's proposal for custom initramfs generation? Jan -- Siemens AG, T RDA IOT Corporate Competence Center Embedded Linux ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v6 0/3] some images 2020-10-13 10:22 ` [PATCH v6 0/3] some images Jan Kiszka @ 2021-02-05 10:07 ` Gylstorff Quirin 0 siblings, 0 replies; 58+ messages in thread From: Gylstorff Quirin @ 2021-02-05 10:07 UTC (permalink / raw) To: Jan Kiszka, isar-users, hws On 10/13/20 12:22 PM, Jan Kiszka wrote: > On 25.06.20 14:56, Q. Gylstorff wrote: >> From: Quirin Gylstorff <quirin.gylstorff@siemens.com> >> >> - Generate cpio images for rescue images >> - generate custom initramfs >> - generate ova images >> >> Changes V2: >> - initramfs modification is now a package >> - ova-wic-img was renamed to virtual-machine-image >> - virtual-machine-image do_convert_wic supports now other image >> formats >> - Add tests >> - cpiogz now use chown instead of userspec >> >> Changes V3: >> - Add tests to build-ci >> - add postrm to initramfs-config >> - use sdimage-efi for virtualbox images >> - changed maintainer >> >> Changes V4: >> - use templates from debhelper for postinst and postrm scripts >> >> Changes V5: >> - add virtual-machine-template package to add the template as extra file to the build >> >> Changes V6: >> - whitespace fix >> - initramfs-config is now a inc file instead of a recipe >> - meta isar contains a default implementation of intramfs-config >> >> Quirin Gylstorff (3): >> meta/support: Generate a custom initramfs >> meta/classes: Generate ova image for vmware or virtualbox >> meta/classes: add cpiogz-img >> >> meta-isar/conf/machine/virtualbox.conf | 16 ++ >> meta-isar/conf/machine/vmware.conf | 16 ++ >> .../multiconfig/qemuamd64-buster-cpiogz.conf | 9 + >> .../multiconfig/virtualbox-ova-buster.conf | 8 + >> .../initramfs-config/initramfs-config_0.1.bb | 7 + >> meta/classes/cpiogz-img.bbclass | 20 +++ >> meta/classes/virtual-machine-image.bbclass | 92 +++++++++++ >> .../files/virtual-machine-template.ovf.tmpl | 155 ++++++++++++++++++ >> .../virtual-machine-template_0.1.bb | 17 ++ >> .../initramfs-config/files/control.tmpl | 12 ++ >> .../initramfs-config/files/postinst.tmpl | 50 ++++++ >> .../initramfs-config/files/postrm.tmpl | 41 +++++ >> .../initramfs-config/initramfs-config.inc | 32 ++++ >> scripts/ci_build.sh | 4 +- >> 14 files changed, 478 insertions(+), 1 deletion(-) >> create mode 100644 meta-isar/conf/machine/virtualbox.conf >> create mode 100644 meta-isar/conf/machine/vmware.conf >> create mode 100644 meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf >> create mode 100644 meta-isar/conf/multiconfig/virtualbox-ova-buster.conf >> create mode 100644 meta-isar/recipes-support/initramfs-config/initramfs-config_0.1.bb >> create mode 100644 meta/classes/cpiogz-img.bbclass >> create mode 100644 meta/classes/virtual-machine-image.bbclass >> create mode 100644 meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl >> create mode 100644 meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb >> create mode 100644 meta/recipes-support/initramfs-config/files/control.tmpl >> create mode 100644 meta/recipes-support/initramfs-config/files/postinst.tmpl >> create mode 100644 meta/recipes-support/initramfs-config/files/postrm.tmpl >> create mode 100644 meta/recipes-support/initramfs-config/initramfs-config.inc >> > > What is the status of this, also compared to Harald's proposal for > custom initramfs generation? Sorry for the late answer. This Patch modifies the initramfs generation on the target So you have the same behavior as on a standard Debian installation. If you want the same behavior Harald's proposal you need to install all the packages f from the variable `INITRAMFS_INSTALL` into the rootfs. IHMO Harald's Proposal is better for most of our use cases, as most of the time kernel and initramfs are only touched by system updates and not during the package update. Quirin > > Jan > ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v7 0/2] CPIO & OVA Images 2020-04-23 9:46 ` [PATCH v5 1/3] meta/support: Generate a custom initramfs Q. Gylstorff 2020-06-18 15:54 ` Harald Seiler @ 2021-02-05 10:52 ` Q. Gylstorff 2021-02-05 10:52 ` [PATCH v7 1/2] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff ` (2 more replies) 1 sibling, 3 replies; 58+ messages in thread From: Q. Gylstorff @ 2021-02-05 10:52 UTC (permalink / raw) To: Jan.Kiszka, isar-users; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> - Generate cpio images for rescue images - generate ova images for VMWare & Virtualbox Changes V2: - initramfs modification is now a package - ova-wic-img was renamed to virtual-machine-image - virtual-machine-image do_convert_wic supports now other image formats - Add tests - cpiogz now use chown instead of userspec Changes V3: - Add tests to build-ci - add postrm to initramfs-config - use sdimage-efi for virtualbox images - changed maintainer Changes V4: - use templates from debhelper for postinst and postrm scripts Changes V5: - add virtual-machine-template package to add the template as extra file to the build Changes V6: - whitespace fix - initramfs-config is now a inc file instead of a recipe - meta isar contains a default implementation of intramfs-config Changes V7: - drop initramfs-config in favour of https://groups.google.com/g/isar-users/c/47EZAUTclZs/m/npCfE6zqCwAJ - clarify OVA commit message - rebase on origin/next f5a6fdfd9aad49202093aab2158f625429eaf7c5 Quirin Gylstorff (2): meta/classes: Generate ova image for vmware or virtualbox meta/classes: add cpiogz-img doc/user_manual.md | 1 + meta-isar/conf/machine/virtualbox.conf | 16 ++ meta-isar/conf/machine/vmware.conf | 16 ++ .../multiconfig/qemuamd64-buster-cpiogz.conf | 9 + .../multiconfig/virtualbox-ova-buster.conf | 8 + meta/classes/cpiogz-img.bbclass | 20 +++ meta/classes/virtual-machine-image.bbclass | 92 +++++++++++ .../files/virtual-machine-template.ovf.tmpl | 155 ++++++++++++++++++ .../virtual-machine-template_0.1.bb | 17 ++ scripts/ci_build.sh | 5 +- 10 files changed, 338 insertions(+), 1 deletion(-) create mode 100644 meta-isar/conf/machine/virtualbox.conf create mode 100644 meta-isar/conf/machine/vmware.conf create mode 100644 meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf create mode 100644 meta-isar/conf/multiconfig/virtualbox-ova-buster.conf create mode 100644 meta/classes/cpiogz-img.bbclass create mode 100644 meta/classes/virtual-machine-image.bbclass create mode 100644 meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl create mode 100644 meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v7 1/2] meta/classes: Generate ova image for vmware or virtualbox 2021-02-05 10:52 ` [PATCH v7 0/2] CPIO & OVA Images Q. Gylstorff @ 2021-02-05 10:52 ` Q. Gylstorff 2021-02-05 11:16 ` Jan Kiszka 2021-02-05 10:52 ` [PATCH v7 2/2] meta/classes: add cpiogz-img Q. Gylstorff 2021-02-05 15:57 ` [PATCH v8 0/2] CPIO & OVA Images Q. Gylstorff 2 siblings, 1 reply; 58+ messages in thread From: Q. Gylstorff @ 2021-02-05 10:52 UTC (permalink / raw) To: Jan.Kiszka, isar-users; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> This allows to generate a ova file for virtualbox or vmware. The images differ in the setting of the variable `VMDK_SUBFORMAT`. - `streamOptimized` is used for Vmware Workstation - `monolithicSparse` is used for Virtualbox This is necessary as virtualbox throws an import error for a `streamOptimized` version. The ova for Virtualbox is also bigger due the disk format. The default machine settings are: - 4 CPU Cores with 8GB RAM Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- doc/user_manual.md | 1 + meta-isar/conf/machine/virtualbox.conf | 16 ++ meta-isar/conf/machine/vmware.conf | 16 ++ .../multiconfig/virtualbox-ova-buster.conf | 8 + meta/classes/virtual-machine-image.bbclass | 92 +++++++++++ .../files/virtual-machine-template.ovf.tmpl | 155 ++++++++++++++++++ .../virtual-machine-template_0.1.bb | 17 ++ scripts/ci_build.sh | 3 +- 8 files changed, 307 insertions(+), 1 deletion(-) create mode 100644 meta-isar/conf/machine/virtualbox.conf create mode 100644 meta-isar/conf/machine/vmware.conf create mode 100644 meta-isar/conf/multiconfig/virtualbox-ova-buster.conf create mode 100644 meta/classes/virtual-machine-image.bbclass create mode 100644 meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl create mode 100644 meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb diff --git a/doc/user_manual.md b/doc/user_manual.md index a4f3d1d..8b8ac7c 100644 --- a/doc/user_manual.md +++ b/doc/user_manual.md @@ -367,6 +367,7 @@ Isar can generate various images types for specific machine. The type of the ima - `rpi-sdimg` - A complete, partitioned Raspberry Pi SD card image (default option for the `rpi` machine). - `wic-img` - A full disk image with user-specified partitions created and populated using the wic tool. - `ubi-img` - A image for use on mtd nand partitions employing UBI + - `virtual-machine-image` - A image for use on VirtualBox or VMware --- diff --git a/meta-isar/conf/machine/virtualbox.conf b/meta-isar/conf/machine/virtualbox.conf new file mode 100644 index 0000000..9b823ff --- /dev/null +++ b/meta-isar/conf/machine/virtualbox.conf @@ -0,0 +1,16 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +DISTRO_ARCH ?= "amd64" + +KERNEL_NAME ?= "amd64" +BOOTLOADER ?= "grub" + +WKS_FILE ?= "sdimage-efi" + +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" + +VMDK_SUBFORMAT = "monolithicSparse" +IMAGE_TYPE ?= "virtual-machine-image" diff --git a/meta-isar/conf/machine/vmware.conf b/meta-isar/conf/machine/vmware.conf new file mode 100644 index 0000000..b6b4cc7 --- /dev/null +++ b/meta-isar/conf/machine/vmware.conf @@ -0,0 +1,16 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +DISTRO_ARCH ?= "amd64" + +KERNEL_NAME ?= "amd64" +BOOTLOADER ?= "grub" + +WKS_FILE ?= "sdimage-efi" + +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" + +VMDK_SUBFORMAT = "streamOptimized" +IMAGE_TYPE ?= "virtual-machine-image" diff --git a/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf new file mode 100644 index 0000000..3042556 --- /dev/null +++ b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf @@ -0,0 +1,8 @@ +# +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + + +MACHINE = "virtualbox" +DISTRO = "debian-buster" diff --git a/meta/classes/virtual-machine-image.bbclass b/meta/classes/virtual-machine-image.bbclass new file mode 100644 index 0000000..10e86a1 --- /dev/null +++ b/meta/classes/virtual-machine-image.bbclass @@ -0,0 +1,92 @@ +# This software is a part of ISAR. +# Copyright (C) 2019-2020 Siemens AG +# +# This class allows to generate images for vmware and virtualbox +# + +inherit buildchroot +inherit wic-img +IMAGER_BUILD_DEPS += "virtual-machine-template" +IMAGER_INSTALL += "qemu-utils gawk uuid-runtime virtual-machine-template" +export OVA_NAME ?= "${IMAGE_FULLNAME}" +export OVA_MEMORY ?= "8192" +export OVA_NUMBER_OF_CPU ?= "4" +export OVA_VRAM ?= "64" +export OVA_FIRMWARE ?= "efi" +export OVA_ACPI ?= "true" +export OVA_3D_ACCEL ?= "false" +export OVA_CLIPBOARD ?= "bidirectional" +SOURCE_IMAGE_FILE ?= "${IMAGE_FULLNAME}.wic.img" +OVA_SHA_ALG ?= "1" +VIRTUAL_MACHINE_IMAGE_TYPE ?= "vmdk" +export VIRTUAL_MACHINE_IMAGE_FILE ?= "${IMAGE_FULLNAME}-disk001.${VIRTUAL_MACHINE_IMAGE_TYPE}" +VIRTUAL_MACHINE_DISK ?= "${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE}" +# for virtualbox this needs to be monolithicSparse +# for vmware this needs to be streamOptimized +#VMDK_SUBFORMAT ?= "streamOptimized" +export VMDK_SUBFORMAT ?= "monolithicSparse" +def set_convert_options(d): + format = d.getVar("VIRTUAL_MACHINE_IMAGE_TYPE") + if format == "vmdk": + return "-o subformat=%s" % d.getVar("VMDK_SUBFORMAT") + else: + return "" + + +CONVERSION_OPTIONS = "${@set_convert_options(d)}" + +do_convert_wic() { + rm -f '${DEPLOY_DIR_IMAGE}/${VIRTUAL_MACHINE_IMAGE_FILE}' + image_do_mounts + bbnote "Creating ${VIRTUAL_MACHINE_IMAGE_FILE} from ${WIC_IMAGE_FILE}" + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \ + /usr/bin/qemu-img convert -f raw -O ${VIRTUAL_MACHINE_IMAGE_TYPE} ${CONVERSION_OPTIONS} \ + '${PP_DEPLOY}/${SOURCE_IMAGE_FILE}' '${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE}' +} + +addtask convert_wic before do_build after do_wic_image do_copy_boot_files do_install_imager_deps do_transform_template + +# Generate random MAC addresses just as VirtualBox does, the format is +# their assigned prefix for the first 3 bytes followed by 3 random bytes. +VBOX_MAC_PREFIX = "080027" +macgen() { + hexdump -n3 -e "\"${VBOX_MAC_PREFIX}%06X\n\"" /dev/urandom +} +get_disksize() { + image_do_mounts + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \ + qemu-img info -f vmdk "${VIRTUAL_MACHINE_DISK}" | gawk 'match($0, /^virtual size:.*\(([0-9]+) bytes\)/, a) {print a[1]}' +} +do_create_ova() { + if [ ! ${VIRTUAL_MACHINE_IMAGE_TYPE} = "vmdk" ]; then + exit 0 + fi + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ova' + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ovf' + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.mf' + + export PRIMARY_MAC=$(macgen) + export SECONDARY_MAC=$(macgen) + export DISK_NAME=$(basename -s .vmdk ${VIRTUAL_MACHINE_DISK}) + export DISK_SIZE_BYTES=$(get_disksize) + export LAST_CHANGE=$(date -u "+%Y-%m-%dT%H:%M:%SZ") + export OVA_FIRMWARE_VIRTUALBOX=$(echo ${OVA_FIRMWARE} | tr '[a-z]' '[A-Z]') + image_do_mounts + sudo -Es chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} <<'EOSUDO' + export DISK_UUID=$(uuidgen) + export VM_UUID=$(uuidgen) + # create ovf + cat /usr/share/virtual-machine-template/virtual-machine-template.ovf.tmpl | envsubst > ${PP_DEPLOY}/${OVA_NAME}.ovf + tar -cvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${OVA_NAME}.ovf + + # virtual box needs here a manifest file vmware does not want to accept the format + if [ "${VMDK_SUBFORMAT}" = "monolithicSparse" ]; then + echo "SHA${OVA_SHA_ALG}(${VIRTUAL_MACHINE_IMAGE_FILE})=$(sha${OVA_SHA_ALG}sum ${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE} | cut -d' ' -f1)" >> ${PP_DEPLOY}/${OVA_NAME}.mf + echo "SHA${OVA_SHA_ALG}(${OVA_NAME}.ovf)=$(sha${OVA_SHA_ALG}sum ${PP_DEPLOY}/${OVA_NAME}.ovf | cut -d' ' -f1)" >> ${PP_DEPLOY}/${OVA_NAME}.mf + tar -uvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${OVA_NAME}.mf + fi + tar -uvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${VIRTUAL_MACHINE_IMAGE_FILE} +EOSUDO +} + +addtask do_create_ova after do_convert_wic before do_deploy diff --git a/meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl b/meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl new file mode 100644 index 0000000..e6b5305 --- /dev/null +++ b/meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl @@ -0,0 +1,155 @@ +<?xml version="1.0"?> +<Envelope ovf:version="1.0" xml:lang="en-US" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vbox="http://www.virtualbox.org/ovf/machine"> + <References> + <File ovf:href="${VIRTUAL_MACHINE_IMAGE_FILE}" ovf:id="file1"/> + </References> + <DiskSection> + <Info>List of the virtual disks used in the package</Info> + <Disk ovf:capacity="${DISK_SIZE_BYTES}" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#${VMDK_SUBFORMAT}" vbox:uuid="${DISK_UUID}"/> + </DiskSection> + <NetworkSection> + <Info>Logical networks used in the package</Info> + <Network ovf:name="NAT"> + <Description>Logical network used by this appliance.</Description> + </Network> + </NetworkSection> + <VirtualSystem ovf:id="${OVA_NAME}"> + <Info>A virtual machine</Info> + <OperatingSystemSection ovf:id="96"> + <Info>The kind of installed guest operating system</Info> + <Description>Debian_64</Description> + <vbox:OSType ovf:required="false">Debian_64</vbox:OSType> + </OperatingSystemSection> + <VirtualHardwareSection> + <Info>Virtual hardware requirements for a virtual machine</Info> + <System> + <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> + <vssd:InstanceID>0</vssd:InstanceID> + <vssd:VirtualSystemIdentifier>${OVA_NAME}</vssd:VirtualSystemIdentifier> + <vssd:VirtualSystemType>virtualbox-2.2</vssd:VirtualSystemType> + </System> + <Item> + <rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits> + <rasd:Caption>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:Caption> + <rasd:Description>Number of virtual CPUs</rasd:Description> + <rasd:ElementName>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:ElementName> + <rasd:InstanceID>1</rasd:InstanceID> + <rasd:ResourceType>3</rasd:ResourceType> + <rasd:VirtualQuantity>${OVA_NUMBER_OF_CPU}</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:AllocationUnits>MegaBytes</rasd:AllocationUnits> + <rasd:Caption>${OVA_MEMORY} MB of memory</rasd:Caption> + <rasd:Description>Memory Size</rasd:Description> + <rasd:ElementName>${OVA_MEMORY} MB of memory</rasd:ElementName> + <rasd:InstanceID>2</rasd:InstanceID> + <rasd:ResourceType>4</rasd:ResourceType> + <rasd:VirtualQuantity>${OVA_MEMORY}</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:Address>0</rasd:Address> + <rasd:Caption>ideController0</rasd:Caption> + <rasd:Description>IDE Controller</rasd:Description> + <rasd:ElementName>ideController0</rasd:ElementName> + <rasd:InstanceID>3</rasd:InstanceID> + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> + <rasd:ResourceType>5</rasd:ResourceType> + </Item> + <Item> + <rasd:Address>1</rasd:Address> + <rasd:Caption>ideController1</rasd:Caption> + <rasd:Description>IDE Controller</rasd:Description> + <rasd:ElementName>ideController1</rasd:ElementName> + <rasd:InstanceID>4</rasd:InstanceID> + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> + <rasd:ResourceType>5</rasd:ResourceType> + </Item> + <Item> + <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> + <rasd:Caption>Ethernet adapter on 'NAT'</rasd:Caption> + <rasd:Connection>NAT</rasd:Connection> + <rasd:ElementName>Ethernet adapter on 'NAT'</rasd:ElementName> + <rasd:InstanceID>5</rasd:InstanceID> + <rasd:ResourceSubType>E1000</rasd:ResourceSubType> + <rasd:ResourceType>10</rasd:ResourceType> + </Item> + <Item> + <rasd:AddressOnParent>0</rasd:AddressOnParent> + <rasd:Caption>disk1</rasd:Caption> + <rasd:Description>Disk Image</rasd:Description> + <rasd:ElementName>disk1</rasd:ElementName> + <rasd:HostResource>/disk/vmdisk1</rasd:HostResource> + <rasd:InstanceID>6</rasd:InstanceID> + <rasd:Parent>3</rasd:Parent> + <rasd:ResourceType>17</rasd:ResourceType> + </Item> + <vmw:Config ovf:required="false" vmw:key="firmware" vmw:value="${OVA_FIRMWARE}"/> + <vmw:Config ovf:required="false" vmw:key="tools.syncTimeWithHost" vmw:value="false"/> + <vmw:Config ovf:required="false" vmw:key="tools.afterPowerOn" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.afterResume" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.beforeGuestShutdown" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.beforeGuestStandby" vmw:value="true"/> + <vmw:ExtraConfig ovf:required="false" vmw:key="virtualHW.productCompatibility" vmw:value="hosted"/> + </VirtualHardwareSection> + <vbox:Machine ovf:required="false" version="1.12-linux" uuid="{${VM_UUID}}" name="${OVA_NAME}" OSType="Debian_64" snapshotFolder="Snapshots" lastStateChange="${LAST_CHANGE}"> + <ovf:Info>Complete VirtualBox machine configuration in VirtualBox format</ovf:Info> + <Hardware> + <CPU count="${OVA_NUMBER_OF_CPU}"> + <PAE enabled="true"/> + <HardwareVirtExLargePages enabled="false"/> + </CPU> + <Memory RAMSize="${OVA_MEMORY}"/> + <Firmware type="${OVA_FIRMWARE_VIRTUALBOX}"/> + <Boot> + <Order position="1" device="HardDisk"/> + <Order position="2" device="None"/> + <Order position="3" device="None"/> + <Order position="4" device="None"/> + </Boot> + <Display VRAMSize="${OVA_VRAM}" monitorCount="1" accelerate3D="${OVA_3D_ACCEL}" accelerate2DVideo="false"/> + <VideoRecording enabled="false" file="Test.webm" horzRes="640" vertRes="480"/> + <RemoteDisplay enabled="false" authType="Null"/> + <BIOS> + <IOAPIC enabled="${OVA_ACPI}"/> + </BIOS> + <USBController enabled="false" enabledEhci="false"/> + <Network> + <Adapter slot="0" enabled="true" MACAddress="${PRIMARY_MAC}" cable="true" speed="0" type="virtio"> + <DisabledModes/> + <NAT> + <DNS pass-domain="true" use-proxy="false" use-host-resolver="false"/> + <Alias logging="false" proxy-only="false" use-same-ports="false"/> + </NAT> + </Adapter> + </Network> + <LPT> + <Port slot="1" enabled="false" IOBase="0x378" IRQ="7"/> + </LPT> + <AudioAdapter driver="Pulse" enabled="false"/> + <RTC localOrUTC="local"/> + <SharedFolders/> + <Clipboard mode="Disabled"/> + <DragAndDrop mode="Disabled"/> + <IO> + <IoCache enabled="true" size="5"/> + <BandwidthGroups/> + </IO> + <HostPci> + <Devices/> + </HostPci> + <EmulatedUSB> + <CardReader enabled="false"/> + </EmulatedUSB> + <Guest memoryBalloonSize="0"/> + <GuestProperties/> + </Hardware> + <StorageControllers> + <StorageController name="IDE Controller" type="PIIX4" PortCount="2" useHostIOCache="true" Bootable="true"> + <AttachedDevice type="HardDisk" port="0" device="0"> + <Image uuid="{${DISK_UUID}}"/> + </AttachedDevice> + </StorageController> + </StorageControllers> + </vbox:Machine> + </VirtualSystem> +</Envelope> diff --git a/meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb b/meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb new file mode 100644 index 0000000..dc67355 --- /dev/null +++ b/meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb @@ -0,0 +1,17 @@ +# This software is a part of ISAR. +# +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +inherit dpkg-raw + + +SRC_URI += "file://virtual-machine-template.ovf.tmpl" + +do_install() { + TARGET=${D}/usr/share/virtual-machine-template + install -m 0755 -d ${TARGET} + install -m 0740 ${WORKDIR}/virtual-machine-template.ovf.tmpl \ + ${TARGET}/virtual-machine-template.ovf.tmpl +} diff --git a/scripts/ci_build.sh b/scripts/ci_build.sh index a8d9ad9..005bda5 100755 --- a/scripts/ci_build.sh +++ b/scripts/ci_build.sh @@ -32,7 +32,8 @@ TARGETS_SET="\ mc:qemumipsel-buster:isar-image-base \ mc:nand-ubi-demo-buster:isar-image-ubi \ mc:rpi-stretch:isar-image-base \ - mc:qemuamd64-focal:isar-image-base" + mc:qemuamd64-focal:isar-image-base \ + mc:virtualbox-ova-buster:isar-image-base" # qemu-user-static of <= buster too old to build that # mc:qemuarm64-buster:isar-image-base # mc:qemuarm64-bullseye:isar-image-base -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v7 1/2] meta/classes: Generate ova image for vmware or virtualbox 2021-02-05 10:52 ` [PATCH v7 1/2] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff @ 2021-02-05 11:16 ` Jan Kiszka 0 siblings, 0 replies; 58+ messages in thread From: Jan Kiszka @ 2021-02-05 11:16 UTC (permalink / raw) To: Q. Gylstorff, isar-users On 05.02.21 11:52, Q. Gylstorff wrote: > From: Quirin Gylstorff <quirin.gylstorff@siemens.com> > > This allows to generate a ova file for virtualbox or vmware. The > images differ in the setting of the variable `VMDK_SUBFORMAT`. > - `streamOptimized` is used for Vmware Workstation > - `monolithicSparse` is used for Virtualbox > > This is necessary as virtualbox throws an import error for a `streamOptimized` > version. The ova for Virtualbox is also bigger due the disk format. > > The default machine settings are: > - 4 CPU Cores with 8GB RAM > > Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> > --- > doc/user_manual.md | 1 + > meta-isar/conf/machine/virtualbox.conf | 16 ++ > meta-isar/conf/machine/vmware.conf | 16 ++ > .../multiconfig/virtualbox-ova-buster.conf | 8 + > meta/classes/virtual-machine-image.bbclass | 92 +++++++++++ > .../files/virtual-machine-template.ovf.tmpl | 155 ++++++++++++++++++ > .../virtual-machine-template_0.1.bb | 17 ++ > scripts/ci_build.sh | 3 +- > 8 files changed, 307 insertions(+), 1 deletion(-) > create mode 100644 meta-isar/conf/machine/virtualbox.conf > create mode 100644 meta-isar/conf/machine/vmware.conf > create mode 100644 meta-isar/conf/multiconfig/virtualbox-ova-buster.conf > create mode 100644 meta/classes/virtual-machine-image.bbclass > create mode 100644 meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl > create mode 100644 meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb > > diff --git a/doc/user_manual.md b/doc/user_manual.md > index a4f3d1d..8b8ac7c 100644 > --- a/doc/user_manual.md > +++ b/doc/user_manual.md > @@ -367,6 +367,7 @@ Isar can generate various images types for specific machine. The type of the ima > - `rpi-sdimg` - A complete, partitioned Raspberry Pi SD card image (default option for the `rpi` machine). > - `wic-img` - A full disk image with user-specified partitions created and populated using the wic tool. > - `ubi-img` - A image for use on mtd nand partitions employing UBI > + - `virtual-machine-image` - A image for use on VirtualBox or VMware > > --- > > diff --git a/meta-isar/conf/machine/virtualbox.conf b/meta-isar/conf/machine/virtualbox.conf > new file mode 100644 > index 0000000..9b823ff > --- /dev/null > +++ b/meta-isar/conf/machine/virtualbox.conf > @@ -0,0 +1,16 @@ > +# This software is a part of ISAR. > +# Copyright (c) Siemens AG, 2020 > +# > +# SPDX-License-Identifier: MIT > + > +DISTRO_ARCH ?= "amd64" > + > +KERNEL_NAME ?= "amd64" > +BOOTLOADER ?= "grub" > + > +WKS_FILE ?= "sdimage-efi" > + > +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" > + > +VMDK_SUBFORMAT = "monolithicSparse" > +IMAGE_TYPE ?= "virtual-machine-image" > diff --git a/meta-isar/conf/machine/vmware.conf b/meta-isar/conf/machine/vmware.conf > new file mode 100644 > index 0000000..b6b4cc7 > --- /dev/null > +++ b/meta-isar/conf/machine/vmware.conf > @@ -0,0 +1,16 @@ > +# This software is a part of ISAR. > +# Copyright (c) Siemens AG, 2020 > +# > +# SPDX-License-Identifier: MIT > + > +DISTRO_ARCH ?= "amd64" > + > +KERNEL_NAME ?= "amd64" > +BOOTLOADER ?= "grub" > + > +WKS_FILE ?= "sdimage-efi" > + > +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" > + > +VMDK_SUBFORMAT = "streamOptimized" > +IMAGE_TYPE ?= "virtual-machine-image" > diff --git a/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf > new file mode 100644 > index 0000000..3042556 > --- /dev/null > +++ b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf > @@ -0,0 +1,8 @@ > +# > +# Copyright (c) Siemens AG, 2020 > +# > +# SPDX-License-Identifier: MIT > + > + > +MACHINE = "virtualbox" > +DISTRO = "debian-buster" > diff --git a/meta/classes/virtual-machine-image.bbclass b/meta/classes/virtual-machine-image.bbclass > new file mode 100644 > index 0000000..10e86a1 > --- /dev/null > +++ b/meta/classes/virtual-machine-image.bbclass > @@ -0,0 +1,92 @@ > +# This software is a part of ISAR. > +# Copyright (C) 2019-2020 Siemens AG > +# > +# This class allows to generate images for vmware and virtualbox > +# > + > +inherit buildchroot > +inherit wic-img Blank line > +IMAGER_BUILD_DEPS += "virtual-machine-template" > +IMAGER_INSTALL += "qemu-utils gawk uuid-runtime virtual-machine-template" Blank line > +export OVA_NAME ?= "${IMAGE_FULLNAME}" > +export OVA_MEMORY ?= "8192" > +export OVA_NUMBER_OF_CPU ?= "4" > +export OVA_VRAM ?= "64" > +export OVA_FIRMWARE ?= "efi" > +export OVA_ACPI ?= "true" > +export OVA_3D_ACCEL ?= "false" > +export OVA_CLIPBOARD ?= "bidirectional" > +SOURCE_IMAGE_FILE ?= "${IMAGE_FULLNAME}.wic.img" > +OVA_SHA_ALG ?= "1" > +VIRTUAL_MACHINE_IMAGE_TYPE ?= "vmdk" > +export VIRTUAL_MACHINE_IMAGE_FILE ?= "${IMAGE_FULLNAME}-disk001.${VIRTUAL_MACHINE_IMAGE_TYPE}" > +VIRTUAL_MACHINE_DISK ?= "${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE}" Please more structure (blank-line separation e.g.) if those are of different types. Are all of them user-tunable vars? > +# for virtualbox this needs to be monolithicSparse > +# for vmware this needs to be streamOptimized > +#VMDK_SUBFORMAT ?= "streamOptimized" Likely "export VMDK..." then. Why do we need all those exports? > +export VMDK_SUBFORMAT ?= "monolithicSparse" Blank line > +def set_convert_options(d): > + format = d.getVar("VIRTUAL_MACHINE_IMAGE_TYPE") > + if format == "vmdk": > + return "-o subformat=%s" % d.getVar("VMDK_SUBFORMAT") > + else: > + return "" > + > + > +CONVERSION_OPTIONS = "${@set_convert_options(d)}" > + > +do_convert_wic() { > + rm -f '${DEPLOY_DIR_IMAGE}/${VIRTUAL_MACHINE_IMAGE_FILE}' > + image_do_mounts > + bbnote "Creating ${VIRTUAL_MACHINE_IMAGE_FILE} from ${WIC_IMAGE_FILE}" > + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \ > + /usr/bin/qemu-img convert -f raw -O ${VIRTUAL_MACHINE_IMAGE_TYPE} ${CONVERSION_OPTIONS} \ > + '${PP_DEPLOY}/${SOURCE_IMAGE_FILE}' '${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE}' > +} > + > +addtask convert_wic before do_build after do_wic_image do_copy_boot_files do_install_imager_deps do_transform_template > + > +# Generate random MAC addresses just as VirtualBox does, the format is > +# their assigned prefix for the first 3 bytes followed by 3 random bytes. > +VBOX_MAC_PREFIX = "080027" > +macgen() { > + hexdump -n3 -e "\"${VBOX_MAC_PREFIX}%06X\n\"" /dev/urandom > +} Blank line > +get_disksize() { > + image_do_mounts > + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \ > + qemu-img info -f vmdk "${VIRTUAL_MACHINE_DISK}" | gawk 'match($0, /^virtual size:.*\(([0-9]+) bytes\)/, a) {print a[1]}' > +} Blank line > +do_create_ova() { > + if [ ! ${VIRTUAL_MACHINE_IMAGE_TYPE} = "vmdk" ]; then > + exit 0 > + fi > + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ova' > + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ovf' > + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.mf' > + > + export PRIMARY_MAC=$(macgen) > + export SECONDARY_MAC=$(macgen) > + export DISK_NAME=$(basename -s .vmdk ${VIRTUAL_MACHINE_DISK}) > + export DISK_SIZE_BYTES=$(get_disksize) > + export LAST_CHANGE=$(date -u "+%Y-%m-%dT%H:%M:%SZ") > + export OVA_FIRMWARE_VIRTUALBOX=$(echo ${OVA_FIRMWARE} | tr '[a-z]' '[A-Z]') > + image_do_mounts > + sudo -Es chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} <<'EOSUDO' > + export DISK_UUID=$(uuidgen) > + export VM_UUID=$(uuidgen) > + # create ovf > + cat /usr/share/virtual-machine-template/virtual-machine-template.ovf.tmpl | envsubst > ${PP_DEPLOY}/${OVA_NAME}.ovf > + tar -cvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${OVA_NAME}.ovf > + > + # virtual box needs here a manifest file vmware does not want to accept the format > + if [ "${VMDK_SUBFORMAT}" = "monolithicSparse" ]; then > + echo "SHA${OVA_SHA_ALG}(${VIRTUAL_MACHINE_IMAGE_FILE})=$(sha${OVA_SHA_ALG}sum ${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE} | cut -d' ' -f1)" >> ${PP_DEPLOY}/${OVA_NAME}.mf > + echo "SHA${OVA_SHA_ALG}(${OVA_NAME}.ovf)=$(sha${OVA_SHA_ALG}sum ${PP_DEPLOY}/${OVA_NAME}.ovf | cut -d' ' -f1)" >> ${PP_DEPLOY}/${OVA_NAME}.mf > + tar -uvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${OVA_NAME}.mf > + fi > + tar -uvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${VIRTUAL_MACHINE_IMAGE_FILE} > +EOSUDO > +} > + > +addtask do_create_ova after do_convert_wic before do_deploy > diff --git a/meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl b/meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl > new file mode 100644 > index 0000000..e6b5305 > --- /dev/null > +++ b/meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl > @@ -0,0 +1,155 @@ > +<?xml version="1.0"?> > +<Envelope ovf:version="1.0" xml:lang="en-US" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vbox="http://www.virtualbox.org/ovf/machine"> > + <References> > + <File ovf:href="${VIRTUAL_MACHINE_IMAGE_FILE}" ovf:id="file1"/> > + </References> > + <DiskSection> > + <Info>List of the virtual disks used in the package</Info> > + <Disk ovf:capacity="${DISK_SIZE_BYTES}" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#${VMDK_SUBFORMAT}" vbox:uuid="${DISK_UUID}"/> > + </DiskSection> > + <NetworkSection> > + <Info>Logical networks used in the package</Info> > + <Network ovf:name="NAT"> > + <Description>Logical network used by this appliance.</Description> > + </Network> > + </NetworkSection> > + <VirtualSystem ovf:id="${OVA_NAME}"> > + <Info>A virtual machine</Info> > + <OperatingSystemSection ovf:id="96"> > + <Info>The kind of installed guest operating system</Info> > + <Description>Debian_64</Description> > + <vbox:OSType ovf:required="false">Debian_64</vbox:OSType> > + </OperatingSystemSection> > + <VirtualHardwareSection> > + <Info>Virtual hardware requirements for a virtual machine</Info> > + <System> > + <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> > + <vssd:InstanceID>0</vssd:InstanceID> > + <vssd:VirtualSystemIdentifier>${OVA_NAME}</vssd:VirtualSystemIdentifier> > + <vssd:VirtualSystemType>virtualbox-2.2</vssd:VirtualSystemType> > + </System> > + <Item> > + <rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits> > + <rasd:Caption>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:Caption> > + <rasd:Description>Number of virtual CPUs</rasd:Description> > + <rasd:ElementName>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:ElementName> > + <rasd:InstanceID>1</rasd:InstanceID> > + <rasd:ResourceType>3</rasd:ResourceType> > + <rasd:VirtualQuantity>${OVA_NUMBER_OF_CPU}</rasd:VirtualQuantity> > + </Item> > + <Item> > + <rasd:AllocationUnits>MegaBytes</rasd:AllocationUnits> > + <rasd:Caption>${OVA_MEMORY} MB of memory</rasd:Caption> > + <rasd:Description>Memory Size</rasd:Description> > + <rasd:ElementName>${OVA_MEMORY} MB of memory</rasd:ElementName> > + <rasd:InstanceID>2</rasd:InstanceID> > + <rasd:ResourceType>4</rasd:ResourceType> > + <rasd:VirtualQuantity>${OVA_MEMORY}</rasd:VirtualQuantity> > + </Item> > + <Item> > + <rasd:Address>0</rasd:Address> > + <rasd:Caption>ideController0</rasd:Caption> > + <rasd:Description>IDE Controller</rasd:Description> > + <rasd:ElementName>ideController0</rasd:ElementName> > + <rasd:InstanceID>3</rasd:InstanceID> > + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> > + <rasd:ResourceType>5</rasd:ResourceType> > + </Item> > + <Item> > + <rasd:Address>1</rasd:Address> > + <rasd:Caption>ideController1</rasd:Caption> > + <rasd:Description>IDE Controller</rasd:Description> > + <rasd:ElementName>ideController1</rasd:ElementName> > + <rasd:InstanceID>4</rasd:InstanceID> > + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> > + <rasd:ResourceType>5</rasd:ResourceType> > + </Item> > + <Item> > + <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> > + <rasd:Caption>Ethernet adapter on 'NAT'</rasd:Caption> > + <rasd:Connection>NAT</rasd:Connection> > + <rasd:ElementName>Ethernet adapter on 'NAT'</rasd:ElementName> > + <rasd:InstanceID>5</rasd:InstanceID> > + <rasd:ResourceSubType>E1000</rasd:ResourceSubType> > + <rasd:ResourceType>10</rasd:ResourceType> > + </Item> > + <Item> > + <rasd:AddressOnParent>0</rasd:AddressOnParent> > + <rasd:Caption>disk1</rasd:Caption> > + <rasd:Description>Disk Image</rasd:Description> > + <rasd:ElementName>disk1</rasd:ElementName> > + <rasd:HostResource>/disk/vmdisk1</rasd:HostResource> > + <rasd:InstanceID>6</rasd:InstanceID> > + <rasd:Parent>3</rasd:Parent> > + <rasd:ResourceType>17</rasd:ResourceType> > + </Item> > + <vmw:Config ovf:required="false" vmw:key="firmware" vmw:value="${OVA_FIRMWARE}"/> > + <vmw:Config ovf:required="false" vmw:key="tools.syncTimeWithHost" vmw:value="false"/> > + <vmw:Config ovf:required="false" vmw:key="tools.afterPowerOn" vmw:value="true"/> > + <vmw:Config ovf:required="false" vmw:key="tools.afterResume" vmw:value="true"/> > + <vmw:Config ovf:required="false" vmw:key="tools.beforeGuestShutdown" vmw:value="true"/> > + <vmw:Config ovf:required="false" vmw:key="tools.beforeGuestStandby" vmw:value="true"/> > + <vmw:ExtraConfig ovf:required="false" vmw:key="virtualHW.productCompatibility" vmw:value="hosted"/> > + </VirtualHardwareSection> > + <vbox:Machine ovf:required="false" version="1.12-linux" uuid="{${VM_UUID}}" name="${OVA_NAME}" OSType="Debian_64" snapshotFolder="Snapshots" lastStateChange="${LAST_CHANGE}"> > + <ovf:Info>Complete VirtualBox machine configuration in VirtualBox format</ovf:Info> > + <Hardware> > + <CPU count="${OVA_NUMBER_OF_CPU}"> > + <PAE enabled="true"/> > + <HardwareVirtExLargePages enabled="false"/> > + </CPU> > + <Memory RAMSize="${OVA_MEMORY}"/> > + <Firmware type="${OVA_FIRMWARE_VIRTUALBOX}"/> > + <Boot> > + <Order position="1" device="HardDisk"/> > + <Order position="2" device="None"/> > + <Order position="3" device="None"/> > + <Order position="4" device="None"/> > + </Boot> > + <Display VRAMSize="${OVA_VRAM}" monitorCount="1" accelerate3D="${OVA_3D_ACCEL}" accelerate2DVideo="false"/> > + <VideoRecording enabled="false" file="Test.webm" horzRes="640" vertRes="480"/> > + <RemoteDisplay enabled="false" authType="Null"/> > + <BIOS> > + <IOAPIC enabled="${OVA_ACPI}"/> > + </BIOS> > + <USBController enabled="false" enabledEhci="false"/> > + <Network> > + <Adapter slot="0" enabled="true" MACAddress="${PRIMARY_MAC}" cable="true" speed="0" type="virtio"> > + <DisabledModes/> > + <NAT> > + <DNS pass-domain="true" use-proxy="false" use-host-resolver="false"/> > + <Alias logging="false" proxy-only="false" use-same-ports="false"/> > + </NAT> > + </Adapter> > + </Network> > + <LPT> > + <Port slot="1" enabled="false" IOBase="0x378" IRQ="7"/> > + </LPT> > + <AudioAdapter driver="Pulse" enabled="false"/> > + <RTC localOrUTC="local"/> > + <SharedFolders/> > + <Clipboard mode="Disabled"/> > + <DragAndDrop mode="Disabled"/> > + <IO> > + <IoCache enabled="true" size="5"/> > + <BandwidthGroups/> > + </IO> > + <HostPci> > + <Devices/> > + </HostPci> > + <EmulatedUSB> > + <CardReader enabled="false"/> > + </EmulatedUSB> > + <Guest memoryBalloonSize="0"/> > + <GuestProperties/> > + </Hardware> > + <StorageControllers> > + <StorageController name="IDE Controller" type="PIIX4" PortCount="2" useHostIOCache="true" Bootable="true"> > + <AttachedDevice type="HardDisk" port="0" device="0"> > + <Image uuid="{${DISK_UUID}}"/> > + </AttachedDevice> > + </StorageController> > + </StorageControllers> > + </vbox:Machine> > + </VirtualSystem> > +</Envelope> > diff --git a/meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb b/meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb > new file mode 100644 > index 0000000..dc67355 > --- /dev/null > +++ b/meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb > @@ -0,0 +1,17 @@ > +# This software is a part of ISAR. > +# > +# Copyright (c) Siemens AG, 2020 > +# > +# SPDX-License-Identifier: MIT > + > +inherit dpkg-raw > + > + > +SRC_URI += "file://virtual-machine-template.ovf.tmpl" > + > +do_install() { > + TARGET=${D}/usr/share/virtual-machine-template > + install -m 0755 -d ${TARGET} > + install -m 0740 ${WORKDIR}/virtual-machine-template.ovf.tmpl \ > + ${TARGET}/virtual-machine-template.ovf.tmpl > +} > diff --git a/scripts/ci_build.sh b/scripts/ci_build.sh > index a8d9ad9..005bda5 100755 > --- a/scripts/ci_build.sh > +++ b/scripts/ci_build.sh > @@ -32,7 +32,8 @@ TARGETS_SET="\ > mc:qemumipsel-buster:isar-image-base \ > mc:nand-ubi-demo-buster:isar-image-ubi \ > mc:rpi-stretch:isar-image-base \ > - mc:qemuamd64-focal:isar-image-base" > + mc:qemuamd64-focal:isar-image-base \ > + mc:virtualbox-ova-buster:isar-image-base" > # qemu-user-static of <= buster too old to build that > # mc:qemuarm64-buster:isar-image-base > # mc:qemuarm64-bullseye:isar-image-base > -- Siemens AG, T RDA IOT Corporate Competence Center Embedded Linux ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v7 2/2] meta/classes: add cpiogz-img 2021-02-05 10:52 ` [PATCH v7 0/2] CPIO & OVA Images Q. Gylstorff 2021-02-05 10:52 ` [PATCH v7 1/2] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff @ 2021-02-05 10:52 ` Q. Gylstorff 2021-02-05 11:09 ` Jan Kiszka 2021-02-05 15:57 ` [PATCH v8 0/2] CPIO & OVA Images Q. Gylstorff 2 siblings, 1 reply; 58+ messages in thread From: Q. Gylstorff @ 2021-02-05 10:52 UTC (permalink / raw) To: Jan.Kiszka, isar-users; +Cc: Quirin Gylstorff, Michael Adler From: Quirin Gylstorff <quirin.gylstorff@siemens.com> to create a initramfs like filesystem. Signed-off-by: Michael Adler <michael.adler@siemens.com> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- .../multiconfig/qemuamd64-buster-cpiogz.conf | 9 +++++++++ meta/classes/cpiogz-img.bbclass | 20 +++++++++++++++++++ scripts/ci_build.sh | 2 ++ 3 files changed, 31 insertions(+) create mode 100644 meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf create mode 100644 meta/classes/cpiogz-img.bbclass diff --git a/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf b/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf new file mode 100644 index 0000000..cadcdac --- /dev/null +++ b/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf @@ -0,0 +1,9 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +MACHINE ?= "qemuamd64" +DISTRO ?= "debian-buster" + +IMAGE_TYPE = "cpiogz-img" diff --git a/meta/classes/cpiogz-img.bbclass b/meta/classes/cpiogz-img.bbclass new file mode 100644 index 0000000..8efdcb4 --- /dev/null +++ b/meta/classes/cpiogz-img.bbclass @@ -0,0 +1,20 @@ +# This software is a part of ISAR. +# Copyright (C) 2020 Siemens AG +# +# SPDX-License-Identifier: MIT + +CPIOGZ_FNAME ?= "${IMAGE_FULLNAME}.cpio.gz" +CPIOGZ_IMAGE_FILE = "${DEPLOY_DIR_IMAGE}/${CPIOGZ_FNAME}" +IMAGER_INSTALL += "cpio" +CPIO_IMAGE_FORMAT ?= "newc" +do_cpiogz_image() { + sudo rm -f ${CPIOGZ_IMAGE_FILE} + image_do_mounts + sudo chroot ${BUILDCHROOT_DIR} \ + sh -c "cd ${PP_ROOTFS}; /usr/bin/find . | \ + /usr/bin/cpio -H ${CPIO_IMAGE_FORMAT} -o | /usr/bin/gzip -9 > \ + ${PP_DEPLOY}/${CPIOGZ_FNAME}" + sudo chown $(id -u):$(id -g) ${CPIOGZ_IMAGE_FILE} +} + +addtask cpiogz_image before do_image after do_image_tools diff --git a/scripts/ci_build.sh b/scripts/ci_build.sh index 005bda5..83461e5 100755 --- a/scripts/ci_build.sh +++ b/scripts/ci_build.sh @@ -28,6 +28,8 @@ TARGETS_SET="\ mc:qemuamd64-stretch:isar-image-base \ mc:qemuamd64-buster:isar-image-base \ mc:qemuamd64-buster-tgz:isar-image-base \ + mc:qemuamd64-buster-cpiogz:isar-image-base \ + mc:qemuamd64-bullseye:isar-image-base \ mc:qemumipsel-stretch:isar-image-base \ mc:qemumipsel-buster:isar-image-base \ mc:nand-ubi-demo-buster:isar-image-ubi \ -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v7 2/2] meta/classes: add cpiogz-img 2021-02-05 10:52 ` [PATCH v7 2/2] meta/classes: add cpiogz-img Q. Gylstorff @ 2021-02-05 11:09 ` Jan Kiszka 0 siblings, 0 replies; 58+ messages in thread From: Jan Kiszka @ 2021-02-05 11:09 UTC (permalink / raw) To: Q. Gylstorff, isar-users; +Cc: Michael Adler On 05.02.21 11:52, Q. Gylstorff wrote: > From: Quirin Gylstorff <quirin.gylstorff@siemens.com> > > to create a initramfs like filesystem. > > Signed-off-by: Michael Adler <michael.adler@siemens.com> This is a bit unbalanced as I just realized. Was Michael the author of this patch? Or did you only base your version on his? In the former case, From: should be adjusted. In the latter case, just state "Based on original patch by...". > Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> > --- > .../multiconfig/qemuamd64-buster-cpiogz.conf | 9 +++++++++ > meta/classes/cpiogz-img.bbclass | 20 +++++++++++++++++++ > scripts/ci_build.sh | 2 ++ > 3 files changed, 31 insertions(+) > create mode 100644 meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf > create mode 100644 meta/classes/cpiogz-img.bbclass > > diff --git a/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf b/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf > new file mode 100644 > index 0000000..cadcdac > --- /dev/null > +++ b/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf > @@ -0,0 +1,9 @@ > +# This software is a part of ISAR. > +# Copyright (c) Siemens AG, 2020 > +# > +# SPDX-License-Identifier: MIT > + > +MACHINE ?= "qemuamd64" > +DISTRO ?= "debian-buster" > + > +IMAGE_TYPE = "cpiogz-img" > diff --git a/meta/classes/cpiogz-img.bbclass b/meta/classes/cpiogz-img.bbclass > new file mode 100644 > index 0000000..8efdcb4 > --- /dev/null > +++ b/meta/classes/cpiogz-img.bbclass > @@ -0,0 +1,20 @@ > +# This software is a part of ISAR. > +# Copyright (C) 2020 Siemens AG > +# > +# SPDX-License-Identifier: MIT > + > +CPIOGZ_FNAME ?= "${IMAGE_FULLNAME}.cpio.gz" > +CPIOGZ_IMAGE_FILE = "${DEPLOY_DIR_IMAGE}/${CPIOGZ_FNAME}" > +IMAGER_INSTALL += "cpio" > +CPIO_IMAGE_FORMAT ?= "newc" > +do_cpiogz_image() { > + sudo rm -f ${CPIOGZ_IMAGE_FILE} > + image_do_mounts > + sudo chroot ${BUILDCHROOT_DIR} \ > + sh -c "cd ${PP_ROOTFS}; /usr/bin/find . | \ > + /usr/bin/cpio -H ${CPIO_IMAGE_FORMAT} -o | /usr/bin/gzip -9 > \ > + ${PP_DEPLOY}/${CPIOGZ_FNAME}" > + sudo chown $(id -u):$(id -g) ${CPIOGZ_IMAGE_FILE} > +} > + > +addtask cpiogz_image before do_image after do_image_tools > diff --git a/scripts/ci_build.sh b/scripts/ci_build.sh > index 005bda5..83461e5 100755 > --- a/scripts/ci_build.sh > +++ b/scripts/ci_build.sh > @@ -28,6 +28,8 @@ TARGETS_SET="\ > mc:qemuamd64-stretch:isar-image-base \ > mc:qemuamd64-buster:isar-image-base \ > mc:qemuamd64-buster-tgz:isar-image-base \ > + mc:qemuamd64-buster-cpiogz:isar-image-base \ > + mc:qemuamd64-bullseye:isar-image-base \ > mc:qemumipsel-stretch:isar-image-base \ > mc:qemumipsel-buster:isar-image-base \ > mc:nand-ubi-demo-buster:isar-image-ubi \ > -- Siemens AG, T RDA IOT Corporate Competence Center Embedded Linux ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v8 0/2] CPIO & OVA Images 2021-02-05 10:52 ` [PATCH v7 0/2] CPIO & OVA Images Q. Gylstorff 2021-02-05 10:52 ` [PATCH v7 1/2] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff 2021-02-05 10:52 ` [PATCH v7 2/2] meta/classes: add cpiogz-img Q. Gylstorff @ 2021-02-05 15:57 ` Q. Gylstorff 2021-02-05 15:57 ` [PATCH v8 1/2] meta/classes: Generate ova image for VMWare or Virtualbox Q. Gylstorff 2021-02-05 15:57 ` [PATCH v8 2/2] meta/classes: add cpiogz-img Q. Gylstorff 2 siblings, 2 replies; 58+ messages in thread From: Q. Gylstorff @ 2021-02-05 15:57 UTC (permalink / raw) To: Jan.Kiszka, isar-users; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> - Generate cpio images for rescue images - generate ova images for VMWare & Virtualbox Changes V2: - initramfs modification is now a package - ova-wic-img was renamed to virtual-machine-image - virtual-machine-image do_convert_wic supports now other image formats - Add tests - cpiogz now use chown instead of userspec Changes V3: - Add tests to build-ci - add postrm to initramfs-config - use sdimage-efi for virtualbox images - changed maintainer Changes V4: - use templates from debhelper for postinst and postrm scripts Changes V5: - add virtual-machine-template package to add the template as extra file to the build Changes V6: - whitespace fix - initramfs-config is now a inc file instead of a recipe - meta isar contains a default implementation of intramfs-config Changes V7: - drop initramfs-config in favour of https://groups.google.com/g/isar-users/c/47EZAUTclZs/m/npCfE6zqCwAJ - clarify OVA commit message - rebase on origin/next f5a6fdfd9aad49202093aab2158f625429eaf7c5 Changes V8: - formatting - correct cpio commit message Quirin Gylstorff (2): meta/classes: Generate ova image for VMWare or Virtualbox meta/classes: add cpiogz-img doc/user_manual.md | 1 + meta-isar/conf/machine/virtualbox.conf | 16 ++ meta-isar/conf/machine/vmware.conf | 16 ++ .../multiconfig/qemuamd64-buster-cpiogz.conf | 9 + .../multiconfig/virtualbox-ova-buster.conf | 8 + meta/classes/cpiogz-img.bbclass | 20 +++ meta/classes/virtual-machine-image.bbclass | 104 ++++++++++++ .../files/virtual-machine-template.ovf.tmpl | 155 ++++++++++++++++++ .../virtual-machine-template_0.1.bb | 17 ++ scripts/ci_build.sh | 5 +- 10 files changed, 350 insertions(+), 1 deletion(-) create mode 100644 meta-isar/conf/machine/virtualbox.conf create mode 100644 meta-isar/conf/machine/vmware.conf create mode 100644 meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf create mode 100644 meta-isar/conf/multiconfig/virtualbox-ova-buster.conf create mode 100644 meta/classes/cpiogz-img.bbclass create mode 100644 meta/classes/virtual-machine-image.bbclass create mode 100644 meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl create mode 100644 meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v8 1/2] meta/classes: Generate ova image for VMWare or Virtualbox 2021-02-05 15:57 ` [PATCH v8 0/2] CPIO & OVA Images Q. Gylstorff @ 2021-02-05 15:57 ` Q. Gylstorff 2021-03-26 11:47 ` Anton Mikanovich 2021-02-05 15:57 ` [PATCH v8 2/2] meta/classes: add cpiogz-img Q. Gylstorff 1 sibling, 1 reply; 58+ messages in thread From: Q. Gylstorff @ 2021-02-05 15:57 UTC (permalink / raw) To: Jan.Kiszka, isar-users; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> This allows to generate a ova file for virtualbox or vmware. The images differ in the setting of the variable `VMDK_SUBFORMAT`. - `streamOptimized` is used for Vmware Workstation - `monolithicSparse` is used for Virtualbox This is necessary as virtualbox throws an import error for a `streamOptimized` version. The ova for Virtualbox is also bigger due the disk format. The default machine settings are: - 4 CPU Cores with 8GB Ram Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- doc/user_manual.md | 1 + meta-isar/conf/machine/virtualbox.conf | 16 ++ meta-isar/conf/machine/vmware.conf | 16 ++ .../multiconfig/virtualbox-ova-buster.conf | 8 + meta/classes/virtual-machine-image.bbclass | 104 ++++++++++++ .../files/virtual-machine-template.ovf.tmpl | 155 ++++++++++++++++++ .../virtual-machine-template_0.1.bb | 17 ++ scripts/ci_build.sh | 3 +- 8 files changed, 319 insertions(+), 1 deletion(-) create mode 100644 meta-isar/conf/machine/virtualbox.conf create mode 100644 meta-isar/conf/machine/vmware.conf create mode 100644 meta-isar/conf/multiconfig/virtualbox-ova-buster.conf create mode 100644 meta/classes/virtual-machine-image.bbclass create mode 100644 meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl create mode 100644 meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb diff --git a/doc/user_manual.md b/doc/user_manual.md index a4f3d1d..8b8ac7c 100644 --- a/doc/user_manual.md +++ b/doc/user_manual.md @@ -367,6 +367,7 @@ Isar can generate various images types for specific machine. The type of the ima - `rpi-sdimg` - A complete, partitioned Raspberry Pi SD card image (default option for the `rpi` machine). - `wic-img` - A full disk image with user-specified partitions created and populated using the wic tool. - `ubi-img` - A image for use on mtd nand partitions employing UBI + - `virtual-machine-image` - A image for use on VirtualBox or VMware --- diff --git a/meta-isar/conf/machine/virtualbox.conf b/meta-isar/conf/machine/virtualbox.conf new file mode 100644 index 0000000..9b823ff --- /dev/null +++ b/meta-isar/conf/machine/virtualbox.conf @@ -0,0 +1,16 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +DISTRO_ARCH ?= "amd64" + +KERNEL_NAME ?= "amd64" +BOOTLOADER ?= "grub" + +WKS_FILE ?= "sdimage-efi" + +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" + +VMDK_SUBFORMAT = "monolithicSparse" +IMAGE_TYPE ?= "virtual-machine-image" diff --git a/meta-isar/conf/machine/vmware.conf b/meta-isar/conf/machine/vmware.conf new file mode 100644 index 0000000..b6b4cc7 --- /dev/null +++ b/meta-isar/conf/machine/vmware.conf @@ -0,0 +1,16 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +DISTRO_ARCH ?= "amd64" + +KERNEL_NAME ?= "amd64" +BOOTLOADER ?= "grub" + +WKS_FILE ?= "sdimage-efi" + +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" + +VMDK_SUBFORMAT = "streamOptimized" +IMAGE_TYPE ?= "virtual-machine-image" diff --git a/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf new file mode 100644 index 0000000..3042556 --- /dev/null +++ b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf @@ -0,0 +1,8 @@ +# +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + + +MACHINE = "virtualbox" +DISTRO = "debian-buster" diff --git a/meta/classes/virtual-machine-image.bbclass b/meta/classes/virtual-machine-image.bbclass new file mode 100644 index 0000000..2d7bbd8 --- /dev/null +++ b/meta/classes/virtual-machine-image.bbclass @@ -0,0 +1,104 @@ +# This software is a part of ISAR. +# Copyright (C) 2019-2020 Siemens AG +# +# This class allows to generate images for vmware and virtualbox +# + +inherit buildchroot +inherit wic-img + +IMAGER_BUILD_DEPS += "virtual-machine-template" +IMAGER_INSTALL += "qemu-utils gawk uuid-runtime virtual-machine-template" + +# virtual machine disk settings +SOURCE_IMAGE_FILE ?= "${IMAGE_FULLNAME}.wic.img" + +# for virtualbox this needs to be monolithicSparse +# for vmware this needs to be streamOptimized +#VMDK_SUBFORMAT ?= "streamOptimized" +VMDK_SUBFORMAT ?= "monolithicSparse" + +VIRTUAL_MACHINE_IMAGE_TYPE ?= "vmdk" +VIRTUAL_MACHINE_IMAGE_FILE = "${IMAGE_FULLNAME}-disk001.${VIRTUAL_MACHINE_IMAGE_TYPE}" +VIRTUAL_MACHINE_DISK = "${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE}" + +def set_convert_options(d): + format = d.getVar("VIRTUAL_MACHINE_IMAGE_TYPE") + if format == "vmdk": + return "-o subformat=%s" % d.getVar("VMDK_SUBFORMAT") + else: + return "" + + +CONVERSION_OPTIONS = "${@set_convert_options(d)}" + +do_convert_wic() { + rm -f '${DEPLOY_DIR_IMAGE}/${VIRTUAL_MACHINE_IMAGE_FILE}' + image_do_mounts + bbnote "Creating ${VIRTUAL_MACHINE_IMAGE_FILE} from ${WIC_IMAGE_FILE}" + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \ + /usr/bin/qemu-img convert -f raw -O ${VIRTUAL_MACHINE_IMAGE_TYPE} ${CONVERSION_OPTIONS} \ + '${PP_DEPLOY}/${SOURCE_IMAGE_FILE}' '${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE}' +} + +addtask convert_wic before do_build after do_wic_image do_copy_boot_files do_install_imager_deps do_transform_template + +# User settings for OVA +OVA_NAME ?= "${IMAGE_FULLNAME}" +OVA_MEMORY ?= "8192" +OVA_NUMBER_OF_CPU ?= "4" +OVA_VRAM ?= "64" +OVA_FIRMWARE ?= "efi" +OVA_ACPI ?= "true" +OVA_3D_ACCEL ?= "false" +OVA_CLIPBOARD ?= "bidirectional" +OVA_SHA_ALG = "1" + +# Generate random MAC addresses just as VirtualBox does, the format is +# their assigned prefix for the first 3 bytes followed by 3 random bytes. +VBOX_MAC_PREFIX = "080027" +macgen() { + hexdump -n3 -e "\"${VBOX_MAC_PREFIX}%06X\n\"" /dev/urandom +} + +get_disksize() { + image_do_mounts + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \ + qemu-img info -f vmdk "${VIRTUAL_MACHINE_DISK}" | gawk 'match($0, /^virtual size:.*\(([0-9]+) bytes\)/, a) {print a[1]}' +} + +do_create_ova() { + if [ ! ${VIRTUAL_MACHINE_IMAGE_TYPE} = "vmdk" ]; then + exit 0 + fi + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ova' + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ovf' + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.mf' + + export PRIMARY_MAC=$(macgen) + export SECONDARY_MAC=$(macgen) + export DISK_NAME=$(basename -s .vmdk ${VIRTUAL_MACHINE_DISK}) + export DISK_SIZE_BYTES=$(get_disksize) + export LAST_CHANGE=$(date -u "+%Y-%m-%dT%H:%M:%SZ") + export OVA_FIRMWARE_VIRTUALBOX=$(echo ${OVA_FIRMWARE} | tr '[a-z]' '[A-Z]') + + image_do_mounts + + sudo -Es chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} <<'EOSUDO' + export DISK_UUID=$(uuidgen) + export VM_UUID=$(uuidgen) + # create ovf + cat /usr/share/virtual-machine-template/virtual-machine-template.ovf.tmpl | envsubst > ${PP_DEPLOY}/${OVA_NAME}.ovf + tar -cvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${OVA_NAME}.ovf + + # virtual box needs here a manifest file vmware does not want to accept the format + if [ "${VMDK_SUBFORMAT}" = "monolithicSparse" ]; then + echo "SHA${OVA_SHA_ALG}(${VIRTUAL_MACHINE_IMAGE_FILE})=$(sha${OVA_SHA_ALG}sum ${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE} | cut -d' ' -f1)" >> ${PP_DEPLOY}/${OVA_NAME}.mf + echo "SHA${OVA_SHA_ALG}(${OVA_NAME}.ovf)=$(sha${OVA_SHA_ALG}sum ${PP_DEPLOY}/${OVA_NAME}.ovf | cut -d' ' -f1)" >> ${PP_DEPLOY}/${OVA_NAME}.mf + tar -uvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${OVA_NAME}.mf + fi + tar -uvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${VIRTUAL_MACHINE_IMAGE_FILE} +EOSUDO +} + +addtask do_create_ova after do_convert_wic before do_deploy diff --git a/meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl b/meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl new file mode 100644 index 0000000..e6b5305 --- /dev/null +++ b/meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl @@ -0,0 +1,155 @@ +<?xml version="1.0"?> +<Envelope ovf:version="1.0" xml:lang="en-US" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vbox="http://www.virtualbox.org/ovf/machine"> + <References> + <File ovf:href="${VIRTUAL_MACHINE_IMAGE_FILE}" ovf:id="file1"/> + </References> + <DiskSection> + <Info>List of the virtual disks used in the package</Info> + <Disk ovf:capacity="${DISK_SIZE_BYTES}" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#${VMDK_SUBFORMAT}" vbox:uuid="${DISK_UUID}"/> + </DiskSection> + <NetworkSection> + <Info>Logical networks used in the package</Info> + <Network ovf:name="NAT"> + <Description>Logical network used by this appliance.</Description> + </Network> + </NetworkSection> + <VirtualSystem ovf:id="${OVA_NAME}"> + <Info>A virtual machine</Info> + <OperatingSystemSection ovf:id="96"> + <Info>The kind of installed guest operating system</Info> + <Description>Debian_64</Description> + <vbox:OSType ovf:required="false">Debian_64</vbox:OSType> + </OperatingSystemSection> + <VirtualHardwareSection> + <Info>Virtual hardware requirements for a virtual machine</Info> + <System> + <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> + <vssd:InstanceID>0</vssd:InstanceID> + <vssd:VirtualSystemIdentifier>${OVA_NAME}</vssd:VirtualSystemIdentifier> + <vssd:VirtualSystemType>virtualbox-2.2</vssd:VirtualSystemType> + </System> + <Item> + <rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits> + <rasd:Caption>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:Caption> + <rasd:Description>Number of virtual CPUs</rasd:Description> + <rasd:ElementName>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:ElementName> + <rasd:InstanceID>1</rasd:InstanceID> + <rasd:ResourceType>3</rasd:ResourceType> + <rasd:VirtualQuantity>${OVA_NUMBER_OF_CPU}</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:AllocationUnits>MegaBytes</rasd:AllocationUnits> + <rasd:Caption>${OVA_MEMORY} MB of memory</rasd:Caption> + <rasd:Description>Memory Size</rasd:Description> + <rasd:ElementName>${OVA_MEMORY} MB of memory</rasd:ElementName> + <rasd:InstanceID>2</rasd:InstanceID> + <rasd:ResourceType>4</rasd:ResourceType> + <rasd:VirtualQuantity>${OVA_MEMORY}</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:Address>0</rasd:Address> + <rasd:Caption>ideController0</rasd:Caption> + <rasd:Description>IDE Controller</rasd:Description> + <rasd:ElementName>ideController0</rasd:ElementName> + <rasd:InstanceID>3</rasd:InstanceID> + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> + <rasd:ResourceType>5</rasd:ResourceType> + </Item> + <Item> + <rasd:Address>1</rasd:Address> + <rasd:Caption>ideController1</rasd:Caption> + <rasd:Description>IDE Controller</rasd:Description> + <rasd:ElementName>ideController1</rasd:ElementName> + <rasd:InstanceID>4</rasd:InstanceID> + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> + <rasd:ResourceType>5</rasd:ResourceType> + </Item> + <Item> + <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> + <rasd:Caption>Ethernet adapter on 'NAT'</rasd:Caption> + <rasd:Connection>NAT</rasd:Connection> + <rasd:ElementName>Ethernet adapter on 'NAT'</rasd:ElementName> + <rasd:InstanceID>5</rasd:InstanceID> + <rasd:ResourceSubType>E1000</rasd:ResourceSubType> + <rasd:ResourceType>10</rasd:ResourceType> + </Item> + <Item> + <rasd:AddressOnParent>0</rasd:AddressOnParent> + <rasd:Caption>disk1</rasd:Caption> + <rasd:Description>Disk Image</rasd:Description> + <rasd:ElementName>disk1</rasd:ElementName> + <rasd:HostResource>/disk/vmdisk1</rasd:HostResource> + <rasd:InstanceID>6</rasd:InstanceID> + <rasd:Parent>3</rasd:Parent> + <rasd:ResourceType>17</rasd:ResourceType> + </Item> + <vmw:Config ovf:required="false" vmw:key="firmware" vmw:value="${OVA_FIRMWARE}"/> + <vmw:Config ovf:required="false" vmw:key="tools.syncTimeWithHost" vmw:value="false"/> + <vmw:Config ovf:required="false" vmw:key="tools.afterPowerOn" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.afterResume" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.beforeGuestShutdown" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.beforeGuestStandby" vmw:value="true"/> + <vmw:ExtraConfig ovf:required="false" vmw:key="virtualHW.productCompatibility" vmw:value="hosted"/> + </VirtualHardwareSection> + <vbox:Machine ovf:required="false" version="1.12-linux" uuid="{${VM_UUID}}" name="${OVA_NAME}" OSType="Debian_64" snapshotFolder="Snapshots" lastStateChange="${LAST_CHANGE}"> + <ovf:Info>Complete VirtualBox machine configuration in VirtualBox format</ovf:Info> + <Hardware> + <CPU count="${OVA_NUMBER_OF_CPU}"> + <PAE enabled="true"/> + <HardwareVirtExLargePages enabled="false"/> + </CPU> + <Memory RAMSize="${OVA_MEMORY}"/> + <Firmware type="${OVA_FIRMWARE_VIRTUALBOX}"/> + <Boot> + <Order position="1" device="HardDisk"/> + <Order position="2" device="None"/> + <Order position="3" device="None"/> + <Order position="4" device="None"/> + </Boot> + <Display VRAMSize="${OVA_VRAM}" monitorCount="1" accelerate3D="${OVA_3D_ACCEL}" accelerate2DVideo="false"/> + <VideoRecording enabled="false" file="Test.webm" horzRes="640" vertRes="480"/> + <RemoteDisplay enabled="false" authType="Null"/> + <BIOS> + <IOAPIC enabled="${OVA_ACPI}"/> + </BIOS> + <USBController enabled="false" enabledEhci="false"/> + <Network> + <Adapter slot="0" enabled="true" MACAddress="${PRIMARY_MAC}" cable="true" speed="0" type="virtio"> + <DisabledModes/> + <NAT> + <DNS pass-domain="true" use-proxy="false" use-host-resolver="false"/> + <Alias logging="false" proxy-only="false" use-same-ports="false"/> + </NAT> + </Adapter> + </Network> + <LPT> + <Port slot="1" enabled="false" IOBase="0x378" IRQ="7"/> + </LPT> + <AudioAdapter driver="Pulse" enabled="false"/> + <RTC localOrUTC="local"/> + <SharedFolders/> + <Clipboard mode="Disabled"/> + <DragAndDrop mode="Disabled"/> + <IO> + <IoCache enabled="true" size="5"/> + <BandwidthGroups/> + </IO> + <HostPci> + <Devices/> + </HostPci> + <EmulatedUSB> + <CardReader enabled="false"/> + </EmulatedUSB> + <Guest memoryBalloonSize="0"/> + <GuestProperties/> + </Hardware> + <StorageControllers> + <StorageController name="IDE Controller" type="PIIX4" PortCount="2" useHostIOCache="true" Bootable="true"> + <AttachedDevice type="HardDisk" port="0" device="0"> + <Image uuid="{${DISK_UUID}}"/> + </AttachedDevice> + </StorageController> + </StorageControllers> + </vbox:Machine> + </VirtualSystem> +</Envelope> diff --git a/meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb b/meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb new file mode 100644 index 0000000..dc67355 --- /dev/null +++ b/meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb @@ -0,0 +1,17 @@ +# This software is a part of ISAR. +# +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +inherit dpkg-raw + + +SRC_URI += "file://virtual-machine-template.ovf.tmpl" + +do_install() { + TARGET=${D}/usr/share/virtual-machine-template + install -m 0755 -d ${TARGET} + install -m 0740 ${WORKDIR}/virtual-machine-template.ovf.tmpl \ + ${TARGET}/virtual-machine-template.ovf.tmpl +} diff --git a/scripts/ci_build.sh b/scripts/ci_build.sh index a8d9ad9..005bda5 100755 --- a/scripts/ci_build.sh +++ b/scripts/ci_build.sh @@ -32,7 +32,8 @@ TARGETS_SET="\ mc:qemumipsel-buster:isar-image-base \ mc:nand-ubi-demo-buster:isar-image-ubi \ mc:rpi-stretch:isar-image-base \ - mc:qemuamd64-focal:isar-image-base" + mc:qemuamd64-focal:isar-image-base \ + mc:virtualbox-ova-buster:isar-image-base" # qemu-user-static of <= buster too old to build that # mc:qemuarm64-buster:isar-image-base # mc:qemuarm64-bullseye:isar-image-base -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v8 1/2] meta/classes: Generate ova image for VMWare or Virtualbox 2021-02-05 15:57 ` [PATCH v8 1/2] meta/classes: Generate ova image for VMWare or Virtualbox Q. Gylstorff @ 2021-03-26 11:47 ` Anton Mikanovich 0 siblings, 0 replies; 58+ messages in thread From: Anton Mikanovich @ 2021-03-26 11:47 UTC (permalink / raw) To: Q. Gylstorff, Jan.Kiszka, isar-users 05.02.2021 18:57, Q. Gylstorff wrote: > From: Quirin Gylstorff <quirin.gylstorff@siemens.com> > > This allows to generate a ova file for virtualbox or vmware. The > images differ in the setting of the variable `VMDK_SUBFORMAT`. > - `streamOptimized` is used for Vmware Workstation > - `monolithicSparse` is used for Virtualbox > > This is necessary as virtualbox throws an import error for a `streamOptimized` > version. The ova for Virtualbox is also bigger due the disk format. > > The default machine settings are: > - 4 CPU Cores with 8GB Ram > > Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> > --- > doc/user_manual.md | 1 + > meta-isar/conf/machine/virtualbox.conf | 16 ++ > meta-isar/conf/machine/vmware.conf | 16 ++ > .../multiconfig/virtualbox-ova-buster.conf | 8 + > meta/classes/virtual-machine-image.bbclass | 104 ++++++++++++ > .../files/virtual-machine-template.ovf.tmpl | 155 ++++++++++++++++++ > .../virtual-machine-template_0.1.bb | 17 ++ > scripts/ci_build.sh | 3 +- > 8 files changed, 319 insertions(+), 1 deletion(-) > create mode 100644 meta-isar/conf/machine/virtualbox.conf > create mode 100644 meta-isar/conf/machine/vmware.conf > create mode 100644 meta-isar/conf/multiconfig/virtualbox-ova-buster.conf > create mode 100644 meta/classes/virtual-machine-image.bbclass > create mode 100644 meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl > create mode 100644 meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb > > diff --git a/doc/user_manual.md b/doc/user_manual.md > index a4f3d1d..8b8ac7c 100644 > --- a/doc/user_manual.md > +++ b/doc/user_manual.md > @@ -367,6 +367,7 @@ Isar can generate various images types for specific machine. The type of the ima > - `rpi-sdimg` - A complete, partitioned Raspberry Pi SD card image (default option for the `rpi` machine). > - `wic-img` - A full disk image with user-specified partitions created and populated using the wic tool. > - `ubi-img` - A image for use on mtd nand partitions employing UBI > + - `virtual-machine-image` - A image for use on VirtualBox or VMware I think image type `virtual-machine-image` should be shortened to something like `vm-img`. Motivation: 1) All image types are end on `img` currently. This is useful for quick visual differentiation them from other bbclasses. 2) Image type name is also used in rootfs dir path which is already too long. -- Anton Mikanovich Promwad Ltd. External service provider of ilbers GmbH Maria-Merian-Str. 8 85521 Ottobrunn, Germany +49 (89) 122 67 24-0 Commercial register Munich, HRB 214197 General Manager: Baurzhan Ismagulov ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v8 2/2] meta/classes: add cpiogz-img 2021-02-05 15:57 ` [PATCH v8 0/2] CPIO & OVA Images Q. Gylstorff 2021-02-05 15:57 ` [PATCH v8 1/2] meta/classes: Generate ova image for VMWare or Virtualbox Q. Gylstorff @ 2021-02-05 15:57 ` Q. Gylstorff 2021-03-26 11:51 ` Anton Mikanovich 1 sibling, 1 reply; 58+ messages in thread From: Q. Gylstorff @ 2021-02-05 15:57 UTC (permalink / raw) To: Jan.Kiszka, isar-users; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> to create a initramfs like filesystem. Based on original patch by: Michael Adler <michael.adler@siemens.com> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- .../multiconfig/qemuamd64-buster-cpiogz.conf | 9 +++++++++ meta/classes/cpiogz-img.bbclass | 20 +++++++++++++++++++ scripts/ci_build.sh | 2 ++ 3 files changed, 31 insertions(+) create mode 100644 meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf create mode 100644 meta/classes/cpiogz-img.bbclass diff --git a/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf b/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf new file mode 100644 index 0000000..cadcdac --- /dev/null +++ b/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf @@ -0,0 +1,9 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +MACHINE ?= "qemuamd64" +DISTRO ?= "debian-buster" + +IMAGE_TYPE = "cpiogz-img" diff --git a/meta/classes/cpiogz-img.bbclass b/meta/classes/cpiogz-img.bbclass new file mode 100644 index 0000000..8efdcb4 --- /dev/null +++ b/meta/classes/cpiogz-img.bbclass @@ -0,0 +1,20 @@ +# This software is a part of ISAR. +# Copyright (C) 2020 Siemens AG +# +# SPDX-License-Identifier: MIT + +CPIOGZ_FNAME ?= "${IMAGE_FULLNAME}.cpio.gz" +CPIOGZ_IMAGE_FILE = "${DEPLOY_DIR_IMAGE}/${CPIOGZ_FNAME}" +IMAGER_INSTALL += "cpio" +CPIO_IMAGE_FORMAT ?= "newc" +do_cpiogz_image() { + sudo rm -f ${CPIOGZ_IMAGE_FILE} + image_do_mounts + sudo chroot ${BUILDCHROOT_DIR} \ + sh -c "cd ${PP_ROOTFS}; /usr/bin/find . | \ + /usr/bin/cpio -H ${CPIO_IMAGE_FORMAT} -o | /usr/bin/gzip -9 > \ + ${PP_DEPLOY}/${CPIOGZ_FNAME}" + sudo chown $(id -u):$(id -g) ${CPIOGZ_IMAGE_FILE} +} + +addtask cpiogz_image before do_image after do_image_tools diff --git a/scripts/ci_build.sh b/scripts/ci_build.sh index 005bda5..83461e5 100755 --- a/scripts/ci_build.sh +++ b/scripts/ci_build.sh @@ -28,6 +28,8 @@ TARGETS_SET="\ mc:qemuamd64-stretch:isar-image-base \ mc:qemuamd64-buster:isar-image-base \ mc:qemuamd64-buster-tgz:isar-image-base \ + mc:qemuamd64-buster-cpiogz:isar-image-base \ + mc:qemuamd64-bullseye:isar-image-base \ mc:qemumipsel-stretch:isar-image-base \ mc:qemumipsel-buster:isar-image-base \ mc:nand-ubi-demo-buster:isar-image-ubi \ -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v8 2/2] meta/classes: add cpiogz-img 2021-02-05 15:57 ` [PATCH v8 2/2] meta/classes: add cpiogz-img Q. Gylstorff @ 2021-03-26 11:51 ` Anton Mikanovich 0 siblings, 0 replies; 58+ messages in thread From: Anton Mikanovich @ 2021-03-26 11:51 UTC (permalink / raw) To: Q. Gylstorff, Jan.Kiszka, isar-users 05.02.2021 18:57, Q. Gylstorff wrote: > --- /dev/null > +++ b/meta/classes/cpiogz-img.bbclass > @@ -0,0 +1,20 @@ > +# This software is a part of ISAR. > +# Copyright (C) 2020 Siemens AG > +# > +# SPDX-License-Identifier: MIT > + > +CPIOGZ_FNAME ?= "${IMAGE_FULLNAME}.cpio.gz" > +CPIOGZ_IMAGE_FILE = "${DEPLOY_DIR_IMAGE}/${CPIOGZ_FNAME}" > +IMAGER_INSTALL += "cpio" > +CPIO_IMAGE_FORMAT ?= "newc" > +do_cpiogz_image() { > + sudo rm -f ${CPIOGZ_IMAGE_FILE} > + image_do_mounts > + sudo chroot ${BUILDCHROOT_DIR} \ > + sh -c "cd ${PP_ROOTFS}; /usr/bin/find . | \ > + /usr/bin/cpio -H ${CPIO_IMAGE_FORMAT} -o | /usr/bin/gzip -9 > \ > + ${PP_DEPLOY}/${CPIOGZ_FNAME}" > + sudo chown $(id -u):$(id -g) ${CPIOGZ_IMAGE_FILE} > +} > + > +addtask cpiogz_image before do_image after do_image_tools > diff --git a/scripts/ci_build.sh b/scripts/ci_build.sh > index 005bda5..83461e5 100755 > --- a/scripts/ci_build.sh > +++ b/scripts/ci_build.sh > @@ -28,6 +28,8 @@ TARGETS_SET="\ > mc:qemuamd64-stretch:isar-image-base \ > mc:qemuamd64-buster:isar-image-base \ > mc:qemuamd64-buster-tgz:isar-image-base \ > + mc:qemuamd64-buster-cpiogz:isar-image-base \ > + mc:qemuamd64-bullseye:isar-image-base \ > mc:qemumipsel-stretch:isar-image-base \ > mc:qemumipsel-buster:isar-image-base \ > mc:nand-ubi-demo-buster:isar-image-ubi \ Why did you add `mc:qemuamd64-bullseye:isar-image-base` target here? Also advice to add newline before `do_cpiogz_image()` declaration. -- Anton Mikanovich Promwad Ltd. External service provider of ilbers GmbH Maria-Merian-Str. 8 85521 Ottobrunn, Germany +49 (89) 122 67 24-0 Commercial register Munich, HRB 214197 General Manager: Baurzhan Ismagulov ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v5 2/3] meta/classes: Generate ova image for vmware or virtualbox 2020-04-23 9:46 ` [PATCH v5 0/3] some images Q. Gylstorff 2020-04-23 9:46 ` [PATCH v5 1/3] meta/support: Generate a custom initramfs Q. Gylstorff @ 2020-04-23 9:46 ` Q. Gylstorff 2020-04-23 9:46 ` [PATCH v5 3/3] meta/classes: add cpiogz-img Q. Gylstorff 2 siblings, 0 replies; 58+ messages in thread From: Q. Gylstorff @ 2020-04-23 9:46 UTC (permalink / raw) To: isar-users, Jan.Kiszka; +Cc: Quirin Gylstorff From: Quirin Gylstorff <quirin.gylstorff@siemens.com> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- meta-isar/conf/machine/virtualbox.conf | 16 ++ meta-isar/conf/machine/vmware.conf | 16 ++ .../multiconfig/virtualbox-ova-buster.conf | 8 + meta/classes/virtual-machine-image.bbclass | 92 +++++++++++ .../files/virtual-machine-template.ovf.tmpl | 155 ++++++++++++++++++ .../virtual-machine-template_0.1.bb | 17 ++ scripts/ci_build.sh | 3 +- 7 files changed, 306 insertions(+), 1 deletion(-) create mode 100644 meta-isar/conf/machine/virtualbox.conf create mode 100644 meta-isar/conf/machine/vmware.conf create mode 100644 meta-isar/conf/multiconfig/virtualbox-ova-buster.conf create mode 100644 meta/classes/virtual-machine-image.bbclass create mode 100644 meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl create mode 100644 meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb diff --git a/meta-isar/conf/machine/virtualbox.conf b/meta-isar/conf/machine/virtualbox.conf new file mode 100644 index 0000000..9b823ff --- /dev/null +++ b/meta-isar/conf/machine/virtualbox.conf @@ -0,0 +1,16 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +DISTRO_ARCH ?= "amd64" + +KERNEL_NAME ?= "amd64" +BOOTLOADER ?= "grub" + +WKS_FILE ?= "sdimage-efi" + +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" + +VMDK_SUBFORMAT = "monolithicSparse" +IMAGE_TYPE ?= "virtual-machine-image" diff --git a/meta-isar/conf/machine/vmware.conf b/meta-isar/conf/machine/vmware.conf new file mode 100644 index 0000000..b6b4cc7 --- /dev/null +++ b/meta-isar/conf/machine/vmware.conf @@ -0,0 +1,16 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +DISTRO_ARCH ?= "amd64" + +KERNEL_NAME ?= "amd64" +BOOTLOADER ?= "grub" + +WKS_FILE ?= "sdimage-efi" + +IMAGER_INSTALL += "${GRUB_BOOTLOADER_INSTALL}" + +VMDK_SUBFORMAT = "streamOptimized" +IMAGE_TYPE ?= "virtual-machine-image" diff --git a/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf new file mode 100644 index 0000000..3042556 --- /dev/null +++ b/meta-isar/conf/multiconfig/virtualbox-ova-buster.conf @@ -0,0 +1,8 @@ +# +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + + +MACHINE = "virtualbox" +DISTRO = "debian-buster" diff --git a/meta/classes/virtual-machine-image.bbclass b/meta/classes/virtual-machine-image.bbclass new file mode 100644 index 0000000..4d382b4 --- /dev/null +++ b/meta/classes/virtual-machine-image.bbclass @@ -0,0 +1,92 @@ +# This software is a part of ISAR. +# Copyright (C) 2019-2020 Siemens AG +# +# This class allows to generate images for vmware and virtualbox +# + +inherit buildchroot +inherit wic-img +IMAGER_BUILD_DEPS += "virtual-machine-template" +IMAGER_INSTALL += "qemu-utils gawk uuid-runtime virtual-machine-template" +export OVA_NAME ?= "${IMAGE_FULLNAME}" +export OVA_MEMORY ?= "8192" +export OVA_NUMBER_OF_CPU ?= "4" +export OVA_VRAM ?= "64" +export OVA_FIRMWARE ?= "efi" +export OVA_ACPI ?= "true" +export OVA_3D_ACCEL ?= "false" +export OVA_CLIPBOARD ?= "bidirectional" +SOURCE_IMAGE_FILE ?= "${IMAGE_FULLNAME}.wic.img" +OVA_SHA_ALG ?= "1" +VIRTUAL_MACHINE_IMAGE_TYPE ?= "vmdk" +export VIRTUAL_MACHINE_IMAGE_FILE ?= "${IMAGE_FULLNAME}-disk001.${VIRTUAL_MACHINE_IMAGE_TYPE}" +VIRTUAL_MACHINE_DISK ?= "${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE}" +# for virtualbox this needs to be monolithicSparse +# for vmware this needs to be streamOptimized +#VMDK_SUBFORMAT ?= "streamOptimized" +export VMDK_SUBFORMAT ?= "monolithicSparse" +def set_convert_options(d): + format = d.getVar("VIRTUAL_MACHINE_IMAGE_TYPE") + if format == "vmdk": + return "-o subformat=%s" % d.getVar("VMDK_SUBFORMAT") + else: + return "" + + +CONVERSION_OPTIONS = "${@set_convert_options(d)}" + +do_convert_wic() { + rm -f '${DEPLOY_DIR_IMAGE}/${VIRTUAL_MACHINE_IMAGE_FILE}' + image_do_mounts + bbnote "Creating ${VIRTUAL_MACHINE_IMAGE_FILE} from ${WIC_IMAGE_FILE}" + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \ + /usr/bin/qemu-img convert -f raw -O ${VIRTUAL_MACHINE_IMAGE_TYPE} ${CONVERSION_OPTIONS} \ + '${PP_DEPLOY}/${SOURCE_IMAGE_FILE}' '${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE}' +} + +addtask convert_wic before do_build after do_wic_image do_copy_boot_files do_install_imager_deps do_transform_template + +# Generate random MAC addresses just as VirtualBox does, the format is +# their assigned prefix for the first 3 bytes followed by 3 random bytes. +VBOX_MAC_PREFIX = "080027" +macgen() { + hexdump -n3 -e "\"${VBOX_MAC_PREFIX}%06X\n\"" /dev/urandom +} +get_disksize() { + image_do_mounts + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \ + qemu-img info -f vmdk "${VIRTUAL_MACHINE_DISK}" | gawk 'match($0, /^virtual size:.*\(([0-9]+) bytes\)/, a) {print a[1]}' +} +do_create_ova() { + if [ ! ${VIRTUAL_MACHINE_IMAGE_TYPE} = "vmdk" ]; then + exit 0 + fi + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ova' + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.ovf' + rm -f '${DEPLOY_DIR_IMAGE}/${OVA_NAME}.mf' + + export PRIMARY_MAC=$(macgen) + export SECONDARY_MAC=$(macgen) + export DISK_NAME=$(basename -s .vmdk ${VIRTUAL_MACHINE_DISK}) + export DISK_SIZE_BYTES=$(get_disksize) + export LAST_CHANGE=$(date -u "+%Y-%m-%dT%H:%M:%SZ") + export OVA_FIRMWARE_VIRTUALBOX=$(echo ${OVA_FIRMWARE} | tr '[a-z]' '[A-Z]') + image_do_mounts + sudo -Es chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} <<'EOSUDO' + export DISK_UUID=$(uuidgen) + export VM_UUID=$(uuidgen) + # create ovf + cat /usr/share/virtual-machine-template/virtual-machine-template.ovf.tmpl | envsubst > ${PP_DEPLOY}/${OVA_NAME}.ovf + tar -H ustar -cvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${OVA_NAME}.ovf + + # virtual box needs here a manifest file vmware does not want to accept the format + if [ "${VMDK_SUBFORMAT}" = "monolithicSparse" ]; then + echo "SHA${OVA_SHA_ALG}(${VIRTUAL_MACHINE_IMAGE_FILE})= $(sha${OVA_SHA_ALG}sum ${PP_DEPLOY}/${VIRTUAL_MACHINE_IMAGE_FILE} | cut -d' ' -f1)" >> ${PP_DEPLOY}/${OVA_NAME}.mf + echo "SHA${OVA_SHA_ALG}(${OVA_NAME}.ovf)= $(sha${OVA_SHA_ALG}sum ${PP_DEPLOY}/${OVA_NAME}.ovf | cut -d' ' -f1)" >> ${PP_DEPLOY}/${OVA_NAME}.mf + tar -H ustar -uvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${OVA_NAME}.mf + fi + tar -H ustar -uvf ${PP_DEPLOY}/${OVA_NAME}.ova -C ${PP_DEPLOY} ${VIRTUAL_MACHINE_IMAGE_FILE} +EOSUDO +} + +addtask do_create_ova after do_convert_wic before do_deploy diff --git a/meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl b/meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl new file mode 100644 index 0000000..e6b5305 --- /dev/null +++ b/meta/recipes-devtools/virtual-machine-template/files/virtual-machine-template.ovf.tmpl @@ -0,0 +1,155 @@ +<?xml version="1.0"?> +<Envelope ovf:version="1.0" xml:lang="en-US" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vbox="http://www.virtualbox.org/ovf/machine"> + <References> + <File ovf:href="${VIRTUAL_MACHINE_IMAGE_FILE}" ovf:id="file1"/> + </References> + <DiskSection> + <Info>List of the virtual disks used in the package</Info> + <Disk ovf:capacity="${DISK_SIZE_BYTES}" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#${VMDK_SUBFORMAT}" vbox:uuid="${DISK_UUID}"/> + </DiskSection> + <NetworkSection> + <Info>Logical networks used in the package</Info> + <Network ovf:name="NAT"> + <Description>Logical network used by this appliance.</Description> + </Network> + </NetworkSection> + <VirtualSystem ovf:id="${OVA_NAME}"> + <Info>A virtual machine</Info> + <OperatingSystemSection ovf:id="96"> + <Info>The kind of installed guest operating system</Info> + <Description>Debian_64</Description> + <vbox:OSType ovf:required="false">Debian_64</vbox:OSType> + </OperatingSystemSection> + <VirtualHardwareSection> + <Info>Virtual hardware requirements for a virtual machine</Info> + <System> + <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> + <vssd:InstanceID>0</vssd:InstanceID> + <vssd:VirtualSystemIdentifier>${OVA_NAME}</vssd:VirtualSystemIdentifier> + <vssd:VirtualSystemType>virtualbox-2.2</vssd:VirtualSystemType> + </System> + <Item> + <rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits> + <rasd:Caption>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:Caption> + <rasd:Description>Number of virtual CPUs</rasd:Description> + <rasd:ElementName>${OVA_NUMBER_OF_CPU} virtual CPU</rasd:ElementName> + <rasd:InstanceID>1</rasd:InstanceID> + <rasd:ResourceType>3</rasd:ResourceType> + <rasd:VirtualQuantity>${OVA_NUMBER_OF_CPU}</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:AllocationUnits>MegaBytes</rasd:AllocationUnits> + <rasd:Caption>${OVA_MEMORY} MB of memory</rasd:Caption> + <rasd:Description>Memory Size</rasd:Description> + <rasd:ElementName>${OVA_MEMORY} MB of memory</rasd:ElementName> + <rasd:InstanceID>2</rasd:InstanceID> + <rasd:ResourceType>4</rasd:ResourceType> + <rasd:VirtualQuantity>${OVA_MEMORY}</rasd:VirtualQuantity> + </Item> + <Item> + <rasd:Address>0</rasd:Address> + <rasd:Caption>ideController0</rasd:Caption> + <rasd:Description>IDE Controller</rasd:Description> + <rasd:ElementName>ideController0</rasd:ElementName> + <rasd:InstanceID>3</rasd:InstanceID> + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> + <rasd:ResourceType>5</rasd:ResourceType> + </Item> + <Item> + <rasd:Address>1</rasd:Address> + <rasd:Caption>ideController1</rasd:Caption> + <rasd:Description>IDE Controller</rasd:Description> + <rasd:ElementName>ideController1</rasd:ElementName> + <rasd:InstanceID>4</rasd:InstanceID> + <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> + <rasd:ResourceType>5</rasd:ResourceType> + </Item> + <Item> + <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> + <rasd:Caption>Ethernet adapter on 'NAT'</rasd:Caption> + <rasd:Connection>NAT</rasd:Connection> + <rasd:ElementName>Ethernet adapter on 'NAT'</rasd:ElementName> + <rasd:InstanceID>5</rasd:InstanceID> + <rasd:ResourceSubType>E1000</rasd:ResourceSubType> + <rasd:ResourceType>10</rasd:ResourceType> + </Item> + <Item> + <rasd:AddressOnParent>0</rasd:AddressOnParent> + <rasd:Caption>disk1</rasd:Caption> + <rasd:Description>Disk Image</rasd:Description> + <rasd:ElementName>disk1</rasd:ElementName> + <rasd:HostResource>/disk/vmdisk1</rasd:HostResource> + <rasd:InstanceID>6</rasd:InstanceID> + <rasd:Parent>3</rasd:Parent> + <rasd:ResourceType>17</rasd:ResourceType> + </Item> + <vmw:Config ovf:required="false" vmw:key="firmware" vmw:value="${OVA_FIRMWARE}"/> + <vmw:Config ovf:required="false" vmw:key="tools.syncTimeWithHost" vmw:value="false"/> + <vmw:Config ovf:required="false" vmw:key="tools.afterPowerOn" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.afterResume" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.beforeGuestShutdown" vmw:value="true"/> + <vmw:Config ovf:required="false" vmw:key="tools.beforeGuestStandby" vmw:value="true"/> + <vmw:ExtraConfig ovf:required="false" vmw:key="virtualHW.productCompatibility" vmw:value="hosted"/> + </VirtualHardwareSection> + <vbox:Machine ovf:required="false" version="1.12-linux" uuid="{${VM_UUID}}" name="${OVA_NAME}" OSType="Debian_64" snapshotFolder="Snapshots" lastStateChange="${LAST_CHANGE}"> + <ovf:Info>Complete VirtualBox machine configuration in VirtualBox format</ovf:Info> + <Hardware> + <CPU count="${OVA_NUMBER_OF_CPU}"> + <PAE enabled="true"/> + <HardwareVirtExLargePages enabled="false"/> + </CPU> + <Memory RAMSize="${OVA_MEMORY}"/> + <Firmware type="${OVA_FIRMWARE_VIRTUALBOX}"/> + <Boot> + <Order position="1" device="HardDisk"/> + <Order position="2" device="None"/> + <Order position="3" device="None"/> + <Order position="4" device="None"/> + </Boot> + <Display VRAMSize="${OVA_VRAM}" monitorCount="1" accelerate3D="${OVA_3D_ACCEL}" accelerate2DVideo="false"/> + <VideoRecording enabled="false" file="Test.webm" horzRes="640" vertRes="480"/> + <RemoteDisplay enabled="false" authType="Null"/> + <BIOS> + <IOAPIC enabled="${OVA_ACPI}"/> + </BIOS> + <USBController enabled="false" enabledEhci="false"/> + <Network> + <Adapter slot="0" enabled="true" MACAddress="${PRIMARY_MAC}" cable="true" speed="0" type="virtio"> + <DisabledModes/> + <NAT> + <DNS pass-domain="true" use-proxy="false" use-host-resolver="false"/> + <Alias logging="false" proxy-only="false" use-same-ports="false"/> + </NAT> + </Adapter> + </Network> + <LPT> + <Port slot="1" enabled="false" IOBase="0x378" IRQ="7"/> + </LPT> + <AudioAdapter driver="Pulse" enabled="false"/> + <RTC localOrUTC="local"/> + <SharedFolders/> + <Clipboard mode="Disabled"/> + <DragAndDrop mode="Disabled"/> + <IO> + <IoCache enabled="true" size="5"/> + <BandwidthGroups/> + </IO> + <HostPci> + <Devices/> + </HostPci> + <EmulatedUSB> + <CardReader enabled="false"/> + </EmulatedUSB> + <Guest memoryBalloonSize="0"/> + <GuestProperties/> + </Hardware> + <StorageControllers> + <StorageController name="IDE Controller" type="PIIX4" PortCount="2" useHostIOCache="true" Bootable="true"> + <AttachedDevice type="HardDisk" port="0" device="0"> + <Image uuid="{${DISK_UUID}}"/> + </AttachedDevice> + </StorageController> + </StorageControllers> + </vbox:Machine> + </VirtualSystem> +</Envelope> diff --git a/meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb b/meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb new file mode 100644 index 0000000..dc67355 --- /dev/null +++ b/meta/recipes-devtools/virtual-machine-template/virtual-machine-template_0.1.bb @@ -0,0 +1,17 @@ +# This software is a part of ISAR. +# +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +inherit dpkg-raw + + +SRC_URI += "file://virtual-machine-template.ovf.tmpl" + +do_install() { + TARGET=${D}/usr/share/virtual-machine-template + install -m 0755 -d ${TARGET} + install -m 0740 ${WORKDIR}/virtual-machine-template.ovf.tmpl \ + ${TARGET}/virtual-machine-template.ovf.tmpl +} diff --git a/scripts/ci_build.sh b/scripts/ci_build.sh index adc403b..419b699 100755 --- a/scripts/ci_build.sh +++ b/scripts/ci_build.sh @@ -35,7 +35,8 @@ TARGETS_SET="\ mc:qemumipsel-buster:isar-image-base \ mc:qemumipsel-bullseye:isar-image-base \ mc:nand-ubi-demo-buster:isar-image-ubi \ - mc:rpi-stretch:isar-image-base" + mc:rpi-stretch:isar-image-base \ + mc:virtualbox-ova-buster:isar-image-base" # qemu-user-static of <= buster too old to build that # mc:qemuarm64-buster:isar-image-base # mc:qemuarm64-bullseye:isar-image-base -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v5 3/3] meta/classes: add cpiogz-img 2020-04-23 9:46 ` [PATCH v5 0/3] some images Q. Gylstorff 2020-04-23 9:46 ` [PATCH v5 1/3] meta/support: Generate a custom initramfs Q. Gylstorff 2020-04-23 9:46 ` [PATCH v5 2/3] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff @ 2020-04-23 9:46 ` Q. Gylstorff 2 siblings, 0 replies; 58+ messages in thread From: Q. Gylstorff @ 2020-04-23 9:46 UTC (permalink / raw) To: isar-users, Jan.Kiszka; +Cc: Quirin Gylstorff, Michael Adler From: Quirin Gylstorff <quirin.gylstorff@siemens.com> to create a initramfs like filesystem. Signed-off-by: Michael Adler <michael.adler@siemens.com> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- .../multiconfig/qemuamd64-buster-cpiogz.conf | 9 +++++++++ meta/classes/cpiogz-img.bbclass | 20 +++++++++++++++++++ scripts/ci_build.sh | 1 + 3 files changed, 30 insertions(+) create mode 100644 meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf create mode 100644 meta/classes/cpiogz-img.bbclass diff --git a/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf b/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf new file mode 100644 index 0000000..cadcdac --- /dev/null +++ b/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf @@ -0,0 +1,9 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +MACHINE ?= "qemuamd64" +DISTRO ?= "debian-buster" + +IMAGE_TYPE = "cpiogz-img" diff --git a/meta/classes/cpiogz-img.bbclass b/meta/classes/cpiogz-img.bbclass new file mode 100644 index 0000000..8efdcb4 --- /dev/null +++ b/meta/classes/cpiogz-img.bbclass @@ -0,0 +1,20 @@ +# This software is a part of ISAR. +# Copyright (C) 2020 Siemens AG +# +# SPDX-License-Identifier: MIT + +CPIOGZ_FNAME ?= "${IMAGE_FULLNAME}.cpio.gz" +CPIOGZ_IMAGE_FILE = "${DEPLOY_DIR_IMAGE}/${CPIOGZ_FNAME}" +IMAGER_INSTALL += "cpio" +CPIO_IMAGE_FORMAT ?= "newc" +do_cpiogz_image() { + sudo rm -f ${CPIOGZ_IMAGE_FILE} + image_do_mounts + sudo chroot ${BUILDCHROOT_DIR} \ + sh -c "cd ${PP_ROOTFS}; /usr/bin/find . | \ + /usr/bin/cpio -H ${CPIO_IMAGE_FORMAT} -o | /usr/bin/gzip -9 > \ + ${PP_DEPLOY}/${CPIOGZ_FNAME}" + sudo chown $(id -u):$(id -g) ${CPIOGZ_IMAGE_FILE} +} + +addtask cpiogz_image before do_image after do_image_tools diff --git a/scripts/ci_build.sh b/scripts/ci_build.sh index 419b699..eb89b87 100755 --- a/scripts/ci_build.sh +++ b/scripts/ci_build.sh @@ -30,6 +30,7 @@ TARGETS_SET="\ mc:qemuamd64-stretch:isar-image-base \ mc:qemuamd64-buster:isar-image-base \ mc:qemuamd64-buster-tgz:isar-image-base \ + mc:qemuamd64-buster-cpiogz:isar-image-base \ mc:qemuamd64-bullseye:isar-image-base \ mc:qemumipsel-stretch:isar-image-base \ mc:qemumipsel-buster:isar-image-base \ -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v4 3/3] meta/classes: add cpiogz-img 2020-04-21 14:57 ` [PATCH v4 0/3] some images Q. Gylstorff 2020-04-21 14:57 ` [PATCH v4 1/3] meta/support: Generate a custom initramfs Q. Gylstorff 2020-04-21 14:57 ` [PATCH v4 2/3] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff @ 2020-04-21 14:57 ` Q. Gylstorff 2 siblings, 0 replies; 58+ messages in thread From: Q. Gylstorff @ 2020-04-21 14:57 UTC (permalink / raw) To: isar-users, henning.schild; +Cc: Quirin Gylstorff, Michael Adler From: Quirin Gylstorff <quirin.gylstorff@siemens.com> to create a initramfs like filesystem. Signed-off-by: Michael Adler <michael.adler@siemens.com> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> --- .../multiconfig/qemuamd64-buster-cpiogz.conf | 9 +++++++++ meta/classes/cpiogz-img.bbclass | 20 +++++++++++++++++++ scripts/ci_build.sh | 1 + 3 files changed, 30 insertions(+) create mode 100644 meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf create mode 100644 meta/classes/cpiogz-img.bbclass diff --git a/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf b/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf new file mode 100644 index 0000000..cadcdac --- /dev/null +++ b/meta-isar/conf/multiconfig/qemuamd64-buster-cpiogz.conf @@ -0,0 +1,9 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2020 +# +# SPDX-License-Identifier: MIT + +MACHINE ?= "qemuamd64" +DISTRO ?= "debian-buster" + +IMAGE_TYPE = "cpiogz-img" diff --git a/meta/classes/cpiogz-img.bbclass b/meta/classes/cpiogz-img.bbclass new file mode 100644 index 0000000..8efdcb4 --- /dev/null +++ b/meta/classes/cpiogz-img.bbclass @@ -0,0 +1,20 @@ +# This software is a part of ISAR. +# Copyright (C) 2020 Siemens AG +# +# SPDX-License-Identifier: MIT + +CPIOGZ_FNAME ?= "${IMAGE_FULLNAME}.cpio.gz" +CPIOGZ_IMAGE_FILE = "${DEPLOY_DIR_IMAGE}/${CPIOGZ_FNAME}" +IMAGER_INSTALL += "cpio" +CPIO_IMAGE_FORMAT ?= "newc" +do_cpiogz_image() { + sudo rm -f ${CPIOGZ_IMAGE_FILE} + image_do_mounts + sudo chroot ${BUILDCHROOT_DIR} \ + sh -c "cd ${PP_ROOTFS}; /usr/bin/find . | \ + /usr/bin/cpio -H ${CPIO_IMAGE_FORMAT} -o | /usr/bin/gzip -9 > \ + ${PP_DEPLOY}/${CPIOGZ_FNAME}" + sudo chown $(id -u):$(id -g) ${CPIOGZ_IMAGE_FILE} +} + +addtask cpiogz_image before do_image after do_image_tools diff --git a/scripts/ci_build.sh b/scripts/ci_build.sh index aa21a6f..bb4525a 100755 --- a/scripts/ci_build.sh +++ b/scripts/ci_build.sh @@ -30,6 +30,7 @@ TARGETS_SET="\ mc:qemuamd64-stretch:isar-image-base \ mc:qemuamd64-buster:isar-image-base \ mc:qemuamd64-buster-tgz:isar-image-base \ + mc:qemuamd64-buster-cpiogz:isar-image-base \ mc:qemuamd64-bullseye:isar-image-base \ mc:qemumipsel-stretch:isar-image-base \ mc:qemumipsel-buster:isar-image-base \ -- 2.20.1 ^ permalink raw reply [flat|nested] 58+ messages in thread
end of thread, other threads:[~2021-03-26 11:52 UTC | newest] Thread overview: 58+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-03-27 13:27 [PATCH 0/3] some image classes Q. Gylstorff 2020-03-27 13:27 ` [PATCH 1/3] meta/classes: Generate a custom initramfs Q. Gylstorff 2020-03-30 7:25 ` Gylstorff Quirin 2020-03-30 8:08 ` Henning Schild 2020-03-27 13:28 ` [PATCH 2/3] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff 2020-03-27 18:50 ` Henning Schild 2020-03-30 7:27 ` Gylstorff Quirin 2020-03-27 13:28 ` [PATCH 3/3] meta/classes: add cpiogz-img Q. Gylstorff 2020-03-27 19:01 ` Henning Schild 2020-03-30 7:29 ` Gylstorff Quirin 2020-03-27 14:51 ` [PATCH] Add ova configuration for testing Q. Gylstorff 2020-03-27 18:46 ` Henning Schild 2020-03-27 14:52 ` [PATCH] conf: Add multiconfig for cpiogz Q. Gylstorff 2020-04-03 14:55 ` [PATCH v2 0/3] some images classes Q. Gylstorff 2020-04-03 14:55 ` [PATCH v2 1/3] meta/support: Generate a custom initramfs Q. Gylstorff 2020-04-09 6:39 ` Henning Schild 2020-04-09 13:59 ` Gylstorff Quirin 2020-04-09 17:18 ` Henning Schild 2020-04-03 14:55 ` [PATCH v2 2/3] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff 2020-04-09 6:48 ` Henning Schild 2020-04-09 14:28 ` Gylstorff Quirin 2020-04-03 14:55 ` [PATCH v2 3/3] meta/classes: add cpiogz-img Q. Gylstorff 2020-04-09 6:54 ` [PATCH v2 0/3] some images classes Henning Schild 2020-04-14 12:24 ` [PATCH v3 " Q. Gylstorff 2020-04-14 12:24 ` [PATCH v3 1/3] meta/support: Generate a custom initramfs Q. Gylstorff 2020-04-20 20:14 ` Henning Schild 2020-04-21 14:30 ` Gylstorff Quirin 2020-04-14 12:24 ` [PATCH v3 2/3] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff 2020-04-14 12:24 ` [PATCH v3 3/3] meta/classes: add cpiogz-img Q. Gylstorff 2020-04-20 20:14 ` [PATCH v3 0/3] some images classes Henning Schild 2020-04-21 14:57 ` [PATCH v4 0/3] some images Q. Gylstorff 2020-04-21 14:57 ` [PATCH v4 1/3] meta/support: Generate a custom initramfs Q. Gylstorff 2020-04-21 14:57 ` [PATCH v4 2/3] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff 2020-04-21 15:17 ` Jan Kiszka 2020-04-23 9:46 ` [PATCH v5 0/3] some images Q. Gylstorff 2020-04-23 9:46 ` [PATCH v5 1/3] meta/support: Generate a custom initramfs Q. Gylstorff 2020-06-18 15:54 ` Harald Seiler 2020-06-22 13:44 ` Gylstorff Quirin 2020-06-25 12:56 ` [PATCH v6 0/3] some images Q. Gylstorff 2020-06-25 12:56 ` [PATCH v6 1/3] meta/support: Generate a custom initramfs Q. Gylstorff 2020-09-16 12:24 ` Harald Seiler 2020-06-25 12:56 ` [PATCH v6 2/3] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff 2020-06-25 12:56 ` [PATCH v6 3/3] meta/classes: add cpiogz-img Q. Gylstorff 2020-10-13 10:22 ` [PATCH v6 0/3] some images Jan Kiszka 2021-02-05 10:07 ` Gylstorff Quirin 2021-02-05 10:52 ` [PATCH v7 0/2] CPIO & OVA Images Q. Gylstorff 2021-02-05 10:52 ` [PATCH v7 1/2] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff 2021-02-05 11:16 ` Jan Kiszka 2021-02-05 10:52 ` [PATCH v7 2/2] meta/classes: add cpiogz-img Q. Gylstorff 2021-02-05 11:09 ` Jan Kiszka 2021-02-05 15:57 ` [PATCH v8 0/2] CPIO & OVA Images Q. Gylstorff 2021-02-05 15:57 ` [PATCH v8 1/2] meta/classes: Generate ova image for VMWare or Virtualbox Q. Gylstorff 2021-03-26 11:47 ` Anton Mikanovich 2021-02-05 15:57 ` [PATCH v8 2/2] meta/classes: add cpiogz-img Q. Gylstorff 2021-03-26 11:51 ` Anton Mikanovich 2020-04-23 9:46 ` [PATCH v5 2/3] meta/classes: Generate ova image for vmware or virtualbox Q. Gylstorff 2020-04-23 9:46 ` [PATCH v5 3/3] meta/classes: add cpiogz-img Q. Gylstorff 2020-04-21 14:57 ` [PATCH v4 " Q. Gylstorff
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox