From 112bbb1bf3d2d7f1fd66fa6f8e558744d0784226 Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Sun, 23 Mar 2008 15:18:42 +0000 Subject: * moved syscall related code into a module of its own right * activated mounting of /proc again in startSession() and finishSession(), this time in a more robust fashion (which tries hard to unmount it again) git-svn-id: http://svn.openslx.org/svn/openslx/openslx/trunk@1677 95ad53e4-c205-0410-b2fa-d234c58c8868 --- installer/OpenSLX/OSSetup/Distro/Base.pm | 67 +++++++++++++++----------------- 1 file changed, 32 insertions(+), 35 deletions(-) (limited to 'installer/OpenSLX/OSSetup/Distro/Base.pm') diff --git a/installer/OpenSLX/OSSetup/Distro/Base.pm b/installer/OpenSLX/OSSetup/Distro/Base.pm index d2931046..39572e5d 100644 --- a/installer/OpenSLX/OSSetup/Distro/Base.pm +++ b/installer/OpenSLX/OSSetup/Distro/Base.pm @@ -20,6 +20,7 @@ our $VERSION = 1.01; # API-version . implementation-version use Fcntl qw(:DEFAULT :flock); use File::Basename; +use File::Path; use OpenSLX::Basics; use OpenSLX::Utils; @@ -126,9 +127,13 @@ sub startSession "slxos-setup::distro::chroot", sub { $self->finishSession(); } ); + # setup a fixed locale environment to avoid warnings about unset locales + # (like for instance shown by apt-get) + $ENV{LC_ALL} = 'POSIX'; + # make sure there's a /dev/zero, /dev/null and /dev/urandom # /dev/urandom for passwd chroot - if (!-e "$osDir/dev" && !mkdir("$osDir/dev")) { + if (!-e "$osDir/dev" && !mkpath("$osDir/dev")) { die _tr("unable to create folder '%s' (%s)\n", "$osDir/dev", $!); } if (!-e "$osDir/dev/zero" && slxsystem("mknod $osDir/dev/zero c 1 5")) { @@ -141,30 +146,36 @@ sub startSession die _tr("unable to create node '%s' (%s)\n", "$osDir/dev/urandom", $!); } - - # fake proc, depending on what is needed ... - if (!-e "$osDir/proc" && !mkdir("$osDir/proc")) { - die _tr("unable to create folder '%s' (%s)\n", "$osDir/proc", $!); - } - if (!-e "$osDir/proc/cpuinfo" && slxsystem("cp /proc/cpuinfo $osDir/proc/")) { - die _tr("unable to copy file '%s' (%s)\n", "/proc/cpuinfo", $!); - } - # TODO: alternatively, we could mount proc, but that causes problems - # when we are not able to umount it properly (which may happen - # if 'umount' is not available in the chroot!) - # - # mount /proc -# if (!-e "$osDir/proc") { -# slxsystem("mkdir -p $osDir/proc"); -# } -# if (slxsystem("mount -t proc proc $osDir/proc 2>/dev/null")) { -# die _tr("unable to mount '%s' (%s)\n", "$osDir/proc", $!); -# } - # enter chroot jail chrootInto($osDir); $ENV{PATH} = join(':', @{$self->getDefaultPathList()}); + # mount /proc (if we have 'mount' available) + if (qx{which mount 2>/dev/null}) { + if (!-e "$osDir/proc" && !mkpath("$osDir/proc")) { + die _tr("unable to create folder '%s' (%s)\n", "$osDir/proc", $!); + } + if (slxsystem("mount -t proc proc '/proc'")) { + warn _tr("unable to mount '%s' (%s)\n", "$osDir/proc", $!); + } + } + + return; +} + +sub finishSession +{ + my $self = shift; + + removeCleanupFunction('slxos-setup::distro::chroot'); + + # umount /proc (if we have 'umount' available) + if (qx{which umount 2>/dev/null}) { + if (slxsystem("umount /proc")) { + warn _tr("unable to umount '%s' (%s)\n", "/proc", $!); + } + } + return; } @@ -186,20 +197,6 @@ sub getDefaultPathList ) ]; } -sub finishSession -{ - my $self = shift; - - removeCleanupFunction('slxos-setup::distro::chroot'); - - # unmount /proc -# if (slxsystem('ash', '-c', 'umount /proc 2>/dev/null')) { -# die _tr("unable to unmount '%s' (%s)\n", "/proc", $!); -# } - - return; -} - sub updateDistroConfig { if (slxsystem("ldconfig")) { -- cgit v1.2.3-55-g7522