From cedf72c7559e96d07fefdf55dc007aeb6bca1ca0 Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Wed, 25 Jul 2007 19:30:02 +0000 Subject: * reworked OpenSLX::OSSetup::Distro structure to incorporate a distro specific hierarchy level in addition to the distro & version specific files. The latter will be converted to config-files soon. * moved string2Array() and chrootInto() from OpenSLX::OSSetup::Engine to OpenSLX::Utils to make them available to other callers * started work on ubuntu & debian installation (not done yet) * cleaned interface of OpenSLX::OSSetup::Engine (separated public from private methods) git-svn-id: http://svn.openslx.org/svn/openslx/trunk@1275 95ad53e4-c205-0410-b2fa-d234c58c8868 --- installer/OpenSLX/OSSetup/Distro/Debian.pm | 38 +++ installer/OpenSLX/OSSetup/Distro/Debian_3_1.pm | 21 +- installer/OpenSLX/OSSetup/Distro/Debian_4_0.pm | 21 +- installer/OpenSLX/OSSetup/Distro/Fedora.pm | 41 ++++ installer/OpenSLX/OSSetup/Distro/Fedora_6.pm | 17 +- .../OpenSLX/OSSetup/Distro/Fedora_6_x86_64.pm | 17 +- installer/OpenSLX/OSSetup/Distro/SUSE.pm | 65 ++++++ installer/OpenSLX/OSSetup/Distro/SUSE_10_1.pm | 40 +--- .../OpenSLX/OSSetup/Distro/SUSE_10_1_x86_64.pm | 40 +--- installer/OpenSLX/OSSetup/Distro/SUSE_10_2.pm | 40 +--- .../OpenSLX/OSSetup/Distro/SUSE_10_2_x86_64.pm | 40 +--- installer/OpenSLX/OSSetup/Distro/Ubuntu.pm | 45 ++++ installer/OpenSLX/OSSetup/Distro/Ubuntu_6_10.pm | 65 ++++++ installer/OpenSLX/OSSetup/Engine.pm | 257 +++++++++------------ installer/OpenSLX/OSSetup/MetaPackager/apt.pm | 72 ++++++ installer/OpenSLX/OSSetup/Packager/Base.pm | 10 +- installer/OpenSLX/OSSetup/Packager/dpkg.pm | 98 ++++++++ installer/OpenSLX/OSSetup/Packager/rpm.pm | 2 +- 18 files changed, 546 insertions(+), 383 deletions(-) create mode 100644 installer/OpenSLX/OSSetup/Distro/Debian.pm create mode 100644 installer/OpenSLX/OSSetup/Distro/Fedora.pm create mode 100644 installer/OpenSLX/OSSetup/Distro/SUSE.pm create mode 100644 installer/OpenSLX/OSSetup/Distro/Ubuntu.pm create mode 100644 installer/OpenSLX/OSSetup/Distro/Ubuntu_6_10.pm create mode 100644 installer/OpenSLX/OSSetup/MetaPackager/apt.pm create mode 100644 installer/OpenSLX/OSSetup/Packager/dpkg.pm (limited to 'installer') diff --git a/installer/OpenSLX/OSSetup/Distro/Debian.pm b/installer/OpenSLX/OSSetup/Distro/Debian.pm new file mode 100644 index 00000000..48391f55 --- /dev/null +++ b/installer/OpenSLX/OSSetup/Distro/Debian.pm @@ -0,0 +1,38 @@ +# 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/ +# ----------------------------------------------------------------------------- +# Debian.pm +# - provides Debian-specific overrides of the OpenSLX OSSetup API. +# ----------------------------------------------------------------------------- +package OpenSLX::OSSetup::Distro::Debian; + +use strict; +use warnings; + +use base qw(OpenSLX::OSSetup::Distro::Base); + +use OpenSLX::Basics; + +################################################################################ +### implementation +################################################################################ +sub initialize +{ + my $self = shift; + my $engine = shift; + + $self->SUPER::initialize($engine); + $self->{'packager-type'} = 'dpkg'; + $self->{'meta-packager-type'} = $ENV{SLX_META_PACKAGER} || 'apt'; + $self->{'stage1c-faked-files'} = []; + return; +} + +1; \ No newline at end of file diff --git a/installer/OpenSLX/OSSetup/Distro/Debian_3_1.pm b/installer/OpenSLX/OSSetup/Distro/Debian_3_1.pm index 30882c8d..c9476d25 100644 --- a/installer/OpenSLX/OSSetup/Distro/Debian_3_1.pm +++ b/installer/OpenSLX/OSSetup/Distro/Debian_3_1.pm @@ -16,7 +16,7 @@ package OpenSLX::OSSetup::Distro::Debian_3_1; use strict; use warnings; -use base qw(OpenSLX::OSSetup::Distro::Base); +use base qw(OpenSLX::OSSetup::Distro::Debian); use OpenSLX::Basics; @@ -32,25 +32,6 @@ sub new return bless $self, $class; } -sub initialize -{ - my $self = shift; - my $engine = shift; - - $self->SUPER::initialize($engine); - $self->{'packager-type'} = 'dpkg'; - $self->{'meta-packager-type'} = $ENV{SLX_META_PACKAGER} || 'apt'; - $self->{'stage1c-faked-files'} = []; - return; -} - -sub fixPrerequiredFiles -{ - my $self = shift; - my $stage1cDir = shift; - return; -} - sub initDistroInfo { my $self = shift; diff --git a/installer/OpenSLX/OSSetup/Distro/Debian_4_0.pm b/installer/OpenSLX/OSSetup/Distro/Debian_4_0.pm index 23ca8a77..2326f342 100644 --- a/installer/OpenSLX/OSSetup/Distro/Debian_4_0.pm +++ b/installer/OpenSLX/OSSetup/Distro/Debian_4_0.pm @@ -16,7 +16,7 @@ package OpenSLX::OSSetup::Distro::Debian_4_0; use strict; use warnings; -use base qw(OpenSLX::OSSetup::Distro::Base); +use base qw(OpenSLX::OSSetup::Distro::Debian); use OpenSLX::Basics; @@ -32,25 +32,6 @@ sub new return bless $self, $class; } -sub initialize -{ - my $self = shift; - my $engine = shift; - - $self->SUPER::initialize($engine); - $self->{'packager-type'} = 'dpkg'; - $self->{'meta-packager-type'} = $ENV{SLX_META_PACKAGER} || 'apt'; - $self->{'stage1c-faked-files'} = []; - return; -} - -sub fixPrerequiredFiles -{ - my $self = shift; - my $stage1cDir = shift; - return; -} - sub initDistroInfo { my $self = shift; diff --git a/installer/OpenSLX/OSSetup/Distro/Fedora.pm b/installer/OpenSLX/OSSetup/Distro/Fedora.pm new file mode 100644 index 00000000..5206a07e --- /dev/null +++ b/installer/OpenSLX/OSSetup/Distro/Fedora.pm @@ -0,0 +1,41 @@ +# 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/ +# ----------------------------------------------------------------------------- +# Fedora.pm +# - provides Fedora-specific overrides of the OpenSLX OSSetup API. +# ----------------------------------------------------------------------------- +package OpenSLX::OSSetup::Distro::Fedora; + +use strict; +use warnings; + +use base qw(OpenSLX::OSSetup::Distro::Base); + +use OpenSLX::Basics; + +################################################################################ +### implementation +################################################################################ +sub initialize +{ + my $self = shift; + my $engine = shift; + + $self->SUPER::initialize($engine); + $self->{'packager-type'} = 'rpm'; + $self->{'meta-packager-type'} = $ENV{SLX_META_PACKAGER} || 'yum'; + $self->{'stage1c-faked-files'} = [ + '/etc/fstab', + '/etc/mtab', + ]; + return; +} + +1; \ No newline at end of file diff --git a/installer/OpenSLX/OSSetup/Distro/Fedora_6.pm b/installer/OpenSLX/OSSetup/Distro/Fedora_6.pm index 6b384ebd..4417136a 100644 --- a/installer/OpenSLX/OSSetup/Distro/Fedora_6.pm +++ b/installer/OpenSLX/OSSetup/Distro/Fedora_6.pm @@ -16,7 +16,7 @@ package OpenSLX::OSSetup::Distro::Fedora_6; use strict; use warnings; -use base qw(OpenSLX::OSSetup::Distro::Base); +use base qw(OpenSLX::OSSetup::Distro::Fedora); use OpenSLX::Basics; @@ -32,21 +32,6 @@ sub new return bless $self, $class; } -sub initialize -{ - my $self = shift; - my $engine = shift; - - $self->SUPER::initialize($engine); - $self->{'packager-type'} = 'rpm'; - $self->{'meta-packager-type'} = $ENV{SLX_META_PACKAGER} || 'yum'; - $self->{'stage1c-faked-files'} = [ - '/etc/fstab', - '/etc/mtab', - ]; - return; -} - sub initDistroInfo { my $self = shift; diff --git a/installer/OpenSLX/OSSetup/Distro/Fedora_6_x86_64.pm b/installer/OpenSLX/OSSetup/Distro/Fedora_6_x86_64.pm index a4addcdb..8cd64775 100644 --- a/installer/OpenSLX/OSSetup/Distro/Fedora_6_x86_64.pm +++ b/installer/OpenSLX/OSSetup/Distro/Fedora_6_x86_64.pm @@ -16,7 +16,7 @@ package OpenSLX::OSSetup::Distro::Fedora_6_x86_64; use strict; use warnings; -use base qw(OpenSLX::OSSetup::Distro::Base); +use base qw(OpenSLX::OSSetup::Distro::Fedora); use OpenSLX::Basics; @@ -32,21 +32,6 @@ sub new return bless $self, $class; } -sub initialize -{ - my $self = shift; - my $engine = shift; - - $self->SUPER::initialize($engine); - $self->{'packager-type'} = 'rpm'; - $self->{'meta-packager-type'} = $ENV{SLX_META_PACKAGER} || 'yum'; - $self->{'stage1c-faked-files'} = [ - '/etc/fstab', - '/etc/mtab', - ]; - return; -} - sub initDistroInfo { my $self = shift; diff --git a/installer/OpenSLX/OSSetup/Distro/SUSE.pm b/installer/OpenSLX/OSSetup/Distro/SUSE.pm new file mode 100644 index 00000000..065fbf2c --- /dev/null +++ b/installer/OpenSLX/OSSetup/Distro/SUSE.pm @@ -0,0 +1,65 @@ +# 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/ +# ----------------------------------------------------------------------------- +# SUSE.pm +# - provides SUSE-specific overrides of the OpenSLX OSSetup API. +# ----------------------------------------------------------------------------- +package OpenSLX::OSSetup::Distro::SUSE; + +use strict; +use warnings; + +use base qw(OpenSLX::OSSetup::Distro::Base); + +use OpenSLX::Basics; + +################################################################################ +### implementation +################################################################################ +sub initialize +{ + my $self = shift; + my $engine = shift; + + $self->SUPER::initialize($engine); + $self->{'packager-type'} = 'rpm'; + $self->{'meta-packager-type'} = $ENV{SLX_META_PACKAGER} || 'smart'; + $ENV{YAST_IS_RUNNING} = "instsys"; + return; +} + +sub fixPrerequiredFiles +{ + my $self = shift; + my $stage1cDir = shift; + + chown(0, 0, "$stage1cDir/etc/group", "$stage1cDir/etc/passwd", + "$stage1cDir/etc/shadow"); + return; +} + +sub updateDistroConfig +{ + my $self = shift; + + # make sure there's a /dev/zero, as SuSEconfig requires it: + if (!-e "/dev/zero" && slxsystem("mknod /dev/zero c 1 5")) { + die _tr("unable to create node '%s' (%s)\n", "/dev/zero", $!); + } + # invoke SuSEconfig in order to allow it to update the configuration: + if (slxsystem("SuSEconfig")) { + die _tr("unable to run SuSEconfig (%s)", $!); + } + $self->SUPER::updateDistroConfig(); + return; +} + + +1; diff --git a/installer/OpenSLX/OSSetup/Distro/SUSE_10_1.pm b/installer/OpenSLX/OSSetup/Distro/SUSE_10_1.pm index b25b167d..27125f41 100644 --- a/installer/OpenSLX/OSSetup/Distro/SUSE_10_1.pm +++ b/installer/OpenSLX/OSSetup/Distro/SUSE_10_1.pm @@ -16,7 +16,7 @@ package OpenSLX::OSSetup::Distro::SUSE_10_1; use strict; use warnings; -use base qw(OpenSLX::OSSetup::Distro::Base); +use base qw(OpenSLX::OSSetup::Distro::SUSE); use OpenSLX::Basics; @@ -32,44 +32,6 @@ sub new return bless $self, $class; } -sub initialize -{ - my $self = shift; - my $engine = shift; - - $self->SUPER::initialize($engine); - $self->{'packager-type'} = 'rpm'; - $self->{'meta-packager-type'} = $ENV{SLX_META_PACKAGER} || 'smart'; - $ENV{YAST_IS_RUNNING} = "instsys"; - return; -} - -sub fixPrerequiredFiles -{ - my $self = shift; - my $stage1cDir = shift; - - chown(0, 0, "$stage1cDir/etc/group", "$stage1cDir/etc/passwd", - "$stage1cDir/etc/shadow"); - return; -} - -sub updateDistroConfig -{ - my $self = shift; - - # make sure there's a /dev/zero, as SuSEconfig requires it: - if (!-e "/dev/zero" && slxsystem("mknod /dev/zero c 1 5")) { - die _tr("unable to create node '%s' (%s)\n", "/dev/zero", $!); - } - # invoke SuSEconfig in order to allow it to update the configuration: - if (slxsystem("SuSEconfig")) { - die _tr("unable to run SuSEconfig (%s)", $!); - } - $self->SUPER::updateDistroConfig(); - return; -} - sub initDistroInfo { my $self = shift; diff --git a/installer/OpenSLX/OSSetup/Distro/SUSE_10_1_x86_64.pm b/installer/OpenSLX/OSSetup/Distro/SUSE_10_1_x86_64.pm index 91210146..5f73887d 100644 --- a/installer/OpenSLX/OSSetup/Distro/SUSE_10_1_x86_64.pm +++ b/installer/OpenSLX/OSSetup/Distro/SUSE_10_1_x86_64.pm @@ -16,7 +16,7 @@ package OpenSLX::OSSetup::Distro::SUSE_10_1_x86_64; use strict; use warnings; -use base qw(OpenSLX::OSSetup::Distro::Base); +use base qw(OpenSLX::OSSetup::Distro::SUSE); use OpenSLX::Basics; @@ -32,44 +32,6 @@ sub new return bless $self, $class; } -sub initialize -{ - my $self = shift; - my $engine = shift; - - $self->SUPER::initialize($engine); - $self->{'packager-type'} = 'rpm'; - $self->{'meta-packager-type'} = $ENV{SLX_META_PACKAGER} || 'smart'; - $ENV{YAST_IS_RUNNING} = "instsys"; - return; -} - -sub fixPrerequiredFiles -{ - my $self = shift; - my $stage1cDir = shift; - - chown(0, 0, "$stage1cDir/etc/group", "$stage1cDir/etc/passwd", - "$stage1cDir/etc/shadow"); - return; -} - -sub updateDistroConfig -{ - my $self = shift; - - # make sure there's a /dev/zero, as SuSEconfig requires it: - if (!-e "/dev/zero" && slxsystem("mknod /dev/zero c 1 5")) { - die _tr("unable to create node '%s' (%s)\n", "/dev/zero", $!); - } - # invoke SuSEconfig in order to allow it to update the configuration: - if (slxsystem("SuSEconfig")) { - die _tr("unable to run SuSEconfig (%s)", $!); - } - $self->SUPER::updateDistroConfig(); - return; -} - sub initDistroInfo { my $self = shift; diff --git a/installer/OpenSLX/OSSetup/Distro/SUSE_10_2.pm b/installer/OpenSLX/OSSetup/Distro/SUSE_10_2.pm index 71f4b57b..0513050f 100644 --- a/installer/OpenSLX/OSSetup/Distro/SUSE_10_2.pm +++ b/installer/OpenSLX/OSSetup/Distro/SUSE_10_2.pm @@ -16,7 +16,7 @@ package OpenSLX::OSSetup::Distro::SUSE_10_2; use strict; use warnings; -use base qw(OpenSLX::OSSetup::Distro::Base); +use base qw(OpenSLX::OSSetup::Distro::SUSE); use OpenSLX::Basics; @@ -30,44 +30,6 @@ sub new return bless $self, $class; } -sub initialize -{ - my $self = shift; - my $engine = shift; - - $self->SUPER::initialize($engine); - $self->{'packager-type'} = 'rpm'; - $self->{'meta-packager-type'} = $ENV{SLX_META_PACKAGER} || 'smart'; - $ENV{YAST_IS_RUNNING} = "instsys"; - return; -} - -sub fixPrerequiredFiles -{ - my $self = shift; - my $stage1cDir = shift; - - chown(0, 0, "$stage1cDir/etc/group", "$stage1cDir/etc/passwd", - "$stage1cDir/etc/shadow"); - return; -} - -sub updateDistroConfig -{ - my $self = shift; - - # make sure there's a /dev/zero, as SuSEconfig requires it: - if (!-e "/dev/zero" && slxsystem("mknod /dev/zero c 1 5")) { - die _tr("unable to create node '%s' (%s)\n", "/dev/zero", $!); - } - # invoke SuSEconfig in order to allow it to update the configuration: - if (slxsystem("SuSEconfig")) { - die _tr("unable to run SuSEconfig (%s)", $!); - } - $self->SUPER::updateDistroConfig(); - return; -} - sub initDistroInfo { my $self = shift; diff --git a/installer/OpenSLX/OSSetup/Distro/SUSE_10_2_x86_64.pm b/installer/OpenSLX/OSSetup/Distro/SUSE_10_2_x86_64.pm index 85715e40..2b6d4d7b 100644 --- a/installer/OpenSLX/OSSetup/Distro/SUSE_10_2_x86_64.pm +++ b/installer/OpenSLX/OSSetup/Distro/SUSE_10_2_x86_64.pm @@ -16,7 +16,7 @@ package OpenSLX::OSSetup::Distro::SUSE_10_2_x86_64; use strict; use warnings; -use base qw(OpenSLX::OSSetup::Distro::Base); +use base qw(OpenSLX::OSSetup::Distro::SUSE); use OpenSLX::Basics; @@ -32,44 +32,6 @@ sub new return bless $self, $class; } -sub initialize -{ - my $self = shift; - my $engine = shift; - - $self->SUPER::initialize($engine); - $self->{'packager-type'} = 'rpm'; - $self->{'meta-packager-type'} = $ENV{SLX_META_PACKAGER} || 'smart'; - $ENV{YAST_IS_RUNNING} = "instsys"; - return; -} - -sub fixPrerequiredFiles -{ - my $self = shift; - my $stage1cDir = shift; - - chown(0, 0, "$stage1cDir/etc/group", "$stage1cDir/etc/passwd", - "$stage1cDir/etc/shadow"); - return; -} - -sub updateDistroConfig -{ - my $self = shift; - - # make sure there's a /dev/zero, as SuSEconfig requires it: - if (!-e "/dev/zero" && slxsystem("mknod /dev/zero c 1 5")) { - die _tr("unable to create node '%s' (%s)\n", "/dev/zero", $!); - } - # invoke SuSEconfig in order to allow it to update the configuration: - if (slxsystem("SuSEconfig")) { - die _tr("unable to run SuSEconfig (%s)", $!); - } - $self->SUPER::updateDistroConfig(); - return; -} - sub initDistroInfo { my $self = shift; diff --git a/installer/OpenSLX/OSSetup/Distro/Ubuntu.pm b/installer/OpenSLX/OSSetup/Distro/Ubuntu.pm new file mode 100644 index 00000000..17c30662 --- /dev/null +++ b/installer/OpenSLX/OSSetup/Distro/Ubuntu.pm @@ -0,0 +1,45 @@ +# 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/ +# ----------------------------------------------------------------------------- +# Ubuntu.pm +# - provides Ubuntu-specific overrides of the OpenSLX OSSetup API. +# ----------------------------------------------------------------------------- +package OpenSLX::OSSetup::Distro::Ubuntu; + +use strict; +use warnings; + +use base qw(OpenSLX::OSSetup::Distro::Base); + +use OpenSLX::Basics; + +################################################################################ +### implementation +################################################################################ +sub initialize +{ + my $self = shift; + my $engine = shift; + + $self->SUPER::initialize($engine); + $self->{'packager-type'} = 'dpkg'; + $self->{'meta-packager-type'} = $ENV{SLX_META_PACKAGER} || 'apt'; + $self->{'stage1c-faked-files'} = []; + return; +} + +sub fixPrerequiredFiles +{ + my $self = shift; + my $stage1cDir = shift; + return; +} + +1; \ No newline at end of file diff --git a/installer/OpenSLX/OSSetup/Distro/Ubuntu_6_10.pm b/installer/OpenSLX/OSSetup/Distro/Ubuntu_6_10.pm new file mode 100644 index 00000000..4225b9aa --- /dev/null +++ b/installer/OpenSLX/OSSetup/Distro/Ubuntu_6_10.pm @@ -0,0 +1,65 @@ +# 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/ +# ----------------------------------------------------------------------------- +# Ubuntu_6_10.pm +# - provides Ubuntu-6.10-specific overrides of the OpenSLX OSSetup API. +# ----------------------------------------------------------------------------- +package OpenSLX::OSSetup::Distro::Ubuntu_6_10; + +use strict; +use warnings; + +use base qw(OpenSLX::OSSetup::Distro::Ubuntu); + +use OpenSLX::Basics; + +################################################################################ +### implementation +################################################################################ +sub new +{ + my $class = shift; + my $self = { + 'base-name' => 'ubuntu-6.10', + }; + return bless $self, $class; +} + +sub initDistroInfo +{ + my $self = shift; + $self->{config}->{'repository'} = { + 'base' => { + 'urls' => " + ", + 'name' => 'Ubuntu 6.10', + 'repo-subdir' => 'dists/edgy', + }, + }; + + $self->{config}->{'package-subdir'} = 'pool'; + + $self->{config}->{'prereq-packages'} = " + main/d/debootstrap/debootstrap_0.3.3.0ubuntu7_all.deb + "; + + $self->{config}->{'bootstrap-prereq-packages'} = " + "; + + $self->{config}->{'bootstrap-packages'} = " + "; + + $self->{config}->{'selection'} = { + 'default' => "kmail", + }; + return; +} + +1; \ No newline at end of file diff --git a/installer/OpenSLX/OSSetup/Engine.pm b/installer/OpenSLX/OSSetup/Engine.pm index e5b76f3d..575e25f5 100644 --- a/installer/OpenSLX/OSSetup/Engine.pm +++ b/installer/OpenSLX/OSSetup/Engine.pm @@ -79,7 +79,7 @@ use vars qw(%supportedDistros); module => 'Ubuntu_6_06', support => 'clone' }, 'ubuntu-6.10' => { - module => 'Ubuntu_6_10', support => 'clone' + module => 'Ubuntu_6_10', support => 'clone,install' }, 'ubuntu-7.04' => { module => 'Ubuntu_7_04', support => 'clone' @@ -167,7 +167,7 @@ sub initialize my $distro; my $distroClass = $supportedDistros{lc($distroName)}->{module}; if ($actionType =~ m{^(install|update|shell)}) { - $distro = instantiateClass($distroClass); + $distro = instantiateClass("OpenSLX::OSSetup::Distro::$distroClass"); } else { if (!eval { @@ -203,7 +203,7 @@ sub initialize ); } $self->{'config-distro-info-dir'} = $configDistroInfoDir; - $self->readDistroInfo(); + $self->_readDistroInfo(); } if (!$self->{'action-type'} eq 'install' @@ -225,8 +225,8 @@ sub initialize vlog(1, "vendor-OS path is '$self->{'vendor-os-path'}'"); if ($actionType =~ m{^(install|update|shell)}) { - $self->createPackager(); - $self->createMetaPackager(); + $self->_createPackager(); + $self->_createMetaPackager(); } return; } @@ -240,9 +240,9 @@ sub installVendorOS die _tr("vendor-OS '%s' already exists, giving up!\n", $self->{'vendor-os-path'}); } - $self->createVendorOSPath(); + $self->_createVendorOSPath(); - $self->startLocalURLServersAsNeeded(); + $self->_startLocalURLServersAsNeeded(); my $baseSystemFile = "$self->{'vendor-os-path'}/.openslx-base-system"; if (-e $baseSystemFile) { @@ -250,24 +250,24 @@ sub installVendorOS } else { # basic setup, stage1a-c: - $self->setupStage1A(); + $self->_setupStage1A(); callInSubprocess( sub { # some tasks that involve a chrooted environment: - $self->changePersonalityIfNeeded(); - $self->setupStage1B(); - $self->setupStage1C(); + $self->_changePersonalityIfNeeded(); + $self->_setupStage1B(); + $self->_setupStage1C(); } ); - $self->stage1C_cleanupBasicVendorOS(); + $self->_stage1C_cleanupBasicVendorOS(); # just touch the file, in order to indicate a basic system: slxsystem("touch $baseSystemFile"); } callInSubprocess( sub { # another task that involves a chrooted environment: - $self->changePersonalityIfNeeded(); - $self->setupStage1D(); + $self->_changePersonalityIfNeeded(); + $self->_setupStage1D(); } ); @@ -285,7 +285,7 @@ sub installVendorOS ) ); - $self->touchVendorOS(); + $self->_touchVendorOS(); $self->addInstalledVendorOSToConfigDB(); return; } @@ -343,7 +343,7 @@ sub cloneVendorOS } } - $self->createVendorOSPath(); + $self->_createVendorOSPath(); $self->clone_fetchSource($source); if ($source ne $lastCloneSource) { @@ -368,7 +368,7 @@ sub cloneVendorOS ); } - $self->touchVendorOS(); + $self->_touchVendorOS(); $self->addInstalledVendorOSToConfigDB(); return; } @@ -382,16 +382,16 @@ sub updateVendorOS $self->{'vendor-os-path'}); } - $self->startLocalURLServersAsNeeded(); + $self->_startLocalURLServersAsNeeded(); callInSubprocess( sub { - $self->changePersonalityIfNeeded(); - $self->updateStage1D(); + $self->_changePersonalityIfNeeded(); + $self->_updateStage1D(); } ); - $self->touchVendorOS(); + $self->_touchVendorOS(); vlog( 0, _tr("Vendor-OS '%s' updated succesfully.\n", $self->{'vendor-os-name'}) @@ -410,16 +410,16 @@ sub startChrootedShellForVendorOS ); } - $self->startLocalURLServersAsNeeded(); + $self->_startLocalURLServersAsNeeded(); callInSubprocess( sub { - $self->changePersonalityIfNeeded(); - $self->startChrootedShellInStage1D(); + $self->_changePersonalityIfNeeded(); + $self->_startChrootedShellInStage1D(); } ); - $self->touchVendorOS(); + $self->_touchVendorOS(); vlog( 0, _tr( @@ -442,16 +442,16 @@ sub callChrootedFunctionForVendorOS ); } - $self->startLocalURLServersAsNeeded(); + $self->_startLocalURLServersAsNeeded(); callInSubprocess( sub { - $self->changePersonalityIfNeeded(); - $self->callChrootedFunctionInStage1D($function); + $self->_changePersonalityIfNeeded(); + $self->_callChrootedFunctionInStage1D($function); } ); - $self->touchVendorOS(); + $self->_touchVendorOS(); vlog( 0, _tr( @@ -607,7 +607,7 @@ sub pickKernelFile ################################################################################ ### implementation methods ################################################################################ -sub readDistroInfo +sub _readDistroInfo { my $self = shift; @@ -685,7 +685,7 @@ sub readDistroInfo return; } -sub createVendorOSPath +sub _createVendorOSPath { my $self = shift; @@ -696,7 +696,7 @@ sub createVendorOSPath return; } -sub touchVendorOS +sub _touchVendorOS { my $self = shift; @@ -707,7 +707,7 @@ sub touchVendorOS return; } -sub createPackager +sub _createPackager { my $self = shift; @@ -719,7 +719,7 @@ sub createPackager return; } -sub createMetaPackager +sub _createMetaPackager { my $self = shift; @@ -741,7 +741,7 @@ sub createMetaPackager return; } -sub sortRepositoryURLs +sub _sortRepositoryURLs { my $self = shift; my $repoInfo = shift; @@ -769,7 +769,7 @@ sub sortRepositoryURLs return \@URLs; } -sub downloadBaseFiles +sub _downloadBaseFiles { my $self = shift; my $files = shift; @@ -823,7 +823,7 @@ sub downloadBaseFiles return @foundFiles; } -sub startLocalURLServersAsNeeded +sub _startLocalURLServersAsNeeded { my $self = shift; @@ -835,7 +835,7 @@ sub startLocalURLServersAsNeeded next if $localURL =~ m[^\w+:]; if (!exists $self->{'local-http-servers'}->{$localURL}) { my $busyboxName = - $self->hostIs64Bit() + $self->_hostIs64Bit() ? 'busybox.x86_64' : 'busybox.i586'; my $busybox = @@ -859,7 +859,7 @@ sub startLocalURLServersAsNeeded return; } -sub setupStage1A +sub _setupStage1A { my $self = shift; @@ -878,47 +878,32 @@ sub setupStage1A $stage1cDir, $!); } - $self->stage1A_createBusyboxEnvironment(); - $self->stage1A_copyPrerequiredFiles(); - $self->stage1A_copyTrustedPackageKeys(); - $self->stage1A_createRequiredFiles(); + $self->_stage1A_createBusyboxEnvironment(); + $self->_stage1A_copyPrerequiredFiles(); + $self->_stage1A_copyTrustedPackageKeys(); + $self->_stage1A_createRequiredFiles(); return; } -sub stage1A_createBusyboxEnvironment +sub _stage1A_createBusyboxEnvironment { my $self = shift; # copy busybox and all required binaries into stage1a-dir: vlog(1, "creating busybox-environment..."); - my $busyboxName = $self->hostIs64Bit() ? 'busybox.x86_64' : 'busybox.i586'; - copyFile( - "$openslxConfig{'base-path'}/share/busybox/$busyboxName", - "$self->{stage1aDir}/bin", 'busybox' - ); - - # determine all required libraries and copy those, too: - vlog(1, _tr("calling slxldd for $busyboxName")); - my $slxlddCmd - = "slxldd $openslxConfig{'base-path'}/share/busybox/$busyboxName"; - vlog(2, "executing: $slxlddCmd"); - my $requiredLibsStr = `$slxlddCmd`; - if ($?) { - die _tr( - "slxldd couldn't determine the libs required by busybox! (%s)", $? - ); - } - chomp $requiredLibsStr; - vlog(2, "slxldd results:\n$requiredLibsStr"); + my $busyboxName = $self->_hostIs64Bit() ? 'busybox.x86_64' : 'busybox.i586'; + my $requiredLibs = copyBinaryWithRequiredLibs({ + 'binary' => "$openslxConfig{'base-path'}/share/busybox/$busyboxName", + 'targetFolder' => "$self->{stage1aDir}/bin", + 'libTargetFolder' => "$self->{stage1aDir}", + 'targetName' => 'busybox', + }); my $libcFolder; - foreach my $lib (split "\n", $requiredLibsStr) { - vlog(3, "copying lib '$lib'"); - my $libDir = dirname($lib); - copyFile($lib, "$self->{stage1aDir}$libDir"); + foreach my $lib (split "\n", $requiredLibs) { if ($lib =~ m[/libc.so.\d\s*$]) { # note target folder of libc, as we need to copy the resolver libs # into the same place: - $libcFolder = $libDir; + $libcFolder = dirname($lib); } } @@ -928,7 +913,7 @@ sub stage1A_createBusyboxEnvironment foreach my $linkTarget (split "\n", $links) { linkFile('/bin/busybox', "$self->{stage1aDir}/$linkTarget"); } - if ($self->hostIs64Bit()) { + if ($self->_hostIs64Bit()) { if (!-e "$self->{stage1aDir}/lib64") { linkFile('/lib', "$self->{stage1aDir}/lib64"); } @@ -937,11 +922,11 @@ sub stage1A_createBusyboxEnvironment } } - $self->stage1A_setupResolver($libcFolder); + $self->_stage1A_setupResolver($libcFolder); return; } -sub stage1A_setupResolver +sub _stage1A_setupResolver { my $self = shift; my $libcFolder = shift; @@ -951,9 +936,11 @@ sub stage1A_setupResolver $libcFolder = '/lib'; } - copyFile('/etc/resolv.conf', "$self->{stage1aDir}/etc"); - copyFile("$libcFolder/libresolv*", "$self->{stage1aDir}$libcFolder"); - copyFile("$libcFolder/libnss_dns*", "$self->{stage1aDir}$libcFolder"); + copyFile('/etc/resolv.conf', "$self->{stage1aDir}/etc"); + spitFile("$self->{stage1aDir}/etc/hosts", '127.0.0.1 localhost'); + copyFile("$libcFolder/libresolv*", "$self->{stage1aDir}$libcFolder"); + copyFile("$libcFolder/libnss_dns*", "$self->{stage1aDir}$libcFolder"); + copyFile("$libcFolder/libnss_files*", "$self->{stage1aDir}$libcFolder"); my $stage1cDir = "$self->{'stage1aDir'}/$self->{'stage1bSubdir'}/$self->{'stage1cSubdir'}"; @@ -961,7 +948,7 @@ sub stage1A_setupResolver return; } -sub stage1A_copyPrerequiredFiles +sub _stage1A_copyPrerequiredFiles { my $self = shift; @@ -984,7 +971,7 @@ sub stage1A_copyPrerequiredFiles return; } -sub stage1A_copyTrustedPackageKeys +sub _stage1A_copyTrustedPackageKeys { my $self = shift; @@ -1016,7 +1003,7 @@ sub stage1A_copyTrustedPackageKeys return; } -sub stage1A_createRequiredFiles +sub _stage1A_createRequiredFiles { my $self = shift; @@ -1045,19 +1032,22 @@ sub stage1A_createRequiredFiles return; } -sub setupStage1B +sub _setupStage1B { my $self = shift; vlog(1, "setting up stage1b for $self->{'vendor-os-name'}..."); - $self->stage1B_chrootAndBootstrap(); + $self->_stage1B_chrootAndBootstrap(); return; } -sub stage1B_chrootAndBootstrap +sub _stage1B_chrootAndBootstrap { my $self = shift; + # give packager a chance to copy required files into stage1a-folder: + $self->{packager}->prepareBootstrap($self->{stage1aDir}); + chrootInto($self->{stage1aDir}); # chdir into slxbootstrap, as we want to drop packages into there: @@ -1066,18 +1056,17 @@ sub stage1B_chrootAndBootstrap "unable to chdir into '%s' (%s)\n", "/$self->{stage1bSubdir}", $! ); - # fetch prerequired packages: - $self->{'baseURLs'} - = $self->sortRepositoryURLs( - $self->{'distro-info'}->{repository}->{base} - ); + # fetch prerequired packages and use them to bootstrap the packager: + $self->{'baseURLs'} = $self->_sortRepositoryURLs( + $self->{'distro-info'}->{repository}->{base} + ); $self->{'baseURL-index'} = 0; my @pkgs = string2Array($self->{'distro-info'}->{'prereq-packages'}); - my @prereqPkgs = $self->downloadBaseFiles(\@pkgs); - $self->{packager}->unpackPackages(\@prereqPkgs); + my @prereqPkgs = $self->_downloadBaseFiles(\@pkgs); + $self->{packager}->bootstrap(\@prereqPkgs); @pkgs = string2Array($self->{'distro-info'}->{'bootstrap-prereq-packages'}); - my @bootstrapPrereqPkgs = $self->downloadBaseFiles(\@pkgs); + my @bootstrapPrereqPkgs = $self->_downloadBaseFiles(\@pkgs); $self->{'bootstrap-prereq-packages'} = \@bootstrapPrereqPkgs; @pkgs = string2Array($self->{'distro-info'}->{'bootstrap-packages'}); @@ -1088,22 +1077,22 @@ sub stage1B_chrootAndBootstrap ->{$self->{distro}->{'meta-packager-type'}} ) ); - my @bootstrapPkgs = $self->downloadBaseFiles(\@pkgs); + my @bootstrapPkgs = $self->_downloadBaseFiles(\@pkgs); my @allPkgs = (@prereqPkgs, @bootstrapPrereqPkgs, @bootstrapPkgs); $self->{'bootstrap-packages'} = \@allPkgs; return; } -sub setupStage1C +sub _setupStage1C { my $self = shift; vlog(1, "setting up stage1c for $self->{'vendor-os-name'}..."); - $self->stage1C_chrootAndInstallBasicVendorOS(); + $self->_stage1C_chrootAndInstallBasicVendorOS(); return; } -sub stage1C_chrootAndInstallBasicVendorOS +sub _stage1C_chrootAndInstallBasicVendorOS { my $self = shift; @@ -1121,14 +1110,14 @@ sub stage1C_chrootAndInstallBasicVendorOS # import any additional trusted package keys to rpm-DB: my $keyDir = "/trusted-package-keys"; my $keyDirDH; - opendir($keyDirDH, $keyDir) - or die _tr("unable to opendir '%s' (%s)\n", $keyDir, $!); - my @keyFiles - = map { "$keyDir/$_" } - grep { $_ !~ m[^(\.\.?|pubring.gpg)$] } - readdir($keyDirDH); - closedir($keyDirDH); - $self->{packager}->importTrustedPackageKeys(\@keyFiles, $stage1cDir); + if (opendir($keyDirDH, $keyDir)) { + my @keyFiles + = map { "$keyDir/$_" } + grep { $_ !~ m[^(\.\.?|pubring.gpg)$] } + readdir($keyDirDH); + closedir($keyDirDH); + $self->{packager}->importTrustedPackageKeys(\@keyFiles, $stage1cDir); + } # install all other bootstrap packages $self->{packager}->installPackages( @@ -1137,7 +1126,7 @@ sub stage1C_chrootAndInstallBasicVendorOS return; } -sub stage1C_cleanupBasicVendorOS +sub _stage1C_cleanupBasicVendorOS { my $self = shift; @@ -1158,7 +1147,7 @@ sub stage1C_cleanupBasicVendorOS return; } -sub setupStage1D +sub _setupStage1D { my $self = shift; @@ -1166,13 +1155,13 @@ sub setupStage1D chrootInto($self->{'vendor-os-path'}); - $self->stage1D_setupPackageSources(); - $self->stage1D_updateBasicVendorOS(); - $self->stage1D_installPackageSelection(); + $self->_stage1D_setupPackageSources(); + $self->_stage1D_updateBasicVendorOS(); + $self->_stage1D_installPackageSelection(); return; } -sub updateStage1D +sub _updateStage1D { my $self = shift; @@ -1180,11 +1169,11 @@ sub updateStage1D chrootInto($self->{'vendor-os-path'}); - $self->stage1D_updateBasicVendorOS(); + $self->_stage1D_updateBasicVendorOS(); return; } -sub startChrootedShellInStage1D +sub _startChrootedShellInStage1D { my $self = shift; @@ -1205,7 +1194,7 @@ sub startChrootedShellInStage1D return; } -sub callChrootedFunctionInStage1D +sub _callChrootedFunctionInStage1D { my $self = shift; my $function = shift; @@ -1222,7 +1211,7 @@ sub callChrootedFunctionInStage1D return; } -sub stage1D_setupPackageSources +sub _stage1D_setupPackageSources { my $self = shift; @@ -1239,7 +1228,7 @@ sub stage1D_setupPackageSources return; } -sub stage1D_updateBasicVendorOS +sub _stage1D_updateBasicVendorOS { my $self = shift; @@ -1251,7 +1240,7 @@ sub stage1D_updateBasicVendorOS return; } -sub stage1D_installPackageSelection +sub _stage1D_installPackageSelection { my $self = shift; @@ -1288,7 +1277,7 @@ sub stage1D_installPackageSelection return; } -sub clone_fetchSource +sub _clone_fetchSource { my $self = shift; my $source = shift; @@ -1321,7 +1310,7 @@ sub clone_fetchSource return; } -sub clone_determineIncludeExcludeList +sub _clone_determineIncludeExcludeList { my $self = shift; @@ -1339,12 +1328,12 @@ sub clone_determineIncludeExcludeList ################################################################################ ### utility methods ################################################################################ -sub changePersonalityIfNeeded +sub _changePersonalityIfNeeded { my $self = shift; my $distroName = $self->{distro}->{'base-name'}; - if ($self->hostIs64Bit() && $distroName !~ m[_64]) { + if ($self->_hostIs64Bit() && $distroName !~ m[_64]) { # trying to handle a 32-bit vendor-OS on a 64-bit machine, so we change # the personality accordingly (from 64-bit to 32-bit): my $syscallPH = 'syscall.ph'; @@ -1359,7 +1348,7 @@ sub changePersonalityIfNeeded return; } -sub hostIs64Bit +sub _hostIs64Bit { my $self = shift; @@ -1367,41 +1356,7 @@ sub hostIs64Bit return ($self->{arch} =~ m[64]); } -################################################################################ -### utility functions -################################################################################ -sub string2Array -{ - my $string = shift || ''; - - my @lines = split m[\n], $string; - for my $line (@lines) { - # remove leading and trailing whitespace: - $line =~ s{^\s*(.*?)\s*$}{$1}; - } - - # drop empty lines and comments: - return grep { length($_) > 0 && $_ !~ m[^\s*#]; } @lines; -} - -sub chrootInto -{ - my $osDir = shift; - - vlog(2, "chrooting into $osDir..."); - chdir $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, $!); - - $ENV{PATH} = "/bin:/sbin:/usr/bin:/usr/sbin"; - return; -} - 1; -################################################################################ =pod diff --git a/installer/OpenSLX/OSSetup/MetaPackager/apt.pm b/installer/OpenSLX/OSSetup/MetaPackager/apt.pm new file mode 100644 index 00000000..65a1d8e7 --- /dev/null +++ b/installer/OpenSLX/OSSetup/MetaPackager/apt.pm @@ -0,0 +1,72 @@ +# 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/ +# ----------------------------------------------------------------------------- +# apt.pm +# - provides apt-get-specific overrides of the OpenSLX::OSSetup::MetaPackager API. +# ----------------------------------------------------------------------------- +package OpenSLX::OSSetup::MetaPackager::apt; + +use strict; +use warnings; + +use base qw(OpenSLX::OSSetup::MetaPackager::Base); + +use OpenSLX::Basics; +use OpenSLX::Utils; + +################################################################################ +### implementation +################################################################################ +sub new +{ + my $class = shift; + my $self = { + 'name' => 'apt', + }; + return bless $self, $class; +} + +sub initPackageSources +{ + my $self = shift; + + return; +} + +sub setupPackageSource +{ + my $self = shift; + my $repoName = shift; + my $repoInfo = shift; + my $excludeList = shift; + + my $repoSubdir = ''; + if (length($repoInfo->{'repo-subdir'})) { + $repoSubdir = "/$repoInfo->{'repo-subdir'}"; + } + return; +} + +sub installSelection +{ + my $self = shift; + my $pkgSelection = shift; + + return; +} + +sub updateBasicVendorOS +{ + my $self = shift; + + return; +} + +1; \ No newline at end of file diff --git a/installer/OpenSLX/OSSetup/Packager/Base.pm b/installer/OpenSLX/OSSetup/Packager/Base.pm index 3aa8921e..c33b690b 100644 --- a/installer/OpenSLX/OSSetup/Packager/Base.pm +++ b/installer/OpenSLX/OSSetup/Packager/Base.pm @@ -31,13 +31,17 @@ sub new sub initialize { my $self = shift; - my $distro = shift; + my $engine = shift; - $self->{'distro'} = $distro; + $self->{'engine'} = $engine; return; } -sub unpackPackages +sub prepareBootstrap +{ +} + +sub bootstrap { } diff --git a/installer/OpenSLX/OSSetup/Packager/dpkg.pm b/installer/OpenSLX/OSSetup/Packager/dpkg.pm new file mode 100644 index 00000000..cdd55e56 --- /dev/null +++ b/installer/OpenSLX/OSSetup/Packager/dpkg.pm @@ -0,0 +1,98 @@ +# 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/ +# ----------------------------------------------------------------------------- +# rpm.pm +# - provides rpm-specific overrides of the OpenSLX::OSSetup::Packager API. +# ----------------------------------------------------------------------------- +package OpenSLX::OSSetup::Packager::dpkg; + +use strict; +use warnings; + +use base qw(OpenSLX::OSSetup::Packager::Base); + +use OpenSLX::Basics; +use OpenSLX::Utils; + +################################################################################ +### implementation +################################################################################ +sub new +{ + my $class = shift; + my $self = { + 'name' => 'dpkg', + }; + return bless $self, $class; +} + +sub prepareBootstrap +{ + my $self = shift; + my $stage1aDir = shift; + + copyBinaryWithRequiredLibs({ + 'binary' => '/usr/bin/perl', + 'targetFolder' => "$stage1aDir/usr/bin", + 'libTargetFolder' => $stage1aDir, + }); + +} + +sub bootstrap +{ + my $self = shift; + my $pkgs = shift; + + my $debootstrapPkg = $pkgs->[0]; + chdir '..'; + vlog(2, "unpacking debootstrap ..."); + if (slxsystem("ash", "-c", "ar x slxbootstrap/$debootstrapPkg")) { + die _tr("unable to unarchive package '%s' (%s)", $debootstrapPkg, $!); + } + if (slxsystem("ash", "-c", "tar xzf data.tar.gz")) { + die _tr("unable to untar 'data.tar.gz (%s)", $!); + } + if (slxsystem("ash", "-c", "rm -f debian-binary *.tar.gz")) { + die _tr("unable to cleanup package '%s' (%s)", $debootstrapPkg, $!); + } + my $debootstrapCmd = <<" END-OF-HERE"; + /usr/sbin/debootstrap --arch i386 edgy /slxbootstrap/slxfinal http://localhost:5080/srv/ftp/pub/ubuntu + END-OF-HERE + if (slxsystem("ash", "-c", "/bin/ash $debootstrapCmd")) { + die _tr("unable to run debootstrap (%s)", $!); + } + return; +} + +sub installPackages +{ + my $self = shift; + my $pkgs = shift; + my $finalPath = shift; + + return unless defined $pkgs && scalar(@$pkgs); + + if (slxsystem("rpm", "--root=$finalPath", "-ivh", @$pkgs)) { + die _tr("error during package-installation (%s)\n", $!); + } + return; +} + +sub getInstalledPackages +{ + my $self = shift; + + my $rpmCmd = 'rpm -qa --queryformat="%{NAME}\n"'; + my $pkgList = `$rpmCmd`; + return split "\n", $pkgList; +} + +1; diff --git a/installer/OpenSLX/OSSetup/Packager/rpm.pm b/installer/OpenSLX/OSSetup/Packager/rpm.pm index ef254084..0fd502a0 100644 --- a/installer/OpenSLX/OSSetup/Packager/rpm.pm +++ b/installer/OpenSLX/OSSetup/Packager/rpm.pm @@ -32,7 +32,7 @@ sub new return bless $self, $class; } -sub unpackPackages +sub bootstrap { my $self = shift; my $pkgs = shift; -- cgit v1.2.3-55-g7522