summaryrefslogtreecommitdiffstats
path: root/modules-available/minilinux
diff options
context:
space:
mode:
Diffstat (limited to 'modules-available/minilinux')
-rw-r--r--modules-available/minilinux/hooks/ipxe-bootentry.inc.php76
-rw-r--r--modules-available/minilinux/inc/minilinux.inc.php10
-rw-r--r--modules-available/minilinux/install.inc.php2
-rw-r--r--modules-available/minilinux/lang/de/module.json2
-rw-r--r--modules-available/minilinux/page.inc.php2
-rw-r--r--modules-available/minilinux/templates/branches.html24
6 files changed, 70 insertions, 46 deletions
diff --git a/modules-available/minilinux/hooks/ipxe-bootentry.inc.php b/modules-available/minilinux/hooks/ipxe-bootentry.inc.php
index 090a14da..944cdfa3 100644
--- a/modules-available/minilinux/hooks/ipxe-bootentry.inc.php
+++ b/modules-available/minilinux/hooks/ipxe-bootentry.inc.php
@@ -59,9 +59,9 @@ class LinuxBootEntryHook extends BootEntryHook
* @param $id
* @return BootEntry the actual boot entry instance for given entry, false if invalid id
*/
- public function getBootEntryInternal($data)
+ public function getBootEntryInternal($localData)
{
- $id = $data['id'];
+ $id = $localData['id'];
if ($id === 'default') { // Special case
$effectiveId = Property::get(MiniLinux::PROPERTY_DEFAULT_BOOT_EFFECTIVE);
} else {
@@ -72,51 +72,67 @@ class LinuxBootEntryHook extends BootEntryHook
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: ' . $id]);
+ return BootEntry::newCustomBootEntry(['script' => 'prompt Selected version not currently installed on server: ' . $effectiveId]);
}
+ $remoteData = json_decode($res['data'], true);
+ $bios = $efi = false;
+ if (!@is_array($remoteData['agnostic']) && !@is_array($remoteData['efi']) && !@is_array($remoteData['bios'])) {
+ $remoteData['agnostic'] = []; // We got nothing at all so fake this entry, resulting in a generic default entry
+ }
+ if (@is_array($remoteData['agnostic'])) {
+ $bios = $this->generateExecData($effectiveId, $remoteData['agnostic'], $localData);
+ $arch = BootEntry::AGNOSTIC;
+ } else {
+ if (@is_array($remoteData['efi'])) {
+ $efi = $this->generateExecData($effectiveId, $remoteData['efi'], $localData);
+ }
+ if (@is_array($remoteData['bios'])) {
+ $bios = $this->generateExecData($effectiveId, $remoteData['bios'], $localData);
+ }
+ if ($bios && $efi) {
+ $arch = BootEntry::BOTH;
+ } elseif ($bios) {
+ $arch = BootEntry::BIOS;
+ } else {
+ $arch = BootEntry::EFI;
+ }
+ }
+ return BootEntry::newStandardBootEntry($bios, $efi, $arch);
+ }
+
+ private function generateExecData($effectiveId, $remoteData, $localData)
+ {
$exec = new ExecData();
// Defaults
- $root = '/boot/' . $id . '/';
+ $root = '/boot/' . $effectiveId . '/';
$exec->executable = 'kernel';
$exec->initRd = ['initramfs-stage31'];
$exec->imageFree = true;
$exec->commandLine = 'slxbase=boot/%ID% slxsrv=${serverip} quiet splash ${ipappend1} ${ipappend2}';
// Overrides
- $remoteData = json_decode($res['data'], true);
- // TODO: agnostic hard coded, support EFI and PCBIOS
- if (isset($remoteData['agnostic']) && is_array($remoteData['agnostic'])) {
- foreach (['executable', 'commandLine', 'initRd', 'imageFree'] as $key) {
- if (isset($remoteData['agnostic'][$key])) {
- $exec->{$key} = $remoteData['agnostic'][$key];
- }
+ foreach (['executable', 'commandLine', 'initRd', 'imageFree'] as $key) {
+ if (isset($remoteData[$key])) {
+ $exec->{$key} = $remoteData[$key];
}
}
- unset($rd);
// KCL hacks
- if (isset($data['debug']) && $data['debug']) {
- if (!isset($data['kcl-extra'])) {
- $data['kcl-extra'] = '';
- }
- $data['kcl-extra'] = '-quiet -splash -loglevel loglevel=7 ' . $data['kcl-extra'];
+ if (isset($localData['debug']) && $localData['debug']) {
+ $exec->commandLine = IPxe::modifyCommandLine($exec->commandLine,
+ isset($remoteData['debugCommandLineModifier'])
+ ? $remoteData['debugCommandLineModifier']
+ : '-vga -quiet -splash -loglevel loglevel=7'
+ );
}
- if (isset($data['kcl-extra'])) {
- $items = preg_split('/\s+/', $data['kcl-extra'], -1, PREG_SPLIT_NO_EMPTY);
- // TODO: Make this a function, somewhere in serversetup-ipxe, this could be useful for other stuff
- foreach ($items as $item) {
- if ($item{0} === '-') {
- $item = preg_quote(substr($item, 1), '/');
- $exec->commandLine = preg_replace('/(^|\s)' . $item . '(=\S*)?($|\s)/', ' ', $exec->commandLine);
- } else {
- $exec->commandLine .= ' ' . $item;
- }
- }
+ if (isset($localData['kcl-extra'])) {
+ $exec->commandLine = IPxe::modifyCommandLine($exec->commandLine, $localData['kcl-extra']);
}
- $exec->commandLine = str_replace('%ID%', $id, $exec->commandLine);
+ $exec->commandLine = str_replace('%ID%', $effectiveId, $exec->commandLine);
$exec->executable = $root . $exec->executable;
foreach ($exec->initRd as &$rd) {
$rd = $root . $rd;
}
- return BootEntry::newStandardBootEntry($exec, false, 'agnostic');
+ unset($rd);
+ return $exec;
}
public function isValidId($id)
diff --git a/modules-available/minilinux/inc/minilinux.inc.php b/modules-available/minilinux/inc/minilinux.inc.php
index e940380c..54536096 100644
--- a/modules-available/minilinux/inc/minilinux.inc.php
+++ b/modules-available/minilinux/inc/minilinux.inc.php
@@ -62,7 +62,7 @@ class MiniLinux
EventLog::warning('Cannot download Linux version meta data for ' . $sourceid);
$lastupdate = 'lastupdate';
} else {
- if (isset($data['systems']) && is_array($data['systems'])) {
+ if (@is_array($data['systems'])) {
self::addBranches($sourceid, $data['systems']);
}
$lastupdate = 'UNIX_TIMESTAMP()';
@@ -70,6 +70,12 @@ class MiniLinux
Database::exec("UPDATE minilinux_source SET lastupdate = $lastupdate, taskid = NULL
WHERE sourceid = :sourceid AND taskid = :taskid",
['sourceid' => $sourceid, 'taskid' => $taskId]);
+ // Clean up -- delete orphaned versions that are not installed
+ $orphaned = Database::queryColumnArray('SELECT versionid FROM minilinux_version WHERE orphan > 4 AND installed = 0');
+ if (!empty($orphaned)) {
+ Database::exec('DELETE FROM minilinux_version WHERE versionid IN (:list)', ['list' => $orphaned]);
+ }
+ Database::exec('DELETE FROM minilinux_branch', [], true);
}
private static function addBranches($sourceid, $systems)
@@ -88,7 +94,7 @@ class MiniLinux
'title' => $title,
'description' => $description,
]);
- if (isset($system['versions']) && is_array($system['versions'])) {
+ if (@is_array($system['versions'])) {
self::addVersions($branchid, $system['versions']);
}
}
diff --git a/modules-available/minilinux/install.inc.php b/modules-available/minilinux/install.inc.php
index 5387542e..b859671a 100644
--- a/modules-available/minilinux/install.inc.php
+++ b/modules-available/minilinux/install.inc.php
@@ -34,7 +34,7 @@ $result[] = tableCreate('minilinux_version', "
");
$result[] = tableAddConstraint('minilinux_version', 'branchid', 'minilinux_branch', 'branchid',
- 'ON UPDATE CASCADE ON DELETE CASCADE');
+ 'ON UPDATE CASCADE ON DELETE RESTRICT');
$result[] = tableAddConstraint('minilinux_branch', 'sourceid', 'minilinux_source', 'sourceid',
'ON UPDATE CASCADE ON DELETE SET NULL');
diff --git a/modules-available/minilinux/lang/de/module.json b/modules-available/minilinux/lang/de/module.json
index da6ea4bb..687b4a71 100644
--- a/modules-available/minilinux/lang/de/module.json
+++ b/modules-available/minilinux/lang/de/module.json
@@ -7,7 +7,7 @@
"file-size-mismatch": "Dateigr\u00f6\u00dfe stimmt nicht",
"ipxe-debug": "Debug-Ausgaben statt Bootlogo",
"ipxe-kcl-extra": "Modifikation der Kernel-Command-Line",
- "module_name": "bwLehrpool MiniLinux",
+ "module_name": "Netboot Grundsystem",
"not_installed_hint": "(nicht installiert)",
"page_title": "Linuxvarianten f\u00fcr Netboot verwalten"
} \ No newline at end of file
diff --git a/modules-available/minilinux/page.inc.php b/modules-available/minilinux/page.inc.php
index 53632699..7c7e3d36 100644
--- a/modules-available/minilinux/page.inc.php
+++ b/modules-available/minilinux/page.inc.php
@@ -80,7 +80,7 @@ class Page_MiniLinux extends Page
$eff = Property::get(MiniLinux::PROPERTY_DEFAULT_BOOT_EFFECTIVE);
foreach ($versions as &$version) {
$version['dateline_s'] = Util::prettyTime($version['dateline']);
- $version['orphan'] = ($version['orphan'] > 5);
+ $version['orphan'] = ($version['orphan'] > 2);
$version['downloading'] = $version['taskid'] && Taskmanager::isRunning(Taskmanager::status($version['taskid']));
if ($version['installed'] && $version['versionid'] !== $def) {
$version['showsetdefault'] = true;
diff --git a/modules-available/minilinux/templates/branches.html b/modules-available/minilinux/templates/branches.html
index 64adda16..5f3c4e50 100644
--- a/modules-available/minilinux/templates/branches.html
+++ b/modules-available/minilinux/templates/branches.html
@@ -1,18 +1,20 @@
<h3>{{lang_branchesHeading}}</h3>
-{{#branches}}
-<div id="ibm-mainframe" class="panel panel-default">
- <div class="panel-heading">
- <div class="pull-right">
- {{sourceid}} {{branchid}}
+<div id="ibm-mainframe">
+ {{#branches}}
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <div class="pull-right">
+ {{sourceid}} {{branchid}}
+ </div>
+ <b>{{title}}</b>
</div>
- <b>{{title}}</b>
- </div>
- <div class="panel-body">
- {{description}}
+ <div class="panel-body">
+ {{description}}
+ </div>
+ {{{versionlist}}}
</div>
- {{{versionlist}}}
+ {{/branches}}
</div>
-{{/branches}}
<script>
document.addEventListener('DOMContentLoaded', function () {