From e2cbffc6422fc59ee624c2c399e79109c21c7cc4 Mon Sep 17 00:00:00 2001 From: Pascal Rigaux Date: Tue, 14 Mar 2000 09:25:40 +0000 Subject: no_comment --- Makefile | 8 +++--- docs/TODO | 2 ++ make_boot_img | 29 +++++++++++--------- perl-install/ChangeLog | 26 ++++++++++++++++++ perl-install/detect_devices.pm | 5 ++-- perl-install/fs.pm | 45 ++++++++++++++++++++++--------- perl-install/fsedit.pm | 8 ++++-- perl-install/ftp.pm | 2 +- perl-install/http.pm | 2 +- perl-install/install2.pm | 12 ++++++--- perl-install/install_any.pm | 4 +-- perl-install/install_steps.pm | 9 +++++++ perl-install/install_steps_gtk.pm | 2 +- perl-install/install_steps_interactive.pm | 9 +++---- perl-install/interactive_gtk.pm | 19 ++++++++----- perl-install/keyboard.pm | 2 +- perl-install/loopback.pm | 29 ++++++++++++++++++-- perl-install/modules.pm | 2 +- perl-install/mouse.pm | 17 +++++++++--- perl-install/my_gtk.pm | 2 ++ perl-install/partition_table_raw.pm | 2 ++ perl-install/pkgs.pm | 14 +++++++--- perl-install/raid.pm | 3 ++- perl-install/timezone.pm | 1 - tools/Makefile | 4 +-- 25 files changed, 190 insertions(+), 68 deletions(-) diff --git a/Makefile b/Makefile index b99b04750..e96c8c057 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ BOOT_RDZ = $(BOOT_IMG:%.img=%.rdz) BINS = install/install install/full-install install/local-install install/installinit/init DIRS = tools install install/installinit perl-install ifeq (i386,$(ARCH)) -DIRS += lnx4win +#DIRS += lnx4win endif ROOTDEST = /export @@ -26,7 +26,7 @@ UPLOAD_DEST_CONTRIB = $(UPLOAD_DEST_)/contrib AUTOBOOT = $(ROOTDEST)/dosutils/autoboot/mdkinst -.PHONY: dirs $(FLOPPY_IMG) install +.PHONY: dirs $(FLOPPY_IMG) install network_ks.rdz pcmcia_ks.rdz install: build autoboot for i in images misc Mandrake Mandrake/base; do install -d $(ROOTDEST)/$$i ; done @@ -59,7 +59,9 @@ endif dirs: for i in $(DIRS); do make -C $$i; done -$(BOOT_RDZ): dirs modules +network_ks.rdz pcmcia_ks.rdz: %_ks.rdz: %.rdz + +network.rdz pcmcia.rdz hd.rdz cdrom.rdz: dirs modules ./make_boot_img $@ $(@:%.rdz=%) $(BOOT_IMG): %.img: %.rdz diff --git a/docs/TODO b/docs/TODO index 3a9a5cc0e..8f9e68d25 100644 --- a/docs/TODO +++ b/docs/TODO @@ -122,6 +122,8 @@ rpmdrake proposition for cdrom labels use option nocheck to mount for upgrades -fixes needing thinking----------------------------------------------------------------- +ask_many_from_list can't keyboard scroll + with /usr, /usr/local and /usr/local/e mount points i get an error at step mounting local filesystems ask network configuration only if NIC found? diff --git a/make_boot_img b/make_boot_img index aee24c284..ff3e84e71 100755 --- a/make_boot_img +++ b/make_boot_img @@ -91,16 +91,19 @@ F1 help.msg F2 boot.msg label linux kernel vmlinuz - append $ks ramdisk=32000 initrd=$type.rdz mdkinst $type -label expert + append $ks ramdisk_size=32000 initrd=$type.rdz $type +label text + kernel vmlinuz + append $ks ramdisk_size=32000 initrd=$type.rdz $type text +label patch kernel vmlinuz - append $ks expert ramdisk=32000 initrd=$type.rdz mdkinst $type -label ks + append $ks ramdisk_size=32000 initrd=$type.rdz $type patch +label expert kernel vmlinuz - append ks ramdisk=32000 initrd=$type.rdz mdkinst $type + append $ks ramdisk_size=32000 initrd=$type.rdz $type expert label rescue kernel vmlinuz - append rescue root=/dev/fd0 load_ramdisk=1 prompt_ramdisk=1 + append $ks ramdisk_size=32000 initrd=$type.rdz $type rescue rw "); _ "cp -f $instdir/installinit/ks.cfg $mnt 2>/dev/null"; _ "sync"; @@ -120,8 +123,8 @@ sub boot_img_alpha { mkdir "$mnt/etc", 0777; output("$mnt/etc/aboot.conf", -"0:vmlinux.gz initrd=$type.rdz mdkinst rw ramdisk=32000 $type -1:vmlinux.gz initrd=$type.rdz mdkinst rw ramdisk=32000 text $type +"0:vmlinux.gz initrd=$type.rdz rw ramdisk_size=32000 $type +1:vmlinux.gz initrd=$type.rdz rw ramdisk_size=32000 text $type "); _ "sync"; _ "df $mnt"; @@ -167,19 +170,19 @@ image=/$boot/vmlinux.gz label=linux alias=install initrd=/$boot/live.rdz - append=mdkinst ramdisk=32000 + append=ramdisk_size=32000 image=/$boot/vmlinux.gz label=text initrd=/$boot/live.rdz - append=mdkinst ramdisk=32000 text + append=ramdisk_size=32000 text image=/$boot/vmlinux.gz label=expert initrd=/$boot/live.rdz - append=mdkinst ramdisk=32000 expert + append=ramdisk_size=32000 expert image=/$boot/vmlinux.gz label=ks initrd=/$boot/live.rdz - append=mdkinst ramdisk=32000 ks + append=ramdisk_size=32000 ks "); output("$dir/$boot/README", " @@ -219,7 +222,7 @@ read-write image=/vmlinux.gz label=linux initrd=/$type.rdz - append=mdkinst ramdisk=32000 $type + append=ramdisk_size=32000 $type "); _ "genromfs -d $dir -f /dev/ram -A 2048,/.. -a 512 -V \'DrakX boot disk\'"; _ "$sudo mount -t romfs /dev/ram $mnt"; diff --git a/perl-install/ChangeLog b/perl-install/ChangeLog index 7237ea35d..042d899e3 100644 --- a/perl-install/ChangeLog +++ b/perl-install/ChangeLog @@ -1,3 +1,21 @@ +2000-03-13 Pixel + + * detect_devices.pm (floppies): don't return hash but the device name + +2000-03-12 Pixel + + * install_steps_interactive.pm (choosePackages): compute the + max_size very simply (sum of all package sizes), otherwise too costly + + * pkgs.pm (install): call cleanHeaders at the end + * pkgs.pm (cleanHeaders): created + + * install2.pm (miscellaneous): /etc/msec/init.sh is now + /usr/sbin/msec (yoann thanks for not telling :pp) + + * pkgs.pm (install): remove the $prefix of mountpoints for not + enough room to install error message + 2000-03-13 François Pons * pkgs.pm, install_any.pm: small correction for multiple media @@ -11,6 +29,14 @@ 2000-03-11 Pixel + * my_gtk.pm (_create_window): add callback on focus to + ensure_focus. The result is no more 3 focus states with 2 buttons. + + * interactive_gtk.pm (ask_from_treelistW): better keyboard handling + + * raid.pm (make): check the result of mkraid. Suggest raidtools + are missing in standalone diskdrake + * devices.pm (set_loop): created, searches for an available loopback and sets the file to it diff --git a/perl-install/detect_devices.pm b/perl-install/detect_devices.pm index 484a4dfe8..2be192599 100644 --- a/perl-install/detect_devices.pm +++ b/perl-install/detect_devices.pm @@ -50,9 +50,10 @@ sub cdroms() { @l; } sub floppies() { - (grep { tryOpen($_) } qw(fd0 fd1)), - (grep { $_->{type} eq 'fd' } get()); + my @ide = map { $_->{device} } grep { $_->{type} eq 'fd' } get() and modules::load("ide-floppy"); + (grep { tryOpen($_) } qw(fd0 fd1)), @ide; } +#- example ls120, model = "LS-120 SLIM 02 UHD Floppy" sub isZipDrive() { $_[0]->{info} =~ /ZIP\s+\d+/ } #- accept ZIP 100, untested for bigger ZIP drive. #-sub isJazzDrive() { $_[0]->{info} =~ /JAZZ?\s+/ } #- untested. diff --git a/perl-install/fs.pm b/perl-install/fs.pm index 7fc15dcec..855fb5fd0 100644 --- a/perl-install/fs.pm +++ b/perl-install/fs.pm @@ -135,12 +135,16 @@ sub format_part { sub formatMount_part { my ($part, $raid, $fstab, $prefix, $callback) = @_; - if (my $p = up_mount_point($part->{mntpoint}, $fstab)) { - formatMount_part($p, $raid, $fstab, $prefix, $callback); - } + log::l("formatMount_part: $part->{mntpoint}\n"); + if (isLoopback($part)) { formatMount_part($part->{device}, $raid, $fstab, $prefix, $callback); } + if (my $p = up_mount_point($part->{mntpoint}, $fstab)) { + formatMount_part($p, $raid, $fstab, $prefix, $callback) unless loopback::carryRootLoopback($part); + } + + log::l("formatMount_part: $part->{mntpoint} really\n"); if ($part->{toFormat}) { $callback->($part) if $callback; @@ -153,6 +157,9 @@ sub formatMount_all { my ($raid, $fstab, $prefix, $callback) = @_; formatMount_part($_, $raid, $fstab, $prefix, $callback) foreach sort { isLoopback($a) ? 1 : -1 } grep { $_->{mntpoint} } @$fstab; + + #- ensure the link is there + loopback::carryRootCreateSymlink($_, $prefix) foreach @$fstab; } sub mount($$$;$) { @@ -202,7 +209,10 @@ sub umount($) { sub mount_part($;$$) { my ($part, $prefix, $rdonly) = @_; - $part->{isMounted} and return; + #- root carrier's link can't be mounted + loopback::carryRootCreateSymlink($part, $prefix); + + return if $part->{isMounted}; unless ($::testing) { if (isSwap($part)) { @@ -210,11 +220,15 @@ sub mount_part($;$$) { } else { $part->{mntpoint} or die "missing mount point"; - eval { modules::load('loop') } if isLoopback($part); - $part->{real_device} = devices::set_loop($prefix . loopback::file($part)) || die if isLoopback($part); - local $part->{device} = $part->{real_device} if isLoopback($part); - - mount(devices::make($part->{device}), ($prefix || '') . $part->{mntpoint}, type2fs($part->{type}), $rdonly); + my $dev = $part->{device}; + my $mntpoint = ($prefix || '') . $part->{mntpoint}; + if (isLoopback($part)) { + eval { modules::load('loop') }; + $dev = $part->{real_device} = devices::set_loop($prefix . loopback::file($part)) || die; + } elsif (loopback::carryRootLoopback($part)) { + $mntpoint = "/initrd/loopfs"; + } + mount(devices::make($dev), $mntpoint, type2fs($part->{type}), $rdonly); } } $part->{isMounted} = $part->{isFormatted} = 1; #- assume that if mount works, partition is formatted @@ -228,6 +242,8 @@ sub umount_part($;$) { unless ($::testing) { if (isSwap($part)) { swap::swapoff($part->{device}); + } elsif (loopback::carryRootLoopback($part)) { + umount("/initrd/loopfs"); } else { umount(($prefix || '') . $part->{mntpoint} || devices::make($part->{device})); c::del_loop(delete $part->{real_device}) if isLoopback($part); @@ -321,10 +337,15 @@ sub write_fstab($;$$) { isNfs($_) and $dir = '', $options = $_->{options} || 'ro,nosuid,rsize=8192,wsize=8192'; isFat($_) and $options = $_->{options} || "user,exec"; - my $dev = isLoopback($_) ? loopback::file($_) : - $_->{device} =~ /^\// ? $_->{device} : "$dir$_->{device}"; + my $dev = isLoopback($_) ? + ($_->{mntpoint} eq '/' ? "/initrd/loopfs$_->{loopback_file}" : loopback::file($_)) : + ($_->{device} =~ /^\// ? $_->{device} : "$dir$_->{device}"); - add_options($options, "loop") if isLoopback($_); + local $_->{mntpoint} = do { + $passno = 0; + "/initrd/loopfs" } if loopback::carryRootLoopback($_); + + add_options($options, "loop") if isLoopback($_) && !isSwap($_); #- no need for loop option for swap files #- keep in mind the new line for fstab. @new{($_->{mntpoint}, $dev)} = undef; diff --git a/perl-install/fsedit.pm b/perl-install/fsedit.pm index e8b045d04..e45883fd9 100644 --- a/perl-install/fsedit.pm +++ b/perl-install/fsedit.pm @@ -28,6 +28,7 @@ arch() =~ /^sparc/ ? ( { mntpoint => "/", size => 50 << 11, type => 0x83, ratio => 1, maxsize => 300 << 11 }, { mntpoint => "swap", size => 30 << 11, type => 0x82, ratio => 1, maxsize => 250 << 11 }, ), + { mntpoint => "/boot", size => 16 << 11, type => 0x83, ratio => 1, maxsize => 30 << 11 }, { mntpoint => "/usr", size => 200 << 11, type => 0x83, ratio => 6, maxsize =>1500 << 11 }, { mntpoint => "/home", size => 50 << 11, type => 0x83, ratio => 3 }, { mntpoint => "/var", size => 200 << 11, type => 0x83, ratio => 1, maxsize =>1000 << 11 }, @@ -232,6 +233,8 @@ sub has_mntpoint($$) { sub check_mntpoint { my ($mntpoint, $hd, $part, $hds, $loopbackDevice) = @_; + ref $loopbackDevice or undef $loopbackDevice; + $mntpoint eq '' || isSwap($part) || isRAID($part) and return; local $_ = $mntpoint; @@ -248,13 +251,14 @@ sub check_mntpoint { push @seen, $p->{mntpoint} || return; @seen > 1 && $p->{mntpoint} eq $mntpoint and die _("Circular mounts %s\n", join(", ", @seen)); if (my $part = fs::up_mount_point($p->{mntpoint}, $fstab)) { - $check->($part, @seen); + #- '/' carrier is a special case, it will be mounted first + $check->($part, @seen) unless loopback::carryRootLoopback($p); } if (isLoopback($p)) { $check->($p->{device}, @seen); } }; - $check->($fake_part); + $check->($fake_part) unless $mntpoint eq '/' && $loopbackDevice; #- '/' is a special case, no loop check #- if ($part->{start} + $part->{size} > 1024 * $hd->cylinder_size() && arch() =~ /i386/) { #- die "/boot ending on cylinder > 1024" if $mntpoint eq "/boot"; diff --git a/perl-install/ftp.pm b/perl-install/ftp.pm index 350619c23..d1a7ac241 100644 --- a/perl-install/ftp.pm +++ b/perl-install/ftp.pm @@ -50,7 +50,7 @@ sub new { wantarray ? @l : $l[0]; } -sub getFile($) { +sub getFile { my $f = shift; my ($ftp, $retr) = new(@_ ? @_ : fromEnv); $$retr->close if $$retr; diff --git a/perl-install/http.pm b/perl-install/http.pm index 9da302513..8797b9e39 100644 --- a/perl-install/http.pm +++ b/perl-install/http.pm @@ -8,7 +8,7 @@ use network; my $sock; -sub getFile($) { +sub getFile { local($^W) = 0; my ($host, $port, $path) = $ENV{URLPREFIX} =~ m,^http://([^/:]+)(?::(\d+))?(/\S*)?$,; diff --git a/perl-install/install2.pm b/perl-install/install2.pm index e658953dd..8e7390bca 100644 --- a/perl-install/install2.pm +++ b/perl-install/install2.pm @@ -58,7 +58,7 @@ my (%installSteps, @orderedInstallSteps); configurePrinter => [ __("Configure printer"), 1, 0, '', "doInstallStep" ], setRootPassword => [ __("Set root password"), 1, 1, '', "formatPartitions" ], addUser => [ __("Add a user"), 1, 1, '', "doInstallStep" ], -arch() =~ /alpha/ ? ( +arch() !~ /alpha/ ? ( createBootdisk => [ __("Create a bootdisk"), 1, 0, '', "doInstallStep" ], ) : (), setupBootloader => [ __("Install bootloader"), 1, 1, '', "doInstallStep" ], @@ -372,7 +372,7 @@ sub doInstallStep { $o->beforeInstallPackages; $o->installPackages($o->{packages}); - $o->afterInstallPackages; + $o->afterInstallPackages; } #------------------------------------------------------------------------------ sub miscellaneous { @@ -386,10 +386,16 @@ sub miscellaneous { TYPE => $o->{installClass}, SECURITY => $o->{security}, }); + + setVarsInSh("$o->{prefix}/etc/sysconfig/usb", { + MOUSE => bool2yesno($o->{mouse}{device} eq "usbmouse"), + KEYBOARD => bool2yesno(int grep { /^keybdev\.c: Adding keyboard/ } detect_devices::syslog()), + }); + install_any::fsck_option(); local $ENV{LILO_PASSWORD} = $o->{lilo}{password}; - run_program::rooted($o->{prefix}, "/etc/security/msec/init.sh", $o->{security}); + run_program::rooted($o->{prefix}, "/usr/sbin/msec", $o->{security}); } 'doInstallStep'; } diff --git a/perl-install/install_any.pm b/perl-install/install_any.pm index 1b908e062..f4840f637 100644 --- a/perl-install/install_any.pm +++ b/perl-install/install_any.pm @@ -82,7 +82,7 @@ sub errorOpeningFile($) { return; } -sub getFile($) { +sub getFile { local $^W = 0; if ($::o->{method} && $::o->{method} eq "ftp") { require ftp; @@ -91,7 +91,7 @@ sub getFile($) { require http; *install_any::getFile = sub { http::getFile($_[0]) or errorOpeningFile($_[0]) }; } else { - *install_any::getFile = sub($) { + *install_any::getFile = sub { open getFile, "/tmp/rhimage/" . relGetFile($_[0]) or return errorOpeningFile($_[0]); *getFile; }; diff --git a/perl-install/install_steps.pm b/perl-install/install_steps.pm index a867b8155..146447a0a 100644 --- a/perl-install/install_steps.pm +++ b/perl-install/install_steps.pm @@ -240,6 +240,14 @@ sub installPackages($$) { #- complete REWORK, TODO and TOCHECK! sub afterInstallPackages($) { my ($o) = @_; + -x "$o->{prefix}/usr/bin/dumpkeys" or die +"Some important packages didn't get installed properly. + +Please switch to console 2 (using ctrl-alt-f2) +and look at the log file /tmp/ddebug.log + +Consoles 1,3,4,7 may also contain interesting information"; + pkgs::done_db(); #- why not? cuz weather is nice today :-) [pixel] @@ -642,6 +650,7 @@ sub setupBootloader($) { silo::install($o->{prefix}, $o->{bootloader}); } else { lilo::install_grub($o->{prefix}, $o->{bootloader}, $o->{fstab}); + lilo::install($o->{prefix}, $o->{bootloader}, $o->{fstab}); } } diff --git a/perl-install/install_steps_gtk.pm b/perl-install/install_steps_gtk.pm index 3533f26da..57424c9ca 100644 --- a/perl-install/install_steps_gtk.pm +++ b/perl-install/install_steps_gtk.pm @@ -459,7 +459,7 @@ sub choosePackagesTree { } &$update_size; } else { - $o->ask_warn('', _("This is a mandatory package, it can't unselected")); + $o->ask_warn('', _("This is a mandatory package, it can't be unselected")); } } }; diff --git a/perl-install/install_steps_interactive.pm b/perl-install/install_steps_interactive.pm index 3fa598da9..832b2c52d 100644 --- a/perl-install/install_steps_interactive.pm +++ b/perl-install/install_steps_interactive.pm @@ -153,7 +153,7 @@ sub selectMouse { [ mouse::serial_ports_names() ])); } - $o->setup_thiskind('serial_usb', !$::expert, 0) if $o->{mouse}{device} eq "usbmouse"; + $o->setup_thiskind('SERIAL_USB', !$::expert, 0) if $o->{mouse}{device} eq "usbmouse"; $o->SUPER::selectMouse; } @@ -218,7 +218,7 @@ sub choosePartitionsToFormat($$) { $o->ask_many_from_list_ref('', _("Choose the partitions you want to format"), [ map { $label{$_} } @l ], [ map { \$_->{toFormat} } @l ]) or die "cancel"; - @l = grep { $_->{toFormat} } @l; + @l = grep { $_->{toFormat} && !isLoopback($_) } @l; $o->ask_many_from_list_ref('', _("Check bad blocks?"), [ map { $label{$_} } @l ], [ map { \$_->{toFormatCheck} } @l ]) or goto &choosePartitionsToFormat if $::expert; @@ -269,10 +269,7 @@ sub choosePackages { $o->chooseGroups($packages, $compssUsers, $compssUsersSorted); - my %save_selected; $save_selected{$_->{file}} = pkgs::packageFlagSelected($_) foreach values %{$packages->[0]}; - pkgs::setSelectedFromCompssList($o->{compssListLevels}, $packages, 1, 0, $o->{installClass}); - my $max_size = pkgs::selectedSize($packages); - pkgs::packageSetFlagSelected($_, $save_selected{$_->{file}}) foreach values %{$packages->[0]}; + my $max_size = int (sum map { pkgs::packageSize($_) } values %{$packages->[0]}); if (!$::beginner && $max_size > $available) { $o->ask_okcancel('', diff --git a/perl-install/interactive_gtk.pm b/perl-install/interactive_gtk.pm index 3a9feefb8..773ad345f 100644 --- a/perl-install/interactive_gtk.pm +++ b/perl-install/interactive_gtk.pm @@ -85,8 +85,7 @@ sub ask_from_treelistW { my $s; $tree->expand($wtree{$s .= "$_$separator"}) foreach split $sep, $root; foreach my $nb (1 .. @$l) { if ($tree->node_nth($nb) == $node) { - $tree->set_focus_row($nb); - Gtk->idle_add(sub { $tree->node_moveto($node, 0, 0.5, 0); 0 }); + $tree->set_focus_row($ndef = $nb); last; } } @@ -117,17 +116,23 @@ sub ask_from_treelistW { $tree->signal_connect(key_press_event => sub { my ($w, $e) = @_; my $c = chr $e->{keyval}; - - if ($e->{keyval} >= 0x100) { - &$leave if $c eq "\r" || $c eq "\x8d"; + $curr or return; + if ($e->{keyval} >= 0x100 ? $c eq "\r" || $c eq "\x8d" : $c eq ' ') { + if ($curr->row->is_leaf) { &$leave } + else { $tree->toggle_expansion($curr) } } 1; }); + $tree->grab_focus; + $tree->set_row_height($tree->style->font->ascent + $tree->style->font->descent + 1); + $w->{rwindow}->show; + if ($wdef) { $tree->select($wdef); + $tree->node_moveto($wdef, 0, 0.5, 0); } - $tree->grab_focus; + $w->main or die "ask_from_list cancel"; } @@ -297,7 +302,7 @@ sub wait_messageW($$$) { @$messages, $w->{wait_messageW} = new Gtk::Label($W))); $w->{rwindow}->set_position('center') if $::isStandalone; - $w->{wait_messageW}->signal_connect(expose_event => sub { print "expose_event\n"; $w->{displayed} = 1 }); + $w->{wait_messageW}->signal_connect(expose_event => sub { $w->{displayed} = 1 }); $w->sync until $w->{displayed}; $w; } diff --git a/perl-install/keyboard.pm b/perl-install/keyboard.pm index 728d25a2d..9d8c51547 100644 --- a/perl-install/keyboard.pm +++ b/perl-install/keyboard.pm @@ -233,7 +233,7 @@ sub write($$;$) { my ($prefix, $keyboard, $isNotDelete) = @_; setVarsInSh("$prefix/etc/sysconfig/keyboard", { KEYTABLE => keyboard2kmap($keyboard), $isNotDelete ? () : (BACKSPACE => "Delete") }); - run_program::rooted($prefix, "dumpkeys > /etc/sysconfig/console/default.kmap") or die "dumpkeys failed"; + run_program::rooted($prefix, "dumpkeys > /etc/sysconfig/console/default.kmap") or log::l("dumpkeys failed"); } sub read($) { diff --git a/perl-install/loopback.pm b/perl-install/loopback.pm index 32bb62b3a..04b3786ae 100644 --- a/perl-install/loopback.pm +++ b/perl-install/loopback.pm @@ -23,6 +23,28 @@ sub loopbacks { map { map { @{$_->{loopback} || []} } partition_table::get_normal_parts($_) } @_; } +sub carryRootLoopback { + my ($part) = @_; + $_->{mntpoint} eq '/' and return 1 foreach @{$part->{loopback} || []}; + 0; +} + +sub carryRootCreateSymlink { + my ($part, $prefix) = @_; + + carryRootLoopback($part) or return; + + my $mntpoint = "$prefix$part->{mntpoint}"; + unless (-e $mntpoint) { + eval { commands::mkdir_("-p", dirname($mntpoint)) }; + #- do non-relative link for install, should be changed to relative link before rebooting + symlink "/initrd/loopfs", $mntpoint; + } + #- indicate kernel to keep initrd + mkdir "$prefix/initrd", 0755; +} + + sub format_part { my ($part, $prefix) = @_; fs::mount_part($part->{device}, $prefix); @@ -37,6 +59,8 @@ sub create { return $f if -e $f; eval { commands::mkdir_("-p", dirname($f)) }; + + log::l("creating loopback file $f"); local *F; open F, ">$f" or die "failed to create loopback file"; @@ -49,8 +73,9 @@ sub create { sub getFree { my ($part, $prefix) = @_; - unless ($part->{freespace}) { - $part->{isFormatted} || !$part->{notFormatted} or return; + if ($part->{isFormatted} || !$part->{notFormatted}) { + $part->{freespace} = $part->{size}; + } elsif (!$part->{freespace}) { isMountableRW($part) or return; my $dir = "/tmp/loopback_tmp"; diff --git a/perl-install/modules.pm b/perl-install/modules.pm index c288168dd..f24b55886 100644 --- a/perl-install/modules.pm +++ b/perl-install/modules.pm @@ -382,7 +382,7 @@ sub load { push @{$loaded{$type}}, $name; if ($type) { - add_alias('usbmouse', $name) if $type =~ /serial_usb/i; + add_alias('usb-interface', $name) if $type =~ /SERIAL_USB/i; add_alias('scsi_hostadapter', $name) if $type eq "scsi" || $type eq $type_aliases{scsi}; } $conf{$name}{options} = join " ", @options if @options; diff --git a/perl-install/mouse.pm b/perl-install/mouse.pm index fcbf1e25f..3cf91bd7a 100644 --- a/perl-install/mouse.pm +++ b/perl-install/mouse.pm @@ -135,10 +135,21 @@ sub detect() { my ($r, $wacom) = mouseconfig(); return ($r, $wacom) if $r; require pci_probing::main; - if (my ($c) = pci_probing::main::probe("serial_usb")) { - eval { modules::load($c->[1], "serial_usb") }; + if (my ($c) = pci_probing::main::probe("SERIAL_USB")) { + eval { + modules::load($c->[1], "SERIAL_USB"); + modules::load("usbmouse"); + modules::load("mousedev"); + }; sleep(1); - do { $wacom or modules::unload("serial"); return name2mouse("USB Mouse"), $wacom } if !$@ && detect_devices::tryOpen("usbmouse"); + do { + $wacom or modules::unload("serial"); + modules::load("usbkbd"); + modules::load("keybdev"); + return name2mouse("USB Mouse"), $wacom; + } if !$@ && detect_devices::tryOpen("usbmouse"); + modules::unload("mousedev"); + modules::unload("usbmouse"); modules::unload($c->[1], 'remove_alias'); } diff --git a/perl-install/my_gtk.pm b/perl-install/my_gtk.pm index 89944f342..5970a1e7c 100644 --- a/perl-install/my_gtk.pm +++ b/perl-install/my_gtk.pm @@ -320,6 +320,8 @@ sub _create_window($$) { $w->signal_connect(delete_event => sub { undef $o->{retval}; Gtk->main_quit }); $w->set_uposition(@{$my_gtk::force_position || $o->{force_position}}) if $my_gtk::force_position || $o->{force_position}; + $w->signal_connect('focus' => sub { Gtk->idle_add(sub { $w->ensure_focus($_[0]); 0 }, $_[1]) }) if $w->can('ensure_focus'); + $w->signal_connect("key_press_event" => sub { my $d = ${{ 65470 => 'help', 65481 => 'next', diff --git a/perl-install/partition_table_raw.pm b/perl-install/partition_table_raw.pm index b8c30fb86..50da8dfe5 100644 --- a/perl-install/partition_table_raw.pm +++ b/perl-install/partition_table_raw.pm @@ -20,8 +20,10 @@ my @MBR_signatures = ( [ 'TimO', 0, 'IBM Thinkpad hibernation partition' ], [ 'os2', 0x1c2, "\xA" ], [ 'dos', 0xa0, "\x25\x03\x4E\x02\xCD\x13" ], + [ 'dos', 0xa0, "\x00\xB4\x08\xCD\x13\x72" ], #- nt2k's [ 'dos', 0x60, "\xBB\x00\x7C\xB8\x01\x02\x57\xCD\x13\x5F\x73\x0C\x33\xC0\xCD\x13" ], #- nt's [ 'freebsd', 0xC0, "\x00\x30\xE4\xCD\x16\xCD\x19\xBB\x07\x00\xB4" ], + [ 'freebsd', 0x160, "\x6A\x10\x89\xE6\x48\x80\xCC\x40\xCD\x13" ], [ 'dummy', 0xAC, "\x0E\xB3\x07\x56\xCD\x10\x5E\xEB" ], #- caldera? [ 'ranish', 0x100, "\x6A\x10\xB4\x42\x8B\xF4\xCD\x13\x8B\xE5\x73" ], ); diff --git a/perl-install/pkgs.pm b/perl-install/pkgs.pm index 43dca813c..faba585f5 100644 --- a/perl-install/pkgs.pm +++ b/perl-install/pkgs.pm @@ -116,12 +116,16 @@ sub packageFile { $pkg->{file} . "." . c::headerGetEntry($pkg->{header}, 'arch') . ".rpm"; } +sub cleanHeaders { + my ($prefix) = @_; + commands::rm("-rf", "$prefix/tmp/headers") if -e "$prefix/tmp/headers"; +} #- get all headers from an hdlist file. sub extractHeaders($$$) { my ($prefix, $pkgs, $medium) = @_; - commands::rm("-rf", "$prefix/tmp/headers") if -e "$prefix/tmp/headers"; + cleanHeaders($prefix); run_program::run("extract_archive", "$prefix/var/lib/urpmi/$medium->{hdlist}", @@ -375,7 +379,7 @@ sub getProvides($) { foreach my $pkg (@{$packages->[1]}) { map { my $provided = $packages->[1][$_] or die "invalid package index $_"; packageFlagBase($provided) or push @{$provided->{provides} ||= []}, $pkg; - } map { split '\|' } packageDepsId($pkg); + } map { split '\|' } grep { !/^NOTFOUND_/ } packageDepsId($pkg); } } @@ -742,7 +746,8 @@ sub install($$$;$$) { my $callbackOpen = sub { my $f = packageFile($packages{$_[0]}); print LOG "$f\n"; - my $fd = install_any::getFile($f) or log::l("ERROR: bad file $f"); + my $fd = install_any::getFile($f) or install_any::rewindGetFile(); + $fd ||= install_any::getFile($f) or log::l("ERROR: bad file $f"); $fd ? fileno $fd : -1; }; my $callbackClose = sub { packageSetFlagInstalled(delete $packages{$_[0]}, 1) }; @@ -811,7 +816,7 @@ sub install($$$;$$) { if (s/(installing package) .* (needs (?:.*) on the (.*) filesystem)/$1 $2/) { $parts{$3} ? 0 : ($parts{$3} = 1); } else { 1; } - } reverse @probs; + } reverse map { s|/mnt||; $_ } @probs; c::rpmdbClose($db); die "installation of rpms failed:\n ", join("\n ", @probs); @@ -821,6 +826,7 @@ sub install($$$;$$) { c::rpmdbClose($db); log::l("rpm database closed"); + cleanHeaders($prefix); install_any::rewindGetFile(); #- make sure to reopen the connection, usefull for ftp. } diff --git a/perl-install/raid.pm b/perl-install/raid.pm index 5fcedf3b5..e5605c5bf 100644 --- a/perl-install/raid.pm +++ b/perl-install/raid.pm @@ -127,7 +127,8 @@ sub make { eval { commands::modprobe(module($part)) }; run_program::run("raidstop", $dev); &write($raid, "/etc/raidtab"); - run_program::run("mkraid", "--really-force", $dev); + run_program::run("mkraid", "--really-force", $dev) or die + $::isStandalone ? _("mkraid failed (maybe raidtools are missing?)") : _("mkraid failed"); } sub format_part($$) { diff --git a/perl-install/timezone.pm b/perl-install/timezone.pm index 449c8b428..093e161f2 100644 --- a/perl-install/timezone.pm +++ b/perl-install/timezone.pm @@ -76,7 +76,6 @@ my %l2t = ( 'Spanish (Argentina)' => 'America/Buenos_Aires', 'Spanish (Mexico)' => 'America/Mexico_City', 'Spanish (Spain)' => 'Europe/Madrid', -'Swedish (Finland)' => 'Europe/Helsinki', 'Swedish (Sweden)' => 'Europe/Stockholm', 'Thai (Thailand)' => 'Asia/Bangkok', 'Turkish (Turkey)' => 'Europe/Istanbul', diff --git a/tools/Makefile b/tools/Makefile index 86a1915c7..535e1f59d 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -24,10 +24,10 @@ xhost+: %: %.c ddcprobe/ddcxinfos: $(MAKE) -C ddcprobe ddcxinfos -$(BASE)/depslist: $(BASE)/hdlists +$(BASE)/depslist: $(BASE)/hdlists $(BASE)/hdlist_cz2 gendepslist2 -o $@ `cat $< | perl -pe 's|(.*)|'$(BASE)'/$$1|' ` -$(BASE)/hdlists: $(RPMS) +$(BASE)/hdlists $(BASE)/hdlist_cz2: $(RPMS) genhdlists --noclean --distrib $(ROOTDEST) clean: -- cgit v1.2.1