diff options
Diffstat (limited to 'boot-env/OpenSLX')
-rw-r--r-- | boot-env/OpenSLX/BootEnvironment/Base.pm | 21 | ||||
-rw-r--r-- | boot-env/OpenSLX/BootEnvironment/CD.pm | 102 | ||||
-rw-r--r-- | boot-env/OpenSLX/BootEnvironment/PXE.pm | 123 |
3 files changed, 218 insertions, 28 deletions
diff --git a/boot-env/OpenSLX/BootEnvironment/Base.pm b/boot-env/OpenSLX/BootEnvironment/Base.pm index 3fa22666..bd8bef55 100644 --- a/boot-env/OpenSLX/BootEnvironment/Base.pm +++ b/boot-env/OpenSLX/BootEnvironment/Base.pm @@ -35,15 +35,28 @@ sub initialize my $self = shift; my $params = shift; - $self->{'build-path'} = $params->{'build-path'}; - $self->{'dry-run'} = $params->{'dry-run'}; + $self->{'target-path'} = $params->{'target-path'}; + $self->{'dry-run'} = $params->{'dry-run'}; return 1; } -sub prepareBootloaderConfigFolder +sub writeBootloaderMenuFor { - my $self = shift; + my $self = shift; + my $client = shift; + my $externalClientID = shift; + my $systemInfos = shift; + + return; +} + +sub writeFilesRequiredForBooting +{ + my $self = shift; + my $info = shift; + my $tftpbuildPath = shift; + my $slxVersion = shift; return; } diff --git a/boot-env/OpenSLX/BootEnvironment/CD.pm b/boot-env/OpenSLX/BootEnvironment/CD.pm new file mode 100644 index 00000000..9328359b --- /dev/null +++ b/boot-env/OpenSLX/BootEnvironment/CD.pm @@ -0,0 +1,102 @@ +# 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::CD.pm +# - provides CD-specific implementation of the BootEnvironment API. +# ----------------------------------------------------------------------------- +package OpenSLX::BootEnvironment::CD; + +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::MakeInitRamFS::Engine; +use OpenSLX::Utils; + +sub writeFilesRequiredForBooting +{ + my $self = shift; + my $info = shift; + my $tftpbuildPath = shift; + my $slxVersion = shift; + +print "CD-boot not implemented yet\n"; + +return 1; + + my $kernelFile = $info->{'kernel-file'}; + my $kernelName = basename($kernelFile); + + my $vendorOSPath = "$tftpbuildPath/$info->{'vendor-os'}->{name}"; + mkpath $vendorOSPath unless -e $vendorOSPath || $self->{'dry-run'}; + + my $targetKernel = "$vendorOSPath/$kernelName"; + if (!-e $targetKernel) { + vlog(1, _tr('copying kernel %s to %s', $kernelFile, $targetKernel)); + slxsystem(qq[cp -p "$kernelFile" "$targetKernel"]) + unless $self->{'dry-run'}; + } + my $initramfs = "$vendorOSPath/$info->{'initramfs-name'}"; + $self->_makeInitRamFS($info, $initramfs, $slxVersion); + + return 1; +} + +sub _makeInitRamFS +{ + my $self = shift; + my $info = shift; + my $initramfs = shift; + my $slxVersion = shift; + + vlog(1, _tr('generating initialramfs %s', $initramfs)); + + my $vendorOS = $info->{'vendor-os'}; + my $kernelFile = basename(followLink($info->{'kernel-file'})); + + my $attrs = clone($info->{attrs} || {}); + + my $params = { + 'attrs' => $attrs, + 'export-name' => $info->{export}->{name}, + 'export-uri' => $info->{'export-uri'}, + 'initramfs' => $initramfs, + 'kernel-params' => [ split ' ', ($info->{kernel_params} || '') ], + 'kernel-version' => $kernelFile =~ m[-(.+)$] ? $1 : '', + 'plugins' => $info->{'active-plugins'}, + 'root-path' + => "$openslxConfig{'private-path'}/stage1/$vendorOS->{name}", + 'slx-version' => $slxVersion, + 'system-name' => $info->{name}, + }; + + # TODO: make debug-level an explicit attribute, it's used in many places! + my $kernelParams = $info->{kernel_params} || ''; + if ($kernelParams =~ m{debug(?:=(\d+))?}) { + my $debugLevel = defined $1 ? $1 : '1'; + $params->{'debug-level'} = $debugLevel; + } + + my $makeInitRamFSEngine = OpenSLX::MakeInitRamFS::Engine->new($params); + $makeInitRamFSEngine->execute($self->{'dry-run'}); + + # copy back kernel-params, as they might have been changed (by plugins) + $info->{kernel_params} = join ' ', $makeInitRamFSEngine->kernelParams(); + + return; +} + +1; diff --git a/boot-env/OpenSLX/BootEnvironment/PXE.pm b/boot-env/OpenSLX/BootEnvironment/PXE.pm index 931a2335..c362315f 100644 --- a/boot-env/OpenSLX/BootEnvironment/PXE.pm +++ b/boot-env/OpenSLX/BootEnvironment/PXE.pm @@ -18,34 +18,14 @@ use warnings; use base qw(OpenSLX::BootEnvironment::Base); +use Clone qw(clone); use File::Basename; use File::Path; use OpenSLX::Basics; +use OpenSLX::MakeInitRamFS::Engine; use OpenSLX::Utils; -sub prepareBootloaderConfigFolder -{ - my $self = shift; - - my $basePath = $openslxConfig{'base-path'}; - my $pxePath = $self->{'build-path'}; - my $pxeConfigPath = "$pxePath/pxelinux.cfg"; - - if (!$self->{'dry-run'}) { - rmtree($pxeConfigPath); - mkpath($pxeConfigPath); - - for my $file ('pxelinux.0', 'menu.c32', 'vesamenu.c32') { - if (!-e "$pxePath/$file") { - slxsystem(qq[cp -p "$basePath/share/tftpboot/$file" $pxePath/]); - } - } - } - - return 1; -} - sub writeBootloaderMenuFor { my $self = shift; @@ -53,7 +33,10 @@ sub writeBootloaderMenuFor my $externalClientID = shift; my $systemInfos = shift; - my $pxePath = $self->{'build-path'}; + $self->_prepareBootloaderConfigFolder() + unless $self->{preparedBootloaderConfigFolder}; + + my $pxePath = $self->{'target-path'}; my $pxeConfigPath = "$pxePath/pxelinux.cfg"; my $pxeConfig = $self->_getTemplate(); @@ -108,6 +91,31 @@ sub writeBootloaderMenuFor return 1; } +sub writeFilesRequiredForBooting +{ + my $self = shift; + my $info = shift; + my $buildPath = shift; + my $slxVersion = shift; + + my $kernelFile = $info->{'kernel-file'}; + my $kernelName = basename($kernelFile); + + my $vendorOSPath = "$self->{'target-path'}/$info->{'vendor-os'}->{name}"; + mkpath $vendorOSPath unless -e $vendorOSPath || $self->{'dry-run'}; + + my $targetKernel = "$vendorOSPath/$kernelName"; + if (!-e $targetKernel) { + vlog(1, _tr('copying kernel %s to %s', $kernelFile, $targetKernel)); + slxsystem(qq[cp -p "$kernelFile" "$targetKernel"]) + unless $self->{'dry-run'}; + } + my $initramfs = "$vendorOSPath/$info->{'initramfs-name'}"; + $self->_makeInitRamFS($info, $initramfs, $slxVersion); + + return 1; +} + sub _getTemplate { my $self = shift; @@ -182,7 +190,7 @@ sub _getTemplate ? "$basePath/share/themes/${pxeTheme}/pxe/$pic" : $pic; if (-e $pxeBackground && !$self->{'dry-run'}) { - slxsystem(qq[cp "$pxeBackground" $self->{'build-path'}/]); + slxsystem(qq[cp "$pxeBackground" $self->{'target-path'}/]); } } @@ -191,5 +199,72 @@ sub _getTemplate return $pxeTemplate; } +sub _prepareBootloaderConfigFolder +{ + my $self = shift; + + my $basePath = $openslxConfig{'base-path'}; + my $pxePath = $self->{'target-path'}; + my $pxeConfigPath = "$pxePath/pxelinux.cfg"; + + if (!$self->{'dry-run'}) { + rmtree($pxeConfigPath); + mkpath($pxeConfigPath); + + for my $file ('pxelinux.0', 'menu.c32', 'vesamenu.c32') { + if (!-e "$pxePath/$file") { + slxsystem(qq[cp -p "$basePath/share/tftpboot/$file" $pxePath/]); + } + } + } + + $self->{preparedBootloaderConfigFolder} = 1; + + return 1; +} + +sub _makeInitRamFS +{ + my $self = shift; + my $info = shift; + my $initramfs = shift; + my $slxVersion = shift; + + vlog(1, _tr('generating initialramfs %s', $initramfs)); + + my $vendorOS = $info->{'vendor-os'}; + my $kernelFile = basename(followLink($info->{'kernel-file'})); + + my $attrs = clone($info->{attrs} || {}); + + my $params = { + 'attrs' => $attrs, + 'export-name' => $info->{export}->{name}, + 'export-uri' => $info->{'export-uri'}, + 'initramfs' => $initramfs, + 'kernel-params' => [ split ' ', ($info->{kernel_params} || '') ], + 'kernel-version' => $kernelFile =~ m[-(.+)$] ? $1 : '', + 'plugins' => $info->{'active-plugins'}, + 'root-path' + => "$openslxConfig{'private-path'}/stage1/$vendorOS->{name}", + 'slx-version' => $slxVersion, + 'system-name' => $info->{name}, + }; + + # TODO: make debug-level an explicit attribute, it's used in many places! + my $kernelParams = $info->{kernel_params} || ''; + if ($kernelParams =~ m{debug(?:=(\d+))?}) { + my $debugLevel = defined $1 ? $1 : '1'; + $params->{'debug-level'} = $debugLevel; + } + + my $makeInitRamFSEngine = OpenSLX::MakeInitRamFS::Engine->new($params); + $makeInitRamFSEngine->execute($self->{'dry-run'}); + + # copy back kernel-params, as they might have been changed (by plugins) + $info->{kernel_params} = join ' ', $makeInitRamFSEngine->kernelParams(); + + return; +} 1; |