summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile7
-rwxr-xr-xscripts/build-qemu-image2
-rwxr-xr-xscripts/build-vmware-ovf45
-rw-r--r--scripts/packer-scripts/vmware.sh29
-rw-r--r--scripts/packer.json33
-rw-r--r--scripts/template.ovf131
6 files changed, 246 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 86f0c27d..adce002c 100644
--- a/Makefile
+++ b/Makefile
@@ -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:
diff --git a/scripts/build-qemu-image b/scripts/build-qemu-image
index 8643508a..4a67f0f3 100755
--- a/scripts/build-qemu-image
+++ b/scripts/build-qemu-image
@@ -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
diff --git a/scripts/build-vmware-ovf b/scripts/build-vmware-ovf
new file mode 100755
index 00000000..ff2a5464
--- /dev/null
+++ b/scripts/build-vmware-ovf
@@ -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
diff --git a/scripts/packer-scripts/vmware.sh b/scripts/packer-scripts/vmware.sh
new file mode 100644
index 00000000..60c4db7e
--- /dev/null
+++ b/scripts/packer-scripts/vmware.sh
@@ -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
diff --git a/scripts/packer.json b/scripts/packer.json
index 6d487353..e54dc74e 100644
--- a/scripts/packer.json
+++ b/scripts/packer.json
@@ -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"
+ ]
}
]
}
diff --git a/scripts/template.ovf b/scripts/template.ovf
new file mode 100644
index 00000000..2250eb55
--- /dev/null
+++ b/scripts/template.ovf
@@ -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>