From 530a16ec071db0e24e6e949e265a96848864967c Mon Sep 17 00:00:00 2001 From: Antoine Ginies Date: Wed, 19 Jan 2011 10:44:49 +0000 Subject: add mes5-2.6.33 branch --- images/.perl_checker | 1 + images/Makefile | 42 +++ images/NEWS | 129 ++++++++ images/advanced.msg.xml | 17 + images/help.msg.xml | 21 ++ images/make_boot_img | 810 ++++++++++++++++++++++++++++++++++++++++++++++++ images/update_kernel | 81 +++++ 7 files changed, 1101 insertions(+) create mode 100644 images/.perl_checker create mode 100644 images/Makefile create mode 100644 images/NEWS create mode 100644 images/advanced.msg.xml create mode 100644 images/help.msg.xml create mode 100755 images/make_boot_img create mode 100755 images/update_kernel (limited to 'images') diff --git a/images/.perl_checker b/images/.perl_checker new file mode 100644 index 000000000..6d167b870 --- /dev/null +++ b/images/.perl_checker @@ -0,0 +1 @@ +XML::Parser diff --git a/images/Makefile b/images/Makefile new file mode 100644 index 000000000..c46551b46 --- /dev/null +++ b/images/Makefile @@ -0,0 +1,42 @@ +include ../Makefile.config + +VERSION=1.31.1 +PRODUCT=drakx-installer-images +KERNELS=$(shell rpm -qf /lib/modules/2.*) + +IMAGES_DEST = $(ROOTDEST)/install/images + +all: images + +images: all.kernels + DISTRIB_DESCR=$(DISTRIB_DESCR) ./make_boot_img + rm -rf images/alternatives + if [ `ls images/*.img-* 2>/dev/null | wc -l` -gt 0 ]; then \ + mkdir images/alternatives; cd images/alternatives; mv ../*.img-* .; md5sum *.img-* > MD5SUM; \ + fi + cd images ; md5sum *.{img,iso}* > MD5SUM + +all.kernels: update_kernel ../kernel/list_modules.pm + ./update_kernel $(KERNELS) + +tar: + rm -rf $(PRODUCT)*.tar* $(PRODUCT)-$(VERSION) + mkdir -p $(PRODUCT)-$(VERSION) + svn export -q -rBASE . $(PRODUCT)-$(VERSION)/images + svn export -q -rBASE ../kernel $(PRODUCT)-$(VERSION)/kernel + cp ../Makefile.config $(PRODUCT)-$(VERSION)/ + tar cfj $(PRODUCT)-$(VERSION).tar.bz2 $(PRODUCT)-$(VERSION) + rm -rf $(PRODUCT)-$(VERSION) + +clean: + rm -rf images isolinux all.kernels modules.description + find . -name "*~" -o -name ".#*" | xargs rm -f + +install: + install -d $(IMAGES_DEST) + rm -rf $(IMAGES_DEST)/alternatives + cp -r images/* $(IMAGES_DEST) + ifneq (,$(findstring $(ARCH), i386 x86_64)) + rm -rf $(ROOTDEST)/isolinux + cp -af isolinux $(ROOTDEST) + endif diff --git a/images/NEWS b/images/NEWS new file mode 100644 index 000000000..a1267dc76 --- /dev/null +++ b/images/NEWS @@ -0,0 +1,129 @@ +Version 1.31.1 - 21 September 2009, by Pascal Terjan + +- add virtio modules + +Version 1.31 - 19 September 2008, by Pascal "pixel" Rigaux + +- add modules "sha256_generic cbc amd768_rng" for crypsetup/LUKS + +Version 1.30 - 12 June 2008, by Olivier "blino" Blin + +- handle ide-cd being renamed as ide-cd_mod + +Version 1.29 - 2 April 2008, by Olivier "blino" Blin + +- use "Mdv Boot ISO" as label for boot.iso + +Version 1.28 - 12 February 2008, by Olivier "blino" Blin + +- restore full modules.alias (depmod keeps only available modules in + modules.alias, but we want them all) + +Version 1.27 - 12 February 2008, by Olivier "blino" Blin + +- add modules in /modules/`uname -r` and use depmod to build + modules.dep and modules.alias +- remove symlinks in toplevel /modules +- fix custom bootsplash theme support + +Version 1.26 - 21 December 2007, by Olivier "blino" Blin + +- rebuild with list_modules to handle atl2 ethernet driver +- fix live stage2 support + +Version 1.25 - 12 December 2007, by Pascal "Pixel" Rigaux + +- rebuild for new list_modules + +Version 1.24 - 15 October 2007, by Olivier "blino" Blin + +- rebuild for new list_modules (to include ipw3945) + +Version 1.23 - 17 September 2007, by Pascal "Pixel" Rigaux + +- add dm-zero for dmraid + +Version 1.22 - 11 September 2007, by Olivier "blino" Blin + +- add /lib/module-init-tools/ldetect-lst-modules.alias + +Version 1.21 - 7 September 2007, by Olivier "blino" Blin + +- add jmicron driver +- provide /usr/share/ldetect-lst/*-modules.alias in installer images + +Version 1.20 - 31 August 2007, by Pascal "Pixel" Rigaux + +- dynamically determine the size of all.img + +Version 1.19 - 27 August 2007, by Olivier "blino" Blin + +- add raid456 module + +Version 1.18 - 21 August 2007, by Olivier "blino" Blin + +- release with latest scripts from drakx/kernel + +Version 1.17 - 21 August 2007, by Olivier "blino" Blin + +- keep modules without dependencies in modules.dep + +Version 1.16 - 21 August 2007, by Olivier "blino" Blin + +- build with new list_modules + +Version 1.15 - 15 August 2007, by Olivier "blino" Blin + +- add pcitable, usbtable and pci.ids +- fix typos affecting mtab and /var/run creation +- add a /lib/modules symlink + +Version 1.14 - 9 August 2007, by Pascal "Pixel" Rigaux + +- update_kernel: now require install rpms or rpm files as arguments + (this allow specifying precisely which installed kernels are used) + +Version 1.13 - 8 August 2007, by Pascal "Pixel" Rigaux + +- add modules.alias in /modules/ as required by stage2 with new libldetect +- add unionfs module +- revert isolinux starting install by default instead of booting on harddrive (#32040) + +Version 1.12 - 17 July 2007, by Olivier "blino" Blin + +- add ide-disk module + +Version 1.11 - 29 June 2007, by Pascal "Pixel" Rigaux + +- increase all.img size to 10.5MB +- default to theme Mandriva-Free, and allow setting another one through THEME + environment variable + +Version 1.9 - 3 April 2007, by Pascal "Pixel" Rigaux + +- include mmc_block for card readers + +Version 1.8 - 23 March 2007, by Pascal "Pixel" Rigaux + +- restore F1 & F2 in boot.iso (#29766) + +Version 1.6 - 14 March 2007, by Olivier Blin + +- add tifm modules (Titi) + +Version 1.5 - 9 March 2007, by Pascal "Pixel" Rigaux + +- copy isolinux images for x86_64 as well + +Version 1.4 - 8 March 2007, by Pascal "Pixel" Rigaux + +- restore vga= and automatic= default options. + also restore noacpi, alt0, vgalo, vgahi, text entries + (all this is needed when gfxboot is not working or not there) + +Version 1.3 - 16 February 2007, by Pascal "Pixel" Rigaux + +- rely on gfxboot for options (vga=, automatic=...) +- really use memtest instead of memtest.bin + (with file name "memtest.bin" it fails with error 8000, with "memtest" it works) + (it seems to be an ancient bug as far as google says) diff --git a/images/advanced.msg.xml b/images/advanced.msg.xml new file mode 100644 index 000000000..9f0bb1818 --- /dev/null +++ b/images/advanced.msg.xml @@ -0,0 +1,17 @@ + +The following install types may be used instead of previously notified : + o vgahi for high resolution graphical installation. + o vga16 for 640x480 in 16 colors graphical installation. + +The following options may be added on the command line : + o readonly=1 to disable editing disk partitions. + o display=ackbar:0 to export display to ackbar machine screen 0 during + installation (only for network installations). + o noauto to disable automatic detection. + o nodmraid to disable BIOS software RAID. + o updatemodules to use the special update floppy containing modules updates. + o patch to use a patch from the floppy (file named patch.pl). + o auto_install=floppy to enable auto_install using auto_inst.cfg file on the + floppy. + o memtest to test your computer RAM for faulty memory modules. + diff --git a/images/help.msg.xml b/images/help.msg.xml new file mode 100644 index 000000000..e6d715830 --- /dev/null +++ b/images/help.msg.xml @@ -0,0 +1,21 @@ + + Welcome to Mandriva Linux install help + +In most cases, the best way to get started is to simply press the <Enter> key. +If you experience problems with standard install, try one of the following +install types (type the highlighted text and press <Enter>): + + o text for text installation instead of the graphical one. + o linux for standard graphical installation at normal resolution. + o linux vga=785 for low resolution graphical installation. + + +To repair an already installed system type rescue followed +by <Enter>. + +You can also pass some <specific kernel options> to the Linux kernel. +For example, try linux noapic if your system has trouble operating +your network adapter correctly. +NOTE: You cannot pass options to modules (SCSI, ethernet card) or devices +such as CD-ROM drives in this way. If you need to do so, use noauto mode. + diff --git a/images/make_boot_img b/images/make_boot_img new file mode 100755 index 000000000..bc341be9c --- /dev/null +++ b/images/make_boot_img @@ -0,0 +1,810 @@ +#!/usr/bin/perl + +use Config; +use MDK::Common; +Config->import; +my ($arch) = $Config{archname} =~ /(.*?)-/; + +my $default_append = ''; +my $default_acpi = ''; +my $default_vga = "vga=788 splash=silent"; +my $timeout = 150; +my $isolinux_bin = $arch eq 'x86_64' ? '/usr/lib/syslinux/isolinux-x86_64.bin' : '/usr/lib/syslinux/isolinux-i586.bin'; +my $lib = $arch eq 'x86_64' ? 'lib64' : 'lib'; + +my $tmp_mnt = '/tmp/drakx_mnt'; +my $tmp_initrd = '/tmp/drakx_initrd'; + +my $sudo; +if ($>) { + $sudo = "sudo"; + $ENV{PATH} = "/sbin:/usr/sbin:$ENV{PATH}"; +} + +sub __ { print @_, "\n"; system(@_) } +sub _ { __ @_; $? and die } +sub mke2fs { + my ($f) = @_; + _ "/sbin/mke2fs -q -m 0 -F -s 1 $f"; + _ "/sbin/tune2fs -c 0 -U clear -T 1970010101 $f"; +} + +_ "mkdir -p $tmp_mnt"; +mkdir "images"; + +my @kernels = chomp_(cat_('all.kernels/.list')); + +my @all_images = ( + if_($arch =~ /i.86/, 'isolinux', 'boot.iso', 'all.img', 'hd_grub.img'), + if_($arch =~ /x86_64/, 'isolinux', 'boot.iso', 'all.img', 'hd_grub.img'), + if_($arch =~ /ia64/, 'all.img'), + if_($arch =~ /ppc/, 'all.img'), + ); + +my @images = @ARGV ? @ARGV : map { "images/$_" } @all_images; + +foreach my $img (@images) { + my ($type, $I, $extension) = $img =~ m!([^/]*)(64)?\.([^.]*)$!; + + if ($img =~ /hd_grub/) { + hd_grub($img); + } elsif ($img =~ /isolinux/) { + isolinux(\@kernels); + + if (my ($tftpboot) = grep { -e $_ } qw(/tftpboot /var/lib/tftpboot)) { + system("/bin/cp -f isolinux/alt0/* $tftpboot"); + } + } elsif ($img =~ /boot.iso/) { + boot_iso($img, \@kernels); + } elsif ($extension eq 'rdz') { + initrd($type, $I, "$img-$_") foreach @kernels; + } elsif ($extension eq 'img') { + print STDERR "calling boot_img_$arch for $img\n"; + $::{"boot_img_$arch"}->($type, $I, "$img-$_", "all.kernels/$_/vmlinuz") foreach @kernels; + rename("$img-$kernels[0]", $img); + } else { + die "unknown image $img"; + } +} + +sub syslinux_color { + "0" . { + default => '7', + blue => '9', + green => 'a', + red => 'c', + yellow => 'e', + white => 'f', + }->{$_[0]} || die "unknown color $_[0]\n"; +} + +sub syslinux_msg { + my ($msg_xml_file, @more_text) = @_; + + require XML::Parser; + + sub xml_tree2syslinux { + my ($current_color, $tree) = @_; + my (undef, @l) = @$tree; + join('', map { + my ($type, $val) = @$_; + if ($type eq '0') { + $val; + } else { + syslinux_color($type) . xml_tree2syslinux($type, $val) . syslinux_color($current_color); + } + } group_by2(@l)); + } + + print "parsing $msg_xml_file\n"; + my $tree = XML::Parser->new(Style => 'Tree')->parsefile($msg_xml_file); + $tree->[0] eq 'document' or die "bad file $msg_xml_file\n"; + my $text = xml_tree2syslinux('default', $tree->[1]); + + pack("C*", 0x0E, 0x80, 0x03, 0x00) . " " + . $text . join('', @more_text) + . "\n" . syslinux_color('red') . "[F1-Help] [F2-Advanced Help]" . syslinux_color('default') . "\n"; +} + +sub syslinux_cfg { + my ($entries, $b_gfxboot) = @_; + my $default = 'linux'; + + my $header = <{append} =~ s/\s+/ /g; + "label $_->{label}\n" . + " kernel $_->{kernel}\n" . + ($_->{initrd} ? " append initrd=$_->{initrd} $_->{append}\n" : ''); + } @$entries; + + $header . ($b_gfxboot ? $header_gfxboot : $header_non_gfxboot) . join('', @l); +} + +sub initrd { + my ($type, $I, $img, $o_bootsplash_cfg) = @_; + my $stage1_root = "../mdk-stage1"; + + _ "rm -rf $tmp_initrd"; + mkdir_p("$tmp_initrd$_") foreach qw(/etc /lib /modules /sbin /tmp /var); + symlink "../modules", "$tmp_initrd/lib/modules"; + + symlink "/proc/mounts", "$tmp_initrd/etc/mtab"; + symlink "../tmp", "$tmp_initrd/var/run"; + _ "install -D /usr/share/terminfo/l/linux $tmp_initrd/usr/share/terminfo/l/linux"; + foreach ('pcitable', 'usbtable') { + _ "install -D /usr/share/ldetect-lst/$_.gz $tmp_initrd/usr/share/ldetect-lst/$_.gz"; + } + _ "install -D /usr/share/pci.ids $tmp_initrd/usr/share/pci.ids"; + foreach ("/usr/share/ldetect-lst/fallback-modules.alias", "/lib/module-init-tools/ldetect-lst-modules.alias") { + _ "install -D $_ $tmp_initrd$_"; + } + + _ "install $stage1_root/init $tmp_initrd/"; + foreach ('stage1', 'pppd', 'pppoe') { + _ "install $stage1_root/$_ $tmp_initrd/sbin/"; + } + + if ($arch !~ /ppc|ia64/) { + mkdir_p("$tmp_initrd/etc/pcmcia"); + _ "cp -a /etc/pcmcia/config.opts $tmp_initrd/etc/pcmcia"; + } + { + my ($ext) = $img =~ /rdz-(.*)/ or die "bad initrd name ($img)"; + my $modz = "all.kernels$I/$ext"; + mkdir_p("$tmp_initrd/modules/$ext"); + __ "tar xC $tmp_initrd/modules/$ext -f $modz/${type}_modules.tar"; + _ "depmod -b $tmp_initrd $ext"; + # depmod keeps only available modules in modules.alias, but we want them all + _ "cp -f $modz/modules.alias $modz/modules.description $tmp_initrd/modules/$ext"; + } + # ka deploy need some files in all.rdz + { + mkdir_p("$tmp_initrd/$_") foreach qw(sbin dev ka proc sbin var/tmp); + symlink("/sbin", "$tmp_initrd/bin"); + cp_af("/usr/bin/ka-d-client", "$tmp_initrd/ka/ka-d-client"); + cp_af("/usr/bin/mke2fs_diet", "$tmp_initrd/sbin/mke2fs"); + cp_af("/usr/bin/busybox", "$tmp_initrd/sbin/busybox"); + my @funct = map { /functions:/ .. /^$/ ? do { s/\s//g; split /,/ } : () } `busybox`; + shift @funct; + symlink('busybox', $tmp_initrd . "/sbin/$_") foreach @funct; + } + + if ($ENV{DEBUGSTAGE1}) { + _ "cp -f /usr/bin/busybox $tmp_initrd/sbin"; + symlink "busybox", "$tmp_initrd/sbin/$_" foreach qw(cat chgrp chmod chown chroot chvt clear cp cut date dd df dirname dmesg du echo env false find free grep gunzip gzip halt head id init kill killall klogd linuxrc ln logger ls lsmod mkdir mknod mkswap more mount mv poweroff ps pwd reboot reset rm rmdir sed sleep sh sort swapoff swapon sync syslogd tail tar touch true tty umount uname uniq uptime wc which whoami xargs yes zcat); + } + + if ($o_bootsplash_cfg) { + _ "splash -s -f $o_bootsplash_cfg > $tmp_initrd/bootsplash"; + } + + my $devs = sprintf "ls /dev/{%s}", join(',', qw(console fb0 fd0 loop3 mem null ppp ptyp0 ram3 tty[0-7] ttyp0 ttyS0)); + + _ "(cd $tmp_initrd; (find . ; $devs) | cpio -o -c --quiet) | gzip -9 > $img"; + _ "rm -rf $tmp_initrd"; +} + +sub entries_append { + my ($type) = @_; + + my $automatic = $type =~ /cdrom/ ? 'automatic=method:cdrom ' : ''; + $automatic .= 'changedisk ' if $type =~ /changedisk/; + + my @simple_entries = ( + linux => $default_vga, + vgalo => "vga=785", + vgahi => "vga=791", + text => "text", +# patch => "patch $default_vga", + rescue => "rescue", + ); + my @entries = ( + (map { $_->[0] => "$automatic$default_acpi $_->[1]" } group_by2(@simple_entries)), + noacpi => "$automatic$default_vga acpi=off", + ); + + map { { label => $_->[0], append => join(' ', grep { $_ } $default_append, $_->[1]) } } + group_by2(@entries); +} + +sub syslinux_cfg_all { + my ($type, $b_gfxboot) = @_; + + syslinux_cfg([ + (map { + { kernel => 'alt0/vmlinuz', initrd => 'alt0/all.rdz', %$_ }; + } entries_append($type)), + (map_index { + { label => "alt$::i", kernel => "alt$::i/vmlinuz", initrd => "alt$::i/all.rdz", + append => join(' ', grep { $_ } $default_append, $default_acpi, $default_vga) }; + } @kernels), + { label => 'memtest', kernel => 'memtest' }, + ], $b_gfxboot); +} +sub remove_ending_zero { + my ($img) = @_; + _(q(perl -0777 -pi -e 's/\0+$//' ) . $img); +} + +sub boot_img_i386 { + my ($type, $I, $img, $kernel) = @_; + + _ "rm -rf $tmp_mnt"; mkdir $tmp_mnt; + _ "cat $kernel > $tmp_mnt/vmlinuz"; + + output("$tmp_mnt/help.msg", syslinux_msg('help.msg.xml')); + output("$tmp_mnt/advanced.msg", syslinux_msg('advanced.msg.xml')); + + (my $rdz = $img) =~ s/\.img/.rdz/; + (my $initrd_type = $type) =~ s/-changedisk//; + initrd($initrd_type, $I, $rdz); + my $short_type = substr($type, 0, 8); + + output("$tmp_mnt/syslinux.cfg", + syslinux_cfg([ map { + { kernel => 'vmlinuz', initrd => "$short_type.rdz", %$_ }; + } entries_append($type) ])); + + _ "cp -f $rdz $tmp_mnt/$short_type.rdz"; + unlink $rdz; + + my $size = max(chomp_(`du -s -k $tmp_mnt`) + 50, 1440); + _ "dd if=/dev/zero of=$img bs=1k count=$size"; + + _ "mkdosfs-with-dir $tmp_mnt $img"; + _ "syslinux $img"; + _ "rm -rf $tmp_mnt"; +} + +# alias to x86 variant, slightly bigger with images though +sub boot_img_x86_64 { &boot_img_i386 } + +sub boot_img_alpha { + my ($type, $I, $img) = @_; + + __ "$sudo umount $tmp_mnt 2>/dev/null"; + _ "dd if=/dev/zero of=$img bs=1k count=1440"; + mke2fs($img); + _ "/sbin/e2writeboot $img /boot/bootlx"; + _ "$sudo mount -t ext2 $img $tmp_mnt -o loop"; + _ "cp -f vmlinux.gz $tmp_mnt"; + -f "$type.rdz" ? _ "cp -f $type.rdz $tmp_mnt" : initrd($type, $I, "$tmp_mnt/$type.rdz"); + + mkdir "$tmp_mnt/etc", 0777; + output("$tmp_mnt/etc/aboot.conf", +"0:vmlinux.gz initrd=$type.rdz rw $default_append $type +1:vmlinux.gz initrd=$type.rdz rw $default_append text $type +"); + _ "sync"; + _ "df $tmp_mnt"; +} + +sub boot_img_ia64 { + my ($type, $_I, $img, $kernel) = @_; + my $rdz = $img; $rdz =~ s/\.img/.rdz/; + + __ "$sudo umount $tmp_mnt 2>/dev/null"; + _ "dd if=/dev/zero of=$img bs=1k count=16384"; + _ "mkdosfs $img"; + _ "$sudo mount -t vfat $img $tmp_mnt -o loop,umask=000"; + _ "$sudo cp -f $kernel $tmp_mnt/vmlinux"; + _ "cp -f $rdz $tmp_mnt/$type.rdz"; + _ "$sudo cp -f tools/ia64/elilo.efi $tmp_mnt"; + output("$tmp_mnt/elilo.conf", qq( +prompt +timeout=50 + +image=vmlinux + label=linux + initrd=$type.rdz + append=" ramdisk_size=120000" + read-only + +image=vmlinux + label=rescue + initrd=$type.rdz + append=" rescue ramdisk_size=120000" +")); + _ "sync"; + _ "df $tmp_mnt"; + +} + +sub boot_img_sparc { + my ($type, $I, $_img) = @_; + if ($type =~ /^live(.*)/) { + #- hack to produce directly into /export the needed file for cdrom boot. + my $dir = "/export"; + my $boot = "boot"; #- non-absolute pathname only! + + _ "mkdir -p $dir/$boot"; + _ "cp -f /boot/cd.b /boot/second.b $dir/$boot"; + _ "cp -f vmlinux$1 $dir/$boot/vmlinux$1"; + -f "live$1.rdz" ? _ "cp -f live$1.rdz $dir/$boot" : initrd($type, $I, "$dir/$boot/live$1.rdz"); + + output("$dir/$boot/silo.conf", qq( +partition=1 +default=linux +timeout=100 +read-write +message=/$boot/boot.msg +image="cat /$boot/boot.msg" + label=1 + single-key +image="cat /$boot/general.msg" + label=2 + single-key +image="cat /$boot/expert.msg" + label=3 + single-key +image="cat /$boot/rescue.msg" + label=4 + single-key +image="cat /$boot/kickit.msg" + label=5 + single-key +image="cat /$boot/param.msg" + label=6 + single-key +image[sun4c,sun4d,sun4m]=/$boot/vmlinux + label=linux + alias=install + initrd=/$boot/live.rdz + append="ramdisk_size=128000" +image[sun4c,sun4d,sun4m]=/$boot/vmlinux + label=text + initrd=/$boot/live.rdz + append="ramdisk_size=128000 text" +image[sun4c,sun4d,sun4m]=/$boot/vmlinux + label=expert + initrd=/$boot/live.rdz + append="ramdisk_size=128000 expert" +image[sun4c,sun4d,sun4m]=/$boot/vmlinux + label=ks + initrd=/$boot/live.rdz + append="ramdisk_size=128000 ks" +image[sun4c,sun4d,sun4m]=/$boot/vmlinux + label=rescue + initrd=/$boot/live.rdz + append="ramdisk_size=128000 rescue" +image[sun4u]=/$boot/vmlinux64 + label=linux + alias=install + initrd=/$boot/live64.rdz + append="ramdisk_size=128000" +image[sun4u]=/$boot/vmlinux64 + label=text + initrd=/$boot/live64.rdz + append="ramdisk_size=128000 text" +image[sun4u]=/$boot/vmlinux64 + label=expert + initrd=/$boot/live64.rdz + append="ramdisk_size=128000 expert" +image[sun4u]=/$boot/vmlinux64 + label=ks + initrd=/$boot/live64.rdz + append="ramdisk_size=128000 ks" +image[sun4u]=/$boot/vmlinux64 + label=rescue + initrd=/$boot/live64.rdz + append="ramdisk_size=128000 rescue" +")); + + output("$dir/$boot/README", " +To Build a Bootable CD-ROM, try: + genisoimage -R -o t.iso -s /$boot/silo.conf /export +"); + } elsif ($type =~ /^tftprd(.*)/) { + my $dir = "/export"; + my $boot = "images"; + my $setarch = $1 ? "sparc64" : "sparc32"; + + _ "mkdir -p $dir/$boot"; + -f "$type.rdz" or initrd($type, $I, "$type.rdz"); + _ "cp -f vmlinux$1.aout $dir/$boot/$type.img"; + _ "$setarch kernel$1/src/arch/sparc$1/boot/piggyback $dir/$boot/$type.img kernel$1/boot/System.map $type.rdz"; + } elsif ($type =~ /^tftp(.*)/) { + my $dir = "/export"; + my $boot = "images"; + + _ "mkdir -p $dir/$boot"; + _ "cp -f vmlinux$1.aout $dir/$boot/$type.img"; + } else { + my $dir = "floppy"; + __ "$sudo umount $tmp_mnt 2>/dev/null"; + _ "rm -rf $dir"; + _ "mkdir -p $dir"; + _ "cp -f /boot/fd.b /boot/second.b $dir"; + _ "cp -f vmlinuz$I $dir/vmlinux$I.gz"; + -f "$type.rdz" ? _ "cp -f $type.rdz $dir" : initrd($type, $I, "$dir/$type.rdz"); + + output("$dir/boot.msg", " +Welcome to Mandriva Linux 7.1 + +Press to install or upgrade a system 7mMandriva Linux7m +"); + + output("$dir/silo.conf", qq( +partition=1 +default=linux +timeout=100 +read-write +message=/boot.msg +image=/vmlinux$I.gz + label=linux + initrd=/$type.rdz + append="ramdisk_size=128000 $type" +")); + _ "genromfs -d $dir -f /dev/ram -A 2048,/.. -a 512 -V 'DrakX boot disk'"; + _ "$sudo mount -t romfs /dev/ram $tmp_mnt"; + _ "silo -r $tmp_mnt -F -i /fd.b -b /second.b -C /silo.conf"; + _ "$sudo umount $tmp_mnt"; + _ "dd if=/dev/ram of=$type.img bs=1440k count=1"; + _ "sync"; + _ "$sudo mount -t romfs /dev/ram $tmp_mnt"; + _ "df $tmp_mnt"; + } +} + +sub boot_img_ppc { + my ($_type, $I, $_img, $_kernel) = @_; + foreach (glob("all.kernels/*")) { + my $ext = basename($_); + if ($ext =~ /legacy/) { + initrd("all", $I, "images/all.rdz-$ext"); + _ "mv images/all.rdz-$ext images/all.rdz-legacy"; + _ "cp $_/vmlinuz images/vmlinux-legacy"; + } + elsif ($ext =~ /2.6/) { + initrd("all", $I, "images/all.rdz-$ext"); + _ "mv images/all.rdz-$ext images/all.rdz"; + _ "cp $_/vmlinuz images/vmlinux"; + } + } + _ "cp -f /usr/lib/yaboot/yaboot images/yaboot"; + + output("images/ofboot.b", ' + +MacRISC + + +Mandriva Linux PPC bootloader + + +" screen" output +load-base release-load-area +dev screen +" "(0000000000aa00aa0000aaaaaa0000aa00aaaa5500aaaaaa)" drop 0 8 set-colors +" "(5555555555ff55ff5555ffffff5555ff55ffffff55ffffff)" drop 8 8 set-colors +device-end +3 to foreground-color +0 to background-color +" "(0C)" fb8-write drop +" Booting Mandriva Linux PPC..." fb8-write drop 100 ms +boot cd:,\boot\yaboot + + +1010 +000000000000F8FEACF6000000000000 +0000000000F5FFFFFEFEF50000000000 +00000000002BFAFEFAFCF70000000000 +0000000000F65D5857812B0000000000 +0000000000F5350B2F88560000000000 +0000000000F6335708F8FE0000000000 +00000000005600F600F5FD8100000000 +00000000F9F8000000F5FAFFF8000000 +000000008100F5F50000F6FEFE000000 +000000F8F700F500F50000FCFFF70000 +00000088F70000F50000F5FCFF2B0000 +0000002F582A00F5000008ADE02C0000 +00090B0A35A62B0000002D3B350A0000 +000A0A0B0B3BF60000505E0B0A0B0A00 +002E350B0B2F87FAFCF45F0B2E090000 +00000007335FF82BF72B575907000000 +000000000000ACFFFF81000000000000 +000000000081FFFFFFFF810000000000 +0000000000FBFFFFFFFFAC0000000000 +000000000081DFDFDFFFFB0000000000 +000000000081DD5F83FFFD0000000000 +000000000081DDDF5EACFF0000000000 +0000000000FDF981F981FFFF00000000 +00000000FFACF9F9F981FFFFAC000000 +00000000FFF98181F9F981FFFF000000 +000000ACACF981F981F9F9FFFFAC0000 +000000FFACF9F981F9F981FFFFFB0000 +00000083DFFBF981F9F95EFFFFFC0000 +005F5F5FDDFFFBF9F9F983DDDD5F0000 +005F5F5F5FDD81F9F9E7DF5F5F5F5F00 +0083DD5F5F83FFFFFFFFDF5F835F0000 +000000FBDDDFACFBACFBDFDFFB000000 +000000000000FFFFFFFF000000000000 +0000000000FFFFFFFFFFFF0000000000 +0000000000FFFFFFFFFFFF0000000000 +0000000000FFFFFFFFFFFF0000000000 +0000000000FFFFFFFFFFFF0000000000 +0000000000FFFFFFFFFFFF0000000000 +0000000000FFFFFFFFFFFFFF00000000 +00000000FFFFFFFFFFFFFFFFFF000000 +00000000FFFFFFFFFFFFFFFFFF000000 +000000FFFFFFFFFFFFFFFFFFFFFF0000 +000000FFFFFFFFFFFFFFFFFFFFFF0000 +000000FFFFFFFFFFFFFFFFFFFFFF0000 +00FFFFFFFFFFFFFFFFFFFFFFFFFF0000 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFF0000 +000000FFFFFFFFFFFFFFFFFFFF000000 + + +'); + + output("images/yaboot.conf", ' +init-message = "\nWelcome to Mandriva Linux PPC!\nHit for boot options.\n\n" +timeout = 150 +device=cd: +default = install-gui +message=/boot/yaboot.msg + +image = /boot/vmlinux + label = install-gui + initrd = /boot/all.gz + initrd-size = 34000 + append = " ramdisk_size=128000" + +image = /boot/vmlinux-power4 + label = install-gui-power4 + initrd = /boot/all-power4.gz + initrd-size = 34000 + append = " ramdisk_size=128000" + +image = /boot/vmlinux + label = install-text + initrd = /boot/all.gz + initrd-size = 34000 + append = " text ramdisk_size=128000" + +image = /boot/vmlinux-power4 + label = install-text-power4 + initrd = /boot/all-power4.gz + initrd-size = 34000 + append = " text ramdisk_size=128000" + +image = /boot/vmlinux + label = install-gui-old + initrd = /boot/all.gz + initrd-size = 34000 + append = " gui-old ramdisk_size=128000" + +image = /boot/vmlinux-power4 + label = install-gui-old-power4 + initrd = /boot/all-power4.gz + initrd-size = 34000 + append = " gui-old ramdisk_size=128000" + +image = enet:0,vmlinux + label = install-net + initrd = enet:0,all.gz + initrd-size = 34000 + append = " ramdisk_size=128000" + +image = enet:0,vmlinux-power4 + label = install-net-power4 + initrd = enet:0,all-power4.gz + initrd-size = 34000 + append = " ramdisk_size=128000" + +image = enet:0,vmlinux + label = install-net-text + initrd = enet:0,all.gz + initrd-size = 34000 + append = " text ramdisk_size=128000" + +image = enet:0,vmlinux-power4 + label = install-net-text-power4 + initrd = enet:0,all-power4.gz + initrd-size = 34000 + append = " text ramdisk_size=128000" + +image = /boot/vmlinux + label = rescue + initrd = /boot/all.gz + initrd-size = 34000 + append = " rescue ramdisk_size=128000" + +image = /boot/vmlinux-power4 + label = rescue-power4 + initrd = /boot/all-power4.gz + initrd-size = 34000 + append = " rescue ramdisk_size=128000" + +image = enet:0,vmlinux + label = rescue-net + initrd = enet:0,all.gz + initrd-size = 34000 + append = " rescue ramdisk_size=128000" + +image = enet:0,vmlinux-power4 + label = rescue-net-power4 + initrd = enet:0,all-power4.gz + initrd-size = 34000 + append = " rescue ramdisk_size=128000" +'); + + output("images/yaboot.msg", ' +Thanks for choosing Mandriva Linux PPC. The following is a short +explanation of the various options for booting the install CD. + +All options ending with "-power4" use the BOOT kernel for ppc 9xx and POWER4. +The default syntax with no suffix uses the BOOT kernel for ppc 6xx 7xx and 7xxx. +The default if you just hit enter is "install-gui". + +install-gui: uses Xorg fbdev mode +install-text: text based install +install-net: allows you to use a minimal boot CD, + pulling the rest of the install from + a network server +install-net-text: text mode network install +rescue: boots the rescue image +rescue-net: boots the rescue image from a network server + +'); + +} + +sub VERSION { + my ($kernels) = @_; + + map { "$_\n" } + $ENV{DISTRIB_DESCR}, + scalar gmtime(), + '', @$kernels; +} + +sub syslinux_all_files { + my ($dir, $kernels) = @_; + + eval { rm_rf($dir) }; mkdir_p($dir); + + @$kernels or die "syslinux_all_files: no kernel\n"; + + $default_vga =~ /788/ or die 'we rely on vga=788 for bootsplash'; + my $theme = $ENV{THEME} || 'Mandriva-Free'; + my $bootsplash_cfg = "/etc/bootsplash/themes/$theme/config/bootsplash-800x600.cfg"; + -e $bootsplash_cfg or die "can't find $bootsplash_cfg"; + + each_index { + mkdir "$dir/alt$::i", 0777; + _ "cp all.kernels/$_/vmlinuz $dir/alt$::i"; + initrd('all', '', "images/all.rdz-$_", $bootsplash_cfg); + rename("images/all.rdz-$_", "$dir/alt$::i/all.rdz"); + } @$kernels; + + _ "install -m 644 -D /boot/memtest* $dir/memtest"; + + output("$dir/help.msg", syslinux_msg('help.msg.xml')); + output("$dir/advanced.msg", syslinux_msg('advanced.msg.xml', + "\nYou can choose the following kernels :\n", + map_index { " o " . syslinux_color('white') . "alt$::i" . syslinux_color('default') . " is kernel $_\n" } @$kernels)); +} + +sub isolinux { + my ($kernels) = @_; + + syslinux_all_files('isolinux', $kernels); + + _ "cp $isolinux_bin isolinux/isolinux.bin"; + output("isolinux/isolinux.cfg", syslinux_cfg_all('cdrom', 1)); + + xbox_stage1() if arch() =~ /i.86/; +} + +sub xbox_stage1() { + my $xbox_kernel = find { /xbox/ } all('all.kernels') or return; + + my $dir = 'isolinux/xbox'; + eval { rm_rf($dir) }; mkdir_p($dir); + + _ "cp all.kernels/$xbox_kernel/vmlinuz $dir"; + initrd('all', '', "images/all.rdz-$xbox_kernel"); + rename("images/all.rdz-$xbox_kernel", "$dir/initrd"); + + _ "cp /usr/share/cromwell/xromwell-installer.xbe $dir/default.xbe"; + output("$dir/linuxboot.cfg", < until you reach "HELP END" +pause . +pause Please see http://qa.mandriva.com/hd_grub.cgi for a friendlier solution +pause . +pause To specify the location where Mandriva Linux is copied, +pause choose "Mandriva Linux Install", and press "e". +pause Then change "root (hd0,0)". FYI: +pause - (hd0,0) is the first partition on first bios hard drive (usually hda1) +pause - (hd0,4) is the first extended partition (usually hda5) +pause - (hd1,0) is the first partition on second bios hard drive +pause Replace /cooker to suits the directory containing Mandriva Linux +pause . +pause HELP END +EOF + + _ "mkdosfs-with-dir $tmp_mnt $img"; + _ "rm -rf $tmp_mnt"; + + output($mapfile, "(fd0) $img\n"); + + open(my $G, "| grub --device-map=$mapfile --batch"); + print $G < ... | ...)\n"; + +eval { rm_rf('all.kernels') }; #- remove old things +mkdir 'all.kernels'; + +my @kernels = map { + my $kern_ver = rpm2version($_); + if (/\.rpm$/) { + extract_kernel($_, $kern_ver); + } else { + extract_installed_rpm('', $kern_ver); + } + $kern_ver; +} @ARGV; + +output('all.kernels/.list', map { "$_\n" } @kernels); + +sub system_verbose { print join(' ', @_), "\n"; system(@_) } +sub sys { &system_verbose; $? and die } + +sub rpm2version { + my ($kernel_rpm) = @_; + my $opt = -e $kernel_rpm ? '-qpl' : '-ql'; + `$rpm $opt $kernel_rpm` =~ m!/boot/vmlinuz-(.*)! && $1 or die "can't find vmlinuz in $kernel_rpm (is it installed?)\n"; +} + +sub extract_kernel { + my ($kernel_rpm, $kern_ver) = @_; + + my $dir = "all.kernels/$kern_ver"; + + warn "Extracting kernel $kern_ver\n"; + + eval { rm_rf($dir) }; + mkdir_p("$dir/modules"); + sys("rpm2cpio $kernel_rpm | (cd $dir ; cpio -id)"); + + extract_installed_rpm($dir, $kern_ver); + + eval { rm_rf("$dir$_") } foreach qw(/boot /lib /usr); +} + +sub extract_installed_rpm { + my ($installed_dir, $kern_ver) = @_; + my $local_dir = "all.kernels/$kern_ver"; + mkdir_p("$local_dir/modules"); + + sys('cp', "$installed_dir/boot/vmlinuz-$kern_ver", "$local_dir/vmlinuz"); + sys("cp $installed_dir/lib/modules/$kern_ver/modules.* $local_dir"); + + open(my $F, "find $installed_dir/lib/modules/$kern_ver -name '*.ko.gz' |"); + my $file; while ($file = <$F>) { + chomp($file); + system('cp', $file, "$local_dir/modules/" . basename($file)) == 0 + or warn "conflict for $file\n"; + } + + sys('perl', '../kernel/modules.pl', 'remove_unneeded_modules', $kern_ver); + sys('perl', '../kernel/modules.pl', 'make_modules_per_image', $kern_ver); + + rm_rf("$local_dir/modules"); +} -- cgit v1.2.1