summaryrefslogtreecommitdiffstats
path: root/installer
diff options
context:
space:
mode:
authorOliver Tappe2007-07-25 18:59:50 +0200
committerOliver Tappe2007-07-25 18:59:50 +0200
commit742a41b032a9cf2681df8b70bff17dceac6f533c (patch)
tree3627504a9a8de4ec830b2fda87cf4a0cfd237579 /installer
parent* reduced use of Config::General to object-oriented mode only, as it is (diff)
downloadcore-742a41b032a9cf2681df8b70bff17dceac6f533c.tar.gz
core-742a41b032a9cf2681df8b70bff17dceac6f533c.tar.xz
core-742a41b032a9cf2681df8b70bff17dceac6f533c.zip
* fixed bug in check for required kernel modules for distros that do not
provide a vmlinuz-link (reported by Detlef Schulz) * filled void requirements check for NFS git-svn-id: http://svn.openslx.org/svn/openslx/trunk@1274 95ad53e4-c205-0410-b2fa-d234c58c8868
Diffstat (limited to 'installer')
-rw-r--r--installer/OpenSLX/OSExport/FileSystem/Base.pm58
-rw-r--r--installer/OpenSLX/OSExport/FileSystem/NFS.pm25
-rw-r--r--installer/OpenSLX/OSExport/FileSystem/SquashFS.pm50
3 files changed, 87 insertions, 46 deletions
diff --git a/installer/OpenSLX/OSExport/FileSystem/Base.pm b/installer/OpenSLX/OSExport/FileSystem/Base.pm
index 9ae263f9..009ec87d 100644
--- a/installer/OpenSLX/OSExport/FileSystem/Base.pm
+++ b/installer/OpenSLX/OSExport/FileSystem/Base.pm
@@ -18,7 +18,10 @@ use warnings;
our $VERSION = 1.01; # API-version . implementation-version
+use File::Basename;
+
use OpenSLX::Basics;
+use OpenSLX::Utils;
################################################################################
### interface methods
@@ -66,6 +69,61 @@ sub showExportConfigInfo
{
}
+################################################################################
+### implementation methods
+################################################################################
+sub _pickKernelVersion
+{
+ my $self = shift;
+ my $vendorOSPath = shift;
+
+ my $kernel = followLink("$vendorOSPath/boot/vmlinuz");
+ if (!-e $kernel) {
+ # 'vmlinuz'-link doesn't exist, so we have to pick the kernel manually
+ my $osSetupEngine = instantiateClass("OpenSLX::OSSetup::Engine");
+ $osSetupEngine->initialize($self->{engine}->{'vendor-os-name'}, 'none');
+ $kernel = $osSetupEngine->pickKernelFile("$vendorOSPath/boot");
+ }
+ my $kernelName = basename($kernel);
+ if ($kernelName !~ m[-(.+)$]) {
+ die _tr("unable to determine version of kernel '%s'!", $kernelName);
+ }
+ return $1;
+}
+
+sub _locateKernelModule
+{
+ my $self = shift;
+ my $vendorOSPath = shift;
+ my $moduleName = shift;
+ my $defaultPaths = shift;
+
+ vlog(1, _tr("locating kernel-module '%s'", $moduleName));
+ # check default paths first:
+ foreach my $defPath (@$defaultPaths) {
+ vlog(2, "trying $defPath/$moduleName");
+ my $target = followLink("$defPath/$moduleName", $vendorOSPath);
+ return $target unless !-e $target;
+ }
+ # use brute force to search for the newest incarnation of the module:
+ use File::Find;
+ my $location;
+ my $locationAge = 9999999;
+ vlog(2, "searching in $vendorOSPath/lib/modules");
+ find sub {
+ return unless $_ eq $moduleName;
+ if (-M _ < $locationAge) {
+ $locationAge = -M _;
+ $location = $File::Find::name;
+ vlog(2, "located at $location (age=$locationAge days)");
+ }
+ }, "$vendorOSPath/lib/modules";
+ if (defined $location) {
+ return followLink($location, $vendorOSPath);
+ }
+ return;
+}
+
1;
################################################################################
diff --git a/installer/OpenSLX/OSExport/FileSystem/NFS.pm b/installer/OpenSLX/OSExport/FileSystem/NFS.pm
index 878b956b..3233b10c 100644
--- a/installer/OpenSLX/OSExport/FileSystem/NFS.pm
+++ b/installer/OpenSLX/OSExport/FileSystem/NFS.pm
@@ -68,6 +68,31 @@ sub purgeExport
return 1;
}
+sub checkRequirements
+{
+ my $self = shift;
+ my $vendorOSPath = shift;
+
+ # determine most appropriate kernel version ...
+ my $kernelVer = $self->_pickKernelVersion($vendorOSPath);
+
+ # ... and check if that kernel-version provides all the required modules
+ my $nfsMod = $self->_locateKernelModule(
+ $vendorOSPath,
+ 'nfs.ko',
+ [
+ "$vendorOSPath/lib/modules/$kernelVer/kernel/fs/nfs",
+ "$vendorOSPath/lib/modules/$kernelVer/kernel/fs"
+ ]
+ );
+ if (!defined $nfsMod) {
+ warn _tr("unable to find nfs-module for kernel version '%s'.",
+ $kernelVer);
+ return;
+ }
+ return 1;
+}
+
sub generateExportURI
{
my $self = shift;
diff --git a/installer/OpenSLX/OSExport/FileSystem/SquashFS.pm b/installer/OpenSLX/OSExport/FileSystem/SquashFS.pm
index 82c4fdda..196a9206 100644
--- a/installer/OpenSLX/OSExport/FileSystem/SquashFS.pm
+++ b/installer/OpenSLX/OSExport/FileSystem/SquashFS.pm
@@ -97,15 +97,11 @@ sub checkRequirements
{
my $self = shift;
my $vendorOSPath = shift;
- my $kernel = shift || 'vmlinuz';
- my $info = shift;
- $kernel = basename(followLink("$vendorOSPath/boot/$kernel"));
- if ($kernel !~ m[-(.+)$]) {
- die _tr("unable to determine version of kernel '%s'!", $kernel);
- }
- my $kernelVer = $1;
- my @blockMods;
+ # determine most appropriate kernel version ...
+ my $kernelVer = $self->_pickKernelVersion($vendorOSPath);
+
+ # ... and check if that kernel-version provides all the required modules
my @blockModNames = $self->{'block-device'}->requiredBlockDeviceModules();
foreach my $blockModName (@blockModNames) {
my $blockMod =
@@ -118,7 +114,6 @@ sub checkRequirements
);
return;
}
- push @blockMods, $blockMod;
}
my $squashfsMod = $self->_locateKernelModule(
$vendorOSPath,
@@ -133,10 +128,6 @@ sub checkRequirements
$kernelVer);
return;
}
- push @blockMods, $squashfsMod;
- if (defined $info) {
- $info->{'kernel-mods'} = \@blockMods;
- }
return 1;
}
@@ -280,39 +271,6 @@ sub _mapRsyncFilter2Regex
);
}
-sub _locateKernelModule
-{
- my $self = shift;
- my $vendorOSPath = shift;
- my $moduleName = shift;
- my $defaultPaths = shift;
-
- vlog(1, _tr("locating kernel-module '%s'", $moduleName));
- # check default paths first:
- foreach my $defPath (@$defaultPaths) {
- vlog(2, "trying $defPath/$moduleName");
- my $target = followLink("$defPath/$moduleName", $vendorOSPath);
- return $target unless !-e $target;
- }
- # use brute force to search for the newest incarnation of the module:
- use File::Find;
- my $location;
- my $locationAge = 9999999;
- vlog(2, "searching in $vendorOSPath/lib/modules");
- find sub {
- return unless $_ eq $moduleName;
- if (-M _ < $locationAge) {
- $locationAge = -M _;
- $location = $File::Find::name;
- vlog(2, "located at $location (age=$locationAge days)");
- }
- }, "$vendorOSPath/lib/modules";
- if (defined $location) {
- return followLink($location, $vendorOSPath);
- }
- return;
-}
-
sub _addBlockDeviceTagToExport
{
my $self = shift;