summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rw-r--r--perl-install/Makefile2
-rw-r--r--perl-install/fsedit.pm6
-rw-r--r--perl-install/partition_table.pm26
-rw-r--r--perl-install/partition_table_bsd.pm10
-rw-r--r--perl-install/partition_table_dos.pm8
-rw-r--r--perl-install/partition_table_raw.pm27
-rw-r--r--perl-install/partition_table_sun.pm41
8 files changed, 48 insertions, 76 deletions
diff --git a/Makefile b/Makefile
index cd756a608..ae05e0fe2 100644
--- a/Makefile
+++ b/Makefile
@@ -2,8 +2,10 @@ ARCH := $(patsubst i%86,i386,$(shell uname -m))
ARCH := $(patsubst sparc%,sparc,$(ARCH))
BOOT_IMG = hd.img cdrom.img network.img
+RELEASE_BOOT_IMG = hd.img cdrom.img network.img
ifeq (i386,$(ARCH))
BOOT_IMG += pcmcia.img pcmcia_ks.img network_ks.img
+RELEASE_BOOT_IMG += pcmcia.img
endif
ifeq (sparc,$(ARCH))
BOOT_IMG += live.img tftp.img tftprd.img
@@ -27,7 +29,7 @@ AUTOBOOT = $(ROOTDEST)/dosutils/autoboot/mdkinst
install: build autoboot
for i in images misc Mandrake Mandrake/base; do install -d $(ROOTDEST)/$$i ; done
- cp -f $(BOOT_IMG) $(ROOTDEST)/images ; rm -f $(ROOTDEST)/images/*_ks.img
+ cp -f $(RELEASE_BOOT_IMG) $(ROOTDEST)/images
make -C perl-install full_stage2
build: $(BOOT_IMG)
diff --git a/perl-install/Makefile b/perl-install/Makefile
index ebad67be4..ddc412be3 100644
--- a/perl-install/Makefile
+++ b/perl-install/Makefile
@@ -136,7 +136,7 @@ endif
tar xyC $(DEST) -f ../install/install1_pcmcia.tar.bz2 ./etc/pcmcia
full_stage2:
- $(SUDO) rm -rf $(DEST)
+ if [ `id -u` = 0 ]; then rm -rf $(DEST); else $(SUDO) rm -rf $(DEST); fi
mkdir -p $(DEST)
$(MAKE) get_needed_files
$(MAKE) stage2
diff --git a/perl-install/fsedit.pm b/perl-install/fsedit.pm
index 57f29e8cc..95b5006df 100644
--- a/perl-install/fsedit.pm
+++ b/perl-install/fsedit.pm
@@ -173,7 +173,7 @@ sub suggest_part($$$;$) {
$best = $second if
$best->{mntpoint} eq '/boot' &&
- $part->{start} + $best->{size} > 1024 * partition_table::cylinder_size($hd); #- if the empty slot is beyond the 1024th cylinder, no use having /boot
+ $part->{start} + $best->{size} > 1024 * $hd->cylinder_size(); #- if the empty slot is beyond the 1024th cylinder, no use having /boot
defined $best or return; #- sorry no suggestion :(
@@ -227,7 +227,7 @@ sub check_mntpoint {
has_mntpoint($mntpoint, $hds) and die _("There is already a partition with mount point %s", $mntpoint);
- if ($part->{start} + $part->{size} > 1024 * partition_table::cylinder_size($hd)) {
+ if ($part->{start} + $part->{size} > 1024 * $hd->cylinder_size()) {
die "/boot ending on cylinder > 1024" if $mntpoint eq "/boot";
die "/ ending on cylinder > 1024" if $mntpoint eq "/" && !has_mntpoint("/boot", $hds);
}
@@ -298,7 +298,7 @@ sub move {
my $part1 = { %$part };
my $part2 = { %$part };
$part2->{start} = $sector2;
- $part2->{size} += partition_table::cylinder_size($hd2) - 1;
+ $part2->{size} += $hd2->cylinder_size() - 1;
partition_table::remove($hd, $part);
{
local ($part2->{notFormatted}, $part2->{isFormatted}); #- do not allow partition::add to change this
diff --git a/perl-install/partition_table.pm b/perl-install/partition_table.pm
index 19e425872..82c950349 100644
--- a/perl-install/partition_table.pm
+++ b/perl-install/partition_table.pm
@@ -12,6 +12,7 @@ use vars qw(@ISA %EXPORT_TAGS @EXPORT_OK @important_types @fields2save);
use common qw(:common :system :functional);
+use partition_table_raw;
use partition_table_dos;
use partition_table_bsd;
use partition_table_sun;
@@ -201,29 +202,6 @@ sub isPrimary($$) {
0;
}
-sub cylinder_size($) {
- my ($hd) = @_;
- $hd->{geom}{sectors} * $hd->{geom}{heads};
-}
-
-sub adjustStart($$) {
- my ($hd, $part) = @_;
- my $end = $part->{start} + $part->{size};
-
- $part->{start} = round_up($part->{start},
- $part->{start} % cylinder_size($hd) < 2 * $hd->{geom}{sectors} ?
- $hd->{geom}{sectors} : cylinder_size($hd));
- $part->{size} = $end - $part->{start};
-}
-sub adjustEnd($$) {
- my ($hd, $part) = @_;
- my $end = $part->{start} + $part->{size};
- my $end2 = round_down($end, cylinder_size($hd));
- unless ($part->{start} < $end2) {
- $end2 = round_up($end, cylinder_size($hd));
- }
- $part->{size} = $end2 - $part->{start};
-}
sub adjustStartAndEnd($$) {
my ($hd, $part) = @_;
@@ -527,7 +505,7 @@ The only solution is to move your primary partitions to have the hole next to th
my $l = first (@{$hd->{extended}});
#- the first is a special case, must recompute its real size
- $l->{start} = round_down($l->{normal}{start} - 1, cylinder_size($hd));
+ $l->{start} = round_down($l->{normal}{start} - 1, $hd->cylinder_size());
$l->{size} = $l->{normal}{start} + $l->{normal}{size} - $l->{start};
my $ext = { %$l };
unshift @{$hd->{extended}}, { type => 5, raw => [ $part, $ext, {}, {} ], normal => $part, extended => $ext };
diff --git a/perl-install/partition_table_bsd.pm b/perl-install/partition_table_bsd.pm
index c0af9cf48..13398e007 100644
--- a/perl-install/partition_table_bsd.pm
+++ b/perl-install/partition_table_bsd.pm
@@ -56,14 +56,6 @@ my $magic = 0x82564557;
my $nb_primary = 8;
my $offset = 0x40;
-#- use default partition table adust functions.
-sub adjustStart($$) {
- &partition_table::adjustStart;
-}
-sub adjustEnd($$) {
- &partition_table::adjustEnd;
-}
-
sub read($$) {
my ($hd, $sector) = @_;
my $tmp;
@@ -132,7 +124,7 @@ sub info {
dtype => $hd->{device} =~ /^sd/ ? $dtype_scsi : $dtype_ST506,
secsize => $common::SECTORSIZE,
ncylinders => $hd->{geom}{cylinders},
- secpercyl => partition_table::cylinder_size($hd),
+ secpercyl => $hd->cylinder_size(),
secprtunit => $hd->{geom}{totalsectors},
rpm => 3600,
interleave => 1,
diff --git a/perl-install/partition_table_dos.pm b/perl-install/partition_table_dos.pm
index 624f13ecf..305aa862b 100644
--- a/perl-install/partition_table_dos.pm
+++ b/perl-install/partition_table_dos.pm
@@ -43,14 +43,6 @@ sub sector2CHS($$) {
($start, $h, $s + 1);
}
-#- use default partition table adust functions.
-sub adjustStart($$) {
- &partition_table::adjustStart;
-}
-sub adjustEnd($$) {
- &partition_table::adjustEnd;
-}
-
sub read($$) {
my ($hd, $sector) = @_;
my $tmp;
diff --git a/perl-install/partition_table_raw.pm b/perl-install/partition_table_raw.pm
index cafb439f9..668913d9c 100644
--- a/perl-install/partition_table_raw.pm
+++ b/perl-install/partition_table_raw.pm
@@ -31,6 +31,30 @@ sub typeOfMBR_($) { typeFromMagic($_[0], @MBR_signatures) }
sub hasExtended { 0 }
+sub cylinder_size($) {
+ my ($hd) = @_;
+ $hd->{geom}{sectors} * $hd->{geom}{heads};
+}
+
+sub adjustStart($$) {
+ my ($hd, $part) = @_;
+ my $end = $part->{start} + $part->{size};
+
+ $part->{start} = round_up($part->{start},
+ $part->{start} % cylinder_size($hd) < 2 * $hd->{geom}{sectors} ?
+ $hd->{geom}{sectors} : cylinder_size($hd));
+ $part->{size} = $end - $part->{start};
+}
+sub adjustEnd($$) {
+ my ($hd, $part) = @_;
+ my $end = $part->{start} + $part->{size};
+ my $end2 = round_down($end, cylinder_size($hd));
+ unless ($part->{start} < $end2) {
+ $end2 = round_up($end, cylinder_size($hd));
+ }
+ $part->{size} = $end2 - $part->{start};
+}
+
sub get_geometry($) {
my ($dev) = @_;
my $g = "";
@@ -40,9 +64,6 @@ sub get_geometry($) {
my %geom; @geom{qw(heads sectors cylinders start)} = unpack "CCSL", $g;
- #- handle this strange but necessary reduction of visible cylinders on sparc, assume 2 for instance.
- $geom{total_cylinders} = $geom{cylinders}; $geom{cylinders} -= 2 if arch() =~ /^sparc/;
-
{ geom => \%geom, totalsectors => $geom{heads} * $geom{sectors} * $geom{cylinders} };
}
diff --git a/perl-install/partition_table_sun.pm b/perl-install/partition_table_sun.pm
index 808944b8c..9ffa008a8 100644
--- a/perl-install/partition_table_sun.pm
+++ b/perl-install/partition_table_sun.pm
@@ -52,12 +52,9 @@ sub adjustStart($$) {
#- since partition must always start on cylinders boundaries on sparc,
#- note that if start sector is on the first cylinder, it is adjusted
#- to 0 and it is valid.
- $part->{start} = $part->{start} >= partition_table::cylinder_size() ? round_up($part->{start}, partition_table::cylinder_size($hd)) : 0;
+ $part->{start} = $part->{start} >= $hd->cylinder_size() ? round_up($part->{start}, $hd->cylinder_size()) : 0;
$part->{size} = $end - $part->{start};
}
-sub adjustEnd($$) {
- &partition_table::adjustEnd;
-}
#- compute crc checksum used for Sun Label partition, expect
#- $tmp to be the 512 bytes buffer to be read/written to MBR.
@@ -93,7 +90,7 @@ sub read($$) {
my %h;
@h{@$fields1} = unpack $format1, $_[0];
@h{@$fields2} = unpack $format2, $_[1];
- $h{start} = $sector + $h{start_cylinder} * partition_table::cylinder_size($hd);
+ $h{start} = $sector + $h{start_cylinder} * $hd->cylinder_size();
# $h{type} = $typeToDos{$h{type}} || $h{type}; #- for rewrite it ?
$h{size} or $h{$_} = 0 foreach keys %h;
\%h;
@@ -118,9 +115,9 @@ sub write($$$;$) {
}
($info->{infos}, $info->{partitions}) = map { join '', @$_ } list2kv map {
- $_->{start} % partition_table::cylinder_size($hd) == 0 or die "partition not at beginning of cylinder";
+ $_->{start} % $hd->cylinder_size() == 0 or die "partition not at beginning of cylinder";
# local $_->{type} = $typeFromDos{$_->{type}} || $_->{type};
- local $_->{start_cylinder} = $_->{start} / partition_table::cylinder_size($hd) - $sector;
+ local $_->{start_cylinder} = $_->{start} / $hd->cylinder_size() - $sector;
pack($format1, @$_{@$fields1}), pack($format2, @$_{@$fields2});
} @$pt;
@@ -137,6 +134,15 @@ sub write($$$;$) {
sub info {
my ($hd) = @_;
+ #- take care of reduction of the number of cylinders, avoid loop of reduction!
+ unless ($hd->{geom}{total_cylinders} > $hd->{geom}{cylinders}) {
+ $hd->{geom}{total_cylinders} = $hd->{geom}{cylinders};
+ $hd->{geom}{cylinders} -= 2;
+
+ #- rebuild some constants according to number of cylinders.
+ $hd->{totalsectors} = $hd->{geom}{heads} * $hd->{geom}{sectors} * $hd->{geom}{cylinders};
+ }
+
#- build a default suitable partition table,
#- checksum will be built when writing on disk.
#- note third partition is ALWAYS of type Whole disk.
@@ -154,25 +160,6 @@ sub info {
};
$info;
-# my $dtype_scsi = 4; #- taken from fdisk, removed unused one,
-# my $dtype_ST506 = 6; #- see fdisk for more
-# {
-# magic => $magic,
-# magic2 => $magic,
-# dtype => $hd->{device} =~ /^sd/ ? $dtype_scsi : $dtype_ST506,
-# secsize => $common::SECTORSIZE,
-# ncylinders => $hd->{geom}{cylinders},
-# secpercyl => partition_table::cylinder_size($hd),
-# secprtunit => $hd->{geom}{totalsectors},
-# rpm => 3600,
-# interleave => 1,
-# trackskew => 0,
-# cylskew => 0,
-# headswitch => 0,
-# trkseek => 0,
-# bbsize => 8192, #- size of boot area, with label
-# sbsize => 8192, #- max size of fs superblock
-# };
}
sub clear_raw {
@@ -184,7 +171,7 @@ sub clear_raw {
type => 5, #- the whole disk type.
flags => 0,
start_cylinder => 0,
- size => $hd->{geom}{cylinders} * partition_table::cylinder_size($hd),
+ size => $hd->{geom}{cylinders} * $hd->cylinder_size(),
};
$pt;