diff options
author | Sebastian Schmelzer | 2010-09-02 17:50:49 +0200 |
---|---|---|
committer | Sebastian Schmelzer | 2010-09-02 17:50:49 +0200 |
commit | 416ab8a37f1b07dc9f6c0fb3ff1a8ff2036510b5 (patch) | |
tree | 4715f7d742fec50931017f38fe6ff0a89d4ceccc /boot-env/OpenSLX/BootEnvironment/Preboot.pm | |
parent | Fix for the problem reported on the list (sed filter forgotten for the (diff) | |
download | core-416ab8a37f1b07dc9f6c0fb3ff1a8ff2036510b5.tar.gz core-416ab8a37f1b07dc9f6c0fb3ff1a8ff2036510b5.tar.xz core-416ab8a37f1b07dc9f6c0fb3ff1a8ff2036510b5.zip |
change dir structure
Diffstat (limited to 'boot-env/OpenSLX/BootEnvironment/Preboot.pm')
-rw-r--r-- | boot-env/OpenSLX/BootEnvironment/Preboot.pm | 209 |
1 files changed, 0 insertions, 209 deletions
diff --git a/boot-env/OpenSLX/BootEnvironment/Preboot.pm b/boot-env/OpenSLX/BootEnvironment/Preboot.pm deleted file mode 100644 index b06de7d2..00000000 --- a/boot-env/OpenSLX/BootEnvironment/Preboot.pm +++ /dev/null @@ -1,209 +0,0 @@ -# Copyright (c) 2008 - OpenSLX GmbH -# -# This program is free software distributed under the GPL version 2. -# See http://openslx.org/COPYING -# -# If you have any feedback please consult http://openslx.org/feedback and -# send your suggestions, praise, or complaints to feedback@openslx.org -# -# General information about OpenSLX can be found at http://openslx.org/ -# ----------------------------------------------------------------------------- -# BootEnvironment::Preboot.pm -# - provides general preboot implementation of the BootEnvironment API. -# ----------------------------------------------------------------------------- -package OpenSLX::BootEnvironment::Preboot; - -use strict; -use warnings; - -use base qw(OpenSLX::BootEnvironment::Base); - -use Clone qw(clone); -use File::Basename; -use File::Path; - -use OpenSLX::Basics; -use OpenSLX::ConfigDB qw(:support); -use OpenSLX::Utils; - -sub initialize -{ - my $self = shift; - my $params = shift; - - return if !$self->SUPER::initialize($params); - - $self->{'original-path'} = "$openslxConfig{'public-path'}/preboot"; - $self->{'target-path'} = "$openslxConfig{'public-path'}/preboot.new"; - - $self->{'requires-default-client-config'} = 0; - # we do not need a default.tgz since there's always an explicit client - - if (!$self->{'dry-run'}) { - mkpath([$self->{'original-path'}]); - rmtree($self->{'target-path'}); - mkpath("$self->{'target-path'}/client-config"); - } - - return 1; -} - -sub writeBootloaderMenuFor -{ - my $self = shift; - my $client = shift; - my $externalClientID = shift; - my $systemInfos = shift || []; - - $self->_prepareBootloaderConfigFolder() - unless $self->{preparedBootloaderConfigFolder}; - - my $prebootSystemInfo - = clone($self->_pickSystemWithNewestKernel($systemInfos)); - - $self->_createImages($client, $prebootSystemInfo); - - my $externalClientName = externalConfigNameForClient($client); - my $bootloaderPath = "$self->{'target-path'}/bootloader"; - my $bootloaderConfigPath = "$bootloaderPath/$externalClientName"; - mkpath($bootloaderConfigPath) unless $self->{'dry-run'}; - my $menuFile = "$bootloaderConfigPath/bootmenu.dialog"; - - my $clientAppend = $client->{attrs}->{kernel_params_client} || ''; - vlog(1, _tr("writing bootmenu %s", $menuFile)); - - # set label for each system - foreach my $info (@$systemInfos) { - my $label = $info->{label} || ''; - if (!length($label) || $label eq $info->{name}) { - $label = $info->{name}; - } - $info->{label} = $label; - } - my $bootmenuEntries = ''; - my $entryState = 'on'; - my $counter = 1; - foreach my $info (sort { $a->{label} cmp $b->{label} } @$systemInfos) { - my $vendorOSName = $info->{'vendor-os'}->{name}; - my $kernelName = basename($info->{'kernel-file'}); - my $append = $info->{attrs}->{kernel_params} || ''; - $append .= " $clientAppend"; - $bootmenuEntries .= qq{ "$counter" "$info->{label}" }; - $entryState = 'off'; - - # create a file containing the boot-configuration for this system - my $systemDescr = unshiftHereDoc(<<" End-of-Here"); - label="$info->{label}" - kernel="$vendorOSName/$kernelName" - initramfs="$vendorOSName/$info->{'initramfs-name'}" - append="$append" - End-of-Here - my $systemFile = "$bootloaderConfigPath/$info->{name}"; - spitFile( - $systemFile, $systemDescr, { 'io-layer' => 'encoding(iso8859-1)' } - ) unless $self->{'dry-run'}; - slxsystem(qq{ln -sf $info->{name} $bootloaderConfigPath/$counter}); - $counter++; - } - - my $entryCount = @$systemInfos; - my $bootmenu = unshiftHereDoc(<<" End-of-Here"); - --no-cancel --menu "OpenSLX Boot Menu" 20 65 $entryCount $bootmenuEntries - End-of-Here - - if (!$self->{'dry-run'}) { - # default to iso encoding, let's see how uclibc copes with it ... - spitFile($menuFile, $bootmenu, { 'io-layer' => 'encoding(iso8859-1)' }); - - # copy the preboot script into the folder to be tared - my $prebootBasePath - = "$openslxConfig{'base-path'}/share/boot-env/preboot"; - slxsystem(qq{cp $prebootBasePath/preboot.sh $bootloaderConfigPath/}); - slxsystem(qq{cp -r $prebootBasePath/preboot-scripts $bootloaderConfigPath/}); - slxsystem(qq{chmod a+x $bootloaderConfigPath/preboot.sh}); - - # create a tar which can/will be downloaded by prebooting clients - my $tarCMD - = qq{cd $bootloaderConfigPath; tar -czf "${bootloaderConfigPath}.env" *}; - slxsystem($tarCMD); - rmtree($bootloaderConfigPath); - } - - return 1; -} - -sub _createImages -{ - my $self = shift; - my $client = shift; - my $info = shift; - - my %mediaMap = ( - 'cd' => 'CD', - ); - my $prebootMedia = $client->{attrs}->{preboot_media} || ''; - if (!$prebootMedia) { - warn _tr( - "no preboot-media defined for client %s, no images will be generated!", - $client->{name} - ); - return 0; - } - foreach my $mediumName (split m{, }, $prebootMedia) { - my $moduleName = $mediaMap{$mediumName} - or die _tr( - "'%s' is not one of the supported preboot-medias (cd)", - $mediumName - ); - - my $prebootMedium = instantiateClass( - "OpenSLX::BootEnvironment::Preboot::$moduleName" - ); - $prebootMedium->initialize($self); - $prebootMedium->createImage($client, $info); - } - - return 1; -} - -sub _prepareBootloaderConfigFolder -{ - my $self = shift; - - my $bootloaderPath = "$self->{'target-path'}/bootloader"; - if (!$self->{'dry-run'}) { - rmtree($bootloaderPath); - mkpath($bootloaderPath); - } - - $self->{preparedBootloaderConfigFolder} = 1; - - 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; -} - -1; |