summaryrefslogtreecommitdiffstats
path: root/perl-install/bootloader.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/bootloader.pm')
-rw-r--r--perl-install/bootloader.pm27
1 files changed, 19 insertions, 8 deletions
diff --git a/perl-install/bootloader.pm b/perl-install/bootloader.pm
index 1be6dfd73..86a4f44f5 100644
--- a/perl-install/bootloader.pm
+++ b/perl-install/bootloader.pm
@@ -151,8 +151,7 @@ sub add_entry($$) {
sub add_kernel($$$$$) {
my ($prefix, $lilo, $kernelVersion, $specific, $v) = @_;
my $ext = $specific && "-$specific"; $specific =~ s/\d+\.\d+|hack//;
- my $kname = arch() =~ /ppc/ ? "vmlinux" : "vmlinuz";
- my ($vmlinuz, $image, $initrdImage) = ("$kname-$kernelVersion$specific", "/boot/$kname$ext", "/boot/initrd$ext.img");
+ my ($vmlinuz, $image, $initrdImage) = ("vmlinuz-$kernelVersion$specific", "/boot/vmlinuz$ext", "/boot/initrd$ext.img");
-e "$prefix/boot/$vmlinuz" or log::l("unable to find kernel image $prefix/boot/$vmlinuz"), return;
{
my $f = "initrd-$kernelVersion$specific.img";
@@ -242,6 +241,7 @@ sub suggest {
timeout => 50,
enableofboot => 1,
enablecdboot => 1,
+ useboot => $boot,
} :
{
boot => "/dev/" . ($onmbr ? $hds->[0]{device} : fsedit::get_root($fstab, 'boot')->{device}),
@@ -372,7 +372,7 @@ wait %d seconds for default boot.
}
}
my %l = (
- yaboot => bool(arch() =~ /ppc/),
+ yaboot => bool(arch() =~ /ppc/),
silo => bool(arch() =~ /sparc/),
lilo => bool(arch() !~ /sparc|ppc/) && !isLoopback(fsedit::get_root($fstab)),
grub => bool(arch() !~ /sparc|ppc/ && availableRamMB() < 800), #- don't use grub if more than 800MB
@@ -453,7 +453,7 @@ sub get_of_dev($$) {
}
sub install_yaboot($$$) {
- my ($prefix, $lilo) = @_;
+ my ($prefix, $lilo, $fstab, $hds) = @_;
$lilo->{prompt} = $lilo->{timeout};
if ($lilo->{message}) {
@@ -484,15 +484,26 @@ sub install_yaboot($$$) {
$lilo->{$_} and print F $_ foreach qw(enablecdboot enableofboot);
$lilo->{$_} and print F "$_=$lilo->{$_}" foreach qw(defaultos default);
print F "nonvram";
-
+ my $boot = "/dev/" . $lilo->{useboot} if $lilo->{useboot};
+
foreach (@{$lilo->{entries}}) {
if ($_->{type} eq "image") {
- my $of_dev = get_of_dev($prefix, $_->{root});
- print F "$_->{type}=$of_dev,$_->{kernel_or_dev}";
+ my $of_dev = '';
+ if ($boot !~ /$_->{root}/) {
+ $of_dev = get_of_dev($prefix, $boot);
+ print F "$_->{type}=$of_dev," . substr($_->{kernel_or_dev}, 5);
+ } else {
+ $of_dev = get_of_dev($prefix, $_->{root});
+ print F "$_->{type}=$of_dev,$_->{kernel_or_dev}";
+ }
print F "\tlabel=", substr($_->{label}, 0, 15); #- lilo doesn't handle more than 15 char long labels
print F "\troot=$_->{root}";
- print F "\tinitrd=$of_dev,$_->{initrd}" if $_->{initrd};
+ if ($boot !~ /$_->{root}/) {
+ print F "\tinitrd=$of_dev," . substr($_->{initrd}, 5) if $_->{initrd};
+ } else {
+ print F "\tinitrd=$of_dev,$_->{initrd}" if $_->{initrd};
+ }
print F "\tappend=\"$_->{append}\"" if $_->{append};
print F "\tread-write" if $_->{'read-write'};
print F "\tread-only" if !$_->{'read-write'};