diff options
author | Oliver Tappe | 2007-03-15 22:41:10 +0100 |
---|---|---|
committer | Oliver Tappe | 2007-03-15 22:41:10 +0100 |
commit | 03db5fcadee81bd5ce66665f18b611e106783c27 (patch) | |
tree | 1071ff956228157c52fbd5b5087ca8928b37d0f9 /installer | |
parent | * removed 'nbd' from supported export types as I have learned from Dirk yeste... (diff) | |
download | core-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.pm | 46 | ||||
-rw-r--r-- | installer/OpenSLX/OSExport/ExportType/NFS.pm | 4 | ||||
-rw-r--r-- | installer/OpenSLX/OSSetup/Engine.pm | 69 | ||||
-rwxr-xr-x | installer/slxos-setup | 4 |
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) { |