From 550e3a19e2949e5814d8fed35df315ad1c1fa78d Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Sat, 17 Mar 2007 23:02:57 +0000 Subject: * added support for switch personality from 64-bit to 32-bit in order to be able to install a 32-bit vendor-OS on a 64-bit host. This fixes the problem Dirk has experienced (when trying to install 32-bit Fedora-6 on a 64-bit system). git-svn-id: http://svn.openslx.org/svn/openslx/trunk@785 95ad53e4-c205-0410-b2fa-d234c58c8868 --- installer/OpenSLX/OSSetup/Engine.pm | 55 +++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/installer/OpenSLX/OSSetup/Engine.pm b/installer/OpenSLX/OSSetup/Engine.pm index 8959a8b5..2f4551af 100644 --- a/installer/OpenSLX/OSSetup/Engine.pm +++ b/installer/OpenSLX/OSSetup/Engine.pm @@ -26,37 +26,37 @@ use vars qw(%supportedDistros); %supportedDistros = ( 'debian-3.1' - => { module => 'Debian_3_1', support => 'clone', }, + => { module => 'Debian_3_1', support => 'clone' }, 'debian-4.0' - => { module => 'Debian_4_0', support => 'clone', }, + => { module => 'Debian_4_0', support => 'clone' }, 'fedora-6' - => { module => 'Fedora_6', support => 'clone,install', }, + => { module => 'Fedora_6', support => 'clone,install' }, 'fedora-6-x86_64' - => { module => 'Fedora_6_x86_64', support => 'clone', }, + => { module => 'Fedora_6_x86_64', support => 'clone' }, 'gentoo-2005.1' - => { module => 'Gentoo_2005_1', support => 'clone', }, + => { module => 'Gentoo_2005_1', support => 'clone' }, 'gentoo-2006.1' - => { module => 'Gentoo_2006_1', support => 'clone', }, + => { module => 'Gentoo_2006_1', support => 'clone' }, 'mandriva-2007.0' - => { module => 'Mandriva_2007_0', support => 'clone', }, + => { module => 'Mandriva_2007_0', support => 'clone' }, 'suse-9.3' - => { module => 'SUSE_9_3', support => 'clone', }, + => { module => 'SUSE_9_3', support => 'clone' }, 'suse-10.0' - => { module => 'SUSE_10_0', support => 'clone', }, + => { module => 'SUSE_10_0', support => 'clone' }, 'suse-10.0-x86_64' - => { module => 'SUSE_10_0_x86_64', support => 'clone', }, + => { module => 'SUSE_10_0_x86_64', support => 'clone' }, 'suse-10.1' - => { module => 'SUSE_10_1', support => 'clone,install', }, + => { module => 'SUSE_10_1', support => 'clone,install' }, 'suse-10.1-x86_64' - => { module => 'SUSE_10_1_x86_64', support => 'clone', }, + => { module => 'SUSE_10_1_x86_64', support => 'clone' }, 'suse-10.2' - => { module => 'SUSE_10_2', support => 'clone,install', }, + => { module => 'SUSE_10_2', support => 'clone,install' }, 'suse-10.2-x86_64' - => { module => 'SUSE_10_2_x86_64', support => 'clone,install', }, + => { module => 'SUSE_10_2_x86_64', support => 'clone,install' }, 'ubuntu-6.06' - => { module => 'Ubuntu_6_06', support => 'clone', }, + => { module => 'Ubuntu_6_06', support => 'clone' }, 'ubuntu-6.10' - => { module => 'Ubuntu_6_10', support => 'clone', }, + => { module => 'Ubuntu_6_10', support => 'clone' }, ); ################################################################################ @@ -159,12 +159,14 @@ sub installVendorOS $self->setupStage1A(); executeInSubprocess( sub { # some tasks that involve a chrooted environment: + changePersonalityIfNeeded($self->{distro}->{'base-name'}); $self->setupStage1B(); $self->setupStage1C(); }); $self->stage1C_cleanupBasicVendorOS(); executeInSubprocess( sub { # another task that involves a chrooted environment: + changePersonalityIfNeeded($self->{distro}->{'base-name'}); $self->setupStage1D(); }); slxsystem("touch $installInfoFile"); @@ -243,7 +245,10 @@ sub updateVendorOS die _tr("can't update vendor-OS '%s', since it doesn't exist!\n", $self->{'vendor-os-path'}); } - $self->updateStage1D(); + executeInSubprocess( sub { + changePersonalityIfNeeded($self->{distro}->{'base-name'}); + $self->updateStage1D(); + }); vlog 0, _tr("Vendor-OS <%s> updated succesfully.\n", $self->{'vendor-os-name'}); } @@ -820,6 +825,22 @@ retry: return @foundFiles; } +sub changePersonalityIfNeeded { + my $distroName = shift; + + my $arch = `uname -m`; + if ($arch =~ m[64] && $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): + require 'syscall.ph' + or die _tr("unable to load '%s'\n", 'syscall.ph'); + require 'linux/personality.ph' + or die _tr("unable to load '%s'\n", 'linux/personality.ph'); + no strict; + syscall &SYS_personality, PER_LINUX32(); + } +} + 1; ################################################################################ -- cgit v1.2.3-55-g7522