summaryrefslogtreecommitdiffstats
path: root/installer
diff options
context:
space:
mode:
authorOliver Tappe2007-03-15 22:41:10 +0100
committerOliver Tappe2007-03-15 22:41:10 +0100
commit03db5fcadee81bd5ce66665f18b611e106783c27 (patch)
tree1071ff956228157c52fbd5b5087ca8928b37d0f9 /installer
parent* removed 'nbd' from supported export types as I have learned from Dirk yeste... (diff)
downloadcore-03db5fcadee81bd5ce66665f18b611e106783c27.tar.gz
core-03db5fcadee81bd5ce66665f18b611e106783c27.tar.xz
core-03db5fcadee81bd5ce66665f18b611e106783c27.zip
* largish overhaul, changed ConfigDB to be object-oriented (could be improved, though!)
* slxos-setup, slxos-export, slxconfig and slxconfig-demuxer can now be run one after the other in order to get a complete setup * still problems when trying to boot that system here, need to investigate... git-svn-id: http://svn.openslx.org/svn/openslx/trunk@774 95ad53e4-c205-0410-b2fa-d234c58c8868
Diffstat (limited to 'installer')
-rw-r--r--installer/OpenSLX/OSExport/Engine.pm46
-rw-r--r--installer/OpenSLX/OSExport/ExportType/NFS.pm4
-rw-r--r--installer/OpenSLX/OSSetup/Engine.pm69
-rwxr-xr-xinstaller/slxos-setup4
4 files changed, 72 insertions, 51 deletions
diff --git a/installer/OpenSLX/OSExport/Engine.pm b/installer/OpenSLX/OSExport/Engine.pm
index 033b22be..555baee2 100644
--- a/installer/OpenSLX/OSExport/Engine.pm
+++ b/installer/OpenSLX/OSExport/Engine.pm
@@ -82,7 +82,7 @@ sub initialize
{
my $self = shift;
my $vendorOSName = shift;
- my $exportType = shift;
+ my $exportType = lc(shift);
if (!exists $supportedExportTypes{lc($exportType)}) {
print _tr("Sorry, export type '%s' is unsupported.\n", $exportType);
@@ -92,6 +92,7 @@ sub initialize
}
$self->{'vendor-os-name'} = $vendorOSName;
+ $self->{'export-name'} = "$vendorOSName-$exportType";
$vendorOSName =~ m[^(.+?\-[^-]+)];
my $distroName = $1;
$self->{'distro-name'} = $distroName;
@@ -112,7 +113,6 @@ sub initialize
die _tr('Could not load module <%s> (Version <%s> required, but <%s> found)',
$distroModule, 1.01, $modVersion);
}
- $distroModule->import;
my $distro = $distroModule->new;
$distro->initialize($self);
$self->{distro} = $distro;
@@ -133,7 +133,6 @@ sub initialize
die _tr('Could not load module <%s> (Version <%s> required, but <%s> found)',
$exportTypeModule, 1.01, $modVersion);
}
- $exportTypeModule->import;
my $exporter = $exportTypeModule->new;
$exporter->initialize($self);
$self->{'exporter'} = $exporter;
@@ -165,9 +164,6 @@ sub addExportToConfigDB
{
my $self = shift;
-print "adding the export to the config-DB is not implemented yet, sorry!\n";
-return;
-
my $configDBModule = "OpenSLX::ConfigDB";
unless (eval "require $configDBModule") {
if ($! == 2) {
@@ -181,36 +177,36 @@ return;
die _tr('Could not load module <%s> (Version <%s> required, but <%s> found)',
$configDBModule, 1.01, $modVersion);
}
- $configDBModule->import(qw(:access :manipulation));
- my $openslxDB = connectConfigDB();
- # insert new export if it doesn't already exist in DB:
- my $exportName = $self->{'vendor-os-name'};
+ my $openslxDB = $configDBModule->new();
+ $openslxDB->connect();
- my $export = fetchExportsByFilter(
- $openslxDB, { 'name' => $exportName }, 'id'
- );
+ # insert new export if it doesn't already exist in DB:
+ my $exportName = $self->{'export-name'};
+ my $export
+ = $openslxDB->fetchExportByFilter({'name' => $exportName});
if (defined $export) {
- changeExport(
- $openslxDB,
- {
- 'name' => $exportName,
- 'path' => $self->{'vendor-os-name'},
- }
- );
- vlog 0, _tr("Export <%s> has been updated in DB.\n", $exportName);
+ vlog 0, _tr("No need to change export '%s' in OpenSLX-database.\n",
+ $exportName);
} else {
- my $id = addExport(
- $openslxDB,
+ my $vendorOSName = $self->{'vendor-os-name'};
+ my $vendorOS
+ = $openslxDB->fetchVendorOSByFilter({'name' => $vendorOSName});
+ if (!defined $vendorOS) {
+ die _tr("vendor-OS '%s' could not be found in OpenSLX-database, giving up!\n",
+ $vendorOSName);
+ }
+ my $id = $openslxDB->addExport(
{
+ 'vendor_os_id' => $vendorOS->{id},
'name' => $exportName,
- 'path' => $self->{'vendor-os-name'},
+ 'export_type' => $self->{'export-type'},
}
);
vlog 0, _tr("Export <%s> has been added to DB (ID=%s).\n",
$exportName, $id);
}
- disconnectConfigDB($openslxDB);
+ $openslxDB->disconnect();
}
}
diff --git a/installer/OpenSLX/OSExport/ExportType/NFS.pm b/installer/OpenSLX/OSExport/ExportType/NFS.pm
index ccaa32c5..ac85b9c8 100644
--- a/installer/OpenSLX/OSExport/ExportType/NFS.pm
+++ b/installer/OpenSLX/OSExport/ExportType/NFS.pm
@@ -63,7 +63,7 @@ sub exportViaRsync
$target, $!);
}
my $includeExcludeList = $self->determineIncludeExcludeList();
- vlog 1, "using include-exclude-filter:\n$includeExcludeList\n";
+ 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, $!);
@@ -97,7 +97,7 @@ sub addTargetToNfsExports
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,sync,no_subtree_check)");
+ "$self->{engine}->{'export-path'}\t*(ro,root_squash,async,no_subtree_check)");
print (('#' x 80)."\n");
# TODO : add something a bit more clever here...
diff --git a/installer/OpenSLX/OSSetup/Engine.pm b/installer/OpenSLX/OSSetup/Engine.pm
index b07334de..beef84a7 100644
--- a/installer/OpenSLX/OSSetup/Engine.pm
+++ b/installer/OpenSLX/OSSetup/Engine.pm
@@ -117,7 +117,6 @@ sub initialize
die _tr("Could not load module <%s> (Version <%s> required, but <%s> found)\n",
$distroModule, 1.01, $modVersion);
}
- $distroModule->import;
my $distro = $distroModule->new;
$distro->initialize($self);
$self->{distro} = $distro;
@@ -173,6 +172,9 @@ sub installVendorOS
}
$self->stage1C_cleanupBasicVendorOS();
$self->setupStage1D();
+ my $installInfoFile = "$self->{'vendor-os-path'}/.openslx-install-info";
+ system("touch $installInfoFile");
+ # just touch the file, in order to indicate a proper installation
vlog 0, _tr("Vendor-OS <%s> installed succesfully.\n",
$self->{'vendor-os-name'});
@@ -184,14 +186,18 @@ sub cloneVendorOS
my $self = shift;
my $source = shift;
+ $self->{'clone-source'} = $source;
my $lastCloneSource;
my $cloneInfoFile = "$self->{'vendor-os-path'}/.openslx-clone-info";
+ my $isReClone;
if (-e $self->{'vendor-os-path'}) {
- if (!-e $cloneInfoFile) {
- # oops, given vendor-os has not been cloned originally, we complain:
+ my $installInfoFile = "$self->{'vendor-os-path'}/.openslx-install-info";
+ if (-e $installInfoFile) {
+ # oops, given vendor-os has been installed, not cloned, we complain:
die _tr("The vendor-OS '%s' exists but it is no clone, refusing to clobber!\nPlease delete the folder manually, if that's really what you want...\n",
$self->{'vendor-os-path'});
- } else {
+ } elsif (-e $cloneInfoFile) {
+ # check if last and current source match:
my $cloneInfo = slurpFile($cloneInfoFile);
if ($cloneInfo =~ m[^source\s*=\s*(.+?)\s*$]ims) {
$lastCloneSource = $1;
@@ -200,11 +206,17 @@ sub cloneVendorOS
# protect user from confusing sources (still allowed, though):
my $yes = _tr('yes');
my $no = _tr('no');
- print _tr("Last time this vendor-OS was cloned, it has been cloned from '%s', now you specified a different source: '%s'\nWould you still like to proceed(%s/%s)? ",
+ print _tr("Last time this vendor-OS was cloned, it has been cloned from '%s', now you specified a different source: '%s'\nWould you still like to proceed (%s/%s)? ",
$lastCloneSource, $source, $yes, $no);
my $answer = <STDIN>;
exit 5 unless $answer =~ m[^\s*$yes]i;
}
+ $isReClone = 1;
+ } else {
+ # Neither the install-info nor the clone-info file exists. This
+ # probably means that the folder has been created by an older
+ # version of the tools. There's not much we can do, we simply
+ # trust our user and assume that he knows what he's doing.
}
}
@@ -218,8 +230,13 @@ sub cloneVendorOS
print CLONE_INFO "source=$source";
close CLONE_INFO;
}
- vlog 0, _tr("Vendor-OS <%s> cloned succesfully.\n",
- $self->{'vendor-os-name'});
+ if ($isReClone) {
+ vlog 0, _tr("Vendor-OS <%s> has been re-cloned succesfully.\n",
+ $self->{'vendor-os-name'});
+ } else {
+ vlog 0, _tr("Vendor-OS <%s> has been cloned succesfully.\n",
+ $self->{'vendor-os-name'});
+ }
$self->addInstalledVendorOSToConfigDB();
}
@@ -258,28 +275,37 @@ sub addInstalledVendorOSToConfigDB
die _tr("Could not load module <%s> (Version <%s> required, but <%s> found)\n",
$configDBModule, 1.01, $modVersion);
}
- $configDBModule->import(qw(:access :manipulation));
- my $openslxDB = connectConfigDB();
+ my $openslxDB = $configDBModule->new();
+ $openslxDB->connect();
# insert new vendor-os if it doesn't already exist in DB:
my $vendorOSName = $self->{'vendor-os-name'};
my $vendorOS
- = fetchVendorOSesByFilter($openslxDB,
- { 'name' => $vendorOSName },
- 'id');
+ = $openslxDB->fetchVendorOSByFilter({ 'name' => $vendorOSName });
if (defined $vendorOS) {
- vlog 0, _tr("Vendor-OS <%s> already exists in OpenSLX-database.\n",
- $vendorOSName);
+ if ($self->{'clone-source'} ne $vendorOS->{'clone_source'}) {
+ $openslxDB->changeVendorOS($vendorOS->{id}, {
+ 'clone_source' => $self->{'clone-source'},
+ });
+ vlog 0, _tr("Vendor-OS '%s' has been updated in OpenSLX-database.\n",
+ $vendorOSName);
+ } else {
+ vlog 0, _tr("No need to change vendor-OS '%s' in OpenSLX-database.\n",
+ $vendorOSName);
+ }
} else {
- my $id = addVendorOS($openslxDB, {
+ my $data = {
'name' => $vendorOSName,
- 'path' => $self->{'vendor-os-name'},
- });
+ };
+ if (length($self->{'clone-source'})) {
+ $data->{'clone_source'} = $self->{'clone-source'};
+ }
+ my $id = $openslxDB->addVendorOS($data);
- vlog 0, _tr("Vendor-OS <%s> has been added to DB (ID=%s).\n",
+ vlog 0, _tr("Vendor-OS '%s' has been added to DB (ID=%s).\n",
$vendorOSName, $id);
}
- disconnectConfigDB($openslxDB);
+ $openslxDB->disconnect();
}
}
@@ -363,7 +389,6 @@ sub createPackager
die _tr("Could not load module <%s> (Version <%s> required, but <%s> found)\n",
$packagerModule, 1.01, $modVersion);
}
- $packagerModule->import;
my $packager = $packagerModule->new;
$packager->initialize($self);
$self->{'packager'} = $packager;
@@ -387,7 +412,6 @@ sub createMetaPackager
die _tr("Could not load module <%s> (Version <%s> required, but <%s> found)\n",
$metaPackagerModule, 1.01, $modVersion);
}
- $metaPackagerModule->import;
my $metaPackager = $metaPackagerModule->new;
$metaPackager->initialize($self);
$self->{'meta-packager'} = $metaPackager;
@@ -728,7 +752,8 @@ sub clone_fetchSource
my $self = shift;
my $source = shift;
- vlog 0, _tr("Cloning vendor-OS from <%s>...\n", $source);
+ vlog 0, _tr("Cloning vendor-OS from '%s' to '%s'...\n", $source,
+ $self->{'vendor-os-path'});
my $excludeIncludeList = $self->clone_determineIncludeExcludeList();
vlog 1, "using exclude-include-filter:\n$excludeIncludeList\n";
open(RSYNC, "| rsync -av --delete --exclude-from=- $source $self->{'vendor-os-path'}")
diff --git a/installer/slxos-setup b/installer/slxos-setup
index bd279dcd..75d562c3 100755
--- a/installer/slxos-setup
+++ b/installer/slxos-setup
@@ -90,8 +90,8 @@ chdir($FindBin::RealBin)
my $engine = OpenSLX::OSSetup::Engine->new;
if ($action =~ m[import]i) {
$engine->initialize($vendorOSName, 0, 'import');
- if (!-e $engine->{'system-path'}) {
- die _tr("'%s' doesn't exist, giving up!\n", $engine->{'system-path'});
+ if (!-e $engine->{'vendor-os-path'}) {
+ die _tr("'%s' doesn't exist, giving up!\n", $engine->{'vendor-os-path'});
}
$engine->addInstalledVendorOSToConfigDB();
} elsif ($action =~ m[update]i) {