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/OpenSLX/OSSetup/Packager/Base.pm | 98 ++++++++++++++++++++++++ src/installer/OpenSLX/OSSetup/Packager/dpkg.pm | 102 +++++++++++++++++++++++++ src/installer/OpenSLX/OSSetup/Packager/rpm.pm | 89 +++++++++++++++++++++ 3 files changed, 289 insertions(+) create mode 100644 src/installer/OpenSLX/OSSetup/Packager/Base.pm create mode 100644 src/installer/OpenSLX/OSSetup/Packager/dpkg.pm create mode 100644 src/installer/OpenSLX/OSSetup/Packager/rpm.pm (limited to 'src/installer/OpenSLX/OSSetup/Packager') diff --git a/src/installer/OpenSLX/OSSetup/Packager/Base.pm b/src/installer/OpenSLX/OSSetup/Packager/Base.pm new file mode 100644 index 00000000..af600b8b --- /dev/null +++ b/src/installer/OpenSLX/OSSetup/Packager/Base.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/ +# ----------------------------------------------------------------------------- +# Base.pm +# - provides empty base of the OpenSLX OSSetup::Packager API. +# ----------------------------------------------------------------------------- +package OpenSLX::OSSetup::Packager::Base; + +use strict; +use warnings; + +our $VERSION = 1.01; # API-version . implementation-version + +use Scalar::Util qw( weaken ); + +use OpenSLX::Basics; + +################################################################################ +### interface methods +################################################################################ +sub new +{ + confess "Creating OpenSLX::OSSetup::Packager::Base-objects directly makes no sense!"; +} + +sub initialize +{ + my $self = shift; + my $engine = shift; + + $self->{'engine'} = $engine; + weaken($self->{'engine'}); + # avoid circular reference between packager and its engine + + return; +} + +sub prepareBootstrap +{ +} + +sub bootstrap +{ +} + +sub importTrustedPackageKeys +{ +} + +sub installPackages +{ +} + +sub getInstalledPackages +{ +} + +1; +################################################################################ + +=pod + +=head1 NAME + +OpenSLX::OSSetup::Packager::Base - the base class for all OSSetup::Packagers + +=head1 SYNOPSIS + + package OpenSLX::OSSetup::Packager::coolnewpkg; + + use vars qw(@ISA $VERSION); + @ISA = ('OpenSLX::OSSetup::Packager::Base'); + $VERSION = 1.01; + + use coolnewpkg; + + sub new + { + my $class = shift; + my $self = {}; + return bless $self, $class; + } + + # override all methods of OpenSLX::OSSetup::Packager::Base in order to + # implement the support for a new packager + ... + +I> + +=cut diff --git a/src/installer/OpenSLX/OSSetup/Packager/dpkg.pm b/src/installer/OpenSLX/OSSetup/Packager/dpkg.pm new file mode 100644 index 00000000..94aff9c6 --- /dev/null +++ b/src/installer/OpenSLX/OSSetup/Packager/dpkg.pm @@ -0,0 +1,102 @@ +# 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 $arch = $self->{engine}->{'distro-info'}->{arch}; + my $releaseName = $self->{engine}->{'distro-info'}->{'release-name'}; + my $baseURL = $self->{engine}->{baseURLs}->[0]; + my $debootstrapCmd = unshiftHereDoc(<<" END-OF-HERE"); + /usr/sbin/debootstrap --arch $arch $releaseName \\ + /slxbootstrap/slxfinal $baseURL + END-OF-HERE + if (slxsystem("ash", "-c", ". $debootstrapCmd")) { + die _tr("unable to run debootstrap (%s)", $!); + } + return; +} + +sub installPackages +{ + my $self = shift; + my $pkgs = shift; + my $finalPath = shift; + + return unless defined $pkgs && @$pkgs; + + if (slxsystem("dpkg", "--root=$finalPath", "--install", @$pkgs)) { + die _tr("error during package-installation (%s)\n", $!); + } + return; +} + +sub getInstalledPackages +{ + my $self = shift; + + my $rpmCmd = 'dpkg-query --showformat "\${package}\n" --show'; + my $pkgList = qx{$rpmCmd}; + return split "\n", $pkgList; +} + +1; diff --git a/src/installer/OpenSLX/OSSetup/Packager/rpm.pm b/src/installer/OpenSLX/OSSetup/Packager/rpm.pm new file mode 100644 index 00000000..8a86a3d2 --- /dev/null +++ b/src/installer/OpenSLX/OSSetup/Packager/rpm.pm @@ -0,0 +1,89 @@ +# 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::rpm; + +use strict; +use warnings; + +use base qw(OpenSLX::OSSetup::Packager::Base); + +use OpenSLX::Basics; + +################################################################################ +### implementation +################################################################################ +sub new +{ + my $class = shift; + my $self = { + 'name' => 'rpm', + }; + return bless $self, $class; +} + +sub bootstrap +{ + my $self = shift; + my $pkgs = shift; + + foreach my $pkg (@$pkgs) { + vlog(2, "unpacking package $pkg..."); + if (slxsystem("ash", "-c", "rpm2cpio $pkg | cpio -i -d -u")) { + die _tr("unable to unpack package <%s> (%s)", $pkg, $!); + } + } + return; +} + +sub importTrustedPackageKeys +{ + my $self = shift; + my $keyFiles = shift; + my $finalPath = shift; + + return unless defined $keyFiles; + + foreach my $keyFile (@$keyFiles) { + vlog(2, "importing package key $keyFile..."); + if (slxsystem("rpm", "--root=$finalPath", "--import", "$keyFile")) { + die _tr("unable to import package key <%s> (%s)\n", $keyFile, $!); + } + } + 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; -- cgit v1.2.3-55-g7522