On Sat, Apr 06, 2002 at 12:35:06PM +0200, Pixel wrote:
> 
> the pb is the architecture of diskdrake won't accept un-partitionned drives.

OK.

> having those drives ignored would be easy...

Well that is the direction I will go first in trying to get my box
upgraded.

> well, not quite so. It tries to detect the partition table format. Making it
> ignore those drives would not be hard.

I have hacked this up so far (untested yet), to get drakx past the
point of just repeating the "unknown partition" error message with
hda:

diff --exclude *.dist -Nur 
/mnt/cooker/8.2/8.2-tree/Mandrake/mdkinst/usr/bin/perl-install/partition_table.pm 
/mnt/cooker/8.2/8.2-test/Mandrake/mdkinst/usr/bin/perl-install/partition_table.pm
--- /mnt/cooker/8.2/8.2-tree/Mandrake/mdkinst/usr/bin/perl-install/partition_table.pm  
 Sat Mar 16 07:30:29 2002
+++ /mnt/cooker/8.2/8.2-test/Mandrake/mdkinst/usr/bin/perl-install/partition_table.pm  
+ Fri Apr  5 21:08:39 2002
@@ -455,8 +455,8 @@
          if_(arch() =~ /^ia64/, 'gpt'),
          arch() =~ /^sparc/ ? ('sun', 'bsd', 'unknown') : ('dos', 'bsd', 'sun', 
'mac', 'unknown'),
        );
-       foreach ('empty', @parttype) {
-           /unknown/ and die "unknown partition table format";
+       foreach ('empty', 'lvm', @parttype) {
+           /unknown/ and die "unknown partition table format on disk " . $hd->{file};
            eval {
                require("partition_table_$_.pm");
                bless $hd, "partition_table_$_";
diff --exclude *.dist -Nur 
/mnt/cooker/8.2/8.2-tree/Mandrake/mdkinst/usr/bin/perl-install/partition_table_lvm.pm 
/mnt/cooker/8.2/8.2-test/Mandrake/mdkinst/usr/bin/perl-install/partition_table_lvm.pm
--- 
/mnt/cooker/8.2/8.2-tree/Mandrake/mdkinst/usr/bin/perl-install/partition_table_lvm.pm  
     Wed Dec 31 19:00:00 1969
+++ 
+/mnt/cooker/8.2/8.2-test/Mandrake/mdkinst/usr/bin/perl-install/partition_table_lvm.pm 
+      Fri Apr  5 21:05:22 2002
@@ -0,0 +1,103 @@
+package partition_table_lvm; # $Id: partition_table_lvm.pm,v 1.7 2001/10/19 11:23:35 
+prigaux Exp $
+
+
+
+
+
+@ISA = qw(partition_table_raw);
+
+use common;
+use partition_table_raw;
+use partition_table;
+use c;
+
+my @fields = qw(active start_head start_sec start_cyl type end_head end_sec end_cyl 
+start size);
+#my $format = "C8 V2";
+my $magic = "HM\1\0";
+#my $nb_primary = 4;
+
+#my $offset = $common::SECTORSIZE - length($magic) - $nb_primary * 
+common::psizeof($format);
+my $offset = 0;
+
+#sub hasExtended { 1 }
+sub hasExtended { 0 }
+
+sub compute_CHS($$) {
+    my ($hd, $e) = @_;
+    my @l = qw(cyl head sec);
+    @$e{map { "start_$_" } @l} = $e->{start} || $e->{type} ? CHS2rawCHS($hd, 
+sector2CHS($hd, $e->{start})) : (0,0,0);
+    @$e{map { "end_$_"   } @l} = $e->{start} || $e->{type} ? CHS2rawCHS($hd, 
+sector2CHS($hd, $e->{start} + $e->{size} - 1)) : (0,0,0);
+    1;
+}
+
+sub CHS2rawCHS {
+    my ($hd, $c, $h, $s) = @_;
+    if ($c > 1023) {
+       
+       $c = 1023;
+       $h = $hd->{geom}{heads} - 1;
+       $s = $hd->{geom}{sectors};
+    }
+    ($c & 0xff, $h, $s | ($c >> 2 & 0xc0));
+}
+
+# returns (cylinder, head, sector)
+sub sector2CHS {
+    my ($hd, $start) = @_;
+    my ($s, $h);
+    ($start, $s) = divide($start, $hd->{geom}{sectors});
+    ($start, $h) = divide($start, $hd->{geom}{heads});
+    ($start, $h, $s + 1);
+}
+
+sub read {
+    my ($hd, $sector) = @_;
+    my $tmp;
+
+    local *F; partition_table_raw::openit($hd, *F) or die "failed to open device";
+    c::lseek_sector(fileno(F), $sector, $offset) or die "reading of partition in 
+sector $sector failed";
+
+#        my @pt = map {
+#      sysread F, $tmp, psizeof($format) or die "error while reading partition table 
+in sector $sector";
+#      my %h; @h{@fields} = unpack $format, $tmp;
+#      \%h;
+#    } (1..$nb_primary);
+
+    
+    sysread F, $tmp, length $magic or die "error reading magic number on disk " . 
+$hd->{file};
+    $tmp eq $magic or die "bad magic number on disk ". $hd->{file};
+
+#    [ @pt ];
+    [ ];
+
+}
+
+# write the partition table (and extended ones)
+# for each entry, it uses fields: start, size, type, active
+sub write($$$;$) {
+    my ($hd, $sector, $pt) = @_;
+
+    die "should not be writing lvm partitions!!";   
+#    local *F;
+#    if ($::testing) {
+#      my $file = "/tmp/partition_table_$hd->{device}";
+#      open F, ">$file" or die "error opening test file $file";
+#    } else {
+#      partition_table_raw::openit($hd, *F, 2) or die "error opening device 
+$hd->{device} for writing";
+#        c::lseek_sector(fileno(F), $sector, $offset) or return 0;
+#    }
+#
+#    @$pt == $nb_primary or die "partition table does not have $nb_primary entries";
+#    foreach (@$pt) {
+#      compute_CHS($hd, $_);
+#      local $_->{start} = $_->{local_start} || 0;
+#      $_->{active} ||= 0; $_->{type} ||= 0; $_->{size} ||= 0; 
+#      syswrite F, pack($format, @$_{@fields}), psizeof($format) or return 0;
+#    }
+#    syswrite F, $magic, length $magic or return 0;
+#    1;
+}
+
+sub clear_raw { { raw => [ ({}) x $nb_primary ] } }
+
+1;

Is there any way to restart drakx during an installation/upgrade?  My
media is located on a NFS server, so making changes to perl-install is
quite simple but I have to restart the whole installation process in
order to get drakx to see the changes I made.  If I could restart the
installer without having to reboot it would be much of a time saver.

b.

-- 
Brian J. Murrell

Attachment: msg62090/pgp00000.pgp
Description: PGP signature

Reply via email to