summaryrefslogblamecommitdiffstats
path: root/src/installer/OpenSLX/OSExport/FileSystem/Base.pm
blob: 05f3c6a059fcaf4565471913726412d273724e3f (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11










                                                                               
                                                                   


                                                                               
           

             
                                                                  
 
                   
                              
 
                    
                   





                                                                                
                                                                                            



              





                                                                     











                     
             



                       


                          
 
                                          









                     



                   



                        




                                                                                














                                                                                



                       




























                                                                         

 










                                                                                  
# Copyright (c) 2006, 2007 - 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/
# -----------------------------------------------------------------------------
# Base.pm
#    - provides empty base of the OpenSLX OSExport::FileSystem API.
# -----------------------------------------------------------------------------
package OpenSLX::OSExport::FileSystem::Base;

use strict;
use warnings;

our $VERSION = 1.01;        # API-version . implementation-version

use File::Basename;
use Scalar::Util qw( weaken );

use OpenSLX::Basics;
use OpenSLX::Utils;

################################################################################
### interface methods
################################################################################
sub new
{
    confess "Creating OpenSLX::OSExport::FileSystem::Base-objects directly makes no sense!";
}

sub initialize
{
    my $self = shift;
    my $engine = shift;

    $self->{'engine'} = $engine;
    weaken($self->{'engine'});
        # avoid circular reference between file-system and its engine
}

sub exportVendorOS
{
}

sub purgeExport
{
}

sub checkRequirements
{
    return 1;
}

sub addExportToConfigDB
{
    my $self = shift;
    my $export = shift;
    my $openslxDB = shift;

    return $openslxDB->addExport($export);
}

sub generateExportURI
{
}

sub requiredFSMods
{
}

sub requiredFSTools
{
}

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;

################################################################################

=pod

=head1 NAME

OpenSLX::OSExport::FileSystem::Base - the base class for all OSExport::FileSystems

=cut