diff options
Diffstat (limited to 'src/installer/OpenSLX/OSSetup/Packager/dpkg.pm')
-rw-r--r-- | src/installer/OpenSLX/OSSetup/Packager/dpkg.pm | 102 |
1 files changed, 102 insertions, 0 deletions
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; |