diff options
Diffstat (limited to 'images/make_boot_img')
| -rwxr-xr-x | images/make_boot_img | 631 |
1 files changed, 131 insertions, 500 deletions
diff --git a/images/make_boot_img b/images/make_boot_img index 6dffe41f2..6953b02df 100755 --- a/images/make_boot_img +++ b/images/make_boot_img @@ -1,28 +1,30 @@ #!/usr/bin/perl use Config; +use FileHandle; use MDK::Common; +use POSIX; +use Carp; + Config->import; my ($arch) = $Config{archname} =~ /(.*?)-/; -my $default_append = ''; +my $default_append = 'audit=0'; 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 $default_vga = "vga=791 splash quiet"; +my $default_iswmd = "noiswmd"; +my $timeout = $ENV{BOOT_AUTOMATIC_METHOD} ? 5 : 150; +my $isolinux_bin = '/usr/lib/syslinux/isolinux.bin'; 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 _ { __ @_; $? and croak "'" . join(' ', @_) . "failed ($?)\n" } + sub mke2fs { my ($f) = @_; _ "/sbin/mke2fs -q -m 0 -F -s 1 $f"; @@ -35,16 +37,13 @@ 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'), + if_($arch =~ /i.86|x86_64/, 'isolinux', 'boot.iso', 'all.img', 'hd_grub.img'), ); my @images = @ARGV ? @ARGV : map { "images/$_" } @all_images; foreach my $img (@images) { - my ($type, $I, $extension) = $img =~ m!([^/]*)(64)?\.([^.]*)$!; + my ($type, undef, $extension) = $img =~ m!([^/]*)(64)?\.([^.]*)$!; if ($img =~ /hd_grub/) { hd_grub($img); @@ -57,18 +56,19 @@ foreach my $img (@images) { } elsif ($img =~ /boot.iso/) { boot_iso($img, \@kernels); } elsif ($extension eq 'rdz') { - initrd($type, $I, "$img-$_") foreach @kernels; + initrd("$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; + $::{"boot_img_$arch"}->($type, "$img-$_", $_, "all.kernels/$_/vmlinuz") foreach @kernels; rename("$img-$kernels[0]", $img); } else { die "unknown image $img"; } } +# The ascii 15 / Shift In / ^O character before the 0 should not be removed sub syslinux_color { - "0" . { + chr(15) . "0" . { default => '7', blue => '9', green => 'a', @@ -101,7 +101,7 @@ sub syslinux_msg { $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"; } @@ -118,9 +118,9 @@ display help.msg implicit 1 EOF my $header_gfxboot = <<EOF; -gfxboot bootlogo +ui gfxboot.c32 bootlogo label harddisk - localboot 0x80 + com32 chain.c32 hd0 exit EOF my $header_non_gfxboot = <<EOF; F1 help.msg @@ -138,58 +138,33 @@ EOF $header . ($b_gfxboot ? $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 /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 (glob("/usr/share/ldetect-lst/*-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 -f $modz/${type}_modules.tar"; - _ "cp -f $modz/modules.dep $modz/modules.alias modules.description $tmp_initrd/modules/$ext"; - symlink "$ext/$_", "$tmp_initrd/modules/$_" foreach qw(modules.dep modules.description); - } - - 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); - } +sub trim { + return $_[0] =~ s/^\s+|\s+$//rg; +} - if ($bootsplash_cfg) { - _ "splash -s -f $bootspash_cfg > $tmp_initrd/bootsplash"; +sub initrd { + my ($img, $kernel) = @_; + my $stage1_binary = $ENV{USE_LOCAL_STAGE1} ? trim(`realpath ../mdk-stage1/stage1`) : ""; + my $init_binary = $ENV{USE_LOCAL_STAGE1} ? trim(`realpath ../mdk-stage1/init`) : ""; + my $modules = " mgainstaller network-legacy nfs "; + my $drivers = `perl ../kernel/modules.pl list_needed_modules $kernel | xargs`; + my $fakedrivers = `perl ../kernel/modules.pl list_fake_modules $kernel | xargs`; + + if ($ENV{DEBUGSTAGE1} || $ENV{BUILD_KA}) { + $modules="$modules busybox "; } + $modules="$modules mgakadeploy " if $ENV{BUILD_KA}; - my $devs = sprintf "ls /dev/{%s}", join(',', qw(console fb0 fd0 loop3 mem null ppp ptyp0 ram3 tty[0-7] ttyp0 ttyS0)); + my $extras = `perl ../kernel/modules.pl list_additional_firmware $kernel | xargs`; + chomp $extras; + my $install_extras = $extras ? "--install '$extras'" : ""; - _ "(cd $tmp_initrd; (find . ; $devs) | cpio -o -c --quiet) | gzip -9 > $img"; - _ "rm -rf $tmp_initrd"; + # TODO if --nofscks and --no-hostonly are switched, dracut gives an error - fix or report upstream + __ "DRAKX_STAGE1_BINARY=$stage1_binary DRAKX_INIT_BINARY=$init_binary DRAKX_FAKE_MODULES='$fakedrivers' dracut --confdir ./dracut.conf.d --add ' $modules ' --add-drivers ' $drivers ' $install_extras '$img' '$kernel'"; + chmod(0644, $img); } + sub entries_append { my ($type) = @_; @@ -202,14 +177,15 @@ sub entries_append { vgahi => "vga=791", text => "text", # patch => "patch $default_vga", - rescue => "rescue", + rescue => "audit=0 rescue", ); my @entries = ( - (map { $_->[0] => "$automatic$default_acpi $_->[1]" } group_by2(@simple_entries)), - noacpi => "$automatic$default_vga acpi=off", + (map { $_->[0] => "$automatic$default_acpi $default_iswmd audit=0 $_->[1]" } group_by2(@simple_entries)), + noacpi => "$automatic$default_vga $default_iswmd audit=0 acpi=off", +# restore => "$automatic$default_vga restore", ); - map { { label => $_->[0], append => join(' ', grep {$_} $default_append, $_->[1]) } } + map { { label => $_->[0], append => join(' ', grep { $_ } $default_append, $_->[1]) } } group_by2(@entries); } @@ -218,13 +194,12 @@ sub syslinux_cfg_all { syslinux_cfg([ (map { - { kernel => 'alt0/vmlinuz', initrd => 'alt0/all.rdz', %$_ }; + { kernel => "$arch/vmlinuz", initrd => "$arch/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) }; + { label => $arch, kernel => "$arch/vmlinuz", initrd => "$arch/all.rdz", + append => join(' ', grep { $_ } $default_append, $default_acpi, $default_vga, $default_iswmd) }; } @kernels), - { label => 'memtest', kernel => 'memtest' }, ], $b_gfxboot); } sub remove_ending_zero { @@ -233,17 +208,16 @@ sub remove_ending_zero { } sub boot_img_i386 { - my ($type, $I, $img, $kernel) = @_; + my ($type, $img, $kernel, $vmlinuz) = @_; _ "rm -rf $tmp_mnt"; mkdir $tmp_mnt; - _ "cat $kernel > $tmp_mnt/vmlinuz"; + _ "cat $vmlinuz > $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); + initrd($rdz, $kernel); my $short_type = substr($type, 0, 8); output("$tmp_mnt/syslinux.cfg", @@ -254,10 +228,12 @@ sub boot_img_i386 { _ "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"; + # mtools wants the image to be a power of 32. + my $syslinux_overhead = 32 * 16; + my $size = max(ceil(chomp_(`du -s -k $tmp_mnt`) / 32) * 32 + $syslinux_overhead, 1440); - _ "mkdosfs-with-dir $tmp_mnt $img"; + _ "/sbin/mkdosfs -C $img $size"; + _ "mcopy -i $img $tmp_mnt/* ::"; _ "syslinux $img"; _ "rm -rf $tmp_mnt"; } @@ -265,398 +241,6 @@ sub boot_img_i386 { # 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) = @_; @@ -673,20 +257,13 @@ sub syslinux_all_files { @$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 $bootspash_cfg = "/etc/bootsplash/themes/$theme/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"); + mkdir "$dir/$arch", 0777; + _ "cp all.kernels/$_/vmlinuz $dir/$arch"; + initrd("images/all.rdz-$_", $_); + rename("images/all.rdz-$_", "$dir/$arch/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", @@ -699,6 +276,14 @@ sub isolinux { syslinux_all_files('isolinux', $kernels); _ "cp $isolinux_bin isolinux/isolinux.bin"; + _ "cp /usr/lib/syslinux/ifcpu.c32 isolinux/ifcpu.c32"; + _ "cp /usr/lib/syslinux/ldlinux.c32 isolinux/ldlinux.c32"; + _ "cp /usr/lib/syslinux/libcom32.c32 isolinux/libcom32.c32"; + _ "cp /usr/lib/syslinux/libgpl.c32 isolinux/libgpl.c32"; + _ "cp /usr/lib/syslinux/libmenu.c32 isolinux/libmenu.c32"; + _ "cp /usr/lib/syslinux/libutil.c32 isolinux/libutil.c32"; + _ "cp /usr/lib/syslinux/gfxboot.c32 isolinux/gfxboot.c32"; + _ "cp /usr/lib/syslinux/chain.c32 isolinux/chain.c32"; output("isolinux/isolinux.cfg", syslinux_cfg_all('cdrom', 1)); xbox_stage1() if arch() =~ /i.86/; @@ -711,7 +296,7 @@ sub xbox_stage1() { eval { rm_rf($dir) }; mkdir_p($dir); _ "cp all.kernels/$xbox_kernel/vmlinuz $dir"; - initrd('all', '', "images/all.rdz-$xbox_kernel"); + initrd("images/all.rdz-$xbox_kernel", $xbox_kernel); rename("images/all.rdz-$xbox_kernel", "$dir/initrd"); _ "cp /usr/share/cromwell/xromwell-installer.xbe $dir/default.xbe"; @@ -730,15 +315,60 @@ sub boot_iso { output('.boot_iso/VERSION', VERSION($kernels)); # for the boot iso, use standard isolinux - _ "cp /usr/lib/syslinux/isolinux.bin .boot_iso/isolinux/isolinux.bin"; + _ "cp $isolinux_bin .boot_iso/isolinux/isolinux.bin"; + _ "cp /usr/lib/syslinux/ifcpu.c32 .boot_iso/isolinux/ifcpu.c32"; + _ "cp /usr/lib/syslinux/ldlinux.c32 .boot_iso/isolinux/ldlinux.c32"; + _ "cp /usr/lib/syslinux/libcom32.c32 .boot_iso/isolinux/libcom32.c32"; + _ "cp /usr/lib/syslinux/libgpl.c32 .boot_iso/isolinux/libgpl.c32"; + _ "cp /usr/lib/syslinux/libmenu.c32 .boot_iso/isolinux/libmenu.c32"; + _ "cp /usr/lib/syslinux/libutil.c32 .boot_iso/isolinux/libutil.c32"; + _ "cp /usr/lib/syslinux/chain.c32 .boot_iso/isolinux/chain.c32"; my $with_gfxboot = 0; - _ "cp /usr/share/gfxboot/themes/Mandriva/install/* .boot_iso/isolinux" if $with_gfxboot; -# _ "cp /home/pixel/cooker/soft/theme/mandriva-gfxboot-theme/inst/* .boot_iso/isolinux" if $with_gfxboot; + _ "cp /usr/share/gfxboot/themes/Mageia/install/* .boot_iso/isolinux" if $with_gfxboot; +# _ "cp /home/pixel/cooker/soft/theme/mandriva-gfxboot-theme/inst/* .boot_iso/isolinux" if $with_gfxboot; + #_ "cp /home/teuf/mdv/src/mandriva-gfxboot-theme/inst/* .boot_iso/isolinux" if $with_gfxboot; + _ "cp /usr/lib/syslinux/gfxboot.c32 .boot_iso/isolinux/gfxboot.c32" if $with_gfxboot; output('.boot_iso/isolinux/isolinux.cfg', syslinux_cfg_all('', $with_gfxboot)); - _ "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"; + if ($ENV{BOOT_AUTOMATIC_METHOD}) { + _ "sed -i 's#\\(append .*\\)\\(splash quiet\\|rescue\\)\$#\\1\\2 automatic=$ENV{BOOT_AUTOMATIC_METHOD}#' .boot_iso/isolinux/isolinux.cfg"; + } + + my $arch = arch(); + my $options = "-J -joliet-long -r -v -T -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table"; + my $cmd = "xorriso -as mkisofs -U -A 'Mageia-$ENV{DISTRIB_VERSION}-$arch-netinstall' -V 'Mageia-$ENV{DISTRIB_VERSION}-$arch-netinstall' -volset 'Mageia-$ENV{DISTRIB_VERSION}-$arch' $options"; + # create efi stuff on the fly + if ($arch =~ /x86_64/) { + _ "mkdir -p .boot_iso/EFI/BOOT/"; + # create efi loader + my $efi_core = "configfile normal boot linux loadenv ls reboot search search_label"; + my $efi_part_fs = "part_msdos part_gpt part_apple fat iso9660 udf"; + my $efi_gfx = "gfxmenu gfxterm efi_gop efi_uga video video_bochs video_cirrus video_fb font png"; + _ "/usr/bin/grub2-mkimage --prefix='/EFI/BOOT' -O x86_64-efi -o .boot_iso/EFI/BOOT/bootx64.efi $efi_core $efi_part_fs $efi_gfx"; + _ "cp -f grub2.config .boot_iso/EFI/BOOT/grub.cfg"; + if ($ENV{BOOT_AUTOMATIC_METHOD}) { + _ "sed -i 's#\\(linux .*\\)#\\1 automatic=$ENV{BOOT_AUTOMATIC_METHOD}#' .boot_iso/EFI/BOOT/grub.cfg"; + _ "sed -i 's#timeout=[0-9]*#timeout=1#' .boot_iso/EFI/BOOT/grub.cfg"; + } + # add theme + _ "cp -r -L /boot/grub2/themes .boot_iso/EFI/BOOT/"; + _ "cp -f grub2.theme .boot_iso/EFI/BOOT/themes/maggy/theme.txt"; + _ "mkdir -p .boot_iso/EFI/BOOT/fonts"; + _ "cp -f /usr/share/grub/unicode.pf2 .boot_iso/EFI/BOOT/fonts/"; + # create efiboot.img, mtools wants the image to be a power of 32. + my $efisize = ceil(ceil(chomp_(`du -s -k .boot_iso/EFI`) / 1024) * 1024 / 32) * 32; + my $efi_img = ".boot_iso/isolinux/efiboot.img"; + _ "/sbin/mkdosfs -F12 -C $efi_img $efisize"; + _ "mcopy -s -i $efi_img .boot_iso/EFI ::"; + # create iso + _ "$cmd -eltorito-alt-boot -e isolinux/efiboot.img -no-emul-boot -o $iso .boot_iso"; + _ "isohybrid -u $iso"; + } else { + _ "$cmd -o $iso .boot_iso"; + _ "isohybrid -o 1 $iso"; + } rm_rf('.boot_iso'); } @@ -746,11 +376,11 @@ sub hd_grub { my ($img) = @_; my $mapfile = '/tmp/device.map.tmp'; - my ($grub_dir) = glob("/lib/grub/*-*"); + my ($grub_dir) = glob("/lib/grub/*-mageia"); 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"; + # mtools wants the image to be a power of 32. + my $size = ceil((40_000 + sum(map { -s $_ } @grub_files)) / 32 / 1024) * 32; _ "rm -rf $tmp_mnt"; mkdir $tmp_mnt; _ "cp @grub_files $tmp_mnt"; @@ -760,30 +390,31 @@ timeout 10 default 0 fallback 1 -title Mandriva Linux Install +title Mageia Install root (hd0,0) -kernel /cooker/isolinux/alt0/vmlinuz $default_append $default_acpi $default_vga automatic=method:disk -initrd /cooker/isolinux/alt0/all.rdz +kernel /cauldron/isolinux/alt0/vmlinuz $default_append $default_acpi $default_vga $default_iswmd automatic=method:disk +initrd /cauldron/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 Please see https://doc.mageia.org/ for a friendlier solution pause . -pause To specify the location where Mandriva Linux is copied, -pause choose "Mandriva Linux Install", and press "e". +pause To specify the location where Mageia is copied, +pause choose "Mageia 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 Replace /cauldron to suit the directory containing Mageia pause . pause HELP END EOF - _ "mkdosfs-with-dir $tmp_mnt $img"; + _ "/sbin/mkdosfs -C $img $size"; + _ "mcopy -i $img $tmp_mnt/* ::"; _ "rm -rf $tmp_mnt"; output($mapfile, "(fd0) $img\n"); |
