From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6808879013169201152 X-Received: by 2002:a2e:98c4:: with SMTP id s4mr22864ljj.69.1586442489964; Thu, 09 Apr 2020 07:28:09 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a19:4a42:: with SMTP id x63ls1343594lfa.7.gmail; Thu, 09 Apr 2020 07:28:09 -0700 (PDT) X-Google-Smtp-Source: APiQypIUcjqa559Hf+gQjkdGtIoT6MmKdeQn8JF9OSRoJo8lyu8Z6WZga1Z03ddRTRdd2iqprIS/ X-Received: by 2002:a05:6512:3189:: with SMTP id i9mr7882799lfe.178.1586442489143; Thu, 09 Apr 2020 07:28:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1586442489; cv=none; d=google.com; s=arc-20160816; b=BHrtXsj5AGPLtvCCOn7NBADQm2j8gdKwPh6ZIKyOxTRGDJ3ntx3hM+XNUFcLGNbkrE aM/iAJoavp3cqcDYdW8bnAuQS83Nn57Mvezlacwnkdi3euX5x6p8ZI5PkD0HctaIvMyz 4c7X7tv6jHur/xXmv+0WtkicxcZDZOakarlAX/A8T1/KicJK5Tptcgy7zo6CMJs9N9vD eDKTzWiYy6YMJJFgqMR4Dw7ufaa3/+uVX37JX6zySOlZqmOJhR3c7PyefanmJzqLzZ5H T9T5xb+Vhji8wPEGQRIoFFISGIE+34O2qgRgDQPYgFTeKlDMDb4dai3vuXQqDe/Fdfax ChXw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:content-language:in-reply-to:mime-version :user-agent:date:message-id:from:references:cc:to:subject; bh=LhpX7o3UTJnAr0yhsvsjaaPAxjPXw+A8LVBawXObqJc=; b=FlYmpp/PuhacTDYCu1vvUP8N44a+wjbFYo8tXPYrdJGpQNHTzZMhn890vmkWckMxGp Rpcwfx5qNXBXX0t+9smDfaOP4oJn+A2um7djuPZs9l/9+0t7crDCqsxyeF9I1i5FoTun o99//CKbB42CY4ewQubCXIG+uUK7y+KcW8mBV/L4f0zQDSGnzyfzQUutTArRb/k1tlW2 N96rHUVH/02POjESDqsHEJO/Ij30WeyOGTRAgvVTZ5QlrH1JqNVCFl1D4ysVky8WxVPo dNfwgXz2qXXhRDj5QEPlurIKhR4Go90NspQWMcF75u0DmceY3ux86zWwpPnVaqljN9zL sJOw== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of quirin.gylstorff@siemens.com designates 192.35.17.2 as permitted sender) smtp.mailfrom=quirin.gylstorff@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Return-Path: Received: from thoth.sbs.de (thoth.sbs.de. [192.35.17.2]) by gmr-mx.google.com with ESMTPS id p5si706449ljj.3.2020.04.09.07.28.09 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Apr 2020 07:28:09 -0700 (PDT) Received-SPF: pass (google.com: domain of quirin.gylstorff@siemens.com designates 192.35.17.2 as permitted sender) client-ip=192.35.17.2; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of quirin.gylstorff@siemens.com designates 192.35.17.2 as permitted sender) smtp.mailfrom=quirin.gylstorff@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Received: from mail1.sbs.de (mail1.sbs.de [192.129.41.35]) by thoth.sbs.de (8.15.2/8.15.2) with ESMTPS id 039ES8jY032116 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 9 Apr 2020 16:28:08 +0200 Received: from [167.87.52.41] ([167.87.52.41]) by mail1.sbs.de (8.15.2/8.15.2) with ESMTP id 039ES8eI011404; Thu, 9 Apr 2020 16:28:08 +0200 Subject: Re: [PATCH v2 2/3] meta/classes: Generate ova image for vmware or virtualbox To: Henning Schild Cc: isar-users@googlegroups.com, "Adler, Michael (CT RDA IOT SES-DE)" References: <20200327132801.19835-1-Quirin.Gylstorff@siemens.com> <20200403145510.28120-1-Quirin.Gylstorff@siemens.com> <20200403145510.28120-3-Quirin.Gylstorff@siemens.com> <20200409084849.554154bc@md1za8fc.ad001.siemens.net> From: Gylstorff Quirin Message-ID: Date: Thu, 9 Apr 2020 16:28:08 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: <20200409084849.554154bc@md1za8fc.ad001.siemens.net> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-TUID: ZE+Fldj3VKGK On 4/9/20 8:48 AM, Henning Schild wrote: > Am Fri, 3 Apr 2020 16:55:09 +0200 > schrieb "Q. Gylstorff" : > >> From: Quirin Gylstorff >> >> Signed-off-by: Quirin Gylstorff >> --- >> 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 >> + >> +> 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"> >> + >> + >> + >> + >> + List of the virtual disks used in the package >> + > 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}"/> >> + >> + >> + Logical networks used in the package >> + >> + Logical network used by this >> appliance. >> + >> + >> + >> + A virtual machine >> + >> + The kind of installed guest operating system >> + Debian_64 >> + Debian_64 >> + >> + >> + Virtual hardware requirements for a virtual >> machine >> + >> + Virtual Hardware Family >> + 0 >> + >> ${OVA_NAME} >> + >> virtualbox-2.2 >> + >> + >> + hertz * 10^6 >> + ${OVA_NUMBER_OF_CPU} virtual CPU >> + Number of virtual CPUs >> + ${OVA_NUMBER_OF_CPU} virtual >> CPU >> + 1 >> + 3 >> + >> ${OVA_NUMBER_OF_CPU} >> + >> + >> + MegaBytes >> + ${OVA_MEMORY} MB of memory >> + Memory Size >> + ${OVA_MEMORY} MB of >> memory >> + 2 >> + 4 >> + ${OVA_MEMORY} >> + >> + >> + 0 >> + ideController0 >> + IDE Controller >> + ideController0 >> + 3 >> + PIIX4 >> + 5 >> + >> + >> + 1 >> + ideController1 >> + IDE Controller >> + ideController1 >> + 4 >> + PIIX4 >> + 5 >> + >> + >> + true >> + Ethernet adapter on 'NAT' >> + NAT >> + Ethernet adapter on >> 'NAT' >> + 5 >> + E1000 >> + 10 >> + >> + >> + 0 >> + disk1 >> + Disk Image >> + disk1 >> + /disk/vmdisk1 >> + 6 >> + 3 >> + 17 >> + >> + > vmw:value="${OVA_FIRMWARE}"/> >> + > vmw:key="tools.syncTimeWithHost" vmw:value="false"/> >> + > vmw:value="true"/> >> + > vmw:value="true"/> >> + > vmw:key="tools.beforeGuestShutdown" vmw:value="true"/> >> + > vmw:key="tools.beforeGuestStandby" vmw:value="true"/> >> + > vmw:key="virtualHW.productCompatibility" vmw:value="hosted"/> >> + >> + > uuid="${VM_UUID}" name="${OVA_NAME}" OSType="Debian_64" >> snapshotFolder="Snapshots" lastStateChange="${LAST_CHANGE}"> >> + Complete VirtualBox machine configuration in >> VirtualBox format >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + > accelerate3D="${OVA_3D_ACCEL}" accelerate2DVideo="false"/> >> + > horzRes="640" vertRes="480"/> >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + > MACAddress="${PRIMARY_MAC}" cable="true" speed="0" type="virtio"> >> + >> + >> + > use-host-resolver="false"/> >> + > use-same-ports="false"/> >> + >> + >> + >> + >> + > hostMode="Disconnected"/> >> + > hostMode="Disconnected"/> >> + >> + >> + >> + >> + >> + > enabled="false"/> >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + >> + > PortCount="2" useHostIOCache="true" Bootable="true"> >> + >> + >> + >> + >> + >> + >> + >> + >> +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 >