Add build scripts for VMware OVF (ref T14)

This commit is contained in:
Yuya Kusakabe 2016-03-07 00:00:33 +09:00
parent c3a238ff20
commit 7ba48ff801
6 changed files with 246 additions and 1 deletions

View File

@ -44,6 +44,13 @@ qemu:
@scripts/check-vm-build-env
@scripts/build-qemu-image
.PHONY: vmware-ovf
.ONESHELL:
vmware-ovf:
@set -e
@scripts/check-vm-build-env
@scripts/build-vmware-ovf
.PHONY: clean
.ONESHELL:
clean:

View File

@ -27,4 +27,4 @@ export PACKER_LOG=1
mkdir -p ${PACKER_BUILD_DIR}
packer build -only=qemu scripts/packer.json
packer build -only=qemu-image scripts/packer.json

45
scripts/build-vmware-ovf Executable file
View File

@ -0,0 +1,45 @@
#!/bin/sh
#
# Copyright (C) 2016 VyOS maintainers and contributors
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 or later as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# File: build-vmware-ovf
# Purpose:
# Build VyOS OVF for VMware.
if [ ! $(which vmdk-convert) ]; then
echo "Your system doesn't have vmdk-convert. Please install it from https://github.com/vmware/open-vmdk."
exit 1
else
echo "Your system has vmdk-convert."
fi
export PACKER_BUILD_DIR=packer_build
export PACKER_LOG_PATH=${PACKER_BUILD_DIR}/build_vmware_ovf.log
export PACKER_LOG=1
mkdir -p ${PACKER_BUILD_DIR}
packer build -only=vmware-image scripts/packer.json
# Convert raw image to VMDK
source_image=${PACKER_BUILD_DIR}/vmware/vyos_vmware_image.img
tmp_vmdk=${PACKER_BUILD_DIR}/vmware/tmp.vmdk
vmdk=${PACKER_BUILD_DIR}/vmware/vyos_vmware_image.vmdk
qemu-img convert -f raw ${source_image} -O vmdk -o adapter_type=lsilogic ${tmp_vmdk}
vmdk-convert ${tmp_vmdk} ${vmdk}
# Generate OVF
vmdk_file_size=$(du --bytes ${vmdk} | awk '{print $1}')
cat scripts/template.ovf | sed "s/{{vmdk_file_size}}/${vmdk_file_size}/" > packer_build/vmware/vyos_vmware_image.ovf

View File

