summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile7
-rw-r--r--README.md25
-rwxr-xr-xdata/live-build-config/hooks/13-vyos_replace.chroot3
-rwxr-xr-xdata/live-build-config/hooks/14-firmware-linux-nonfree.chroot6
-rwxr-xr-xdata/live-build-config/hooks/15-sources_list.chroot (renamed from data/live-build-config/hooks/13-sources_list.chroot)0
-rwxr-xr-xdata/live-build-config/hooks/16-fuse.chroot (renamed from data/live-build-config/hooks/14-fuse.chroot)0
-rwxr-xr-xdata/live-build-config/hooks/17-gen_initramfs.chroot (renamed from data/live-build-config/hooks/15-gen_initramfs.chroot)0
-rwxr-xr-xdata/live-build-config/hooks/18-disable_services.chroot (renamed from data/live-build-config/hooks/16-disable_services.chroot)0
-rwxr-xr-xdata/live-build-config/hooks/19-kernel_symlinks.chroot (renamed from data/live-build-config/hooks/17-kernel_symlinks.chroot)0
-rwxr-xr-xdata/live-build-config/hooks/20-rm_ddclient_hook.chroot3
-rwxr-xr-xscripts/build-qemu-image2
-rwxr-xr-xscripts/build-vmware-image74
-rwxr-xr-xscripts/check-vm-build-env2
-rwxr-xr-xscripts/live-build-config2
-rw-r--r--scripts/packer-scripts/vmware.sh29
-rw-r--r--scripts/packer.json89
-rw-r--r--scripts/template.ovf121
17 files changed, 330 insertions, 33 deletions
diff --git a/Makefile b/Makefile
index 86f0c27d..2e6dd9ad 100644
--- a/Makefile
+++ b/Makefile
@@ -44,6 +44,13 @@ qemu:
@scripts/check-vm-build-env
@scripts/build-qemu-image
+.PHONY: vmware
+.ONESHELL:
+vmware:
+ @set -e
+ @scripts/check-vm-build-env
+ @scripts/build-vmware-image
+
.PHONY: clean
.ONESHELL:
clean:
diff --git a/README.md b/README.md
index ea88d028..32b44a98 100644
--- a/README.md
+++ b/README.md
@@ -52,11 +52,32 @@ Individual packages may have other build dependencies. If some packages are miss
Before you can build an image, you need to configure your build.
To build an image, use the following commands:
- ./configure
- make iso
+
+```
+./configure
+make iso
+```
The ./configure script has a number of options that you can see by calling it with --help
+## Building the images for virtualization platforms
+
+* QEMU
+
+Run following command after building the ISO image.
+
+```
+make qemu
+```
+
+* VMware
+
+Run following command after building the QEMU image.
+
+```
+make vmware
+```
+
# Development process
## git branches
diff --git a/data/live-build-config/hooks/13-vyos_replace.chroot b/data/live-build-config/hooks/13-vyos_replace.chroot
new file mode 100755
index 00000000..dcb00ff6
--- /dev/null
+++ b/data/live-build-config/hooks/13-vyos_replace.chroot
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+apt-get -y install vyos-replace
diff --git a/data/live-build-config/hooks/14-firmware-linux-nonfree.chroot b/data/live-build-config/hooks/14-firmware-linux-nonfree.chroot
new file mode 100755
index 00000000..3cb7dc6b
--- /dev/null
+++ b/data/live-build-config/hooks/14-firmware-linux-nonfree.chroot
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+cp /etc/apt/sources.list /etc/apt/sources.list.d/non-free.list
+sed -i 's/main/non-free/g' /etc/apt/sources.list.d/non-free.list
+apt-get update
+apt-get -y install firmware-linux-nonfree
diff --git a/data/live-build-config/hooks/13-sources_list.chroot b/data/live-build-config/hooks/15-sources_list.chroot
index 956f9bba..956f9bba 100755
--- a/data/live-build-config/hooks/13-sources_list.chroot
+++ b/data/live-build-config/hooks/15-sources_list.chroot
diff --git a/data/live-build-config/hooks/14-fuse.chroot b/data/live-build-config/hooks/16-fuse.chroot
index 126dc626..126dc626 100755
--- a/data/live-build-config/hooks/14-fuse.chroot
+++ b/data/live-build-config/hooks/16-fuse.chroot
diff --git a/data/live-build-config/hooks/15-gen_initramfs.chroot b/data/live-build-config/hooks/17-gen_initramfs.chroot
index aced728a..aced728a 100755
--- a/data/live-build-config/hooks/15-gen_initramfs.chroot
+++ b/data/live-build-config/hooks/17-gen_initramfs.chroot
diff --git a/data/live-build-config/hooks/16-disable_services.chroot b/data/live-build-config/hooks/18-disable_services.chroot
index c68a6b3d..c68a6b3d 100755
--- a/data/live-build-config/hooks/16-disable_services.chroot
+++ b/data/live-build-config/hooks/18-disable_services.chroot
diff --git a/data/live-build-config/hooks/17-kernel_symlinks.chroot b/data/live-build-config/hooks/19-kernel_symlinks.chroot
index e63ca263..e63ca263 100755
--- a/data/live-build-config/hooks/17-kernel_symlinks.chroot
+++ b/data/live-build-config/hooks/19-kernel_symlinks.chroot
diff --git a/data/live-build-config/hooks/20-rm_ddclient_hook.chroot b/data/live-build-config/hooks/20-rm_ddclient_hook.chroot
new file mode 100755
index 00000000..173b4e5c
--- /dev/null
+++ b/data/live-build-config/hooks/20-rm_ddclient_hook.chroot
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+rm -f /etc/dhcp/dhclient-exit-hooks.d/ddclient
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-image b/scripts/build-vmware-image
new file mode 100755
index 00000000..e665e0b5
--- /dev/null
+++ b/scripts/build-vmware-image
@@ -0,0 +1,74 @@
+#!/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-image
+# Purpose:
+# Build VyOS OVA and 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
+
+if [ ! $(which ovftool) ]; then
+ echo "Your system doesn't have ovftool. Please install it from https://www.vmware.com/support/developer/ovf/."
+ exit 1
+else
+ echo "Your system has ovftool."
+fi
+
+export PACKER_BUILD_DIR=packer_build
+
+DST_DIR=${PACKER_BUILD_DIR}/vmware
+mkdir -p ${DST_DIR}
+
+# Convert raw image to VMDK
+source_image=${PACKER_BUILD_DIR}/qemu/vyos_qemu_image.img
+tmp_vmdk=${DST_DIR}/tmp.vmdk
+vmdk=${DST_DIR}/vyos_vmware_image.vmdk
+ovf=${DST_DIR}/vyos_vmware_image.ovf
+qemu-img convert -f raw ${source_image} -O vmdk -o adapter_type=lsilogic ${tmp_vmdk}
+vmdk-convert ${tmp_vmdk} ${vmdk}
+
+# Generate OVF
+echo 'Generating OVF file...'
+vmdk_file_size=$(du --bytes ${vmdk} | cut -f1)
+vmdk_populated_size=$(vmdk-convert -i ${vmdk} | jq .used)
+version=$(cat build/version)
+sed scripts/template.ovf \
+ -e "s/{{vmdk_file_size}}/${vmdk_file_size}/" \
+ -e "s/{{vmdk_populated_size}}/${vmdk_populated_size}/" \
+ -e "s/{{version}}/${version}/" \
+ > ${ovf}
+
+# Generate manifest file
+cd ${DST_DIR}
+openssl sha1 *.vmdk *.ovf > vyos_vmware_image.mf
+
+# Convert the OVF to signed OVA...
+echo 'Converting the OVF to signed OVA...'
+private_key=${PRIVATE_KEY_PATH:-"../../key/privatekey.pem"}
+if [ ! -f ${private_key} ]; then
+ echo 'Please put your key to "key/privatekey.pem" in repository root, or set PRIVATE_KEY_PATH to environment variables.'
+ exit 1
+fi
+ovftool --privateKey=${PRIVATE_KEY_PATH} vyos_vmware_image.ovf vyos_vmware_image-signed.ova
+
+# Convert the OVF to signed OVF...
+echo 'Converting the OVF to signed OVF...'
+ovftool --privateKey=${PRIVATE_KEY_PATH} vyos_vmware_image.ovf vyos_vmware_image-signed.ovf
diff --git a/scripts/check-vm-build-env b/scripts/check-vm-build-env
index 47ec5922..c32f2b13 100755
--- a/scripts/check-vm-build-env
+++ b/scripts/check-vm-build-env
@@ -26,7 +26,7 @@ import util
deps = {
'packages': [
- 'make',
+ 'jq',
'qemu-system-x86',
'qemu-utils'
],
diff --git a/scripts/live-build-config b/scripts/live-build-config
index dac8c27c..52660571 100755
--- a/scripts/live-build-config
+++ b/scripts/live-build-config
@@ -36,7 +36,7 @@ lb config noauto \
--architectures {{architecture}} \
--bootappend-live "boot=live components hostname=vyos username=live nopersistence noautologin nonetworking union=overlay" \
--linux-flavours {{architecture}}-vyos \
- --linux-packages linux-image-4.4.1 \
+ --linux-packages linux-image-4.4.5 \
--bootloader syslinux \
--binary-images iso-hybrid \
--debian-installer false \
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 5d5f201e..b09b9834 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`}}",
@@ -16,46 +17,78 @@
"disk_size": 4096,
"format": "raw",
"headless": true,
- "accelerator": "kvm",
+ "accelerator": "tcg",
"ssh_host_port_min": 2222,
"ssh_host_port_max": 2229,
"ssh_username": "vyos",
"ssh_password": "vyos",
"ssh_port": 22,
- "ssh_wait_timeout": "30s",
+ "ssh_wait_timeout": "300s",
"vm_name": "vyos_qemu_image.img",
"net_device": "virtio-net",
"disk_interface": "virtio",
"boot_wait": "5s",
"boot_command":
[
- "<enter><wait10><wait10>",
- "vyos<enter><wait>",
- "vyos<enter><wait>",
- "install image<enter><wait>",
- "<enter><wait>",
- "<enter><wait>",
- "<enter><wait>",
- "Yes<enter><wait>",
- "<enter><wait10>",
- "<enter><wait>",
- "<enter><wait>",
- "vyos<enter><wait>",
- "vyos<enter><wait>",
+ "<enter><wait3m>",
+ "vyos<enter><wait5>",
+ "vyos<wait><enter><wait10>",
+ "install image<enter><wait5>",
+ "<enter><wait5>",
+ "<enter><wait5>",
+ "<enter><wait5>",
+ "Yes<enter><wait5>",
"<enter><wait10>",
- "reboot<enter><wait>",
- "Yes<enter><wait10><wait10><wait10>",
- "vyos<enter><wait>",
- "vyos<enter><wait>",
- "configure<enter><wait>",
- "delete system console<enter><wait>",
- "set interface ethernet eth0 address dhcp<enter><wait>",
- "set service ssh<enter><wait>",
- "commit<enter><wait>",
- "save<enter><wait>",
- "exit<enter><wait>",
- "reboot<enter><wait>",
- "Yes<enter><wait10><wait10><wait10><wait10><wait10>"
+ "<enter><wait5>",
+ "<enter><wait5>",
+ "vyos<enter><wait5>",
+ "vyos<enter><wait10>",
+ "<enter><wait10><wait10>",
+ "reboot<enter><wait5>",
+ "Yes<enter><wait3m>",
+ "vyos<enter><wait5>",
+ "vyos<enter><wait10>",
+ "configure<enter><wait5>",
+ "set interface ethernet eth0 address dhcp<enter><wait5>",
+ "set service ssh<enter><wait5>",
+ "commit<enter><wait5>",
+ "save<enter><wait5>",
+ "delete interface ethernet eth0 hw-id<enter><wait5>",
+ "commit<enter><wait5>",
+ "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": true,
+ "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..f3624339
--- /dev/null
+++ b/scripts/template.ovf
@@ -0,0 +1,121 @@
+<?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="{{vmdk_populated_size}}"/>
+ </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="other26xLinux64Guest">
+ <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-09</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^30</rasd:AllocationUnits>
+ <rasd:Description>Memory Size</rasd:Description>
+ <rasd:ElementName>1GB of memory</rasd:ElementName>
+ <rasd:InstanceID>2</rasd:InstanceID>
+ <rasd:ResourceType>4</rasd:ResourceType>
+ <rasd:VirtualQuantity>1</rasd:VirtualQuantity>
+ </Item>
+ <Item>
+ <rasd:Address>0</rasd:Address>
+ <rasd:Description>SCSI Controller</rasd:Description>
+ <rasd:ElementName>scsiController0</rasd:ElementName>
+ <rasd:InstanceID>3</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>4</rasd:InstanceID>
+ <rasd:ResourceType>5</rasd:ResourceType>
+ </Item>
+ <Item ovf:required="false">
+ <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation>
+ <rasd:ElementName>serial0</rasd:ElementName>
+ <rasd:InstanceID>5</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>6</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>7</rasd:InstanceID>
+ <rasd:Parent>3</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;VM Network&quot;</rasd:Description>
+ <rasd:ElementName>ethernet0</rasd:ElementName>
+ <rasd:InstanceID>8</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>video</rasd:ElementName>
+ <rasd:InstanceID>9</rasd:InstanceID>
+ <rasd:ResourceType>24</rasd:ResourceType>
+ </Item>
+ <Item ovf:required="false">
+ <rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
+ <rasd:ElementName>vmci</rasd:ElementName>
+ <rasd:InstanceID>10</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>
+ <ProductSection>
+ <Info>VyOS is a Linux-based network operating system that provides software-based network routing, firewall, and VPN functionality.</Info>
+ <Product>VyOS</Product>
+ <Vendor>VyOS maintainers and contributors</Vendor>
+ <Version>{{version}}</Version>
+ </ProductSection>
+ </VirtualSystem>
+</Envelope>