diff options
-rw-r--r-- | docs/TODO | 39 | ||||
-rw-r--r-- | perl-install/ChangeLog | 16 | ||||
-rw-r--r-- | perl-install/c/stuff.xs.pm | 18 | ||||
-rw-r--r-- | perl-install/commands.pm | 1 | ||||
-rw-r--r-- | perl-install/devices.pm | 5 | ||||
-rw-r--r-- | perl-install/fs.pm | 85 | ||||
-rw-r--r-- | perl-install/fsedit.pm | 23 | ||||
-rw-r--r-- | perl-install/install2.pm | 26 | ||||
-rw-r--r-- | perl-install/install_any.pm | 1 | ||||
-rw-r--r-- | perl-install/install_steps.pm | 8 | ||||
-rw-r--r-- | perl-install/install_steps_interactive.pm | 21 | ||||
-rw-r--r-- | perl-install/interactive_gtk.pm | 6 | ||||
-rw-r--r-- | perl-install/loopback.pm | 9 | ||||
-rw-r--r-- | perl-install/modules.pm | 5 | ||||
-rw-r--r-- | perl-install/pkgs.pm | 2 | ||||
-rw-r--r-- | perl-install/share/fonts.tar.bz2 | bin | 1105673 -> 1105293 bytes |
16 files changed, 178 insertions, 87 deletions
@@ -24,6 +24,9 @@ add choice clean /tmp or not in expert kernel chosen by default must be the one according to supermount/secure +bug if ide-scsi, no more hdX, but scd0 (aka sr0) + (and add alias block-major-11 ide-scsi ?) + -features------------------------------------------------------------------------------- let diskdrake have dos/win partition automatically set up with mount point, this will help loopback too. @@ -97,16 +100,16 @@ possibility to specify the mouse (done,pix,7.1)partitioning, keyboard shortcut. ---- -paride in stage1 +(?) paride in stage1 -msec custom +(?) msec custom stage1 & network: add ability to choose the network interface to use stage1 & cdrom: add ability in expert to choose the scsi cdrom drive to use ability to add nfs/weird_fs entries in fstab -(fpons)pb with dependencies ``missing'': icewm do not require XFree86 and so you can have icewm but no X server +(obsolete) pb with dependencies ``missing'': icewm do not require XFree86 and so you can have icewm but no X server auto ppp-configure with free provider @@ -182,9 +185,9 @@ adduserdrake to remove/update users (?)see what can be done with nvram (50 bytes to save information) -support wacom +better wacom support -bug in diskdrake: can in strange cases create a primary partition at sector #0 +(obsolete) bug in diskdrake: can in strange cases create a primary partition at sector #0 (done,pix(partly, protection against bugging))bug in diskdrake: in expert: blank, create hda5 at beginning, create hda6 at the end, create hda7 @@ -202,14 +205,16 @@ X configuration and bootloader in kickstart XFdrake chooseResolutions with ask_from_list do not permit ``Show all'' -have a better time estimation of the remaining time in install packages +(obsolete) have a better time estimation of the remaining time in install packages (?) options in mkfs, progress bar when formatting -(?) when some occur, partition must be unset isFormatted +(?) when some error occurs, partition must be unset isFormatted -hardware------------------------------------------------------------------------------- -with no floppy drive, mkbootdisk step fails badly +- with no floppy drive, mkbootdisk step fails badly +- try detect_devices::floppies (and how are scsi floppies handled?) +maybe: do a iotcl FDGETPRM to detect fd1, fd0. need a simple solution to precise mouse type (syslinux option?) @@ -226,23 +231,14 @@ smp not detected (mhoward@memphisonline.com on cooker, bios=BP6PW) UDMA66 (ultra66.o for promise) -bug if ide-scsi, no more hdX, but scd0 (aka sr0) -(and add alias block-major-11 ide-scsi ?) - aha152x needs "insmod aha152x.o aha152x=0x140,11,7" -try detect_devices::floppies (and how are scsi floppies handled?) -maybe: do a iotcl FDGETPRM to detect fd1, fd0. - -usb module not removed if no mouse found +(obsolete) usb module not removed if no mouse found (fpons)handle dat drives hibernation on laptop -> clock not restored -XFree: handle by card options -eg: SIS6326 needs "no_bitblt" "no_bltimage" and 24bpp instead of 32bpp - # in 2.3.15 "Silicon Integrated Systems [SiS]|SiS900 10/100 Ethernet" is handled @@ -251,8 +247,6 @@ eg: SIS6326 needs "no_bitblt" "no_bltimage" and 24bpp instead of 32bpp (?)XFdrake does not handle fbdev -(?) Xconfiguration: if "can't open fixed font", relaunch xfs. - (?) Je viens de faire une installation sur une machine où seul Be était installé. Je l'ai supprimé et installé (mode recommandé) Oxygen. Au redémarrage, le boot manager de Be apparaît et il est impossible de @@ -493,3 +487,8 @@ try to figure why? (done,pix)with pcmcia, need ONBOOT=no +(fpons,done) XFree: handle by card options +eg: SIS6326 needs "no_bitblt" "no_bltimage" and 24bpp instead of 32bpp + +(done,pix) Xconfiguration: if "can't open fixed font", relaunch xfs. + diff --git a/perl-install/ChangeLog b/perl-install/ChangeLog index 2372bfb23..06f1f5a71 100644 --- a/perl-install/ChangeLog +++ b/perl-install/ChangeLog @@ -1,3 +1,19 @@ +2000-03-11 Pixel <pixel@mandrakesoft.com> + + * devices.pm (set_loop): created, searches for an available + loopback and sets the file to it + + * lilo.pm (dev2grub): fixed a missing slash + + * interactive_gtk.pm (wait_message_nextW): do not update if same + message, otherwise silly gtk won't do anything and we'll wait + forever :( + +2000-03-10 Pixel <pixel@mandrakesoft.com> + + * install2.pm (@install_classes): cleanup, no more i18n (is now in + install_steps_interactive), remove old entries + 2000-03-09 Pixel <pixel@mandrakesoft.com> * modules.pm (write_conf): don't add alias block-major-11 in every case diff --git a/perl-install/c/stuff.xs.pm b/perl-install/c/stuff.xs.pm index cdaa2d292..d8395dc66 100644 --- a/perl-install/c/stuff.xs.pm +++ b/perl-install/c/stuff.xs.pm @@ -255,7 +255,7 @@ set_loop(dev_fd, file) if (file_fd < 0) return; - memset(&loopinfo, 0, sizeof (loopinfo)); + memset(&loopinfo, 0, sizeof(loopinfo)); strncpy(loopinfo.lo_name, file, LO_NAME_SIZE); loopinfo.lo_name[LO_NAME_SIZE - 1] = 0; @@ -269,6 +269,22 @@ set_loop(dev_fd, file) } OUTPUT: RETVAL + +int +del_loop(device) + char *device + CODE: + RETVAL = 0; +{ + int fd; + if ((fd = open(device, O_RDONLY)) < 0) return; + if (ioctl(fd, LOOP_CLR_FD, 0) < 0) return; + close(fd); + RETVAL = 1; +} + OUTPUT: + RETVAL + '; $ENV{C_RPM} and print ' diff --git a/perl-install/commands.pm b/perl-install/commands.pm index ace3cb395..1f2170de2 100644 --- a/perl-install/commands.pm +++ b/perl-install/commands.pm @@ -68,6 +68,7 @@ sub mount { my $fs = $t && shift; @_ == 2 or die "usage: mount [-r] [-t <fs>] <device> <dir>\n", + " (use -r for readonly)\n", " (if /dev/ is left off the device name, a temporary node will be created)\n"; my ($dev, $where) = @_; diff --git a/perl-install/devices.pm b/perl-install/devices.pm index 19baec6f7..29c89a1d5 100644 --- a/perl-install/devices.pm +++ b/perl-install/devices.pm @@ -38,11 +38,12 @@ sub size($) { sub set_loop { my ($file) = @_; - foreach (0..9) { + foreach (0..7) { local *F; my $dev = make("loop$_"); - sysopen F, $dev, 0 or next; + sysopen F, $dev, 2 or next; !ioctl(F, c::LOOP_GET_STATUS(), my $tmp) && $! == 6 or next; #- 6 == ENXIO + log::l("trying with loop $dev"); return c::set_loop(fileno F, $file) && $dev; } } diff --git a/perl-install/fs.pm b/perl-install/fs.pm index 5a506c411..7fc15dcec 100644 --- a/perl-install/fs.pm +++ b/perl-install/fs.pm @@ -37,6 +37,15 @@ sub read_fstab($) { } <F>; } +sub up_mount_point { + my ($mntpoint, $fstab) = @_; + while (1) { + $mntpoint = dirname($mntpoint); + $mntpoint ne "." or return; + $_->{mntpoint} eq $mntpoint and return $_ foreach @$fstab; + } +} + sub check_mounted($) { my ($fstab) = @_; @@ -113,16 +122,39 @@ sub real_format_part { $part->{isFormatted} = 1; } sub format_part { - my ($raid, $part) = @_; + my ($raid, $part, $prefix) = @_; if (raid::is($part)) { raid::format_part($raid, $part); } elsif (isLoopback($part)) { - loopback::format_part($part); + loopback::format_part($part, $prefix); } else { real_format_part($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); + } + if (isLoopback($part)) { + formatMount_part($part->{device}, $raid, $fstab, $prefix, $callback); + } + + if ($part->{toFormat}) { + $callback->($part) if $callback; + format_part($raid, $part, $prefix); + } + mount_part($part, $prefix); +} + +sub formatMount_all { + my ($raid, $fstab, $prefix, $callback) = @_; + formatMount_part($_, $raid, $fstab, $prefix, $callback) + foreach sort { isLoopback($a) ? 1 : -1 } grep { $_->{mntpoint} } @$fstab; +} + sub mount($$$;$) { my ($dev, $where, $fs, $rdonly) = @_; log::l("mounting $dev on $where as type $fs"); @@ -173,11 +205,15 @@ sub mount_part($;$$) { $part->{isMounted} and return; unless ($::testing) { - local $part->{device} = devices::set_loop(loopback::file($part)) || die if isLoopback($part); if (isSwap($part)) { - swap::swapon($part->{device}); + swap::swapon(isLoopback($part) ? $prefix . loopback::file($part) : $part->{device}); } 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); } } @@ -190,9 +226,12 @@ sub umount_part($;$) { $part->{isMounted} or return; unless ($::testing) { - isSwap($part) ? - swap::swapoff($part->{device}) : - umount(($prefix || '') . ($part->{mntpoint} || devices::make($part->{device}))); + if (isSwap($part)) { + swap::swapoff($part->{device}); + } else { + umount(($prefix || '') . $part->{mntpoint} || devices::make($part->{device})); + c::del_loop(delete $part->{real_device}) if isLoopback($part); + } } $part->{isMounted} = 0; } @@ -308,19 +347,19 @@ sub write_fstab($;$$) { print F join(" ", @$_), "\n" foreach sort { $a->[1] cmp $b->[1] } @to_add; } -sub check_mount_all_fstab($;$) { - my ($fstab, $prefix) = @_; - $prefix ||= ''; - - foreach (sort { ($a->{mntpoint} || '') cmp ($b->{mntpoint} || '') } @$fstab) { - #- avoid unwanted mount in fstab. - next if ($_->{device} =~ /none/ || $_->{type} =~ /nfs|smbfs|ncpfs|proc/ || $_->{options} =~ /noauto|ro/); - - #- TODO fsck - - eval { mount(devices::make($_->{device}), $prefix . $_->{mntpoint}, $_->{type}, 0); }; - if ($@) { - log::l("unable to mount partition $_->{device} on $prefix/$_->{mntpoint}"); - } - } -} +#sub check_mount_all_fstab($;$) { +# my ($fstab, $prefix) = @_; +# $prefix ||= ''; +# +# foreach (sort { ($a->{mntpoint} || '') cmp ($b->{mntpoint} || '') } @$fstab) { +# #- avoid unwanted mount in fstab. +# next if ($_->{device} =~ /none/ || $_->{type} =~ /nfs|smbfs|ncpfs|proc/ || $_->{options} =~ /noauto|ro/); +# +# #- TODO fsck +# +# eval { mount(devices::make($_->{device}), $prefix . $_->{mntpoint}, $_->{type}, 0); }; +# if ($@) { +# log::l("unable to mount partition $_->{device} on $prefix/$_->{mntpoint}"); +# } +# } +#} diff --git a/perl-install/fsedit.pm b/perl-install/fsedit.pm index 96d572cb5..e8b045d04 100644 --- a/perl-install/fsedit.pm +++ b/perl-install/fsedit.pm @@ -230,7 +230,7 @@ sub has_mntpoint($$) { #- do this before modifying $part->{mntpoint} #- $part->{mntpoint} should not be used here, use $mntpoint instead sub check_mntpoint { - my ($mntpoint, $hd, $part, $hds) = @_; + my ($mntpoint, $hd, $part, $hds, $loopbackDevice) = @_; $mntpoint eq '' || isSwap($part) || isRAID($part) and return; @@ -238,7 +238,23 @@ sub check_mntpoint { m|^/| or die _("Mount points must begin with a leading /"); #- m|(.)/$| and die "The mount point $_ is illegal.\nMount points may not end with a /"; - has_mntpoint($mntpoint, $hds) and die _("There is already a partition with mount point %s", $mntpoint); + has_mntpoint($mntpoint, $hds) and die _("There is already a partition with mount point %s\n", $mntpoint); + + my $fake_part = { mntpoint => $mntpoint, device => $loopbackDevice }; + $fake_part->{loopback_file} = 1 if $loopbackDevice; + my $fstab = [ get_fstab(@$hds), $fake_part ]; + my $check; $check = sub { + my ($p, @seen) = @_; + 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); + } + if (isLoopback($p)) { + $check->($p->{device}, @seen); + } + }; + $check->($fake_part); #- if ($part->{start} + $part->{size} > 1024 * $hd->cylinder_size() && arch() =~ /i386/) { #- die "/boot ending on cylinder > 1024" if $mntpoint eq "/boot"; @@ -267,12 +283,9 @@ sub allocatePartitions($$) { while (suggest_part($hd, $part = { start => $start, size => 0, maxsize => $size }, $hds, $to_add)) { - log::l("partsize " . ($part->{size}+ $part->{start})); - log::l("size " . ($size+ $start)); add($hd, $part, $hds); $size -= $part->{size} + $part->{start} - $start; $start = $part->{start} + $part->{size}; - log::l("size " . ($size+ $start)); } } } diff --git a/perl-install/install2.pm b/perl-install/install2.pm index bc00a3e6e..e658953dd 100644 --- a/perl-install/install2.pm +++ b/perl-install/install2.pm @@ -81,8 +81,7 @@ arch() =~ /alpha/ ? ( #-INTERNAL CONSTANT #-##################################################################################### -#- these strings are used in quite a lot of places and must not be changed!!!!! -my @install_classes = (__("beginner"), __("developer"), __("server"), __("expert")); +my @install_classes = qw(normal developer server); #-##################################################################################### #-Default value @@ -327,13 +326,7 @@ Then choose action ``Mount point'' and set it to `/'"); sub formatPartitions { unless ($o->{lnx4win} || $o->{isUpgrade}) { $o->choosePartitionsToFormat($o->{fstab}); - - unless ($::testing) { - $o->formatPartitions(@{$o->{fstab}}); - fs::mount_all([ grep { isSwap($_) } @{$o->{fstab}} ], $o->{prefix}); - die _("Not enough swap to fulfill installation, please add some") if availableMemory < 40 * 1024; - fs::mount_all([ grep { isExt2($_) } @{$o->{fstab}} ], $o->{prefix}, $o->{hd_dev}); - } + $o->formatMountPartitions($o->{fstab}) unless $::testing; eval { $o = $::o = install_any::loadO($o) } if $_[1] == 1; } @@ -546,11 +539,16 @@ sub main { symlinkf $root, "/tmp/rhimage" or die "unable to create link /tmp/rhimage"; } - unlink "/sbin/insmod" unless $::testing; - unlink "/modules/pcmcia_core.o" unless $::testing; #- always use module from archive. - unlink "/modules/i82365.o" unless $::testing; - unlink "/modules/tcic.o" unless $::testing; - unlink "/modules/ds.o" unless $::testing; + unless ($::testing) { + unlink $_ foreach ( + "/sbin/insmod", "/sbin/rmmod", "/sbin/install", + "/modules/modules.cgz", + "/modules/pcmcia_core.o", #- always use module from archive. + "/modules/i82365.o", + "/modules/tcic.o", + "/modules/ds.o", + ); + } print STDERR "in second stage install\n"; log::openLog(($::testing || $o->{localInstall}) && 'debug.log'); diff --git a/perl-install/install_any.pm b/perl-install/install_any.pm index 5e1232f90..41a46f93b 100644 --- a/perl-install/install_any.pm +++ b/perl-install/install_any.pm @@ -178,6 +178,7 @@ sub setPackages($) { push @{$o->{default_packages}}, "apmd" if $o->{pcmcia}; push @{$o->{default_packages}}, "raidtools" if $o->{raid} && !is_empty_array_ref($o->{raid}{raid}); push @{$o->{default_packages}}, "cdrecord" if detect_devices::getIDEBurners(); + push @{$o->{default_packages}}, "alsa" if modules::get_alias("sound") =~ /^snd-card-/; pkgs::getDeps($o->{packages}); diff --git a/perl-install/install_steps.pm b/perl-install/install_steps.pm index 6004096b1..a867b8155 100644 --- a/perl-install/install_steps.pm +++ b/perl-install/install_steps.pm @@ -165,11 +165,9 @@ sub choosePartitionsToFormat($$) { } } -sub formatPartitions { - my $o = shift; - foreach (@_) { - fs::format_part($o->{raid}, $_) if $_->{toFormat}; - } +sub formatMountPartitions { + my ($o) = @_; + fs::formatMount_all($o->{raid}, $o->{fstab}, $o->{prefix}); } #------------------------------------------------------------------------------ diff --git a/perl-install/install_steps_interactive.pm b/perl-install/install_steps_interactive.pm index 86bed9004..3fa598da9 100644 --- a/perl-install/install_steps_interactive.pm +++ b/perl-install/install_steps_interactive.pm @@ -25,6 +25,7 @@ use mouse; use modules; use lang; use services; +use loopback; use keyboard; use any; use fs; @@ -223,15 +224,17 @@ sub choosePartitionsToFormat($$) { [ map { \$_->{toFormatCheck} } @l ]) or goto &choosePartitionsToFormat if $::expert; } -sub formatPartitions { - my $o = shift; - my $w = $o->wait_message('', ''); - foreach (@_) { - if ($_->{toFormat}) { - $w->set(_("Formatting partition %s", $_->{device})); - fs::format_part($o->{raid}, $_); - } - } + +sub formatMountPartitions { + my ($o, $fstab) = @_; + my $w = $o->wait_message('', _("Formatting partitions")); + fs::formatMount_all($o->{raid}, $o->{fstab}, $o->{prefix}, sub { + my ($part) = @_; + $w->set(isLoopback($part) ? + _("Creating and formatting loopback file %s", loopback::file($part)) : + _("Formatting partition %s", $part->{device})); + }); + die _("Not enough swap to fulfill installation, please add some") if availableMemory < 40 * 1024; } #------------------------------------------------------------------------------ diff --git a/perl-install/interactive_gtk.pm b/perl-install/interactive_gtk.pm index 250700578..3a9feefb8 100644 --- a/perl-install/interactive_gtk.pm +++ b/perl-install/interactive_gtk.pm @@ -297,14 +297,16 @@ 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 { $w->{displayed} = 1 }); + $w->{wait_messageW}->signal_connect(expose_event => sub { print "expose_event\n"; $w->{displayed} = 1 }); $w->sync until $w->{displayed}; $w; } sub wait_message_nextW { my ($o, $messages, $w) = @_; + my $msg = join "\n", @$messages; + return if $msg eq $w->{wait_messageW}->get; #- needed otherwise no expose_event :( $w->{displayed} = 0; - $w->{wait_messageW}->set(join "\n", @$messages); + $w->{wait_messageW}->set($msg); $w->flush until $w->{displayed}; } sub wait_message_endW { diff --git a/perl-install/loopback.pm b/perl-install/loopback.pm index 0fdebebaf..32bb62b3a 100644 --- a/perl-install/loopback.pm +++ b/perl-install/loopback.pm @@ -24,17 +24,16 @@ sub loopbacks { } sub format_part { - my ($part) = @_; - my $prefix = $::isStandalone ? '' : $::o->{prefix}; + my ($part, $prefix) = @_; fs::mount_part($part->{device}, $prefix); - my $f = create($part); + my $f = create($part, $prefix); local $part->{device} = $f; fs::real_format_part($part); } sub create { - my ($part) = @_; - my $f = "$part->{device}{mntpoint}$part->{loopback_file}"; + my ($part, $prefix) = @_; + my $f = "$prefix$part->{device}{mntpoint}$part->{loopback_file}"; return $f if -e $f; eval { commands::mkdir_("-p", dirname($f)) }; diff --git a/perl-install/modules.pm b/perl-install/modules.pm index 8ed1be0c9..c288168dd 100644 --- a/perl-install/modules.pm +++ b/perl-install/modules.pm @@ -338,6 +338,11 @@ sub text2driver($) { die "$text is not a valid module description"; } +sub get_alias { + my ($alias) = @_; + $conf{$alias}{alias}; +} + sub add_alias($$) { my ($alias, $name) = @_; /\Q$alias/ && $conf{$_}{alias} && $conf{$_}{alias} eq $name and return $_ foreach keys %conf; diff --git a/perl-install/pkgs.pm b/perl-install/pkgs.pm index d30d0e408..c6d7f402e 100644 --- a/perl-install/pkgs.pm +++ b/perl-install/pkgs.pm @@ -788,7 +788,7 @@ sub install($$$;$$) { foreach @transToInstall; my $close = sub { - c::headerFree(delete $_->{header}) foreach @transToInstall; +# c::headerFree(delete $_->{header}) foreach @transToInstall; c::rpmtransFree($trans); }; diff --git a/perl-install/share/fonts.tar.bz2 b/perl-install/share/fonts.tar.bz2 Binary files differindex ef771a167..66dcc9053 100644 --- a/perl-install/share/fonts.tar.bz2 +++ b/perl-install/share/fonts.tar.bz2 |