public inbox for isar-users@googlegroups.com
 help / color / mirror / Atom feed
* [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

* [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

* [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

* [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

* [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

* 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

* 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 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 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 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

* 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

* 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 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

* [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

* [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 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 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 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

* 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 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

* 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 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

* [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 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 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

* 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 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

* [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

* 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

* [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

* 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

* [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 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

* 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

* [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

* 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 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

* [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 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

* 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

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