From 87afa97f39aad9e27f1116a2821b817208a0875b Mon Sep 17 00:00:00 2001 From: Rafael Garcia-Suarez Date: Wed, 22 Sep 2004 09:28:18 +0000 Subject: A trimmed-down version of the supplementary media handling routine of 10.1 community. It handles only supplementary CDs. --- perl-install/install_any.pm | 56 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/perl-install/install_any.pm b/perl-install/install_any.pm index 65e13c91f..6acf32439 100644 --- a/perl-install/install_any.pm +++ b/perl-install/install_any.pm @@ -307,7 +307,63 @@ sub preConfigureTimezone { add2hash_($o->{timezone}, { UTC => $utc, ntp => $ntp }); } +sub ask_if_suppl_media { + my ($o) = @_; + return $o->ask_yesorno('', N("Do you have a supplementary CD to install?"), 0) ? "CD-ROM" : "None"; +} + sub selectSupplMedia { + my ($o, $suppl_method) = @_; + #- ask whether there are supplementary media + my $prev_asked_medium = $asked_medium; + if ($suppl_method && (my $suppl = ask_if_suppl_media($o)) ne 'None') { + #- translate to method name + $suppl_method = 'cdrom'; + #- by convention, the media names for suppl. CDs match /^\d+s$/ + my $medium_name = (max(map { $_->{medium} =~ /^(\d+)s$/ ? $1 : 0 } values %{$o->{packages}{mediums}}) + 1) . "s"; + local $::isWizard = 0; + my $main_method = $o->{method}; + local $o->{method} = $suppl_method; + (my $cdromdev) = detect_devices::cdroms(); + $o->ask_warn('', N("No device found")), return 'error' if !$cdromdev; + $cdrom = $cdromdev->{device}; + devices::make($cdrom); + ejectCdrom($cdrom); + if ($o->ask_okcancel('', N("Insert the CD"), 1)) { + #- mount suppl CD in /mnt/cdrom to avoid umounting /tmp/image + mountCdrom("/mnt/cdrom", $cdrom); + log::l($@) if $@; + useMedium($medium_name); + + #- probe for an hdlists file and then look for all hdlists listed herein + eval { pkgs::psUsingHdlists($o, $suppl_method, "/mnt/cdrom", $o->{packages}, $medium_name) }; + log::l("psUsingHdlists failed: $@") if $@; + + #- copy latest compssUsers.pl and rpmsrate somewhere locally + getAndSaveFile("/mnt/cdrom/media/media_info/compssUsers.pl", "/tmp/compssUsers.pl"); + getAndSaveFile("/mnt/cdrom/media/media_info/rpmsrate", "/tmp/rpmsrate"); + + #- umount supplementary CD. Will re-ask for it later + getFile("XXX"); #- close still opened filehandles + log::l("Umounting suppl. CD, back to medium 1"); + eval { fs::umount("/mnt/cdrom") }; + #- re-mount CD 1 if this was a cdrom install + if ($main_method eq 'cdrom') { + eval { + my $dev = detect_devices::tryOpen($cdrom); + ioctl($dev, c::CDROMEJECT(), 1); + }; + $o->ask_warn('', N("Insert the CD 1 again")); + mountCdrom("/tmp/image", $cdrom); + log::l($@) if $@; + $asked_medium = 1; + } + } + } else { + $suppl_method = ''; + } + useMedium($prev_asked_medium); #- back to main medium + return $suppl_method; } sub load_rate_files { -- cgit v1.2.1