Commit 506ae138 authored by Jos Schellevis's avatar Jos Schellevis

Firmware upgrade changes

parent 831faaa8
...@@ -129,6 +129,7 @@ if [ "$pkg_running" == "" ]; then ...@@ -129,6 +129,7 @@ if [ "$pkg_running" == "" ]; then
if [ "`echo $i | grep ':'`" == "" ]; then if [ "`echo $i | grep ':'`" == "" ]; then
itemcount=0 # This is not a valid item so reset item count itemcount=0 # This is not a valid item so reset item count
else else
i=`echo $i | tr -d :`
#echo "name:$i" #echo "name:$i"
if [ "$packages_new" == "" ]; then if [ "$packages_new" == "" ]; then
packages_new=$packages_new"{\"name\":\"$i\"," # If it is the first item then we do not want a seperator packages_new=$packages_new"{\"name\":\"$i\"," # If it is the first item then we do not want a seperator
...@@ -155,6 +156,7 @@ if [ "$pkg_running" == "" ]; then ...@@ -155,6 +156,7 @@ if [ "$pkg_running" == "" ]; then
if [ "`echo $i | grep ':'`" == "" ]; then if [ "`echo $i | grep ':'`" == "" ]; then
itemcount=0 # This is not a valid item so reset item count itemcount=0 # This is not a valid item so reset item count
else else
i=`echo $i | tr -d :`
if [ "$packages_upgraded" == "" ]; then if [ "$packages_upgraded" == "" ]; then
packages_upgraded=$packages_upgraded"{\"name\":\"$i\"," # If it is the first item then we do not want a seperator packages_upgraded=$packages_upgraded"{\"name\":\"$i\"," # If it is the first item then we do not want a seperator
else else
......
#!/bin/sh
pkg upgrade -y > /tmp/pkg_upgrade.progress
echo '***DONE***' >> /tmp/pkg_upgrade.progress
rm /tmp/pkg_upgrade.progress
<?php <?php
/* $Id$ */ /* $Id$ */
/* /*
system_firmware.php Copyright (C) 2014 Deciso B.V.
Copyright (C) 2008 Scott Ullrich <sullrich@gmail.com> Copyright (C) 2008 Scott Ullrich <sullrich@gmail.com>
All rights reserved.
originally part of m0n0wall (http://m0n0.ch/wall)
Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>. Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
All rights reserved. All rights reserved.
...@@ -30,22 +27,67 @@ ...@@ -30,22 +27,67 @@
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. POSSIBILITY OF SUCH DAMAGE.
*/ */
/*
pfSense_MODULE: firmware
*/
##|+PRIV
##|*IDENT=page-system-firmware-autoupdate
##|*NAME=System: Firmware: Auto Update page
##|*DESCR=Allow access to the 'System: Firmware: Auto Update' page.
##|*MATCH=system_firmware_check.php*
##|-PRIV
$d_isfwfile = 1;
require("guiconfig.inc"); require("guiconfig.inc");
require_once("pfsense-utils.inc"); require_once("pfsense-utils.inc");
require_once("script/load_phalcon.php");
//$d_isfwfile = 1;
$file_pkg_status="/tmp/pkg_status.json";
$file_upgrade_progress="/tmp/pkg_upgrade.progress";
$pkg_status = array();
if($_POST['action'] == 'pkg_update') {
/* Setup Shell variables */
$shell_output = array();
$shell = new Core\Shell();
// execute shell command and collect (only valid) info into named array
$shell->exec("/usr/local/opnsense/scripts/pkg_updatecheck.sh",false,false,$shell_output);
}
if($_POST['action'] == 'pkg_upgrade') {
/* Setup Shell variables */
$shell_output = array();
$shell = new Core\Shell();
// execute shell command and collect (only valid) info into named array
$shell->exec("/usr/local/opnsense/scripts/pkg_upgrade.sh &",false,false,$shell_output);
}
if($_POST['action'] == 'update_status' ) {
if (file_exists($file_upgrade_progress)) {
$content = file_get_contents($file_upgrade_progress);
echo $content;
}
exit;
}
if (file_exists($file_pkg_status)) {
$curcfg = $config['system']['firmware']; $json = file_get_contents($file_pkg_status);
$pkg_status = json_decode($json,true);
}
if($_REQUEST['getupdatestatus']) {
if (file_exists($file_pkg_status)) {
if ($pkg_status["connection"]=="error") {
echo "<span class='text-danger'>".gettext("Connection Error")."</span><br/><span class='btn btn-primary' onclick='checkupdate()'>".gettext("Click to retry now")."</span>";
} elseif ($pkg_status["repository"]=="error") {
echo "<span class='text-danger'>".gettext("Repository Problem")."</span><br/><span class='btn btn-primary' onclick='checkupdate()'>".gettext("Click to retry now")."</span>";
} elseif ($pkg_status["updates"]=="0") {
echo "<span class='text-info'>".gettext("At")." <small>".$pkg_status["last_check"]."</small>".gettext(" no updates found.")."<br/><span class='btn btn-primary' onclick='checkupdate()'>Click to check now</span>";
} else {
echo "<span class='text-danger'>".gettext("A total of ").$pkg_status["updates"].gettext(" update(s) are available.")."</span><br/><span class='btn btn-primary' onclick='upgradenow()'>".gettext("Upgrade Now")."</span>";
}
} else {
echo "<span class='text-danger'>".gettext("Current status is unknown")."</span><br/><span class='btn btn-primary' onclick='checkupdate()'>".gettext("Click to check now")."</span>";
}
exit;
}
//$curcfg = $config['system']['firmware'];
$pgtitle=array(gettext("System"), gettext("Firmware"), gettext("Auto Update")); $pgtitle=array(gettext("System"), gettext("Firmware"), gettext("Auto Update"));
include("head.inc"); include("head.inc");
...@@ -60,10 +102,6 @@ include("head.inc"); ...@@ -60,10 +102,6 @@ include("head.inc");
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<?php
if ($input_errors) print_input_errors($input_errors);
if ($savemsg) print_info_box($savemsg);
?>
<section class="col-xs-12"> <section class="col-xs-12">
<? include('system_firmware_tabs.php'); ?> <? include('system_firmware_tabs.php'); ?>
...@@ -72,36 +110,84 @@ include("head.inc"); ...@@ -72,36 +110,84 @@ include("head.inc");
<form action="system_firmware_auto.php" method="post"> <form action="system_firmware_auto.php" method="post">
<div class="table-responsive"> <div class="table-responsive table-striped">
<table width="100%" border="0" cellpadding="6" cellspacing="0" summary="" class="table table-striped"> <table width="100%" border="0" cellpadding="6" cellspacing="0" summary="" class="table table-striped">
<tr> <tr>
<td align="center"> <th colspan="2">Current Firmware Status</th>
</tr>
<div class="progress"> <tr>
<div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 5%;"> <td align="left" colspan="2">
<span class="sr-only">5% Complete</span> <div id="updatestatus">
</div> </div>
<div class="progress" style="display:none">
<div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width:0%;">
<span class="text-info">0% Complete</span>
</div> </div>
<br />
<!-- command output box -->
<script type="text/javascript">
//<![CDATA[
window.onload=function(){
document.getElementById("output").wrap='hard';
}
//]]>
</script>
<textarea name="output" id="output" class="form-control"></textarea> </div>
<div>
<textarea name="output" id="output" class="form-control" rows="10" wrap="hard" readonly style="max-width:100%;display:none"></textarea>
</div>
</td>
</tr>
<tr>
</tr>
<tr>
<th>Available Upgrades</th>
</tr>
<tr>
<td>
<div id="upgrades">
<?php
echo '<table>';
echo '<tr>';
echo '<th>Package Name</th>';
echo '<th>Current Version</th>';
echo '<th>New Version</th>';
echo '</tr>';
foreach ($pkg_status["upgrade_packages"] as $upgrade_new) {
echo '<tr>';
echo '<td>';
echo '<span class="text-info"><b>'.$upgrade_new["name"].'</b></span><br/>';
echo '</td>';
echo '<td>';
echo '<span class="text-info"><b>'.$upgrade_new["current_version"].'</b></span><br/>';
echo '</td>';
echo '<td>';
echo '<span class="text-info"><b>'.$upgrade_new["new_version"].'</b></span><br/>';
echo '</td>';
echo '</tr>';
<div id="backupdiv" style="visibility:hidden"> }
<?php if ($g['hidebackupbeforeupgrade'] === false): ?> echo '</table>';
<br /><input type="checkbox" name="backupbeforeupgrade" id="backupbeforeupgrade" />&nbsp;<?=gettext("Perform full backup prior to upgrade");?> ?>
<?php endif; ?> </div>
</td>
</tr>
<tr>
<th>Required new Installs</th>
</tr>
<tr>
<td>
<div id="new">
<?php
echo '<table>';
echo '<tr>';
echo '<th>Package Name</th>';
echo '</tr>';
echo '<tr>';
foreach ($pkg_status["new_packages"] as $upgrade_new) {
echo '<td>';
echo '<span class="text-info"><b>'.$upgrade_new["name"].'</b></span><br/>';
echo '</td>';
echo '</tr>';
}
echo '</table>';
?>
</div> </div>
<input id='invokeupgrade' style='visibility:hidden' class="btn btn-primary" type="submit" value="<?=gettext("Invoke Auto Upgrade"); ?>" />
</td> </td>
</tr> </tr>
</table> </table>
...@@ -118,86 +204,77 @@ include("head.inc"); ...@@ -118,86 +204,77 @@ include("head.inc");
</div> </div>
</section> </section>
<p> <script type="text/javascript">
//<![CDATA[
function checkupdate() {
jQuery('#updatestatus').html('<span class="text-info">Updating.... (takes upto 30 seconds) </span>');
jQuery.ajax({
type: "POST",
url: '/system_firmware_check.php',
data:{action:'pkg_update'},
success:function(html) {
getstatus();
location.reload(); // Reload Page to show update status
<?php }
});
}
/* Define necessary variables. */ function upgradenow() {
if(isset($curcfg['alturl']['enable'])) jQuery('#updatestatus').html('<span class="text-info">Starting Upgrade.. Please do not leave this page while upgrade is in progress.</span>');
$updater_url = "{$config['system']['firmware']['alturl']['firmwareurl']}"; jQuery('#output').show();
else jQuery.ajax({
$updater_url = $g['update_url']; type: "POST",
$needs_system_upgrade = false; url: '/system_firmware_check.php',
$static_text .= gettext("Downloading new version information..."); data:{action:'pkg_upgrade'},
success:function(html) {
$nanosize = ""; setTimeout(function() { updatestatus(); }, 100);
if ($g['platform'] == "nanobsd") { }
if (file_exists("/etc/nano_use_vga.txt")) });
$nanosize = "-nanobsd-vga-";
else }
$nanosize = "-nanobsd-";
$nanosize .= strtolower(trim(file_get_contents("/etc/nanosize.txt")));
}
if(download_file_with_progress_bar("{$updater_url}/version{$nanosize}", "/tmp/{$g['product_name']}_version", 'read_body', 5, 5) === true) function updatestatus() {
$remote_version = trim(@file_get_contents("/tmp/{$g['product_name']}_version"));
$static_text .= gettext("done") . "\\n"; jQuery.ajax({
if (!$remote_version) { type: "POST",
$static_text .= gettext("Unable to check for updates.") . "\\n"; url: '/system_firmware_check.php',
if(isset($curcfg['alturl']['enable'])) data:{action:'update_status'},
$static_text .= gettext("Could not contact custom update server.") . "\\n"; success:function(data, textStatus, jqXHR) {
else jQuery('#output').prop('innerHTML',data);
$static_text .= sprintf(gettext('Could not contact %1$s update server %2$s%3$s'), $g['product_name'], $updater_url, "\\n"); document.getElementById("output").scrollTop = document.getElementById("output").scrollHeight ;
} else { if ( data.indexOf('done') < 0 ) {
$static_text .= gettext("Obtaining current version information..."); setTimeout(function() { updatestatus(); }, 500);
update_output_window($static_text);
$current_installed_buildtime = ''; /* XXX zap */
$current_installed_version = trim(file_get_contents("/usr/local/etc/version"));
$static_text .= "done\\n";
update_output_window($static_text);
if (pfs_version_compare($current_installed_buildtime, $current_installed_version, $remote_version) == -1) {
$needs_system_upgrade = true;
} else { } else {
$static_text .= "\\n" . gettext("You are on the latest version.") . "\\n"; jQuery('#updatestatus').html('<span class="text-info">Upgrade Done!</span>');
}
}
});
} }
}
update_output_window($static_text); function getstatus() {
if ($needs_system_upgrade == false) { scroll(0,0);
echo "</p>"; var url = "/system_firmware_check.php";
echo "</form>"; var pars = 'getupdatestatus=yes';
require("fend.inc"); jQuery.ajax(
echo "</body>"; url,
echo "</html>"; {
exit; type: 'get',
} data: pars,
complete: activitycallback
});
}
function activitycallback(transport) {
// .html() method process all script tags contained in responseText,
// to avoid this we set the innerHTML property
jQuery('#updatestatus').prop('innerHTML',transport.responseText);
}
echo "\n<script type=\"text/javascript\">\n"; window.onload = function(){
echo "//<![CDATA[\n"; getstatus();
echo "jQuery('#invokeupgrade').css('visibility','visible');\n"; }
echo "//]]>\n";
echo "</script>\n";
echo "\n<script type=\"text/javascript\">\n";
echo "//<![CDATA[\n";
echo "jQuery('#backupdiv').css('visibility','visible');\n";
echo "//]]>\n";
echo "</script>\n";
$txt = gettext("A new version is now available") . "\\n\\n";
$txt .= gettext("Current version") .": ". $current_installed_version . "\\n";
if ($g['platform'] == "nanobsd") {
$txt .= " " . gettext("NanoBSD Size") . " : " . trim(file_get_contents("/etc/nanosize.txt")) . "\\n";
}
$txt .= " " . gettext("Built On") .": ". $current_installed_buildtime . "\\n";
$txt .= " " . gettext("New version") .": ". htmlspecialchars($remote_version, ENT_QUOTES | ENT_HTML401). "\\n\\n";
$txt .= " " . gettext("Update source") .": ". $updater_url . "\\n";
update_output_window($txt);
?>
</p> //]]>
</script>
<?php include("foot.inc"); ?> <?php include("foot.inc"); ?>
...@@ -59,7 +59,7 @@ if($_REQUEST['getupdatestatus']) { ...@@ -59,7 +59,7 @@ if($_REQUEST['getupdatestatus']) {
} elseif ($pkg_status["updates"]=="0") { } elseif ($pkg_status["updates"]=="0") {
echo "<span class='text-info'>".gettext("At")." <small>".$pkg_status["last_check"]."</small>".gettext(" no updates found.")."<br/><span class='btn-link' onclick='checkupdate()'>Click to check now</span>"; echo "<span class='text-info'>".gettext("At")." <small>".$pkg_status["last_check"]."</small>".gettext(" no updates found.")."<br/><span class='btn-link' onclick='checkupdate()'>Click to check now</span>";
} else { } else {
echo "<span class='text-danger'>".gettext("A total of ").$pkg_status["updates"].gettext(" update(s) are available.")."</span><br/><a href='/system_firmware.php'>".gettext("Click to update")."</a>"; echo "<span class='text-danger'>".gettext("A total of ").$pkg_status["updates"].gettext(" update(s) are available.")."</span><br/><a href='/system_firmware_check.php'>".gettext("Click to update")."</a>";
} }
} else { } else {
echo "<span class='text-danger'>".gettext("Unknown")."</span><br/><span class='btn-link' onclick='checkupdate()'>".gettext("Click to check now")."</span>"; echo "<span class='text-danger'>".gettext("Unknown")."</span><br/><span class='btn-link' onclick='checkupdate()'>".gettext("Click to check now")."</span>";
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment