#! /usr/bin/perl # ----------------------------------------------------------------------------- # 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/ # ----------------------------------------------------------------------------- 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; if ($manReq) { $ENV{LANG} = 'en_EN'; # avoid dubious problem with perldoc in combination with UTF-8 that # leads to strange dashes and single-quotes being used pod2usage(-verbose => 2) } 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"; } grep { # filter out RSYNC_TMP folders: $_ !~ m[###]; } 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[^(add|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(); } elsif ($action =~ m[^remove]i) { if (scalar(@ARGV) != 2) { print STDERR _tr("You need to specify exactly one export-name and one export-type!\n"); pod2usage(2); } my $exportName = 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($exportName, $exportType); $engine->purgeExport(); } else { print STDERR _tr("You need to specify exactly one action: add list-exported list-installed list-types remove 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] =head3 Options --help brief help message --man show full documentation --verbose show more information during execution --version show version =head3 Actions =over 8 =item B<< add >> exports the vendor-OS with the given name using the given export type and adds it to the config-DB, too =item B<< list-exported >> list all exported vendor-OSes =item B<< list-installed >> list all installed vendor-OSes =item B<< list-types >> list all supported export types =item B<< remove >> removes the export with the given name and export type from disk and config-DB =back =head1 OPTIONS =over 4 =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 =over 8 =head3 Exporting a Vendor-OS via NFS =item B<< slxos-export add suse-10.2 nfs >> Exports the installed vendor-OS suse-10.2 via nfs, the resulting NFS-export will live in C. =back =head3 Exporting a Vendor-OS via NBD-Squash =over 8 =item B<< slxos-export add ubuntu-6.10 nbd-squash >> Exports the installed vendor-OS ubuntu-6.10 via nbd-squash, the resulting Squash-FS will live in C. =back =head3 Removing an Export =over 8 =item B<< slxos-export remove ubuntu-6.10 nbd-squash >> Wipes the squash-FS of the export named 'ubuntu-6.10' from disk (i.e. the file C will be deleted) and removes that export from the config-DB, too. =back =cut