summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perl-install/ChangeLog4
-rw-r--r--perl-install/common.pm28
-rw-r--r--perl-install/detect_devices.pm3
-rw-r--r--perl-install/install_any.pm6
-rw-r--r--perl-install/install_steps.pm4
-rw-r--r--perl-install/install_steps_gtk.pm2
-rw-r--r--perl-install/keyboard.pm15
-rw-r--r--perl-install/partition_table.pm9
-rw-r--r--perl-install/pkgs.pm33
-rw-r--r--perl-install/printer.pm7
-rw-r--r--perl-install/share/list.sparc2
-rw-r--r--rescue/list7
-rwxr-xr-xrescue/make_rescue_img2
13 files changed, 87 insertions, 35 deletions
diff --git a/perl-install/ChangeLog b/perl-install/ChangeLog
index 55b7e6547..152193099 100644
--- a/perl-install/ChangeLog
+++ b/perl-install/ChangeLog
@@ -1,3 +1,7 @@
+2000-05-19 Fran�ois Pons <fpons@mandrakesoft.com>
+
+ * *.pm: sparc and sparc64 update, a long to do again.
+
2000-05-09 Pixel <pixel@mandrakesoft.com>
* install_any.pm (kdeicons_postinstall): the URL link to doc must
diff --git a/perl-install/common.pm b/perl-install/common.pm
index 34e869636..643201b3e 100644
--- a/perl-install/common.pm
+++ b/perl-install/common.pm
@@ -2,15 +2,15 @@ package common;
use diagnostics;
use strict;
-use vars qw(@ISA %EXPORT_TAGS @EXPORT_OK $printable_chars $sizeof_int $bitof_int $cancel $SECTORSIZE);
+use vars qw(@ISA %EXPORT_TAGS @EXPORT_OK $printable_chars $sizeof_int $bitof_int $cancel $SECTORSIZE %compat_arch);
@ISA = qw(Exporter);
%EXPORT_TAGS = (
- common => [ qw(__ even odd arch min max sqr sum and_ or_ sign product bool invbool listlength bool2text bool2yesno text2bool to_int to_float ikeys member divide is_empty_array_ref is_empty_hash_ref add2hash add2hash_ set_new set_add round round_up round_down first second top uniq translate untranslate warp_text formatAlaTeX formatLines deref) ],
+ common => [ qw(__ even odd arch better_arch compat_arch min max sqr sum and_ or_ sign product bool invbool listlength bool2text bool2yesno text2bool to_int to_float ikeys member divide is_empty_array_ref is_empty_hash_ref add2hash add2hash_ set_new set_add round round_up round_down first second top uniq translate untranslate warp_text formatAlaTeX formatLines deref) ],
functional => [ qw(fold_left compose map_index grep_index map_each grep_each list2kv map_tab_hash mapn mapn_ difference2 before_leaving catch_cdie cdie combine) ],
file => [ qw(dirname basename touch all glob_ cat_ output symlinkf chop_ mode typeFromMagic expand_symlinks) ],
system => [ qw(sync makedev unmakedev psizeof strcpy gettimeofday syscall_ salt getVarsFromSh setVarsInSh setVarsInCsh substInFile availableRam availableMemory removeXiBSuffix template2file formatTime unix2dos setVirtual) ],
- constant => [ qw($printable_chars $sizeof_int $bitof_int $SECTORSIZE) ],
+ constant => [ qw($printable_chars $sizeof_int $bitof_int $SECTORSIZE %compat_arch) ],
);
@EXPORT_OK = map { @$_ } values %EXPORT_TAGS;
@@ -22,6 +22,22 @@ $printable_chars = "\x20-\x7E";
$sizeof_int = psizeof("i");
$bitof_int = $sizeof_int * 8;
$SECTORSIZE = 512;
+%compat_arch = ( #- compatibilty arch mapping.
+ 'noarch' => undef,
+ 'i386' => 'noarch',
+ 'i486' => 'i386',
+ 'i586' => 'i486',
+ 'i686' => 'i586',
+ 'i786' => 'i686',
+ 'k6' => 'i586',
+ 'k7' => 'k6',
+ 'k8' => 'k7',
+ 'ppc' => 'noarch',
+ 'alpha' => 'noarch',
+ 'sparc' => 'noarch',
+ 'sparc32' => 'sparc',
+ 'sparc64' => 'sparc32',
+ );
#-#####################################################################################
#- Functions
@@ -125,6 +141,12 @@ sub arch() {
no strict;
$Config{archname} =~ /(.*)-/ and $1;
}
+sub better_arch {
+ my ($new, $old) = @_;
+ while ($new && $new != $old) { $new = $compat_arch{$_} }
+ $new;
+}
+sub compat_arch { better_arch(arch(), $_[0]) }
sub touch {
my ($f) = @_;
diff --git a/perl-install/detect_devices.pm b/perl-install/detect_devices.pm
index ad35871cc..bed7d98ee 100644
--- a/perl-install/detect_devices.pm
+++ b/perl-install/detect_devices.pm
@@ -112,6 +112,9 @@ sub getSCSI() {
sub getIDE() {
my @idi;
+ #- what about a system with absolutely no IDE on it, like some sparc machine.
+ hasIDE() or return ();
+
#- Great. 2.2 kernel, things are much easier and less error prone.
foreach my $d (sort @{[glob_('/proc/ide/hd*')]}) {
my ($t) = chop_(cat_("$d/media"));
diff --git a/perl-install/install_any.pm b/perl-install/install_any.pm
index f953785b6..9e02cb149 100644
--- a/perl-install/install_any.pm
+++ b/perl-install/install_any.pm
@@ -238,9 +238,11 @@ sub getAvailableSpace {
sub getAvailableSpace_mounted {
my ($prefix) = @_;
my $buf = ' ' x 20000;
- syscall_('statfs', "$prefix/usr", $buf) or return;
+ my $dir = -d "$prefix/usr" ? "$prefix/usr" : "$prefix";
+ syscall_('statfs', $dir, $buf) or return;
my (undef, $blocksize, $size, undef, $free, undef) = unpack "L2L4", $buf;
- ($free || 1) * $blocksize;
+ log::l("space free on $dir is $free blocks of $blocksize bytes");
+ $free * $blocksize || 1;
}
sub getAvailableSpace_raw {
my ($fstab) = @_;
diff --git a/perl-install/install_steps.pm b/perl-install/install_steps.pm
index 2b37f9dfe..fc0c42465 100644
--- a/perl-install/install_steps.pm
+++ b/perl-install/install_steps.pm
@@ -320,13 +320,15 @@ Either your cdrom drive or your cdrom is defective.
Check the cdrom on an installed computer using \"rpm -qpl Mandrake/RPMS/*.rpm\"
") if grep { m|read failed: Input/output error| } cat_("$o->{prefix}/root/install.log");
- -x "$o->{prefix}/usr/bin/dumpkeys" or $::testing or die
+ if (arch() !~ /^sparc/) { #- TODO restore it as may be needed for sparc
+ -x "$o->{prefix}/usr/bin/dumpkeys" or $::testing 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();
diff --git a/perl-install/install_steps_gtk.pm b/perl-install/install_steps_gtk.pm
index 483936295..c8e1b8859 100644
--- a/perl-install/install_steps_gtk.pm
+++ b/perl-install/install_steps_gtk.pm
@@ -813,7 +813,7 @@ sub create_logo_window() {
sub init_sizes() {
($::rootheight, $::rootwidth) = (480, 640);
($::rootheight, $::rootwidth) = my_gtk::gtkroot()->get_size;
- ($::rootheight, $::rootwidth) = (min(768, $::rootheight), min(1024, $::rootwidth));
+ #- ($::rootheight, $::rootwidth) = (min(768, $::rootheight), min(1024, $::rootwidth));
($::stepswidth, $::stepsheight) = (140, $::rootheight);
($::logowidth, $::logoheight) = ($::rootwidth - $::stepswidth, 40);
($::helpwidth, $::helpheight) = ($::rootwidth - $::stepswidth, 100);
diff --git a/perl-install/keyboard.pm b/perl-install/keyboard.pm
index 9462e03a1..39744ab75 100644
--- a/perl-install/keyboard.pm
+++ b/perl-install/keyboard.pm
@@ -97,7 +97,7 @@ arch() =~ /^sparc/ ? (
"ru" => [ __("Russian"), "sunt5-ru", "ru" ],
"uk" => [ __("UK keyboard"), "sunt5-uk", "gb" ],
"us" => [ __("US keyboard"), "sunkeymap", "us" ],
-) : (),
+) : (
arch() =~ /^ppc/ ? (
"us" => [ __("US keyboard"), "mac-us-ext", "us" ],
"de_nodeadkeys" => [ __("German"), "mac-de-latin1-nodeadkeys", "de(nodeadkeys)" ],
@@ -158,7 +158,7 @@ arch() =~ /^ppc/ ? (
"us" => [ __("US keyboard"), "us", "us" ],
"us_intl" => [ __("US keyboard (international)"), "us-latin1", "us_intl" ],
"yu" => [ __("Yugoslavian (latin layout)"), "sr", "yu" ],
-),
+)),
);
@@ -179,22 +179,23 @@ sub text2keyboard {
}
sub loadkeys_files {
- my $p = "/usr/lib/kbd/keymaps/i386/*";
+ my $archkbd = arch() =~ /^sparc/ ? "sun" : arch() =~ /^i\d/ ? "i386" : arch();
+ my $p = "/usr/lib/kbd/keymaps/$archkbd";
my $post = ".kmap.gz";
my %trans = ("cz-latin2" => "cz-lat2");
my (@l, %l);
foreach (values %keyboards) {
local $_ = $trans{$_->[1]} || $_->[1];
- my ($l) = glob_("$p/$_$post");
- $l or /(..)/ and ($l) = glob_("$p/$1$post");
+ my ($l) = grep { -e $_ } ("$p/$_$post");
+ $l or /(..)/ and ($l) = grep { -e $_ } ("$p/$1$post");
print STDERR "unknown $_\n" if $_[0] && !$l; $l or next;
push @l, $l;
foreach (`zgrep include $l | grep "^include"`) {
/include\s+"(.*)"/ or die "bad line $_";
- @l{glob_("$p/$1.inc.gz")} = ();
+ @l{grep { -e $_ } ("$p/$1.inc.gz")} = ();
}
}
- @l, keys %l, map { glob_("$p/$_.inc.gz") } qw(compose euro windowkeys linux-keys-bare);
+ @l, keys %l, grep { -e $_ } map { "$p/$_.inc.gz" } qw(compose euro windowkeys linux-keys-bare);
}
sub lang2keyboard($) {
diff --git a/perl-install/partition_table.pm b/perl-install/partition_table.pm
index b3719cf81..e941a1529 100644
--- a/perl-install/partition_table.pm
+++ b/perl-install/partition_table.pm
@@ -358,7 +358,9 @@ sub read_one($$) {
my ($hd, $sector) = @_;
my ($pt, $info);
- foreach ('dos', 'bsd', 'sun', 'mac', 'unknown') {
+ #- SUN bioses may blank disk or refuse to load it if the partition is unknown.
+ my @parttype = arch() =~ /^sparc/ ? ('sun', 'unknown') : ('dos', 'bsd', 'sun', 'mac', 'unknown');
+ foreach (@parttype) {
/unknown/ and die "unknown partition table format";
eval {
bless $hd, "partition_table_$_";
@@ -516,6 +518,8 @@ sub add_primary($$) {
}
sub add_extended {
+ arch() =~ /^sparc/ and die _("Extended partition not supported on this platform");
+
my ($hd, $part, $extended_type) = @_;
$extended_type =~ s/Extended_?//;
@@ -576,7 +580,8 @@ sub add($$;$$) {
my $e = $hd->{primary}{extended};
- if ($primaryOrExtended eq 'Primary' ||
+ if (arch() =~ /^sparc/ ||
+ $primaryOrExtended eq 'Primary' ||
$primaryOrExtended !~ /Extended/ && is_empty_array_ref($hd->{primary}{normal})) {
eval { add_primary($hd, $part) };
return unless $@;
diff --git a/perl-install/pkgs.pm b/perl-install/pkgs.pm
index e03dcc241..8db9231a9 100644
--- a/perl-install/pkgs.pm
+++ b/perl-install/pkgs.pm
@@ -113,10 +113,11 @@ my %ignoreBadPkg = (
#- following flags : selected, force, installed, base, skip.
#- size and deps are grouped to save memory too and make a much
#- simpler and faster depslist reader, this gets (sizeDeps).
-sub packageHeaderFile { my ($pkg) = @_; $pkg->{file} }
-sub packageName { my ($pkg) = @_; $pkg->{file} =~ /(.*)-[^-]+-[^-]+/ ? $1 : die "invalid file `$pkg->{file}'" }
-sub packageVersion { my ($pkg) = @_; $pkg->{file} =~ /.*-([^-]+)-[^-]+/ ? $1 : die "invalid file `$pkg->{file}'" }
-sub packageRelease { my ($pkg) = @_; $pkg->{file} =~ /.*-[^-]+-([^-]+)/ ? $1 : die "invalid file `$pkg->{file}'" }
+sub packageHeaderFile { my ($pkg) = @_; $pkg->{file} }
+sub packageName { my ($pkg) = @_; $pkg->{file} =~ /([^\(]*)(?:\([^\)]*\))?-[^-]+-[^-]+/ ? $1 : die "invalid file `$pkg->{file}'" }
+sub packageSpecificArch { my ($pkg) = @_; $pkg->{file} =~ /[^\(]*(?:\(([^\)])*\))?-[^-]+-[^-]+/ ? $1 : die "invalid file `$pkg->{file}'" }
+sub packageVersion { my ($pkg) = @_; $pkg->{file} =~ /.*-([^-]+)-[^-]+/ ? $1 : die "invalid file `$pkg->{file}'" }
+sub packageRelease { my ($pkg) = @_; $pkg->{file} =~ /.*-[^-]+-([^-]+)/ ? $1 : die "invalid file `$pkg->{file}'" }
sub packageSize { my ($pkg) = @_; to_int($pkg->{sizeDeps}) }
sub packageDepsId { my ($pkg) = @_; split ' ', ($pkg->{sizeDeps} =~ /^\d*\s*(.*)/)[0] }
@@ -143,7 +144,8 @@ sub packageProvides { my ($pkg) = @_; @{$pkg->{provides} || []} }
sub packageFile {
my ($pkg) = @_;
$pkg->{header} or die "packageFile: missing header";
- $pkg->{file} . "." . c::headerGetEntry($pkg->{header}, 'arch') . ".rpm";
+ $pkg->{file} =~ /([^\(]*)(?:\([^\)]*\))?(-[^-]+-[^-]+)/;
+ "$1$2." . c::headerGetEntry($pkg->{header}, 'arch') . ".rpm";
}
sub packageId {
@@ -418,10 +420,25 @@ sub psUsingHdlist {
flags => 0, #- flags
medium => $m,
};
- if ($packages->[0]{packageName($pkg)}) {
- log::l("ignoring package $1 already present in distribution");
+ my $specific_arch = packageSpecificArch($pkg);
+ if (!$specific_arch || compat_arch($specific_arch)) {
+ my $old_pkg = $packages->[0]{packageName($pkg)};
+ if ($old_pkg) {
+ if (packageVersion($pkg) eq packageVersion($old_pkg) && packageRelease($pkg) eq packageRelease($old_pkg)) {
+ if (better_arch($specific_arch, packageSpecificArch($old_pkg))) {
+ log::l("replacing old package with package $1 with better arch");
+ $packages->[0]{packageName($pkg)} = $pkg;
+ } else {
+ log::l("keeping old package against package $1 with worse arch");
+ }
+ } else {
+ log::l("ignoring package $1 already present in distribution with different version or release");
+ }
+ } else {
+ $packages->[0]{packageName($pkg)} = $pkg;
+ }
} else {
- $packages->[0]{packageName($pkg)} = $pkg;
+ log::l("ignoring package $1 with incompatible arch");
}
} else {
die "bad hdlist file: $newf";
diff --git a/perl-install/printer.pm b/perl-install/printer.pm
index 0332b85b6..c720e8d13 100644
--- a/perl-install/printer.pm
+++ b/perl-install/printer.pm
@@ -418,6 +418,7 @@ sub create_spool_dir($) {
sub create_config_file($$%) {
my ($inputfile, $outputfile, %toreplace) = @_;
template2file("$prefix/$inputfile", "$prefix/$outputfile", %toreplace);
+ eval { commands::chown_("root.lp", "$prefix/$outputfile") };
}
@@ -429,7 +430,8 @@ sub copy_master_filter($) {
my $complete_path = "$prefix/$queue_path/filter";
my $master_filter = "$prefix/$PRINTER_FILTER_DIR/master-filter";
- eval { commands::cp('-f', $master_filter, $complete_path) }; #- -f for update.
+ eval { commands::cp('-f', $master_filter, $complete_path);
+ commands::cp("root.lp", $complete_path); }; #- -f for update.
$@ and die "Can't copy $master_filter to $complete_path $!";
}
@@ -641,13 +643,13 @@ sub configure_queue($) {
print F "user=$entry->{NCPUSER}\n";
print F "password=$entry->{NCPPASSWD}\n";
}
+ eval { chmod 0640, "$prefix$queue_path/.config"; commands::chown_("root.lp", "$prefix$queue_path/.config") };
copy_master_filter($queue_path);
#-now the printcap file, note this one contains all the printer (use configured for that).
local *PRINTCAP;
open PRINTCAP, ">$prefix/etc/printcap" or die "Can't open printcap file $!";
-
print PRINTCAP $intro_printcap_test;
foreach (values %{$entry->{configured}}) {
$_->{DBENTRY} = $thedb_gsdriver{$_->{GSDRIVER}}{ENTRY} unless defined $_->{DBENTRY};
@@ -686,6 +688,7 @@ sub configure_queue($) {
print PRINTCAP "\t:if=$_->{IF}:\n";
print PRINTCAP "\n";
}
+ eval { commands::chown_("root.lp", "$prefix/etc/printcap") };
my $useUSB = 0;
foreach (values %{$entry->{configured}}) {
diff --git a/perl-install/share/list.sparc b/perl-install/share/list.sparc
index 442862710..efe38ea7a 100644
--- a/perl-install/share/list.sparc
+++ b/perl-install/share/list.sparc
@@ -76,6 +76,6 @@
/usr/lib/perl5/site_perl/5.6.0/sparc-linux/auto/Gtk/Gtk.bs
/usr/lib/perl5/site_perl/5.6.0/sparc-linux/auto/Gtk/Gtk.so
/usr/lib/rpm/rpmrc
-/usr/X11R6/bin/XF86_Xsun24
+/usr/X11R6/bin/Xsun24
/usr/X11R6/bin/XF86_Mach64
/usr/X11R6/bin/xmodmap
diff --git a/rescue/list b/rescue/list
index 329e8a5d0..a9062e966 100644
--- a/rescue/list
+++ b/rescue/list
@@ -75,7 +75,6 @@
/sbin/init
/sbin/insmod
/sbin/ldconfig
-/sbin/lilo
/sbin/mingetty
/sbin/mkdosfs
/sbin/mkfs.ext2
@@ -114,16 +113,10 @@
/sbin/killall5
/usr/bin/perl
/usr/bin/perl5
-/usr/bin/perl5.00503
/usr/bin/extract_archive
/bin/sort
/usr/bin/md5sum
/etc/protocols
-/sbin/lspci
-/usr/share/pci.ids
/bin/rpm
-/sbin/mkreiserfs
/sbin/mkraid
-/usr/sbin/rescuept
/usr/lib/rpm/rpmrc
-/usr/sbin/ext2resize
diff --git a/rescue/make_rescue_img b/rescue/make_rescue_img
index 56309dfe5..3de1d5ab9 100755
--- a/rescue/make_rescue_img
+++ b/rescue/make_rescue_img
@@ -46,7 +46,7 @@ foreach (keyboard::loadkeys_files) {
}
unlink "$tmp/usr/lib/kbd/keymaps/i386/qwertz/fr.kmap.gz";
-foreach (cat_("list")) {
+foreach (cat_("list"), cat_(`../tools/specific_arch list`)) {
chomp;
install($_);
chomp, install_lib($_) foreach `ldd $_ 2>/dev/null | grep "=>" | sed -e 's/.*=> //' -e 's/ .*//'`;