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

Firmware upgrade changes

parent 831faaa8
......@@ -129,6 +129,7 @@ if [ "$pkg_running" == "" ]; then
if [ "`echo $i | grep ':'`" == "" ]; then
itemcount=0 # This is not a valid item so reset item count
else
i=`echo $i | tr -d :`
#echo "name:$i"
if [ "$packages_new" == "" ]; then
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
if [ "`echo $i | grep ':'`" == "" ]; then
itemcount=0 # This is not a valid item so reset item count
else
i=`echo $i | tr -d :`
if [ "$packages_upgraded" == "" ]; then
packages_upgraded=$packages_upgraded"{\"name\":\"$i\"," # If it is the first item then we do not want a seperator
else
......
#!/bin/sh
pkg upgrade -y > /tmp/pkg_upgrade.progress
echo '***DONE***' >> /tmp/pkg_upgrade.progress
rm /tmp/pkg_upgrade.progress
<?php
/* $Id$ */
/*
system_firmware.php
Copyright (C) 2014 Deciso B.V.
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>.
All rights reserved.
......@@ -30,22 +27,67 @@
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
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_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;
}
$curcfg = $config['system']['firmware'];
if (file_exists($file_pkg_status)) {
$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"));
include("head.inc");
......@@ -60,10 +102,6 @@ include("head.inc");
<div class="container-fluid">
<div class="row">
<?php
if ($input_errors) print_input_errors($input_errors);
if ($savemsg) print_info_box($savemsg);
?>
<section class="col-xs-12">
<? include('system_firmware_tabs.php'); ?>
......@@ -72,38 +110,86 @@ include("head.inc");
<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">
<tr>
<td align="center">
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 5%;">
<span class="sr-only">5% 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 id="backupdiv" style="visibility:hidden">
<?php if ($g['hidebackupbeforeupgrade'] === false): ?>
<br /><input type="checkbox" name="backupbeforeupgrade" id="backupbeforeupgrade" />&nbsp;<?=gettext("Perform full backup prior to upgrade");?>
<?php endif; ?>
<th colspan="2">Current Firmware Status</th>
</tr>
<tr>
<td align="left" colspan="2">
<div id="updatestatus">
</div>
<input id='invokeupgrade' style='visibility:hidden' class="btn btn-primary" type="submit" value="<?=gettext("Invoke Auto Upgrade"); ?>" />
<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>
<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>';
}
echo '</table>';
?>
</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>
</td>
</tr>
</table>
</div>
......@@ -118,86 +204,77 @@ include("head.inc");
</div>
</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
function upgradenow() {
jQuery('#updatestatus').html('<span class="text-info">Starting Upgrade.. Please do not leave this page while upgrade is in progress.</span>');
jQuery('#output').show();
jQuery.ajax({
type: "POST",
url: '/system_firmware_check.php',
data:{action:'pkg_upgrade'},
success:function(html) {
setTimeout(function() { updatestatus(); }, 100);
}
});
/* Define necessary variables. */
if(isset($curcfg['alturl']['enable']))
$updater_url = "{$config['system']['firmware']['alturl']['firmwareurl']}";
else
$updater_url = $g['update_url'];
$needs_system_upgrade = false;
$static_text .= gettext("Downloading new version information...");
$nanosize = "";
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)
$remote_version = trim(@file_get_contents("/tmp/{$g['product_name']}_version"));
$static_text .= gettext("done") . "\\n";
if (!$remote_version) {
$static_text .= gettext("Unable to check for updates.") . "\\n";
if(isset($curcfg['alturl']['enable']))
$static_text .= gettext("Could not contact custom update server.") . "\\n";
else
$static_text .= sprintf(gettext('Could not contact %1$s update server %2$s%3$s'), $g['product_name'], $updater_url, "\\n");
} else {
$static_text .= gettext("Obtaining current version information...");
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 {
$static_text .= "\\n" . gettext("You are on the latest version.") . "\\n";
function updatestatus() {
jQuery.ajax({
type: "POST",
url: '/system_firmware_check.php',
data:{action:'update_status'},
success:function(data, textStatus, jqXHR) {
jQuery('#output').prop('innerHTML',data);
document.getElementById("output").scrollTop = document.getElementById("output").scrollHeight ;
if ( data.indexOf('done') < 0 ) {
setTimeout(function() { updatestatus(); }, 500);
} else {
jQuery('#updatestatus').html('<span class="text-info">Upgrade Done!</span>');
}
}
});
}
}
update_output_window($static_text);
if ($needs_system_upgrade == false) {
echo "</p>";
echo "</form>";
require("fend.inc");
echo "</body>";
echo "</html>";
exit;
}
function getstatus() {
scroll(0,0);
var url = "/system_firmware_check.php";
var pars = 'getupdatestatus=yes';
jQuery.ajax(
url,
{
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";
echo "//<![CDATA[\n";
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);
?>
window.onload = function(){
getstatus();
}
</p>
//]]>
</script>
<?php include("foot.inc"); ?>
......@@ -59,7 +59,7 @@ if($_REQUEST['getupdatestatus']) {
} 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>";
} 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 {
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