diff options
author | Renato Botelho <renato@netgate.com> | 2015-08-26 15:12:02 -0300 |
---|---|---|
committer | Renato Botelho <renato@netgate.com> | 2015-08-26 15:12:02 -0300 |
commit | 03b19a93f4d8d870507ee96121cee4acd748dd2a (patch) | |
tree | 71a34e9e7e73d13de21cb4ad831799fb10c30df4 /src/usr/local/www/diag_nanobsd.php | |
parent | 7f410a121522c5d0e2660256ae50c1fde1df3645 (diff) | |
parent | 30ce58ac1ea27b758d5112cb5a3b190c9760f010 (diff) | |
download | pfsense-03b19a93f4d8d870507ee96121cee4acd748dd2a.zip pfsense-03b19a93f4d8d870507ee96121cee4acd748dd2a.tar.gz |
Merge branch 'master' into bootstrap
Diffstat (limited to 'src/usr/local/www/diag_nanobsd.php')
-rw-r--r-- | src/usr/local/www/diag_nanobsd.php | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/src/usr/local/www/diag_nanobsd.php b/src/usr/local/www/diag_nanobsd.php new file mode 100644 index 0000000..7479693 --- /dev/null +++ b/src/usr/local/www/diag_nanobsd.php @@ -0,0 +1,256 @@ +<?php +/* + diag_nanobsd.php +*/ +/* ==================================================================== + * Copyright (c) 2004-2015 Electric Sheep Fencing, LLC. All rights reserved. + * Copyright (c) 2009 Scott Ullrich <sullrich@gmail.com> + * + * 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. + * + * ==================================================================== + * + */ + +/* + pfSense_BUILDER_BINARIES: /sbin/mount /sbin/glabel /usr/bin/grep /usr/bin/cut /usr/bin/head /bin/cp + pfSense_BUILDER_BINARIES: /usr/sbin/boot0cfg /bin/mkdir /sbin/fsck_ufs /sbin/mount /bin/dd /sbin/tunefs + pfSense_MODULE: nanobsd +*/ + +##|+PRIV +##|*IDENT=page-diagnostics-nanobsd +##|*NAME=Diagnostics: NanoBSD +##|*DESCR=Allow access to the 'Diagnostics: NanoBSD' page. +##|*MATCH=diag_nanobsd.php* +##|-PRIV + +ini_set('zlib.output_compression', 0); +ini_set('implicit_flush', 1); +ini_set('max_input_time', '9999'); + +require_once("guiconfig.inc"); +require_once("config.inc"); + +// Setting DEBUG to true causes the dangerous stuff on this page to be simulated rather than exectued. +// MUST be set to false for production of course +define(DEBUG, true); + +$pgtitle = array(gettext("Diagnostics"), gettext("NanoBSD")); +include("head.inc"); + +// Survey slice info +global $SLICE, $OLDSLICE, $TOFLASH, $COMPLETE_PATH, $COMPLETE_BOOT_PATH; +global $GLABEL_SLICE, $UFS_ID, $OLD_UFS_ID, $BOOTFLASH; +global $BOOT_DEVICE, $REAL_BOOT_DEVICE, $BOOT_DRIVE, $ACTIVE_SLICE; +nanobsd_detect_slice_info(); + +$NANOBSD_SIZE = nanobsd_get_size(); +$class='alert-warning'; + +if($_POST['bootslice']) { + if(!DEBUG) + nanobsd_switch_boot_slice(); + else + sleep(4); + + $savemsg = gettext("The boot slice has been set to") . " " . nanobsd_get_active_slice(); + $class='alert-success'; + // Survey slice info + nanobsd_detect_slice_info(); +} + +if($_POST['destslice'] && $_POST['duplicateslice']) { + $statusmsg = gettext("Duplicating slice. Please wait, this will take a moment..."); + + if(!DEBUG && nanobsd_clone_slice($_POST['destslice'])) { + $savemsg = gettext("The slice has been duplicated.") . "<p/>" . gettext("If you would like to boot from this newly duplicated slice please set it using the bootup information area."); + $class='alert-success'; + } else { + $savemsg = gettext("There was an error while duplicating the slice. Operation aborted."); + $class='alert-danger'; + } + // Re-Survey slice info + nanobsd_detect_slice_info(); +} + +if ($_POST['changero']) { + if (!DEBUG && is_writable("/")) { + conf_mount_ro(); + } else { + conf_mount_rw(); + } +} + +if ($_POST['setrw']) { + if(!DEBUG) { + conf_mount_rw(); + if (isset($_POST['nanobsd_force_rw'])) + $config['system']['nanobsd_force_rw'] = true; + else + unset($config['system']['nanobsd_force_rw']); + + write_config("Changed Permanent Read/Write Setting"); + conf_mount_ro(); + } + else { + $savemsg = 'Saved r/w permanantly'; + $class = 'alert-success'; + } +} + +print_info_box("The options on this page are intended for use by advanced users only."); + +if ($savemsg) + print_info_box($savemsg, $class); + +require('classes/Form.class.php'); + +$form = new Form(false); + +$section = new Form_Section('NanoBSD Option'); + +$section->addInput(new Form_StaticText( + 'Image Size', + $NANOBSD_SIZE +)); + +$slicebtn = new Form_Button('bootslice', 'Switch Slice'); +$slicebtn->removeClass('btn-primary')->addClass('btn-default btn-sm'); + +$section->addInput(new Form_StaticText( + 'Bootup slice', + $ACTIVE_SLICE . ' ' . $slicebtn +)); + +if (is_writable("/")) { + $refcount = refcount_read(1000); + /* refcount_read returns -1 when shared memory section does not exist */ + if ($refcount == 1 || $refcount == -1) { + $refdisplay = ""; + } else { + $refdisplay = " (Reference count " . $refcount . ")"; + } + $lbl = gettext("Read/Write") . $refdisplay; + if (!isset($config['system']['nanobsd_force_rw'])) + $btnlbl = gettext("Switch to Read-Only"); +} else { + $lbl = gettext("Read-Only"); + if (!isset($config['system']['nanobsd_force_rw'])) + $btnlbl = gettext("Switch to Read/Write"); +} + +$robtn = new Form_Button('changero', $btnlbl); +$robtn->removeClass('btn-primary')->addClass('btn-default btn-sm'); + +$section->addInput(new Form_StaticText( + 'Read/Write status', + $lbl . ' ' . $robtn +)); + +$section->addInput(new Form_Checkbox( + 'nanobsd_force_rw', + 'Permanent Read/Write', + 'Keep media mounted read/write at all times. ', + isset($config['system']['nanobsd_force_rw']) +))->setHelp('This setting is only temporary, and can be switched dynamically in the background.'); + +$permbtn = new Form_Button('setrw', 'Save'); +$permbtn->removeClass('btn-primary')->addClass('btn-default btn-sm'); + +$section->addInput(new Form_StaticText( + null, + $permbtn +)); + +$section->addInput(new Form_Input( + 'destslice', + null, + 'hidden', + $COMPLETE_PATH +)); + +$dupbtn = new Form_Button('duplicateslice', 'Duplicate ' . $COMPLETE_BOOT_PATH . ' -> ' . $TOFLASH); +$dupbtn->removeClass('btn-primary')->addClass('btn-default btn-sm'); + +$section->addInput(new Form_StaticText( + 'Duplicate boot slice', + $dupbtn +))->setHelp('This will duplicate the bootup slice to the alternate slice. Use this if you would like to duplicate the known good working boot partition to the alternate.'); + +$section->addInput(new Form_StaticText( + 'RRD/DHCP Backup', + 'These options have been relocated to the ' . '<a href="system_advanced_misc.php">' . 'System > Advanced, Miscellaneous</a> tab.' +)); + +if(file_exists("/conf/upgrade_log.txt")) { + $viewbtn = new Form_Button('viewupgradelog', 'View log'); + $viewbtn->removeClass('btn-primary')->addClass('btn-default btn-sm'); + + $section->addInput(new Form_StaticText( + 'View previous upgrade log', + $viewbtn + )); +} +$form->add($section); +print($form); + +if(file_exists("/conf/upgrade_log.txt") && $_POST['viewupgradelog']) { +?> + <div class="panel panel-default"> + <div class="panel-heading"><h2 class="panel-title"><?=gettext("Previous upgrade log")?></h2></div> + <!-- No white space between the <pre> and the first output or it will appear on the page! --> + <pre><?=str_ireplace("pfsense", $g['product_name'], file_get_contents("/conf/upgrade_log.txt"))?> + <br /><?=gettext("File list:")?> + <?=str_ireplace("pfsense", $g['product_name'], file_get_contents("/conf/file_upgrade_log.txt"))?> + <br /><?=gettext("Misc log:")?> + <?=str_ireplace("pfsense", $g['product_name'], file_get_contents("/conf/firmware_update_misc_log.txt"))?> + <br /><?=gettext("fdisk/bsdlabel log:")?> + <?=str_ireplace("pfsense", $g['product_name'], file_get_contents("/conf/fdisk_upgrade_log.txt"))?> + </pre> + </div> +<?php +} +require("foot.inc");
\ No newline at end of file |