Steffen Winterfeldt 2012-09-05 14:40:58 +00:00 committed by Git OBS Bridge
parent 38c5010cb7
commit 1092e15dd2
5 changed files with 7 additions and 900 deletions

View File

@ -1,30 +0,0 @@
This file is for first help if you occur some problems during booting.
FAQ
Q: Kernel upgrade break my tuned bootloader settings, I want edit it manually.
A: set LOADER_TYPE="none" in /etc/sysconfig/bootloader. Hint is used /boot/vmlinuz and /boot/initrd symlinks as files which is already point to actual kernel. WARNING after kernel upgrade you must update also configuration manually, otherwise you cannot boot.
Configuration files for bootloader (if you want manually edit it)
/etc/sysconfig/bootloader - contain various settings for bootloader and is used by perl-Bootloader
for grub (x86*) or trustedgrub -
/boot/grub/menu.lst - main configuration for sections
/boot/grub/device.map - mapping of real device to grub device
/etc/grub.conf - batch file for grub if you need update your bootloader location
for lilo ( x86* or ppc) -
/etc/lilo.conf - main configuration file
for elilo ( x86_64 or ia) -
/etc/elilo.conf - main configuration file
efibootmgr - utility for efi labels
/boot/efi/efi/SuSE/elilo.conf - configuration after elilo preprocess, use only if elilo break original configuration, in other case edit directly elilo.conf in /etc
for zipl (s390)-
/etc/zipl.conf - main configuration file

View File

