summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--boot-env/OpenSLX/BootEnvironment/Base.pm5
-rw-r--r--boot-env/OpenSLX/MakeInitRamFS/Distro/Base.pm (renamed from initramfs/OpenSLX/MakeInitRamFS/Distro/Base.pm)2
-rw-r--r--boot-env/OpenSLX/MakeInitRamFS/Distro/Debian.pm (renamed from initramfs/OpenSLX/MakeInitRamFS/Distro/Debian.pm)0
-rw-r--r--boot-env/OpenSLX/MakeInitRamFS/Distro/Suse.pm (renamed from initramfs/OpenSLX/MakeInitRamFS/Distro/Suse.pm)0
-rw-r--r--boot-env/OpenSLX/MakeInitRamFS/Distro/Ubuntu.pm (renamed from initramfs/OpenSLX/MakeInitRamFS/Distro/Ubuntu.pm)0
-rw-r--r--boot-env/OpenSLX/MakeInitRamFS/Engine/Base.pm (renamed from initramfs/OpenSLX/MakeInitRamFS/Engine.pm)243
-rw-r--r--boot-env/OpenSLX/MakeInitRamFS/Engine/SlxBoot.pm249
-rw-r--r--lib/OpenSLX/LibScanner.pm (renamed from initramfs/OpenSLX/LibScanner.pm)0
9 files changed, 257 insertions, 244 deletions
diff --git a/Makefile b/Makefile
index ed210afa..b65dc377 100644
--- a/Makefile
+++ b/Makefile
@@ -160,8 +160,6 @@ supported."; \
| tar -xp -C $(SLX_BUILD_PATH)$(SLX_BASE_PATH)/lib; \
tar --exclude=.svn -cp -C config-db OpenSLX \
| tar -xp -C $(SLX_BUILD_PATH)$(SLX_BASE_PATH)/lib; \
- tar --exclude=.svn -cp -C initramfs OpenSLX \
- | tar -xp -C $(SLX_BUILD_PATH)$(SLX_BASE_PATH)/lib; \
tar --exclude=.svn -cp -C installer OpenSLX \
| tar -xp -C $(SLX_BUILD_PATH)$(SLX_BASE_PATH)/lib; \
tar --exclude=.svn -cp -C os-plugins OpenSLX \
diff --git a/boot-env/OpenSLX/BootEnvironment/Base.pm b/boot-env/OpenSLX/BootEnvironment/Base.pm
index 78732957..50969f26 100644
--- a/boot-env/OpenSLX/BootEnvironment/Base.pm
+++ b/boot-env/OpenSLX/BootEnvironment/Base.pm
@@ -24,7 +24,7 @@ use File::Path;
use OpenSLX::Basics;
use OpenSLX::ConfigDB;
-use OpenSLX::MakeInitRamFS::Engine;
+use OpenSLX::MakeInitRamFS::Engine::SlxBoot;
use OpenSLX::Utils;
our %initramfsMap;
@@ -154,7 +154,8 @@ sub _makeInitRamFS
$params->{'debug-level'} = $debugLevel;
}
- my $makeInitRamFSEngine = OpenSLX::MakeInitRamFS::Engine->new($params);
+ my $makeInitRamFSEngine
+ = OpenSLX::MakeInitRamFS::Engine::SlxBoot->new($params);
$makeInitRamFSEngine->execute($self->{'dry-run'});
# copy back kernel-params, as they might have been changed (by plugins)
diff --git a/initramfs/OpenSLX/MakeInitRamFS/Distro/Base.pm b/boot-env/OpenSLX/MakeInitRamFS/Distro/Base.pm
index 9a7e4966..9be218e8 100644
--- a/initramfs/OpenSLX/MakeInitRamFS/Distro/Base.pm
+++ b/boot-env/OpenSLX/MakeInitRamFS/Distro/Base.pm
@@ -8,7 +8,7 @@
#
# General information about OpenSLX can be found at http://openslx.org/
# -----------------------------------------------------------------------------
-# MakeInitRamFS::Base.pm
+# MakeInitRamFS::Distro::Base.pm
# - provides empty base of the distro-specific part of the OpenSLX
# MakeInitRamFS API.
# -----------------------------------------------------------------------------
diff --git a/initramfs/OpenSLX/MakeInitRamFS/Distro/Debian.pm b/boot-env/OpenSLX/MakeInitRamFS/Distro/Debian.pm
index 30ad4b0d..30ad4b0d 100644
--- a/initramfs/OpenSLX/MakeInitRamFS/Distro/Debian.pm
+++ b/boot-env/OpenSLX/MakeInitRamFS/Distro/Debian.pm
diff --git a/initramfs/OpenSLX/MakeInitRamFS/Distro/Suse.pm b/boot-env/OpenSLX/MakeInitRamFS/Distro/Suse.pm
index aad790fd..aad790fd 100644
--- a/initramfs/OpenSLX/MakeInitRamFS/Distro/Suse.pm
+++ b/boot-env/OpenSLX/MakeInitRamFS/Distro/Suse.pm
diff --git a/initramfs/OpenSLX/MakeInitRamFS/Distro/Ubuntu.pm b/boot-env/OpenSLX/MakeInitRamFS/Distro/Ubuntu.pm
index c95ae2d9..c95ae2d9 100644
--- a/initramfs/OpenSLX/MakeInitRamFS/Distro/Ubuntu.pm
+++ b/boot-env/OpenSLX/MakeInitRamFS/Distro/Ubuntu.pm
diff --git a/initramfs/OpenSLX/MakeInitRamFS/Engine.pm b/boot-env/OpenSLX/MakeInitRamFS/Engine/Base.pm
index 0defe111..f2834852 100644
--- a/initramfs/OpenSLX/MakeInitRamFS/Engine.pm
+++ b/boot-env/OpenSLX/MakeInitRamFS/Engine/Base.pm
@@ -1,4 +1,4 @@
-# Copyright (c) 2006, 2007 - OpenSLX GmbH
+# Copyright (c) 2006-2008 - OpenSLX GmbH
#
# This program is free software distributed under the GPL version 2.
# See http://openslx.org/COPYING
@@ -8,10 +8,10 @@
#
# General information about OpenSLX can be found at http://openslx.org/
# -----------------------------------------------------------------------------
-# MakeInitialRamFS::Engine.pm
-# - provides driver engine for MakeInitialRamFS API.
+# MakeInitialRamFS::Engine::Base.pm
+# - provides basic driver engine for MakeInitialRamFS API.
# -----------------------------------------------------------------------------
-package OpenSLX::MakeInitRamFS::Engine;
+package OpenSLX::MakeInitRamFS::Engine::Base;
use strict;
use warnings;
@@ -26,10 +26,6 @@ use OpenSLX::LibScanner;
use OpenSLX::OSPlugin::Roster;
use OpenSLX::Utils;
-# TODO: implement support for the following (either here or as plugin):
-# wlan
-# tpm
-
################################################################################
### interface methods
################################################################################
@@ -133,37 +129,6 @@ sub addKernelModules
################################################################################
### implementation methods
################################################################################
-sub _collectCMDs
-{
- my $self = shift;
-
- $self->{CMDs} = [];
-
- $self->_setupBuildPath();
-
- $self->_addRequiredFSMods();
-
- $self->_writeInitramfsSetup();
- $self->_writeSlxSystemConf();
-
- $self->_copyUclibcRootfs();
- $self->_copyHwinfo();
- $self->_copyDistroSpecificFiles();
- $self->_copyInitramfsFiles();
-
- $self->_copyPreAndPostinitFiles();
-
- $self->_calloutToPlugins();
-
- $self->{distro}->applyChanges($self);
-
- $self->_copyKernelModules();
-
- $self->_createInitRamFS();
-
- return;
-}
-
sub _executeCMDs
{
my $self = shift;
@@ -197,159 +162,6 @@ sub addCMD
return;
}
-sub _setupBuildPath
-{
- my $self = shift;
-
- my $buildPath = "$openslxConfig{'temp-path'}/slx-initramfs";
- $self->addCMD("rm -rf $buildPath");
-
- my @stdFolders = qw(
- bin
- dev
- etc
- etc/init-hooks
- lib
- mnt
- proc
- root
- sys
- tmp
- usr/share
- var/lib
- var/lib/nfs/state
- var/run
- );
- $self->addCMD(
- 'mkdir -p ' . join(' ', map { "$buildPath/$_"; } @stdFolders)
- );
- $self->addCMD("ln -sfn /bin $buildPath/sbin");
-
- $self->{'build-path'} = $buildPath;
-
- return;
-}
-
-sub _copyDistroSpecificFiles
-{
- my $self = shift;
-
- my $distroSpecsPath = "$openslxConfig{'base-path'}/share/distro-specs";
-
- my $distroName = $self->{'distro-name'};
- my $distroVer = $self->{'distro-ver'};
-
- # concatenate default- and distro-specific functions into one file
- my $functions = slurpFile("$distroSpecsPath/$distroName/functions-default");
- $functions .= "\n";
- $functions .= slurpFile(
- "$distroSpecsPath/$distroName/functions-$distroVer",
- { failIfMissing => 0 }
- );
- $self->addCMD( {
- file => "$self->{'build-path'}/etc/distro-functions",
- content => $functions,
- } );
-
- return 1;
-}
-
-sub _copyUclibcRootfs
-{
- my $self = shift;
-
- my $uclibcRootfs = "$openslxConfig{'base-path'}/share/uclib-rootfs";
-
- $self->addCMD("rsync -rlpt $uclibcRootfs/ $self->{'build-path'}");
-
- return 1;
-}
-
-sub _copyHwinfo
-{
- my $self = shift;
-
- my $baseDir = "$openslxConfig{'base-path'}/share/ramfstools/hwinfo";
-
- my $version = $self->{distro}->determineMatchingHwinfoVersion(
- $self->{'distro-ver'}
- );
-
- $self->addCMD("cp $baseDir/bin/hwinfo-$version $self->{'build-path'}/usr/bin/hwinfo");
- my $libHD = "libhd.so.$version";
- $self->addCMD("cp $baseDir/lib/$libHD $self->{'build-path'}/usr/lib");
- my $libName = $libHD;
- while($libName =~ s{\.\d+$}{}g) {
- $self->addCMD("ln -sf $libHD $self->{'build-path'}/usr/lib/$libName");
- }
-
- return 1;
-}
-
-sub _copyInitramfsFiles
-{
- my $self = shift;
-
- my $initramfsPath = "$openslxConfig{'base-path'}/share/initramfs";
-
- find(
- {
- wanted => sub {
- my $len = length($initramfsPath);
- my $file = $File::Find::name;
- my $relName = length($file) > $len ? substr($file, $len+1) : '';
- if (-d) {
- $self->addCMD("mkdir -p $self->{'build-path'}/$relName");
- } elsif (-l $file) {
- my $target = readlink $file;
- $self->addCMD(
- "ln -sf $target $self->{'build-path'}/$relName"
- );
- } elsif (qx{file $file} =~ m{ELF}) {
- $self->addCMD(
- "cp -p $file $self->{'build-path'}/$relName"
- );
- } else {
- my $text = slurpFile($file, { 'io-layer' => 'bytes' } );
-
- # replace macros
- # TODO: find out what these mean and maybe find a
- # different, better solution
- my %macro = (
- 'COMDIRINDXS' => '/tmp/scratch /var/lib/nobody',
- # keep serverip as it is (it is handled by init itself)
- 'serverip' => '@@@serverip@@@',
- );
- $text =~ s{\@\@\@([^\@]+)\@\@\@}{
- if (!exists $macro{$1}) {
- warn _tr(
- 'unknown macro @@@%s@@@ found in %s',
- $1, $File::Find::name
- );
- '';
- } else {
- $macro{$1};
- }
- }eogms;
-
- # force shebang with ash
- $text =~ s{\A#!\s*/bin/.+?$}{#!/bin/ash}ms;
-
- $self->addCMD( {
- file => "$self->{'build-path'}/$relName",
- content => $text,
- mode => (-x $file ? 0755 : undef),
- } );
- }
- },
- no_chdir => 1,
- },
- $initramfsPath
- );
-
- return;
-}
-
sub _findBinary
{
my $self = shift;
@@ -457,23 +269,6 @@ sub _copyKernelModules
return;
}
-sub _copyPreAndPostinitFiles
-{
- my $self = shift;
-
- foreach my $cfg (
- 'default/initramfs/preinit.local',
- "$self->{'system-name'}/initramfs/preinit.local",
- 'default/initramfs/postinit.local',
- "$self->{'system-name'}/initramfs/postinit.local"
- ) {
- my $cfgPath = "$openslxConfig{'private-path'}/config/$cfg";
- next if !-f $cfgPath;
- $self->addCMD("cp -p $cfgPath $self->{'build-path'}/bin/");
- }
- return;
-}
-
sub _platformSpecificFileFor
{
my $self = shift;
@@ -485,21 +280,6 @@ sub _platformSpecificFileFor
return $binary . '.i586';
}
-sub _addRequiredFSMods
-{
- my $self = shift;
-
- my $osExportEngine = instantiateClass("OpenSLX::OSExport::Engine");
- $osExportEngine->initializeFromExisting($self->{'export-name'});
- my $fsMods = $self->{attrs}->{ramfs_fsmods} || '';
- foreach my $fsMod ($osExportEngine->requiredFSMods()) {
- $fsMods .= " $fsMod" if $fsMods !~ m{$fsMod};
- }
- $self->{attrs}->{ramfs_fsmods} = $fsMods;
-
- return;
-}
-
sub _writeInitramfsSetup
{
my $self = shift;
@@ -592,18 +372,3 @@ sub _createInitRamFS
}
1;
-################################################################################
-
-=pod
-
-=head1 NAME
-
-OpenSLX::MakeInitRamFS::Engine
-
-=head1 SYNOPSIS
-
-=head1 DESCRIPTION
-
-...
-
-=cut
diff --git a/boot-env/OpenSLX/MakeInitRamFS/Engine/SlxBoot.pm b/boot-env/OpenSLX/MakeInitRamFS/Engine/SlxBoot.pm
new file mode 100644
index 00000000..a10384b8
--- /dev/null
+++ b/boot-env/OpenSLX/MakeInitRamFS/Engine/SlxBoot.pm
@@ -0,0 +1,249 @@
+# Copyright (c) 2006-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/
+# -----------------------------------------------------------------------------
+# MakeInitialRamFS::Engine::SlxBoot.pm
+# - provides driver engine for MakeInitialRamFS API, implementing the
+# standard slx boot behaviour (i.e. booting a system remotely).
+# -----------------------------------------------------------------------------
+package OpenSLX::MakeInitRamFS::Engine::SlxBoot;
+
+use strict;
+use warnings;
+
+use base qw(OpenSLX::MakeInitRamFS::Engine::Base);
+
+use File::Basename;
+use File::Find;
+use File::Path;
+use POSIX qw(strftime);
+
+use OpenSLX::Basics;
+use OpenSLX::Utils;
+
+################################################################################
+### implementation methods
+################################################################################
+sub _collectCMDs
+{
+ my $self = shift;
+
+ $self->{CMDs} = [];
+
+ $self->_setupBuildPath();
+
+ $self->_addRequiredFSMods();
+
+ $self->_writeInitramfsSetup();
+ $self->_writeSlxSystemConf();
+
+ $self->_copyUclibcRootfs();
+ $self->_copyHwinfo();
+ $self->_copyDistroSpecificFiles();
+ $self->_copyInitramfsFiles();
+
+ $self->_copyPreAndPostinitFiles();
+
+ $self->_calloutToPlugins();
+
+ $self->{distro}->applyChanges($self);
+
+ $self->_copyKernelModules();
+
+ $self->_createInitRamFS();
+
+ return;
+}
+
+sub _setupBuildPath
+{
+ my $self = shift;
+
+ my $buildPath = "$openslxConfig{'temp-path'}/slx-initramfs";
+ $self->addCMD("rm -rf $buildPath");
+
+ my @stdFolders = qw(
+ bin
+ dev
+ etc
+ etc/init-hooks
+ lib
+ mnt
+ proc
+ root
+ sys
+ tmp
+ usr/share
+ var/lib
+ var/lib/nfs/state
+ var/run
+ );
+ $self->addCMD(
+ 'mkdir -p ' . join(' ', map { "$buildPath/$_"; } @stdFolders)
+ );
+ $self->addCMD("ln -sfn /bin $buildPath/sbin");
+
+ $self->{'build-path'} = $buildPath;
+
+ return;
+}
+
+sub _copyDistroSpecificFiles
+{
+ my $self = shift;
+
+ my $distroSpecsPath = "$openslxConfig{'base-path'}/share/distro-specs";
+
+ my $distroName = $self->{'distro-name'};
+ my $distroVer = $self->{'distro-ver'};
+
+ # concatenate default- and distro-specific functions into one file
+ my $functions = slurpFile("$distroSpecsPath/$distroName/functions-default");
+ $functions .= "\n";
+ $functions .= slurpFile(
+ "$distroSpecsPath/$distroName/functions-$distroVer",
+ { failIfMissing => 0 }
+ );
+ $self->addCMD( {
+ file => "$self->{'build-path'}/etc/distro-functions",
+ content => $functions,
+ } );
+
+ return 1;
+}
+
+sub _copyUclibcRootfs
+{
+ my $self = shift;
+
+ my $uclibcRootfs = "$openslxConfig{'base-path'}/share/uclib-rootfs";
+
+ $self->addCMD("rsync -rlpt $uclibcRootfs/ $self->{'build-path'}");
+
+ return 1;
+}
+
+sub _copyHwinfo
+{
+ my $self = shift;
+
+ my $baseDir = "$openslxConfig{'base-path'}/share/ramfstools/hwinfo";
+
+ my $version = $self->{distro}->determineMatchingHwinfoVersion(
+ $self->{'distro-ver'}
+ );
+
+ $self->addCMD("cp $baseDir/bin/hwinfo-$version $self->{'build-path'}/usr/bin/hwinfo");
+ my $libHD = "libhd.so.$version";
+ $self->addCMD("cp $baseDir/lib/$libHD $self->{'build-path'}/usr/lib");
+ my $libName = $libHD;
+ while($libName =~ s{\.\d+$}{}g) {
+ $self->addCMD("ln -sf $libHD $self->{'build-path'}/usr/lib/$libName");
+ }
+
+ return 1;
+}
+
+sub _copyInitramfsFiles
+{
+ my $self = shift;
+
+ my $initramfsPath = "$openslxConfig{'base-path'}/share/initramfs";
+
+ find(
+ {
+ wanted => sub {
+ my $len = length($initramfsPath);
+ my $file = $File::Find::name;
+ my $relName = length($file) > $len ? substr($file, $len+1) : '';
+ if (-d) {
+ $self->addCMD("mkdir -p $self->{'build-path'}/$relName");
+ } elsif (-l $file) {
+ my $target = readlink $file;
+ $self->addCMD(
+ "ln -sf $target $self->{'build-path'}/$relName"
+ );
+ } elsif (qx{file $file} =~ m{ELF}) {
+ $self->addCMD(
+ "cp -p $file $self->{'build-path'}/$relName"
+ );
+ } else {
+ my $text = slurpFile($file, { 'io-layer' => 'bytes' } );
+
+ # replace macros
+ # TODO: find out what these mean and maybe find a
+ # different, better solution
+ my %macro = (
+ 'COMDIRINDXS' => '/tmp/scratch /var/lib/nobody',
+ # keep serverip as it is (it is handled by init itself)
+ 'serverip' => '@@@serverip@@@',
+ );
+ $text =~ s{\@\@\@([^\@]+)\@\@\@}{
+ if (!exists $macro{$1}) {
+ warn _tr(
+ 'unknown macro @@@%s@@@ found in %s',
+ $1, $File::Find::name
+ );
+ '';
+ } else {
+ $macro{$1};
+ }
+ }eogms;
+
+ # force shebang with ash
+ $text =~ s{\A#!\s*/bin/.+?$}{#!/bin/ash}ms;
+
+ $self->addCMD( {
+ file => "$self->{'build-path'}/$relName",
+ content => $text,
+ mode => (-x $file ? 0755 : undef),
+ } );
+ }
+ },
+ no_chdir => 1,
+ },
+ $initramfsPath
+ );
+
+ return;
+}
+
+sub _copyPreAndPostinitFiles
+{
+ my $self = shift;
+
+ foreach my $cfg (
+ 'default/initramfs/preinit.local',
+ "$self->{'system-name'}/initramfs/preinit.local",
+ 'default/initramfs/postinit.local',
+ "$self->{'system-name'}/initramfs/postinit.local"
+ ) {
+ my $cfgPath = "$openslxConfig{'private-path'}/config/$cfg";
+ next if !-f $cfgPath;
+ $self->addCMD("cp -p $cfgPath $self->{'build-path'}/bin/");
+ }
+ return;
+}
+
+sub _addRequiredFSMods
+{
+ my $self = shift;
+
+ my $osExportEngine = instantiateClass("OpenSLX::OSExport::Engine");
+ $osExportEngine->initializeFromExisting($self->{'export-name'});
+ my $fsMods = $self->{attrs}->{ramfs_fsmods} || '';
+ foreach my $fsMod ($osExportEngine->requiredFSMods()) {
+ $fsMods .= " $fsMod" if $fsMods !~ m{$fsMod};
+ }
+ $self->{attrs}->{ramfs_fsmods} = $fsMods;
+
+ return;
+}
+
+1;
diff --git a/initramfs/OpenSLX/LibScanner.pm b/lib/OpenSLX/LibScanner.pm
index e1f42ba4..e1f42ba4 100644
--- a/initramfs/OpenSLX/LibScanner.pm
+++ b/lib/OpenSLX/LibScanner.pm