Add macros between %% and %% on pfSense.ovf, then simplify the logic of ova_setup_ovf_template()

This commit is contained in:
Renato Botelho 2015-08-28 11:53:03 -03:00
parent 8950897efd
commit fc48ef5427
2 changed files with 40 additions and 65 deletions

View File

@ -851,53 +851,47 @@ create_ova_image() {
# called from create_ova_image
ova_setup_ovf_template() {
if [ -f ${OVFTEMPLATE} ]; then
cp ${OVFTEMPLATE} ${OVA_TMP}/${PRODUCT_NAME}.ovf
else
if [ ! -f ${OVFTEMPLATE} ]; then
echo ">>> ERROR: OVF template file (${OVFTEMPLATE}) not found."
print_error_pfS
fi
file_search_replace PRODUCT_VERSION $PRODUCT_VERSION ${OVA_TMP}/${PRODUCT_NAME}.ovf
file_search_replace PRODUCT_URL $PRODUCT_URL ${OVA_TMP}/${PRODUCT_NAME}.ovf
local BUILDPLATFORM=$(uname -p)
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}
file_search_replace REFERENCESSIZE ${REFERENCESSIZE} ${OVA_TMP}/${PRODUCT_NAME}.ovf
echo ">>> Setting POPULATEDSIZEBYTES to ${POPULATEDSIZEBYTES}..." | tee -a ${LOGFILE}
# OperatingSystemSection (${PRODUCT_NAME}.ovf)
# 42 FreeBSD 32-Bit
# 78 FreeBSD 64-Bit
if [ "$BUILDPLATFORM" = "i386" ]; then
file_search_replace '"101"' '"42"' ${OVA_TMP}/${PRODUCT_NAME}.ovf
file_search_replace 'FreeBSD XX-Bit' 'FreeBSD' ${OVA_TMP}/${PRODUCT_NAME}.ovf
if [ "${TARGET}" = "amd64" ]; then
local _os_id="78"
local _os_type="FreeBSD 64-Bit"
elif [ "${TARGET}" = "i386" ]; then
local _os_id="42"
local _os_type="FreeBSD"
else
echo ">>> ERROR: Platform not supported for OVA (${TARGET})"
print_error_pfS
fi
if [ "$BUILDPLATFORM" = "amd64" ]; then
file_search_replace '"101"' '"78"' ${OVA_TMP}/${PRODUCT_NAME}.ovf
file_search_replace 'FreeBSD XX-Bit' 'FreeBSD 64-Bit' ${OVA_TMP}/${PRODUCT_NAME}.ovf
fi
file_search_replace DISKSECTIONPOPULATEDSIZE $POPULATEDSIZEBYTES ${OVA_TMP}/${PRODUCT_NAME}.ovf
# 10737254400 = 10240MB = virtual box vmdk file size XXX grab this value from vbox creation
# 10737418240 = 10GB
echo ">>> Setting DISKSECTIONALLOCATIONUNITS to 10737254400..." | tee -a ${LOGFILE}
file_search_replace DISKSECTIONALLOCATIONUNITS $OVA_DISKSECTIONALLOCATIONUNITS ${OVA_TMP}/${PRODUCT_NAME}.ovf
echo ">>> Setting DISKSECTIONCAPACITY to 10737418240..." | tee -a ${LOGFILE}
file_search_replace DISKSECTIONCAPACITY $OVADISKSIZE ${OVA_TMP}/${PRODUCT_NAME}.ovf
}
# called from create_ova_image
# This routine will replace a string in a file
file_search_replace() {
local SEARCH="$1"
local REPLACE="$2"
local FILENAME="$3"
local POPULATEDSIZE=$(du -d0 -m $FINAL_CHROOT_DIR | cut -f1)
local POPULATEDSIZEBYTES=$((${POPULATEDSIZE}*1024^2))
local REFERENCESSIZE=$(stat -f "%z" ${OVA_TMP}/${OVFVMDK})
if [ -f "${FILENAME}" ]; then
sed -i '' -e "s/${SEARCH}/${REPLACE}/g" ${FILENAME}
fi
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}
sed \
-e "s,%%REFERENCESSIZE%%,${REFERENCESSIZE},g" \
-e "s,%%DISKSECTIONALLOCATIONUNITS%%,${OVA_DISKSECTIONALLOCATIONUNITS},g" \
-e "s,%%DISKSECTIONCAPACITY%%,${OVADISKSIZE},g" \
-e "s,%%DISKSECTIONPOPULATEDSIZE%%,${POPULATEDSIZEBYTES},g" \
-e "s,%%OS_ID%%,${_os_id},g" \
-e "s,%%OS_TYPE%%,${_os_type},g" \
-e "s,%%PRODUCT_NAME%%,${PRODUCT_NAME},g" \
-e "s,%%PRODUCT_VERSION%%,${PRODUCT_VERSION},g" \
-e "s,%%PRODUCT_URL%%,${PRODUCT_URL},g" \
-e "/^%%PRODUCT_LICENSE%%/r ${BUILDER_TOOR}/license.txt" \
-e "/^%%PRODUCT_LICENSE%%/d" \
${OVFTEMPLATE} > ${OVA_TMP}/${PRODUCT_NAME}.ovf
}
# Cleans up previous builds

View File

@ -1,11 +1,11 @@
<?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">
<References>
<File ovf:href="pfSense-disk1.vmdk" ovf:id="file1" ovf:size="REFERENCESSIZE"/>
<File ovf:href="pfSense-disk1.vmdk" ovf:id="file1" ovf:size="%%REFERENCESSIZE%%"/>
</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"/>
<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%%"/>
</DiskSection>
<NetworkSection>
<Info>The list of logical networks</Info>
@ -19,9 +19,9 @@
<VirtualSystem ovf:id="pfSense">
<Info>pfSense virtual machine</Info>
<Name>pfSense</Name>
<OperatingSystemSection ovf:id="101" vmw:osType="FreeBSD XX-Bit">
<Info>FreeBSD XX-Bit</Info>
<Description>FreeBSD XX-Bit (pfSense)</Description>
<OperatingSystemSection ovf:id="%%OS_ID%%">
<Info>%%OS_TYPE%% (pfSense)</Info>
<Description>%%OS_TYPE%%</Description>
</OperatingSystemSection>
<VirtualHardwareSection>
<Info>Virtual hardware requirements</Info>
@ -102,9 +102,9 @@
<Info>Describes product information for the service</Info>
<Product>pfSense</Product>
<Vendor>Electric Sheep Fencing, LLC</Vendor>
<Version>PRODUCT_VERSION</Version>
<ProductUrl>PRODUCT_URL</ProductUrl>
<VendorUrl>PRODUCT_URL</VendorUrl>
<Version>%%PRODUCT_VERSION%%</Version>
<ProductUrl>%%PRODUCT_URL%%</ProductUrl>
<VendorUrl>%%PRODUCT_URL%%</VendorUrl>
</ProductSection>
<AnnotationSection xsi:type="ovf:AnnotationSection_Type">
<Info>An annotation</Info>
@ -113,26 +113,7 @@
<EulaSection>
<Info>The End User License Agreement</Info>
<License>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
%%PRODUCT_LICENSE%%
</License>
</EulaSection>
</VirtualSystem>