# 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/ # ----------------------------------------------------------------------------- # NFS.pm # - provides NFS-specific overrides of the OpenSLX::OSExport::ExportType API. # ----------------------------------------------------------------------------- package OpenSLX::OSExport::ExportType::NFS; use vars qw(@ISA $VERSION); @ISA = ('OpenSLX::OSExport::ExportType::Base'); $VERSION = 1.01; # API-version . implementation-version use strict; use Carp; use File::Basename; use OpenSLX::Basics; use OpenSLX::Utils; use OpenSLX::OSExport::ExportType::Base 1.01; ################################################################################ ### interface methods ################################################################################ sub new { my $class = shift; my $self = { 'name' => 'NFS', }; return bless $self, $class; } sub exportVendorOS { my $self = shift; my $source = shift; my $target = shift; $self->copyViaRsync($source, $target); $self->addTargetToNfsExports($target); } sub purgeExport { my $self = shift; my $target = shift; if (system("rm -r $target")) { vlog 0, _tr("unable to remove export '%s'!", $target); return 0; } 1; } sub requiredFSMods { my $self = shift; return 'nfs'; } ################################################################################ ### implementation methods ################################################################################ sub copyViaRsync { my $self = shift; my $source = shift; my $target = shift; if (system("mkdir -p $target")) { die _tr("unable to create directory '%s', giving up! (%s)\n", $target, $!); } my $includeExcludeList = $self->determineIncludeExcludeList(); vlog 1, _tr("using include-exclude-filter:\n%s\n", $includeExcludeList); open(RSYNC, "| rsync -av --delete --exclude-from=- $source/ $target") or die _tr("unable to start rsync for source '%s', giving up! (%s)", $source, $!); print RSYNC $includeExcludeList; if (!close(RSYNC)) { die _tr("unable to export to target '%s', giving up! (%s)", $target, $!); } } sub addTargetToNfsExports { my $self = shift; my $target = shift; print (('#' x 80)."\n"); print _tr("Please make sure the following line is contained in /etc/exports\nin order to activate the NFS-export of this vendor-OS:\n\t%s\n", "$self->{engine}->{'export-path'}\t*(ro,root_squash,async,no_subtree_check)"); print (('#' x 80)."\n"); # TODO : add something a bit more clever here... # my $exports = slurpFile("/etc/exports"); } 1;