From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6808879013169201152 X-Received: by 2002:a2e:8015:: with SMTP id j21mr5985434ljg.165.1585553259297; Mon, 30 Mar 2020 00:27:39 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a2e:7017:: with SMTP id l23ls3856705ljc.9.gmail; Mon, 30 Mar 2020 00:27:38 -0700 (PDT) X-Google-Smtp-Source: APiQypK+3GUTznauVryXT4r4n6OIbj+e90WA71y4d8NCOI76R1SCJjbpoOW7tDUnzQs8wAbUEGwr X-Received: by 2002:a2e:811a:: with SMTP id d26mr6313259ljg.128.1585553258217; Mon, 30 Mar 2020 00:27:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1585553258; cv=none; d=google.com; s=arc-20160816; b=Xa7uNHzoz1kuUxcoHIb8rsAUQKFsd89SxMCY65iZsTJM4UEqejj5K1Q97Mhv4GlNtf glmGWa0ES60vUwpQzw+RHlUr3tWr4FjGBs9Bzta8rTyMSLcdtVdtCISxRv1VWZxrQCcN ykr4XJc+ohBiX24Q7m9Kjll/kbKeeDyi1oCxRkaVUOYlEnGCbgQ9AumKehDBPsagGw+V 3c1yz3PnEqFDxj+l/pzJ/ktIDqln37MezIkF3FnT95Y7wcRJcekCEyOnKohK0Bl/sASb kcLvi/I4k95tIHoDCWoBigAWLQhu/JUXLalyypWY6eywa5QMXpQegvsI0AqCqKvkvkwH QYSw== 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=DGoWAyFNK2w25xTQ6+BRr6mnJIOdpslwwEsi7c1qjVc=; b=ipYqUZsxBciOYmkOaMF8m8yA3YwxvoKS9s9wn1a1qPytXfMlql/YZO1SBB2buWP9Av H1C4LfWIGEdk9rh8EC1ivsZbLuFux/gRDh5pirntVtY5KR/YY1lKOQP2WeowSjpmSgDM IL0XMwl66YXtaEjIj0PQ4NhXwTDi1sq8Vt3HnCtD3OtsKX0kC3LxkNaDeIjxnns6y+4W 5E+D0EXh7jdyuLZJY8EPys+RjaZbxIkz/Q60T8r9Jom4QvMDaPOQ77dStc8FukQ0/LKp Kf7i6hOiYRSuhUd3gWSphjoujVRSr8bDHDn4t61LQ18vH8AY0wow280II9OviXXQiHzN xC2w== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of quirin.gylstorff@siemens.com designates 192.35.17.28 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 goliath.siemens.de (goliath.siemens.de. [192.35.17.28]) by gmr-mx.google.com with ESMTPS id w15si232476ljm.5.2020.03.30.00.27.38 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 30 Mar 2020 00:27:38 -0700 (PDT) Received-SPF: pass (google.com: domain of quirin.gylstorff@siemens.com designates 192.35.17.28 as permitted sender) client-ip=192.35.17.28; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of quirin.gylstorff@siemens.com designates 192.35.17.28 as permitted sender) smtp.mailfrom=quirin.gylstorff@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Received: from mail2.sbs.de (mail2.sbs.de [192.129.41.66]) by goliath.siemens.de (8.15.2/8.15.2) with ESMTPS id 02U7Rbht003878 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 30 Mar 2020 09:27:37 +0200 Received: from [167.87.36.50] ([167.87.36.50]) by mail2.sbs.de (8.15.2/8.15.2) with ESMTP id 02U7RaDL006828; Mon, 30 Mar 2020 09:27:37 +0200 Subject: Re: [PATCH 2/3] meta/classes: Generate ova image for vmware or virtualbox To: Henning Schild Cc: isar-users@googlegroups.com References: <20200327132801.19835-1-Quirin.Gylstorff@siemens.com> <20200327132801.19835-3-Quirin.Gylstorff@siemens.com> <20200327195008.7e72c2b1@md1za8fc.ad001.siemens.net> From: Gylstorff Quirin Message-ID: <352dc12d-79dc-4317-c77d-727cb6fdc6cc@siemens.com> Date: Mon, 30 Mar 2020 09:27:36 +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: <20200327195008.7e72c2b1@md1za8fc.ad001.siemens.net> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-TUID: z5lqU3ejVkQD 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" wrote: > >> From: Quirin Gylstorff >> >> Signed-off-by: Quirin Gylstorff >> --- >> 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 >> + >> + > 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"> >> + >> + >> + >> + >> + 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#streamOptimized" >> 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 -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