summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Tappe2007-04-02 15:34:54 +0200
committerOliver Tappe2007-04-02 15:34:54 +0200
commitee82c788a25598bfdc18c0e7a638ff6409b259f3 (patch)
treeadabe7b8afa1620d21bade009e9e7c6615ccd7ee
parentTrivial fix to match the nbd-server help output in hint ... (diff)
downloadcore-ee82c788a25598bfdc18c0e7a638ff6409b259f3.tar.gz
core-ee82c788a25598bfdc18c0e7a638ff6409b259f3.tar.xz
core-ee82c788a25598bfdc18c0e7a638ff6409b259f3.zip
* added support for removing a vendor-OS (from disk and config-DB)
git-svn-id: http://svn.openslx.org/svn/openslx/trunk@854 95ad53e4-c205-0410-b2fa-d234c58c8868
-rw-r--r--installer/OpenSLX/OSSetup/Engine.pm176
-rwxr-xr-xinstaller/slxos-setup42
2 files changed, 143 insertions, 75 deletions
diff --git a/installer/OpenSLX/OSSetup/Engine.pm b/installer/OpenSLX/OSSetup/Engine.pm
index f4417e84..61fd0087 100644
--- a/installer/OpenSLX/OSSetup/Engine.pm
+++ b/installer/OpenSLX/OSSetup/Engine.pm
@@ -119,14 +119,14 @@ sub initialize
}
unless (eval "require $distroModule") {
if ($! == 2) {
- die _tr("Distro-module <%s> not found!\n", $distroModule);
+ die _tr("Distro-module '%s' not found!\n", $distroModule);
} else {
- die _tr("Unable to load distro-module <%s> (%s)\n", $distroModule, $@);
+ die _tr("Unable to load distro-module '%s' (%s)\n", $distroModule, $@);
}
}
my $modVersion = $distroModule->VERSION;
if ($modVersion < 1.01) {
- die _tr("Could not load module <%s> (Version <%s> required, but <%s> found)\n",
+ die _tr("Could not load module '%s' (Version '%s' required, but '%s' found)\n",
$distroModule, 1.01, $modVersion);
}
my $distro = $distroModule->new;
@@ -187,7 +187,7 @@ sub installVendorOS
});
slxsystem("touch $installInfoFile");
# just touch the file, in order to indicate a proper installation
- vlog 0, _tr("Vendor-OS <%s> installed succesfully.\n",
+ vlog 0, _tr("Vendor-OS '%s' installed succesfully.\n",
$self->{'vendor-os-name'});
$self->addInstalledVendorOSToConfigDB();
@@ -243,10 +243,10 @@ sub cloneVendorOS
close CLONE_INFO;
}
if ($isReClone) {
- vlog 0, _tr("Vendor-OS <%s> has been re-cloned succesfully.\n",
+ 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",
+ vlog 0, _tr("Vendor-OS '%s' has been cloned succesfully.\n",
$self->{'vendor-os-name'});
}
@@ -265,10 +265,24 @@ sub updateVendorOS
changePersonalityIfNeeded($self->{distro}->{'base-name'});
$self->updateStage1D();
});
- vlog 0, _tr("Vendor-OS <%s> updated succesfully.\n",
+ vlog 0, _tr("Vendor-OS '%s' updated succesfully.\n",
$self->{'vendor-os-name'});
}
+sub removeVendorOS
+{
+ my $self = shift;
+
+ vlog 0, _tr("removing vendor-OS folder '%s'...", $self->{'vendor-os-path'});
+ if (system("rm -r $self->{'vendor-os-path'}")) {
+ vlog 0, _tr("* unable to remove vendor-OS '%s'!", $self->{'vendor-os-path'});
+ } else {
+ vlog 0, _tr("Vendor-OS '%s' removed succesfully.\n",
+ $self->{'vendor-os-name'});
+ }
+ $self->removeVendorOSFromConfigDB();
+}
+
sub addInstalledVendorOSToConfigDB
{
my $self = shift;
@@ -277,51 +291,37 @@ sub addInstalledVendorOSToConfigDB
die _tr("can't import vendor-OS '%s', since it doesn't exist!\n",
$self->{'vendor-os-path'});
}
- my $configDBModule = "OpenSLX::ConfigDB";
- unless (eval "require $configDBModule") {
- if ($! == 2) {
- vlog 1, _tr("ConfigDB-module not found, unable to access OpenSLX-database.\n");
+ my $openslxDB = accessConfigDB();
+ $openslxDB->connect();
+ # insert new vendor-os if it doesn't already exist in DB:
+ my $vendorOSName = $self->{'vendor-os-name'};
+ my $vendorOS
+ = $openslxDB->fetchVendorOSByFilter({ 'name' => $vendorOSName });
+ if (defined $vendorOS) {
+ 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 {
- die _tr("Unable to load ConfigDB-module <%s> (%s)\n", $configDBModule, $@);
+ vlog 0, _tr("No need to change vendor-OS '%s' in OpenSLX-database.\n",
+ $vendorOSName);
}
} else {
- my $modVersion = $configDBModule->VERSION;
- if ($modVersion < 1.01) {
- die _tr("Could not load module <%s> (Version <%s> required, but <%s> found)\n",
- $configDBModule, 1.01, $modVersion);
- }
- 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
- = $openslxDB->fetchVendorOSByFilter({ 'name' => $vendorOSName });
- if (defined $vendorOS) {
- 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 $data = {
- 'name' => $vendorOSName,
- };
- 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",
- $vendorOSName, $id);
+ my $data = {
+ 'name' => $vendorOSName,
+ };
+ if (length($self->{'clone-source'})) {
+ $data->{'clone_source'} = $self->{'clone-source'};
}
+ my $id = $openslxDB->addVendorOS($data);
- $openslxDB->disconnect();
+ vlog 0, _tr("Vendor-OS '%s' has been added to DB (ID=%s).\n",
+ $vendorOSName, $id);
}
+
+ $openslxDB->disconnect();
}
################################################################################
@@ -345,7 +345,7 @@ sub readDistroInfo
vlog 3, "reading configuration file $file...";
my $config = slurpFile($file);
if (!eval $config && length($@)) {
- die _tr("error in config-file <%s> (%s)", $file, $@)."\n";
+ die _tr("error in config-file '%s' (%s)", $file, $@)."\n";
}
}
# ...and store merged config:
@@ -394,14 +394,14 @@ sub createPackager
= "OpenSLX::OSSetup::Packager::$self->{distro}->{'packager-type'}";
unless (eval "require $packagerModule") {
if ($! == 2) {
- die _tr("Packager-module <%s> not found!\n", $packagerModule);
+ die _tr("Packager-module '%s' not found!\n", $packagerModule);
} else {
- die _tr("Unable to load packager-module <%s> (%s)\n", $packagerModule, $@);
+ die _tr("Unable to load packager-module '%s' (%s)\n", $packagerModule, $@);
}
}
my $modVersion = $packagerModule->VERSION;
if ($modVersion < 1.01) {
- die _tr("Could not load module <%s> (Version <%s> required, but <%s> found)\n",
+ die _tr("Could not load module '%s' (Version '%s' required, but '%s' found)\n",
$packagerModule, 1.01, $modVersion);
}
my $packager = $packagerModule->new;
@@ -417,14 +417,14 @@ sub createMetaPackager
= "OpenSLX::OSSetup::MetaPackager::$self->{distro}->{'meta-packager-type'}";
unless (eval "require $metaPackagerModule") {
if ($! == 2) {
- die _tr("Meta-packager-module <%s> not found!\n", $metaPackagerModule);
+ die _tr("Meta-packager-module '%s' not found!\n", $metaPackagerModule);
} else {
- die _tr("Unable to load meta-packager-module <%s> (%s)\n", $metaPackagerModule, $@);
+ die _tr("Unable to load meta-packager-module '%s' (%s)\n", $metaPackagerModule, $@);
}
}
my $modVersion = $metaPackagerModule->VERSION;
if ($modVersion < 1.01) {
- die _tr("Could not load module <%s> (Version <%s> required, but <%s> found)\n",
+ die _tr("Could not load module '%s' (Version '%s' required, but '%s' found)\n",
$metaPackagerModule, 1.01, $modVersion);
}
my $metaPackager = $metaPackagerModule->new;
@@ -527,7 +527,7 @@ sub stage1A_copyPrerequiredFiles
| tar -xp -C $stage1cDir
];
if (slxsystem($cmd)) {
- die _tr("unable to copy folder with pre-required files to folder <%s> (%s)\n",
+ die _tr("unable to copy folder with pre-required files to folder '%s' (%s)\n",
$stage1cDir, $!);
}
$self->{distro}->fixPrerequiredFiles($stage1cDir);
@@ -547,7 +547,7 @@ sub stage1A_copyTrustedPackageKeys
| tar -xp -C $stage1bDir
];
if (slxsystem($cmd)) {
- die _tr("unable to copy folder with trusted package keys to folder <%s> (%s)\n",
+ die _tr("unable to copy folder with trusted package keys to folder '%s' (%s)\n",
$stage1bDir, $!);
}
slxsystem("chmod 444 $stage1bDir/trusted-package-keys/*");
@@ -582,7 +582,7 @@ sub stage1A_createRequiredFiles
mkdir "$stage1cDir/dev";
if (!-e "$stage1cDir/dev/null" && slxsystem("mknod $stage1cDir/dev/null c 1 3")) {
- die _tr("unable to create node <%s> (%s)\n", "$stage1cDir/dev/null", $!);
+ die _tr("unable to create node '%s' (%s)\n", "$stage1cDir/dev/null", $!);
}
}
@@ -601,16 +601,16 @@ sub stage1B_chrootAndBootstrap
vlog 2, "chrooting into $self->{stage1aDir}...";
# chdir into stage1aDir...
chdir $self->{stage1aDir}
- or die _tr("unable to chdir into <%s> (%s)\n", $self->{stage1aDir}, $!);
+ or die _tr("unable to chdir into '%s' (%s)\n", $self->{stage1aDir}, $!);
# ...do chroot
chroot "."
- or die _tr("unable to chroot into <%s> (%s)\n", $self->{stage1aDir}, $!);
+ or die _tr("unable to chroot into '%s' (%s)\n", $self->{stage1aDir}, $!);
$ENV{PATH} = "/bin:/sbin:/usr/bin:/usr/sbin";
# chdir into slxbootstrap, as we want to drop packages into there:
chdir "/$self->{stage1bSubdir}"
- or die _tr("unable to chdir into <%s> (%s)\n", "/$self->{stage1bSubdir}", $!);
+ or die _tr("unable to chdir into '%s' (%s)\n", "/$self->{stage1bSubdir}", $!);
# fetch prerequired packages:
my $baseURL
@@ -649,10 +649,10 @@ sub stage1C_chrootAndInstallBasicVendorOS
vlog 2, "chrooting into $stage1bDir...";
# chdir into stage1bDir...
chdir $stage1bDir
- or die _tr("unable to chdir into <%s> (%s)\n", $stage1bDir, $!);
+ or die _tr("unable to chdir into '%s' (%s)\n", $stage1bDir, $!);
# ...do chroot
chroot "."
- or die _tr("unable to chroot into <%s> (%s)\n", $stage1bDir, $!);
+ or die _tr("unable to chroot into '%s' (%s)\n", $stage1bDir, $!);
$ENV{PATH} = "/bin:/sbin:/usr/bin:/usr/sbin";
my $stage1cDir = "/$self->{stage1cSubdir}";
@@ -665,7 +665,7 @@ sub stage1C_chrootAndInstallBasicVendorOS
# import any additional trusted package keys to rpm-DB:
my $keyDir = "/trusted-package-keys";
opendir(KEYDIR, $keyDir)
- or die _tr("unable to opendir <%s> (%s)\n", $keyDir, $!);
+ or die _tr("unable to opendir '%s' (%s)\n", $keyDir, $!);
my @keyFiles
= map { "$keyDir/$_" }
grep { $_ !~ m[^(\.\.?|pubring.gpg)$] }
@@ -686,11 +686,11 @@ sub stage1C_cleanupBasicVendorOS
my $stage1cDir
= "$self->{'stage1aDir'}/$self->{'stage1bSubdir'}/$self->{'stage1cSubdir'}";
if (slxsystem("mv $stage1cDir/* $self->{'vendor-os-path'}/")) {
- die _tr("unable to move final setup to <%s> (%s)\n",
+ die _tr("unable to move final setup to '%s' (%s)\n",
$self->{'vendor-os-path'}, $!);
}
if (slxsystem("rm -rf $self->{stage1aDir}")) {
- die _tr("unable to remove temporary folder <%s> (%s)\n",
+ die _tr("unable to remove temporary folder '%s' (%s)\n",
$self->{stage1aDir}, $!);
}
}
@@ -736,10 +736,10 @@ sub stage1D_updateBasicVendorOS()
my $osDir = $self->{'vendor-os-path'};
vlog 2, "chrooting into $osDir...";
chdir $osDir
- or die _tr("unable to chdir into <%s> (%s)\n", $osDir, $!);
+ or die _tr("unable to chdir into '%s' (%s)\n", $osDir, $!);
# ...do chroot
chroot "."
- or die _tr("unable to chroot into <%s> (%s)\n", $osDir, $!);
+ or die _tr("unable to chroot into '%s' (%s)\n", $osDir, $!);
vlog 1, "updating basic vendor-os...";
$self->{'meta-packager'}->updateBasicVendorOS();
@@ -758,7 +758,7 @@ sub stage1D_installPackageSelection
map { $_ =~ s[^\s*(.*?)\s*$][$1]; $_ }
split "\n", $pkgSelection;
if (scalar(@pkgs) == 0) {
- vlog 0, _tr("No packages listed for selection <%s>, nothing to do.",
+ vlog 0, _tr("No packages listed for selection '%s', nothing to do.",
$selectionName);
} else {
$self->{'meta-packager'}->installSelection(join " ", @pkgs);
@@ -796,6 +796,46 @@ sub clone_determineIncludeExcludeList
return $includeExcludeList;
}
+sub accessConfigDB
+{
+ my $configDBModule = "OpenSLX::ConfigDB";
+ unless (eval "require $configDBModule") {
+ if ($! == 2) {
+ vlog 1, _tr("ConfigDB-module not found, unable to access OpenSLX-database.\n");
+ } else {
+ die _tr("Unable to load ConfigDB-module '%s' (%s)\n", $configDBModule, $@);
+ }
+ } else {
+ my $modVersion = $configDBModule->VERSION;
+ if ($modVersion < 1.01) {
+ die _tr("Could not load module '%s' (Version '%s' required, but '%s' found)",
+ $configDBModule, 1.01, $modVersion);
+ }
+ }
+ return $configDBModule->new();
+}
+
+sub removeVendorOSFromConfigDB
+{
+ my $self = shift;
+
+ my $openslxDB = accessConfigDB();
+ $openslxDB->connect();
+
+ my $vendorOSName = $self->{'vendor-os-name'};
+ my $vendorOS
+ = $openslxDB->fetchVendorOSByFilter({ 'name' => $vendorOSName });
+ if (!defined $vendorOS) {
+ vlog 0, _tr("Vendor-OS '%s' didn't exist in OpenSLX-database.\n",
+ $vendorOSName);
+ } else {
+ $openslxDB->removeVendorOS($vendorOS->{id});
+ vlog 0, _tr("Vendor-OS '%s' has been removed from DB!\n",
+ $vendorOSName);
+ }
+
+ $openslxDB->disconnect();
+}
################################################################################
### utility functions
@@ -836,7 +876,7 @@ retry:
}
}
if (!defined $foundFile) {
- die _tr("unable to fetch <%s> from <%s> (%s)\n", $fileVariantStr,
+ die _tr("unable to fetch '%s' from '%s' (%s)\n", $fileVariantStr,
$baseURL, $!);
}
push @foundFiles, $foundFile;
diff --git a/installer/slxos-setup b/installer/slxos-setup
index 2d8d2a90..f158cf72 100755
--- a/installer/slxos-setup
+++ b/installer/slxos-setup
@@ -123,6 +123,18 @@ if ($action =~ m[^import]i) {
or die _tr("can't chdir to script-path <%> (%s)", $FindBin::RealBin, $!);
$engine->initialize($vendorOSName, 'clone');
$engine->cloneVendorOS($source);
+} elsif ($action =~ m[^remove]i) {
+ my $vendorOSName = shift @ARGV;
+ if (!defined $vendorOSName) {
+ print STDERR _tr("You need to specify exactly one vendor-OS-name!\n");
+ pod2usage(2);
+ }
+ # 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, $!);
+ $engine->initialize($vendorOSName, 'remove');
+ $engine->removeVendorOS();
} elsif ($action =~ m[^list-su]i) {
print _tr("List of supported distros:\n");
print join('', map {
@@ -145,6 +157,7 @@ if ($action =~ m[^import]i) {
install
list-supported
list-installed
+ remove
update
Try '%s --help' for more info.\n", $0);
}
@@ -191,6 +204,10 @@ show installed vendor-OSes
show supported distros
+=item B<< remove <vendor-os-name> >>
+
+removes an installed vendor-OS
+
=item B<< update <vendor-os-name> >>
updates an installed vendor-OS
@@ -260,12 +277,12 @@ format an rsync-uri has.
=item B<< slxos-setup install suse-10.2 >>
-installs the distro suse-10.2 as a new vendor-OS
+Installs the distro suse-10.2 as a new vendor-OS.
=item B<< slxos-setup install suse-10.2-gnome >>
-installs the 'gnome'-selection of distro suse-10.2 as a new
-vendor-OS
+Installs the 'gnome'-selection of distro suse-10.2 as a new
+vendor-OS.
=back
@@ -275,8 +292,8 @@ vendor-OS
=item B<< slxos-setup clone my_server:/ suse-10.2-clone-my_server >>
-clones the suse-10.2 system from server 'my_server' as a new
-vendor-OS, which will be named 'suse-10.2-clone-my_server'
+Clones the suse-10.2 system from server 'my_server' as a new
+vendor-OS, which will be named 'suse-10.2-clone-my_server'.
=back
@@ -286,7 +303,7 @@ vendor-OS, which will be named 'suse-10.2-clone-my_server'
=item B<< slxos-setup update suse-10.2 >>
-updates the (existing) vendor-OS 'suse-10.2'
+Updates the (existing) vendor-OS 'suse-10.2'.
=back
@@ -296,7 +313,18 @@ updates the (existing) vendor-OS 'suse-10.2'
=item B<< slxos-setup import-into-db suse-10.2 >>
-imports the (existing) vendor-OS 'suse-10.2' into the config-DB
+Imports the (existing) vendor-OS 'suse-10.2' into the config-DB.
+
+=back
+
+=head3 Removing a Vendor-OS
+
+=over 8
+
+=item B<< slxos-setup remove suse-10.2 >>
+
+Wipes the (existing) vendor-OS 'suse-10.2' from disk and removes it
+from the config-DB, too.
=back