summaryrefslogtreecommitdiffstats
path: root/images
diff options
context:
space:
mode:
Diffstat (limited to 'images')
-rw-r--r--images/Makefile41
-rw-r--r--images/NEWS28
-rw-r--r--images/advanced.msg.xml17
-rw-r--r--images/help.msg.xml21
-rwxr-xr-ximages/make_boot_img782
-rwxr-xr-ximages/update_kernel117
6 files changed, 1006 insertions, 0 deletions
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 @@
+<document>
+The following install types may be used instead of previously notified :
+ o <white>vgahi</white> for high resolution graphical installation.
+ o <white>vga16</white> for 640x480 in 16 colors graphical installation.
+
+The following options may be added on the command line :
+ o <white>readonly=1</white> to disable editing disk partitions.
+ o <white>display=ackbar:0</white> to export display to <blue>ackbar</blue> machine screen 0 during
+ installation (only for network installations).
+ o <white>noauto</white> to disable automatic detection.
+ o <white>nodmraid</white> to disable BIOS software RAID.
+ o <white>updatemodules</white> to use the special update floppy containing modules updates.
+ o <white>patch</white> to use a patch from the floppy (file named <blue>patch.pl</blue>).
+ o <white>auto_install=floppy</white> to enable auto_install using <blue>auto_inst.cfg</blue> file on the
+ floppy.
+ o <white>memtest</white> to test your computer RAM for faulty memory modules.
+</document>
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 @@
+<document>
+ <green>Welcome to <blue>Mandriva Linux</blue> install help</green>
+
+In most cases, the best way to get started is to simply press the <yellow>&lt;Enter&gt;</yellow> key.
+If you experience problems with standard install, try one of the following
+install types (type the highlighted text and press <yellow>&lt;Enter&gt;</yellow>):
+
+ o <white>text</white> for text installation instead of the graphical one.
+ o <white>linux</white> for standard graphical installation at normal resolution.
+ o <white>linux vga=785</white> for low resolution graphical installation.
+
+
+To repair an already installed system type <white>rescue</white> followed
+by <yellow>&lt;Enter&gt;</yellow>.
+
+You can also pass some <white>&lt;specific kernel options&gt;</white> to the Linux kernel.
+For example, try <white>linux noapic</white> if your system has trouble operating
+your network adapter correctly.
+<red>NOTE</red>: 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.
+</document>
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 = <<EOF;
+default $default
+prompt 1
+timeout $timeout
+display help.msg
+implicit 1
+EOF
+ my $header_gfxboot = <<EOF;
+gfxboot bootlogo
+label harddisk
+ localboot 0x80
+EOF
+ my $header_non_gfxboot = <<EOF;
+F1 help.msg
+F2 advanced.msg
+F3 boot.msg
+EOF
+
+ my @l = map {
+ $_->{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 <Enter> 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", '<CHRP-BOOT>
+<COMPATIBLE>
+MacRISC
+</COMPATIBLE>
+<DESCRIPTION>
+Mandriva Linux PPC bootloader
+</DESCRIPTION>
+<BOOT-SCRIPT>
+" 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
+</BOOT-SCRIPT>
+<OS-BADGE-ICONS>
+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
+</OS-BADGE-ICONS>
+</CHRP-BOOT>
+');
+
+ output("images/yaboot.conf", '
+init-message = "\nWelcome to Mandriva Linux PPC!\nHit <TAB> 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", <<EOF);
+kernel $dir/vmlinuz
+initrd $dir/initrd
+append root=/dev/ram3 ramdisk_size=36000 automatic=method:cdrom
+EOF
+}
+
+sub boot_iso {
+ my ($iso, $kernels) = @_;
+
+ syslinux_all_files('.boot_iso/isolinux', $kernels);
+
+ output('.boot_iso/VERSION', VERSION($kernels));
+
+ # for the boot iso, use standard isolinux
+ _ "cp /usr/lib/syslinux/isolinux.bin .boot_iso/isolinux/isolinux.bin";
+ output('.boot_iso/isolinux/isolinux.cfg', syslinux_cfg_all(''));
+
+ _ "genisoimage -r -f -J -cache-inodes -V 'Mdk Boot ISO' -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o $iso .boot_iso";
+ rm_rf('.boot_iso');
+}
+
+sub hd_grub {
+ my ($img) = @_;
+ my $mapfile = '/tmp/device.map.tmp';
+
+ my ($grub_dir) = glob("/lib/grub/*-*");
+ my @grub_files = map { "$grub_dir/$_" } qw(stage1 stage2);
+ my $size = 40_000 + sum(map { -s $_ } @grub_files);
+
+ _ "dd if=/dev/zero of=$img bs=1 count=$size";
+
+ _ "rm -rf $tmp_mnt"; mkdir $tmp_mnt;
+ _ "cp @grub_files $tmp_mnt";
+
+ output("$tmp_mnt/menu.lst", <<EOF);
+timeout 10
+default 0
+fallback 1
+
+title Mandriva Linux Install
+
+root (hd0,0)
+kernel /cooker/isolinux/alt0/vmlinuz $default_append $default_acpi $default_vga automatic=method:disk
+initrd /cooker/isolinux/alt0/all.rdz
+
+title Help
+
+pause To display the help, press <space> 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 <<EOF;
+root (fd0)
+install /stage1 d (fd0) /stage2 p /menu.lst
+quit
+EOF
+ close $G;
+ unlink $mapfile;
+}
diff --git a/images/update_kernel b/images/update_kernel
new file mode 100755
index 000000000..9d9e98612
--- /dev/null
+++ b/images/update_kernel
@@ -0,0 +1,117 @@
+#!/usr/bin/perl
+
+# this script takes kernels rpms from RPMS/ and create various files in all_kernels/
+# for each rpms in RPMS, it does:
+# RPMS/kernel-VER-*.rpm ->
+# 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] [<kernel rpm>]\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");
+}