summaryrefslogtreecommitdiffstats
path: root/perl-install/standalone/bootloader-config
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/standalone/bootloader-config')
-rwxr-xr-xperl-install/standalone/bootloader-config57
1 files changed, 37 insertions, 20 deletions
diff --git a/perl-install/standalone/bootloader-config b/perl-install/standalone/bootloader-config
index 56245dcd3..e80133fde 100755
--- a/perl-install/standalone/bootloader-config
+++ b/perl-install/standalone/bootloader-config
@@ -26,14 +26,14 @@ my %options = (
);
GetOptions(%options) or die <<'EOF';
-usage: Releve --action add-kernel (--image <vmlinuz> | --kernel-version <2.6.xxx>) [--label <...>] [--no-short-name] [--initrd-options <options>]
- Releve --action remove-kernel (--image <vmlinuz> | --kernel-version <2.6.xxx>)
+usage: bootloader-config --action add-kernel (--image <vmlinuz> | --kernel-version <2.6.xxx>) [--label <...>] [--no-short-name] [--initrd-options <options>]
+ bootloader-config --action remove-kernel (--image <vmlinuz> | --kernel-version <2.6.xxx>)
- Releve --action add-entry (--image <image> | --chainload <device>) --label <...>
- Releve --action remove-entry (--image <image> | --chainload <device> | --label <...>)
+ bootloader-config --action add-entry (--image <image> | --chainload <device>) --label <...>
+ bootloader-config --action remove-entry (--image <image> | --chainload <device> | --label <...>)
- Releve --action update-splash
- Releve --action remove-splash
+ bootloader-config --action update-splash
+ bootloader-config --action remove-splash
EOF
my @known_actions = qw(add-kernel remove-kernel update-splash remove-splash detectloader add-entry remove-entry);
@@ -54,10 +54,9 @@ if ($image) {
my $all_hds = fsedit::get_hds();
-fs::get_info_from_fstab($all_hds, '');
-my $hds = $all_hds->{hds};
+fs::get_info_from_fstab($all_hds);
-my $bootloader = bootloader::read([ fsedit::get_fstab(@$hds) ]) or die "Cannot find a boot loader installed\n";
+my $bootloader = bootloader::read([ fs::get::fstab($all_hds) ]) or die "Cannot find a boot loader installed\n";
$action =~ s/-/_/g;
@@ -76,19 +75,37 @@ sub remove_kernel() {
unlink "/lib/modules/$kernel_version/build";
remove_now_broken_boot_symlinks();
+ my %proposed_labels;
+ my @new_entries;
my ($to_remove, $to_keep) = partition {
- $_->{kernel_or_dev} && $_->{kernel_or_dev} eq $image;
+ if ($_->{kernel_or_dev} && $_->{kernel_or_dev} eq $image) {
+ 1;
+ } else {
+ my $vmlinuz = $_->{kernel_or_dev} && bootloader::expand_vmlinuz_symlink($_->{kernel_or_dev});
+ if ($vmlinuz && "/boot/$vmlinuz" eq $image) {
+ if (!%proposed_labels) {
+ %proposed_labels = bootloader::get_kernels_and_labels_before_kernel_remove($vmlinuz);
+ }
+ if (my $proposed = $proposed_labels{$_->{label}}) {
+ my %to_add = %$_;
+ put_in_hash(\%to_add, $proposed);
+ push @new_entries, \%to_add;
+ }
+ 1;
+ } else {
+ 0;
+ }
+ }
} @{$bootloader->{entries}};
$_->{initrd} && unlink $_->{initrd} foreach @$to_remove;
-# foreach (@$to_keep) {
-# $_->{kernel_or_dev} && bootloader::expand_vmlinuz_symlink($_->{kernel_or_dev}) eq $image or next;
-# }
-
@{$bootloader->{entries}} = @$to_keep;
+ foreach (@new_entries) {
+ bootloader::add_kernel($bootloader, $_, {});
+ }
modify_bootloader();
}
@@ -98,9 +115,9 @@ sub remove_kernel() {
sub add_kernel() {
bootloader::create_link_source();
- my $kernel_str = bootloader::vmlinuz2kernel_str($image);
+ my $kernel_str = bootloader::vmlinuz2kernel_str($image) or die "bad kernel name $image\n";
- my $root_part = fsedit::get_root([ fsedit::get_fstab(@$hds) ]);
+ my $root_part = fs::get::root([ fs::get::fstab($all_hds) ]) or die "can't find root partition\n";
my %opts = (
root => "/dev/$root_part->{device}",
initrd_options => $initrd_options,
@@ -120,8 +137,8 @@ sub add_kernel() {
sub modify_bootloader() {
!$no_entry or return;
- bootloader::action($bootloader, 'write', $hds);
- bootloader::action($bootloader, 'when_config_changed', $hds) if !$no_launch;
+ bootloader::action($bootloader, 'write', $all_hds);
+ bootloader::action($bootloader, 'when_config_changed') if !$no_launch;
}
#-###############################################################################
@@ -156,14 +173,14 @@ sub update_splash() {
foreach (@{$bootloader->{entries}}) {
bootloader::add_boot_splash($_->{initrd}, $_->{vga}) if $_->{initrd};
}
- bootloader::action($bootloader, 'when_config_changed', $hds) if !$no_launch;
+ bootloader::action($bootloader, 'when_config_changed') if !$no_launch;
}
sub remove_splash() {
foreach (@{$bootloader->{entries}}) {
bootloader::remove_boot_splash($_->{initrd}) if $_->{initrd};
}
- bootloader::action($bootloader, 'when_config_changed', $hds) if !$no_launch;
+ bootloader::action($bootloader, 'when_config_changed') if !$no_launch;
}
sub detectloader() {