summaryrefslogtreecommitdiffstats
path: root/images/make_boot_img
diff options
context:
space:
mode:
Diffstat (limited to 'images/make_boot_img')
-rwxr-xr-ximages/make_boot_img140
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');