summaryrefslogtreecommitdiffstats
path: root/boot-env/OpenSLX/BootEnvironment/PXE.pm
diff options
context:
space:
mode:
authorOliver Tappe2008-08-27 23:18:59 +0200
committerOliver Tappe2008-08-27 23:18:59 +0200
commit3a7e659fda90fe22bb636497548f2a7dee7261db (patch)
tree22fbde1b07436879c6ce5f6b37a99b88102e6bed /boot-env/OpenSLX/BootEnvironment/PXE.pm
parent* updated uClibc-busybox with a version that has a fixed udhcpc - please report (diff)
downloadcore-3a7e659fda90fe22bb636497548f2a7dee7261db.tar.gz
core-3a7e659fda90fe22bb636497548f2a7dee7261db.tar.xz
core-3a7e659fda90fe22bb636497548f2a7dee7261db.zip
* refactored more boot-environment-specific stuff out of slxconfig-demuxer into
the corresponding class (OpenSLX::BootEnvironment::PXE) - should not cause any functional changes yet git-svn-id: http://svn.openslx.org/svn/openslx/openslx/trunk@2110 95ad53e4-c205-0410-b2fa-d234c58c8868
Diffstat (limited to 'boot-env/OpenSLX/BootEnvironment/PXE.pm')
-rw-r--r--boot-env/OpenSLX/BootEnvironment/PXE.pm123
1 files changed, 99 insertions, 24 deletions
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;