From 126777bc019a54afb4ec51299f2cf9d2841698aa Mon Sep 17 00:00:00 2001 From: Pascal Rigaux Date: Wed, 25 Apr 2007 12:26:16 +0000 Subject: re-sync after the big svn loss --- images/Makefile | 41 +++ images/NEWS | 28 ++ images/advanced.msg.xml | 17 ++ images/help.msg.xml | 21 ++ images/make_boot_img | 782 ++++++++++++++++++++++++++++++++++++++++++++++++ images/update_kernel | 117 ++++++++ 6 files changed, 1006 insertions(+) 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/Makefile b/images/Makefile new file mode 100644 index 000000000..db8de0a47 --- /dev/null +++ b/images/Makefile @@ -0,0 +1,41 @@ +include ../Makefile.config + +VERSION=1.9 +PRODUCT=drakx-installer-images + +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 + +tar: + rm -rf $(PRODUCT)*.tar* $(PRODUCT)-$(VERSION) + mkdir -p $(PRODUCT)-$(VERSION) + svn export -q . $(PRODUCT)-$(VERSION)/images + svn export -q ../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..45e23eef7 --- /dev/null +++ b/images/NEWS @@ -0,0 +1,28 @@ +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..055746371 --- /dev/null +++ b/images/make_boot_img @@ -0,0 +1,782 @@ +#!/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 = all('all.kernels'); +my $main = chomp_(cat_('RPMS/.main')) || $kernels[0]; +@kernels = uniq($main, @kernels); + +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-$main", $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, $o_default) = @_; + my $default = $o_default || 'linux'; + + my $header = <{append} =~ s/\s+/ /g; + "label $_->{label}\n" . + " kernel $_->{kernel}\n" . + ($_->{initrd} ? " append initrd=$_->{initrd} $_->{append}\n" : ''); + } @$entries; + + $header . ($o_default eq 'harddisk' ? $header_gfxboot : $header_non_gfxboot) . join('', @l); +} + +sub initrd { + my ($type, $I, $img, $bootsplash_cfg) = @_; + my $stage1_root = $ENV{DEBUGSTAGE1} ? "../mdk-stage1" : "/usr/$lib/drakx-installer-binaries"; + + _ "rm -rf $tmp_initrd"; + mkdir_p("$tmp_initrd$_") foreach qw(/etc /modules /sbin /tmp /var); + + symlink "/proc/mounts", "$tpm_initrd/etc/mtab"; + symlink "../tmp", "$tpm_initrd/var/run"; + _ "install -D /usr/share/terminfo/l/linux $tmp_initrd/usr/share/terminfo/l/linux"; + + _ "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"; + __ "tar xC $tmp_initrd/modules -f $modz/${type}_modules.tar"; + _ "cp -f $modz/modules.dep modules.description $tmp_initrd/modules/"; + + 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 ($bootsplash_cfg) { + _ "splash -s -f $bootspash_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) = @_; + + 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' }, + ], if_($type =~ /cdrom/, 'harddisk')); +} +sub remove_ending_zero { + my ($img) = @_; + _(q(perl -0777 -pi -e 's/\0+$//' ) . $img); +} + +sub boot_img_i386 { + my ($type, $I, $img, $kernel) = @_; + + _ "dd if=/dev/zero of=$img bs=1k count=" . ($type eq 'all' ? 10000 : $type eq 'ka' ? 2950 : 1440); + + _ "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; + + _ "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) = @_; + (my $rdz = $img) =~ s/\.img/.rdz/; + 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 $bootspash_cfg = '/etc/bootsplash/themes/Mandriva/config/bootsplash-800x600.cfg'; + -e $bootspash_cfg or die "can't find $bootspash_cfg"; + + each_index { + mkdir "$dir/alt$::i", 0777; + _ "cp all.kernels/$_/vmlinuz $dir/alt$::i"; + initrd('all', '', "images/all.rdz-$_", $bootspash_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')); + + 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 < +# all.kernels/VER/all_modules.tar (used for all.rdz) +# all.kernels/VER/modules.dep +# all.kernels/VER/modules.alias +# all.kernels/VER/vmlinuz +# +# if RPMS is empty, this script tries to find kernels in $kernel_repository + +use lib '../kernel'; +use MDK::Common; +use list_modules; + +(my $karch = arch()) =~ s/^i.86$/i586/; +my $kernel_repository = chomp_(cat_('.repository')); +my $rpm = 'rpm --nosignature'; + + +my $MOVE = $ARGV[0] eq '--move' && shift; + +@ARGV <= 1 or die "usage: ./update_kernel [--move] []\n"; + +eval { rm_rf('all.kernels') }; #- remove old things +mkdir 'all.kernels'; + +my $main = chomp_(cat_('RPMS/.main')); + +if (@ARGV) { + install_kernel($ARGV[0]); +} elsif (! -d 'RPMS' && $kernel_repository) { + get_kernels_from_repository(); +} + +if (glob("RPMS/*.rpm")) { + extract_kernel($_) foreach glob("RPMS/*.rpm"); +} else { + my @l = all('/lib/modules'); + @l = grep { /legacy/ } @l if arch() =~ /i.86/; + extract_installed_rpm('/', $_) foreach @l; +} + +sub system_verbose { print join(' ', @_), "\n"; system(@_) } +sub sys { &system_verbose; $? and die } + +sub rpm2version { + my ($kernel_rpm) = @_; + `$rpm -qpl $kernel_rpm` =~ m!/boot/vmlinuz-(.*)! && $1 or die "can't find vmlinuz in $kernel_rpm\n"; +} + +sub get_kernels_from_repository() { + sub look_for { + my ($name, $repository) = @_; + my $rpm_wildcard = 'kernel-' . ($name ? "$name-" : arch() =~ /i.86/ ? 'legacy-' : '') . '2.6*.rpm'; + my @l = glob("$repository/$rpm_wildcard") or die "no $name kernel found in $repository matching $rpm_wildcard\n"; + @l; + } + my @kernels; + push @kernels, look_for('', $kernel_repository); + + install_kernel($_) foreach @kernels; +} + +sub install_kernel { + my ($kernel_rpm) = @_; + my $basename = basename($kernel_rpm); + warn "Installing rpm $basename in RPMS\n"; + mkdir 'RPMS'; + cp_af($kernel_rpm, "RPMS/$basename"); + + if (!$main) { + $main = rpm2version($kernel_rpm); + output('RPMS/.main', "$main\n"); + } +} + +sub extract_kernel { + my ($kernel_rpm) = @_; + + my $kern_ver = rpm2version($kernel_rpm); + 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); + sys('cp', '-f', "$local_dir/modules.description", '.') if $kern_ver eq $main || !$main; + + rm_rf("$local_dir/modules"); +} -- cgit v1.2.1