@ -1,353 +0,0 @@
#!/bin/bash
#
# This script represents an interface between the postinstall and postuninstall
# scripts of kernel rpms and the update-bootloader script.
#
# Interface:
# ----------
# /usr/lib/bootloader/bootloader_entry [add|remove] <kernel-flavor> <kernel-release> <image-name> <initrd-name>
#
# Call Semantics:
# ---------------
# [ -x $cmd ] && $cmd <parameters>
#
#
# Author: aosthof@suse.de
#
# Print how to use this script correctly
function usage()
{
echo "Unknown or missing parameter."
echo "Usage: $0 [add|remove] <kernel-flavor> <kernel-release> <image-name> <initrd-name> [force-default]"
echo
echo "The old interface with 4 parameters is still supported, but deprecated."
echo "This interface will be dropped in the near future."
echo "Usage: $0 [add|remove] <kernel-package-name> <image-name> <initrd-name>"
exit 1
}
# Get all command line arguments
function getargs()
{
# old interface with 4 parameters
if [ $# -eq 4 ] ; then
action=${1} # contains the action to be executed, e.g. "add" or "remove"
flavor=${2#*-} # contains the kernel-flavor, e.g. "default" or "xen"
flavor=${flavor%%-*}
release=${2#*-*-} # contains the kernel-release, e.g. "2.6.18-4-default"
release=${release%.*.*}
release="${release}-${flavor}"
image=${3} # contains the full image name, e.g. "vmlinuz-2.6.18-4-default"
initrd=${4} # contains the full initrd name, e.g. "initrd-2.6.18-4-default"
# new interface with 5 or 6 parameters, depends whether option
# "force-default" is used or not
else
action=${1} # contains the action to be executed, e.g. "add" or "remove"
flavor=${2} # contains the kernel-flavor, e.g. "default" or "xen"
release=${3} # contains the kernel-release, e.g. "2.6.18-4-default"
image=${4} # contains the full image name, e.g. "vmlinuz-2.6.18-4-default"
initrd=${5} # contains the full initrd name, e.g. "initrd-2.6.18-4-default"
forcedefault=${6} # contains action which forces corresponding boot entry beeing the
# default boot entry, enabled by given parameter "force-default"
fi
}
# Wrapper for the update-bootloader function
function update_bootloader()
{
echo "bootloader_entry: This is (wrapper) function update_bootloader" >> $logname
[ -x /sbin/update-bootloader ] || return 0
# call update-bootloader and also append stderr to the log file
/sbin/update-bootloader "$@" 1>>$logname 2>&1
}
##############################
# Add a new bootloader entry #
##############################
function add_entry()
{
echo "bootloader_entry: This is function add_entry()" >> $logname
# If running in instsys, write command(s) to be executed in a file
# which will be executed by yast2-bootloader after installation of
# packages is finished.
#
# This is to prevent inconsistencies triggered by libata migration.
if [ "$YAST_IS_RUNNING" == instsys -a "$DELAYED_RUN_UPDATE_BOOTLOADER" != yes ]; then
cat - >> $delayed_exec_file <<-EOF
#!/bin/sh
export DELAYED_RUN_UPDATE_BOOTLOADER=yes
/usr/lib/bootloader/bootloader_entry $@
EOF
chmod 755 $delayed_exec_file
else
# Set up the new kernel
if [ -f $PERL_BOOTLOADER_TESTSUITE_PATH/etc/sysconfig/bootloader ] &&
[ -f $PERL_BOOTLOADER_TESTSUITE_PATH/boot/grub/menu.lst -o \
-f $PERL_BOOTLOADER_TESTSUITE_PATH/etc/lilo.conf -o \
-f $PERL_BOOTLOADER_TESTSUITE_PATH/etc/elilo.conf -o \
-f $PERL_BOOTLOADER_TESTSUITE_PATH/etc/zipl.conf ]; then
default=""
if test ! "$PBL_AUTOTEST"; then
default="--default"
fi
case $flavor in
(kdump|um)
;;
(xen*)
opt_xen_kernel=
if [ -e /proc/xen/xsd_port -o ! -e /proc/xen ]; then
set -- $flavor
set -- ${1#xen}
opt_xen_kernel=--xen-kernel=/boot/xen${1:+-$1}.gz
fi
if [ "$forcedefault" == "force-default" ]; then
# Add the new bootloader entry (xen kernel)
# and force it beeing the default entry
update_bootloader --image /boot/$image \
--initrd /boot/$initrd \
$default \
--force-default \
--add \
--force $opt_xen_kernel \
--name "$release" \
|| exit 1
else
# Add the new bootloader entry (xen kernel)
update_bootloader --image /boot/$image \
--initrd /boot/$initrd \
$default \
--add \
--force $opt_xen_kernel \
--name "$release" \
|| exit 1
fi
# Run the bootloader (e.g., lilo).
update_bootloader --refresh || exit 1
;;
(debug)
if [ "$forcedefault" == "force-default" ]; then
# Add the new bootloader entry (debug kernel)
# and force it beeing the default entry
update_bootloader --image /boot/$image \
--initrd /boot/$initrd \
--force-default \
--add \
--force \
--name "$release" \
|| exit 1
else
# Add the new bootloader entry (debug kernel)
update_bootloader --image /boot/$image \
--initrd /boot/$initrd \
--add \
--force \
--name "$release" \
|| exit 1
fi
# Run the bootloader (e.g., lilo).
update_bootloader --refresh || exit 1
;;
(*)
if [ "$forcedefault" == "force-default" ]; then
# Add the new bootloader entry
# and force it beeing the default entry
update_bootloader --image /boot/$image \
--initrd /boot/$initrd \
--default \
--force-default \
--add \
--force \
--name "$release" \
|| exit 1
else
# Add the new bootloader entry
update_bootloader --image /boot/$image \
--initrd /boot/$initrd \
$default \
--add \
--force \
--name "$release" \
|| exit 1
fi
# Run the bootloader (e.g., lilo).
update_bootloader --refresh || exit 1
;;
esac
elif [ -f $PERL_BOOTLOADER_TESTSUITE_PATH/etc/sysconfig/bootloader ] &&
[ -f $PERL_BOOTLOADER_TESTSUITE_PATH/boot/grub2/grub.cfg -o \
-f $PERL_BOOTLOADER_TESTSUITE_PATH/boot/grub2-efi/grub.cfg ]; then
update_bootloader --refresh || exit 1
fi
fi
}
#######################################
# Remove an existing bootloader entry #
#######################################
function remove_entry()
{
echo "bootloader_entry: This is function remove_entry()" >> $logname
# If running in instsys, write command(s) to be executed in a file
# which will be executed by yast2-bootloader after installation of
# packages is finished.
#
# This is to prevent inconsistencies triggered by libata migration.
if [ "$YAST_IS_RUNNING" == instsys -a "$DELAYED_RUN_UPDATE_BOOTLOADER" != yes ]; then
cat - >> $delayed_exec_file <<-EOF
#!/bin/sh
export DELAYED_RUN_UPDATE_BOOTLOADER=yes
/usr/lib/bootloader/bootloader_entry $@
EOF
chmod 755 $delayed_exec_file
else
if [ -f $PERL_BOOTLOADER_TESTSUITE_PATH/etc/sysconfig/bootloader ] &&
[ -f $PERL_BOOTLOADER_TESTSUITE_PATH/boot/grub/menu.lst -o \
-f $PERL_BOOTLOADER_TESTSUITE_PATH/etc/lilo.conf -o \
-f $PERL_BOOTLOADER_TESTSUITE_PATH/etc/elilo.conf -o \
-f $PERL_BOOTLOADER_TESTSUITE_PATH/etc/zipl.conf ]; then
# Do not specify the name of a bootloader entry when removing it, thus
# removing all sections matching the kernel image and initrd names
# (either both a "linux" and a "failsafe" section, or a section
# installed with the kernel postinstall script).
#
# Rationale: we do not know whether the old entry has
# - the product name as its name (when installed with
# yast-bootloader) or
# - "Kernel-<version>" (when installed with the kernel package's
# postinstall script and perl-Bootloader).
#
# So we cannot use the name to find the correct section.
# This is safe, because on grub, this does still not match other
# sections on other partitions with the same name for the kernel
# image and initrd (because they will still have the (hdx,y) prefix
# in perl-Bootloader). Other bootloaders do not specify other
# sections at all, or do only chainload them (BootLILO.ycp), and
# thus do not match either. (#223030)
if [[ "$flavor" =~ xen ]] && [ -e /proc/xen/xsd_port -o ! -e /proc/xen ]; then
update_bootloader --image /boot/$image \
--initrd /boot/$initrd \
--xen \
--remove \
--force \
|| exit 1
else
update_bootloader --image /boot/$image \
--initrd /boot/$initrd \
--remove \
--force \
|| exit 1
fi
# Run the bootloader (e.g., lilo).
update_bootloader --refresh || exit 1
elif [ -f $PERL_BOOTLOADER_TESTSUITE_PATH/etc/sysconfig/bootloader ] &&
[ -f $PERL_BOOTLOADER_TESTSUITE_PATH/boot/grub2/grub.cfg -o \
-f $PERL_BOOTLOADER_TESTSUITE_PATH/boot/grub2-efi/grub.cfg ]; then
update_bootloader --refresh || exit 1
fi
fi
}
##################### M A I N ###############################################
# Log how program was called
logname=$PERL_BOOTLOADER_TESTSUITE_PATH"/var/log/YaST2/perl-BL-standalone-log"
echo "bootloader_entry was called as: $*" >> $logname
# Log parts of the current system configuration
(
echo "/proc/mounts:"
cat /proc/mounts
echo
echo "/sys:"
ls -l /sys
echo
fstab="/etc/fstab"
if [ -e $fstab ] ; then
echo "fstab:"
cat $fstab
echo
fi
echo "excerpts of /dev:"
#if doesn't find anything you can be on strange architecture (like ps3) and dump all block devices
ls -l /dev/{[hs]d[ab]?,md[0-3],.udev,disk/by-*} 2>/dev/null || ls -l /dev | grep ^b
echo
device_map="/boot/grub/device.map"
if [ -e $device_map ] ; then
echo "device.map:"
cat $device_map
echo
fi
) >> $logname
if test ! "$PBL_SKIP_BOOT_TEST"; then
if test `grep -c "^[^#[:space:]]\+[[:space:]]\+/boot[[:space:]]" /etc/fstab` -ne \
`grep -c "^[^[:space:]]\+[[:space:]]\+/boot[[:space:]]" /proc/mounts`; then
echo "/boot directory is not mounted. If this is bad detection you can avoid it by 'export PBL_SKIP_BOOT_TEST=1'";
exit 1;
fi
fi
# File containing commands for later execution
delayed_exec_file="/boot/perl-BL_delayed_exec"
# Checks if correct amount of arguments is given
if [ "$#" -lt "4" -o "$#" -gt "6" ] ; then
usage
fi
# Get all given arguments
getargs $@
# Find out which action should be executed
case $action in
add)
# Add a new bootloader entry
add_entry "$@"
;;
remove)
# Remove an existing bootloader entry
remove_entry "$@"
;;
*)
# Unknown argument
usage
;;
esac

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a080a1c65ca6d95071d22d4b101b24122fe90699fa9256dbc22322dbb9512537
size 155367
oid sha256:c61a5ae2b8cd09c2574694cc241e530173e31cdfb43d8e7b9a4a74fa04ba0988
size 178244

View File

@ -26,9 +26,6 @@ Summary: Library for Configuring Boot Loaders
License: GPL-2.0+
Group: System/Boot
Source: perl-Bootloader-%{version}.tar.bz2
Source1: update-bootloader
Source2: bootloader_entry
Source3: boot.readme
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: perl
Conflicts: multipath-tools < 0.4.8-40.25.1
@ -82,6 +79,10 @@ sed -i '/ZIPL/D;/PowerLILO/D;/\/LILO/D;/GRUB/D;' $RPM_BUILD_ROOT/%{perl_vendorar
%endif
%endif
%post
umask 066
echo -n >/var/log/pbl.log
%files
%defattr(-, root, root)
%doc COPYING
@ -95,5 +96,6 @@ sed -i '/ZIPL/D;/PowerLILO/D;/\/LILO/D;/GRUB/D;' $RPM_BUILD_ROOT/%{perl_vendorar
/usr/lib/bootloader
/boot/boot.readme
%dir %attr(0700,root,root) /var/log/YaST2
%ghost %attr(0600,root,root) /var/log/pbl.log
%changelog

View File

@ -1,512 +0,0 @@
#! /usr/bin/perl
use strict;
use POSIX;
use Getopt::Long;
use Bootloader::Tools;
use Bootloader::MBRTools;
# keep Pod::Usage optional (bnc #760464)
eval "use Pod::Usage";
if(!exists $::{pod2usage}) {
sub pod2usage {
die "usage: update-bootloader [operation] [options]\n";
}
}
my %oper;
my ($opt_default, $opt_force, $opt_force_default, $opt_help, $opt_man, $opt_previous, $opt_xen)
= (0,0,0,0,0,0,0);
my ($opt_image, $opt_initrd, $opt_name, $opt_xen_name, $opt_failsafe, $opt_xen_kernel)
= ('','','','','',undef);
my $add_product = 0;
=head1 NAME
update-bootloader - update/change bootloader configuration using
Bootloader::Tools perl module
=head1 SYNOPSIS
update-bootloader [operation] [options]
operation is one of --add, --remove or --refresh.
valid options are --help, --man, --image <file>, --initrd <file>,
--xen-kernel <file>, --xen, --default, --previous, --name <string>, --force,
--force-default.
=head1 DESCRIPTION
B<update-bootloader> will let you modify your bootloader configuration using
Bootloader::Tools perl module.
=head1 OPERATIONS
=over 8
=item B<--add>
add an new image section.
Needs a call to --refresh to take effect.
=item B<--remove>
remove the specified image section.
Needs a call to --refresh to take effect.
=item B<--refresh>
activate the new config e.g. write boot loader to disk
=back
=head1 PARAMETER
=over 8
=item B<--help>
Print a brief help message and exits.
=item B<--man>
Prints the manual page and exits.
=item B<--image> F<file>
specify path to kernel image
=item B<--initrd> F<file>
specify path to initrd file
=item B<--xen>
specify that you what to add a xen and not a regular image section
=item B<--xen-kernel> F<file>
specify that you what to add a xen section with a specific image.
Implies --xen option.
=item B<--default>
let the new section to be added be the default section if appropriate. Only
allowed together with --add operation
=item B<--previous>
set some usuable defaults for image, initrd and name when
=item B<--name> F<string>
specify the name of the section to be added/removed
=item B<--force>
dont complain, just do the right thing
=item B<--force-default>
force the new section to be added to be the default section. Only
allowed together with --add operation
=back
=cut
# Get product name and version
# If zypper is not available or versions is empty, use /etc/SuSE-release instead
# linux is last possible fallback
sub GetProduct {
my $namever;
my $loader = Bootloader::Tools::GetBootloader();
# first try: use zypper
if ( -f '/usr/bin/zypper' ){
my $zypper_out = qx{zypper --terse tos -l};
if ($zypper_out =~ m/^labelLong\s*(\S.*\S)\s*\nlabelShort\s*(\S.*\S)[\s\n]*$/){
return $1 if ($1 ne "" && ($loader eq "grub" || $loader eq "grub2" || $loader eq "grub2-efi"));
return $2 if ($2 ne "");
}
}
# Second try: Is there a usable /etc/SuSE-release?
# This should really not be used anymore, as the syntax changed
# no 'SP1' in the output.
if (open(RELEASE, "</etc/SuSE-release") && ($loader eq "grub" || $loader eq "grub2" || $loader eq "grub2-efi")) {
# first line is sufficient
$namever = <RELEASE>;
# delete everything starting with the first parenthesis
$namever =~ s/\s*\(.*//;
close(RELEASE);
chomp $namever;
return "$namever";
}
# the last line of defense ...
return "Linux";
}
sub test_gettext {
my $filename = "Locale/gettext.pm";
my $realfilename;
foreach my $prefix (@INC) {
$realfilename = "$prefix/$filename";
if (-f $realfilename) {
return 1;
}
}
return undef
}
my $cmdline = join " ", ($0, @ARGV);
GetOptions (\%oper,
'add|a' ,
'refresh' ,
'remove|r' ,
'examinembr|e=s',
'default|d' => \$opt_default,
'force-default' => \$opt_force_default,
'help|h' => \$opt_help,
'force' => \$opt_force,
'image=s' => \$opt_image,
'initrd=s' => \$opt_initrd,
'man|m' => \$opt_man,
'xen' => \$opt_xen,
'xen-kernel=s' => \$opt_xen_kernel,
'name=s' => \$opt_name,
'previous|p' => \$opt_previous)
or pod2usage(2);
pod2usage(1) if $opt_help;
pod2usage(-exitstatus => 0, -verbose => 2) if $opt_man;
die("Specify exactly one operation, either 'add', 'remove' or 'refresh'\n")
unless scalar keys(%oper) == 1;
die("Option 'default' is only allowed for operation 'add'\n")
if ($opt_default and not defined $oper{add});
die("Option 'force-default' is only allowed for operation 'add'\n")
if ($opt_force_default and not defined $oper{add});
my $logger = Bootloader::Library->new();
$logger->milestone($cmdline);
if (defined $oper{"examinembr"}) {
my $ret = $logger->examineMBR($oper{"examinembr"});
if (defined $ret){
print "$ret\n";
exit 0;
} else {
exit 1;
}
}
if (Bootloader::Tools::GetBootloader() eq "none")
{
$logger->milestone("none bootloader, skipped updating");
exit 0;
}
if (Bootloader::Tools::GetBootloader() =~ /^(grub2|grub2-efi)$/)
{
$logger->milestone("grub2 bootloader, no add/remove section support");
delete $oper{add};
delete $oper{remove};
}
if ($opt_image and $opt_image !~ m;^/;) {
$opt_image = getcwd . '/' . $opt_image
}
if ($opt_initrd and $opt_initrd !~ m;^/;) {
$opt_initrd = getcwd . '/' . $opt_initrd;
}
if (defined $opt_xen_kernel) {
$opt_xen = 1;
} elsif ($opt_xen) {
my $xen_flavor = $opt_image;
$xen_flavor =~ s/.*-(\w+)/$1/;
if ($xen_flavor eq "xenpae") {
$opt_xen_kernel = "/boot/xen-pae.gz";
}
else {
$opt_xen_kernel = "/boot/xen.gz";
}
}
my $type = $opt_xen ? "xen" : "image";
InitLibrary();
if ($opt_previous) {
unless ($opt_image) {
$opt_image = GetDefaultImage() . ".previous";
}
unless($opt_initrd) {
$opt_initrd = GetDefaultInitrd() . ".previous";
}
}
# FIXME: these section names should be unified somehow together with multi
# language and grafical menu handling
if (defined $oper{add}) {
my $loader = Bootloader::Tools::GetBootloader();
unless ($opt_name) {
if ($opt_xen and $opt_previous) {
if ($loader eq "grub" || $loader eq "lilo" || $loader eq "grub2") {
$opt_name = "Previous Xen";
$add_product = 1;
}
else {
$opt_name = "previous xen";
}
}
elsif ($opt_xen) {
if ($loader eq "grub" || $loader eq "lilo" || $loader eq "grub2") {
$opt_name = "Xen";
$add_product = 1;
}
else {
$opt_name = "xen";
}
}
elsif ($opt_previous) {
if ($loader eq "grub" || $loader eq "lilo" || $loader eq "grub2") {
$opt_name = "Previous Kernel";
$add_product = 1;
}
else {
$opt_name = "previous";
}
}
else {
$opt_name = $opt_image;
$opt_name =~ s/.*\///;
}
}
# only localize on grub and lilo
#FIXME jreidinger: I think this now doesn't work. because pbl get only version + type of kernel....maybe help translate strings like failsafe etc
if (($loader eq "grub" || $loader eq "lilo") && defined(test_gettext())) {
require Locale::gettext;
setlocale(LC_MESSAGES, Bootloader::Tools::GetSystemLanguage());
my $d = Locale::gettext->domain("bootloader");
$d->dir("/usr/share/YaST2/locale");
my $opt_trans = $d->get($opt_name);
chomp ($opt_trans);
#log what is translated
$logger->milestone("translate: " . $0 . " " . join (" ", @ARGV));
# check whether translation only contains [a-zA-Z0-9 _]
# otherwise fall back to untranslated string
if ($opt_trans =~ /^[a-zA-Z\d _]+$/g ) {
$opt_name = $opt_trans;
}
}
# Naming scheme for default, smp, bigsmp and pae kernels
if (($opt_name =~ /-default/) ||
($opt_name =~ /-smp/) ||
($opt_name =~ /-bigsmp/) ||
($opt_name =~ /-pae/)) {
if ($loader eq "grub" || $loader eq "grub2") {
$opt_name =~ s/-[^-]*$//;
$opt_failsafe = "Failsafe -- " . GetProduct() . " - " . $opt_name;
$opt_name = GetProduct() . " - " . $opt_name;
}
else {
$opt_failsafe = "Failsafe";
$opt_name = GetProduct();
}
}
# Naming scheme for all xen kernels, thus xen and xenpae
elsif ($opt_xen) {
if ($loader eq "grub" || $loader eq "grub2") {
my $version = $opt_name;
$version =~ s/-xen.*$//;
$opt_name =~ s/^.*(xen.*)$/$1/;
$opt_name = ucfirst ($opt_name);
$opt_xen_name = "$opt_name -- " . GetProduct() . " - " . $version;
}
else {
$opt_xen_name =~ s/^.*(xen.*)$/$1/;
$opt_xen_name = ucfirst ($opt_xen_name);
}
}
# Naming scheme for all other kernels
else {
my $flavor = $opt_name;
$flavor =~ s/.*-(\w+)/$1/;
$flavor = ucfirst ($flavor);
# Create long labels for grub
if ($loader eq "grub" || $loader eq "grub2") {
my $version = $opt_name;
$version =~ s/-[^-]*$//;
$opt_name = $flavor . " -- " . GetProduct() . " - " . $version;
$opt_failsafe = "Failsafe -- " . GetProduct() . " - " . $version;
}
# Create short labels for all other loaders
else {
$opt_name = GetProduct();
$opt_failsafe = "Failsafe";
}
}
}
#
# execute selected operation
#
if (defined $oper{add}) {
$logger->milestone("update-bootloader: now executing operation add");
$logger->milestone("update-bootloader: changed opt name is $opt_name");
die("Please specify name and kernel image for new section\n")
unless $opt_name and $opt_image;
my @params = (
type => $type,
image => $opt_image,
);
if (CountSections(@params) != 0) {
if (not $opt_force) {
die("There are already sections with image '$opt_image'\n");
}
$logger->milestone("update-bootloader: section already exist. Skip add.");
} else {
# If, if option $opt_force_default is set, let this new kernel be
# the default one.
if ($opt_force_default) {
push @params, default => $opt_default;
}
# Else, find out the flavor of the default kernel. If it is the same
# flavor as the one of the new kernel, let the new kernel be the
# default one.
else {
my $default_image = GetDefaultImage();
if (-l $default_image) {
$default_image = readlink ($default_image);
}
$default_image =~ s/^.*-//;
if ($opt_image =~ m/.*-${default_image}$/) {
push @params, default => $opt_default;
}
}
push @params, xen => $opt_xen_kernel if $type eq "xen";
push @params, initrd => $opt_initrd if $opt_initrd;
# Add "xen" section
if ($opt_xen) {
# Add original_name to params to be able to create comment line
push @params, original_name => "xen";
$logger->milestone("update-bootloader: calling Tools::AddSection (XEN)");
AddSection($opt_xen_name, @params);
}
# Add "normal" section
else {
# Add original_name to params to be able to create comment line
push @params, original_name => "linux";
$logger->milestone("update-bootloader: calling Tools::AddSection (normal)");
AddSection($opt_name, @params);
}
my $arch = `uname --hardware-platform`;
chomp ($arch);
# Add a "Failsafe" section, but only if the underlying architecture is
# one of i386, x86_84 or ia64 and the kernel flavor is either default,
# smp, bigsmp or pae and not a xen kernel.
if ((($arch eq "i386") ||
($arch eq "x86_64") ||
($arch eq "s390x") ||
($arch eq "ia64")) &&
(($opt_image =~ /-default/) ||
($opt_image =~ /-smp/) ||
($opt_image =~ /-desktop/) ||
($opt_image =~ /-bigsmp/) ||
($opt_image =~ /-pae/)) &&
($opt_xen != 1)) {
# Add original_name to params to be able to create comment line
push @params, original_name => "failsafe";
$logger->milestone("update-bootloader: calling Tools::AddSection (failsafe)");
AddSection($opt_failsafe, @params);
}
}
}
if (defined $oper{remove}) {
my @params = (
type => $type,
image => $opt_image,
);
push @params, xen => $opt_xen_kernel if $type eq "xen";
push @params, initrd => $opt_initrd if $opt_initrd;
push @params, name => $opt_name if $opt_name;
$logger->milestone("update-bootloader: now executing operation remove");
my $num = CountSections(@params);
if ($num > 0) {
if ($num > 1 and not $opt_force) {
$logger->milestone("update-bootloader: found $num sections, no opt_force: not removing");
die("There is more than one section with image '$opt_image'\n");
} else {
$logger->milestone("update-bootloader: calling Tools::RemoveSections");
RemoveSections(@params);
}
} else {
$logger->milestone("update-bootloader: no $opt_image found");
}
$logger->milestone("update-bootloader: finished operation remove");
}
if (defined $oper{refresh}) {
# Always set $avoid_init=0 to guarentee bootloader installed (bnc#759224)
my $ret = UpdateBootloader(0);
exit 1 if ( !$ret );
}
#
# Local variables:
# mode: perl
# mode: font-lock
# mode: auto-fill
# fill-column: 78
# End:
#