From 9b2866ba9bb1f43d615e884a71196f30048e6884 Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Wed, 3 Sep 2008 16:43:21 +0000 Subject: * instead of picking the first system encountered, the preboot cd is now based on the system with the newest kernel - this should minimize any compatibility problems git-svn-id: http://svn.openslx.org/svn/openslx/openslx/trunk@2199 95ad53e4-c205-0410-b2fa-d234c58c8868 --- boot-env/OpenSLX/BootEnvironment/PREBOOT_CD.pm | 28 +++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'boot-env') diff --git a/boot-env/OpenSLX/BootEnvironment/PREBOOT_CD.pm b/boot-env/OpenSLX/BootEnvironment/PREBOOT_CD.pm index 994e6dd0..50bf5ca5 100644 --- a/boot-env/OpenSLX/BootEnvironment/PREBOOT_CD.pm +++ b/boot-env/OpenSLX/BootEnvironment/PREBOOT_CD.pm @@ -62,7 +62,8 @@ sub writeBootloaderMenuFor my $externalClientID = shift; my $systemInfos = shift || []; - my $prebootSystemInfo = clone($systemInfos->[0]); + my $prebootSystemInfo + = clone($self->_pickSystemWithNewestKernel($systemInfos)); $self->_createImage($client, $prebootSystemInfo); # $self->_prepareBootloaderConfigFolder() @@ -123,6 +124,31 @@ sub writeBootloaderMenuFor return 1; } +sub _pickSystemWithNewestKernel +{ + my $self = shift; + my $systemInfos = shift; + + my $systemWithNewestKernel; + my $newestKernelFileSortKey = ''; + foreach my $system (@$systemInfos) { + next unless $system->{'kernel-file'} =~ m{ + (?:vmlinuz|x86)-(\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) { + $systemWithNewestKernel = $system; + $newestKernelFileSortKey = $sortKey; + } + } + + if (!defined $systemWithNewestKernel) { + die _tr("unable to pick a system to be used for preboot!"); + } + return $systemWithNewestKernel; +} + sub _createImage { my $self = shift; -- cgit v1.2.3-55-g7522