summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xperl-install/standalone/bootloader-config67
1 files changed, 54 insertions, 13 deletions
diff --git a/perl-install/standalone/bootloader-config b/perl-install/standalone/bootloader-config
index 75b615edd..2f1aed444 100755
--- a/perl-install/standalone/bootloader-config
+++ b/perl-install/standalone/bootloader-config
@@ -10,33 +10,46 @@ $::isStandalone = 1; #- not using standalone which messes with @ARGV and usage
my %options = (
'action=s' => \ (my $action),
+
+ 'label=s' => \ (my $label),
+
+ 'chainload=s' => \ (my $chainload),
+
+ 'image=s' => \ (my $image),
'kernel-version=s' => \ (my $kernel_version),
- 'vmlinuz=s' => \ (my $vmlinuz),
'initrd-options=s' => \ (my $initrd_options),
-
'no-short-name' => \ (my $no_short_name),
'no-entry' => \ (my $no_entry),
'no-launch' => \ (my $no_launch),
- 'no-initrd' => \ (my $no_initrd),
+ 'no-initrd' => \ (my $no_initrd),
);
-GetOptions(%options) or die "usage: Releve " . join(' ', map { "[--$_]" } keys %options) . "\n";
+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>)
+
+ Releve --action add-entry (--image <image> | --chainload <device>) --label <...>
+ Releve --action remove-entry (--image <image> | --chainload <device> | --label <...>)
-my @known_actions = qw(add-kernel remove-kernel update-splash remove-splash detectloader);
+ Releve --action update-splash
+ Releve --action remove-splash
+EOF
+
+my @known_actions = qw(add-kernel remove-kernel update-splash remove-splash detectloader add-entry remove-entry);
$action && member($action, @known_actions) or die "<action> must be one of " . join(' ', @known_actions) . "\n";
-if ($vmlinuz) {
- if (my $ver = bootloader::vmlinuz2version($vmlinuz)) {
+if ($image) {
+ if (my $ver = bootloader::vmlinuz2version($image)) {
if ($kernel_version) {
- $kernel_version eq $ver or die "$kernel_version and $ver don't match (hint: don't pass both --vmlinuz and --kernel-version)\n";
+ $kernel_version eq $ver or die "$kernel_version and $ver don't match (hint: don't pass both --image and --kernel-version)\n";
} else {
$kernel_version = $ver;
}
}
- $vmlinuz = "/boot/$vmlinuz" if $vmlinuz !~ m!^/!;
+ $image = "/boot/$image" if $image !~ m!^/!;
} elsif ($kernel_version) {
- $vmlinuz = "/boot/vmlinuz-$kernel_version";
+ $image = "/boot/vmlinuz-$kernel_version";
}
@@ -65,13 +78,13 @@ sub remove_kernel() {
my ($to_remove, $to_keep) = partition {
- $_->{kernel_or_dev} && $_->{kernel_or_dev} eq $vmlinuz;
+ $_->{kernel_or_dev} && $_->{kernel_or_dev} eq $image;
} @{$bootloader->{entries}};
$_->{initrd} && unlink $_->{initrd} foreach @$to_remove;
# foreach (@$to_keep) {
-# $_->{kernel_or_dev} && bootloader::expand_vmlinuz_symlink($_->{kernel_or_dev}) eq $vmlinuz or next;
+# $_->{kernel_or_dev} && bootloader::expand_vmlinuz_symlink($_->{kernel_or_dev}) eq $image or next;
# }
@{$bootloader->{entries}} = @$to_keep;
@@ -85,7 +98,7 @@ sub remove_kernel() {
sub add_kernel() {
bootloader::create_link_source();
- my $kernel_str = bootloader::vmlinuz2kernel_str($vmlinuz);
+ my $kernel_str = bootloader::vmlinuz2kernel_str($image);
$kernel_str->{use_long_name} = $no_short_name;
my $root_part = fsedit::get_root([ fsedit::get_fstab(@$hds) ]);
@@ -93,6 +106,7 @@ sub add_kernel() {
{
root => "/dev/$root_part->{device}",
initrd_options => $initrd_options,
+ if_($label, label => $label),
if_($bootloader->{default_vga}, vga => $bootloader->{default_vga}),
}, $no_short_name, $no_initrd);
@@ -107,6 +121,33 @@ sub modify_bootloader() {
}
#-###############################################################################
+sub add_entry() {
+ $label or die "you must give a label\n";
+ ($image xor $chainload) or die "you must give an image or a chainload\n";
+
+ my $entry = {
+ type => $image ? 'image' : 'other',
+ label => $label,
+ kernel_or_dev => $image || $other,
+ };
+ bootloader::add_entry($bootloader, $entry);
+ modify_bootloader();
+}
+
+sub remove_entry() {
+ listlength(grep { $_ } $label, $image, $chainload) == 1 or die "you must give one of --label, --image and --chainload\n";
+
+ my $e = $label ? bootloader::get_label($label, $bootloader) :
+ find { $_->{kernel_or_dev} && $_->{kernel_or_dev} eq ($image || $chainload) } @{$bootloader->{entries}};
+
+ if ($e) {
+ @{$bootloader->{entries}} = grep { $_ != $e } @{$bootloader->{entries}};
+ }
+
+ modify_bootloader();
+}
+
+#-###############################################################################
sub update_splash() {
foreach (@{$bootloader->{entries}}) {
bootloader::make_boot_splash($_->{initrd}, $_->{vga}) if $_->{initrd};