summaryrefslogtreecommitdiffstats
path: root/usr/local/www/installer
diff options
context:
space:
mode:
authorScott Ullrich <sullrich@pfsense.org>2010-12-17 17:10:34 -0500
committerScott Ullrich <sullrich@pfsense.org>2010-12-17 17:10:34 -0500
commit15226bf3de0469bda326f28caf59dac679f9016a (patch)
treefd5818533486af48c89e92eb76889815e8448ea5 /usr/local/www/installer
parent9f154c1699e0e6486e87f990735aaebde99bb208 (diff)
downloadpfsense-15226bf3de0469bda326f28caf59dac679f9016a.zip
pfsense-15226bf3de0469bda326f28caf59dac679f9016a.tar.gz
Moving installer to it's own directory since we will have a number of helper javascript files and such soon
Diffstat (limited to 'usr/local/www/installer')
-rw-r--r--usr/local/www/installer/default.php826
1 files changed, 826 insertions, 0 deletions
diff --git a/usr/local/www/installer/default.php b/usr/local/www/installer/default.php
new file mode 100644
index 0000000..238a1cb
--- /dev/null
+++ b/usr/local/www/installer/default.php
@@ -0,0 +1,826 @@
+<?php
+/*
+ installer.php
+ part of pfSense (http://www.pfsense.com/)
+ Copyright (C) 2010 Scott Ullrich <sullrich@gmail.com>
+ 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.
+
+ 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.
+*/
+
+$nocsrf = true;
+
+require("globals.inc");
+require("guiconfig.inc");
+
+define('PC_SYSINSTALL', '/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh');
+
+if($g['platform'] == "pfSense" or $g['platform'] == "nanobsd") {
+ Header("Location: /index.php");
+ exit;
+}
+
+// Main switch dispatcher
+switch ($_REQUEST['state']) {
+ case "update_installer_status":
+ update_installer_status();
+ exit;
+ case "custominstall":
+ installer_custom();
+ exit;
+ case "begin_install":
+ installing_gui();
+ begin_install();
+ exit;
+ case "verify_before_install":
+ verify_before_install();
+ exit;
+ default:
+ installer_main();
+}
+
+function write_out_pc_sysinstaller_config($disk, $fstype = "UFS+S", $swapsize = "", $encryption = false, $encpass = "", $bootmanager = "bsd") {
+ $diskareas = "";
+ $fd = fopen("/usr/sbin/pc-sysinstall/examples/pfSense-install.cfg", "w");
+ if(!$fd) {
+ return true;
+ }
+ if($swapsize <> "") {
+ $diskareas .= "disk0-part={$fstype} 0 /\n";
+ $diskareas .= "disk0-part=SWAP {$swapsize} none \n";
+ } else {
+ $diskareas .= "disk0-part={$fstype} 0 /\n";
+ }
+ if($encpass)
+ $diskareaspass = "encpass={$encpass}\n";
+ if($encryption)
+ $diskareaspre = "disk0-part=UFS 500 /boot\n";
+ if($bootmanager == "")
+ $bootmanager = "none";
+
+ $config = <<<EOF
+# Sample configuration file for an installation using pc-sysinstall
+
+installMode=fresh
+installInteractive=yes
+installType=FreeBSD
+installMedium=LiveCD
+
+# Set the disk parameters
+disk0={$disk}
+partition=all
+bootManager={$bootmanager}
+commitDiskPart
+
+# Setup the disk label
+# All sizes are expressed in MB
+# Avail FS Types, UFS, UFS+S, UFS+J, ZFS, SWAP
+# Size 0 means use the rest of the slice size
+# Alternatively, you can append .eli to any of
+# the above filesystem types to encrypt that disk.
+# If you with to use a passphrase with this
+# encrypted partition, on the next line
+# the flag "encpass=" should be entered:
+# encpass=mypass
+# disk0-part=UFS 500 /boot
+# disk0-part=UFS.eli 500 /
+# disk0-part=UFS.eli 500 /usr
+{$diskareaspre}
+{$diskareas}
+{$diskareaspass}
+
+# Do it now!
+commitDiskLabel
+
+# Set if we are installing via optical, USB, or FTP
+installType=FreeBSD
+
+packageType=cpdup
+
+# Optional Components
+cpdupPaths=boot,COPYRIGHT,bin,conf,conf.default,dev,etc,home,kernels,libexec,lib,root,sbin,usr,var
+
+# runExtCommand=chmod a+rx /usr/local/bin/after_installation_routines.sh ; cd / ; /usr/local/bin/after_installation_routines.sh
+EOF;
+ fwrite($fd, $config);
+ fclose($fd);
+ return;
+}
+
+function start_installation() {
+ global $g, $fstype;
+ if(file_exists("/tmp/install_complete"))
+ return;
+ $ps_running = exec("ps awwwux | grep -v grep | grep 'sh /tmp/installer.sh'");
+ if($ps_running)
+ return;
+ $fd = fopen("/tmp/installer.sh", "w");
+ if(!$fd) {
+ die(gettext("Could not open /tmp/installer.sh for writing"));
+ exit;
+ }
+ fwrite($fd, "rm /tmp/.pc-sysinstall/pc-sysinstall.log 2>/dev/null\n");
+ fwrite($fd, "/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh -c /usr/sbin/pc-sysinstall/examples/pfSense-install.cfg \n");
+ fwrite($fd, "chmod a+rx /usr/local/bin/after_installation_routines.sh\n");
+ fwrite($fd, "cd / && /usr/local/bin/after_installation_routines.sh\n");
+ fwrite($fd, "mkdir /mnt/tmp\n");
+// fwrite($fd, "umount /mnt\n");
+ fwrite($fd, "touch /tmp/install_complete\n");
+ fclose($fd);
+ exec("chmod a+rx /tmp/installer.sh");
+ mwexec_bg("sh /tmp/installer.sh");
+}
+
+function installer_find_first_disk() {
+ global $g, $fstype;
+ $disk = `/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh disk-list | head -n1 | cut -d':' -f1`;
+ return $disk;
+}
+
+function pcsysinstall_get_disk_info($diskname) {
+ global $g, $fstype;
+ $disk = split("\n", `/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh disk-list`);
+ $disks_array = array();
+ foreach($disk as $d) {
+ if(!$d)
+ continue;
+ $disks_info = split(":", $d);
+ $tmp_array = array();
+ if($disks_info[0] == $diskname) {
+ $disk_info = split("\n", `/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh disk-info {$disks_info[0]}`);
+ foreach($disk_info as $di) {
+ $di_s = split("=", $di);
+ if($di_s[0])
+ $tmp_array[$di_s[0]] = $di_s[1];
+ }
+ $tmp_array['disk'] = trim($disks_info[0]);
+ $tmp_array['desc'] = trim(htmlentities($disks_info[1]));
+ return $tmp_array;
+ }
+ }
+}
+
+// Return an array with all disks information.
+function installer_find_all_disks() {
+ global $g, $fstype;
+ $disk = split("\n", `/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh disk-list`);
+ $disks_array = array();
+ foreach($disk as $d) {
+ if(!$d)
+ continue;
+ $disks_info = split(":", $d);
+ $tmp_array = array();
+ $disk_info = split("\n", `/usr/sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh disk-info {$disks_info[0]}`);
+ foreach($disk_info as $di) {
+ $di_s = split("=", $di);
+ if($di_s[0])
+ $tmp_array[$di_s[0]] = $di_s[1];
+ }
+ $tmp_array['disk'] = trim($disks_info[0]);
+ $tmp_array['desc'] = trim(htmlentities($disks_info[1]));
+ $disks_array[] = $tmp_array;
+ }
+ return $disks_array;
+}
+
+function update_installer_status() {
+ global $g, $fstype;
+ // Ensure status files exist
+ if(!file_exists("/tmp/installer_installer_running"))
+ touch("/tmp/installer_installer_running");
+ $status = `cat /tmp/.pc-sysinstall/pc-sysinstall.log`;
+ $status = str_replace("\n", "\\n", $status);
+ $status = str_replace("\n", "\\r", $status);
+ echo "this.document.forms[0].installeroutput.value='$status';\n";
+ echo "this.document.forms[0].installeroutput.scrollTop = this.document.forms[0].installeroutput.scrollHeight;\n";
+ // Find out installer progress
+ $progress = "5";
+ if(strstr($status, "Running: dd"))
+ $progress = "6";
+ if(strstr($status, "Running: gpart create -s GPT"))
+ $progress = "7";
+ if(strstr($status, "Running: gpart bootcode"))
+ $progress = "7";
+ if(strstr($status, "Running: newfs -U"))
+ $progress = "8";
+ if(strstr($status, "Running: sync"))
+ $progress = "9";
+ if(strstr($status, "/boot /mnt/boot"))
+ $progress = "10";
+ if(strstr($status, "/COPYRIGHT /mnt/COPYRIGHT"))
+ $progress = "11";
+ if(strstr($status, "/bin /mnt/bin"))
+ $progress = "12";
+ if(strstr($status, "/conf /mnt/conf"))
+ $progress = "15";
+ if(strstr($status, "/conf.default /mnt/conf.default"))
+ $progress = "20";
+ if(strstr($status, "/dev /mnt/dev"))
+ $progress = "25";
+ if(strstr($status, "/etc /mnt/etc"))
+ $progress = "30";
+ if(strstr($status, "/home /mnt/home"))
+ $progress = "35";
+ if(strstr($status, "/kernels /mnt/kernels"))
+ $progress = "40";
+ if(strstr($status, "/libexec /mnt/libexec"))
+ $progress = "50";
+ if(strstr($status, "/lib /mnt/lib"))
+ $progress = "60";
+ if(strstr($status, "/root /mnt/root"))
+ $progress = "70";
+ if(strstr($status, "/sbin /mnt/sbin"))
+ $progress = "75";
+ if(strstr($status, "/sys /mnt/sys"))
+ $progress = "80";
+ if(strstr($status, "/usr /mnt/usr"))
+ $progress = "95";
+ if(strstr($status, "/usr /mnt/usr"))
+ $progress = "90";
+ if(strstr($status, "/var /mnt/var"))
+ $progress = "95";
+ if(strstr($status, "cap_mkdb /etc/login.conf"))
+ $progress = "96";
+ if(strstr($status, "Setting hostname"))
+ $progress = "97";
+ if(strstr($status, "umount -f /mnt"))
+ $progress = "98";
+ if(strstr($status, "umount -f /mnt"))
+ $progress = "99";
+ if(strstr($status, "Installation finished"))
+ $progress = "100";
+ // Check for error and bail if we see one.
+ if(stristr($status, "error")) {
+ $error = true;
+ echo "\$('installerrunning').innerHTML='<img class=\"infoboxnpimg\" src=\"/themes/{$g['theme']}/images/icons/icon_exclam.gif\"> <font size=\"2\"><b>An error occurred. Aborting installation. <a href=\"installer.php\">Back</a> to webInstaller'; ";
+ echo "\$('progressbar').style.width='100%';\n";
+ unlink_if_exists("/tmp/install_complete");
+ return;
+ }
+ $running_old = trim(file_get_contents("/tmp/installer_installer_running"));
+ if($installer_running <> "running") {
+ $ps_running = exec("ps awwwux | grep -v grep | grep 'sh /tmp/installer.sh'");
+ if($ps_running) {
+ $running = "\$('installerrunning').innerHTML='<table><tr><td valign=\"middle\"><img src=\"/themes/{$g['theme']}/images/misc/loader.gif\"></td><td valign=\"middle\">&nbsp;<font size=\"2\"><b>Installer running ({$progress}% completed)...</td></tr></table>'; ";
+ if($running_old <> $running) {
+ echo $running;
+ file_put_contents("/tmp/installer_installer_running", "$running");
+ }
+ }
+ }
+ if($progress)
+ echo "\$('progressbar').style.width='{$progress}%';\n";
+ if(file_exists("/tmp/install_complete")) {
+ echo "\$('installerrunning').innerHTML='<img class=\"infoboxnpimg\" src=\"/themes/{$g['theme']}/images/icons/icon_exclam.gif\"> <font size=\"+1\">Installation completed. Please <a href=\"reboot.php\">reboot</a> to continue';\n";
+ echo "\$('pbdiv').Fade();\n";
+ unlink_if_exists("/tmp/installer.sh");
+ file_put_contents("/tmp/installer_installer_running", "finished");
+ }
+}
+
+function update_installer_status_win($status) {
+ global $g, $fstype;
+ echo "<script type=\"text/javascript\">\n";
+ echo " \$('installeroutput').value = '" . str_replace(htmlentities($status), "\n", "") . "';\n";
+ echo "</script>";
+}
+
+function begin_install() {
+ global $g;
+ if(file_exists("/tmp/install_complete"))
+ return;
+ unlink_if_exists("/tmp/install_complete");
+ if($_REQUEST['disk'])
+ $disk = htmlspecialchars($_REQUEST['disk']);
+ else
+ $disk = installer_find_first_disk();
+ if($_REQUEST['swapsize'])
+ $swapsize = $_REQUEST['swapsize'];
+ if($_REQUEST['bootmanager'])
+ $bootmanager = $_REQUEST['bootmanager'];
+ if(!$disk) {
+ echo "<script type=\"text/javascript\">";
+ echo "\$('pbdiv').Fade();\n";
+ echo "</script>";
+ $savemsg = gettext("Could not find a suitable disk for installation");
+ update_installer_status_win(gettext("Could not find a suitable disk for installation."));
+ return;
+ }
+ // Handle other type of file systems
+ if($_REQUEST['fstype'])
+ $fstype = htmlspecialchars($_REQUEST['fstype']);
+ else
+ $fstype = "UFS+S";
+ if(substr($_REQUEST['fstype'], -4, 4) == ".eli") {
+ $encryption = true;
+ if($_REQUEST['encpass'])
+ $encpass = $_REQUEST['encpass'];
+ else
+ $encpass = "";
+ } else {
+ $encryption = false;
+ $encpass = "";
+ }
+ write_out_pc_sysinstaller_config($disk, $fstype, $swapsize, $encryption, $encpass);
+ update_installer_status_win(sprintf(gettext("Beginning installation on disk %s."),$disk));
+ start_installation();
+}
+
+function head_html() {
+ global $g, $fstype;
+ echo <<<EOF
+<html>
+ <head>
+ <style type='text/css'>
+ a:link {
+ color: #000000;
+ text-decoration:underline;
+ font-size:14;
+ }
+ a:visited {
+ color: #000000;
+ text-decoration:underline;
+ font-size:14;
+ }
+ a:hover {
+ color: #FFFF00;
+ text-decoration: none;
+ font-size:14;
+ }
+ a:active {
+ color: #FFFF00;
+ text-decoration:underline;
+ font-size:14;
+ }
+ </style>
+ </head>
+EOF;
+
+}
+
+function body_html() {
+ global $g, $fstype;
+ $pfSversion = str_replace("\n", "", file_get_contents("/etc/version"));
+ if(strstr($pfSversion, "1.2"))
+ $one_two = true;
+ $pgtitle = array("{$g['product_name']}", gettext("Installer"));
+ include("head.inc");
+ echo <<<EOF
+ <body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+ <script src="/javascript/scriptaculous/prototype.js" type="text/javascript"></script>
+ <script type="text/javascript">
+ function getinstallerprogress() {
+ url = 'installer.php';
+ pars = 'state=update_installer_status';
+ callajax(url, pars, installcallback);
+ }
+ function callajax(url, pars, activitycallback) {
+ var myAjax = new Ajax.Request(
+ url,
+ {
+ method: 'post',
+ parameters: pars,
+ onComplete: activitycallback
+ });
+ }
+ function installcallback(transport) {
+ setTimeout('getinstallerprogress()', 2000);
+ eval(transport.responseText);
+ }
+ </script>
+EOF;
+
+ if($one_two)
+ echo "<p class=\"pgtitle\">{$pgtitle}</font></p>";
+
+ if ($savemsg) print_info_box($savemsg);
+}
+
+function end_html() {
+ global $g, $fstype;
+ echo "</form>";
+ echo "</body>";
+ echo "</html>";
+}
+
+function template() {
+ global $g, $fstype;
+ head_html();
+ body_html();
+ echo <<<EOF
+ <div id="mainlevel">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td class="tabcont" >
+ <form action="installer.php" method="post">
+ <div id="pfsensetemplate">
+
+
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+EOF;
+ end_html();
+}
+
+function verify_before_install() {
+ global $g, $fstype;
+ head_html();
+ body_html();
+ page_table_start();
+ $disk = pcsysinstall_get_disk_info(htmlspecialchars($_REQUEST['disk']));
+ $disksize = format_bytes($disk['size'] * 1048576);
+ if($_REQUEST['swapsize'])
+ $swapsize = htmlspecialchars($_REQUEST['swapsize']);
+ if($_REQUEST['swapsize'])
+ $swapsizeline = "<tr><td align=\"right\"><b>SWAP Size:</td><td>{$swapsize}</td></tr>";
+ $fstype_echo = htmlspecialchars($_REQUEST['fstype']);
+ $encpass = htmlspecialchars($_REQUEST['encpass']);
+ $bootmanager = htmlspecialchars($_REQUEST['bootmanager']);
+ if(stristr($fstype_echo, ".eli"))
+ $fstype_echo_enc = " (Encrypted)";
+ $disk_echo = htmlspecialchars($_REQUEST['disk']);
+ $swapsize_echo = htmlspecialchars($_REQUEST['swapsize']);
+ echo <<<EOF
+ <form method="post" action="installer.php">
+ <input type="hidden" name="fstype" value="{$fstype_echo}">
+ <input type="hidden" name="disk" value="{$disk_echo}">
+ <input type="hidden" name="state" value="begin_install">
+ <input type="hidden" name="swapsize" value="{$swapsize}">
+ <input type="hidden" name="encpass" value="{$encpass}">
+ <input type="hidden" name="bootmanager" value="{$bootmanager}">
+ <div id="mainlevel">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td >
+ <div>
+ <center>
+ <div id="pfsensetemplate">
+ <table bgcolor="FFFF00" width="400" height="30" cellpadding="2" style="border:1px dashed;">
+ <tr valign="middle">
+ <td>
+ <center><b>Please verify that the following is correct:</b></center>
+ </td>
+ </tr>
+ </table>
+ <p/>
+ <table>
+ <tr><td align="right"><b>Disk:</td><td>{$disk_echo}</td></tr>
+ <tr><td align="right"><b>Description:</td><td>{$disk['desc']}</td></tr>
+ <tr><td align="right"><b>Size:</td><td>{$disksize}</td></tr>
+ {$swapsizeline}
+ <tr><td align="right"><b>Filesystem:</td><td>{$fstype_echo}{$fstype_echo_enc}</td></tr>
+ <tr><td align="right"><b>Boot manager:</td><td>{$bootmanager}</td></tr>
+ </table>
+ </div>
+ </center>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <center>
+ <p/>
+ <input type="button" value="Cancel" onClick="javascript:document.location='/installer.php';"> &nbsp;&nbsp;
+ <input type="submit" value="Begin installation">
+ </center>
+ </td>
+ </tr>
+ </table>
+ </div>
+EOF;
+ page_table_end();
+ end_html();
+}
+
+function installing_gui() {
+ global $g, $fstype;
+ head_html();
+ body_html();
+ echo "<form action=\"installer.php\" method=\"post\" state=\"step1_post\">";
+ page_table_start();
+ echo <<<EOF
+ <center>
+ <table width="100%">
+ <tr><td>
+ <div id="mainlevel">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+ <div id="pfsenseinstaller" width="100%">
+ <div id='installerrunning' width='100%' style="padding:8px; border:1px dashed #000000">
+ <table>
+ <tr>
+ <td valign="middle">
+ <img src="/themes/{$g['theme']}/images/misc/loader.gif">
+ </td>
+ <td valign="middle">
+ &nbsp;<font size="2"><b>Starting Installer... Please wait...
+ </td>
+ </tr>
+ </table>
+ </div>
+ <div id='pbdiv'>
+ <br/>
+ <center>
+ <table id='pbtable' height='15' width='640' border='0' colspacing='0' cellpadding='0' cellspacing='0'>
+ <tr>
+ <td background="./themes/the_wall/images/misc/bar_left.gif" height='15' width='5'>
+ </td>
+ <td>
+ <table id="progholder" name="progholder" height='15' width='630' border='0' colspacing='0' cellpadding='0' cellspacing='0'>
+ <td background="./themes/the_wall/images/misc/bar_gray.gif" valign="top" align="left">
+ <img src='./themes/the_wall/images/misc/bar_blue.gif' width='0' height='15' name='progressbar' id='progressbar'>
+ </td>
+ </table>
+ </td>
+ <td background="./themes/the_wall/images/misc/bar_right.gif" height='15' width='5'>
+ </td>
+ </tr>
+ </table>
+ <br/>
+ </div>
+ <textarea name='installeroutput' id='installeroutput' rows="31" cols="90">
+ </textarea>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td></tr>
+ </table>
+ </center>
+ <script type="text/javascript">setTimeout('getinstallerprogress()', 250);</script>
+
+EOF;
+ page_table_end();
+ end_html();
+}
+
+function page_table_start() {
+ global $g, $fstype;
+ echo <<<EOF
+ <center>
+ <img border="0" src="./themes/{$g['theme']}/images/logo.gif"></a><br/>
+ <table cellpadding="6" cellspacing="0" width="550" height="380" style="border:1px solid #000000">
+ <tr height="10" bgcolor="#990000">
+ <td style="border-bottom:1px solid #000000">
+ <font color='white'>
+ <b>
+ {$g['product_name']} installer
+ </b>
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td>
+
+EOF;
+
+}
+
+function page_table_end() {
+ global $g, $fstype;
+ echo <<<EOF
+ </td>
+ </tr>
+ </table>
+ </center>
+
+EOF;
+
+}
+
+function installer_custom() {
+ global $g, $fstype;
+ if(file_exists("/tmp/.pc-sysinstall/pc-sysinstall.log"))
+ unlink("/tmp/.pc-sysinstall/pc-sysinstall.log");
+ head_html();
+ body_html();
+ page_table_start();
+ echo <<<EOF
+ <form action="installer.php" method="post">
+ <input type="hidden" name="state" value="verify_before_install">
+ <div id="mainlevel">
+ <center>
+ <table width="100%" border="0" cellpadding="5" cellspacing="0">
+ <tr>
+ <td>
+ <center>
+ <div id="mainarea">
+ <br/>
+ <center>
+ <table width="100%" border="0" cellpadding="5" cellspacing="5">
+ <tr>
+ <td>
+ <div id="pfsenseinstaller">
+ <center>
+ <div id='loadingdiv'>
+ <img src="/themes/{$g['theme']}/images/misc/loader.gif"> Probing disks, please wait...
+ </div>
+EOF;
+ ob_flush();
+ $disks = installer_find_all_disks();
+ if(!$disks) {
+ $custom_txt = gettext("ERROR: Could not find any suitable disks for installation.");
+ } else {
+ // Prepare disk selection dropdown
+ $custom_txt = <<<EOF
+ <table bgcolor="FFFF00" width="400" height="30" cellpadding="2" style="border:1px dashed;">
+ <tr valign="middle">
+ <td>
+ <center><b>Select the installation parameters for {$g['product_name']}:</b></center>
+ </td>
+ </tr>
+ </table><p/>
+ <table>
+EOF;
+ $custom_txt .= "<tr><td align='right'><b>Swap size</td><td><input name='swapsize' type='text' value='200M'></td></tr>\n";
+ $custom_txt .= "<tr><td align='right'><b>Disk:</td><td><select name='disk'>\n";
+ foreach($disks as $disk) {
+ $disksize = format_bytes($disk['size'] * 1048576);
+ $custom_txt .= "<option value='{$disk['disk']}'>{$disk['disk']} - {$disksize} - {$disk['desc']}</option>\n";
+ }
+ // File system type
+ $custom_txt .= "</select></td></tr>\n";
+ // XXX: Convert to rowhelper. Add Ajax callbacks to verify sizes, etc.
+ $custom_txt .= "<tr><td align='right'><b>Filesystem type:</td><td><select onChange='javascript:onfstypeChange()' id='fstype' name='fstype'>\n";
+ $custom_txt .= "<option value='UFS'>UFS</option>\n";
+ $custom_txt .= "<option value='UFS+S'>UFS + Softupdates</option>\n";
+ $custom_txt .= "<option value='UFS.eli'>Encrypted UFS</option>\n";
+ $custom_txt .= "<option value='UFS+S.eli'>Encrypted UFS + Softupdates</option>\n";
+ $release = php_uname("r");
+ $release = $release[0];
+ if($release == "9") {
+ $custom_txt .= "<option value='UFS+J'>UFS + Journaling</option>\n";
+ $custom_txt .= "<option value='UFS+J.eli'>Encrypted UFS + Journaling</option>\n";
+ }
+ if(file_exists("/boot/gptzfsboot")) {
+ $custom_txt .= "<option value='ZFS'>ZFS</option>\n";
+ $custom_txt .= "<option value='ZFS.eli'>Encrypted ZFS</option>\n";
+ }
+ $custom_txt .= "</select>\n";
+ $custom_txt .= "</td></tr>";
+ // Disk encryption password
+ $custom_txt .= "<tr name='encpassrow' id='encpassrow'><td align='right'><nobr>Disk encryption password:</nobr></td><td>";
+ $custom_txt .= "<input name='encpass' id='encpass'>";
+ $custom_txt .= "</td></tr>";
+ // Boot manager type
+ $custom_txt .= "<tr><td align='right'>Boot manager:</td><td>";
+ $custom_txt .= "<select name='bootmanager'><option value='bsd'>BSD</option><option value='none'>None</select>";
+ $custom_txt .= "</td></tr>";
+ $custom_txt .= "</table><p/>";
+ }
+ echo <<<EOF
+ <script type="text/javascript">
+ \$('loadingdiv').style.visibility='hidden';
+ </script>
+ <div id='contentdiv' style="display:none;">
+ {$custom_txt}<p/>
+ <input type="button" value="Cancel" onClick="javascript:document.location='/installer.php';"> &nbsp;&nbsp
+ <input type="submit" value="Next">
+ </div>
+ <script type="text/javascript">
+ \$('contentdiv').appear();
+ // Start out with this option disabled.
+ \$('encpass').disabled = 1;
+ function onfstypeChange() {
+ var fstype = \$F('fstype');
+ if(fstype.substring(fstype.length - 4) == ".eli") {
+ \$('encpass').disabled = 0;
+ \$('encpassrow').show();
+ alert('NOTE: If you define a disk encryption password you will need to enter it on *EVERY* bootup!');
+ } else {
+ \$('encpass').disabled = 1;
+ \$('encpassrow').hide();
+ }
+ }
+ onfstypeChange();
+ </script>
+ </center>
+ </td></tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+
+EOF;
+ page_table_end();
+ end_html();
+}
+
+function installer_main() {
+ global $g, $fstype;
+ if(file_exists("/tmp/.pc-sysinstall/pc-sysinstall.log"))
+ unlink("/tmp/.pc-sysinstall/pc-sysinstall.log");
+ head_html();
+ body_html();
+ $disk = installer_find_first_disk();
+ // Only enable ZFS if this exists. The install will fail otherwise.
+ if(file_exists("/boot/gptzfsboot"))
+ $zfs_enabled = "<tr bgcolor=\"#9A9A9A\"><td align=\"center\"><a href=\"installer.php?state=verify_before_install&fstype=ZFS&swapsize=200M\">Easy installation of {$g['product_name']} using the ZFS filesystem on disk {$disk}</a></td></tr>";
+ page_table_start();
+ echo <<<EOF
+ <form action="installer.php" method="post" state="step1_post">
+ <div id="mainlevel">
+ <center>
+ <b><font face="arial" size="+2">Welcome to the {$g['product_name']} webInstaller!</b></font><p/>
+ <font face="arial" size="+1">This utility will install {$g['product_name']} to a hard disk, flash drive, etc.</font>
+ <table width="100%" border="0" cellpadding="5" cellspacing="0">
+ <tr>
+ <td>
+ <center>
+ <div id="mainarea">
+ <br/>
+ <center>
+ Please select an installer option to begin:
+ <p/>
+ <table width="100%" border="0" cellpadding="5" cellspacing="5">
+ <tr>
+ <td>
+ <div id="pfsenseinstaller">
+ <center>
+EOF;
+ if(!$disk) {
+ echo gettext("ERROR: Could not find any suitable disks for installation.");
+ echo "</div></td></tr></table></div></table></div>";
+ end_html();
+ exit;
+ }
+ echo <<<EOF
+
+ <table cellspacing="5" cellpadding="5" style="border: 1px dashed;">
+ <tr bgcolor="#CECECE"><td align="center">
+ <a href="installer.php?state=verify_before_install&disk={$disk}&fstype=UFS&swapsize=200M">Easy installation of {$g['product_name']} using the UFS filesystem on disk {$disk}</a>
+ </td></tr>
+ {$zfs_enabled}
+ <tr bgcolor="#AAAAAA"><td align="center">
+ <a href="installer.php?state=custominstall">Custom installation of {$g['product_name']}</a>
+ </td></tr>
+ <tr bgcolor="#CECECE"><td align="center">
+ <a href='/'>Cancel and return to Dashboard</a>
+ </td></tr>
+ </table>
+ </center>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+EOF;
+ page_table_end();
+ end_html();
+}
+
+?>
OpenPOWER on IntegriCloud