summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbuild.sh5
-rw-r--r--license.txt93
-rw-r--r--src/etc/inc/pfsense-utils.inc4
-rw-r--r--src/etc/inc/service-utils.inc7
-rw-r--r--src/etc/inc/services.inc15
-rw-r--r--src/etc/inc/system.inc17
-rw-r--r--src/etc/inc/upgrade_config.inc95
-rwxr-xr-xsrc/etc/rc.php_ini_setup9
-rwxr-xr-xsrc/usr/local/bin/mail.php2
-rw-r--r--src/usr/local/www/system_advanced_misc.php2
-rw-r--r--src/usr/local/www/widgets/widgets/system_information.widget.php12
-rwxr-xr-xtools/build_snapshots.sh13
-rw-r--r--tools/builder_common.sh64
-rw-r--r--tools/builder_defaults.sh74
-rw-r--r--tools/templates/core_pkg/default-config-vmware/metadir/+DESC3
-rw-r--r--tools/templates/core_pkg/default-config-vmware/metadir/+INSTALL15
-rw-r--r--tools/templates/core_pkg/default-config-vmware/metadir/+MANIFEST15
-rw-r--r--tools/templates/core_pkg/default-config-vmware/pkg-plist1
18 files changed, 276 insertions, 170 deletions
diff --git a/build.sh b/build.sh
index 6c3e98b..7200d86 100755
--- a/build.sh
+++ b/build.sh
@@ -72,7 +72,7 @@ usage() {
echo " --update-poudriere-jails [-a ARCH_LIST] - Update poudriere jails using current patch versions"
echo " --update-poudriere-ports - Update poudriere ports tree"
echo " --update-pkg-repo - Rebuild necessary ports on poudriere and update pkg repo"
- echo " --do-not-upload|-U - Do not send updated pkg repo to PKG_RSYNC_HOSTNAME"
+ echo " --do-not-upload|-u - Do not upload pkgs or snapshots"
echo " -V VARNAME - print value of variable VARNAME"
exit 1
}
@@ -181,7 +181,7 @@ while test "$1" != ""; do
--update-pkg-repo)
BUILDACTION="update_pkg_repo"
;;
- --do-not-upload|-U)
+ --do-not-upload|-u)
export DO_NOT_UPLOAD=1
;;
all|*iso*|*ova*|*memstick*|*memstickserial*|*memstickadi*|*nanobsd*|*nanobsd-vga*|*fullupdate*)
@@ -216,7 +216,6 @@ launch
case $BUILDACTION in
builder_setup)
- update_freebsd_sources
builder_setup
;;
buildkernels)
diff --git a/license.txt b/license.txt
index 93f2f5f..c29218a 100644
--- a/license.txt
+++ b/license.txt
@@ -1,48 +1,45 @@
-/* ====================================================================
- * Copyright (c) 2004-2015 Electric Sheep Fencing, LLC. All rights reserved.
- *
- * 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.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgment:
- * "This product includes software developed by the pfSense Project
- * for use in the pfSense® software distribution. (http://www.pfsense.org/).
- *
- * 4. The names "pfSense" and "pfSense Project" must not be used to
- * endorse or promote products derived from this software without
- * prior written permission. For written permission, please contact
- * coreteam@pfsense.org.
- *
- * 5. Products derived from this software may not be called "pfSense"
- * nor may "pfSense" appear in their names without prior written
- * permission of the Electric Sheep Fencing, LLC.
- *
- * 6. Redistributions of any form whatsoever must retain the following
- * acknowledgment:
- *
- * "This product includes software developed by the pfSense Project
- * for use in the pfSense software distribution (http://www.pfsense.org/).
- *
- * THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY
- * EXPRESSED 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 pfSense PROJECT OR
- * ITS CONTRIBUTORS 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.
- * ====================================================================
- */
+Copyright (c) 2004-2015 Electric Sheep Fencing, LLC. All rights reserved.
+
+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.
+
+3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgment:
+ "This product includes software developed by the pfSense Project
+ for use in the pfSense® software distribution. (http://www.pfsense.org/).
+
+4. The names "pfSense" and "pfSense Project" must not be used to
+ endorse or promote products derived from this software without
+ prior written permission. For written permission, please contact
+ coreteam@pfsense.org.
+
+5. Products derived from this software may not be called "pfSense"
+ nor may "pfSense" appear in their names without prior written
+ permission of the Electric Sheep Fencing, LLC.
+
+6. Redistributions of any form whatsoever must retain the following
+ acknowledgment:
+
+"This product includes software developed by the pfSense Project
+for use in the pfSense software distribution (http://www.pfsense.org/).
+
+THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY
+EXPRESSED 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 pfSense PROJECT OR
+ITS CONTRIBUTORS 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.
diff --git a/src/etc/inc/pfsense-utils.inc b/src/etc/inc/pfsense-utils.inc
index be66e8b..2e12d96 100644
--- a/src/etc/inc/pfsense-utils.inc
+++ b/src/etc/inc/pfsense-utils.inc
@@ -2232,8 +2232,8 @@ function version_compare_string($a, $b) {
}
}
function version_compare_numeric($a, $b) {
- $a_arr = explode('.', rtrim($a, '.0'));
- $b_arr = explode('.', rtrim($b, '.0'));
+ $a_arr = explode('.', rtrim($a, '.'));
+ $b_arr = explode('.', rtrim($b, '.'));
foreach ($a_arr as $n => $val) {
if (array_key_exists($n, $b_arr)) {
diff --git a/src/etc/inc/service-utils.inc b/src/etc/inc/service-utils.inc
index 2fa75cf..3a72295 100644
--- a/src/etc/inc/service-utils.inc
+++ b/src/etc/inc/service-utils.inc
@@ -344,13 +344,6 @@ function get_services() {
$services[] = $pconfig;
}
- if (isset($config['installedpackages']['routed']) && $config['installedpackages']['routed']['config'][0]['enable']) {
- $pconfig = array();
- $pconfig['name'] = "routed";
- $pconfig['description'] = gettext("RIP Daemon");
- $services[] = $pconfig;
- }
-
if (isset($config['ipsec']['enable'])) {
$pconfig = array();
$pconfig['name'] = "ipsec";
diff --git a/src/etc/inc/services.inc b/src/etc/inc/services.inc
index 333261d..d13f44a 100644
--- a/src/etc/inc/services.inc
+++ b/src/etc/inc/services.inc
@@ -725,6 +725,14 @@ EOPP;
// Setup pool options
foreach ($all_pools as $poolconf) {
+ if (!(ip_in_subnet($poolconf['range']['from'], "{$subnet}/{$ifcfgsn}") && ip_in_subnet($poolconf['range']['to'], "{$subnet}/{$ifcfgsn}"))) {
+ // If the user has changed the subnet from the interfaces page and applied,
+ // but has not updated the DHCP range, then the range to/from of the pool can be outside the subnet.
+ // In that case, ignore the pool and post an error.
+ $error_msg = sprintf(gettext("Invalid DHCP pool %s - %s for %s subnet %s/%s detected. Please correct the settings in Services, DHCP Server"), $poolconf['range']['from'], $poolconf['range']['to'], convert_real_interface_to_friendly_descr($dhcpif), $subnet, $ifcfgsn);
+ file_notice("DHCP", $error_msg);
+ continue;
+ }
$dhcpdconf .= " pool {\n";
/* is failover dns setup? */
if (is_array($poolconf['dnsserver']) && $poolconf['dnsserver'][0] <> "") {
@@ -2438,8 +2446,13 @@ function configure_cron() {
file_put_contents("/etc/crontab", $crontab_contents);
unset($crontab_contents);
+ /* make sure that cron is running and start it if it got killed somehow */
+ if (!is_process_running("cron")) {
+ exec("cd /tmp && /usr/sbin/cron -s 2>/dev/null");
+ } else {
/* do a HUP kill to force sync changes */
- sigkillbypid("{$g['varrun_path']}/cron.pid", "HUP");
+ sigkillbypid("{$g['varrun_path']}/cron.pid", "HUP");
+ }
conf_mount_ro();
}
diff --git a/src/etc/inc/system.inc b/src/etc/inc/system.inc
index 41e798e..f7987e1 100644
--- a/src/etc/inc/system.inc
+++ b/src/etc/inc/system.inc
@@ -2042,6 +2042,7 @@ function system_dmesg_save() {
function system_set_harddisk_standby() {
global $g, $config;
+
if (isset($config['system']['developerspew'])) {
$mt = microtime();
echo "system_set_harddisk_standby() being called $mt\n";
@@ -2055,11 +2056,17 @@ function system_set_harddisk_standby() {
$standby = $config['system']['harddiskstandby'];
// Check for a numeric value
if (is_numeric($standby)) {
- // Sync the disk(s)
- pfSense_sync();
- if (set_single_sysctl('hw.ata.standby', (int)$standby)) {
- // Reinitialize ATA-drives
- mwexec('/usr/local/sbin/atareinit');
+ // Get only suitable candidates for standby; using get_smart_drive_list()
+ // from utils.inc to get the list of drives.
+ $harddisks = get_smart_drive_list();
+
+ // Since get_smart_drive_list() only matches ad|da|ada; lets put the check below
+ // just in case of some weird pfSense platform installs.
+ if (count($harddisks) > 0) {
+ // Iterate disks and run the camcontrol command for each
+ foreach ($harddisks as $harddisk) {
+ mwexec("/sbin/camcontrol standby {$harddisk} -t {$standby}");
+ }
if (platform_booting()) {
echo gettext("done.") . "\n";
}
diff --git a/src/etc/inc/upgrade_config.inc b/src/etc/inc/upgrade_config.inc
index f5268d2..d68d495 100644
--- a/src/etc/inc/upgrade_config.inc
+++ b/src/etc/inc/upgrade_config.inc
@@ -258,8 +258,8 @@ function upgrade_014_to_015() {
if ($config['interfaces']['wan']['gateway'] <> "") {
$config['system']['gateway'] = $config['interfaces']['wan']['gateway'];
}
+ unset($config['interfaces']['wan']['gateway']);
}
- unset($config['interfaces']['wan']['gateway']);
/* Queues are no longer interface specific */
if (isset($config['interfaces']['lan']['schedulertype'])) {
@@ -285,9 +285,12 @@ function upgrade_015_to_016() {
$config['system']['alt_firmware_url']['enabled'] = "";
$config['system']['alt_firmware_url']['firmware_base_url'] = $config['system']['firmwareurl'];
$config['system']['alt_firmware_url']['firmware_filename'] = $config['system']['firmwarename'];
- unset($config['system']['firmwareurl'], $config['system']['firmwarename']);
- } else {
- unset($config['system']['firmwareurl'], $config['system']['firmwarename']);
+ }
+ if (isset($config['system']['firmwareurl'])) {
+ unset($config['system']['firmwareurl']);
+ }
+ if (isset($config['system']['firmwarename'])) {
+ unset($config['system']['firmwarename']);
}
}
@@ -295,12 +298,24 @@ function upgrade_015_to_016() {
function upgrade_016_to_017() {
global $config;
/* wipe previous shaper configuration */
- unset($config['shaper']['queue']);
- unset($config['shaper']['rule']);
- unset($config['interfaces']['wan']['bandwidth']);
- unset($config['interfaces']['wan']['bandwidthtype']);
- unset($config['interfaces']['lan']['bandwidth']);
- unset($config['interfaces']['lan']['bandwidthtype']);
+ if (isset($config['shaper']['queue'])) {
+ unset($config['shaper']['queue']);
+ }
+ if (isset($config['shaper']['rule'])) {
+ unset($config['shaper']['rule']);
+ }
+ if (isset($config['interfaces']['wan']['bandwidth'])) {
+ unset($config['interfaces']['wan']['bandwidth']);
+ }
+ if (isset($config['interfaces']['wan']['bandwidthtype'])) {
+ unset($config['interfaces']['wan']['bandwidthtype']);
+ }
+ if (isset($config['interfaces']['lan']['bandwidth'])) {
+ unset($config['interfaces']['lan']['bandwidth']);
+ }
+ if (isset($config['interfaces']['lan']['bandwidthtype'])) {
+ unset($config['interfaces']['lan']['bandwidthtype']);
+ }
$config['shaper']['enable'] = FALSE;
}
@@ -350,7 +365,9 @@ function upgrade_017_to_018() {
unset($config['installedpackages']['carp']);
}
/* Server NAT is no longer needed */
- unset($config['nat']['servernat']);
+ if (isset($config['nat']['servernat'])) {
+ unset($config['nat']['servernat']);
+ }
/* enable SSH */
if ($config['version'] == "1.8") {
@@ -361,7 +378,7 @@ function upgrade_017_to_018() {
function upgrade_018_to_019() {
global $config;
- $config['theme']="metallic";
+ $config['theme'] = "metallic";
}
@@ -412,7 +429,9 @@ function upgrade_023_to_024() {
function upgrade_024_to_025() {
global $config;
$config['interfaces']['wan']['use_rrd_gateway'] = $config['system']['use_rrd_gateway'];
- unset($config['system']['use_rrd_gateway']);
+ if (isset($config['system']['use_rrd_gateway'])) {
+ unset($config['system']['use_rrd_gateway']);
+ }
}
@@ -587,7 +606,7 @@ function upgrade_039_to_040() {
$config['system']['webgui']['auth_method'] = "session";
$config['system']['webgui']['backing_method'] = "htpasswd";
- if (isset ($config['system']['username'])) {
+ if (isset($config['system']['username'])) {
$config['system']['group'] = array();
$config['system']['group'][0]['name'] = "admins";
$config['system']['group'][0]['description'] = gettext("System Administrators");
@@ -627,8 +646,10 @@ function upgrade_039_to_040() {
$config['system']['nextgid'] = "111";
/* wipe previous auth configuration */
- unset ($config['system']['username']);
- unset ($config['system']['password']);
+ unset($config['system']['username']);
+ if (isset($config['system']['password'])) {
+ unset($config['system']['password']);
+ }
}
}
@@ -1495,7 +1516,9 @@ function upgrade_050_to_051() {
$pconfig['value'] = "0";
$config['sysctl']['item'][] = $pconfig;
- unset($config['bridge']);
+ if (isset($config['bridge'])) {
+ unset($config['bridge']);
+ }
$convert_bridges = false;
foreach ($config['interfaces'] as $intf) {
@@ -2025,7 +2048,9 @@ function upgrade_053_to_054() {
if (empty($config['load_balancer'])) {
unset($config['load_balancer']);
} else {
- unset($config['load_balancer']['lbpool']);
+ if (isset($config['load_balancer']['lbpool'])) {
+ unset($config['load_balancer']['lbpool']);
+ }
}
} else {
$config['load_balancer']['lbpool'] = $lbpool_srv_arr;
@@ -2978,10 +3003,10 @@ function upgrade_083_to_084() {
$config['hasync'] = $config['installedpackages']['carpsettings']['config'][0];
unset($config['installedpackages']['carpsettings']);
}
- if (empty($config['installedpackages']['carpsettings'])) {
+ if (empty($config['installedpackages']['carpsettings']) && isset($config['installedpackages']['carpsettings'])) {
unset($config['installedpackages']['carpsettings']);
}
- if (empty($config['installedpackages'])) {
+ if (empty($config['installedpackages']) && isset($config['installedpackages'])) {
unset($config['installedpackages']);
}
}
@@ -3393,8 +3418,12 @@ function upgrade_102_to_103() {
$config['nat']['outbound'] = $config['nat']['advancedoutbound'];
- unset($config['nat']['ipsecpassthru']);
- unset($config['nat']['advancedoutbound']);
+ if (isset($config['nat']['ipsecpassthru'])) {
+ unset($config['nat']['ipsecpassthru']);
+ }
+ if (isset($config['nat']['advancedoutbound'])) {
+ unset($config['nat']['advancedoutbound']);
+ }
}
function upgrade_103_to_104() {
@@ -3685,18 +3714,20 @@ function upgrade_111_to_112() {
function upgrade_112_to_113() {
global $config;
- if (isset($config['notifications']['smtp']['ssl']) &&
- $config['notifications']['smtp']['ssl'] == "checked") {
- $config['notifications']['smtp']['ssl'] = true;
- } else {
- unset($config['notifications']['smtp']['ssl']);
+ if (isset($config['notifications']['smtp']['ssl'])) {
+ if ($config['notifications']['smtp']['ssl'] == "checked") {
+ $config['notifications']['smtp']['ssl'] = true;
+ } else {
+ unset($config['notifications']['smtp']['ssl']);
+ }
}
- if (isset($config['notifications']['smtp']['tls']) &&
- $config['notifications']['smtp']['tls'] == "checked") {
- $config['notifications']['smtp']['tls'] = true;
- } else {
- unset($config['notifications']['smtp']['tls']);
+ if (isset($config['notifications']['smtp']['tls'])) {
+ if ($config['notifications']['smtp']['tls'] == "checked") {
+ $config['notifications']['smtp']['tls'] = true;
+ } else {
+ unset($config['notifications']['smtp']['tls']);
+ }
}
}
diff --git a/src/etc/rc.php_ini_setup b/src/etc/rc.php_ini_setup
index 3d53233..6d9e77f 100755
--- a/src/etc/rc.php_ini_setup
+++ b/src/etc/rc.php_ini_setup
@@ -139,10 +139,6 @@ PHPMODULES="$PHPMODULES filter"
PHP_ZEND_MODULES=""
-if [ "$LOWMEM" != "TRUE" ]; then
- PHP_ZEND_MODULES="$PHP_ZEND_MODULES opcache"
-fi
-
# Modules previously included.
# can be turned on by touching
# /etc/php_dynamodules/$modulename
@@ -242,6 +238,11 @@ opcache.enable_cli="0"
opcache.memory_consumption="${OPCACHEMEMSIZE}"
EOF
+else
+ /bin/cat >>/usr/local/lib/php.ini <<EOF
+; opcache Settings
+opcache.enabled="0"
+EOF
fi
/bin/cat >>/usr/local/lib/php.ini <<EOF
diff --git a/src/usr/local/bin/mail.php b/src/usr/local/bin/mail.php
index 130d9e0..001ee67 100755
--- a/src/usr/local/bin/mail.php
+++ b/src/usr/local/bin/mail.php
@@ -13,7 +13,7 @@ if ($options['s'] <> "") {
$in = file("php://stdin");
-foreach ($in as $line){
+foreach ($in as $line) {
$message .= "$line";
}
diff --git a/src/usr/local/www/system_advanced_misc.php b/src/usr/local/www/system_advanced_misc.php
index 2dba952..375589e 100644
--- a/src/usr/local/www/system_advanced_misc.php
+++ b/src/usr/local/www/system_advanced_misc.php
@@ -571,4 +571,4 @@ $section->addInput(new Form_Checkbox(
$form->add($section);
print $form;
-include("foot.inc"); \ No newline at end of file
+include("foot.inc");
diff --git a/src/usr/local/www/widgets/widgets/system_information.widget.php b/src/usr/local/www/widgets/widgets/system_information.widget.php
index d00b127..21aaf92 100644
--- a/src/usr/local/www/widgets/widgets/system_information.widget.php
+++ b/src/usr/local/www/widgets/widgets/system_information.widget.php
@@ -73,14 +73,18 @@ if ($_REQUEST['getupdatestatus']) {
}
else {
$needs_system_upgrade = false;
- if (pfs_version_compare($current_installed_buildtime, $current_installed_version, $remote_version) == -1) {
+ $version_compare = pfs_version_compare($current_installed_buildtime, $g['product_version'], $remote_version);
+ if ($version_compare == -1) {
?>
<div class="alert alert-warning" role="alert">
Version <?=$remote_version?> is available. <a href="/system_firmware_check.php" class="alert-link">Click Here to view.</a>
</div>
<?php
- } else
- echo "You are on the latest version.";
+ } elseif ($version_compare == 1) {
+ echo "You are on a later version than the official release.";
+ } else {
+ echo "You are on the latest version.";
+ }
}
}
exit;
@@ -308,4 +312,4 @@ function systemStatusGetUpdateStatus() {
events.push(function(){
setTimeout('systemStatusGetUpdateStatus()', 4000);
});
-</script> \ No newline at end of file
+</script>
diff --git a/tools/build_snapshots.sh b/tools/build_snapshots.sh
index 2d053f5..fc16794 100755
--- a/tools/build_snapshots.sh
+++ b/tools/build_snapshots.sh
@@ -165,8 +165,8 @@ dobuilds() {
copy_to_staging_nanobsd() {
for NANOTYPE in nanobsd nanobsd-vga; do
for FILESIZE in ${1}; do
- FILENAMEFULL="${PRODUCT_NAME}-${PRODUCT_VERSION}-${FILESIZE}-${TARGET}-${NANOTYPE}-${DATESTRING}.img.gz"
- FILENAMEUPGRADE="${PRODUCT_NAME}-${PRODUCT_VERSION}-${FILESIZE}-${TARGET}-${NANOTYPE}-upgrade-${DATESTRING}.img.gz"
+ FILENAMEFULL="${PRODUCT_NAME}-${PRODUCT_VERSION}-${FILESIZE}-${TARGET}-${NANOTYPE}${TIMESTAMP_SUFFIX}.img.gz"
+ FILENAMEUPGRADE="${PRODUCT_NAME}-${PRODUCT_VERSION}-${FILESIZE}-${TARGET}-${NANOTYPE}-upgrade${TIMESTAMP_SUFFIX}.img.gz"
mkdir -p $STAGINGAREA/nanobsd
mkdir -p $STAGINGAREA/nanobsdupdates
@@ -218,7 +218,9 @@ copy_to_staging_iso_updates() {
cp ${UPDATES_TARBALL_FILENAME}* $STAGINGAREA/ 2>/dev/null
# NOTE: Updates need a file with output similar to date output
# Use the file generated at start of dobuilds() to be consistent on times
- cp $BUILTDATESTRINGFILE $STAGINGAREA/version 2>/dev/null
+ if [ -z "${_IS_RELEASE}" ]; then
+ cp $BUILTDATESTRINGFILE $STAGINGAREA/version 2>/dev/null
+ fi
}
scp_files() {
@@ -275,13 +277,13 @@ scp_files() {
ssh ${RSYNCUSER}@${RSYNCIP} "rm -f ${RSYNCPATH}/.updaters/latest-nanobsd-vga-${i}.img.gz"
ssh ${RSYNCUSER}@${RSYNCIP} "rm -f ${RSYNCPATH}/.updaters/latest-nanobsd-vga-${i}.img.gz.sha256"
- FILENAMEUPGRADE="${PRODUCT_NAME}-${PRODUCT_VERSION}-${i}-${TARGET}-nanobsd-upgrade-${DATESTRING}.img.gz"
+ FILENAMEUPGRADE="${PRODUCT_NAME}-${PRODUCT_VERSION}-${i}-${TARGET}-nanobsd-upgrade${TIMESTAMP_SUFFIX}.img.gz"
ssh ${RSYNCUSER}@${RSYNCIP} "ln -s ${RSYNCPATH}/updates/${FILENAMEUPGRADE} \
${RSYNCPATH}/.updaters/latest-nanobsd-${i}.img.gz"
ssh ${RSYNCUSER}@${RSYNCIP} "ln -s ${RSYNCPATH}/updates/${FILENAMEUPGRADE}.sha256 \
${RSYNCPATH}/.updaters/latest-nanobsd-${i}.img.gz.sha256"
- FILENAMEUPGRADE="${PRODUCT_NAME}-${PRODUCT_VERSION}-${i}-${TARGET}-nanobsd-vga-upgrade-${DATESTRING}.img.gz"
+ FILENAMEUPGRADE="${PRODUCT_NAME}-${PRODUCT_VERSION}-${i}-${TARGET}-nanobsd-vga-upgrade${TIMESTAMP_SUFFIX}.img.gz"
ssh ${RSYNCUSER}@${RSYNCIP} "ln -s ${RSYNCPATH}/updates/${FILENAMEUPGRADE} \
${RSYNCPATH}/.updaters/latest-nanobsd-vga-${i}.img.gz"
ssh ${RSYNCUSER}@${RSYNCIP} "ln -s ${RSYNCPATH}/updates/${FILENAMEUPGRADE}.sha256 \
@@ -371,6 +373,7 @@ else
# Override it here to have continuous builds with proper labels
rm -f $DATESTRINGFILE
rm -f $BUILTDATESTRINGFILE
+ unset TIMESTAMP_SUFFIX
unset DATESTRING
unset BUILTDATESTRING
unset ISOPATH
diff --git a/tools/builder_common.sh b/tools/builder_common.sh
index 7e51a83..f8d7b5d 100644
--- a/tools/builder_common.sh
+++ b/tools/builder_common.sh
@@ -381,8 +381,8 @@ print_flags() {
printf " Git Branch or Tag: %s\n" $GIT_REPO_BRANCH_OR_TAG
printf " MODULES_OVERRIDE: %s\n" $MODULES_OVERRIDE
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 " OVA_FIRST_PART_SIZE_IN_GB: %s\n" $OVA_FIRST_PART_SIZE_IN_GB
+ printf " OVA_SWAP_PART_SIZE_IN_GB: %s\n" $OVA_SWAP_PART_SIZE_IN_GB
printf " OVFTEMPLATE: %s\n" $OVFTEMPLATE
printf " OVFVMDK: %s\n" $OVFVMDK
printf " SRC_CONF: %s\n" $SRC_CONF
@@ -549,8 +549,8 @@ create_nanobsd_diskimage () {
echo ">>> building NanoBSD(${1}) disk image with size ${_NANO_MEDIASIZE} for platform (${TARGET})..." | tee -a ${LOGFILE}
echo "" > $BUILDER_LOGS/nanobsd_cmds.sh
- IMG="${IMAGES_FINAL_DIR}/${PRODUCT_NAME}-${PRODUCT_VERSION}-${_NANO_MEDIASIZE}-${TARGET}-${1}-${DATESTRING}.img"
- IMGUPDATE="${IMAGES_FINAL_DIR}/${PRODUCT_NAME}-${PRODUCT_VERSION}-${_NANO_MEDIASIZE}-${TARGET}-${1}-upgrade-${DATESTRING}.img"
+ IMG="${IMAGES_FINAL_DIR}/${PRODUCT_NAME}-${PRODUCT_VERSION}-${_NANO_MEDIASIZE}-${TARGET}-${1}${TIMESTAMP_SUFFIX}.img"
+ IMGUPDATE="${IMAGES_FINAL_DIR}/${PRODUCT_NAME}-${PRODUCT_VERSION}-${_NANO_MEDIASIZE}-${TARGET}-${1}-upgrade${TIMESTAMP_SUFFIX}.img"
nanobsd_set_flash_details ${_NANO_MEDIASIZE}
@@ -794,14 +794,15 @@ create_ova_image() {
# Fill fstab
echo ">>> Installing platform specific items..." | tee -a ${LOGFILE}
- echo "/dev/label/${PRODUCT_NAME} / ufs rw 0 0" > ${FINAL_CHROOT_DIR}/etc/fstab
- echo "/dev/label/swap0 none swap sw 0 0" >> ${FINAL_CHROOT_DIR}/etc/fstab
+ echo "/dev/gpt/${PRODUCT_NAME} / ufs rw 0 0" > ${FINAL_CHROOT_DIR}/etc/fstab
+ echo "/dev/gpt/swap0 none swap sw 0 0" >> ${FINAL_CHROOT_DIR}/etc/fstab
# Create / partition
+ echo -n ">>> Creating / partition... " | tee -a ${LOGFILE}
makefs \
-B little \
-o label=${PRODUCT_NAME} \
- -s ${OVA_FIRST_PART_SIZE} \
+ -s ${OVA_FIRST_PART_SIZE_IN_GB}g \
${OVA_TMP}/${OVFUFS} \
${FINAL_CHROOT_DIR} 2>&1 >> ${LOGFILE}
@@ -809,55 +810,64 @@ create_ova_image() {
if [ -f ${OVA_TMP}/${OVFUFS} ]; then
rm -f ${OVA_TMP}/${OVFUFS}
fi
+ echo "Failed!" | tee -a ${LOGFILE}
echo ">>> ERROR: Error creating vmdk / partition. STOPPING!" | tee -a ${LOGFILE}
print_error_pfS
fi
+ echo "Done!" | tee -a ${LOGFILE}
- # Create vmdk file
+ # Create raw disk
+ echo -n ">>> Creating raw disk... " | tee -a ${LOGFILE}
mkimg \
-s gpt \
- -f vmdk \
+ -f raw \
-b /boot/pmbr \
-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}.tmp 2>&1 >> ${LOGFILE}
+ -o ${OVA_TMP}/${OVFRAW} 2>&1 >> ${LOGFILE}
- if [ $? -ne 0 -o ! -f ${OVA_TMP}/${OVFVMDK}.tmp ]; then
+ if [ $? -ne 0 -o ! -f ${OVA_TMP}/${OVFRAW} ]; 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
+ if [ -f ${OVA_TMP}/${OVFRAW} ]; then
+ rm -f ${OVA_TMP}/${OVFRAW}
fi
+ echo "Failed!" | tee -a ${LOGFILE}
echo ">>> ERROR: Error creating temporary vmdk image. STOPPING!" | tee -a ${LOGFILE}
print_error_pfS
fi
+ echo "Done!" | tee -a ${LOGFILE}
# 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
+ # Convert raw to vmdk
+ echo -n ">>> Creating vmdk disk... " | tee -a ${LOGFILE}
+ vmdktool -z9 -v ${OVA_TMP}/${OVFVMDK} ${OVA_TMP}/${OVFRAW}
- if [ $? -ne 0 -o ! -f ${OVA_TMP}/${OVFVMDK}.tmp ]; then
- if [ -f ${OVA_TMP}/${OVFVMDK}.tmp ]; then
- rm -f ${OVA_TMP}/${OVFVMDK}.tmp
+ if [ $? -ne 0 -o ! -f ${OVA_TMP}/${OVFVMDK} ]; then
+ if [ -f ${OVA_TMP}/${OVFRAW} ]; then
+ rm -f ${OVA_TMP}/${OVFRAW}
fi
if [ -f ${OVA_TMP}/${OVFVMDK} ]; then
rm -f ${OVA_TMP}/${OVFVMDK}
fi
+ echo "Failed!" | tee -a ${LOGFILE}
echo ">>> ERROR: Error creating vmdk image. STOPPING!" | tee -a ${LOGFILE}
print_error_pfS
fi
+ echo "Done!" | tee -a ${LOGFILE}
- rm -f ${OVA_TMP}/i${OVFVMDK}.tmp
+ rm -f ${OVA_TMP}/i${OVFRAW}
ova_setup_ovf_template
- # We repack the file with a more universal xml file that
- # works in both virtual box and esx server
+ echo -n ">>> Writing final ova image... " | tee -a ${LOGFILE}
+ # Create OVA file for vmware
gtar -C ${OVA_TMP} -cpf ${OVAPATH} ${PRODUCT_NAME}.ovf ${OVFVMDK}
+ echo "Done!" | tee -a ${LOGFILE}
rm -f ${OVA_TMP}/${OVFVMDK} >/dev/null 2>&1
echo ">>> OVA created: $(LC_ALL=C date)" | tee -a ${LOGFILE}
@@ -900,7 +910,7 @@ ova_setup_ovf_template() {
-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%%/r ${BUILDER_ROOT}/license.txt" \
-e "/^%%PRODUCT_LICENSE%%/d" \
${OVFTEMPLATE} > ${OVA_TMP}/${PRODUCT_NAME}.ovf
}
@@ -1027,6 +1037,14 @@ clone_to_staging_area() {
core_pkg_create default-config "" ${CORE_PKG_VERSION} ${STAGE_CHROOT_DIR}
local DEFAULTCONF=${STAGE_CHROOT_DIR}/conf.default/config.xml
+
+ # Change default interface names to match vmware driver
+ sed -i '' -e 's,em0,vmx0,' -e 's,em1,vmx1,' ${DEFAULTCONF}
+ core_pkg_create default-config-vmware "" ${CORE_PKG_VERSION} ${STAGE_CHROOT_DIR}
+
+ # Restore default values to be used by serial package
+ sed -i '' -e 's,vmx0,em0,' -e 's,vmx1,em1,' ${DEFAULTCONF}
+
# Activate serial console in config.xml
# If it was there before, clear the setting to be sure we don't add it twice.
sed -i "" -e "/ <enableserial\/>/d" ${DEFAULTCONF}
@@ -1088,6 +1106,8 @@ customize_stagearea_for_image() {
"${1}" = "memstickserial" -o \
"${1}" = "memstickadi" ]; then
pkg_chroot_add ${FINAL_CHROOT_DIR} default-config-serial
+ elif [ "${1}" = "ova" ]; then
+ pkg_chroot_add ${FINAL_CHROOT_DIR} default-config-vmware
else
pkg_chroot_add ${FINAL_CHROOT_DIR} default-config
fi
diff --git a/tools/builder_defaults.sh b/tools/builder_defaults.sh
index 536c220..d90db84 100644
--- a/tools/builder_defaults.sh
+++ b/tools/builder_defaults.sh
@@ -105,7 +105,7 @@ fi
# Product details
export PRODUCT_NAME=${PRODUCT_NAME:-"nonSense"}
-export PRODUCT_URL=${PRODUCT_VERSION:-""}
+export PRODUCT_URL=${PRODUCT_URL:-""}
export PRODUCT_SRC=${PRODUCT_SRC:-"${BUILDER_ROOT}/src"}
if [ "${PRODUCT_NAME}" = "pfSense" -a "${BUILD_AUTHORIZED_BY_ELECTRIC_SHEEP_FENCING}" != "yes" ]; then
@@ -155,6 +155,9 @@ export EXTRA_TOOLS=${EXTRA_TOOLS:-"uuencode uudecode ex"}
# Path to kernel files being built
export KERNEL_BUILD_PATH=${KERNEL_BUILD_PATH:-"${SCRATCHDIR}/kernels"}
+# Do not touch builder /usr/obj
+export MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX:-"${SCRATCHDIR}/obj"}
+
# Controls how many concurrent make processes are run for each stage
_CPUS=""
if [ -z "${NO_MAKEJ}" ]; then
@@ -196,14 +199,18 @@ export MEMORYDISK_SIZE=${MEMORYDISK_SIZE:-"768M"}
export OVFTEMPLATE=${OVFTEMPLATE:-"${BUILDER_TOOLS}/templates/ovf/${PRODUCT_NAME}.ovf"}
# / partition to be used by mkimg
export OVFUFS=${OVFUFS:-"${PRODUCT_NAME}-disk1.ufs"}
+# Raw disk to be converted to vmdk
+export OVFRAW=${OVFRAW:-"${PRODUCT_NAME}-disk1.raw"}
# On disk name of VMDK file included in OVA
export OVFVMDK=${OVFVMDK:-"${PRODUCT_NAME}-disk1.vmdk"}
# 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"}
+export OVA_FIRST_PART_SIZE_IN_GB=${OVA_FIRST_PART_SIZE_IN_GB:-"6"}
# swap partition size (freebsd-swap)
-export OVA_SWAP_PART_SIZE=${OVA_SWAP_PART_SIZE:-"2G"}
+export OVA_SWAP_PART_SIZE_IN_GB=${OVA_SWAP_PART_SIZE_IN_GB:-"2"}
+# Calculate real swap size, removing 128 blocks (65536 bytes) beggining/loader
+export OVA_SWAP_PART_SIZE=$((${OVA_SWAP_PART_SIZE_IN_GB}*1024*1024*1024-65536))
# Temporary place to save files
export OVA_TMP=${OVA_TMP:-"${SCRATCHDIR}/ova_tmp"}
# end of OVF
@@ -229,42 +236,27 @@ export NANO_BOOT0CFG="-o packet -s 1 -m 3"
# NOTE: Date string is used for creating file names of images
# The file is used for sharing the same value with build_snapshots.sh
-_BUILDER_EPOCH=$(date +"%s")
export DATESTRINGFILE=${DATESTRINGFILE:-"$SCRATCHDIR/version.snapshots"}
-if [ "${DATESTRING}" = "" ]; then
- if [ -f $DATESTRINGFILE ]; then
- # If the file is more than 30 minutes old regenerate it
- TMPDATESTRINGFILE=$(($_BUILDER_EPOCH - `stat -f %m $DATESTRINGFILE`))
- if [ -z "${_USE_OLD_DATESTRING}" -a $TMPDATESTRINGFILE -gt 1800 ]; then
- export DATESTRING=`date "+%Y%m%d-%H%M"`
- else
- export DATESTRING=`cat $DATESTRINGFILE`
- fi
- unset TMPDATESTRINGFILE
+if [ -z "${DATESTRING}" ]; then
+ if [ -f "${DATESTRINGFILE}" -a -n "${_USE_OLD_DATESTRING}" ]; then
+ export DATESTRING=$(cat $DATESTRINGFILE)
else
- export DATESTRING=`date "+%Y%m%d-%H%M"`
+ export DATESTRING=$(date "+%Y%m%d-%H%M"`)
fi
- echo "$DATESTRING" > $DATESTRINGFILE
fi
+echo "$DATESTRING" > $DATESTRINGFILE
# NOTE: Date string is placed on the final image etc folder to help detect new updates
# The file is used for sharing the same value with build_snapshots.sh
export BUILTDATESTRINGFILE=${BUILTDATESTRINGFILE:-"$SCRATCHDIR/version.buildtime"}
-if [ "${BUILTDATESTRING}" = "" ]; then
- if [ -f $BUILTDATESTRINGFILE ]; then
- # If the file is more than 30 minutes old regenerate it
- TMPBUILTDATESTRINGFILE=$(($_BUILDER_EPOCH - `stat -f %m $BUILTDATESTRINGFILE`))
- if [ $TMPBUILTDATESTRINGFILE -gt 1800 ]; then
- export BUILTDATESTRING=`date "+%a %b %d %T %Z %Y"`
- else
- export BUILTDATESTRING=`cat $BUILTDATESTRINGFILE`
- fi
- unset TMPBUILTDATESTRINGFILE
+if [ -z "${BUILTDATESTRING}" ]; then
+ if [ -f "${BUILTDATESTRINGFILE}" -a -n "${_USE_OLD_DATESTRING}" ]; then
+ export BUILTDATESTRING=$(cat $BUILTDATESTRINGFILE)
else
- export BUILTDATESTRING=`date "+%a %b %d %T %Z %Y"`
+ export BUILTDATESTRING=$(date "+%a %b %d %T %Z %Y")
fi
- echo "$BUILTDATESTRING" > $BUILTDATESTRINGFILE
fi
+echo "$BUILTDATESTRING" > $BUILTDATESTRINGFILE
# Poudriere
export ZFS_TANK=${ZFS_TANK:-"tank"}
@@ -282,9 +274,15 @@ export PKG_RSYNC_DESTDIR=${PKG_RSYNC_DESTDIR:-"/usr/local/www/beta/packages"}
export PKG_REPO_SERVER=${PKG_REPO_SERVER:-"pkg+http://beta.pfsense.org/packages"}
export PKG_REPO_CONF_BRANCH=${PKG_REPO_CONF_BRANCH:-"${GIT_REPO_BRANCH_OR_TAG}"}
+if echo "${PRODUCT_VERSION}" | grep -qv -- '-RELEASE'; then
+ export _IS_RELEASE=yes
+else
+ unset _IS_RELEASE
+fi
+
# Define base package version, based on date for snaps
CORE_PKG_VERSION=${PRODUCT_VERSION%%-*}
-if echo "${PRODUCT_VERSION}" | grep -qv -- '-RELEASE'; then
+if [ -n "${_IS_RELEASE}" ]; then
CORE_PKG_VERSION="${CORE_PKG_VERSION}.${DATESTRING}"
fi
export CORE_PKG_PATH=${CORE_PKG_PATH:-"${SCRATCHDIR}/core_pkg"}
@@ -300,15 +298,21 @@ export CORE_PKG_TMP=${CORE_PKG_TMP:-"${SCRATCHDIR}/core_pkg_tmp"}
#export custom_package_list=""
# General builder output filenames
+if [ -n "${_IS_RELEASE}" ]; then
+ export TIMESTAMP_SUFFIX=""
+else
+ export TIMESTAMP_SUFFIX="-${DATESTRING}"
+fi
+
export UPDATESDIR=${UPDATESDIR:-"${IMAGES_FINAL_DIR}/updates"}
-export ISOPATH=${ISOPATH:-"${IMAGES_FINAL_DIR}/${PRODUCT_NAME}-LiveCD-${PRODUCT_VERSION}-${TARGET}-${DATESTRING}.iso"}
-export MEMSTICKPATH=${MEMSTICKPATH:-"${IMAGES_FINAL_DIR}/${PRODUCT_NAME}-memstick-${PRODUCT_VERSION}-${TARGET}-${DATESTRING}.img"}
-export MEMSTICKSERIALPATH=${MEMSTICKSERIALPATH:-"${IMAGES_FINAL_DIR}/${PRODUCT_NAME}-memstick-serial-${PRODUCT_VERSION}-${TARGET}-${DATESTRING}.img"}
-export MEMSTICKADIPATH=${MEMSTICKADIPATH:-"${IMAGES_FINAL_DIR}/${PRODUCT_NAME}-memstick-ADI-${PRODUCT_VERSION}-${TARGET}-${DATESTRING}.img"}
-export OVAPATH=${OVAPATH:-"${IMAGES_FINAL_DIR}/${PRODUCT_NAME}-${PRODUCT_VERSION}-${TARGET}-${DATESTRING}.ova"}
+export ISOPATH=${ISOPATH:-"${IMAGES_FINAL_DIR}/${PRODUCT_NAME}-LiveCD-${PRODUCT_VERSION}-${TARGET}${TIMESTAMP_SUFFIX}.iso"}
+export MEMSTICKPATH=${MEMSTICKPATH:-"${IMAGES_FINAL_DIR}/${PRODUCT_NAME}-memstick-${PRODUCT_VERSION}-${TARGET}${TIMESTAMP_SUFFIX}.img"}
+export MEMSTICKSERIALPATH=${MEMSTICKSERIALPATH:-"${IMAGES_FINAL_DIR}/${PRODUCT_NAME}-memstick-serial-${PRODUCT_VERSION}-${TARGET}${TIMESTAMP_SUFFIX}.img"}
+export MEMSTICKADIPATH=${MEMSTICKADIPATH:-"${IMAGES_FINAL_DIR}/${PRODUCT_NAME}-memstick-ADI-${PRODUCT_VERSION}-${TARGET}${TIMESTAMP_SUFFIX}.img"}
+export OVAPATH=${OVAPATH:-"${IMAGES_FINAL_DIR}/${PRODUCT_NAME}-${PRODUCT_VERSION}-${TARGET}${TIMESTAMP_SUFFIX}.ova"}
# set full-update update filename
-export UPDATES_TARBALL_FILENAME=${UPDATES_TARBALL_FILENAME:-"${UPDATESDIR}/${PRODUCT_NAME}-Full-Update-${PRODUCT_VERSION}-${TARGET}-${DATESTRING}.tgz"}
+export UPDATES_TARBALL_FILENAME=${UPDATES_TARBALL_FILENAME:-"${UPDATESDIR}/${PRODUCT_NAME}-Full-Update-${PRODUCT_VERSION}-${TARGET}${TIMESTAMP_SUFFIX}.tgz"}
# Rsync data to send snapshots
export RSYNCUSER=${RSYNCUSER:-"snapshots"}
diff --git a/tools/templates/core_pkg/default-config-vmware/metadir/+DESC b/tools/templates/core_pkg/default-config-vmware/metadir/+DESC
new file mode 100644
index 0000000..d732511
--- /dev/null
+++ b/tools/templates/core_pkg/default-config-vmware/metadir/+DESC
@@ -0,0 +1,3 @@
+%%PRODUCT_NAME%% default config (vmware)
+
+WWW: %%PRODUCT_URL%%
diff --git a/tools/templates/core_pkg/default-config-vmware/metadir/+INSTALL b/tools/templates/core_pkg/default-config-vmware/metadir/+INSTALL
new file mode 100644
index 0000000..11c69cd
--- /dev/null
+++ b/tools/templates/core_pkg/default-config-vmware/metadir/+INSTALL
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+if [ "${2}" != "POST-INSTALL" ]; then
+ exit 0
+fi
+
+if [ ! -f /cf/conf/config.xml ]; then
+ cp /conf.default/config.xml /cf/conf/config.xml
+fi
+
+if [ ! -L /conf ]; then
+ ln -sf /cf/conf /conf
+fi
+
+exit 0
diff --git a/tools/templates/core_pkg/default-config-vmware/metadir/+MANIFEST b/tools/templates/core_pkg/default-config-vmware/metadir/+MANIFEST
new file mode 100644
index 0000000..cd1e098
--- /dev/null
+++ b/tools/templates/core_pkg/default-config-vmware/metadir/+MANIFEST
@@ -0,0 +1,15 @@
+name: "%%PRODUCT_NAME%%-default-config-vmware"
+version: "%%VERSION%%"
+origin: "security/%%PRODUCT_NAME%%-default-config"
+comment: <<EOD
+%%PRODUCT_NAME%% default config (vmware)
+EOD
+maintainer: development@pfsense.org
+prefix: /
+deps: {
+
+}
+categories [ security, ]
+licenselogic: single
+licenses: [ BSD2CLAUSE, ]
+options: { }
diff --git a/tools/templates/core_pkg/default-config-vmware/pkg-plist b/tools/templates/core_pkg/default-config-vmware/pkg-plist
new file mode 100644
index 0000000..b6fe8df
--- /dev/null
+++ b/tools/templates/core_pkg/default-config-vmware/pkg-plist
@@ -0,0 +1 @@
+/conf.default/config.xml
OpenPOWER on IntegriCloud