#! /usr/bin/perl # # slxos-export # # (c) 2006 - OpenSLX.com # # Oliver Tappe # use strict; my $abstract = q[ slxos-export This script exports an OpenSLX-stage1-system (a.k.a. vendor-OS) into an OpenSLX-stage2-system (a.k.a. export), which can be an NFS-export, an NBD-image containing a squash-fs. ]; use Getopt::Long qw(:config pass_through); use Pod::Usage; # add the folder this script lives in and the lib-folder to perl's # search path for modules: use FindBin; use lib "$FindBin::RealBin"; use lib "$FindBin::RealBin/../lib"; use lib "$FindBin::RealBin/../config-db"; # development path to config-db use OpenSLX::Basics; use OpenSLX::OSExport::Engine; my ( $helpReq, $manReq, $verbose, $versionReq, ); GetOptions( 'help|?' => \$helpReq, 'man' => \$manReq, 'verbose' => \$verbose, 'version' => \$versionReq, ) or pod2usage(2); pod2usage(-msg => $abstract, -verbose => 0, -exitval => 1) if $helpReq; pod2usage(-verbose => 2) if $manReq; if ($versionReq) { system('slxversion'); exit 1; } openslxInit(); my $action = shift @ARGV; if ($action =~ m[^list-ex]i) { print _tr("List of exported vendor-OSes:\n"); foreach my $type (sort keys %supportedExportTypes) { print join('', map { s[^.+/][]; "\t$type/$_\n"; } sort <$openslxConfig{'export-path'}/$type/*>); } } elsif ($action =~ m[^list-in]i) { print _tr("List of installed vendor-OSes:\n"); print join('', map { s[^.+/][]; "\t$_\n"; } sort <$openslxConfig{'stage1-path'}/*>); } elsif ($action =~ m[^list-ty]i) { print _tr("List of supported export types:\n\t"); print join("\n\t", sort keys %supportedExportTypes)."\n"; } elsif ($action =~ m[^export]i) { if (scalar(@ARGV) != 2) { print STDERR _tr("You need to specify exactly one vendor-os-name and one export-type!\n"); pod2usage(2); } my $vendorOSName = shift @ARGV; my $exportType = shift @ARGV; # we chdir into the script's folder such that all relative paths have # a known starting point: chdir($FindBin::RealBin) or die _tr("can't chdir to script-path <%> (%s)", $FindBin::RealBin, $!); # create OSExport-engine for given export type and start it: my $engine = OpenSLX::OSExport::Engine->new; $engine->initialize($vendorOSName, $exportType); if (!-e $engine->{'vendor-os-path'}) { die _tr("vendor-OS '%s' doesn't exist, giving up!\n", $engine->{'vendor-os-path'}); } $engine->exportVendorOS(); } else { print STDERR _tr("You need to specify exactly one action: export list-exported list-installed list-types Try '%s --help' for more info.\n", $0); } __END__ =head1 NAME slxos-export - OpenSLX-script to export a stage1-system (a.k.a. vendor-OS) into a stage2-system (a.k.a. export). The export itself can be done via several different types, e.g. via NFS or via a squashfs inside of a network block device. =head1 SYNOPSIS slxos-export [options] Options: --help brief help message --man show full documentation --verbose show more information during execution --version show version Actions: export exports the vendor-OS with the given name via the given export type list-exported list all exported vendor-OSes list-installed list all installed vendor-OSes list-types list all supported export types =head1 OPTIONS =over 8 =item B<--help> Prints a brief help message and exits. =item B<--man> Prints the manual page and exits. =item B<--verbose> Prints more information during execution of any action. =item B<--version> Prints the version and exits. =back =head1 EXAMPLES =head2 Exporting a Vendor-OS slxos-export export suse-10.2 nfs exports the installed vendor-OS suse-10.2 via nfs, the resulting NFS-export will live in '/srv/openslx/export/nfs/suse-10.2' =cut