diff --git a/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt b/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt
index a3d2b347c..d066459a4 100644
--- a/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt
+++ b/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt
@@ -35,7 +35,7 @@
$('#update_status_container').hide();
$('#updatelist').show();
}
- $("#checkupdate_progress").addClass("fa fa-spinner fa-pulse");
+ $("#checkupdate_progress").addClass("fa-pulse");
}
function updateDismiss() {
@@ -58,7 +58,7 @@
// request status
ajaxGet('/api/core/firmware/status', {}, function(data,status){
- $("#checkupdate_progress").removeClass("fa fa-spinner fa-pulse");
+ $("#checkupdate_progress").removeClass("fa-pulse");
$('.updatestatus').html(data['status_msg']);
if (data['status'] == "ok") {
@@ -128,7 +128,7 @@
$('#updatetab_progress').addClass("fa fa-cog fa-spin");
if ($.upgrade_action == 'maj') {
$("#upgrade_maj").attr("style","");
- $("#upgrade_progress_maj").addClass("fa fa-spinner fa-pulse");
+ $('#updatetab_progress').addClass("fa fa-cog fa-spin");
}
ajaxCall('/api/core/firmware/upgrade', {upgrade:$.upgrade_action}, function() {
@@ -316,7 +316,6 @@
}
}
if (data['status'] == 'done') {
- $("#upgrade_progress_maj").removeClass("fa fa-spinner fa-pulse");
$('#updatetab_progress').removeClass("fa fa-cog fa-spin");
$('#major-upgrade').hide();
$('#upgrade_maj').prop('disabled', true);
@@ -801,8 +800,8 @@
-
-
+
+
{{ lang._('This software release has reached its designated end of life.') }}
{{ lang._('The next major release is:') }}
@@ -832,8 +831,8 @@
-
-
+
+
|
@@ -900,10 +899,10 @@
|
|
-
+
|
diff --git a/src/opnsense/scripts/firmware/register.php b/src/opnsense/scripts/firmware/register.php
index 3cc745ff4..5333a1d8b 100755
--- a/src/opnsense/scripts/firmware/register.php
+++ b/src/opnsense/scripts/firmware/register.php
@@ -80,10 +80,21 @@ function plugins_set($config, $plugins)
Config::getInstance()->save();
}
-function plugins_found($name)
+function plugins_found($name, $found = [])
{
$bare = preg_replace('/^os-|-devel$/', '', $name);
- return file_exists('/usr/local/opnsense/version/' . $bare);
+
+ if (file_exists('/usr/local/opnsense/version/' . $bare)) {
+ if (!isset($found[$bare])) {
+ /* backwards compat with non-JSON, remove in 21.7 */
+ return true;
+ }
+ if ($found[$bare] == $name) {
+ return true;
+ }
+ }
+
+ return false;
}
function plugins_remove_sibling($name, $plugins)
@@ -120,27 +131,40 @@ switch ($action) {
$plugins = plugins_remove_sibling($name, $plugins);
break;
case 'resync':
- $unknown = [];
+ $found = [];
foreach (glob('/usr/local/opnsense/version/*') as $name) {
- $name = basename($name);
- if (strpos($name, 'base') === 0) {
+ $filename = basename($name);
+ if (strpos($filename, 'base') === 0) {
continue;
}
- if (strpos($name, 'kernel') === 0) {
+ if (strpos($filename, 'kernel') === 0) {
continue;
}
- if (strpos($name, 'core') === 0) {
+ if (strpos($filename, 'core') === 0) {
continue;
}
- /* XXX when we have JSON data we can read the package name and pick it up */
- $unknown[] = "os-{$name}";
+
+ $ret = json_decode(@file_get_contents($name), true);
+ if ($ret == null || !isset($ret['product_id'])) {
+ /* ignore files without valid metadata */
+ continue;
+ }
+
+ $found[$filename] = $ret['product_id'];
}
foreach (array_keys($plugins) as $name) {
- if (!plugins_found($name)) {
- echo "Unregistering plugin: $name" . PHP_EOL;
+ if (!plugins_found($name, $found)) {
+ echo "Unregistering missing plugin: $name" . PHP_EOL;
unset($plugins[$name]);
}
}
+ foreach ($found as $name) {
+ if (!isset($plugins[$name])) {
+ echo "Registering misconfigured plugin: $name" . PHP_EOL;
+ $plugins[$name] = 'yep';
+ }
+ $plugins = plugins_remove_sibling($name, $plugins);
+ }
break;
default:
exit();