summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2020-07-10 17:27:56 +0200
committerSimon Rettberg2020-07-30 13:31:34 +0200
commit04449f369f42469c707e134dc2dab66938607ddd (patch)
tree68ceb6de1a96f8327f91e6ea2c77be24dcd7b091
parent[minilinux] Lower update disable to 5 mins (was 10) (diff)
downloadslx-admin-04449f369f42469c707e134dc2dab66938607ddd.tar.gz
slx-admin-04449f369f42469c707e134dc2dab66938607ddd.tar.xz
slx-admin-04449f369f42469c707e134dc2dab66938607ddd.zip
[minilinux] (bootentry-hook) Add entry for "latest from branch"
The iPXE menu item of type "minilinux" will now show an option to automatically use the latest locally installed version for each branch.
-rw-r--r--modules-available/minilinux/inc/linuxbootentryhook.inc.php29
-rw-r--r--modules-available/minilinux/lang/de/module.json1
-rw-r--r--modules-available/minilinux/lang/de/permissions.json5
-rw-r--r--modules-available/minilinux/lang/en/module.json1
-rw-r--r--modules-available/minilinux/lang/en/permissions.json5
5 files changed, 32 insertions, 9 deletions
diff --git a/modules-available/minilinux/inc/linuxbootentryhook.inc.php b/modules-available/minilinux/inc/linuxbootentryhook.inc.php
index 324ffc7e..30ede469 100644
--- a/modules-available/minilinux/inc/linuxbootentryhook.inc.php
+++ b/modules-available/minilinux/inc/linuxbootentryhook.inc.php
@@ -37,6 +37,7 @@ class LinuxBootEntryHook extends BootEntryHook
/*
* Dictionary::translate('default_boot_entry');
* Dictionary::translate('not_installed_hint');
+ * Dictionary::translate('latest_of_branch');
*/
$array = [];
$array[] = new HookEntryGroup($this->name(), [
@@ -49,12 +50,19 @@ class LinuxBootEntryHook extends BootEntryHook
// Group by branch for detailed listing
foreach ($branches as $branch) {
if (isset($versions[$branch['branchid']])) {
- $group = [];
+ $group = [
+ new HookEntry($branch['branchid'],
+ $branch['branchid'] . ' '
+ . Dictionary::translateFileModule('minilinux', 'module',
+ 'latest_of_branch', true),
+ true),
+ ];
foreach ($versions[$branch['branchid']] as $version) {
$valid = $version['installed'] != 0;
$title = $version['versionid'] . ' ' . $version['title'];
if (!$valid) {
- $title .= ' ' . Dictionary::translateFileModule('minilinux', 'module', 'not_installed_hint');
+ $title .= ' ' . Dictionary::translateFileModule('minilinux', 'module',
+ 'not_installed_hint', true);
}
$group[] = new HookEntry($version['versionid'], $title, $valid);
}
@@ -65,7 +73,7 @@ class LinuxBootEntryHook extends BootEntryHook
}
/**
- * @param $id
+ * @param $localData
* @return BootEntry the actual boot entry instance for given entry, false if invalid id
*/
public function getBootEntryInternal($localData)
@@ -76,13 +84,21 @@ class LinuxBootEntryHook extends BootEntryHook
} else {
$effectiveId = $id;
}
- $res = Database::queryFirst('SELECT installed, data FROM minilinux_version WHERE versionid = :id', ['id' => $effectiveId]);
+ $res = Database::queryFirst('SELECT versionid, installed, data FROM minilinux_version WHERE versionid = :id',
+ ['id' => $effectiveId]);
+ if ($res === false) {
+ // Maybe this is a branchid, which means latest from according branch (installed only)
+ $res = Database::queryFirst('SELECT versionid, installed, data FROM minilinux_version WHERE branchid = :id
+ ORDER BY installed DESC, dateline DESC LIMIT 1', // Order by installed instead of WHERE for better errormsg
+ ['id' => $effectiveId]);
+ }
if ($res === false) {
return BootEntry::newCustomBootEntry(['script' => 'prompt Invalid minilinux boot entry id: ' . $id]);
}
if ($res['installed'] == 0) {
return BootEntry::newCustomBootEntry(['script' => 'prompt Selected version not currently installed on server: ' . $effectiveId]);
}
+ $effectiveId = $res['versionid']; // In case we selected from a branchid, so above message doesn't show versionid
$remoteData = json_decode($res['data'], true);
$bios = $efi = false;
if (!@is_array($remoteData['agnostic']) && !@is_array($remoteData['efi']) && !@is_array($remoteData['bios'])) {
@@ -157,6 +173,9 @@ class LinuxBootEntryHook extends BootEntryHook
if ($id === 'default')
return true; // Meta-version that links to whatever the default is set to
$res = Database::queryFirst('SELECT installed FROM minilinux_version WHERE versionid = :id', ['id' => $id]);
- return $res !== false && $res['installed'];
+ if ($res !== false && $res['installed'])
+ return true;
+ $res = Database::queryFirst('SELECT branchid FROM minilinux_branch WHERE branchid = :id', ['id' => $id]);
+ return $res !== false;
}
}
diff --git a/modules-available/minilinux/lang/de/module.json b/modules-available/minilinux/lang/de/module.json
index 133e428f..9cf5c1a1 100644
--- a/modules-available/minilinux/lang/de/module.json
+++ b/modules-available/minilinux/lang/de/module.json
@@ -8,6 +8,7 @@
"ipxe-debug": "Debug-Ausgaben statt Bootlogo",
"ipxe-insecure-cpu": "Alle Mitigations for CPU-Sicherheitsl\u00fccken deaktivieren",
"ipxe-kcl-extra": "Modifikation der Kernel-Command-Line",
+ "latest_of_branch": "(Neueste lokal vorhandene Version)",
"menu-sources": "Update-Quellen",
"menu-versions": "Verf\u00fcgbare Versionen",
"module_name": "Netboot Grundsystem",
diff --git a/modules-available/minilinux/lang/de/permissions.json b/modules-available/minilinux/lang/de/permissions.json
index 29012620..c7d7df54 100644
--- a/modules-available/minilinux/lang/de/permissions.json
+++ b/modules-available/minilinux/lang/de/permissions.json
@@ -1,4 +1,5 @@
{
- "view": "Zeige Komponenten des Minilinux. Wird nicht benötigt, wenn Nutzer eine der anderen Rechte hat.",
- "update": "Aktualisieren von Komponenten des Minilinux."
+ "delete": "Ein heruntergeladenes Linux l\u00f6schen.",
+ "update": "Aktualisieren von Komponenten des Minilinux.",
+ "view": "Zeige Komponenten des Minilinux. Wird nicht ben\u00f6tigt, wenn Nutzer eine der anderen Rechte hat."
} \ No newline at end of file
diff --git a/modules-available/minilinux/lang/en/module.json b/modules-available/minilinux/lang/en/module.json
index 4667ceda..b58c48e2 100644
--- a/modules-available/minilinux/lang/en/module.json
+++ b/modules-available/minilinux/lang/en/module.json
@@ -8,6 +8,7 @@
"ipxe-debug": "Print debug messages instead of showing splash screen",
"ipxe-insecure-cpu": "Disable all mitigations for CPU security flaws",
"ipxe-kcl-extra": "Modifications to the kernel command line",
+ "latest_of_branch": "(Latest locally available version)",
"menu-sources": "Sources for updates",
"menu-versions": "Available versions",
"module_name": "Net-boot OS",
diff --git a/modules-available/minilinux/lang/en/permissions.json b/modules-available/minilinux/lang/en/permissions.json
index b8389e62..124dcdb8 100644
--- a/modules-available/minilinux/lang/en/permissions.json
+++ b/modules-available/minilinux/lang/en/permissions.json
@@ -1,4 +1,5 @@
{
- "view": "Show list of minilinux components. Not needed if User has any of the other permissions.",
- "update": "Update minilinux components."
+ "delete": "Delete a downloaded Linux version.",
+ "update": "Update minilinux components.",
+ "view": "Show list of minilinux components. Not needed if User has any of the other permissions."
} \ No newline at end of file