forked from pool/grub2
Accepting request 132054 from devel:openSUSE:Factory
Please help to review the patches. Thanks. (forwarded request 132041 from michael-chang) OBS-URL: https://build.opensuse.org/request/show/132054 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/grub2?expand=0&rev=43
This commit is contained in:
parent
0edc850993
commit
e89fa67c56
6
PATCH_POLICY
Normal file
6
PATCH_POLICY
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
Make sure the patches you add contain tags similar to patches in the kernel
|
||||||
|
RPM. This means, it should contain From, Subject, Patch-mainline tags and also
|
||||||
|
a description of the problem, i.e. what the patch is for.
|
||||||
|
|
||||||
|
Also, if it is not a SUSE/openSUSE-specific patch (unlikely is), post the patch to
|
||||||
|
upstream too.
|
46
grub2-fix-Grub2-with-SUSE-Xen-package-install.patch
Normal file
46
grub2-fix-Grub2-with-SUSE-Xen-package-install.patch
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
From 86fdefd6b0d447cd7d3d80f794fcd4df2aa96792 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michael Chang <mchang@suse.com>
|
||||||
|
Date: Thu, 30 Aug 2012 15:27:50 +0800
|
||||||
|
Subject: [PATCH] fix Grub2 with SUSE Xen package install
|
||||||
|
|
||||||
|
References: bnc#774666
|
||||||
|
Patch-Mainline: no
|
||||||
|
|
||||||
|
This fixes Grub2 does not offer a Xen entry after installing hypervisor
|
||||||
|
and tools, which is caused by install sequence of xen-kernel and xen is
|
||||||
|
unpredictable.
|
||||||
|
|
||||||
|
By judging the system is dom0 with xen kernel installed, the xen_list
|
||||||
|
will be set to /boot/xen.gz if it's empty. Because the xen kernel would
|
||||||
|
trigger the config updated prior to the xen package installation.
|
||||||
|
---
|
||||||
|
util/grub.d/20_linux_xen.in | 13 +++++++++++++
|
||||||
|
1 files changed, 13 insertions(+), 0 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/util/grub.d/20_linux_xen.in b/util/grub.d/20_linux_xen.in
|
||||||
|
index fd103f1..6a7c1e6 100644
|
||||||
|
--- a/util/grub.d/20_linux_xen.in
|
||||||
|
+++ b/util/grub.d/20_linux_xen.in
|
||||||
|
@@ -171,6 +171,19 @@ file_is_not_sym () {
|
||||||
|
xen_list=`for i in /boot/xen*.gz; do
|
||||||
|
if grub_file_is_not_garbage "$i" && test ! -L "$i" ; then echo -n "$i " ; fi
|
||||||
|
done`
|
||||||
|
+
|
||||||
|
+# bnc#774666 - Grub2 does not offer a Xen entry after installing hypervisor and tools
|
||||||
|
+# This is a workaround to the install sequence of xen-kernel and xen is unpredictable
|
||||||
|
+if [ "x${xen_list}" = "x" ] &&
|
||||||
|
+# If the code reaches here, it means that xen-kernel has been installed, but xen hypervisor
|
||||||
|
+# is missing. This is not likely a sane condition for dom0. We assume this is xen-kernel
|
||||||
|
+# triggers config update prior to the xen package.
|
||||||
|
+# Test the system is dom0, if it is, we set the xen_list to /boot/xen.gz which should become
|
||||||
|
+# available after xen package installed.
|
||||||
|
+ [ -e /proc/xen/xsd_port -o ! -e /proc/xen ]; then
|
||||||
|
+ xen_list="/boot/xen.gz"
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
prepare_boot_cache=
|
||||||
|
boot_device_id=
|
||||||
|
|
||||||
|
--
|
||||||
|
1.7.3.4
|
||||||
|
|
112
grub2-once
Normal file
112
grub2-once
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
my $grub2_dir;
|
||||||
|
my $grub2_reboot;
|
||||||
|
my $show_mapped;
|
||||||
|
my $id_name;
|
||||||
|
my @menuentry;
|
||||||
|
|
||||||
|
sub parse_menuentry {
|
||||||
|
|
||||||
|
my ($parent, $menu) = @_;
|
||||||
|
my @m = $menu =~ /(submenu|menuentry) \s+ '([^']*)' .*? ( \{ (?: [^{}]* | (?3))* \} )/sxg;
|
||||||
|
|
||||||
|
for (my $i = 0; $i <= $#m; $i += 3) {
|
||||||
|
|
||||||
|
my $type = $m[$i];
|
||||||
|
my $title = $m[$i+1];
|
||||||
|
my $data = $m[$i+2];
|
||||||
|
my $name = ($parent) ? "$parent>$title" : "$title";
|
||||||
|
|
||||||
|
if ($type eq "menuentry") {
|
||||||
|
push @menuentry, $name;
|
||||||
|
} elsif ($type eq "submenu") {
|
||||||
|
&parse_menuentry ($name, $data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$id_name = "";
|
||||||
|
if (@ARGV == 2 && ($ARGV[0] eq "--show-mapped")) {
|
||||||
|
$show_mapped = 1;
|
||||||
|
$id_name = $ARGV[1];
|
||||||
|
} elsif (@ARGV == 1) {
|
||||||
|
$show_mapped = 0;
|
||||||
|
$id_name = $ARGV[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
die "wrong command line options" if ($id_name eq "");
|
||||||
|
|
||||||
|
open(SYSCONF, "</etc/sysconfig/bootloader") || die "no bootloader sysconfig";
|
||||||
|
|
||||||
|
$grub2_dir = "";
|
||||||
|
while (<SYSCONF>) {
|
||||||
|
if (/LOADER_TYPE="(.*)"/) {
|
||||||
|
my $bl = $1;
|
||||||
|
if ($bl eq "grub2") {
|
||||||
|
$grub2_dir = "/boot/grub2";
|
||||||
|
$grub2_reboot = "/usr/sbin/grub2-reboot";
|
||||||
|
} elsif ($bl eq "grub2-efi") {
|
||||||
|
$grub2_dir = "/boot/grub2-efi";
|
||||||
|
$grub2_reboot = "/usr/sbin/grub2-efi-reboot";
|
||||||
|
}
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
close (SYSCONF);
|
||||||
|
|
||||||
|
die "no grub2_dir" if ($grub2_dir eq "");
|
||||||
|
|
||||||
|
open(MENU, "<$grub2_dir/grub.cfg") || die "no grub.cfg in $grub2_dir";
|
||||||
|
undef $/;
|
||||||
|
|
||||||
|
while (<MENU>) {
|
||||||
|
&parse_menuentry ("", $_);
|
||||||
|
}
|
||||||
|
|
||||||
|
close (MENU);
|
||||||
|
|
||||||
|
my $ret = "";
|
||||||
|
my $name = "";
|
||||||
|
my $id = -1;
|
||||||
|
|
||||||
|
if ($id_name =~ m!^[0-9]+$!) {
|
||||||
|
|
||||||
|
if ($id_name < @menuentry) {
|
||||||
|
$id = $id_name;
|
||||||
|
$name = $menuentry[$id];
|
||||||
|
$ret = $name;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
my $i = -1;
|
||||||
|
my $c = 0;
|
||||||
|
|
||||||
|
$name = $id_name;
|
||||||
|
|
||||||
|
foreach my $e (@menuentry) {
|
||||||
|
if ($e =~ qr!\Q$name\E!) {
|
||||||
|
$i = $c;
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
} continue {
|
||||||
|
++$c;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($i >= 0) {
|
||||||
|
$id = $i;
|
||||||
|
$name = $menuentry[$id];
|
||||||
|
$ret = "$id";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($show_mapped > 0) {
|
||||||
|
print $ret;
|
||||||
|
} else {
|
||||||
|
system "$grub2_reboot \"$name\"";
|
||||||
|
}
|
||||||
|
|
73
grub2-pass-corret-root-for-nfsroot.patch
Normal file
73
grub2-pass-corret-root-for-nfsroot.patch
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
From 340fd0c8717c2bf33163a18bfec72243b0e51862 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michael Chang <mchang@suse.com>
|
||||||
|
Date: Thu, 30 Aug 2012 15:43:17 +0800
|
||||||
|
Subject: [PATCH] Pass corret root= for nfsroot
|
||||||
|
|
||||||
|
References: bnc#774548
|
||||||
|
Patch-Mainline: no
|
||||||
|
|
||||||
|
Fix / is mounted on nfs. The fix is to pass kernel parameters
|
||||||
|
with correct root= for nfs. However since grub2 doesn't support
|
||||||
|
nfs file system module, the /boot on nfs is not possible and
|
||||||
|
grub2-probe not work in probing nfs mounted path. The fix is merely
|
||||||
|
on the script level and not use grub2-probe for above reasons.
|
||||||
|
---
|
||||||
|
util/grub-mkconfig.in | 37 ++++++++++++++++++++++++++++++-------
|
||||||
|
1 files changed, 30 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in
|
||||||
|
index ca62e9f..d789fcc 100644
|
||||||
|
--- a/util/grub-mkconfig.in
|
||||||
|
+++ b/util/grub-mkconfig.in
|
||||||
|
@@ -128,18 +128,41 @@ else
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
-# Device containing our userland. Typically used for root= parameter.
|
||||||
|
-GRUB_DEVICE="`${grub_probe} --target=device /`"
|
||||||
|
-GRUB_DEVICE_UUID="`${grub_probe} --device ${GRUB_DEVICE} --target=fs_uuid 2> /dev/null`" || true
|
||||||
|
+probe_nfsroot_device () {
|
||||||
|
+ while read line ; do
|
||||||
|
+ set -- $line
|
||||||
|
+ path=$5
|
||||||
|
+ fstype=$8
|
||||||
|
+ device=$9
|
||||||
|
+
|
||||||
|
+ if [ "x${path}" = "x/" ] &&
|
||||||
|
+ [ "x${fstype}" = "xnfs" -o "x${fstype}" = "xnfs4" ] ; then
|
||||||
|
+ echo "$device"
|
||||||
|
+ return
|
||||||
|
+ fi
|
||||||
|
+ done
|
||||||
|
+} </proc/self/mountinfo
|
||||||
|
+
|
||||||
|
+NFSROOT_DEVICE="`probe_nfsroot_device`"
|
||||||
|
+
|
||||||
|
+if [ "x${NFSROOT_DEVICE}" != "x" ]; then
|
||||||
|
+ GRUB_DEVICE="$NFSROOT_DEVICE"
|
||||||
|
+ GRUB_DEVICE_UUID=""
|
||||||
|
+ GRUB_FS="unknown"
|
||||||
|
+else
|
||||||
|
+ # Device containing our userland. Typically used for root= parameter.
|
||||||
|
+ GRUB_DEVICE="`${grub_probe} --target=device /`"
|
||||||
|
+ GRUB_DEVICE_UUID="`${grub_probe} --device ${GRUB_DEVICE} --target=fs_uuid 2> /dev/null`" || true
|
||||||
|
+
|
||||||
|
+ # Filesystem for the device containing our userland. Used for stuff like
|
||||||
|
+ # choosing Hurd filesystem module.
|
||||||
|
+ GRUB_FS="`${grub_probe} --device ${GRUB_DEVICE} --target=fs 2> /dev/null || echo unknown`"
|
||||||
|
+fi
|
||||||
|
|
||||||
|
# Device containing our /boot partition. Usually the same as GRUB_DEVICE.
|
||||||
|
GRUB_DEVICE_BOOT="`${grub_probe} --target=device /boot`"
|
||||||
|
GRUB_DEVICE_BOOT_UUID="`${grub_probe} --device ${GRUB_DEVICE_BOOT} --target=fs_uuid 2> /dev/null`" || true
|
||||||
|
|
||||||
|
-# Filesystem for the device containing our userland. Used for stuff like
|
||||||
|
-# choosing Hurd filesystem module.
|
||||||
|
-GRUB_FS="`${grub_probe} --device ${GRUB_DEVICE} --target=fs 2> /dev/null || echo unknown`"
|
||||||
|
-
|
||||||
|
if test -f ${sysconfdir}/default/grub ; then
|
||||||
|
. ${sysconfdir}/default/grub
|
||||||
|
fi
|
||||||
|
--
|
||||||
|
1.7.3.4
|
||||||
|
|
@ -1,3 +1,27 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Aug 30 08:00:54 UTC 2012 - mchang@suse.com
|
||||||
|
|
||||||
|
- add grub2-fix-Grub2-with-SUSE-Xen-package-install.patch (bnc#774666)
|
||||||
|
- add grub2-pass-corret-root-for-nfsroot.patch (bnc#774548)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Aug 20 06:27:23 UTC 2012 - mchang@suse.com
|
||||||
|
|
||||||
|
- disable grub2-enable-theme-for-terminal-window.patch to use
|
||||||
|
default black background due to current background has poor
|
||||||
|
contrast to the font color (bnc#776244).
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Aug 10 19:31:40 UTC 2012 - jslaby@suse.de
|
||||||
|
|
||||||
|
- rename grub2once to grub2-once
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Aug 1 08:01:41 UTC 2012 - mchang@suse.com
|
||||||
|
|
||||||
|
- add grub2once (bnc#771587)
|
||||||
|
- add not-display-menu-when-boot-once.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Sat Jul 28 14:17:56 UTC 2012 - aj@suse.de
|
Sat Jul 28 14:17:56 UTC 2012 - aj@suse.de
|
||||||
|
|
||||||
|
16
grub2.spec
16
grub2.spec
@ -77,6 +77,8 @@ Source3: README.openSUSE
|
|||||||
Source4: grub2.rpmlintrc
|
Source4: grub2.rpmlintrc
|
||||||
# rsync -Lrtvz translationproject.org::tp/latest/grub/ po
|
# rsync -Lrtvz translationproject.org::tp/latest/grub/ po
|
||||||
Source5: translations-20120622.tar.xz
|
Source5: translations-20120622.tar.xz
|
||||||
|
Source6: grub2-once
|
||||||
|
Source1000: PATCH_POLICY
|
||||||
Patch0: grub2-correct-font-path.patch
|
Patch0: grub2-correct-font-path.patch
|
||||||
Patch1: rename-grub-info-file-to-grub2.patch
|
Patch1: rename-grub-info-file-to-grub2.patch
|
||||||
Patch2: grub2-linux.patch
|
Patch2: grub2-linux.patch
|
||||||
@ -90,6 +92,9 @@ Patch11: grub2-fix-mo-not-copied-to-grubdir-locale.patch
|
|||||||
Patch12: grub2-fix-menu-in-xen-host-server.patch
|
Patch12: grub2-fix-menu-in-xen-host-server.patch
|
||||||
Patch13: grub2-enable-theme-for-terminal-window.patch
|
Patch13: grub2-enable-theme-for-terminal-window.patch
|
||||||
Patch14: grub2-stdio.in.patch
|
Patch14: grub2-stdio.in.patch
|
||||||
|
Patch15: not-display-menu-when-boot-once.patch
|
||||||
|
Patch16: grub2-fix-Grub2-with-SUSE-Xen-package-install.patch
|
||||||
|
Patch17: grub2-pass-corret-root-for-nfsroot.patch
|
||||||
Patch99: use-grub2-efi-as-a-package-name.patch
|
Patch99: use-grub2-efi-as-a-package-name.patch
|
||||||
PreReq: perl-Bootloader
|
PreReq: perl-Bootloader
|
||||||
Requires: gettext-runtime
|
Requires: gettext-runtime
|
||||||
@ -149,8 +154,15 @@ cd grub-%{version}
|
|||||||
%patch10 -p1
|
%patch10 -p1
|
||||||
%patch11 -p1
|
%patch11 -p1
|
||||||
%patch12 -p1
|
%patch12 -p1
|
||||||
%patch13 -p1
|
# disable and back to use black colored terminal window (bnc#776244)
|
||||||
|
# we could enable it when
|
||||||
|
# 1 we have background with better contrast to the font's color
|
||||||
|
# 2 we confirm it's eligible to set the terminal background this way
|
||||||
|
#%patch13 -p1
|
||||||
%patch14 -p2
|
%patch14 -p2
|
||||||
|
%patch15 -p1
|
||||||
|
%patch16 -p1
|
||||||
|
%patch17 -p1
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
# README.openSUSE
|
# README.openSUSE
|
||||||
@ -252,6 +264,7 @@ rm $RPM_BUILD_ROOT%{_datadir}/%{name}/*.h
|
|||||||
|
|
||||||
# Defaults
|
# Defaults
|
||||||
install -m 644 -D %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/default/grub
|
install -m 644 -D %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/default/grub
|
||||||
|
install -m 755 -D %{SOURCE6} $RPM_BUILD_ROOT%{_sbindir}/grub2-once
|
||||||
%find_lang %{name}
|
%find_lang %{name}
|
||||||
%fdupes %buildroot%{_bindir}
|
%fdupes %buildroot%{_bindir}
|
||||||
|
|
||||||
@ -319,6 +332,7 @@ fi
|
|||||||
%{_sbindir}/%{name}-install
|
%{_sbindir}/%{name}-install
|
||||||
%{_sbindir}/%{name}-mkconfig
|
%{_sbindir}/%{name}-mkconfig
|
||||||
%{_sbindir}/%{name}-mknetdir
|
%{_sbindir}/%{name}-mknetdir
|
||||||
|
%{_sbindir}/%{name}-once
|
||||||
%{_sbindir}/%{name}-ofpathname
|
%{_sbindir}/%{name}-ofpathname
|
||||||
%{_sbindir}/%{name}-probe
|
%{_sbindir}/%{name}-probe
|
||||||
%{_sbindir}/%{name}-reboot
|
%{_sbindir}/%{name}-reboot
|
||||||
|
45
not-display-menu-when-boot-once.patch
Normal file
45
not-display-menu-when-boot-once.patch
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
From 78270522e8b8c0674941e0752c245dd8468e5bf8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michael Chang <mchang@suse.com>
|
||||||
|
Date: Wed, 1 Aug 2012 15:46:34 +0800
|
||||||
|
Subject: [PATCH] not display menu when boot once
|
||||||
|
|
||||||
|
References: bnc#771587
|
||||||
|
Patch-Mainline: no
|
||||||
|
|
||||||
|
We should prevent the menu from being displayed if boot once is
|
||||||
|
specified. This is in order to compliant with Grub1's behavior
|
||||||
|
and is better than current as it's not make any sense to bother
|
||||||
|
user to make decision when decision has been made.
|
||||||
|
---
|
||||||
|
util/grub.d/00_header.in | 10 ++++++++--
|
||||||
|
1 file changed, 8 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/util/grub.d/00_header.in b/util/grub.d/00_header.in
|
||||||
|
index f495f85..d1c7916 100644
|
||||||
|
--- a/util/grub.d/00_header.in
|
||||||
|
+++ b/util/grub.d/00_header.in
|
||||||
|
@@ -280,13 +280,19 @@ make_timeout ()
|
||||||
|
verbose=" --verbose"
|
||||||
|
fi
|
||||||
|
cat << EOF
|
||||||
|
-if sleep$verbose --interruptible ${1} ; then
|
||||||
|
+if [ x\${boot_once} = xtrue ]; then
|
||||||
|
+ set timeout=0
|
||||||
|
+elif sleep$verbose --interruptible ${1} ; then
|
||||||
|
set timeout=${2}
|
||||||
|
fi
|
||||||
|
EOF
|
||||||
|
else
|
||||||
|
cat << EOF
|
||||||
|
-set timeout=${2}
|
||||||
|
+if [ x\${boot_once} = xtrue ]; then
|
||||||
|
+ set timeout=0
|
||||||
|
+else
|
||||||
|
+ set timeout=${2}
|
||||||
|
+fi
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
--
|
||||||
|
1.7.10.4
|
||||||
|
|
Loading…
Reference in New Issue
Block a user