summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2018-09-26 14:49:57 +0200
committerSimon Rettberg2018-09-26 14:49:57 +0200
commit61bd56dad51354efe37bf0aec80745dd1c09bd4b (patch)
tree538f4d0d4cc5c3d6159112d9fa7ea2c0ef6814ad
parent[serversetup-bwlp] Fix access to editing IP address (diff)
downloadslx-admin-61bd56dad51354efe37bf0aec80745dd1c09bd4b.tar.gz
slx-admin-61bd56dad51354efe37bf0aec80745dd1c09bd4b.tar.xz
slx-admin-61bd56dad51354efe37bf0aec80745dd1c09bd4b.zip
[serversetup-bwlp] Detect wether we run our modified iPXE
Try not to use special features if stock iPXE is running
-rw-r--r--modules-available/serversetup-bwlp/api.inc.php54
-rw-r--r--modules-available/serversetup-bwlp/inc/ipxemenu.inc.php6
-rw-r--r--modules-available/serversetup-bwlp/inc/menuentry.inc.php10
3 files changed, 48 insertions, 22 deletions
diff --git a/modules-available/serversetup-bwlp/api.inc.php b/modules-available/serversetup-bwlp/api.inc.php
index bc81d35d..4ed316a7 100644
--- a/modules-available/serversetup-bwlp/api.inc.php
+++ b/modules-available/serversetup-bwlp/api.inc.php
@@ -2,23 +2,40 @@
// Menu mode
+$serverIp = Property::getServerIp();
+
// Check if required arguments are given; if not, spit out according script and chain to self
$uuid = Request::any('uuid', false, 'string');
// Get platform - EFI or PCBIOS
$platform = Request::any('platform', false, 'string');
$manuf = Request::any('manuf', false, 'string');
$product = Request::any('product', false, 'string');
+$slxExtensions = Request::any('slx-extensions', false, 'int');
-if ($platform === false || ($uuid === false && $product === false)) {
+if ($platform === false || ($uuid === false && $product === false) || $slxExtensions === false) {
+ error_log(print_r($_SERVER, true));
+ sleep(1);
$url = parse_url($_SERVER['REQUEST_URI']);
- $urlbase = $url['path'];
+ if (isset($_SERVER['SCRIPT_URI']) && preg_match('#(\w+://[^/]+)#', $_SERVER['SCRIPT_URI'], $out)) {
+ $urlbase = $out[1];
+ } elseif (isset($_SERVER['REQUEST_SCHEME']) && isset($_SERVER['SERVER_NAME'])) {
+ $urlbase = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['SERVER_NAME'];
+ } elseif (isset($_SERVER['REQUEST_SCHEME']) && isset($_SERVER['SERVER_ADDR'])) {
+ $urlbase = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['SERVER_ADDR'];
+ } else {
+ $urlbase = 'http://' . $serverIp;
+ }
+ $urlbase .= $url['path'];
if (empty($url['query'])) {
$arr = [];
} else {
parse_str($url['query'], $arr);
- $arr = array_map('urlencode', $arr);
+ foreach ($arr as &$v) {
+ $v = urlencode($v);
+ }
+ unset($v);
}
- $arr['uuid'] = '${uuid:uristring}';
+ $arr['uuid'] = '${uuid}';
$arr['mac'] = '${mac}';
$arr['manuf'] = '${manufacturer:uristring}';
$arr['product'] = '${product:uristring}';
@@ -27,11 +44,16 @@ if ($platform === false || ($uuid === false && $product === false)) {
foreach ($arr as $k => $v) {
$query .= $k . '=' . $v . '&';
}
- $query = substr($query, 0, -1);
+ //$query = substr($query, 0, -1);
echo <<<HERE
#!ipxe
+set slxtest:string something ||
+iseq \${slxtest:md5} \${} && set slxext 0 || set slxext 1 ||
+clear slxtest ||
+set self {$urlbase}{$query}slx-extensions=\${slxext}
:retry
-chain -ar $urlbase$query ||
+echo Chaining to \${self}
+chain -ar \${self} ||
echo Chaining to self failed with \${errno}, retrying in a bit...
sleep 5
goto retry
@@ -46,8 +68,6 @@ $BOOT_METHODS = [
'SANBOOT' => 'sanboot --no-describe',
];
-$serverIp = Property::getServerIp();
-
$ip = $_SERVER['REMOTE_ADDR'];
if (substr($ip, 0, 7) === '::ffff:') {
$ip = substr($ip, 7);
@@ -109,7 +129,11 @@ if (isset($BOOT_METHODS[$localboot])) {
$BOOT_METHODS = array_reverse($BOOT_METHODS);
}
-// TODO: Feature check for our own iPXE extensions, stay compatible to stock iPXE
+if ($slxExtensions) {
+ $slxConsoleUpdate = '--update';
+} else {
+ $slxConsoleUpdate = '';
+}
$output = <<<HERE
#!ipxe
@@ -172,15 +196,15 @@ cpair --foreground 7 --background 9 0
:slx_menu
-console --left 55 --top 88 --right 63 --bottom 64 --quick --keep --picture bg-menu ||
+console --left 55 --top 88 --right 63 --bottom 64 $slxConsoleUpdate --keep --picture bg-menu ||
HERE;
-$output .= $menu->getMenuDefinition('target', $platform);
+$output .= $menu->getMenuDefinition('target', $platform, $slxExtensions);
$output .= <<<HERE
-console --left 60 --top 130 --right 67 --bottom 86 --quick ||
+console --left 60 --top 130 --right 67 --bottom 86 $slxConsoleUpdate ||
goto \${target} ||
echo Could not find menu entry in script.
prompt Press any key to continue.
@@ -190,8 +214,6 @@ HERE;
$output .= $menu->getItemsCode($platform);
-// TODO: Work out memtest stuff. Needs to be put on server (install/update script) -- PCBIOS only? Chain EFI -> BIOS?
-
/*
:i5
@@ -202,8 +224,8 @@ goto init
:i8
set x:int32 0
:again
-console --left 60 --top 130 --right 67 --bottom 96 --picture bg-load --keep --quick ||
-console --left 55 --top 88 --right 63 --bottom 64 --picture bg-menu --keep --quick ||
+console --left 60 --top 130 --right 67 --bottom 96 --picture bg-load --keep ||
+console --left 55 --top 88 --right 63 --bottom 64 --picture bg-menu --keep ||
inc x
iseq \${x} 20 || goto again
prompt DONE. Press dein Knie.
diff --git a/modules-available/serversetup-bwlp/inc/ipxemenu.inc.php b/modules-available/serversetup-bwlp/inc/ipxemenu.inc.php
index 56041c20..6429a2a7 100644
--- a/modules-available/serversetup-bwlp/inc/ipxemenu.inc.php
+++ b/modules-available/serversetup-bwlp/inc/ipxemenu.inc.php
@@ -36,11 +36,11 @@ class IPxeMenu
}
}
- public function getMenuDefinition($targetVar, $mode)
+ public function getMenuDefinition($targetVar, $mode, $slxExtensions)
{
- $str = "menu {$this->title}\n";
+ $str = "menu -- {$this->title}\n";
foreach ($this->items as $item) {
- $str .= $item->getMenuItemScript("m_{$this->menuid}", $this->defaultEntryId, $mode);
+ $str .= $item->getMenuItemScript("m_{$this->menuid}", $this->defaultEntryId, $mode, $slxExtensions);
}
if ($this->defaultEntryId === null) {
$defaultLabel = "mx_{$this->menuid}_poweroff";
diff --git a/modules-available/serversetup-bwlp/inc/menuentry.inc.php b/modules-available/serversetup-bwlp/inc/menuentry.inc.php
index 03b860e8..d243fd23 100644
--- a/modules-available/serversetup-bwlp/inc/menuentry.inc.php
+++ b/modules-available/serversetup-bwlp/inc/menuentry.inc.php
@@ -58,7 +58,7 @@ class MenuEntry
settype($this->menuentryid, 'int');
}
- public function getMenuItemScript($lblPrefix, $requestedDefaultId, $mode)
+ public function getMenuItemScript($lblPrefix, $requestedDefaultId, $mode, $slxExtensions)
{
if ($this->bootEntry !== null && !$this->bootEntry->supportsMode($mode))
return '';
@@ -66,7 +66,7 @@ class MenuEntry
if ($this->gap) {
$str .= '--gap ';
} else {
- if ($this->hidden) {
+ if ($this->hidden && $slxExtensions) {
if ($this->hotkey === false)
return ''; // Hidden entries without hotkey are illegal
$str .= '--hidden ';
@@ -79,7 +79,11 @@ class MenuEntry
}
$str .= "{$lblPrefix}_{$this->menuentryid} ";
}
- $str .= $this->title;
+ if (empty($this->title)) {
+ $str .= '${}';
+ } else {
+ $str .= $this->title;
+ }
return $str . " || prompt Could not create menu item for {$lblPrefix}_{$this->menuentryid}\n";
}