@ -0,0 +1,29 @@
#!/bin/vbash
source /opt/vyatta/etc/functions/script-template
# Add Debian Jessie repository
set system package repository jessie url 'http://ftp.nl.debian.org/debian/'
set system package repository jessie distribution 'jessie'
set system package repository jessie components 'main contrib non-free'
commit
save
# Install open-vm-tools
sudo apt-get update
sudo apt-get -y install open-vm-tools
# Delete Debian Jessie repository
delete system package repository jessie
commit
save
# Removing leftover leases and persistent rules
sudo rm -f /var/lib/dhcp3/*
# Removing apt caches
sudo rm -rf /var/cache/apt/*
# Removing hw-id
delete interfaces ethernet eth0 hw-id
commit
save

View File

@ -7,6 +7,7 @@
"builders":
[
{
"name": "qemu-image",
"type": "qemu",
"iso_url": "{{user `iso_url`}}",
"iso_checksum": "{{user `iso_checksum`}}",
@ -57,6 +58,38 @@
"save<enter><wait5>",
"exit<enter><wait5>"
]
},
{
"name": "vmware-image",
"type": "qemu",
"iso_url": "{{user `output_directory`}}/qemu/vyos_qemu_image.img",
"iso_checksum_type": "none",
"output_directory": "{{user `output_directory`}}/vmware",
"shutdown_command": "sudo halt -p",
"disk_image": true,
"disk_size": 4096,
"format": "raw",
"headless": false,
"accelerator": "tcg",
"ssh_host_port_min": 2222,
"ssh_host_port_max": 2229,
"ssh_username": "vyos",
"ssh_password": "vyos",
"ssh_port": 22,
"ssh_wait_timeout": "300s",
"vm_name": "vyos_vmware_image.img",
"net_device": "virtio-net",
"disk_interface": "virtio",
"boot_wait": "5s"
}
],
"provisioners": [
{
"type": "shell",
"only": ["vmware-image"],
"scripts": [
"scripts/packer-scripts/vmware.sh"
]
}
]
}

131
scripts/template.ovf Normal file
View File

@ -0,0 +1,131 @@
<?xml version="1.0" encoding="UTF-8"?>
<Envelope vmw:buildId="build-3018522" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:cim="http://schemas.dmtf.org/wbem/wscim/1/common" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vmw="http://www.vmware.com/schema/ovf" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<References>
<File ovf:href="vyos_vmware_image.vmdk" ovf:id="file1" ovf:size="{{vmdk_file_size}}"/>
</References>
<DiskSection>
<Info>Virtual disk information</Info>
<Disk ovf:capacity="4" ovf:capacityAllocationUnits="byte * 2^30" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized" ovf:populatedSize="0"/>
</DiskSection>
<NetworkSection>
<Info>The list of logical networks</Info>
<Network ovf:name="VM Network">
<Description>The VM Network network</Description>
</Network>
</NetworkSection>
<VirtualSystem ovf:id="vm">
<Info>A virtual machine</Info>
<Name>vyos</Name>
<OperatingSystemSection ovf:id="1" vmw:osType="*other3xLinux64Guest">
<Info>The kind of installed guest operating system</Info>
</OperatingSystemSection>
<VirtualHardwareSection>
<Info>Virtual hardware requirements</Info>
<System>
<vssd:ElementName>Virtual Hardware Family</vssd:ElementName>
<vssd:InstanceID>0</vssd:InstanceID>
<vssd:VirtualSystemIdentifier>vyos</vssd:VirtualSystemIdentifier>
<vssd:VirtualSystemType>vmx-08</vssd:VirtualSystemType>
</System>
<Item>
<rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits>
<rasd:Description>Number of Virtual CPUs</rasd:Description>
<rasd:ElementName>1 virtual CPU(s)</rasd:ElementName>
<rasd:InstanceID>1</rasd:InstanceID>
<rasd:ResourceType>3</rasd:ResourceType>
<rasd:VirtualQuantity>1</rasd:VirtualQuantity>
</Item>
<Item>
<rasd:AllocationUnits>byte * 2^20</rasd:AllocationUnits>
<rasd:Description>Memory Size</rasd:Description>
<rasd:ElementName>512MB of memory</rasd:ElementName>
<rasd:InstanceID>2</rasd:InstanceID>
<rasd:ResourceType>4</rasd:ResourceType>
<rasd:VirtualQuantity>512</rasd:VirtualQuantity>
</Item>
<Item ovf:required="false">
<rasd:Address>0</rasd:Address>
<rasd:Description>USB Controller (EHCI)</rasd:Description>
<rasd:ElementName>usb</rasd:ElementName>
<rasd:InstanceID>3</rasd:InstanceID>
<rasd:ResourceSubType>vmware.usb.ehci</rasd:ResourceSubType>
<rasd:ResourceType>23</rasd:ResourceType>
<vmw:Config ovf:required="false" vmw:key="ehciEnabled" vmw:value="true"/>
</Item>
<Item>
<rasd:Address>0</rasd:Address>
<rasd:Description>SCSI Controller</rasd:Description>
<rasd:ElementName>scsiController0</rasd:ElementName>
<rasd:InstanceID>4</rasd:InstanceID>
<rasd:ResourceSubType>lsilogic</rasd:ResourceSubType>
<rasd:ResourceType>6</rasd:ResourceType>
</Item>
<Item>
<rasd:Address>1</rasd:Address>
<rasd:Description>IDE Controller</rasd:Description>
<rasd:ElementName>ideController1</rasd:ElementName>
<rasd:InstanceID>5</rasd:InstanceID>
<rasd:ResourceType>5</rasd:ResourceType>
</Item>
<Item ovf:required="false">
<rasd:AutomaticAllocation>true</rasd:AutomaticAllocation>
<rasd:ElementName>serial0</rasd:ElementName>
<rasd:InstanceID>6</rasd:InstanceID>
<rasd:ResourceType>21</rasd:ResourceType>
<vmw:Config ovf:required="false" vmw:key="yieldOnPoll" vmw:value="false"/>
</Item>
<Item ovf:required="false">
<rasd:AddressOnParent>0</rasd:AddressOnParent>
<rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
<rasd:ElementName>cdrom0</rasd:ElementName>
<rasd:InstanceID>7</rasd:InstanceID>
<rasd:Parent>5</rasd:Parent>
<rasd:ResourceType>15</rasd:ResourceType>
</Item>
<Item>
<rasd:AddressOnParent>0</rasd:AddressOnParent>
<rasd:ElementName>disk0</rasd:ElementName>
<rasd:HostResource>ovf:/disk/vmdisk1</rasd:HostResource>
<rasd:InstanceID>8</rasd:InstanceID>
<rasd:Parent>4</rasd:Parent>
<rasd:ResourceType>17</rasd:ResourceType>
</Item>
<Item>
<rasd:AddressOnParent>2</rasd:AddressOnParent>
<rasd:AutomaticAllocation>true</rasd:AutomaticAllocation>
<rasd:Connection>VM Network</rasd:Connection>
<rasd:Description>VMXNET3 ethernet adapter on &quot;nat&quot;</rasd:Description>
<rasd:ElementName>ethernet0</rasd:ElementName>
<rasd:InstanceID>9</rasd:InstanceID>
<rasd:ResourceSubType>VMXNET3</rasd:ResourceSubType>
<rasd:ResourceType>10</rasd:ResourceType>
<vmw:Config ovf:required="false" vmw:key="wakeOnLanEnabled" vmw:value="false"/>
</Item>
<Item ovf:required="false">
<rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
<rasd:ElementName>sound</rasd:ElementName>
<rasd:InstanceID>10</rasd:InstanceID>
<rasd:ResourceSubType>vmware.soundcard.ensoniq1371</rasd:ResourceSubType>
<rasd:ResourceType>1</rasd:ResourceType>
</Item>
<Item ovf:required="false">
<rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
<rasd:ElementName>video</rasd:ElementName>
<rasd:InstanceID>11</rasd:InstanceID>
<rasd:ResourceType>24</rasd:ResourceType>
</Item>
<Item ovf:required="false">
<rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
<rasd:ElementName>vmci</rasd:ElementName>
<rasd:InstanceID>12</rasd:InstanceID>
<rasd:ResourceSubType>vmware.vmci</rasd:ResourceSubType>
<rasd:ResourceType>1</rasd:ResourceType>
</Item>
<vmw:Config ovf:required="false" vmw:key="cpuHotAddEnabled" vmw:value="true"/>
<vmw:Config ovf:required="false" vmw:key="memoryHotAddEnabled" vmw:value="true"/>
<vmw:Config ovf:required="false" vmw:key="powerOpInfo.powerOffType" vmw:value="soft"/>
<vmw:Config ovf:required="false" vmw:key="powerOpInfo.resetType" vmw:value="soft"/>
<vmw:Config ovf:required="false" vmw:key="powerOpInfo.suspendType" vmw:value="soft"/>
</VirtualHardwareSection>
</VirtualSystem>
</Envelope>