From fe0e92f4e338bd3ab690e409ff9ccde6cfe58780 Mon Sep 17 00:00:00 2001 From: Francois Pons Date: Mon, 24 Jan 2000 13:11:27 +0000 Subject: first sparc release of DrakX. --- Makefile | 20 +++-- make_boot_img | 10 +-- perl-install/Makefile | 16 +++- perl-install/Xconfigurator_consts.pm | 40 +++++++++ perl-install/fs.pm | 20 +++-- perl-install/fsedit.pm | 6 ++ perl-install/install2.pm | 9 +- perl-install/install_steps.pm | 40 +++++++-- perl-install/install_steps_gtk.pm | 23 ++++- perl-install/install_steps_interactive.pm | 134 ++++++++++++++++++++++++++++-- perl-install/keyboard.pm | 20 ++++- perl-install/list.sparc | 73 ++++++++++++++++ perl-install/modules.pm | 76 +++++++++++------ perl-install/mouse.pm | 36 ++++---- perl-install/partition_table.pm | 41 ++++++--- perl-install/partition_table_bsd.pm | 19 ++++- perl-install/partition_table_dos.pm | 20 ++++- perl-install/partition_table_raw.pm | 5 +- perl-install/partition_table_sun.pm | 119 ++++++++++++++++++++------ perl-install/share/list | 66 +++++++-------- perl-install/share/list.sparc | 73 ++++++++++++++++ tools/make_mdkinst_stage2 | 2 +- 22 files changed, 702 insertions(+), 166 deletions(-) create mode 100644 perl-install/list.sparc create mode 100644 perl-install/share/list.sparc diff --git a/Makefile b/Makefile index f38adb075..cd756a608 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,13 @@ ARCH := $(patsubst i%86,i386,$(shell uname -m)) ARCH := $(patsubst sparc%,sparc,$(ARCH)) -BOOT_IMG = hd.img cdrom.img network.img network_ks.img pcmcia.img pcmcia_ks.img +BOOT_IMG = hd.img cdrom.img network.img +ifeq (i386,$(ARCH)) +BOOT_IMG += pcmcia.img pcmcia_ks.img network_ks.img +endif +ifeq (sparc,$(ARCH)) +BOOT_IMG += live.img tftp.img tftprd.img +endif 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 @@ -21,27 +27,29 @@ 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 $(ROOTDEST)/images/*_ks.img + cp -f $(BOOT_IMG) $(ROOTDEST)/images ; rm -f $(ROOTDEST)/images/*_ks.img make -C perl-install full_stage2 build: $(BOOT_IMG) autoboot: +ifeq (i386,$(ARCH)) install -d $(AUTOBOOT) cp -f vmlinuz $(AUTOBOOT) cp -f hd.rdz $(AUTOBOOT)/initrd.hd cp -f cdrom.rdz $(AUTOBOOT)/initrd.cd cp -f pcmcia.rdz $(AUTOBOOT)/initrd.pc cp -f network.rdz $(AUTOBOOT)/initrd.nt +endif dirs: for i in $(DIRS); do make -C $$i; done $(BOOT_RDZ): dirs modules - ./make_boot_img $@ $(@:%.rdz=%) + `./tools/specific_arch ./make_boot_img` $@ $(@:%.rdz=%) $(BOOT_IMG): %.img: %.rdz - ./make_boot_img $@ $(@:%.img=%) + `./tools/specific_arch ./make_boot_img` $@ $(@:%.img=%) tar: clean rpm -qa > needed_rpms.lst @@ -49,14 +57,14 @@ tar: clean rm needed_rpms.lst modules: kernel/lib/modules - ./update_kernel + `./tools/specific_arch ./update_kernel` $(BOOT_IMG:%=%f): %f: % dd if=$< of=/dev/fd0 xmessage "Floppy done" clean: - rm -rf $(BOOT_IMG) $(BOOT_RDZ) $(BINS) modules install_pcmcia_modules vmlinuz System.map + rm -rf $(BOOT_IMG) $(BOOT_RDZ) $(BINS) modules install_pcmcia_modules vmlinu* System.map rm -rf install/*/sbin/install install/*/sbin/init for i in $(DIRS); do make -C $$i clean; done find . -name "*~" -o -name ".#*" | xargs rm -f diff --git a/make_boot_img b/make_boot_img index d5f3f5c4a..c6f5431bf 100755 --- a/make_boot_img +++ b/make_boot_img @@ -6,7 +6,7 @@ $instdir = "install"; $ks = "kickstart=floppy" if $type =~ s/_ks//; -$mnt = "/tmp/drakx_mnt"; +$mnt = "/mnt/disk"; $mke2fs = "/sbin/mke2fs -q -m 0 -F -s 1"; if ($>) { @@ -14,11 +14,6 @@ if ($>) { $ENV{PATH} = "/sbin:/usr/sbin:$ENV{PATH}"; } -sub __ { print @_, "\n"; system(@_); } -sub _ { __ @_; $? and die; } - -_ "$sudo mkdir $mnt" unless -e $mnt; - $install = $ {{ pcmcia => "full-install", network => "install", @@ -29,6 +24,9 @@ $install = $ {{ $img =~ /rdz$/ ? initrd($mnt, $img) : msg_boot_img($mnt, $img); #boot_img($mnt, $img); +sub __ { print @_, "\n"; system(@_); } +sub _ { __ @_; $? and die; } + sub install_s { _ "strip $_[0]"; _ "$sudo install $_[0] $_[1]" } sub initrd { diff --git a/perl-install/Makefile b/perl-install/Makefile index 230d61fec..e0eaf3fdc 100644 --- a/perl-install/Makefile +++ b/perl-install/Makefile @@ -55,8 +55,9 @@ install_pms: $(DIRS) get_needed_files: $(DIRS) # export PERL_INSTALL_TEST=1 ; strace -f -e trace=file -o '| grep -v "(No such file or directory)" | sed -e "s/[^\"]*\"//" -e "s/\".*//" | grep "^/" | grep -v -e "^/tmp" -e "^/home" -e "^/proc" -e "^/var" -e "^/dev" -e "^/etc" -e "^/usr/lib/rpm" > /tmp/list ' $(PERL) -d install2 < /dev/null - cp -f list /tmp/list - perl -pi -e "s/ARCH/$(ARCH)/" /tmp/list + cp -f `../tools/specific_arch list` /tmp/list +# cp -f list /tmp/list +# perl -pi -e "s/ARCH/$(ARCH)/" /tmp/list find auto -follow -name "*.so" >> /tmp/list for i in $(LOCALFILES) `cat /tmp/list` ; do \ @@ -75,6 +76,13 @@ get_needed_files: $(DIRS) install -d $(ROOTDEST)/Mandrake/base install -s $(LOCALFILES) $(DEST)/usr/bin # cp -f $(LOCALFILES2) $(DEST)/usr/bin +ifeq (sparc,$(ARCH)) + cp -a /usr/X11R6/lib/X11/xkb $(DEST)/usr/X11R6/lib/X11 + rm -f $(DEST)/usr/X11R6/lib/X11/xkb/compiled + ln -s /tmp $(DEST)/usr/X11R6/lib/X11/xkb/compiled + ln -s /usr/X11R6/lib/X11 $(DEST)/usr/lib/X11 + ln -s /usr/X11R6/lib/X11/xkb/xkbcomp $(DEST)/usr/bin/xkbcomp +endif for i in `cat /tmp/list`; do \ if (echo $$i | grep -q "lib/[^/]*\.so"); then \ @@ -101,7 +109,7 @@ get_needed_files: $(DIRS) perl -ane 'symlink "$$F[1]", "$(DEST)/usr/bin/$$F[0]"' aliases - tar xfy locales.tar.bz2 -C $(DEST) + tar xfy `../tools/specific_arch locales.tar.bz2` -C $(DEST) # DEST=$(DEST) perl -I. -MForMakefile -e 'locale()' # DEST=$(DEST) perl -I. -MForMakefile -e 'xmodmap()' @@ -128,7 +136,7 @@ get_needed_files: $(DIRS) tar xyC $(DEST) -f ../install/install1_pcmcia.tar.bz2 ./etc/pcmcia full_stage2: - sudo rm -rf $(DEST) + rm -rf $(DEST) mkdir -p $(DEST) $(MAKE) get_needed_files $(MAKE) stage2 diff --git a/perl-install/Xconfigurator_consts.pm b/perl-install/Xconfigurator_consts.pm index 4cb0d8730..11fee769d 100644 --- a/perl-install/Xconfigurator_consts.pm +++ b/perl-install/Xconfigurator_consts.pm @@ -540,6 +540,45 @@ $keyboardsection_part2 = ' # XkbDisable '; +if (arch() =~ /^sparc/) { + $keyboardsection_part3 = ' +# To customise the XKB settings to suit your keyboard, modify the +# lines below (which are the defaults). For example: +# XkbModel "type6" +# If you have a SUN keyboard, you may use: +# XkbModel "sun" +# +# Then to change the language, change the Layout setting. +# For example, a german layout can be obtained with: +# XkbLayout "de" +# or: +# XkbLayout "de" +# XkbVariant "nodeadkeys" +# +# If you\'d like to switch the positions of your capslock and +# control keys, use: +# XkbOptions "ctrl:swapcaps" + +# These are the default XKB settings for XFree86 on SUN: +# XkbRules "sun" +# XkbModel "type5_unix" +# XkbLayout "us" +# XkbCompat "compat/complete" +# XkbTypes "types/complete" +# XkbKeycodes "sun(type5)" +# XkbGeometry "sun(type5)" +# XkbSymbols "sun/us(sun5)" + + XkbRules "sun" + XkbModel "sun" + XkbLayout "us" + XkbCompat "compat/complete" + XkbTypes "types/complete" + XkbKeycodes "sun(type5)" + XkbGeometry "sun(type5)" + XkbSymbols "sun/us(sun5)" +'; +} else { $keyboardsection_part3 = ' # To customise the XKB settings to suit your keyboard, modify the # lines below (which are the defaults). For example, for a non-U.S. @@ -574,6 +613,7 @@ $keyboardsection_part3 = ' XkbRules "xfree86" XkbModel "pc101" '; +} $keyboardsection_end = ' EndSection diff --git a/perl-install/fs.pm b/perl-install/fs.pm index f2f3a48de..3920de74b 100644 --- a/perl-install/fs.pm +++ b/perl-install/fs.pm @@ -144,11 +144,13 @@ sub mount_part($;$$) { $part->{isMounted} and return; - if (isSwap($part)) { - swap::swapon($part->{device}); - } else { - $part->{mntpoint} or die "missing mount point"; - mount(devices::make($part->{device}), ($prefix || '') . $part->{mntpoint}, type2fs($part->{type}), $rdonly); + unless ($::testing) { + if (isSwap($part)) { + swap::swapon($part->{device}); + } else { + $part->{mntpoint} or die "missing mount point"; + mount(devices::make($part->{device}), ($prefix || '') . $part->{mntpoint}, type2fs($part->{type}), $rdonly); + } } $part->{isMounted} = $part->{isFormatted} = 1; #- assume that if mount works, partition is formatted } @@ -158,9 +160,11 @@ sub umount_part($;$) { $part->{isMounted} or return; - isSwap($part) ? - swap::swapoff($part->{device}) : - umount(($prefix || '') . ($part->{mntpoint} || devices::make($part->{device}))); + unless ($::testing) { + isSwap($part) ? + swap::swapoff($part->{device}) : + umount(($prefix || '') . ($part->{mntpoint} || devices::make($part->{device}))); + } $part->{isMounted} = 0; } diff --git a/perl-install/fsedit.pm b/perl-install/fsedit.pm index 5bcabddeb..57f29e8cc 100644 --- a/perl-install/fsedit.pm +++ b/perl-install/fsedit.pm @@ -84,10 +84,16 @@ sub readProcPartitions { @parts; } +#- get all normal partition including special ones as found on sparc. sub get_fstab(@) { map { partition_table::get_normal_parts($_) } @_; } +#- get normal partition that should be visible for working on. +sub get_visible_fstab(@) { + grep { $_ && !partition_table::isWholedisk($_) } get_fstab(@_); +} + sub free_space(@) { sum map { $_->{size} } map { partition_table::get_holes($_) } @_; } diff --git a/perl-install/install2.pm b/perl-install/install2.pm index f6ca92a64..80535764a 100644 --- a/perl-install/install2.pm +++ b/perl-install/install2.pm @@ -121,7 +121,7 @@ $o = $::o = { autoSCSI => 0, mkbootdisk => 1, #- no mkbootdisk if 0 or undef, find a floppy with 1, or fd1 #- packages => [ qw() ], - partitioning => { clearall => 0, eraseBadPartitions => 0, auto_allocate => 0, autoformat => 0 }, #- , readonly => 0 + partitioning => { clearall => 0, eraseBadPartitions => 0, auto_allocate => 0, autoformat => 0 }, #-, readonly => 0 }, #- security => 2, partitions => [ { mntpoint => "/boot", size => 10 << 11, type => 0x83, maxsize => 30 << 11 }, @@ -189,9 +189,10 @@ $o = $::o = { #- display => "192.168.1.19:1", steps => \%installSteps, orderedSteps => \@orderedInstallSteps, - base => [ qw(basesystem sed initscripts console-tools utempter ldconfig chkconfig ntsysv setup filesystem SysVinit bdflush crontabs dev e2fsprogs etcskel fileutils findutils getty_ps grep gzip hdparm info initscripts isapnptools kernel less ldconfig logrotate losetup man mingetty modutils mount net-tools passwd procmail procps psmisc mandrake-release rootfiles rpm sash ash setserial shadow-utils sh-utils stat sysklogd tar termcap textutils time tmpwatch util-linux vim-minimal vixie-cron which perl-base msec) ], - base_i386 => [ "lilo", "mkbootdisk" ], - base_alpha => [ "aboot" ], + base => [ qw(basesystem sed initscripts console-tools utempter ldconfig chkconfig ntsysv setup filesystem SysVinit bdflush crontabs dev e2fsprogs etcskel fileutils findutils getty_ps grep gzip hdparm info initscripts kernel less ldconfig logrotate losetup man mingetty modutils mount net-tools passwd procmail procps psmisc mandrake-release rootfiles rpm sash ash setserial shadow-utils sh-utils stat sysklogd tar termcap textutils time tmpwatch util-linux vim-minimal vixie-cron which perl-base msec) ], + base_i386 => [ "lilo", "mkbootdisk", "isapnptools" ], + base_alpha => [ "aboot", "isapnptools" ], + base_sparc => [ "silo", "mkbootdisk" ], #- for the list of fields available for user and superuser, see @etc_pass_fields in install_steps.pm #- intf => [ { DEVICE => "eth0", IPADDR => '1.2.3.4', NETMASK => '255.255.255.128' } ], diff --git a/perl-install/install_steps.pm b/perl-install/install_steps.pm index f39b3fb0b..f868bfeae 100644 --- a/perl-install/install_steps.pm +++ b/perl-install/install_steps.pm @@ -564,17 +564,29 @@ sub createBootdisk($) { return if $::testing; - require lilo; - lilo::mkbootdisk($o->{prefix}, install_any::kernelVersion(), $dev, $o->{bootloader}{perImageAppend}); - $o->{mkbootdisk} = $dev; + if (arch() =~ /^sparc/) { + require silo; + silo::mkbootdisk($o->{prefix}, install_any::kernelVersion(), $dev, $o->{bootloader}{perImageAppend}); + $o->{mkbootdisk} = $dev; + } else { + require lilo; + lilo::mkbootdisk($o->{prefix}, install_any::kernelVersion(), $dev, $o->{bootloader}{perImageAppend}); + $o->{mkbootdisk} = $dev; + } } #------------------------------------------------------------------------------ sub readBootloaderConfigBeforeInstall { my ($o) = @_; my ($image, $v); - require lilo; - add2hash($o->{bootloader} ||= {}, lilo::read($o->{prefix}, "/etc/lilo.conf")); + + if (arch() =~ /^sparc/) { + require silo; + add2hash($o->{bootloader} ||= {}, silo::read($o->{prefix}, "/etc/silo.conf")); + } else { + require lilo; + add2hash($o->{bootloader} ||= {}, lilo::read($o->{prefix}, "/etc/lilo.conf")); + } #- since kernel or kernel-smp may not be upgraded, it should be checked #- if there is a need to update existing lilo.conf entries by using that @@ -602,15 +614,25 @@ sub readBootloaderConfigBeforeInstall { sub setupBootloaderBefore { my ($o) = @_; - require lilo; - lilo::suggest($o->{prefix}, $o->{bootloader}, $o->{hds}, $o->{fstab}, install_any::kernelVersion()); - $o->{bootloader}{keytable} ||= keyboard::keyboard2kmap($o->{keyboard}); + if (arch() =~ /^sparc/) { + require silo; + silo::suggest($o->{prefix}, $o->{bootloader}, $o->{hds}, $o->{fstab}, install_any::kernelVersion()); + } else { + require lilo; + lilo::suggest($o->{prefix}, $o->{bootloader}, $o->{hds}, $o->{fstab}, install_any::kernelVersion()); + $o->{bootloader}{keytable} ||= keyboard::keyboard2kmap($o->{keyboard}); + } } sub setupBootloader($) { my ($o) = @_; return if $::g_auto_install; - lilo::install($o->{prefix}, $o->{bootloader}); + + if (arch() =~ /^sparc/) { + silo::install($o->{prefix}, $o->{bootloader}); + } else { + lilo::install($o->{prefix}, $o->{bootloader}); + } } #------------------------------------------------------------------------------ diff --git a/perl-install/install_steps_gtk.pm b/perl-install/install_steps_gtk.pm index ce374c433..4ad02d116 100644 --- a/perl-install/install_steps_gtk.pm +++ b/perl-install/install_steps_gtk.pm @@ -181,7 +181,7 @@ sub new($$) { my $ok = 1; local $SIG{CHLD} = sub { $ok = 0 }; unless (fork) { - exec $_[0], "-kb", "-dpms","-s" ,"240", "-allowMouseOpenFail", "-xf86config", $f or exit 1; + exec $_[0], (arch() =~ /^sparc/ ? () : ("-kb")), "-dpms","-s" ,"240", "-allowMouseOpenFail", "-xf86config", $f or exit 1; } foreach (1..15) { sleep 1; @@ -192,6 +192,7 @@ sub new($$) { }; my @servers = qw(FBDev VGA16); @servers = qw(FBDev 3DLabs TGA) if arch() eq "alpha"; + @servers = qw(Mach64) if arch() =~ /^sparc/; foreach (@servers) { log::l("Trying with server $_"); @@ -221,6 +222,8 @@ sub new($$) { install_theme($o); create_logo_window($o); +# eval { sleep 10; run_command::run('xhost+') }; #- for testing + $my_gtk::force_center = [ $width - $windowwidth, $logoheight, $windowwidth, $windowheight ]; (bless {}, ref $type || $type)->SUPER::new($o); @@ -802,7 +805,7 @@ END local *F; open F, ">$file" or die "can't create X configuration file $file"; - print F <wait_message('', _("Preparing bootloader")); - $o->SUPER::setupBootloaderBefore($o); -} - -#------------------------------------------------------------------------------ -sub setupBootloader { +sub setupLILO { my ($o, $more) = @_; my $b = $o->{bootloader}; @@ -821,6 +814,131 @@ _("Default") => { val => \$default, type => 'bool' }, } } +#------------------------------------------------------------------------------ +sub setupSILO { + my ($o, $more) = @_; + my $b = $o->{bootloader}; + + #- assume this default parameters. + $b->{root} = "/dev/" . fsedit::get_root($o->{fstab})->{device}; + $b->{partition} = ($b->{root} =~ /\D*(\d*)/)[0] || '1'; + + if ($::beginner && $more == 1) { + #- nothing more to do here. + } elsif ($more || !$::beginner) { + $o->set_help("setupBootloaderGeneral"); + + $::expert and $o->ask_yesorno('', _("Do you want to use SILO?"), 1) || return; + + my @l = ( +_("Delay before booting default image") => \$b->{timeout}, +$o->{security} < 4 ? () : ( +_("Password") => { val => \$b->{password}, hidden => 1 }, +_("Password (again)") => { val => \$b->{password2}, hidden => 1 }, +_("Restrict command line options") => { val => \$b->{restricted}, type => "bool", text => _("restrict") }, +) + ); + + $o->ask_from_entries_refH('', _("SILO main options"), \@l, + complete => sub { +#- $o->{security} > 4 && length($b->{password}) < 6 and $o->ask_warn('', _("At this level of security, a password (and a good one) in silo is requested")), return 1; + $b->{restricted} && !$b->{password} and $o->ask_warn('', _("Option ``Restrict command line options'' is of no use without a password")), return 1; + $b->{password} eq $b->{password2} or !$b->{restricted} or $o->ask_warn('', [ _("The passwords do not match"), _("Please try again") ]), return 1; + 0; + } + ) or return; + } + + until ($::beginner && $more <= 1) { + $o->set_help('setupBootloaderAddEntry'); + my $c = $o->ask_from_list_([''], +_("Here are the following entries in SILO. +You can add some more or change the existing ones."), + [ (sort @{[map_each { "$::b->{label} ($::a)" . ($b->{default} eq $::b->{label} && " *") } %{$b->{entries}}]}), __("Add"), __("Done") ], + ); + $c eq "Done" and last; + + my ($e, $name); + + if ($c eq "Add") { + my @labels = map { $_->{label} } values %{$b->{entries}}; + my $prefix; + + $e = { type => 'image' }; + $prefix = "linux"; + + $e->{label} = $prefix; + for (my $nb = 0; member($e->{label}, @labels); $nb++) { $e->{label} = "$prefix-$nb" } + } else { + ($name) = $c =~ /\((.*?)\)/; + $e = $b->{entries}{$name}; + } + my $old_name = $name; + my %old_e = %$e; + my $default = my $old_default = $e->{label} eq $b->{default}; + + my @l; + if ($e->{type} eq "image") { + @l = ( +_("Image") => { val => \$name, list => [ eval { glob_("/boot/vmlinuz*") } ] }, +_("Partition") => { val => \$e->{partition}, list => [ map { ("/dev/$_->{device}" =~ /\D*(\d*)/)[0] || 1} @{$o->{fstab}} ], not_edit => !$::expert }, +_("Root") => { val => \$e->{root}, list => [ map { "/dev/$_->{device}" } @{$o->{fstab}} ], not_edit => !$::expert }, +_("Append") => \$e->{append}, +_("Initrd") => { val => \$e->{initrd}, list => [ eval { glob_("/boot/initrd*") } ] }, +_("Read-write") => { val => \$e->{'read-write'}, type => 'bool' } + ); + @l = @l[0..7] unless $::expert; + } else { + die "Other SILO entries not supported at the moment"; + } + @l = ( +_("Label") => \$e->{label}, +@l, +_("Default") => { val => \$default, type => 'bool' }, + ); + + if ($o->ask_from_entries_refH($c eq "Add" ? '' : ['', _("Ok"), _("Remove entry")], + '', \@l, + complete => sub { + $e->{label} or $o->ask_warn('', _("Empty label not allowed")), return 1; + member($e->{label}, map { $_->{label} } grep { $_ != $e } values %{$b->{entries}}) and $o->ask_warn('', _("This label is already in use")), return 1; + $name ne $old_name && $b->{entries}{$name} and $o->ask_warn('', _("A entry %s already exists", $name)), return 1; + } + )) { + $b->{default} = $old_default || $default ? $default && $e->{label} : $b->{default}; + + delete $b->{entries}{$old_name}; + $b->{entries}{$name} = $e; + } else { + delete $b->{entries}{$old_name}; + } + } + eval { $o->SUPER::setupBootloader }; + if ($@) { + $o->ask_warn('', + [ _("Installation of SILO failed. The following error occured:"), + grep { !/^Warning:/ } cat_("$o->{prefix}/tmp/.error") ]); + unlink "$o->{prefix}/tmp/.error"; + die "already displayed"; + } +} + +#------------------------------------------------------------------------------ +sub setupBootloaderBefore { + my ($o) = @_; + my $w = $o->wait_message('', _("Preparing bootloader")); + $o->SUPER::setupBootloaderBefore($o); +} + +#------------------------------------------------------------------------------ +sub setupBootloader { + if (arch() =~ /^sparc/) { + &setupSILO; + } else { + &setupLILO; + } +} + #------------------------------------------------------------------------------ sub miscellaneousNetwork { my ($o, $clicked) = @_; diff --git a/perl-install/keyboard.pm b/perl-install/keyboard.pm index 16fe92369..cb963c4d4 100644 --- a/perl-install/keyboard.pm +++ b/perl-install/keyboard.pm @@ -85,6 +85,19 @@ my %lang2keyboard = #- key = extension for Xmodmap file, [0] = description of the keyboard, #- [1] = name for loadkeys, [2] = name for XKB my %keyboards = ( +arch() =~ /^sparc/ ? ( + "cs" => [ __("Czech"), "sunt5-us-cz", "cs" ], + "de" => [ __("German"), "sunt5-de-latin1", "de" ], + "dvorak" => [ __("Dvorak"), "sundvorak", "dvorak" ], + "es" => [ __("Spanish"), "sunt5-es", "es" ], + "fi" => [ __("Finnish"), "sunt5-fi-latin1", "fi" ], + "fr" => [ __("French"), "sunt5-fr-latin1", "fr" ], + "no" => [ __("Norwegian"), "sunt4-no-latin1", "no" ], + "pl" => [ __("Polish"), "sun-pl-altgraph", "pl" ], + "ru" => [ __("Russian"), "sunt5-ru", "ru" ], + "uk" => [ __("UK keyboard"), "sunt5-uk", "us" ], + "us" => [ __("US keyboard"), "sunkeymap", "us" ], +) : ( "am" => [ __("Armenian"), "am-armscii8", "am" ], "be" => [ __("Belgian"), "be-latin1", "be" ], "bg" => [ __("Bulgarian"), "bg", "bg" ], @@ -130,6 +143,7 @@ my %keyboards = ( "us" => [ __("US keyboard"), "us", "us" ], "us_intl" => [ __("US keyboard (international)"), "us-latin1", "us_intl" ], "yu" => [ __("Yugoslavian (latin layout)"), "sr", "yu" ], +), ); #-###################################################################################### @@ -151,10 +165,12 @@ sub text2keyboard { sub lang2keyboard($) { local ($_) = @_; - $lang2keyboard{$_} || $keyboards{$_} && $_ || "us"; #-substr($_, 0, 2); + my $kb = $lang2keyboard{$_} || $keyboards{$_} && $_ || "us"; + $keyboards{$kb} ? $kb : "us"; #- handle incorrect keyboad mapping to us. } sub load($) { + return if arch() =~ /^sparc/; my ($keymap) = @_; my ($magic, @keymaps) = unpack "I i" . c::MAX_NR_KEYMAPS() . "a*", $keymap; @@ -207,7 +223,7 @@ sub setup($) { eval { load() }; } my $f = xmodmap_file($keyboard); - eval { run_program::run('xmodmap', $f) } unless $::testing || !$f; + #eval { run_program::run('xmodmap', $f) } unless $::testing || !$f; } sub write($$;$) { diff --git a/perl-install/list.sparc b/perl-install/list.sparc new file mode 100644 index 000000000..d35feefa2 --- /dev/null +++ b/perl-install/list.sparc @@ -0,0 +1,73 @@ +/bin/ash +/bin/cpio +/lib/libnss_nis.so.2 +/lib/libnss_files.so.2 +/lib/libnss_dns.so.2 +/lib/libresolv.so.2 +/etc/protocols +/sbin/fdisk +/sbin/ifport +/sbin/insmod +/sbin/mkraid +/sbin/rmmod +/sbin/mkdosfs +/sbin/mke2fs +/sbin/raidstart +/usr/bin/bzip2 +/usr/bin/perl +/usr/lib/libimlib-png.so +/usr/lib/gtk/themes/engines/libpixmap.so +/usr/lib/gtk/themes/engines/libpixmap.la +/usr/lib/libimlib-png.so +/usr/lib/perl5/5.00503/AutoLoader.pm +/usr/lib/perl5/5.00503/Carp.pm +/usr/lib/perl5/5.00503/Data/Dumper.pm +/usr/lib/perl5/5.00503/Exporter.pm +/usr/lib/perl5/5.00503/FileHandle.pm +/usr/lib/perl5/5.00503/SelectSaver.pm +/usr/lib/perl5/5.00503/SelfLoader.pm +/usr/lib/perl5/5.00503/Symbol.pm +/usr/lib/perl5/5.00503/Time/Local.pm +/usr/lib/perl5/5.00503/dumpvar.pl +/usr/lib/perl5/5.00503/sparc-linux/Config.pm +/usr/lib/perl5/5.00503/sparc-linux/DynaLoader.pm +/usr/lib/perl5/5.00503/sparc-linux/Fcntl.pm +/usr/lib/perl5/5.00503/sparc-linux/auto/Fcntl/Fcntl.bs +/usr/lib/perl5/5.00503/sparc-linux/auto/Fcntl/Fcntl.so +/usr/lib/perl5/5.00503/sparc-linux/IO/File.pm +/usr/lib/perl5/5.00503/sparc-linux/IO/Handle.pm +/usr/lib/perl5/5.00503/sparc-linux/IO/Seekable.pm +/usr/lib/perl5/5.00503/sparc-linux/IO/Socket.pm +/usr/lib/perl5/5.00503/sparc-linux/Socket.pm +/usr/lib/perl5/5.00503/sparc-linux/_h2ph_pre.ph +/usr/lib/perl5/5.00503/sparc-linux/asm/unistd.ph +/usr/lib/perl5/5.00503/sparc-linux/asm-sparc/unistd.ph +/usr/lib/perl5/5.00503/sparc-linux/asm-sparc64/unistd.ph +/usr/lib/perl5/5.00503/sparc-linux/auto/Data/Dumper/Dumper.bs +/usr/lib/perl5/5.00503/sparc-linux/auto/Data/Dumper/Dumper.so +/usr/lib/perl5/5.00503/sparc-linux/auto/IO/IO.so +/usr/lib/perl5/5.00503/sparc-linux/auto/Socket/Socket.bs +/usr/lib/perl5/5.00503/sparc-linux/auto/Socket/Socket.so +/usr/lib/perl5/5.00503/sparc-linux/bits/syscall.ph +/usr/lib/perl5/5.00503/sparc-linux/sys/syscall.ph +/usr/lib/perl5/5.00503/sparc-linux/syscall.ph +/usr/lib/perl5/5.00503/lib.pm +/usr/lib/perl5/5.00503/overload.pm +/usr/lib/perl5/5.00503/strict.pm +/usr/lib/perl5/5.00503/vars.pm +/usr/lib/perl5/site_perl/5.005/sparc-linux/Gtk.pm +/usr/lib/perl5/site_perl/5.005/sparc-linux/Gtk/Types.pm +/usr/lib/perl5/site_perl/5.005/sparc-linux/Net/Cmd.pm +/usr/lib/perl5/site_perl/5.005/sparc-linux/Net/Config.pm +/usr/lib/perl5/site_perl/5.005/sparc-linux/Net/FTP.pm +/usr/lib/perl5/site_perl/5.005/sparc-linux/Net/FTP/A.pm +/usr/lib/perl5/site_perl/5.005/sparc-linux/Net/FTP/I.pm +/usr/lib/perl5/site_perl/5.005/sparc-linux/Net/FTP/dataconn.pm +/usr/lib/perl5/site_perl/5.005/sparc-linux/Net/Netrc.pm +/usr/lib/perl5/site_perl/5.005/sparc-linux/auto/Gtk/Gtk.bs +/usr/lib/perl5/site_perl/5.005/sparc-linux/auto/Gtk/Gtk.so +/usr/lib/rpm/rpmrc +/usr/X11R6/bin/XF86_FBDev +/usr/X11R6/bin/XF86_Mach64 +/usr/X11R6/bin/xmodmap +/usr/X11R6/lib/modules/xf86Wacom.so diff --git a/perl-install/modules.pm b/perl-install/modules.pm index 4aa8a0693..4af311cc8 100644 --- a/perl-install/modules.pm +++ b/perl-install/modules.pm @@ -15,39 +15,43 @@ my %deps = (); my @drivers_by_category = ( [ 'net', { +arch() =~ /^sparc/ ? ( + "myri_sbus" => "MyriCOM Gigabit Ethernet", + "sunbmac" => "Sun BigMac Ethernet", + "sunhme" => "Sun Happy Meal Ethernet", + "sunqe" => "Sun Quad Ethernet", +) : ( "3c509" => "3com 3c509", "3c501" => "3com 3c501", "3c503" => "3com 3c503", "3c505" => "3com 3c505", "3c507" => "3com 3c507", "3c515" => "3com 3c515", - "3c59x" => "3com 3c59x (Vortex)", - "3c59x" => "3com 3c90x (Boomerang)", - "3c90x" => "3Com 3c90x (Cyclone/Hurricane/Tornado)", + "3c90x" => "3com 3c90x and 3c980", "at1700" => "Allied Telesis AT1700", "ac3200" => "Ansel Communication AC3200", "acenic" => "AceNIC Gigabit Ethernet", "pcnet32" => "AMD PC/Net 32", "82596" => "Apricot 82596", # "atp" => "ATP", # builtin the kernel + "e2100" => "Cabletron E2100", + "tlan" => "Compaq Netelligent", "cs89x0" => "CS89x0", - "de4x5" => "Digital 425,434,435,450,500", + "de600" => "D-Link DE-600 pocket adapter", + "de620" => "D-Link DE-620 pocket adapter", + "dgrs" => "Digi International RightSwitch", "depca" => "Digital DEPCA and EtherWORKS", - "e2100" => "Cabletron E2100", "ewrk3" => "Digital EtherWORKS 3", "old_tulip" => "Digital 21040/21041/21140 (old Tulip driver)", "tulip" => "Digital 21040/21041/21140 (Tulip)", - "de600" => "D-Link DE-600 pocket adapter", - "de620" => "D-Link DE-620 pocket adapter", - "dgrs" => "Digi International RightSwitch", + "eth16i" => "ICL EtherTeam 16i", "epic100" => "EPIC 100", + "eexpress" => "Intel EtherExpress", + "eepro" => "Intel EtherExpress Pro", + "eepro100" => "Intel EtherExpress Pro 100", #- should run on sparc but no memory on floppy "hp100" => "HP10/100VG any LAN ", "hp" => "HP LAN/AnyLan", "hp-plus" => "HP PCLAN/plus", - "eth16i" => "ICL EtherTeam 16i", - "eexpress" => "Intel EtherExpress", - "eepro" => "Intel EtherExpress Pro", - "eepro100" => "Intel EtherExpress Pro 100", "lance" => "Lance", "lne390" => "Mylex LNE390", "ne" => "NE2000 and compatible", @@ -56,24 +60,19 @@ my @drivers_by_category = ( "ni5010" => "NI 5010", "ni52" => "NI 5210", "ni65" => "NI 6510", - "rtl8139" => "RealTek RTL8129/8139", "es3210" => "Racal-Interlan ES3210", -# "rcpci" => "RedCreek Virtual Private Network", # TODO + "rcpci45" => "RedCreek PCI45 LAN", "epic100" => "SMC 83c170 EPIC/100", "sktr" => "Syskonnect Token ring adaptor", "smc9194" => "SMC 9000 series", "smc-ultra" => "SMC Ultra", "smc-ultra32" => "SMC Ultra 32", -# "sunhme" => "Sun Happy Meal", # not there anymore? - "tlan" => "Compaq Netelligent", + "yellowfin" => "Symbios Yellowfin G-NIC", "via-rhine" => "VIA Rhine", -# "wavelan" => "AT&T WaveLAN & DEC RoamAbout DS", # TODO +# "wavelan" => "AT&T WaveLAN & DEC RoamAbout DS", # TODO is a "AT&T GIS WaveLAN ISA" ? "wd" => "WD8003, WD8013 and compatible", - "yellowfin" => "Symbios Yellowfin G-NIC", - "8390" => "8390", "dmfe" => "dmfe", - "dummy" => "dummy", "fmv18x" => "fmv18x", "ibmtr" => "Token Ring Tropic", "olympic" => "olympic", @@ -82,15 +81,24 @@ my @drivers_by_category = ( "sb1000" => "sb1000", "sbni" => "sbni", "sis900" => "sis900", +), + "3c59x" => "3com 3c59x (Vortex)", + "de4x5" => "Digital 425,434,435,450,500", + "rtl8139" => "RealTek RTL8129/8139", + + "8390" => "8390", + "dummy" => "dummy", "nfs" => "Network File System (nfs)", "lockd" => "lockd", "sunrpc" => "sunrpc", }], [ 'scsi', { +arch() =~ /^sparc/ ? ( + "qlogicpti" => "Performance Technologies ISP", +) : ( "aha152x" => "Adaptec 152x", "aha1542" => "Adaptec 1542", "aha1740" => "Adaptec 1740", - "aic7xxx" => "Adaptec 2740, 2840, 2940", "advansys" => "AdvanSys Adapters", "in2000" => "Always IN2000", "AM53C974" => "AMD SCSI", @@ -102,12 +110,8 @@ my @drivers_by_category = ( "g_NCR5380" => "NCR 5380", "NCR53c406a" => "NCR 53c406a", "53c7,8xx" => "NCR 53c7xx", - "ncr53c8xx" => "NCR 53C8xx PCI", -# "pci2000" => "Perceptive Solutions PCI-2000", # TODO "qlogicfas" => "Qlogic FAS", - "qlogicisp" => "Qlogic ISP", "seagate" => "Seagate ST01/02", - "sym53c8xx" => "Symbios 53c8xx", "t128" => "Trantor T128/T128F/T228", "u14-34f" => "UltraStor 14F/34F", "ultrastor" => "UltraStor 14F/24F/34F", @@ -121,8 +125,17 @@ my @drivers_by_category = ( "sim710" => "sim710", "sym53c416" => "sym53c416", "tmscsim" => "tmscsim", +), + "aic7xxx" => "Adaptec 2740, 2840, 2940", + "ncr53c8xx" => "NCR 53C8xx PCI", +# "pci2000" => "Perceptive Solutions PCI-2000", # TODO + "qlogicisp" => "Qlogic ISP", + "sym53c8xx" => "Symbios 53c8xx", }], [ 'disk', { +arch() =~ /^sparc/ ? ( + "pluto" => "Sun SparcSTORAGE Array SCSI", #- name it "fc4:soc:pluto" ? +) : ( "DAC960" => "Mylex DAC960", # "dpt" => "Distributed Tech SmartCache/Raid I-IV Controller", # not there anymore? "megaraid" => "AMI MegaRAID", @@ -134,8 +147,10 @@ my @drivers_by_category = ( "eata_dma" => "EATA DMA Adapters", "ppa" => "Iomega PPA3 (parallel port Zip)", "imm" => "Iomega Zip (new driver)", +), }], [ 'cdrom', { +arch() !~ /^sparc/ ? ( "sbpcd" => "SoundBlaster/Panasonic", "aztcd" => "Aztech CD", "gscd" => "Goldstar R420", @@ -147,10 +162,12 @@ my @drivers_by_category = ( "sjcd" => "Sanyo", "cdu31a" => "Sony CDU-31A", "sonycd535" => "Sony CDU-5xx", +) : (), "isofs" => "iso9660", "ide-cd" => "ide-cd", }], [ 'sound', { +arch() !~ /^sparc/ ? ( "alsa" => "ALSA sound module, many sound cards", "cmpci" => "C-Media Electronics CMI8338A CMI8338B CMI8738", "es1370" => "Ensoniq ES1370 [AudioPCI]", @@ -161,8 +178,10 @@ my @drivers_by_category = ( "pas16" => "Pro Audio Spectrum/Studio 16", "via82cxxx" => "VIA VT82C686_5", "sonicvibes" => "S3 SonicVibes", +) : (), }], [ 'pcmcia', { +arch() !~ /^sparc/ ? ( "ide_cs" => "ide_cs", "fmvj18x_cs" => "fmvj18x_cs", "fdomain_cs" => "fdomain_cs", @@ -193,14 +212,18 @@ my @drivers_by_category = ( "sram_mtd" => "sram_mtd", "tulip_cb" => "tulip_cb", +) : (), }], [ 'pcmcia_everywhere', { +arch() !~ /^sparc/ ? ( "pcmcia_core" => "PCMCIA core support", "tcic" => "PCMCIA tcic controller", "ds" => "PCMCIA card support", "i82365" => "PCMCIA i82365 controller", +) : (), }], [ 'paride', { +arch() !~ /^sparc/ ? ( "aten" => "ATEN EH-100", "bpck" => "Microsolutions backpack", "comm" => "DataStor (older type) commuter adapter", @@ -219,6 +242,7 @@ my @drivers_by_category = ( "pcd" => "Parallel port CD-ROM", "pf" => "Parallel port ATAPI disk", "paride" => "Main parallel port module", +) : (), }], [ 'raid', { "linear" => "linear", @@ -227,6 +251,7 @@ my @drivers_by_category = ( "raid5" => "raid5", }], [ 'mouse', { +arch() !~ /^sparc/ ? ( "busmouse" => "busmouse", "msbusmouse" => "msbusmouse", "serial" => "serial", @@ -236,6 +261,7 @@ my @drivers_by_category = ( "usb-uhci", "USB (uhci)", "usb-ohci", "USB (ohci)", "usb-ohci-hcd", "USB (ohci-hcd)", +) : (), }], [ 'fs', { "smbfs" => "Windows SMB", diff --git a/perl-install/mouse.pm b/perl-install/mouse.pm index d884f8db5..cf21d68fb 100644 --- a/perl-install/mouse.pm +++ b/perl-install/mouse.pm @@ -17,21 +17,9 @@ use log; my @mouses_fields = qw(nbuttons device MOUSETYPE XMOUSETYPE FULLNAME); my @mouses = ( - [ 0, "none", "none", "Microsoft", __("No Mouse") ], - [ 2, "ttyS", "pnp", "Auto", __("Microsoft Rev 2.1A or higher (serial)") ], - [ 3, "ttyS", "logim", "MouseMan", __("Logitech CC Series (serial)") ], - [ 5, "ttyS", "pnp", "IntelliMouse", __("Logitech MouseMan+/FirstMouse+ (serial)") ], - [ 5, "ttyS", "ms3", "IntelliMouse", __("ASCII MieMouse (serial)") ], - [ 5, "ttyS", "ms3", "IntelliMouse", __("Genius NetMouse (serial)") ], - [ 5, "ttyS", "ms3", "IntelliMouse", __("Microsoft IntelliMouse (serial)") ], - [ 2, "ttyS", "MMSeries", "MMSeries", __("MM Series (serial)") ], - [ 2, "ttyS", "MMHitTab", "MMHittab", __("MM HitTablet (serial)") ], - [ 3, "ttyS", "Logitech", "Logitech", __("Logitech Mouse (serial, old C7 type)") ], - [ 3, "ttyS", "MouseMan", "MouseMan", __("Logitech MouseMan/FirstMouse (serial)") ], - [ 2, "ttyS", "Microsoft", "Microsoft", __("Generic Mouse (serial)") ], - [ 2, "ttyS", "Microsoft", "Microsoft", __("Microsoft compatible (serial)") ], - [ 3, "ttyS", "Microsoft", "Microsoft", __("Generic 3 Button Mouse (serial)") ], - [ 2, "ttyS", "MouseSystems", "MouseSystems", __("Mouse Systems (serial)") ], +arch() =~ /^sparc/ ? ( + [ 3, "sunmouse", "sun", "sun", __("Sun - Mouse") ], +) : ( [ 2, "psaux", "ps/2", "PS/2", __("Generic Mouse (PS/2)") ], [ 3, "psaux", "ps/2", "PS/2", __("Logitech MouseMan/FirstMouse (ps/2)") ], [ 3, "psaux", "ps/2", "PS/2", __("Generic 3 Button Mouse (PS/2)") ], @@ -48,6 +36,22 @@ my @mouses = ( [ 3, "logibm", "Busmouse", "BusMouse", __("Logitech Bus Mouse") ], [ 2, "usbmouse", "ps/2", "PS/2", __("USB Mouse") ], [ 3, "usbmouse", "ps/2", "PS/2", __("USB Mouse (3 buttons or more)") ], +), + [ 0, "none", "none", "Microsoft", __("No Mouse") ], + [ 2, "ttyS", "pnp", "Auto", __("Microsoft Rev 2.1A or higher (serial)") ], + [ 3, "ttyS", "logim", "MouseMan", __("Logitech CC Series (serial)") ], + [ 5, "ttyS", "pnp", "IntelliMouse", __("Logitech MouseMan+/FirstMouse+ (serial)") ], + [ 5, "ttyS", "ms3", "IntelliMouse", __("ASCII MieMouse (serial)") ], + [ 5, "ttyS", "ms3", "IntelliMouse", __("Genius NetMouse (serial)") ], + [ 5, "ttyS", "ms3", "IntelliMouse", __("Microsoft IntelliMouse (serial)") ], + [ 2, "ttyS", "MMSeries", "MMSeries", __("MM Series (serial)") ], + [ 2, "ttyS", "MMHitTab", "MMHittab", __("MM HitTablet (serial)") ], + [ 3, "ttyS", "Logitech", "Logitech", __("Logitech Mouse (serial, old C7 type)") ], + [ 3, "ttyS", "MouseMan", "MouseMan", __("Logitech MouseMan/FirstMouse (serial)") ], + [ 2, "ttyS", "Microsoft", "Microsoft", __("Generic Mouse (serial)") ], + [ 2, "ttyS", "Microsoft", "Microsoft", __("Microsoft compatible (serial)") ], + [ 3, "ttyS", "Microsoft", "Microsoft", __("Generic 3 Button Mouse (serial)") ], + [ 2, "ttyS", "MouseSystems", "MouseSystems", __("Mouse Systems (serial)") ], ); map_index { my %l; @l{@mouses_fields} = @$_; @@ -109,6 +113,8 @@ sub mouseconfig { } sub detect() { + return name2mouse("Sun - Mouse") if arch() =~ /^sparc/; + detect_devices::hasMousePS2 and return name2mouse("Generic Mouse (PS/2)"); eval { commands::modprobe("serial") }; diff --git a/perl-install/partition_table.pm b/perl-install/partition_table.pm index c3e0da79e..f7e1d55ad 100644 --- a/perl-install/partition_table.pm +++ b/perl-install/partition_table.pm @@ -25,6 +25,16 @@ use Data::Dumper; my %types = ( 0x0 => 'Empty', +arch() =~ /^sparc/ ? ( + 0x1 => 'SunOS boot', + 0x2 => 'SunOS root', + 0x3 => 'SunOS swap', + 0x4 => 'SunOS usr', + 0x5 => 'Whole disk', + 0x6 => 'SunOS stand', + 0x7 => 'SunOS var', + 0x8 => 'SunOS home', +) : ( 0x1 => 'DOS 12-bit FAT', 0x2 => 'XENIX root', 0x3 => 'XENIX /usr', @@ -33,6 +43,7 @@ my %types = ( 0x6 => 'DOS FAT16', 0x7 => 'OS/2 IFS (e.g., HPFS) / Windows NT NTFS / Advanced Unix / QNX2.x pre-1988 (see below under IDs 4d-4f)', 0x8 => 'OS/2 (v1.0-1.3 only) / AIX boot partition / SplitDrive / Commodore DOS / DELL partition spanning multiple drives / QNX 1.x and 2.x ("qny")', +), 0x9 => 'AIX data partition / Coherent filesystem / QNX 1.x and 2.x ("qnz")', 0xa => 'OS/2 Boot Manager / Coherent swap partition / OPUS', 0xb => 'Win98 FAT32', @@ -140,11 +151,13 @@ my %types = ( ); my %type2fs = ( +arch() !~ /^sparc/ ? ( 0x01 => 'vfat', 0x04 => 'vfat', 0x05 => 'ignore', 0x06 => 'vfat', 0x07 => 'hpfs', +) : (), 0x0b => 'vfat', 0x0c => 'vfat', 0x0e => 'vfat', @@ -171,7 +184,8 @@ sub name2type($) { /0x(.*)/ ? hex $1 : $types_rev{$_} || $_; } -sub isExtended($) { $_[0]{type} == 5 || $_[0]{type} == 0xf || $_[0]{type} == 0x85 } +sub isWholedisk($) { arch() =~ /^sparc/ && $_[0]{type} == 5 } +sub isExtended($) { (arch() !~ /^sparc/ && $_[0]{type} == 5) || $_[0]{type} == 0xf || $_[0]{type} == 0x85 } sub isRAID($) { $_[0]{type} == 0xfd } sub isSwap($) { $type2fs{$_[0]{type}} eq 'swap' } sub isExt2($) { $type2fs{$_[0]{type}} eq 'ext2' } @@ -211,8 +225,10 @@ sub adjustEnd($$) { $part->{size} = $end2 - $part->{start}; } sub adjustStartAndEnd($$) { - &adjustStart; - &adjustEnd; + my ($hd, $part) = @_; + + $hd->adjustStart($part); + $hd->adjustEnd($part); } sub verifyNotOverlap($$) { @@ -225,9 +241,14 @@ sub verifyInside($$) { } sub verifyParts_ { - foreach my $i (@_) { foreach (@_) { - $i != $_ and verifyNotOverlap($i, $_) || cdie sprintf "partitions sector #$i->{start} (%dMB) and sector #$_->{start} (%dMB) are overlapping!", $i->{size} >> 9, $_->{size} >> 9; - }} + foreach my $i (@_) { + foreach (@_) { + next if !$i || !$_ || $i == $_ || isWholedisk($i); #- avoid testing twice on whole disk for simplicity :-) + isWholedisk($_) ? + verifyInside($i, $_) || cdie sprintf "partitions sector #$i->{start} (%dMB) is not inside whole disk (%dMB)!", $i->{size} >> 9, $_->{size} >> 9: + verifyNotOverlap($i, $_) || cdie sprintf "partitions sector #$i->{start} (%dMB) and sector #$_->{start} (%dMB) are overlapping!", $i->{size} >> 9, $_->{size} >> 9; + } + } } sub verifyParts($) { my ($hd) = @_; @@ -235,7 +256,7 @@ sub verifyParts($) { } sub verifyPrimary($) { my ($pt) = @_; - $_->{start} > 0 || arch() eq "sparc" || die "partition must NOT start at sector 0" foreach @{$pt->{normal}}; + $_->{start} > 0 || arch() =~ /^sparc/ || die "partition must NOT start at sector 0" foreach @{$pt->{normal}}; verifyParts_(@{$pt->{normal}}, $pt->{extended}); } @@ -338,7 +359,6 @@ sub read_one($$) { bless $hd, "partition_table_$_"; ($pt, $info) = $hd->read($sector); }; - print ">>> $@\n"; $@ or last; } @@ -416,7 +436,8 @@ sub write($) { $_->{normal}{local_start} = $_->{normal}{start} - $_->{start}; $_->{extended} and $_->{extended}{local_start} = $_->{extended}{start} - $hd->{primary}{extended}{start}; - $hd->write($_->{start}, $_->{raw}) or die "writing of partition table failed"; + print "Trying to write an extended partition table, bad !!!\n"; + #$hd->write($_->{start}, $_->{raw}) or die "writing of partition table failed"; } $hd->{isDirty} = 0; @@ -535,7 +556,7 @@ sub add($$;$$) { $part->{isFormatted} = 0; $part->{rootDevice} = $hd->{device}; $hd->{isDirty} = $hd->{needKernelReread} = 1; - $part->{start} ||= 1; #- starting at sector 0 is not allowed + $part->{start} ||= 1 if arch() !~ /^sparc/; #- starting at sector 0 is not allowed adjustStartAndEnd($hd, $part) unless $forceNoAdjust; my $e = $hd->{primary}{extended}; diff --git a/perl-install/partition_table_bsd.pm b/perl-install/partition_table_bsd.pm index f3134f4fb..c0af9cf48 100644 --- a/perl-install/partition_table_bsd.pm +++ b/perl-install/partition_table_bsd.pm @@ -56,6 +56,14 @@ 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; @@ -89,8 +97,15 @@ sub read($$) { sub write($$$;$) { my ($hd, $sector, $pt, $info) = @_; - local *F; 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; + #- handle testing for writing partition table on file only! + 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; + } #- TODO compute checksum diff --git a/perl-install/partition_table_dos.pm b/perl-install/partition_table_dos.pm index 1b25a8f0b..624f13ecf 100644 --- a/perl-install/partition_table_dos.pm +++ b/perl-install/partition_table_dos.pm @@ -8,6 +8,7 @@ use vars qw(@ISA); use common qw(:common :system :file); 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); @@ -42,6 +43,14 @@ 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; @@ -67,8 +76,15 @@ sub read($$) { sub write($$$;$) { my ($hd, $sector, $pt) = @_; - local *F; 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; + #- handle testing for writing partition table on file only! + 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) { diff --git a/perl-install/partition_table_raw.pm b/perl-install/partition_table_raw.pm index 39277bf39..cafb439f9 100644 --- a/perl-install/partition_table_raw.pm +++ b/perl-install/partition_table_raw.pm @@ -40,6 +40,9 @@ 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} }; } @@ -55,7 +58,7 @@ sub kernel_read($) { sub zero_MBR($) { my ($hd) = @_; # unless (ref($hd) =~ /partition_table/) { - my $type = arch() eq "alpha" ? "bsd" : arch() eq "sparc" ? "sun" : "dos"; + my $type = arch() eq "alpha" ? "bsd" : arch() =~ /^sparc/ ? "sun" : "dos"; bless $hd, "partition_table_$type"; # } $hd->{isDirty} = $hd->{needKernelReread} = 1; diff --git a/perl-install/partition_table_sun.pm b/perl-install/partition_table_sun.pm index 5c8fc749f..808944b8c 100644 --- a/perl-install/partition_table_sun.pm +++ b/perl-install/partition_table_sun.pm @@ -45,6 +45,32 @@ my $magic = 0xDABE; my $nb_primary = 8; my $offset = 0; +sub adjustStart($$) { + my ($hd, $part) = @_; + my $end = $part->{start} + $part->{size}; + + #- 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->{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. +sub compute_crc($) { + my ($tmp) = @_; + my @l2b = unpack "n256", $tmp; + my $crc = 0; + + map { $crc ^= $_ } @l2b; + + $crc; +} + sub read($$) { my ($hd, $sector) = @_; my $tmp; @@ -58,15 +84,17 @@ sub read($$) { #- check magic number $info{magic} == $magic or die "bad magic number"; + #- check crc, csum contains the crc so result should be 0. + compute_crc($tmp) == 0 or die "bad checksum"; + @{$hd->{geom}}{qw(cylinders heads sectors)} = @info{qw(ncyl nsect ntrks)}; - #- TODO verify checksum my @pt = mapn { my %h; @h{@$fields1} = unpack $format1, $_[0]; @h{@$fields2} = unpack $format2, $_[1]; $h{start} = $sector + $h{start_cylinder} * partition_table::cylinder_size($hd); - $h{type} = $typeToDos{$h{type}} || $h{type}; +# $h{type} = $typeToDos{$h{type}} || $h{type}; #- for rewrite it ? $h{size} or $h{$_} = 0 foreach keys %h; \%h; } [ $info{infos} =~ /(.{$size1})/g ], [ $info{partitions} =~ /(.{$size2})/g ]; @@ -79,18 +107,28 @@ sub read($$) { sub write($$$;$) { my ($hd, $sector, $pt, $info) = @_; - local *F; 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; - - #- TODO compute checksum + #- handle testing for writing partition table on file only! + 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; + } ($info->{infos}, $info->{partitions}) = map { join '', @$_ } list2kv map { $_->{start} % partition_table::cylinder_size($hd) == 0 or die "partition not at beginning of cylinder"; - local $_->{type} = $typeFromDos{$_->{type}} || $_->{type}; +# local $_->{type} = $typeFromDos{$_->{type}} || $_->{type}; local $_->{start_cylinder} = $_->{start} / partition_table::cylinder_size($hd) - $sector; pack($format1, @$_{@$fields1}), pack($format2, @$_{@$fields2}); } @$pt; + #- compute the checksum by building the buffer to write and call compute_crc. + #- set csum to 0 so compute_crc will give the right csum value. + $info->{csum} = 0; + $info->{csum} = compute_crc(pack($main_format, @$info{@$main_fields})); + syswrite F, pack($main_format, @$info{@$main_fields}), psizeof($main_format) or return 0; 1; @@ -98,31 +136,58 @@ sub write($$$;$) { sub info { my ($hd) = @_; - 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 + + #- build a default suitable partition table, + #- checksum will be built when writing on disk. + #- note third partition is ALWAYS of type Whole disk. + my $info = { + info => "DiskDrake partition table", + rspeed => 5400, + pcylcount => $hd->{geom}{total_cylinders}, + sparecyl => 0, + ilfact => 1, + ncyl => $hd->{geom}{cylinders}, + nacyl => $hd->{geom}{total_cylinders} - $hd->{geom}{cylinders}, + ntrks => $hd->{geom}{heads}, + nsect => $hd->{geom}{sectors}, + magic => $magic, }; + + $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 { my ($hd) = @_; - { raw => [ ({}) x $nb_primary ], info => info($hd) }; + my $pt = { raw => [ ({}) x $nb_primary ], info => info($hd) }; + + #- handle special case for partition 2 which is whole disk. + $pt->{raw}[2] = { + type => 5, #- the whole disk type. + flags => 0, + start_cylinder => 0, + size => $hd->{geom}{cylinders} * partition_table::cylinder_size($hd), + }; + + $pt; } 1; diff --git a/perl-install/share/list b/perl-install/share/list index 65524be90..60952d68d 100644 --- a/perl-install/share/list +++ b/perl-install/share/list @@ -29,47 +29,45 @@ /usr/lib/perl5/5.00503/Symbol.pm /usr/lib/perl5/5.00503/Time/Local.pm /usr/lib/perl5/5.00503/dumpvar.pl -/usr/lib/perl5/5.00503/ARCH-linux/Config.pm -/usr/lib/perl5/5.00503/ARCH-linux/DynaLoader.pm -/usr/lib/perl5/5.00503/ARCH-linux/Fcntl.pm -/usr/lib/perl5/5.00503/ARCH-linux/auto/Fcntl/Fcntl.bs -/usr/lib/perl5/5.00503/ARCH-linux/auto/Fcntl/Fcntl.so -/usr/lib/perl5/5.00503/ARCH-linux/IO/File.pm -/usr/lib/perl5/5.00503/ARCH-linux/IO/Handle.pm -/usr/lib/perl5/5.00503/ARCH-linux/IO/Seekable.pm -/usr/lib/perl5/5.00503/ARCH-linux/IO/Socket.pm -/usr/lib/perl5/5.00503/ARCH-linux/Socket.pm -/usr/lib/perl5/5.00503/ARCH-linux/_h2ph_pre.ph -/usr/lib/perl5/5.00503/ARCH-linux/asm/unistd.ph -/usr/lib/perl5/5.00503/ARCH-linux/auto/Data/Dumper/Dumper.bs -/usr/lib/perl5/5.00503/ARCH-linux/auto/Data/Dumper/Dumper.so -/usr/lib/perl5/5.00503/ARCH-linux/auto/IO/IO.so -/usr/lib/perl5/5.00503/ARCH-linux/auto/Socket/Socket.bs -/usr/lib/perl5/5.00503/ARCH-linux/auto/Socket/Socket.so -/usr/lib/perl5/5.00503/ARCH-linux/bits/syscall.ph -/usr/lib/perl5/5.00503/ARCH-linux/sys/syscall.ph -/usr/lib/perl5/5.00503/ARCH-linux/syscall.ph +/usr/lib/perl5/5.00503/i386-linux/Config.pm +/usr/lib/perl5/5.00503/i386-linux/DynaLoader.pm +/usr/lib/perl5/5.00503/i386-linux/Fcntl.pm +/usr/lib/perl5/5.00503/i386-linux/auto/Fcntl/Fcntl.bs +/usr/lib/perl5/5.00503/i386-linux/auto/Fcntl/Fcntl.so +/usr/lib/perl5/5.00503/i386-linux/IO/File.pm +/usr/lib/perl5/5.00503/i386-linux/IO/Handle.pm +/usr/lib/perl5/5.00503/i386-linux/IO/Seekable.pm +/usr/lib/perl5/5.00503/i386-linux/IO/Socket.pm +/usr/lib/perl5/5.00503/i386-linux/Socket.pm +/usr/lib/perl5/5.00503/i386-linux/_h2ph_pre.ph +/usr/lib/perl5/5.00503/i386-linux/asm/unistd.ph +/usr/lib/perl5/5.00503/i386-linux/auto/Data/Dumper/Dumper.bs +/usr/lib/perl5/5.00503/i386-linux/auto/Data/Dumper/Dumper.so +/usr/lib/perl5/5.00503/i386-linux/auto/IO/IO.so +/usr/lib/perl5/5.00503/i386-linux/auto/Socket/Socket.bs +/usr/lib/perl5/5.00503/i386-linux/auto/Socket/Socket.so +/usr/lib/perl5/5.00503/i386-linux/bits/syscall.ph +/usr/lib/perl5/5.00503/i386-linux/sys/syscall.ph +/usr/lib/perl5/5.00503/i386-linux/syscall.ph /usr/lib/perl5/5.00503/lib.pm /usr/lib/perl5/5.00503/overload.pm /usr/lib/perl5/5.00503/strict.pm /usr/lib/perl5/5.00503/vars.pm -/usr/lib/perl5/site_perl/5.005/ARCH-linux/Gtk.pm -/usr/lib/perl5/site_perl/5.005/ARCH-linux/Gtk/Types.pm -/usr/lib/perl5/site_perl/5.005/ARCH-linux/Net/Cmd.pm -/usr/lib/perl5/site_perl/5.005/ARCH-linux/Net/Config.pm -/usr/lib/perl5/site_perl/5.005/ARCH-linux/Net/FTP.pm -/usr/lib/perl5/site_perl/5.005/ARCH-linux/Net/FTP/A.pm -/usr/lib/perl5/site_perl/5.005/ARCH-linux/Net/FTP/I.pm -/usr/lib/perl5/site_perl/5.005/ARCH-linux/Net/FTP/dataconn.pm -/usr/lib/perl5/site_perl/5.005/ARCH-linux/Net/Netrc.pm -/usr/lib/perl5/site_perl/5.005/ARCH-linux/auto/Gtk/Gtk.bs -/usr/lib/perl5/site_perl/5.005/ARCH-linux/auto/Gtk/Gtk.so +/usr/lib/perl5/site_perl/5.005/i386-linux/Gtk.pm +/usr/lib/perl5/site_perl/5.005/i386-linux/Gtk/Types.pm +/usr/lib/perl5/site_perl/5.005/i386-linux/Net/Cmd.pm +/usr/lib/perl5/site_perl/5.005/i386-linux/Net/Config.pm +/usr/lib/perl5/site_perl/5.005/i386-linux/Net/FTP.pm +/usr/lib/perl5/site_perl/5.005/i386-linux/Net/FTP/A.pm +/usr/lib/perl5/site_perl/5.005/i386-linux/Net/FTP/I.pm +/usr/lib/perl5/site_perl/5.005/i386-linux/Net/FTP/dataconn.pm +/usr/lib/perl5/site_perl/5.005/i386-linux/Net/Netrc.pm +/usr/lib/perl5/site_perl/5.005/i386-linux/auto/Gtk/Gtk.bs +/usr/lib/perl5/site_perl/5.005/i386-linux/auto/Gtk/Gtk.so /usr/lib/rpm/rpmrc /usr/X11R6/bin/XF86_FBDev /usr/X11R6/bin/XF86_VGA16 /usr/X11R6/bin/XF86_3DLabs /usr/X11R6/bin/XF86_TGA +/usr/X11R6/bin/XF86_Mach64 /usr/X11R6/bin/xmodmap -/usr/X11R6/lib/modules/xf86Wacom.so -/usr/sbin/ext2resize -/usr/sbin/rescuept diff --git a/perl-install/share/list.sparc b/perl-install/share/list.sparc new file mode 100644 index 000000000..d35feefa2 --- /dev/null +++ b/perl-install/share/list.sparc @@ -0,0 +1,73 @@ +/bin/ash +/bin/cpio +/lib/libnss_nis.so.2 +/lib/libnss_files.so.2 +/lib/libnss_dns.so.2 +/lib/libresolv.so.2 +/etc/protocols +/sbin/fdisk +/sbin/ifport +/sbin/insmod +/sbin/mkraid +/sbin/rmmod +/sbin/mkdosfs +/sbin/mke2fs +/sbin/raidstart +/usr/bin/bzip2 +/usr/bin/perl +/usr/lib/libimlib-png.so +/usr/lib/gtk/themes/engines/libpixmap.so +/usr/lib/gtk/themes/engines/libpixmap.la +/usr/lib/libimlib-png.so +/usr/lib/perl5/5.00503/AutoLoader.pm +/usr/lib/perl5/5.00503/Carp.pm +/usr/lib/perl5/5.00503/Data/Dumper.pm +/usr/lib/perl5/5.00503/Exporter.pm +/usr/lib/perl5/5.00503/FileHandle.pm +/usr/lib/perl5/5.00503/SelectSaver.pm +/usr/lib/perl5/5.00503/SelfLoader.pm +/usr/lib/perl5/5.00503/Symbol.pm +/usr/lib/perl5/5.00503/Time/Local.pm +/usr/lib/perl5/5.00503/dumpvar.pl +/usr/lib/perl5/5.00503/sparc-linux/Config.pm +/usr/lib/perl5/5.00503/sparc-linux/DynaLoader.pm +/usr/lib/perl5/5.00503/sparc-linux/Fcntl.pm +/usr/lib/perl5/5.00503/sparc-linux/auto/Fcntl/Fcntl.bs +/usr/lib/perl5/5.00503/sparc-linux/auto/Fcntl/Fcntl.so +/usr/lib/perl5/5.00503/sparc-linux/IO/File.pm +/usr/lib/perl5/5.00503/sparc-linux/IO/Handle.pm +/usr/lib/perl5/5.00503/sparc-linux/IO/Seekable.pm +/usr/lib/perl5/5.00503/sparc-linux/IO/Socket.pm +/usr/lib/perl5/5.00503/sparc-linux/Socket.pm +/usr/lib/perl5/5.00503/sparc-linux/_h2ph_pre.ph +/usr/lib/perl5/5.00503/sparc-linux/asm/unistd.ph +/usr/lib/perl5/5.00503/sparc-linux/asm-sparc/unistd.ph +/usr/lib/perl5/5.00503/sparc-linux/asm-sparc64/unistd.ph +/usr/lib/perl5/5.00503/sparc-linux/auto/Data/Dumper/Dumper.bs +/usr/lib/perl5/5.00503/sparc-linux/auto/Data/Dumper/Dumper.so +/usr/lib/perl5/5.00503/sparc-linux/auto/IO/IO.so +/usr/lib/perl5/5.00503/sparc-linux/auto/Socket/Socket.bs +/usr/lib/perl5/5.00503/sparc-linux/auto/Socket/Socket.so +/usr/lib/perl5/5.00503/sparc-linux/bits/syscall.ph +/usr/lib/perl5/5.00503/sparc-linux/sys/syscall.ph +/usr/lib/perl5/5.00503/sparc-linux/syscall.ph +/usr/lib/perl5/5.00503/lib.pm +/usr/lib/perl5/5.00503/overload.pm +/usr/lib/perl5/5.00503/strict.pm +/usr/lib/perl5/5.00503/vars.pm +/usr/lib/perl5/site_perl/5.005/sparc-linux/Gtk.pm +/usr/lib/perl5/site_perl/5.005/sparc-linux/Gtk/Types.pm +/usr/lib/perl5/site_perl/5.005/sparc-linux/Net/Cmd.pm +/usr/lib/perl5/site_perl/5.005/sparc-linux/Net/Config.pm +/usr/lib/perl5/site_perl/5.005/sparc-linux/Net/FTP.pm +/usr/lib/perl5/site_perl/5.005/sparc-linux/Net/FTP/A.pm +/usr/lib/perl5/site_perl/5.005/sparc-linux/Net/FTP/I.pm +/usr/lib/perl5/site_perl/5.005/sparc-linux/Net/FTP/dataconn.pm +/usr/lib/perl5/site_perl/5.005/sparc-linux/Net/Netrc.pm +/usr/lib/perl5/site_perl/5.005/sparc-linux/auto/Gtk/Gtk.bs +/usr/lib/perl5/site_perl/5.005/sparc-linux/auto/Gtk/Gtk.so +/usr/lib/rpm/rpmrc +/usr/X11R6/bin/XF86_FBDev +/usr/X11R6/bin/XF86_Mach64 +/usr/X11R6/bin/xmodmap +/usr/X11R6/lib/modules/xf86Wacom.so diff --git a/tools/make_mdkinst_stage2 b/tools/make_mdkinst_stage2 index 483bdfaaa..7652317be 100755 --- a/tools/make_mdkinst_stage2 +++ b/tools/make_mdkinst_stage2 @@ -31,7 +31,7 @@ $SUDO cp -a $DEST/* $STAGE2TMP mkdir -p $MNTPOINT 2>/dev/null for i in $MNTPOINT $STAGE2; do $SUDO umount $i 2>/dev/null ; done -dd if=/dev/zero of=$STAGE2 bs=1k count=16000 +dd if=/dev/zero of=$STAGE2 bs=1k count=18000 $MKE2FS -N 1000 $STAGE2 $SUDO mount -t ext2 $STAGE2 $MNTPOINT -o loop -- cgit v1.2.1