summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorRenato Botelho <renato@netgate.com>2015-08-31 16:31:14 -0300
committerRenato Botelho <renato@netgate.com>2015-08-31 16:31:14 -0300
commit502db0bde9976bb7c4d950b759e61b8c6eb43582 (patch)
tree6cd64295875a4bd13d1a8fc7908226c88d00f9b4 /tools
parent3236b6f490fe1169b08869c8150f2cafe34614eb (diff)
downloadpfsense-502db0bde9976bb7c4d950b759e61b8c6eb43582.zip
pfsense-502db0bde9976bb7c4d950b759e61b8c6eb43582.tar.gz
Use modern pfSense.ovf template, remove unnecessary variables and use vmdktool to convert disk to a modern version
Diffstat (limited to 'tools')
-rw-r--r--tools/builder_common.sh53
-rw-r--r--tools/builder_defaults.sh15
-rw-r--r--tools/templates/ovf/pfSense.ovf117
3 files changed, 123 insertions, 62 deletions
diff --git a/tools/builder_common.sh b/tools/builder_common.sh
index 31e6baf..8459c87 100644
--- a/tools/builder_common.sh
+++ b/tools/builder_common.sh
@@ -380,7 +380,7 @@ print_flags() {
printf " BUILD_KERNELS: %s\n" $BUILD_KERNELS
printf " Git Branch or Tag: %s\n" $GIT_REPO_BRANCH_OR_TAG
printf " MODULES_OVERRIDE: %s\n" $MODULES_OVERRIDE
- printf " OVADISKSIZE: %s\n" $OVADISKSIZE
+ printf " VMDK_DISK_CAPACITY_IN_GB: %s\n" $VMDK_DISK_CAPACITY_IN_GB
printf " OVA_FIRST_PART_SIZE: %s\n" $OVA_FIRST_PART_SIZE
printf " OVA_SWAP_PART_SIZE: %s\n" $OVA_SWAP_PART_SIZE
printf " OVFTEMPLATE: %s\n" $OVFTEMPLATE
@@ -821,12 +821,29 @@ create_ova_image() {
-p freebsd-boot:=/boot/gptboot \
-p freebsd-ufs/${PRODUCT_NAME}:=${OVA_TMP}/${OVFUFS} \
-p freebsd-swap/swap0::${OVA_SWAP_PART_SIZE} \
- -o ${OVA_TMP}/${OVFVMDK} 2>&1 >> ${LOGFILE}
+ -o ${OVA_TMP}/${OVFVMDK}.tmp 2>&1 >> ${LOGFILE}
- if [ $? -ne 0 -o ! -f ${OVA_TMP}/${OVFVMDK} ]; then
+ if [ $? -ne 0 -o ! -f ${OVA_TMP}/${OVFVMDK}.tmp ]; then
if [ -f ${OVA_TMP}/${OVFUFS} ]; then
rm -f ${OVA_TMP}/${OVFUFS}
fi
+ if [ -f ${OVA_TMP}/${OVFVMDK}.tmp ]; then
+ rm -f ${OVA_TMP}/${OVFVMDK}.tmp
+ fi
+ echo ">>> ERROR: Error creating temporary vmdk image. STOPPING!" | tee -a ${LOGFILE}
+ print_error_pfS
+ fi
+
+ # We don't need it anymore
+ rm -f ${OVA_TMP}/${OVFUFS} >/dev/null 2>&1
+
+ # Convert vmdk disk to modern version
+ vmdktool -v ${OVA_TMP}/${OVFVMDK} ${OVA_TMP}/i${OVFVMDK}.tmp
+
+ if [ $? -ne 0 -o ! -f ${OVA_TMP}/${OVFVMDK}.tmp ]; then
+ if [ -f ${OVA_TMP}/${OVFVMDK}.tmp ]; then
+ rm -f ${OVA_TMP}/${OVFVMDK}.tmp
+ fi
if [ -f ${OVA_TMP}/${OVFVMDK} ]; then
rm -f ${OVA_TMP}/${OVFVMDK}
fi
@@ -834,8 +851,7 @@ create_ova_image() {
print_error_pfS
fi
- # We don't need it anymore
- rm -f ${OVA_TMP}/${OVFUFS} >/dev/null 2>&1
+ rm -f ${OVA_TMP}/i${OVFVMDK}.tmp
ova_setup_ovf_template
@@ -844,8 +860,6 @@ create_ova_image() {
gtar -C ${OVA_TMP} -cpf ${OVAPATH} ${PRODUCT_NAME}.ovf ${OVFVMDK}
rm -f ${OVA_TMP}/${OVFVMDK} >/dev/null 2>&1
- gzip -qf ${OVAPATH} &
-
echo ">>> OVA created: $(LC_ALL=C date)" | tee -a ${LOGFILE}
}
@@ -861,31 +875,28 @@ ova_setup_ovf_template() {
# 78 FreeBSD 64-Bit
if [ "${TARGET}" = "amd64" ]; then
local _os_id="78"
- local _os_type="FreeBSD 64-Bit"
+ local _os_type="freebsd64Guest"
+ local _os_descr="FreeBSD 64-Bit"
elif [ "${TARGET}" = "i386" ]; then
local _os_id="42"
- local _os_type="FreeBSD"
+ local _os_type="freebsdGuest"
+ local _os_descr="FreeBSD"
else
echo ">>> ERROR: Platform not supported for OVA (${TARGET})"
print_error_pfS
fi
- local POPULATEDSIZE=$(du -d0 -m $FINAL_CHROOT_DIR | cut -f1)
- local POPULATEDSIZEBYTES=$((${POPULATEDSIZE}*1024^2))
- local REFERENCESSIZE=$(stat -f "%z" ${OVA_TMP}/${OVFVMDK})
-
- echo ">>> Setting REFERENCESSIZE to ${REFERENCESSIZE}..." | tee -a ${LOGFILE}
- echo ">>> Setting POPULATEDSIZEBYTES to ${POPULATEDSIZEBYTES}..." | tee -a ${LOGFILE}
- echo ">>> Setting DISKSECTIONALLOCATIONUNITS to ${OVA_DISKSECTIONALLOCATIONUNITS}..." | tee -a ${LOGFILE}
- echo ">>> Setting DISKSECTIONCAPACITY to ${OVADISKSIZE}..." | tee -a ${LOGFILE}
+ local POPULATED_SIZE=$(du -d0 -k $FINAL_CHROOT_DIR | cut -f1)
+ local POPULATED_SIZE_IN_BYTES=$((${POPULATED_SIZE}*1024))
+ local VMDK_FILE_SIZE=$(stat -f "%z" ${OVA_TMP}/${OVFVMDK})
sed \
- -e "s,%%REFERENCESSIZE%%,${REFERENCESSIZE},g" \
- -e "s,%%DISKSECTIONALLOCATIONUNITS%%,${OVA_DISKSECTIONALLOCATIONUNITS},g" \
- -e "s,%%DISKSECTIONCAPACITY%%,${OVADISKSIZE},g" \
- -e "s,%%DISKSECTIONPOPULATEDSIZE%%,${POPULATEDSIZEBYTES},g" \
+ -e "s,%%VMDK_FILE_SIZE%%,${VMDK_FILE_SIZE},g" \
+ -e "s,%%VMDK_DISK_CAPACITY_IN_GB%%,${VMDK_DISK_CAPACITY_IN_GB},g" \
+ -e "s,%%POPULATED_SIZE_IN_BYTES%%,${POPULATED_SIZE_IN_BYTES},g" \
-e "s,%%OS_ID%%,${_os_id},g" \
-e "s,%%OS_TYPE%%,${_os_type},g" \
+ -e "s,%%OS_DESCR%%,${_os_descr},g" \
-e "s,%%PRODUCT_NAME%%,${PRODUCT_NAME},g" \
-e "s,%%PRODUCT_VERSION%%,${PRODUCT_VERSION},g" \
-e "s,%%PRODUCT_URL%%,${PRODUCT_URL},g" \
diff --git a/tools/builder_defaults.sh b/tools/builder_defaults.sh
index ff47cb9..55d2882 100644
--- a/tools/builder_defaults.sh
+++ b/tools/builder_defaults.sh
@@ -201,15 +201,12 @@ export OVFTEMPLATE=${OVFTEMPLATE:-"${BUILDER_TOOLS}/templates/ovf/${PRODUCT_NAME
export OVFUFS=${OVFUFS:-"${PRODUCT_NAME}-disk1.ufs"}
# On disk name of VMDK file included in OVA
export OVFVMDK=${OVFVMDK:-"${PRODUCT_NAME}-disk1.vmdk"}
-# 10 gigabyte on disk VMDK size
-export OVADISKSIZE=${OVADISKSIZE:-"10737418240"}
-# first partition size (freebsd-ufs) GPT
-export OVA_FIRST_PART_SIZE=${OVA_FIRST_PART_SIZE:-"$((8*1024*1024*1024))"}
-# swap partition size (freebsd-swap) GPT -
-# remaining space of 10G-8G - 128 block beginning/loader
-export OVA_SWAP_PART_SIZE=${OVA_SWAP_PART_SIZE:-"4193725"}
-# 10737254400 = 10240MB = virtual box vmdk file size XXX grab this value from vbox creation
-export OVA_DISKSECTIONALLOCATIONUNITS=${OVA_DISKSECTIONALLOCATIONUNITS:-"10737254400"}
+# 8 gigabyte on disk VMDK size
+export VMDK_DISK_CAPACITY_IN_GB=${VMDK_DISK_CAPACITY_IN_GB:-"8"}
+# first partition size (freebsd-ufs)
+export OVA_FIRST_PART_SIZE=${OVA_FIRST_PART_SIZE:-"6g"}
+# swap partition size (freebsd-swap)
+export OVA_SWAP_PART_SIZE=${OVA_SWAP_PART_SIZE:-"2G"}
# Temporary place to save files
export OVA_TMP=${OVA_TMP:-"${SCRATCHDIR}/ova_tmp"}
# end of OVF
diff --git a/tools/templates/ovf/pfSense.ovf b/tools/templates/ovf/pfSense.ovf
index 84ff184..1e8b9b7 100644
--- a/tools/templates/ovf/pfSense.ovf
+++ b/tools/templates/ovf/pfSense.ovf
@@ -1,27 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
-<Envelope vmw:buildId="build-171294" 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">
+<!--Generated by VMware VirtualCenter Server, User: root, UTC time: 2015-07-28T05:27:27.755385Z-->
+<Envelope vmw:buildId="build-2646482" 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="pfSense-disk1.vmdk" ovf:id="file1" ovf:size="%%REFERENCESSIZE%%"/>
+ <File ovf:href="pfSense-disk1.vmdk" ovf:id="file1" ovf:size="%%VMDK_FILE_SIZE%%" />
</References>
<DiskSection>
- <Info>List of the virtual disks used in the package</Info>
- <Disk ovf:capacityAllocationUnits="byte" ovf:allocationUnits="%%DISKSECTIONALLOCATIONUNITS%%" ovf:capacity="%%DISKSECTIONCAPACITY%%" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized" populatedSize="%%DISKSECTIONPOPULATEDSIZE%%"/>
+ <Info>Virtual disk information</Info>
+ <Disk ovf:capacity="%%VMDK_DISK_CAPACITY_IN_GB%%" ovf:capacityAllocationUnits="byte * 2^30" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized" ovf:populatedSize="%%POPULATED_SIZE_IN_BYTES%%" />
</DiskSection>
<NetworkSection>
<Info>The list of logical networks</Info>
- <Network ovf:name="VM WAN Network">
- <Description>The VM WAN Network network</Description>
+ <Network ovf:name="WAN Network">
+ <Description>The WAN network</Description>
</Network>
- <Network ovf:name="VM LAN Network">
- <Description>The VM LAN Network network</Description>
+ <Network ovf:name="LAN Network">
+ <Description>The LAN network</Description>
</Network>
</NetworkSection>
<VirtualSystem ovf:id="pfSense">
- <Info>pfSense virtual machine</Info>
+ <Info>A virtual machine</Info>
<Name>pfSense</Name>
- <OperatingSystemSection ovf:id="%%OS_ID%%">
- <Info>%%OS_TYPE%% (pfSense)</Info>
- <Description>%%OS_TYPE%%</Description>
+ <OperatingSystemSection ovf:id="%%OS_ID%%" vmw:osType="%%OS_TYPE%%">
+ <Info>The kind of installed guest operating system</Info>
+ <Description>%%OS_DESCR%%</Description>
</OperatingSystemSection>
<VirtualHardwareSection>
<Info>Virtual hardware requirements</Info>
@@ -29,74 +30,126 @@
<vssd:ElementName>Virtual Hardware Family</vssd:ElementName>
<vssd:InstanceID>0</vssd:InstanceID>
<vssd:VirtualSystemIdentifier>pfSense</vssd:VirtualSystemIdentifier>
- <vssd:VirtualSystemType>vmx-07</vssd:VirtualSystemType>
+ <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:ElementName>2 virtual CPU(s)</rasd:ElementName>
<rasd:InstanceID>1</rasd:InstanceID>
<rasd:ResourceType>3</rasd:ResourceType>
- <rasd:VirtualQuantity>1</rasd:VirtualQuantity>
+ <rasd:VirtualQuantity>2</rasd:VirtualQuantity>
</Item>
<Item>
<rasd:AllocationUnits>byte * 2^20</rasd:AllocationUnits>
<rasd:Description>Memory Size</rasd:Description>
- <rasd:ElementName>1024MB of memory</rasd:ElementName>
+ <rasd:ElementName>512MB of memory</rasd:ElementName>
<rasd:InstanceID>2</rasd:InstanceID>
<rasd:ResourceType>4</rasd:ResourceType>
- <rasd:VirtualQuantity>1024</rasd:VirtualQuantity>
+ <rasd:VirtualQuantity>512</rasd:VirtualQuantity>
</Item>
<Item>
<rasd:Address>0</rasd:Address>
<rasd:Description>SCSI Controller</rasd:Description>
- <rasd:ElementName>scsi0</rasd:ElementName>
+ <rasd:ElementName>SCSI controller 0</rasd:ElementName>
<rasd:InstanceID>3</rasd:InstanceID>
<rasd:ResourceSubType>lsilogic</rasd:ResourceSubType>
<rasd:ResourceType>6</rasd:ResourceType>
+ <vmw:Config ovf:required="false" vmw:key="slotInfo.pciSlotNumber" vmw:value="16" />
</Item>
<Item>
<rasd:Address>1</rasd:Address>
<rasd:Description>IDE Controller</rasd:Description>
- <rasd:ElementName>VirtualIDEController 1</rasd:ElementName>
+ <rasd:ElementName>IDE 1</rasd:ElementName>
<rasd:InstanceID>4</rasd:InstanceID>
<rasd:ResourceType>5</rasd:ResourceType>
</Item>
<Item>
<rasd:Address>0</rasd:Address>
<rasd:Description>IDE Controller</rasd:Description>
- <rasd:ElementName>VirtualIDEController 0</rasd:ElementName>
+ <rasd:ElementName>IDE 0</rasd:ElementName>
<rasd:InstanceID>5</rasd:InstanceID>
<rasd:ResourceType>5</rasd:ResourceType>
</Item>
+ <Item ovf:required="false">
+ <rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
+ <rasd:ElementName>Video card</rasd:ElementName>
+ <rasd:InstanceID>6</rasd:InstanceID>
+ <rasd:ResourceType>24</rasd:ResourceType>
+ <vmw:Config ovf:required="false" vmw:key="enable3DSupport" vmw:value="false" />
+ <vmw:Config ovf:required="false" vmw:key="use3dRenderer" vmw:value="automatic" />
+ <vmw:Config ovf:required="false" vmw:key="useAutoDetect" vmw:value="false" />
+ <vmw:Config ovf:required="false" vmw:key="videoRamSizeInKB" vmw:value="4096" />
+ </Item>
+ <Item ovf:required="false">
+ <rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
+ <rasd:ElementName>VMCI device</rasd:ElementName>
+ <rasd:InstanceID>7</rasd:InstanceID>
+ <rasd:ResourceSubType>vmware.vmci</rasd:ResourceSubType>
+ <rasd:ResourceType>1</rasd:ResourceType>
+ <vmw:Config ovf:required="false" vmw:key="allowUnrestrictedCommunication" vmw:value="false" />
+ <vmw:Config ovf:required="false" vmw:key="slotInfo.pciSlotNumber" vmw:value="32" />
+ </Item>
+ <Item ovf:required="false">
+ <rasd:AddressOnParent>0</rasd:AddressOnParent>
+ <rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
+ <rasd:ElementName>CD/DVD drive 1</rasd:ElementName>
+ <rasd:InstanceID>8</rasd:InstanceID>
+ <rasd:Parent>4</rasd:Parent>
+ <rasd:ResourceSubType>vmware.cdrom.remotepassthrough</rasd:ResourceSubType>
+ <rasd:ResourceType>15</rasd:ResourceType>
+ <vmw:Config ovf:required="false" vmw:key="backing.exclusive" vmw:value="false" />
+ </Item>
<Item>
<rasd:AddressOnParent>7</rasd:AddressOnParent>
<rasd:AutomaticAllocation>true</rasd:AutomaticAllocation>
- <rasd:Connection>VM WAN Network</rasd:Connection>
- <rasd:Description>VmxNet3 ethernet adapter on &quot;VM WAN Network&quot;</rasd:Description>
- <rasd:ElementName>ethernet0</rasd:ElementName>
- <rasd:InstanceID>6</rasd:InstanceID>
+ <rasd:Connection>WAN Network</rasd:Connection>
+ <rasd:Description>VmxNet3 ethernet adapter on "WAN Network"</rasd:Description>
+ <rasd:ElementName>Network adapter 1</rasd:ElementName>
+ <rasd:InstanceID>9</rasd:InstanceID>
<rasd:ResourceSubType>VmxNet3</rasd:ResourceSubType>
<rasd:ResourceType>10</rasd:ResourceType>
+ <vmw:Config ovf:required="false" vmw:key="slotInfo.pciSlotNumber" vmw:value="160" />
+ <vmw:Config ovf:required="false" vmw:key="wakeOnLanEnabled" vmw:value="true" />
</Item>
<Item>
<rasd:AddressOnParent>8</rasd:AddressOnParent>
<rasd:AutomaticAllocation>true</rasd:AutomaticAllocation>
- <rasd:Connection>VM LAN Network</rasd:Connection>
- <rasd:Description>VmxNet3 ethernet adapter on &quot;VM LAN Network&quot;</rasd:Description>
- <rasd:ElementName>ethernet0</rasd:ElementName>
- <rasd:InstanceID>7</rasd:InstanceID>
+ <rasd:Connection>LAN Network</rasd:Connection>
+ <rasd:Description>VmxNet3 ethernet adapter on "LAN Network"</rasd:Description>
+ <rasd:ElementName>Network adapter 2</rasd:ElementName>
+ <rasd:InstanceID>10</rasd:InstanceID>
<rasd:ResourceSubType>VmxNet3</rasd:ResourceSubType>
<rasd:ResourceType>10</rasd:ResourceType>
+ <vmw:Config ovf:required="false" vmw:key="slotInfo.pciSlotNumber" vmw:value="192" />
+ <vmw:Config ovf:required="false" vmw:key="wakeOnLanEnabled" vmw:value="true" />
</Item>
<Item>
<rasd:AddressOnParent>0</rasd:AddressOnParent>
- <rasd:ElementName>scsi0:0</rasd:ElementName>
+ <rasd:ElementName>Hard disk 1</rasd:ElementName>
<rasd:HostResource>ovf:/disk/vmdisk1</rasd:HostResource>
- <rasd:InstanceID>8</rasd:InstanceID>
+ <rasd:InstanceID>11</rasd:InstanceID>
<rasd:Parent>3</rasd:Parent>
<rasd:ResourceType>17</rasd:ResourceType>
+ <vmw:Config ovf:required="false" vmw:key="backing.writeThrough" vmw:value="false" />
</Item>
+ <vmw:Config ovf:required="false" vmw:key="cpuHotAddEnabled" vmw:value="false" />
+ <vmw:Config ovf:required="false" vmw:key="cpuHotRemoveEnabled" vmw:value="false" />
+ <vmw:Config ovf:required="false" vmw:key="firmware" vmw:value="bios" />
+ <vmw:Config ovf:required="false" vmw:key="virtualICH7MPresent" vmw:value="false" />
+ <vmw:Config ovf:required="false" vmw:key="virtualSMCPresent" vmw:value="false" />
+ <vmw:Config ovf:required="false" vmw:key="memoryHotAddEnabled" vmw:value="false" />
+ <vmw:Config ovf:required="false" vmw:key="nestedHVEnabled" vmw:value="false" />
+ <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.standbyAction" vmw:value="powerOnSuspend" />
+ <vmw:Config ovf:required="false" vmw:key="powerOpInfo.suspendType" vmw:value="hard" />
+ <vmw:Config ovf:required="false" vmw:key="tools.afterPowerOn" vmw:value="true" />
+ <vmw:Config ovf:required="false" vmw:key="tools.afterResume" vmw:value="true" />
+ <vmw:Config ovf:required="false" vmw:key="tools.beforeGuestShutdown" vmw:value="true" />
+ <vmw:Config ovf:required="false" vmw:key="tools.beforeGuestStandby" vmw:value="true" />
+ <vmw:Config ovf:required="false" vmw:key="tools.syncTimeWithHost" vmw:value="false" />
+ <vmw:Config ovf:required="false" vmw:key="tools.toolsUpgradePolicy" vmw:value="manual" />
</VirtualHardwareSection>
<ProductSection xsi:type="ovf:ProductSection_Type">
<Info>Describes product information for the service</Info>
@@ -106,8 +159,8 @@
<ProductUrl>%%PRODUCT_URL%%</ProductUrl>
<VendorUrl>%%PRODUCT_URL%%</VendorUrl>
</ProductSection>
- <AnnotationSection xsi:type="ovf:AnnotationSection_Type">
- <Info>An annotation</Info>
+ <AnnotationSection ovf:required="false">
+ <Info>A human-readable annotation</Info>
<Annotation>pfSense is a free, open source customized distribution of FreeBSD tailored for use as a firewall and router. In addition to being a powerful, flexible firewalling and routing platform, it includes a long list of related features and a package system allowing further expandability without adding bloat and potential security vulnerabilities to the base distribution. pfSense is a popular project with more than 1 million downloads since its inception, and proven in countless installations ranging from small home networks protecting a PC and an Xbox to large corporations, universities and other organizations protecting thousands of network devices.</Annotation>
</AnnotationSection>
<EulaSection>
OpenPOWER on IntegriCloud