summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perl-install/any.pm18
-rw-r--r--perl-install/bootloader.pm87
-rw-r--r--perl-install/install_steps.pm16
3 files changed, 65 insertions, 56 deletions
diff --git a/perl-install/any.pm b/perl-install/any.pm
index 0e0392f70..817ffab51 100644
--- a/perl-install/any.pm
+++ b/perl-install/any.pm
@@ -82,7 +82,7 @@ sub hdInstallPath() {
sub install_acpi_pkgs {
my ($do_pkgs, $b) = @_;
- my $acpi = bootloader::get_append($b, 'acpi') or return;
+ my $acpi = bootloader::get_append_with_key($b, 'acpi') or return;
if (!member($acpi, 'off', 'ht')) {
$do_pkgs->install('acpi', 'acpid') if !(-x "$::prefix/usr/bin/acpi" && -x "$::prefix/usr/sbin/acpid")
}
@@ -228,10 +228,10 @@ sub setupBootloader__general {
my ($in, $b, $all_hds, $fstab, $security) = @_;
my @method_choices = bootloader::method_choices($fstab);
- my $prev_force_acpi = my $force_acpi = bootloader::get_append($b, 'acpi') !~ /off|ht/;
- my $prev_force_noapic = my $force_noapic = bootloader::get_append($b, 'noapic');
- my $prev_force_nolapic = my $force_nolapic = bootloader::get_append($b, 'nolapic');
- my $memsize = bootloader::get_append($b, 'mem');
+ my $prev_force_acpi = my $force_acpi = bootloader::get_append_with_key($b, 'acpi') !~ /off|ht/;
+ my $prev_force_noapic = my $force_noapic = bootloader::get_append_simple($b, 'noapic');
+ my $prev_force_nolapic = my $force_nolapic = bootloader::get_append_simple($b, 'nolapic');
+ my $memsize = bootloader::get_append_with_key($b, 'mem');
my $prev_clean_tmp = my $clean_tmp = any { $_->{mntpoint} eq '/tmp' } @{$all_hds->{special} ||= []};
my $prev_boot = $b->{boot};
@@ -297,15 +297,15 @@ sub setupBootloader__general {
$in->do_pkgs->ensure_binary_is_installed('grub', "grub", 1) or return 0;
}
- bootloader::set_append($b, "mem", $memsize || 0);
+ bootloader::set_append_with_key($b, mem => $memsize || 0);
if ($prev_force_acpi != $force_acpi) {
- bootloader::set_append($b, acpi => ($force_acpi ? '' : 'ht'));
+ bootloader::set_append_with_key($b, acpi => ($force_acpi ? '' : 'ht'));
}
if ($prev_force_noapic != $force_noapic) {
- ($force_noapic ? \&bootloader::set_append : \&bootloader::remove_append_simple)->($b, 'noapic');
+ ($force_noapic ? \&bootloader::set_append_simple : \&bootloader::remove_append_simple)->($b, 'noapic');
}
if ($prev_force_nolapic != $force_nolapic) {
- ($force_nolapic ? \&bootloader::set_append : \&bootloader::remove_append_simple)->($b, 'nolapic');
+ ($force_nolapic ? \&bootloader::set_append_simple : \&bootloader::remove_append_simple)->($b, 'nolapic');
}
if ($prev_clean_tmp != $clean_tmp) {
diff --git a/perl-install/bootloader.pm b/perl-install/bootloader.pm
index 4b3cfddf0..d0be63cf4 100644
--- a/perl-install/bootloader.pm
+++ b/perl-install/bootloader.pm
@@ -510,22 +510,6 @@ sub normalize_append {
pack_append($simple, $dict);
}
-sub append__mem_is_memsize { $_[0] =~ /^\d+[kM]?$/i }
-
-sub get_append {
- my ($b, $key) = @_;
- my ($simple, $dict) = unpack_append($b->{perImageAppend});
- if (member($key, @$simple)) {
- return 1;
- }
- my @l = map { $_->[1] } grep { $_->[0] eq $key } @$dict;
-
- #- suppose we want the memsize
- @l = grep { append__mem_is_memsize($_) } @l if $key eq 'mem';
-
- log::l("more than one $key in $b->{perImageAppend}") if @l > 1;
- $l[0];
-}
sub modify_append {
my ($b, $f) = @_;
@@ -538,6 +522,25 @@ sub modify_append {
log::l("modify_append: $$_");
}
}
+
+sub append__mem_is_memsize { $_[0] =~ /^\d+[kM]?$/i }
+
+sub get_append_simple {
+ my ($b, $key) = @_;
+ my ($simple, $_dict) = unpack_append($b->{perImageAppend});
+ member($key, @$simple);
+}
+sub get_append_with_key {
+ my ($b, $key) = @_;
+ my ($_simple, $dict) = unpack_append($b->{perImageAppend});
+ my @l = map { $_->[1] } grep { $_->[0] eq $key } @$dict;
+
+ #- suppose we want the memsize
+ @l = grep { append__mem_is_memsize($_) } @l if $key eq 'mem';
+
+ log::l("more than one $key in $b->{perImageAppend}") if @l > 1;
+ $l[0];
+}
sub remove_append_simple {
my ($b, $key) = @_;
modify_append($b, sub {
@@ -545,34 +548,38 @@ sub remove_append_simple {
@$simple = grep { $_ ne $key } @$simple;
});
}
-sub set_append {
- my $has_val = @_ > 2;
+sub set_append_with_key {
my ($b, $key, $val) = @_;
modify_append($b, sub {
- my ($simple, $dict) = @_;
- if ($has_val) {
- my $to_add = $key eq 'mem' ? $val : $val ne '';
- @$dict = map {
- if ($_->[0] ne $key || $key eq 'mem' && append__mem_is_memsize($_->[1]) != append__mem_is_memsize($val)) {
- $_;
- } elsif ($to_add) {
- $to_add = 0;
- [ $key, $val ];
- } else {
- ();
- }
- } @$dict;
+ my ($_simple, $dict) = @_;
+
+ my $to_add = $key eq 'mem' ? $val : $val ne '';
+ @$dict = map {
+ if ($_->[0] ne $key || $key eq 'mem' && append__mem_is_memsize($_->[1]) != append__mem_is_memsize($val)) {
+ $_;
+ } elsif ($to_add) {
+ $to_add = 0;
+ [ $key, $val ];
+ } else {
+ ();
+ }
+ } @$dict;
- push @$dict, [ $key, $val ] if $to_add;
- } else {
- @$simple = uniq(@$simple, $key);
- }
+ push @$dict, [ $key, $val ] if $to_add;
+ });
+}
+sub set_append_simple {
+ my ($b, $key) = @_;
+
+ modify_append($b, sub {
+ my ($simple, $_dict) = @_;
+ @$simple = uniq(@$simple, $key);
});
}
-sub may_append {
+sub may_append_with_key {
my ($b, $key, $val) = @_;
- set_append($b, $key, $val) if !get_append($b, $key);
+ set_append_with_key($b, $key, $val) if !get_append_with_key($b, $key);
}
sub get_append_netprofile {
@@ -714,7 +721,7 @@ wait for default boot.
add2hash_($bootloader, { memsize => $1 }) if cat_("/proc/cmdline") =~ /\bmem=(\d+[KkMm]?)(?:\s.*)?$/;
if (my ($s, $port, $speed) = cat_("/proc/cmdline") =~ /console=(ttyS(\d),(\d+)\S*)/) {
log::l("serial console $s $port $speed");
- set_append($bootloader, 'console' => $s);
+ set_append_with_key($bootloader, console => $s);
any::set_login_serial_console($port, $speed);
}
@@ -1025,7 +1032,7 @@ sub write_lilo {
push @conf, qq(append="$bootloader->{append}") if $bootloader->{append};
push @conf, "password=" . $bootloader->{password} if $bootloader->{password}; #- also done by msec
push @conf, "timeout=" . round(10 * $bootloader->{timeout}) if $bootloader->{timeout};
- push @conf, "serial=" . $1 if get_append($bootloader, 'console') =~ /ttyS(.*)/;
+ push @conf, "serial=" . $1 if get_append_with_key($bootloader, 'console') =~ /ttyS(.*)/;
push @conf, "message=/boot/message" if arch() !~ /ia64/;
push @conf, "menu-scheme=wb:bw:wb:bw" if arch() !~ /ia64/;
@@ -1190,7 +1197,7 @@ sub write_grub {
my @sorted_hds = sort_hds_according_to_bios($bootloader, $all_hds);
write_grub_device_map(\@legacy_floppies, \@sorted_hds);
- if (get_append($bootloader, 'console') =~ /ttyS(\d),(\d+)/) {
+ if (get_append_with_key($bootloader, 'console') =~ /ttyS(\d),(\d+)/) {
$bootloader->{serial} ||= "--unit=$1 --speed=$2";
$bootloader->{terminal} ||= "--timeout=" . ($bootloader->{timeout} || 0) . " console serial";
}
diff --git a/perl-install/install_steps.pm b/perl-install/install_steps.pm
index 22f013565..323b8c3b3 100644
--- a/perl-install/install_steps.pm
+++ b/perl-install/install_steps.pm
@@ -497,7 +497,7 @@ Consoles 1,3,4,7 may also contain interesting information";
$p && $p->flag_installed
};
require bootloader;
- bootloader::may_append($o->{bootloader}, devfs => $have_devfsd ? 'mount' : 'nomount');
+ bootloader::may_append_with_key($o->{bootloader}, devfs => $have_devfsd ? 'mount' : 'nomount');
#- generate /etc/lvmtab needed for rc.sysinit
run_program::rooted($o->{prefix}, 'lvm2', 'vgscan') if -e '/etc/lvmtab';
@@ -848,13 +848,13 @@ sub setupBootloaderBefore {
});
if ($o->{miscellaneous}{HDPARM}) {
- bootloader::set_append($o->{bootloader}, $_, 'autotune') foreach grep { /ide/ } all("/proc/ide");
+ bootloader::set_append_with_key($o->{bootloader}, $_, 'autotune') foreach grep { /ide/ } all("/proc/ide");
}
if (cat_("/proc/cmdline") =~ /mem=nopentium/) {
- bootloader::set_append($o->{bootloader}, mem => 'nopentium');
+ bootloader::set_append_with_key($o->{bootloader}, mem => 'nopentium');
}
if (cat_("/proc/cmdline") =~ /\b(pci)=(\S+)/) {
- bootloader::set_append($o->{bootloader}, $1, $2);
+ bootloader::set_append_with_key($o->{bootloader}, $1, $2);
}
if (my ($acpi) = cat_("/proc/cmdline") =~ /\bacpi=(\w+)/) {
if ($acpi eq 'ht') {
@@ -865,15 +865,17 @@ sub setupBootloaderBefore {
$acpi = 'on';
}
}
- bootloader::set_append($o->{bootloader}, acpi => $acpi);
+ bootloader::set_append_with_key($o->{bootloader}, acpi => $acpi);
}
if (cat_("/proc/cmdline") =~ /\bnoapic/) {
- bootloader::set_append($o->{bootloader}, 'noapic');
+ bootloader::set_append_simple($o->{bootloader}, 'noapic');
}
my ($MemTotal) = cat_("/proc/meminfo") =~ /^MemTotal:\s*(\d+)/m;
if (my ($biggest_swap) = sort { $b->{size} <=> $a->{size} } grep { isSwap($_) } @{$o->{fstab}}) {
log::l("MemTotal: $MemTotal < ", $biggest_swap->{size} / 2);
- bootloader::set_append($o->{bootloader}, resume => devices::make($biggest_swap->{device})) if $MemTotal < $biggest_swap->{size} / 2;
+ if ($MemTotal < $biggest_swap->{size} / 2) {
+ bootloader::set_append_with_key($o->{bootloader}, resume => devices::make($biggest_swap->{device}));
+ }
}
#- check for valid fb mode to enable a default boot with frame buffer.