From 416ab8a37f1b07dc9f6c0fb3ff1a8ff2036510b5 Mon Sep 17 00:00:00 2001 From: Sebastian Schmelzer Date: Thu, 2 Sep 2010 17:50:49 +0200 Subject: change dir structure --- src/installer/slxos-export | 323 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 323 insertions(+) create mode 100755 src/installer/slxos-export (limited to 'src/installer/slxos-export') diff --git a/src/installer/slxos-export b/src/installer/slxos-export new file mode 100755 index 00000000..8c0733ab --- /dev/null +++ b/src/installer/slxos-export @@ -0,0 +1,323 @@ +#! /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; +use warnings; + +my $abstract = q[ +slxos-export + OpenSLX-script to generate an export from a vendor-OS. +]; + +use Encode; +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; +use OpenSLX::Utils; + +my %option; + +GetOptions( + 'help|?' => \$option{helpReq}, + 'man' => \$option{manReq}, + 'version' => \$option{versionReq}, + ) + or pod2usage(2); +pod2usage(-msg => $abstract, -verbose => 0, -exitval => 1) if $option{helpReq}; +if ($option{manReq}) { + # avoid dubious problem with perldoc in combination with UTF-8 that + # leads to strange dashes and single-quotes being used + $ENV{LC_ALL} = 'POSIX'; + pod2usage(-verbose => 2); +} +if ($option{versionReq}) { + system('slxversion'); + exit 1; +} + +openslxInit(); + +my $action = shift @ARGV || ''; + +if ($action =~ m[^list-ex]i) { + print _tr("List of exported vendor-OSes (exports):\n"); + foreach my $type (sort keys %supportedExportFileSystems) { + # list all image files, followed by the block devices using it: + my @files = map { + my $image = decode('utf8', $_); + $image =~ s[^.+/][]; + $image; + } + sort glob("$openslxConfig{'public-path'}/export/$type/*"); + my %imageFiles; + foreach my $file (@files) { + if ($file =~ m[^(.+)@(.+)$]) { + # it's a link referring to a block device using this image, + # we collect the name of the block device: + push @{$imageFiles{$1}}, $2; + } else { + # it's an image file, we setup an empty array of block devices: + $imageFiles{$file} = []; + } + } + print join( + '', + map { + my $devices = join(',', @{$imageFiles{$_}}); + my $name = "${_}::$type"; + if (length($devices)) { + "\t$name".substr(' ' x 30, length($name))."($devices)\n"; + } else { + "\t$name\n"; + } + } + grep { + # filter out RSYNC_TMP folders: + $_ !~ m[###]; + } + sort keys %imageFiles + ); + } +} elsif ($action =~ m[^list-in]i) { + my @vendorOSDirs + = grep { -d $_ } glob("$openslxConfig{'private-path'}/stage1/*"); + print _tr("List of installed vendor-OSes:\n"); + print join( + '', + map { + my $vendorOS = decode('utf8', $_); + $vendorOS =~ s[^.+/][]; + "\t$vendorOS\n"; + } + sort @vendorOSDirs + ); +} elsif ($action =~ m[^list-ty]i) { + print _tr("List of supported export types:\n\t"); + print join("\n\t", sort @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->initializeForNew($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) != 1) { + print STDERR _tr("You need to specify exactly one export-name!\n"); + pod2usage(2); + } + my $exportName = 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->initializeFromExisting($exportName); + $engine->purgeExport(); +} else { + vlog(0, _tr(unshiftHereDoc(<<' END-OF-HERE'), $0)); + You need to specify exactly one action: + export + list-exported + list-installed + list-types + remove + Try '%s --help' for more info. + END-OF-HERE +} + +=head1 NAME + +slxos-export - OpenSLX-script to generate an export from a vendor-OS. + +=head1 SYNOPSIS + +slxos-export [options] + +=head3 Options + + --help brief help message + --log-level= level of logging verbosity (0-3) + --man show full documentation + --version show version + +=head3 Actions + +=over 8 + +=item B<< export >> + +exports the vendor-OS with the given name using the given export type and +adds it to the config-DB, too. The export will be named as the vendor-OS, +but with an additional '-' appended to it (where will be replaced +by the chosen export-type). + +=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 from disk and config-DB + +=back + +=head1 DESCRIPTION + +B converts an installed vendor-OS into a form that can be accessed +via network by booting clients. + +The resulting form of such a conversion is called an I and those come +in different flavors: + +=over 8 + +=item B< Export Type 'nfs'> + +NFS (network file system) is a well established networking file system, which +is supported by LINUX since long. + +=item B< Export Type 'sqfs-nbd'> + +Squash-FS is a rather modern filesystem providing very good compression, +resulting in considerably reduced network traffic during boot (and execution). +However, in order to mount a squash-fs that resides on the server, the client +has to get access to it first. This can be established via a network block +device, which basically "transports" a block device over the network (from +server to client), making it possible to use more or less any file system over +the network. +So, this example translates to 'use a squashfs on a network block device'. + +=back + +When invoking slxos-export, you have to pass it a vendor-OS name and the export +type you want to use and it will do the conversion (which can take a while, so +please be patient). + +The resulting export will be stored under C. + +=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<--version> + +Prints the version and exits. + +=back + +=head1 EXAMPLES + +=over 8 + +=head3 Exporting a Vendor-OS via NFS + +=item B<< slxos-export export 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 + +=over 8 + +=item B<< slxos-export export ubuntu-6.10 sqfs-nbd >> + +Exports the installed vendor-OS ubuntu-6.10 via nbd, the resulting +Squash-FS will live in C. + +=back + +=head3 Removing an Export + +=over 8 + +=item B<< slxos-export remove ubuntu-6.10 nbd >> + +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 + +=head1 SEE ALSO + +slxsettings, slxos-setup, slxconfig, slxconfig-demuxer + +=head1 GENERAL OPENSLX OPTIONS + +Being a part of OpenSLX, this script supports several other options +which can be used to overrule the OpenSLX settings: + + --db-name= name of database + --db-spec= full DBI-specification of database + --db-type= type of database to connect to + --locale= locale to use for translations + --log-level= level of logging verbosity (0-3) + --logfile= file to write logging output to + --private-path= path to private data + --public-path= path to public (client-accesible) data + --temp-path= path to temporary data + +Please refer to the C-manpage for a more detailed description +of these options. + +=cut + -- cgit v1.2.3-55-g7522