diff options
Diffstat (limited to 'images/make_boot_img')
-rwxr-xr-x | images/make_boot_img | 140 |
1 files changed, 58 insertions, 82 deletions
diff --git a/images/make_boot_img b/images/make_boot_img index 35a00cc30..613affd9a 100755 --- a/images/make_boot_img +++ b/images/make_boot_img @@ -62,10 +62,10 @@ foreach my $img (@images) { } elsif ($img =~ /boot.iso/) { boot_iso($img, \@kernels); } elsif ($extension eq 'rdz') { - initrd($type, $I, "$img-$_") foreach @kernels; + 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; + $::{"boot_img_$arch"}->($type, $I, "$img-$_", $_, "all.kernels/$_/vmlinuz") foreach @kernels; rename("$img-$kernels[0]", $img); } else { die "unknown image $img"; @@ -106,7 +106,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"; } @@ -143,71 +143,31 @@ EOF $header . ($b_gfxboot ? $header_gfxboot : $header_non_gfxboot) . join('', @l); } +sub trim { + return $_[0] =~ s/^\s+|\s+$//rg; +} + sub initrd { - my ($type, $I, $img) = @_; - my $stage1_root = $ENV{USE_LOCAL_STAGE1} ? "../mdk-stage1" : "/usr/$lib/drakx-installer-binaries"; + my ($type, $I, $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 ($ext) = $img =~ /rdz-(.*)/ or die "bad initrd name ($img)"; + my $modules = " mgainstaller "; + my $drivers = `perl ../kernel/modules.pl list_needed_modules $kernel | xargs`; + my $fakedrivers = `perl ../kernel/modules.pl list_fake_modules $kernel | xargs`; - _ "rm -rf $tmp_initrd"; - mkdir_p("$tmp_initrd$_") foreach qw(/etc /firmware /lib /modules /sbin /tmp /var); - symlink "../modules", "$tmp_initrd/lib/modules"; - symlink "../firmware", "$tmp_initrd/lib/firmware"; - - 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 ("dkms-modules.alias", "fallback-modules.alias", "/lib/module-init-tools/ldetect-lst-modules.alias") { - my $file = m!^/! ? $_ : "/usr/share/ldetect-lst/$_"; - _ "install -D $file $tmp_initrd$file"; - } - foreach my $firm (glob_("all.kernels$I/$ext/firmware/*")) { - my $dest=$firm; - $dest =~ s|all.kernels$I/$ext/||; - _ "cp -a $firm $tmp_initrd/$dest"; - } - - _ "install $stage1_root/init $tmp_initrd/"; - _ "install $stage1_root/stage1 $tmp_initrd/sbin/"; - foreach ('pppd', 'pppoe') { - _ "install /usr/sbin/${_}-diet $tmp_initrd/sbin/$_"; - } - - if ($arch !~ /ppc|ia64/) { - mkdir_p("$tmp_initrd/etc/pcmcia"); - _ "cp -a /etc/pcmcia/config.opts $tmp_initrd/etc/pcmcia"; - } - { - my $modz = "all.kernels$I/$ext"; - mkdir_p("$tmp_initrd/modules/$ext"); - __ "tar xC $tmp_initrd/modules/$ext -f $modz/${type}_modules.tar"; - _ "cp -f $modz/modules.$_ $tmp_initrd/modules/$ext" foreach qw(order builtin); - substInFile { s,.*/,, } "$tmp_initrd/modules/$ext/modules.order"; - _ "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"; - } - mkdir_p("$tmp_initrd/$_") foreach qw(dev proc sys var/tmp tmp/stage2); - # ka deploy need some files in all.rdz if ($ENV{DEBUGSTAGE1} || $ENV{BUILD_KA}) { - symlink("/sbin", "$tmp_initrd/bin"); - cp_af("/bin/busybox.static", "$tmp_initrd/sbin/busybox"); - my @funct = map { /functions:/ .. /^$/ ? do { s/\s//g; split /,/ } : () } `busybox.static`; - shift @funct; - symlink('busybox', $tmp_initrd . "/sbin/$_") foreach @funct; - } - if ($ENV{BUILD_KA}) { - mkdir_p("$tmp_initrd/ka"); - cp_af("/usr/bin/ka-d-client", "$tmp_initrd/ka/ka-d-client"); + $modules="$modules busybox "; } + $modules="$modules mgakadeploy " if ($ENV{BUILD_KA}); - _ "(cd $tmp_initrd; find . | cpio -o -c --quiet) | xz --check=crc32 --lzma2=dict=512KiB > $img"; - _ "rm -rf $tmp_initrd"; + mkdir_p("build/dracut.conf.d"); + # 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 --conf dracut.conf --confdir ./build/dracut.conf.d --add ' $modules ' --add-drivers ' $drivers ' '$img' '$kernel'"; + chmod(0644, $img); } + sub entries_append { my ($type) = @_; @@ -220,7 +180,7 @@ 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)), @@ -252,17 +212,17 @@ sub remove_ending_zero { } sub boot_img_i386 { - my ($type, $I, $img, $kernel) = @_; + my ($type, $I, $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($initrd_type, $I, $rdz, $kernel); my $short_type = substr($type, 0, 8); output("$tmp_mnt/syslinux.cfg", @@ -287,7 +247,7 @@ sub boot_img_i386 { sub boot_img_x86_64 { &boot_img_i386 } sub boot_img_alpha { - my ($type, $I, $img) = @_; + my ($type, $I, $img, $kernel, $_vmlinuz) = @_; __ "$sudo umount $tmp_mnt 2>/dev/null"; _ "dd if=/dev/zero of=$img bs=1k count=1440"; @@ -295,7 +255,7 @@ sub boot_img_alpha { _ "/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"); + -f "$type.rdz" ? _ "cp -f $type.rdz $tmp_mnt" : initrd($type, $I, "$tmp_mnt/$type.rdz", $kernel); mkdir "$tmp_mnt/etc", 0777; output("$tmp_mnt/etc/aboot.conf", @@ -307,14 +267,14 @@ sub boot_img_alpha { } sub boot_img_ia64 { - my ($type, $_I, $img, $kernel) = @_; + my ($type, $_I, $img, $kernel, $vmlinuz) = @_; 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"; + _ "$sudo cp -f $vmlinuz $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( @@ -338,7 +298,7 @@ image=vmlinux } sub boot_img_sparc { - my ($type, $I, $_img) = @_; + my ($type, $I, $_img, $kernel, $_vmlinuz) = @_; if ($type =~ /^live(.*)/) { #- hack to produce directly into /export the needed file for cdrom boot. my $dir = "/export"; @@ -347,7 +307,7 @@ sub boot_img_sparc { _ "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"); + -f "live$1.rdz" ? _ "cp -f live$1.rdz $dir/$boot" : initrd($type, $I, "$dir/$boot/live$1.rdz", $kernel); output("$dir/$boot/silo.conf", qq( partition=1 @@ -427,7 +387,7 @@ To Build a Bootable CD-ROM, try: my $setarch = $1 ? "sparc64" : "sparc32"; _ "mkdir -p $dir/$boot"; - -f "$type.rdz" or initrd($type, $I, "$type.rdz"); + -f "$type.rdz" or initrd($type, $I, "$type.rdz", $kernel); _ "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(.*)/) { @@ -443,7 +403,7 @@ To Build a Bootable CD-ROM, try: _ "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"); + -f "$type.rdz" ? _ "cp -f $type.rdz $dir" : initrd($type, $I, "$dir/$type.rdz", $kernel); output("$dir/boot.msg", " Welcome to Mageia $ENV{DISTRIB_VERSION} @@ -474,16 +434,16 @@ image=/vmlinux$I.gz } sub boot_img_ppc { - my ($_type, $I, $_img, $_kernel) = @_; + my ($_type, $I, $_img, $kernel, $_vmlinuz) = @_; foreach (glob("all.kernels/*")) { my $ext = basename($_); if ($ext =~ /legacy/) { - initrd("all", $I, "images/all.rdz-$ext"); + initrd("all", $I, "images/all.rdz-$ext", $kernel); _ "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"); + initrd("all", $I, "images/all.rdz-$ext", $kernel); _ "mv images/all.rdz-$ext images/all.rdz"; _ "cp $_/vmlinuz images/vmlinux"; } @@ -696,9 +656,9 @@ sub syslinux_all_files { $default_vga =~ /788/ or die 'we rely on vga=788 for bootsplash'; each_index { - mkdir "$dir/alt$::i", 0777; + mkdir "$dir/$arch", 0777; _ "cp all.kernels/$_/vmlinuz $dir/$arch"; - initrd('all', '', "images/all.rdz-$_"); + initrd('all', '', "images/all.rdz-$_", $_); rename("images/all.rdz-$_", "$dir/$arch/all.rdz"); } @$kernels; @@ -715,9 +675,15 @@ sub isolinux { syslinux_all_files('isolinux', $kernels); - _ "cp $isolinux_bin ../isolinux/isolinux.bin"; - _ "cp /usr/lib/syslinux/gfxboot.c32 ../isolinux/gfxboot.c32"; - output("../isolinux/isolinux.cfg", syslinux_cfg_all('cdrom', 1)); + _ "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"; + output("isolinux/isolinux.cfg", syslinux_cfg_all('cdrom', 1)); xbox_stage1() if arch() =~ /i.86/; } @@ -729,7 +695,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('all', '', "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"; @@ -748,7 +714,13 @@ 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"; my $with_gfxboot = 0; _ "cp /usr/share/gfxboot/themes/Mageia/install/* .boot_iso/isolinux" if $with_gfxboot; @@ -758,6 +730,10 @@ sub boot_iso { output('.boot_iso/isolinux/isolinux.cfg', syslinux_cfg_all('', $with_gfxboot)); + if ($ENV{BOOT_AUTOMATIC_METHOD}) { + _ "sed -i 's#\\(append .*\\)\\(splash quiet\\|rescue\\)\$#\\1\\2 automatic=$ENV{BOOT_AUTOMATIC_METHOD}#' .boot_iso/isolinux/isolinux.cfg" + } + _ "genisoimage -r -f -J -cache-inodes -V 'Mga Boot ISO' -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o $iso .boot_iso"; _ "isohybrid -o 1 $iso"; rm_rf('.boot_iso'); |