Merge branch 'sysupgradekeepsettings' into develop

This commit is contained in:
Conrad Lara - KG6JEI 2014-11-12 21:29:05 -08:00
commit 4daf0e4f7e
4 changed files with 128 additions and 41 deletions

View File

@ -3,6 +3,8 @@
START=99
boot() {
[ -x /usr/local/bin/bbhn-postupgrade ] && /usr/local/bin/bbhn-postupgrade
# extract kamikaze generated vlan config
#CMLARA Not needed on BULLETM's maybe needed on other devices

View File

@ -0,0 +1,22 @@
/etc/config.ap/_setup
/etc/config.ap/_setup.dhcp
/etc/config.ap/_setup.ports
/etc/config.client/_setup
/etc/config.client/_setup.dhcp
/etc/config.client/_setup.ports
/etc/config.mesh/_setup
/etc/config.mesh/_setup.dhcp.dmz
/etc/config.mesh/_setup.dhcp.nat
/etc/config.mesh/_setup.ports.dmz
/etc/config.mesh/_setup.ports.nat
/etc/config.mesh/_setup.services.dmz
/etc/config.mesh/_setup.services.nat
/etc/config.mesh_ap/_setup
/etc/config.mesh_ap/_setup.dhcp
/etc/config.mesh_ap/_setup.ports
/etc/config.router/_setup
/etc/config.router/_setup.dhcp
/etc/config.router/_setup.ports
/etc/httpd.conf
/etc/local/services
/etc/local/uci/hsmmmesh

View File

@ -0,0 +1,73 @@
#!/usr/bin/perl -w -I/www/cgi-bin
use perlfunc;
$needsrun=nvram_get("nodeupgraded");
if ( ! $needsrun ){
print "Node not upgraded, exiting\n";
exit 0;
}
#Prep some variables
$node = nvram_get("node");
$tactical = nvram_get("tactical");
$mac2 = mac2ip(get_mac("wlan0"), 0);
$dtdmac = mac2ip(get_mac("eth0"), 0);
foreach $config ("ap","client","mesh","mesh_ap","router")
{
$cfg = ();
$defaultcfg = ();
open(TMPCONFFILE, ">/tmp/.${config}_setup") or die;
foreach $line (`cat /etc/config.$config/_setup`)
{
next if $line =~ /^\s*#/;
next if $line =~ /^\s*$/;
$line =~ /^(\w+)\s*=\s*(.*)$/;
$cfg{$1} = $2;
}
foreach $line (`cat /etc/config.$config/_setup.default`)
{
next if $line =~ /^\s*#/;
next if $line =~ /^\s*$/;
$line =~ s/<NODE>/$node/;
$line =~ s/<MAC2>/$mac2/;
$line =~ s/<DTDMAC>/$dtdmac/;
$line =~ /^(\w+)\s*=\s*(.*)$/;
$defaultcfg{$1} = $2;
}
foreach $variable( sort keys %defaultcfg )
{
if ( $cfg{$variable} )
{
print TMPCONFFILE "$variable = $cfg{$variable}\n";
}
else
{
print TMPCONFFILE "$variable = $defaultcfg{$variable}\n";
}
}
close (TMPCONFFILE);
system ("mv /tmp/.${config}_setup /etc/config.$config/_setup");
print "Updated mode: $config\n";
}
$LASTMODE=nvram_get('config');
#Commit the new combined config
system ("/usr/local/bin/node-setup -a $LASTMODE");
nvram_set("nodeupgraded","0");
print "Rebooting node";
system ("reboot");

View File

@ -174,8 +174,9 @@ if($parms{button_dl_fw} and $parms{dl_fw} ne "default")
}
}
# install fw -- Force overwrite using MTD device
# Needs a "not $overwrite_firmware" clause once we get sysupgrade working
# install fw
if($fw_install and -f "$tmpdir/firmware")
{
my $junk;
@ -185,56 +186,44 @@ if($fw_install and -f "$tmpdir/firmware")
print "<h2>The firmware is being updated.</h2>\n";
print "<h1>DO NOT REMOVE POWER UNTIL UPDATE IS FINISHED</h1>\n";
print "</center><br>\n";
print "Writing firmware<br><br>\n";
unless($debug)
{
#system "nvram unset config; nvram commit >/dev/null 2>&1";
nvram_set("config", "");
open(FILE, "/sbin/mtd write $tmpdir/firmware firmware 2>&1 |") or die;
while(read FILE, $junk, 7) { print "|" }
}
print "
<center><h2>The node is rebooting</h2>
if ( $parms{checkbox_keep_settings} )
{
nvram_set("nodeupgraded","1");
print "
<center><h2>Firmware will be written in the background.</h2>
<h3>If you are connected to the LAN of this node you may need to acquire a new<br>
DHCP lease and reset any name service caches you may be using.</h3>
<h3>Wait for the Power LED to start blinking, then stop blinking.<br>
When the DMZ LED turns off you can get your new DHCP lease and reconnect with<br>
<h3>The node will reboot twice while the configuration is applied<br>
Wait for the Status 4 LED to start blinking, then stop blinking twice.<br>
When the Status 4 LED is solid on you can get your new DHCP lease and reconnect with<br>
<a href='http://localnode.local.mesh:8080/'>http://localnode.local.mesh:8080/</a></h3>
</center></body></html>
";
open(FILE, "/sbin/sysupgrade -q $tmpdir/firmware 2>&1 |") or die;
}
else
{
print "Writing firmware<br><br>\n";
open(FILE, "/sbin/mtd write $tmpdir/firmware firmware 2>&1 |") or die;
while(read FILE, $junk, 7) { print "|" }
print "
<center><h2>The node is rebooting</h2>
<h3>If you are connected to the LAN of this node you may need to acquire a new<br>
DHCP lease and reset any name service caches you may be using.</h3>
<h3>Wait for the Status 4 LED to start blinking, then stop blinking.<br>
When the Status 4 LED is solid on you can get your new DHCP lease and reconnect with<br>
<a href='http://localnode.local.mesh:8080/'>http://localnode.local.mesh:8080/</a></h3>
</center></body></html>
";
system "/sbin/reboot" unless $debug;
system "/sbin/reboot" unless $debug;
}
}
exit;
}
# CMLARA: Prepwork for using sysupgrade --- it has some issues with the page not returning that need to be worked on
# install fw -- use sysupgrade
#if($fw_install and -f "$tmpdir/firmware" and not $overwrite_firmware )
#{
# my $junk;
# http_header();
# html_header("FIRMWARE UPDATE IN PROGRESS", 1);
# print "<body><center>\n";
# print "<h2>The firmware is being updated.</h2><br><br>\n";
# print "<h1>DO NOT REMOVE POWER UNTIL UPDATE IS FINISHED</h1><br><br>\n";
# print "<h3>Wait for the Power LED to start blinking, then stop blinking.<br>\n";
# print "When the DMZ LED turns off you can reconnect your browser to the mesh node.</h3>\n";
# print "</center><br>\n";
# print "Writing firmware<br><br>\n";
# unless($debug)
# {
# open(FILE, "/sbin/sysupgrade -q $tmpdir/firmware 2>&1 |") or die;
# while(read FILE, $junk, 7) { print "|" }
# print "<br><br>REBOOTING<br><br>\n";
# print "<a href='http://localnode:8080/cgi-bin/status'>Click here</a> when the blinking stops and the DMZ LED turns off</body></html>\n";
# system "/sbin/reboot";
# }
# exit;
#}
# install patch
if($patch_install and -f "$tmpdir/firmware")
@ -498,6 +487,7 @@ foreach(@fw_images)
print "</select>\n";
print "<input type=submit name=button_refresh_fw value=Refresh title='download the list of available firmware versions'>\n";
print "<td align=center><input type=submit name=button_dl_fw value=Download title='install the firmware'></td>\n";
print "<td align=right><input type=checkbox name=checkbox_keep_settings>Keep Settings</td>\n";
print "</tr>\n";
print "</table></td></tr>\n";