diff options
22 files changed, 209 insertions, 315 deletions
@@ -356,7 +356,7 @@ for _IMGTOBUILD in $_IMAGESTOBUILD; do # Create the NanoBSD disk image create_nanobsd_diskimage ${_IMGTOBUILD} "${FLASH_SIZE}" elif [ "${_IMGTOBUILD}" = "ova" ]; then - install_pkg_install_ports ${PRODUCT_NAME}-vm + install_pkg_install_ports ${PRODUCT_NAME}-vmware (create_ova_image) install_pkg_install_ports fi diff --git a/src/etc/inc/pfsense-utils.inc b/src/etc/inc/pfsense-utils.inc index 91988c7..c050ecf 100644 --- a/src/etc/inc/pfsense-utils.inc +++ b/src/etc/inc/pfsense-utils.inc @@ -1002,7 +1002,7 @@ function setup_serial_port($when = "save", $path = "") { if ($g['platform'] != "cdrom") { $serial_only = false; - if (($g['platform'] == "nanobsd") && !file_exists("/etc/nano_use_vga.txt")) { + if (($g['platform'] == "nanobsd") && isset($g['enableserial_force'])) { $serial_only = true; } else { $specific_platform = system_identify_specific_platform(); @@ -1122,7 +1122,7 @@ function is_serial_enabled() { if (!isset($g['enableserial_force']) && !isset($config['system']['enableserial']) && - ($g['platform'] == "pfSense" || $g['platform'] == "cdrom" || file_exists("/etc/nano_use_vga.txt"))) { + ($g['platform'] == "pfSense" || $g['platform'] == "cdrom")) { return false; } @@ -2239,8 +2239,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 77a7914..2776aff 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 d075125..b5df650 100644 --- a/src/etc/inc/services.inc +++ b/src/etc/inc/services.inc @@ -2446,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 200b3a6..5046e23 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() { @@ -3686,18 +3715,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/pfSense.obsoletedfiles b/src/etc/pfSense.obsoletedfiles index cae1bcf..a6ba2bc 100644 --- a/src/etc/pfSense.obsoletedfiles +++ b/src/etc/pfSense.obsoletedfiles @@ -23,6 +23,7 @@ /etc/manpath.config /etc/mtree/BSD.x11-4.dist /etc/mtree/BSD.x11.dist +/etc/nano_use_vga.txt /etc/ntp.conf /etc/pccard.conf /etc/periodic/daily/130.clean-msgs diff --git a/src/etc/phpshellsessions/gitsync b/src/etc/phpshellsessions/gitsync index aced804..6757848 100644 --- a/src/etc/phpshellsessions/gitsync +++ b/src/etc/phpshellsessions/gitsync @@ -20,11 +20,7 @@ $GITSYNC_MERGE = "/root/.gitsync_merge"; /* NOTE: Set branches here */ $branches = array( - "master" => "2.2 development branch", - "RELENG_2_2" => "2.2.* release branch", - "RELENG_2_1" => "2.1.* release branch", - "RELENG_2_0" => "2.0.* release branch", - "RELENG_1_2" => "1.2.* release branch", + "master" => "2.3 development branch", "build_commit" => "The commit originally used to build the image" ); @@ -40,8 +36,8 @@ if (is_array($command_split)) { $valid_args = array( "--minimal" => "\tPerform a minimal copy of only the updated files.\n" . - "\tNot recommended if the system has files modified by any method other\n" . - "\tthan gitsync.\n", + "\tNot recommended if the system has files modified by any method other\n" . + "\tthan gitsync.\n", "--help" => "\tDisplay this help list.\n" ); $args = array(); @@ -267,7 +263,7 @@ if (is_dir("$CODIR/pfSenseGITREPO/pfSenseGITREPO")) { echo "===> Fetching updates...\n"; exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} config remote.origin.url " . escapeshellarg($GIT_REPO)); exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} fetch"); - exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} clean -f -f -x -d"); + exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} clean -f -x -d"); run_cmds($git_cmd); } else { exec("mkdir -p $CODIR/pfSenseGITREPO"); @@ -300,9 +296,9 @@ if (isset($args["--minimal"])) { } else if (file_exists("/etc/version.lastcommit")) { $old_revision = trim(file_get_contents("/etc/version.lastcommit")); } - $files_to_copy = strtr(shell_exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} diff --name-only " . escapeshellarg($old_revision)), "\n", " "); + $files_to_copy = strtr(shell_exec("cd $CODIR/pfSenseGITREPO/pfSenseGITREPO && {$GIT_BIN} diff --name-only --relative=src " . escapeshellarg($old_revision)), "\n", " "); } else { - $files_to_copy = '--exclude .git .'; + $files_to_copy = '-C ./src .'; } // Save new commit ID for later minimal file copies diff --git a/src/etc/rc.initial.firmware_update b/src/etc/rc.initial.firmware_update index 2dff066..143dbbd 100755 --- a/src/etc/rc.initial.firmware_update +++ b/src/etc/rc.initial.firmware_update @@ -19,7 +19,7 @@ if (isset($config['system']['firmware']['alturl']['enable'])) { $nanosize = ""; if ($g['platform'] == "nanobsd") { - if (file_exists("/etc/nano_use_vga.txt")) { + if (!isset($g['enableserial_force'])) { $nanosize = "-nanobsd-vga-"; } else { $nanosize = "-nanobsd-"; diff --git a/src/etc/rc.php_ini_setup b/src/etc/rc.php_ini_setup index 0013b58..3d53233 100755 --- a/src/etc/rc.php_ini_setup +++ b/src/etc/rc.php_ini_setup @@ -90,9 +90,6 @@ fi # Define php modules. Do not add .so, it will # be done automatically by the script below. PHPMODULES="standard" -if [ "$LOWMEM" != "TRUE" ]; then - PHPMODULES="$PHPMODULES opcache" -fi # Config read/write PHPMODULES="$PHPMODULES xml libxml dom" PHPMODULES="$PHPMODULES SimpleXML xmlreader xmlwriter" @@ -140,8 +137,11 @@ PHPMODULES="$PHPMODULES bcmath" # filter PHPMODULES="$PHPMODULES filter" -PHP_ZEND_MODULES="ioncube_loader" -PHP_ZEND_MODULES_TS="ioncube_loader_ts" +PHP_ZEND_MODULES="" + +if [ "$LOWMEM" != "TRUE" ]; then + PHP_ZEND_MODULES="$PHP_ZEND_MODULES opcache" +fi # Modules previously included. # can be turned on by touching @@ -206,35 +206,6 @@ EOF # Copy php.ini file to etc/ too (cli) /bin/cp /usr/local/lib/php.ini /usr/local/etc/php.ini -# Ensure directory exists -if [ ! -d /etc/php_dynamodules ]; then - /bin/mkdir /etc/php_dynamodules -fi -if [ ! -d /etc/php_dynamodules_zend ]; then - /bin/mkdir /etc/php_dynamodules_zend -fi -if [ ! -d /etc/php_dynamodules_zend_ts ]; then - /bin/mkdir /etc/php_dynamodules_zend_ts -fi - -# Read in dynamodules -if [ -d /etc/php_dynamodules ]; then - DYNA_MODULES=`/bin/ls -Utr /etc/php_dynamodules/` - PHPMODULES="$PHPMODULES $DYNA_MODULES" -fi - -# Read in zend modules -if [ -d /etc/php_dynamodules_zend ]; then - DYNA_MODULES=`/bin/ls /etc/php_dynamodules_zend/` - PHP_ZEND_MODULES="$PHP_ZEND_MODULES $DYNA_MODULES" -fi - -# Read in zend threaded modules -if [ -d /etc/php_dynamodules_zend_ts ]; then - DYNA_MODULES=`/bin/ls /etc/php_dynamodules_zend_ts/` - PHP_ZEND_MODULES_TS="$PHP_ZEND_MODULES_TS $DYNA_MODULES" -fi - # Loop through and generate modules to load. # Take into account modules built into php. for EXT in $PHPMODULES; do @@ -256,20 +227,11 @@ done # Zend modules for EXT in $PHP_ZEND_MODULES; do # Ensure extension exists before adding. - if [ -f "${EXTENSIONSDIR}/ioncube/${EXT}.so" ]; then - echo "zend_extension=${EXTENSIONSDIR}/ioncube/${EXT}.so" >> /usr/local/lib/php.ini + if [ -f "${EXTENSIONSDIR}${EXT}.so" ]; then + echo "zend_extension=${EXT}.so" >> /usr/local/lib/php.ini fi done -# Zend threaded modules -for EXT in $PHP_ZEND_MODULES_TS; do - # Ensure extension exists before adding. - if [ -f "${EXTENSIONSDIR}/ioncube/${EXT}.so" ]; then - echo "zend_extension_ts=${EXTENSIONSDIR}/ioncube/${EXT}.so" >> /usr/local/lib/php.ini - fi -done - - if [ "$LOWMEM" != "TRUE" ]; then /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/firewall_virtual_ip_edit.php b/src/usr/local/www/firewall_virtual_ip_edit.php index 6021115..411f672 100644 --- a/src/usr/local/www/firewall_virtual_ip_edit.php +++ b/src/usr/local/www/firewall_virtual_ip_edit.php @@ -251,7 +251,7 @@ if ($_POST) { /* CARP specific fields */ if ($_POST['mode'] === "carp") { $vipent['vhid'] = $_POST['vhid']; - $vipent['vhid'] = $_POST['uinqid']; + $vipent['uniqid'] = $_POST['uniqid']; $vipent['advskew'] = $_POST['advskew']; $vipent['advbase'] = $_POST['advbase']; $vipent['password'] = $_POST['password']; diff --git a/src/usr/local/www/system_advanced_admin.php b/src/usr/local/www/system_advanced_admin.php index a449452..b6c1aeb 100644 --- a/src/usr/local/www/system_advanced_admin.php +++ b/src/usr/local/www/system_advanced_admin.php @@ -556,7 +556,7 @@ function prot_change() { <tr> <td colspan="2" valign="top" class="listtopic"><?=gettext("Serial Communications"); ?></td> </tr> - <?php if (!$g['enableserial_force'] && ($g['platform'] == "pfSense" || $g['platform'] == "cdrom" || file_exists("/etc/nano_use_vga.txt"))): ?> + <?php if (!$g['enableserial_force'] && ($g['platform'] == "pfSense" || $g['platform'] == "cdrom")): ?> <tr> <td width="22%" valign="top" class="vncell"><?=gettext("Serial Terminal"); ?></td> <td width="78%" class="vtable"> @@ -580,7 +580,7 @@ function prot_change() { <br /><?=gettext("Allows selection of different speeds for the serial console port."); ?> </td> </tr> - <?php if (!$g['primaryconsole_force'] && ($g['platform'] == "pfSense" || $g['platform'] == "cdrom" || file_exists("/etc/nano_use_vga.txt"))): ?> + <?php if (!$g['primaryconsole_force'] && ($g['platform'] == "pfSense" || $g['platform'] == "cdrom" || !isset($g['enableserial_force']))): ?> <tr> <td width="22%" valign="top" class="vncell"><?=gettext("Primary Console")?></td> <td width="78%" class="vtable"> diff --git a/src/usr/local/www/system_advanced_misc.php b/src/usr/local/www/system_advanced_misc.php index 72f4833..bd16f1d 100644 --- a/src/usr/local/www/system_advanced_misc.php +++ b/src/usr/local/www/system_advanced_misc.php @@ -667,7 +667,7 @@ function tmpvar_checked(obj) { <tr> <td colspan="2" class="list" height="12"> </td> </tr> - <?php if ($g['platform'] == "pfSenseDISABLED"): ?> + <?php if ($g['platform'] == "pfSense"): ?> <tr> <td colspan="2" valign="top" class="listtopic"><?=gettext("Hardware Settings"); ?></td> </tr> diff --git a/src/usr/local/www/system_firmware_auto.php b/src/usr/local/www/system_firmware_auto.php index e2970fa..f25ceb4 100755 --- a/src/usr/local/www/system_firmware_auto.php +++ b/src/usr/local/www/system_firmware_auto.php @@ -145,7 +145,7 @@ include("head.inc"); update_status(gettext("Downloading current version information") . "..."); $nanosize = ""; if ($g['platform'] == "nanobsd") { - if (file_exists("/etc/nano_use_vga.txt")) { + if (!isset($g['enableserial_force'])) { $nanosize = "-nanobsd-vga-"; } else { $nanosize = "-nanobsd-"; diff --git a/src/usr/local/www/system_firmware_check.php b/src/usr/local/www/system_firmware_check.php index 2e56943..8eda4e9 100644 --- a/src/usr/local/www/system_firmware_check.php +++ b/src/usr/local/www/system_firmware_check.php @@ -132,7 +132,7 @@ $static_text .= gettext("Downloading new version information..."); $nanosize = ""; if ($g['platform'] == "nanobsd") { - if (file_exists("/etc/nano_use_vga.txt")) { + if (!isset($g['enableserial_force'])) { $nanosize = "-nanobsd-vga-"; } else { $nanosize = "-nanobsd-"; 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 231f2ee..06f29c8 100644 --- a/src/usr/local/www/widgets/widgets/system_information.widget.php +++ b/src/usr/local/www/widgets/widgets/system_information.widget.php @@ -49,7 +49,7 @@ if ($_REQUEST['getupdatestatus']) { $nanosize = ""; if ($g['platform'] == "nanobsd") { - if (file_exists("/etc/nano_use_vga.txt")) { + if (!isset($g['enableserial_force'])) { $nanosize = "-nanobsd-vga-"; } else { $nanosize = "-nanobsd-"; @@ -71,13 +71,16 @@ if ($_REQUEST['getupdatestatus']) { echo "<br /><br />Unable to check for updates."; } else { $needs_system_upgrade = false; - if (pfs_version_compare($current_installed_buildtime, $g['product_version'], $remote_version) == -1) { + $version_compare = pfs_version_compare($current_installed_buildtime, $g['product_version'], $remote_version); + if ($version_compare == -1) { echo "<br /><span class=\"red\" id=\"updatealert\"><b>Update available. </b></span><a href=\"/system_firmware_check.php\">Click Here</a> to view update."; echo "\n<script type=\"text/javascript\">\n"; echo "//<![CDATA[\n"; echo "jQuery('#updatealert').effect('pulsate',{times: 30},10000);\n"; echo "//]]>\n"; echo "</script>\n"; + } elseif ($version_compare == 1) { + echo "<br />You are on a later version than the official release."; } else { echo "<br />You are on the latest version."; } diff --git a/tools/build_snapshots.sh b/tools/build_snapshots.sh index 37f47db..2d053f5 100755 --- a/tools/build_snapshots.sh +++ b/tools/build_snapshots.sh @@ -379,6 +379,6 @@ else unset MEMSTICKADIPATH unset UPDATES_TARBALL_FILENAME # builder_defaults.sh will set variables with correct timestamp - . ./builder_defaults.sh + . ${BUILDER_TOOLS}/builder_defaults.sh done fi diff --git a/tools/builder_common.sh b/tools/builder_common.sh index 6405620..1f4fc4d 100644 --- a/tools/builder_common.sh +++ b/tools/builder_common.sh @@ -326,9 +326,6 @@ cust_fixup_nanobsd() { if [ "${_NANO_WITH_VGA}" = "nanobsd" ]; then # Tell loader to use serial console early. echo "-S115200 -h" >> ${BOOTCONF} - else - # Empty file to identify nanobsd_vga images - touch ${FINAL_CHROOT_DIR}/etc/nano_use_vga.txt fi # Remove old console options if present. @@ -384,12 +381,10 @@ print_flags() { 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 " OVABLOCKSIZE: %s\n" $OVABLOCKSIZE printf " OVA_FIRST_PART_SIZE: %s\n" $OVA_FIRST_PART_SIZE printf " OVA_SWAP_PART_SIZE: %s\n" $OVA_SWAP_PART_SIZE - printf " OVFFILE: %s\n" $OVFFILE + printf " OVFTEMPLATE: %s\n" $OVFTEMPLATE printf " OVFVMDK: %s\n" $OVFVMDK - printf " OVFCERT: %s\n" $OVFCERT printf " SRC_CONF: %s\n" $SRC_CONF printf " ISOPATH: %s\n" $ISOPATH printf " MEMSTICKPATH: %s\n" $MEMSTICKPATH @@ -671,7 +666,6 @@ awk ' fi umount ${MNT} - sync # Restore the original trap trap "mdconfig -d -u ${MD}; return" 1 2 15 EXIT @@ -789,207 +783,109 @@ create_ova_image() { LOGFILE=${BUILDER_LOGS}/ova.${TARGET}.log + [ -d "${OVA_TMP}" ] \ + && rm -rf ${OVA_TMP} + + mkdir -p ${OVA_TMP} + # Prepare folder to be put in image customize_stagearea_for_image "ova" install_default_kernel ${DEFAULT_KERNEL} "no" - ova_prereq_check - ova_remove_old_tmp_files - ova_setup_ovf_file - ova_create_raw_backed_file - /bin/echo -n ">>> Creating mdconfig image ${OVFPATH}/${OVFVMDK}.raw... " | tee -a ${LOGFILE} - MD=$(mdconfig -a -t vnode -f ${OVFPATH}/${OVFVMDK}.raw) - # Just in case - trap "mdconfig -d -u ${MD}" 1 2 15 EXIT + # 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 + + # Create / partition + makefs \ + -B little \ + -o label=${PRODUCT_NAME} \ + -s ${OVA_FIRST_PART_SIZE} \ + ${OVA_TMP}/${OVFUFS} \ + ${FINAL_CHROOT_DIR} 2>&1 >> ${LOGFILE} + + if [ $? -ne 0 -o ! -f ${OVA_TMP}/${OVFUFS} ]; then + if [ -f ${OVA_TMP}/${OVFUFS} ]; then + rm -f ${OVA_TMP}/${OVFUFS} + fi + echo ">>> ERROR: Error creating vmdk / partition. STOPPING!" | tee -a ${LOGFILE} + print_error_pfS + fi + + # Create vmdk file + mkimg \ + -s gpt \ + -f vmdk \ + -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} 2>&1 >> ${LOGFILE} + + if [ $? -ne 0 -o ! -f ${OVA_TMP}/${OVFVMDK} ]; then + if [ -f ${OVA_TMP}/${OVFUFS} ]; then + rm -f ${OVA_TMP}/${OVFUFS} + fi + if [ -f ${OVA_TMP}/${OVFVMDK} ]; then + rm -f ${OVA_TMP}/${OVFVMDK} + fi + echo ">>> ERROR: Error creating 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 + + ova_setup_ovf_template - # comment out if using pc-sysinstall - ova_partition_gpart $MD - ova_mount_mnt $MD - ova_cpdup_files - ova_setup_platform_specific # after cpdup - ova_calculate_mnt_size - ova_umount_mnt $MD - # Restore default action - trap "-" 1 2 15 EXIT - ova_umount_mdconfig $MD - # We use vbox because it compresses the vmdk on export - ova_create_vbox_image # We repack the file with a more universal xml file that # works in both virtual box and esx server - ova_repack_vbox_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} } -ova_repack_vbox_image() { - BUILDPLATFORM=$(uname -p) - POPULATEDSIZE=$(du -d0 -m $FINAL_CHROOT_DIR | awk '{ print \$1 }') - POPULATEDSIZEBYTES=$(echo "${POPULATEDSIZE}*1024^2" | bc) - REFERENCESSIZE=$(stat -f "%z" ${OVFPATH}/${OVFVMDK}) +# called from create_ova_image +ova_setup_ovf_template() { + if [ -f ${OVFTEMPLATE} ]; then + cp ${OVFTEMPLATE} ${OVA_TMP}/${PRODUCT_NAME}.ovf + else + 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} ${OVFPATH}/${PRODUCT_NAME}.ovf + 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"' ${OVFPATH}/${PRODUCT_NAME}.ovf - file_search_replace 'FreeBSD XX-Bit' 'FreeBSD' ${OVFPATH}/${PRODUCT_NAME}.ovf + file_search_replace '"101"' '"42"' ${OVA_TMP}/${PRODUCT_NAME}.ovf + file_search_replace 'FreeBSD XX-Bit' 'FreeBSD' ${OVA_TMP}/${PRODUCT_NAME}.ovf fi if [ "$BUILDPLATFORM" = "amd64" ]; then - file_search_replace '"101"' '"78"' ${OVFPATH}/${PRODUCT_NAME}.ovf - file_search_replace 'FreeBSD XX-Bit' 'FreeBSD 64-Bit' ${OVFPATH}/${PRODUCT_NAME}.ovf + 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 ${OVFPATH}/${PRODUCT_NAME}.ovf + 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 ${OVFPATH}/${PRODUCT_NAME}.ovf + file_search_replace DISKSECTIONALLOCATIONUNITS $OVA_DISKSECTIONALLOCATIONUNITS ${OVA_TMP}/${PRODUCT_NAME}.ovf echo ">>> Setting DISKSECTIONCAPACITY to 10737418240..." | tee -a ${LOGFILE} - file_search_replace DISKSECTIONCAPACITY $OVADISKSIZE ${OVFPATH}/${PRODUCT_NAME}.ovf - echo ">>> Repacking OVA with universal OVF file..." | tee -a ${LOGFILE} - mv ${OVFPATH}/${OVFVMDK} ${OVFPATH}/${PRODUCT_NAME}-disk1.vmdk - gtar -C ${OVFPATH} -cpf ${PRODUCT_NAME}.ova ${PRODUCT_NAME}.ovf ${PRODUCT_NAME}-disk1.vmdk - rm $OVFPATH/${PRODUCT_NAME}-disk1.vmdk - ls -lah ${OVFPATH}/${PRODUCT_NAME}*ov* -} - -# called from create_ova_image -ova_umount_mnt() { - # Unmount /dev/mdX - umount /mnt - sync ; sync -} - -# called from create_ova_image -ova_umount_mdconfig() { - MD=$1 - # Show gpart info - gpart show $MD - echo ">>> Unmounting ${MD}..." | tee -a ${LOGFILE} - mdconfig -d -u $MD - sync ; sync -} - -# called from create_ova_image -ova_mount_mnt() { - MD=$1 - echo ">>> Mounting image to /mnt..." | tee -a ${LOGFILE} - mount -o rw /dev/${MD}p2 /mnt/ -} - -# called from create_ova_image -ova_setup_ovf_file() { - if [ -f ${OVFFILE} ]; then - cp ${OVFFILE} ${OVFPATH}/${PRODUCT_NAME}.ovf - fi - - if [ ! -f ${OVFPATH}/${PRODUCT_NAME}.ovf ]; then - cp ${BUILDER_TOOLS}/conf/ovf/${PRODUCT_NAME}.ovf ${OVFPATH}/${PRODUCT_NAME}.ovf - file_search_replace PRODUCT_VERSION $PRODUCT_VERSION ${OVFPATH}/${PRODUCT_NAME}.ovf - file_search_replace PRODUCT_URL $PRODUCT_URL ${OVFPATH}/${PRODUCT_NAME}.ovf - fi -} - -# called from create_ova_image -ova_prereq_check() { - if [ ! -f /usr/local/bin/vmdktool ]; then - echo ">>> ERROR: vmdktool is not present please check port sysutils/vmdktool installation" | tee -a ${LOGFILE} - print_error_pfS - fi - sysctl kern.geom.debugflags=16 -} - -# called from create_ova_image -ova_calculate_mnt_size() { - /bin/echo -n ">>> Calculating size of /mnt..." | tee -a ${LOFGILE} - INSTALLSIZE=$(du -s /mnt/ | awk '{ print $1 }') - INSTALLSIZEH=$(du -d0 -h /mnt/ | awk '{ print $1 }') - echo $INSTALLSIZEH -} - -# called from create_ova_image -ova_create_raw_backed_file() { - DISKSIZE=$OVADISKSIZE - BLOCKSIZE=$OVABLOCKSIZE - COUNT=$((${DISKSIZE}/${BLOCKSIZE})) - DISKFILE=${OVFPATH}/${OVFVMDK}.raw - echo ">>> Creating raw backing file ${DISKFILE} (Disk Size: ${DISKSIZE}, Block Size: ${BLOCKSIZE}, Count: ${COUNT})..." | tee -a ${LOGFILE} - dd if=/dev/zero of=$DISKFILE bs=$BLOCKSIZE count=0 seek=$COUNT -} - -# called from create_ova_image -ova_remove_old_tmp_files() { - rm ${OVFPATH}/*.ovf.final 2>/dev/null - rm ${OVFPATH}/*.ova 2>/dev/null -} - -# called from create_ova_image -ova_create_vbox_image() { - # VirtualBox - echo ">>> Creating image using vmdktool..." | tee -a ${LOGFILE} - rm ${OVFPATH}/${OVFVMDK} 2>/dev/null - vmdktool -v ${OVFPATH}/${OVFVMDK} ${OVFPATH}/${OVFVMDK}.raw - rm -rf ${OVFPATH}/${OVFVMDK}.raw - echo ">>> ${OVFPATH}/${OVFVMDK} created." | tee -a ${LOGFILE} -} - -# called from create_ova_image -ova_cpdup_files() { - echo ">>> Populating vmdk staging area..." - cpdup -o ${FINAL_CHROOT_DIR}/COPYRIGHT /mnt/COPYRIGHT - cpdup -o ${FINAL_CHROOT_DIR}/boot /mnt/boot - cpdup -o ${FINAL_CHROOT_DIR}/bin /mnt/bin - cpdup -o ${FINAL_CHROOT_DIR}/cf/conf /mnt/cf/conf - cpdup -o ${FINAL_CHROOT_DIR}/conf.default /mnt/conf.default - cpdup -o ${FINAL_CHROOT_DIR}/dev /mnt/dev - cpdup -o ${FINAL_CHROOT_DIR}/etc /mnt/etc - cpdup -o ${FINAL_CHROOT_DIR}/home /mnt/home - cpdup -o ${FINAL_CHROOT_DIR}/pkgs /mnt/pkgs - cpdup -o ${FINAL_CHROOT_DIR}/libexec /mnt/libexec - cpdup -o ${FINAL_CHROOT_DIR}/lib /mnt/lib - cpdup -o ${FINAL_CHROOT_DIR}/root /mnt/root - cpdup -o ${FINAL_CHROOT_DIR}/sbin /mnt/sbin - cpdup -o ${FINAL_CHROOT_DIR}/usr /mnt/usr - cpdup -o ${FINAL_CHROOT_DIR}/var /mnt/var - sync ; sync ; sync ; sync -} - -ova_setup_platform_specific() { - echo ">>> Installing platform specific items..." | tee -a ${LOGFILE} - echo "/dev/label/${PRODUCT_NAME} / ufs rw 0 0" > /mnt/etc/fstab - echo "/dev/label/swap0 none swap sw 0 0" >> /mnt/etc/fstab - echo ${PRODUCT_NAME} > /mnt/etc/platform - rmdir /mnt/conf - mkdir -p /mnt/cf - mkdir -p /mnt/cf/conf - cp /mnt/conf.default/config.xml /mnt/cf/conf/ - chroot /mnt /bin/ln -s /cf/conf /conf - mkdir -p /mnt/tmp -} - -# called from create_ova_image -ova_partition_gpart() { - # XXX: Switch to mkimg tool!! - MD=$1 - echo ">>> Creating GPT..." | tee -a ${LOGFILE} - gpart create -s gpt $MD - echo ">>> Embedding GPT bootstrap into protective MBR..." | tee -a ${LOGFILE} - gpart bootcode -b /boot/pmbr $MD - echo ">>> Creating GPT boot partition..." | tee -a ${LOGFILE} - gpart add -b 34 -s 128 -t freebsd-boot $MD - gpart bootcode -p /boot/gptboot -i 1 $MD - echo ">>> Setting up disk slices: ${MD}p2 (Size: ${OVA_FIRST_PART_SIZE})..." | tee -a ${LOGFILE} - gpart add -s $OVA_FIRST_PART_SIZE -t freebsd-ufs -i 2 $MD - echo ">>> Setting up disk slices: ${MD}p3 (swap) (Size: ${OVA_SWAP_PART_SIZE})..." | tee -a ${LOGFILE} - gpart add -s $OVA_SWAP_PART_SIZE -t freebsd-swap -i 3 $MD - echo ">>> Running newfs..." | tee -a ${LOGFILE} - newfs -U /dev/${MD}p2 - sync ; sync ; sync ; sync - echo ">>> Labeling partitions: ${MD}p2..." | tee -a ${LOGFILE} - glabel label ${PRODUCT_NAME} ${MD}p2 - sync ; sync - echo ">>> Labeling partitions: ${MD}p3..." | tee -a ${LOGFILE} - glabel label swap0 ${MD}p3 - sync ; sync + file_search_replace DISKSECTIONCAPACITY $OVADISKSIZE ${OVA_TMP}/${PRODUCT_NAME}.ovf } # called from create_ova_image diff --git a/tools/builder_defaults.sh b/tools/builder_defaults.sh index eaac73f..2d3d26f 100644 --- a/tools/builder_defaults.sh +++ b/tools/builder_defaults.sh @@ -192,24 +192,23 @@ export FINAL_CHROOT_DIR=${FINAL_CHROOT_DIR:-"${SCRATCHDIR}/final-dir"} export MEMORYDISK_SIZE=${MEMORYDISK_SIZE:-"768M"} # OVF/vmdk parms -export OVFPATH=${OVFPATH:-"${IMAGES_FINAL_DIR}"} # Name of ovf file included inside OVA archive -export OVFFILE=${OVFFILE:-"${PRODUCT_NAME}.ovf"} +export OVFTEMPLATE=${OVFTEMPLATE:-"${BUILDER_TOOLS}/templates/ovf/${PRODUCT_NAME}.ovf"} +# / partition to be used by mkimg +export OVFUFS=${OVFUFS:-"${PRODUCT_NAME}-disk1.ufs"} # On disk name of VMDK file included in OVA -export OVFVMDK=${OVFVMDK:-"${PRODUCT_NAME}.vmdk"} -# optional -export OVFCERT=${OVFCERT:-""} +export OVFVMDK=${OVFVMDK:-"${PRODUCT_NAME}-disk1.vmdk"} # 10 gigabyte on disk VMDK size export OVADISKSIZE=${OVADISKSIZE:-"10737418240"} -# dd buffering size when creating raw backed VMDK -export OVABLOCKSIZE=${OVABLOCKSIZE:-"409600"} # first partition size (freebsd-ufs) GPT -export OVA_FIRST_PART_SIZE=${OVA_FIRST_PART_SIZE:-"8G"} +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"} +# Temporary place to save files +export OVA_TMP=${OVA_TMP:-"${SCRATCHDIR}/ova_tmp"} # end of OVF # Number of code images on media (1 or 2) @@ -309,6 +308,7 @@ export ISOPATH=${ISOPATH:-"${IMAGES_FINAL_DIR}/${PRODUCT_NAME}-LiveCD-${PRODUCT_ 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"} # set full-update update filename export UPDATES_TARBALL_FILENAME=${UPDATES_TARBALL_FILENAME:-"${UPDATESDIR}/${PRODUCT_NAME}-Full-Update-${PRODUCT_VERSION}-${TARGET}-${DATESTRING}.tgz"} diff --git a/tools/conf/pfPorts/poudriere_bulk b/tools/conf/pfPorts/poudriere_bulk index 58fcb25..02bb4a3 100644 --- a/tools/conf/pfPorts/poudriere_bulk +++ b/tools/conf/pfPorts/poudriere_bulk @@ -1,7 +1,7 @@ benchmarks/iperf benchmarks/iperf3 security/%%PRODUCT_NAME%% -security/%%PRODUCT_NAME%%-vm +security/%%PRODUCT_NAME%%-vmware sysutils/%%PRODUCT_NAME%%-builder sysutils/bsdinstaller net/%%PRODUCT_NAME%%-pkg-pfBlockerNG diff --git a/tools/conf/ovf/pfSense.ovf b/tools/templates/ovf/pfSense.ovf index aeb82d3..ed9b2cf 100644 --- a/tools/conf/ovf/pfSense.ovf +++ b/tools/templates/ovf/pfSense.ovf @@ -70,20 +70,20 @@ <rasd:AddressOnParent>7</rasd:AddressOnParent> <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> <rasd:Connection>VM Network</rasd:Connection> - <rasd:Description>E1000 ethernet adapter on "VM Network"</rasd:Description> + <rasd:Description>vmxnet3 ethernet adapter on "VM Network"</rasd:Description> <rasd:ElementName>ethernet0</rasd:ElementName> <rasd:InstanceID>6</rasd:InstanceID> - <rasd:ResourceSubType>E1000</rasd:ResourceSubType> + <rasd:ResourceSubType>vmxnet3</rasd:ResourceSubType> <rasd:ResourceType>10</rasd:ResourceType> </Item> <Item> <rasd:AddressOnParent>8</rasd:AddressOnParent> <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> <rasd:Connection>VM Network</rasd:Connection> - <rasd:Description>E1000 ethernet adapter on "VM Network"</rasd:Description> + <rasd:Description>vmxnet3 ethernet adapter on "VM Network"</rasd:Description> <rasd:ElementName>ethernet0</rasd:ElementName> <rasd:InstanceID>7</rasd:InstanceID> - <rasd:ResourceSubType>E1000</rasd:ResourceSubType> + <rasd:ResourceSubType>vmxnet3</rasd:ResourceSubType> <rasd:ResourceType>10</rasd:ResourceType> </Item> <Item> |