summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-db/OpenSLX/ConfigDB.pm35
-rw-r--r--installer/OpenSLX/OSSetup/Distro/Base.pm25
-rw-r--r--installer/OpenSLX/OSSetup/Engine.pm7
3 files changed, 62 insertions, 5 deletions
diff --git a/config-db/OpenSLX/ConfigDB.pm b/config-db/OpenSLX/ConfigDB.pm
index 1298b2d8..94ad9faf 100644
--- a/config-db/OpenSLX/ConfigDB.pm
+++ b/config-db/OpenSLX/ConfigDB.pm
@@ -47,6 +47,7 @@ my @supportExports = qw(
################################################################################
use OpenSLX::Basics;
use OpenSLX::DBSchema;
+use OpenSLX::Utils;
sub _checkAndUpgradeDBSchemaIfNecessary
{
@@ -501,10 +502,16 @@ sub addSystem
my $valRows = _aref(shift);
foreach my $valRow (@$valRows) {
- if (!defined $valRow->{kernel} || !length($valRow->{kernel})) {
+ if (!$valRow->{kernel}) {
$valRow->{kernel} = 'vmlinuz';
+ warn(
+ _tr(
+ "setting kernel of system '%s' to 'vmlinuz'!",
+ $valRow->{name}
+ )
+ );
}
- if (!defined $valRow->{label} || !length($valRow->{label})) {
+ if (!$valRow->{label}) {
$valRow->{label} = $valRow->{name};
}
}
@@ -959,14 +966,32 @@ sub aggregatedSystemFileInfoFor
}
$info->{'vendor-os'} = $vendorOS;
+ # check if the specified kernel file really exists (follow links while
+ # checking) and if not, find the newest kernel file that is available.
my $kernelPath =
"$openslxConfig{'private-path'}/stage1/$vendorOS->{name}/boot";
- $info->{'kernel-file'} = "$kernelPath/$system->{kernel}";
+ my $kernelFile = "$kernelPath/$system->{kernel}";
+ while (-l $kernelFile) {
+ $kernelFile = followLink($kernelFile);
+ }
+ if (!-e $kernelFile) {
+ # pick best kernel file available
+ my $osSetupEngine = instantiateClass("OpenSLX::OSSetup::Engine");
+ $osSetupEngine->initialize($vendorOS->{name}, 'none');
+ $kernelFile = $osSetupEngine->pickKernelFile($kernelPath);
+ warn(
+ _tr(
+ "setting kernel of system '%s' to '%s'!",
+ $info->{name}, $kernelFile
+ )
+ );
+ }
+ $info->{'kernel-file'} = $kernelFile;
+ # auto-generate export_uri if none has been given
my $exportURI = $export->{'uri'} || '';
if ($exportURI !~ m[\w]) {
- # auto-generate export_uri if none has been given:
- my $type = $export->{'type'};
+ # instantiate OSExport engine and ask it for exportURI
my $osExportEngine = instantiateClass("OpenSLX::OSExport::Engine");
$osExportEngine->initializeFromExisting($export->{name});
$exportURI = $osExportEngine->generateExportURI($export, $vendorOS);
diff --git a/installer/OpenSLX/OSSetup/Distro/Base.pm b/installer/OpenSLX/OSSetup/Distro/Base.pm
index 09323b52..9b59a828 100644
--- a/installer/OpenSLX/OSSetup/Distro/Base.pm
+++ b/installer/OpenSLX/OSSetup/Distro/Base.pm
@@ -134,6 +134,31 @@ sub finishSession
{
}
+sub pickKernelFile
+{
+ my $self = shift;
+ my $kernelPath = shift;
+
+ my $newestKernelFile;
+ my $newestKernelFileSortKey = '';
+ foreach my $kernelFile (glob("$kernelPath/vmlinuz-*")) {
+ next unless $kernelFile =~ m{
+ vmlinuz-(\d+)\.(\d+)\.(\d+)(?:\.(\d+))?-(\d+(?:\.\d+)?)
+ }x;
+ my $sortKey
+ = sprintf("%02d.%02d.%02d.%02d-%2.1f", $1, $2, $3, $4||0, $5);
+ if ($newestKernelFileSortKey lt $sortKey) {
+ $newestKernelFile = $kernelFile;
+ $newestKernelFileSortKey = $sortKey;
+ }
+ }
+
+ if (!defined $newestKernelFile) {
+ die _tr("unable to pick a kernel-file from path '%s'!", $kernelPath);
+ }
+ return $newestKernelFile;
+}
+
1;
################################################################################
diff --git a/installer/OpenSLX/OSSetup/Engine.pm b/installer/OpenSLX/OSSetup/Engine.pm
index 5737814b..233ba33c 100644
--- a/installer/OpenSLX/OSSetup/Engine.pm
+++ b/installer/OpenSLX/OSSetup/Engine.pm
@@ -596,6 +596,13 @@ sub removeVendorOSFromConfigDB
return;
}
+sub pickKernelFile
+{
+ my $self = shift;
+
+ return $self->{distro}->pickKernelFile(@_);
+}
+
################################################################################
### implementation methods
################################################################################