Compare commits
No commits in common. 'c9' and 'c8' have entirely different histories.
@ -0,0 +1,30 @@
|
||||
From b5c0a31ae38c2c42f0dea8c2d7282694f020e976 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
Date: Mon, 13 Apr 2015 13:57:33 -0700
|
||||
Subject: [PATCH 01/55] Set envFile from --env when bootloader is not specified
|
||||
|
||||
---
|
||||
grubby.c | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index d4ebb86168d..53fe9250e27 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -4423,9 +4423,11 @@ int main(int argc, const char ** argv) {
|
||||
}
|
||||
|
||||
if (!cfi) {
|
||||
- if (grub2FindConfig(&grub2ConfigType))
|
||||
+ if (grub2FindConfig(&grub2ConfigType)) {
|
||||
cfi = &grub2ConfigType;
|
||||
- else
|
||||
+ if (envPath)
|
||||
+ cfi->envFile = envPath;
|
||||
+ } else
|
||||
#ifdef __ia64__
|
||||
cfi = &eliloConfigType;
|
||||
#elif __powerpc__
|
||||
--
|
||||
2.17.1
|
||||
|
@ -1,143 +0,0 @@
|
||||
From 3afc4c0ed28d443bb71956b07fd45c8cfb07566f Mon Sep 17 00:00:00 2001
|
||||
From: Nathaniel McCallum <npmccallum@redhat.com>
|
||||
Date: Fri, 2 Mar 2018 14:59:32 -0500
|
||||
Subject: [PATCH 2/8] Change return type in getRootSpecifier()
|
||||
|
||||
Rather than returning a new allocation of the prefix, just return the
|
||||
length of the prefix. This change accomplishes a couple things. First,
|
||||
it reduces some memory leaks since the return value was often never
|
||||
freed. Second, it simplifies the caller who is usually only interested
|
||||
in the length of the prefix.
|
||||
---
|
||||
grubby.c | 54 +++++++++++++++++++++++++++---------------------------
|
||||
1 file changed, 27 insertions(+), 27 deletions(-)
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index d4ebb86168d..a062ef8e567 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -675,7 +675,7 @@ static int lineWrite(FILE * out, struct singleLine * line,
|
||||
struct configFileInfo * cfi);
|
||||
static int getNextLine(char ** bufPtr, struct singleLine * line,
|
||||
struct configFileInfo * cfi);
|
||||
-static char * getRootSpecifier(char * str);
|
||||
+static size_t getRootSpecifier(const char *str);
|
||||
static void requote(struct singleLine *line, struct configFileInfo * cfi);
|
||||
static void insertElement(struct singleLine * line,
|
||||
const char * item, int insertHere,
|
||||
@@ -1840,7 +1840,7 @@ int suitableImage(struct singleEntry * entry, const char * bootPrefix,
|
||||
char * fullName;
|
||||
int i;
|
||||
char * dev;
|
||||
- char * rootspec;
|
||||
+ size_t rs;
|
||||
char * rootdev;
|
||||
|
||||
if (skipRemoved && entry->skip) {
|
||||
@@ -1866,12 +1866,11 @@ int suitableImage(struct singleEntry * entry, const char * bootPrefix,
|
||||
|
||||
fullName = alloca(strlen(bootPrefix) +
|
||||
strlen(line->elements[1].item) + 1);
|
||||
- rootspec = getRootSpecifier(line->elements[1].item);
|
||||
- int rootspec_offset = rootspec ? strlen(rootspec) : 0;
|
||||
+ rs = getRootSpecifier(line->elements[1].item);
|
||||
int hasslash = endswith(bootPrefix, '/') ||
|
||||
- beginswith(line->elements[1].item + rootspec_offset, '/');
|
||||
+ beginswith(line->elements[1].item + rs, '/');
|
||||
sprintf(fullName, "%s%s%s", bootPrefix, hasslash ? "" : "/",
|
||||
- line->elements[1].item + rootspec_offset);
|
||||
+ line->elements[1].item + rs);
|
||||
if (access(fullName, R_OK)) {
|
||||
notSuitablePrintf(entry, 0, "access to %s failed\n", fullName);
|
||||
return 0;
|
||||
@@ -1952,7 +1951,6 @@ struct singleEntry * findEntryByPath(struct grubConfig * config,
|
||||
struct singleLine * line;
|
||||
int i;
|
||||
char * chptr;
|
||||
- char * rootspec = NULL;
|
||||
enum lineType_e checkType = LT_KERNEL;
|
||||
|
||||
if (isdigit(*kernel)) {
|
||||
@@ -2044,11 +2042,10 @@ struct singleEntry * findEntryByPath(struct grubConfig * config,
|
||||
|
||||
if (line && line->type != LT_MENUENTRY &&
|
||||
line->numElements >= 2) {
|
||||
- rootspec = getRootSpecifier(line->elements[1].item);
|
||||
- if (!strcmp(line->elements[1].item +
|
||||
- ((rootspec != NULL) ? strlen(rootspec) : 0),
|
||||
- kernel + strlen(prefix)))
|
||||
- break;
|
||||
+ if (!strcmp(line->elements[1].item +
|
||||
+ getRootSpecifier(line->elements[1].item),
|
||||
+ kernel + strlen(prefix)))
|
||||
+ break;
|
||||
}
|
||||
if(line->type == LT_MENUENTRY &&
|
||||
!strcmp(line->elements[1].item, kernel))
|
||||
@@ -2797,11 +2794,11 @@ struct singleLine * addLineTmpl(struct singleEntry * entry,
|
||||
|
||||
/* but try to keep the rootspec from the template... sigh */
|
||||
if (tmplLine->type & (LT_HYPER|LT_KERNEL|LT_MBMODULE|LT_INITRD|LT_KERNEL_EFI|LT_INITRD_EFI|LT_KERNEL_16|LT_INITRD_16)) {
|
||||
- char * rootspec = getRootSpecifier(tmplLine->elements[1].item);
|
||||
- if (rootspec != NULL) {
|
||||
- free(newLine->elements[1].item);
|
||||
- newLine->elements[1].item =
|
||||
- sdupprintf("%s%s", rootspec, val);
|
||||
+ size_t rs = getRootSpecifier(tmplLine->elements[1].item);
|
||||
+ if (rs > 0) {
|
||||
+ free(newLine->elements[1].item);
|
||||
+ newLine->elements[1].item = sdupprintf("%.*s%s", (int) rs,
|
||||
+ tmplLine->elements[1].item, val);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3729,15 +3726,19 @@ int checkForElilo(struct grubConfig * config) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
-static char * getRootSpecifier(char * str) {
|
||||
- char * idx, * rootspec = NULL;
|
||||
+static size_t getRootSpecifier(const char *str)
|
||||
+{
|
||||
+ size_t rs = 0;
|
||||
|
||||
if (*str == '(') {
|
||||
- idx = rootspec = strdup(str);
|
||||
- while(*idx && (*idx != ')') && (!isspace(*idx))) idx++;
|
||||
- *(++idx) = '\0';
|
||||
+ for (; str[rs] != ')' && !isspace(str[rs]); rs++) {
|
||||
+ if (!str[rs])
|
||||
+ return rs;
|
||||
+ }
|
||||
+ rs++;
|
||||
}
|
||||
- return rootspec;
|
||||
+
|
||||
+ return rs;
|
||||
}
|
||||
|
||||
static char * getInitrdVal(struct grubConfig * config,
|
||||
@@ -4616,7 +4617,7 @@ int main(int argc, const char ** argv) {
|
||||
if (displayDefault) {
|
||||
struct singleLine * line;
|
||||
struct singleEntry * entry;
|
||||
- char * rootspec;
|
||||
+ size_t rs;
|
||||
|
||||
if (config->defaultImage == -1) return 0;
|
||||
if (config->defaultImage == DEFAULT_SAVED_GRUB2 &&
|
||||
@@ -4629,9 +4630,8 @@ int main(int argc, const char ** argv) {
|
||||
line = getLineByType(LT_KERNEL|LT_HYPER|LT_KERNEL_EFI|LT_KERNEL_16, entry->lines);
|
||||
if (!line) return 0;
|
||||
|
||||
- rootspec = getRootSpecifier(line->elements[1].item);
|
||||
- printf("%s%s\n", bootPrefix, line->elements[1].item +
|
||||
- ((rootspec != NULL) ? strlen(rootspec) : 0));
|
||||
+ rs = getRootSpecifier(line->elements[1].item);
|
||||
+ printf("%s%s\n", bootPrefix, line->elements[1].item + rs);
|
||||
|
||||
return 0;
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,91 @@
|
||||
From 9c9587feca7413b34498064db19d796e1c402b51 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Todorov <atodorov@redhat.com>
|
||||
Date: Thu, 11 Jun 2015 08:45:37 -0400
|
||||
Subject: [PATCH 02/55] add README with description of the test suite
|
||||
|
||||
---
|
||||
README.rst | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 72 insertions(+)
|
||||
create mode 100644 README.rst
|
||||
|
||||
diff --git a/README.rst b/README.rst
|
||||
new file mode 100644
|
||||
index 00000000000..a5743ff2f96
|
||||
--- /dev/null
|
||||
+++ b/README.rst
|
||||
@@ -0,0 +1,72 @@
|
||||
+grubby is a command line tool for updating and displaying information about
|
||||
+the configuration files for the grub, lilo, elilo (ia64), yaboot (powerpc)
|
||||
+and zipl (s390) boot loaders. It is primarily designed to be used from scripts
|
||||
+which install new kernels and need to find information about the current boot
|
||||
+environment.
|
||||
+
|
||||
+
|
||||
+Testing grubby
|
||||
+==============
|
||||
+
|
||||
+To execute the integrated test suite from inside the source directory run the
|
||||
+command::
|
||||
+
|
||||
+ make test
|
||||
+
|
||||
+
|
||||
+Test Suite Architecture
|
||||
+------------------------
|
||||
+
|
||||
+grubby's test suite is written in Bash. The file `test.sh` contains several
|
||||
+helper functions and a list of different test scenarios which are exercised
|
||||
+upon execution. Important functions are:
|
||||
+
|
||||
+- oneTest() - test if the configuration generated by the supplied grubby
|
||||
+ parameters matches a well known configuration file;
|
||||
+
|
||||
+- oneDisplayTest() - test grubby features that display some information,
|
||||
+ checking grubby's output against well known values;
|
||||
+
|
||||
+- commandTest() - test if the output of some commands matches the provided
|
||||
+ text. This function is only used for grub2 testing in a few places.
|
||||
+
|
||||
+
|
||||
+Note: the test suite creates aliases for oneTest() and oneDisplayTest(), which
|
||||
+are prefixed with the corresponding boot loader name. For example:
|
||||
+grubTest(). eliloTest(), etc.
|
||||
+
|
||||
+The invocation syntax is::
|
||||
+
|
||||
+ testFunction config_file results_file --grubby --options
|
||||
+
|
||||
+For example the line::
|
||||
+
|
||||
+ grubTest grub.1 updargs/g1.1 --update-kernel=DEFAULT --args="root=/dev/hda1"
|
||||
+
|
||||
+means execute the command::
|
||||
+
|
||||
+ ./grubby --grub --config-file tests/grub.1 --update-kernel=DEFAULT \
|
||||
+ --args="root=/dev/hda1"
|
||||
+
|
||||
+and compare the resulting configuration with the file
|
||||
+`tests/results/updargs/g1.1`.
|
||||
+
|
||||
+
|
||||
+The line::
|
||||
+
|
||||
+ grubDisplayTest grub.1 defaultindex/0 --default-index
|
||||
+
|
||||
+means execute::
|
||||
+
|
||||
+ ./grubby --grub --config-file tests/grub.1 --default-index
|
||||
+
|
||||
+and compare the output with the file `tests/results/defaultindex/0`.
|
||||
+
|
||||
+Writing New Test Cases
|
||||
+----------------------
|
||||
+
|
||||
+To write a new test case for grubby you need a config file which matches the
|
||||
+initial test conditions (either existing one or a new one), provide a
|
||||
+results file (likely a new one) which contains the expected configuration or
|
||||
+output and finally add a call to the test function(s) using the desired grubby
|
||||
+parameters in an appropriate section of `test.sh`.
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,35 @@
|
||||
From d4b710802da3d780799f1e01e18b613e77b95bb3 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Wed, 24 Jun 2015 09:20:35 -0400
|
||||
Subject: [PATCH 03/55] Fix some stray whitespace
|
||||
|
||||
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||
---
|
||||
README.rst | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/README.rst b/README.rst
|
||||
index a5743ff2f96..754454b7bca 100644
|
||||
--- a/README.rst
|
||||
+++ b/README.rst
|
||||
@@ -42,7 +42,7 @@ The invocation syntax is::
|
||||
For example the line::
|
||||
|
||||
grubTest grub.1 updargs/g1.1 --update-kernel=DEFAULT --args="root=/dev/hda1"
|
||||
-
|
||||
+
|
||||
means execute the command::
|
||||
|
||||
./grubby --grub --config-file tests/grub.1 --update-kernel=DEFAULT \
|
||||
@@ -66,7 +66,7 @@ Writing New Test Cases
|
||||
----------------------
|
||||
|
||||
To write a new test case for grubby you need a config file which matches the
|
||||
-initial test conditions (either existing one or a new one), provide a
|
||||
+initial test conditions (either existing one or a new one), provide a
|
||||
results file (likely a new one) which contains the expected configuration or
|
||||
output and finally add a call to the test function(s) using the desired grubby
|
||||
parameters in an appropriate section of `test.sh`.
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,162 @@
|
||||
From d58e447819e96d84560b16d7632bb7bdf88cc412 Mon Sep 17 00:00:00 2001
|
||||
From: Nishanth Aravamudan <nacc@linux.vnet.ibm.com>
|
||||
Date: Tue, 16 Jun 2015 10:43:21 -0700
|
||||
Subject: [PATCH 04/55] grubby: properly handle mixed ' and " and nested quotes
|
||||
|
||||
The SLES12 grub2.cfg file on ppc64le by default contains a line like:
|
||||
|
||||
submenu "Bootable snapshot #$snapshot_num" {
|
||||
menuentry "If OK, run 'snapper rollback $snapshot_num' reboot." { true; }
|
||||
}
|
||||
|
||||
On any grubby (tested with 8.40) invocation that updates the config
|
||||
file, the combination of nested quotes and mixed quotes leads to a
|
||||
generated file content like:
|
||||
|
||||
submenu "Bootable snapshot #$snapshot_num" {
|
||||
menuentry 'If OK, run snapper rollback $snapshot_num' rollback $snapshot_num' and reboot." { true; }
|
||||
}
|
||||
|
||||
which includes both a change from " to ', but also improperly quoted
|
||||
strings and trailing characters relative to the string. This actually
|
||||
leads to a failure to boot from the disk by default when using grubby
|
||||
(e.g., Autotest) on SLES12 ppc64le. Whether SLES12 should be adding an
|
||||
entry like this by default or not is probably open to debate, but grubby
|
||||
should be able to hand this input file.
|
||||
|
||||
To fix the issue, three changes were necessary:
|
||||
|
||||
1) grub2ExtractTitle needs to check that if the second element starts
|
||||
with a quote, that the matching element found ends with the same
|
||||
quote-type (' vs. ")
|
||||
|
||||
2) lineWrite needs to output the right kind of quote based upon if the
|
||||
string to be outputted itself contains quotes. This is not currently
|
||||
possible in the code, because quotes are stripped out normally by
|
||||
readConfig, but with the change in 3), that only happens now for the
|
||||
quotes that actually delineate a string.
|
||||
|
||||
3) readConfig needs to check that when it is extracting titles and
|
||||
determining extras, it uses matching quotes.
|
||||
|
||||
With these changes, a simple grubby --set-default=SLES12 (for example),
|
||||
now produces:
|
||||
|
||||
submenu "Bootable snapshot #$snapshot_num" {
|
||||
menuentry "If OK, run 'snapper rollback $snapshot_num' and reboot." { true; }
|
||||
}
|
||||
|
||||
as expected.
|
||||
|
||||
Signed-off-by: Nishanth Aravamudan <nacc@linux.vnet.ibm.com>
|
||||
---
|
||||
grubby.c | 42 +++++++++++++++++++++++++++++++++---------
|
||||
1 file changed, 33 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index 53fe9250e27..440c6277935 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -451,6 +451,8 @@ char *grub2ExtractTitle(struct singleLine * line) {
|
||||
* whose last character is also quote (assuming it's the closing one) */
|
||||
int resultMaxSize;
|
||||
char * result;
|
||||
+ /* need to ensure that ' does not match " as we search */
|
||||
+ char quote_char = *current;
|
||||
|
||||
resultMaxSize = sizeOfSingleLine(line);
|
||||
result = malloc(resultMaxSize);
|
||||
@@ -464,7 +466,7 @@ char *grub2ExtractTitle(struct singleLine * line) {
|
||||
current_indent_len = strlen(current_indent);
|
||||
|
||||
strncat(result, current_indent, current_indent_len);
|
||||
- if (!isquote(current[current_len-1])) {
|
||||
+ if (current[current_len-1] != quote_char) {
|
||||
strncat(result, current, current_len);
|
||||
} else {
|
||||
strncat(result, current, current_len - 1);
|
||||
@@ -928,10 +930,23 @@ static int lineWrite(FILE * out, struct singleLine * line,
|
||||
/* Need to handle this, because we strip the quotes from
|
||||
* menuentry when read it. */
|
||||
if (line->type == LT_MENUENTRY && i == 1) {
|
||||
- if(!isquote(*line->elements[i].item))
|
||||
- fprintf(out, "\'%s\'", line->elements[i].item);
|
||||
- else
|
||||
+ if(!isquote(*line->elements[i].item)) {
|
||||
+ int substring = 0;
|
||||
+ /* If the line contains nested quotes, we did not strip
|
||||
+ * the "interna" quotes and we must use the right quotes
|
||||
+ * again when writing the updated file. */
|
||||
+ for (int j = i; j < line->numElements; j++) {
|
||||
+ if (strchr(line->elements[i].item, '\'') != NULL) {
|
||||
+ substring = 1;
|
||||
+ fprintf(out, "\"%s\"", line->elements[i].item);
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ if (!substring)
|
||||
+ fprintf(out, "\'%s\'", line->elements[i].item);
|
||||
+ } else {
|
||||
fprintf(out, "%s", line->elements[i].item);
|
||||
+ }
|
||||
fprintf(out, "%s", line->elements[i].indent);
|
||||
|
||||
continue;
|
||||
@@ -1267,6 +1282,8 @@ static struct grubConfig * readConfig(const char * inName,
|
||||
len = 0;
|
||||
char *extras;
|
||||
char *title;
|
||||
+ /* initially unseen value */
|
||||
+ char quote_char = '\0';
|
||||
|
||||
for (int i = 1; i < line->numElements; i++) {
|
||||
len += strlen(line->elements[i].item);
|
||||
@@ -1283,13 +1300,16 @@ static struct grubConfig * readConfig(const char * inName,
|
||||
for (int i = 0; i < line->numElements; i++) {
|
||||
if (!strcmp(line->elements[i].item, "menuentry"))
|
||||
continue;
|
||||
- if (isquote(*line->elements[i].item))
|
||||
+ if (isquote(*line->elements[i].item) && quote_char == '\0') {
|
||||
+ /* ensure we properly pair off quotes */
|
||||
+ quote_char = *line->elements[i].item;
|
||||
title = line->elements[i].item + 1;
|
||||
- else
|
||||
+ } else {
|
||||
title = line->elements[i].item;
|
||||
+ }
|
||||
|
||||
len = strlen(title);
|
||||
- if (isquote(title[len-1])) {
|
||||
+ if (title[len-1] == quote_char) {
|
||||
strncat(buf, title,len-1);
|
||||
break;
|
||||
} else {
|
||||
@@ -1300,6 +1320,7 @@ static struct grubConfig * readConfig(const char * inName,
|
||||
|
||||
/* get extras */
|
||||
int count = 0;
|
||||
+ quote_char = '\0';
|
||||
for (int i = 0; i < line->numElements; i++) {
|
||||
if (count >= 2) {
|
||||
strcat(extras, line->elements[i].item);
|
||||
@@ -1310,12 +1331,15 @@ static struct grubConfig * readConfig(const char * inName,
|
||||
continue;
|
||||
|
||||
/* count ' or ", there should be two in menuentry line. */
|
||||
- if (isquote(*line->elements[i].item))
|
||||
+ if (isquote(*line->elements[i].item) && quote_char == '\0') {
|
||||
+ /* ensure we properly pair off quotes */
|
||||
+ quote_char = *line->elements[i].item;
|
||||
count++;
|
||||
+ }
|
||||
|
||||
len = strlen(line->elements[i].item);
|
||||
|
||||
- if (isquote(line->elements[i].item[len -1]))
|
||||
+ if (line->elements[i].item[len -1] == quote_char)
|
||||
count++;
|
||||
|
||||
/* ok, we get the final ' or ", others are extras. */
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,34 @@
|
||||
From 9659e65a9f7ccc2549b75262a4af50ed99cc4bb9 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Tue, 11 Nov 2014 10:46:08 -0500
|
||||
Subject: [PATCH 05/55] Don't put spaces in debug entries on zipl platforms.
|
||||
|
||||
Because of course zipl can't handle spaces.
|
||||
|
||||
Related: rhbz#1152152
|
||||
|
||||
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||
---
|
||||
new-kernel-pkg | 6 +++++-
|
||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/new-kernel-pkg b/new-kernel-pkg
|
||||
index b634388a83f..1cdbbb99501 100755
|
||||
--- a/new-kernel-pkg
|
||||
+++ b/new-kernel-pkg
|
||||
@@ -140,7 +140,11 @@ rungrubby() {
|
||||
if [ "$1" == "--debug" ]; then
|
||||
[ "$MAKEDEBUG" != "yes" ] && return 0
|
||||
[ -n "$verbose" ] && echo "- First, making a debug entry."
|
||||
- declare -x debugtitle=" with debugging"
|
||||
+ if [ $ARCH = 's390' -o $ARCH = 's390x' ]; then
|
||||
+ declare -x debugtitle="_with_debugging"
|
||||
+ else
|
||||
+ declare -x debugtitle=" with debugging"
|
||||
+ fi
|
||||
declare -x debugargs="$DEBUGARG"
|
||||
shift
|
||||
else
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,52 @@
|
||||
From d9600e2dd1b35a6e74494c8c98ba399d06685041 Mon Sep 17 00:00:00 2001
|
||||
From: Lubomir Rintel <lkundrak@v3.sk>
|
||||
Date: Thu, 27 Feb 2014 10:35:59 +0100
|
||||
Subject: [PATCH 06/55] Drop SEGV handler
|
||||
|
||||
The generated tracebacks are mostly useless without debuginfo (which is likely
|
||||
not present if the crash is not anticipated) and prevent ABRT from doing a
|
||||
better job.
|
||||
|
||||
Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
|
||||
---
|
||||
grubby.c | 17 -----------------
|
||||
1 file changed, 17 deletions(-)
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index 440c6277935..649597ed92b 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -4211,21 +4211,6 @@ int addNewKernel(struct grubConfig * config, struct singleEntry * template,
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static void traceback(int signum)
|
||||
-{
|
||||
- void *array[40];
|
||||
- size_t size;
|
||||
-
|
||||
- signal(SIGSEGV, SIG_DFL);
|
||||
- memset(array, '\0', sizeof (array));
|
||||
- size = backtrace(array, 40);
|
||||
-
|
||||
- fprintf(stderr, "grubby received SIGSEGV! Backtrace (%ld):\n",
|
||||
- (unsigned long)size);
|
||||
- backtrace_symbols_fd(array, size, STDERR_FILENO);
|
||||
- exit(1);
|
||||
-}
|
||||
-
|
||||
int main(int argc, const char ** argv) {
|
||||
poptContext optCon;
|
||||
const char * grubConfig = NULL;
|
||||
@@ -4368,8 +4353,6 @@ int main(int argc, const char ** argv) {
|
||||
|
||||
useextlinuxmenu=0;
|
||||
|
||||
- signal(SIGSEGV, traceback);
|
||||
-
|
||||
int i = 0;
|
||||
for (int j = 1; j < argc; j++)
|
||||
i += strlen(argv[j]) + 1;
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,183 @@
|
||||
From 1da1f577419e85a4e2d717b73af67b79382ad93e Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Thu, 2 Jul 2015 12:34:30 -0400
|
||||
Subject: [PATCH 07/55] Add a bunch of tests for various
|
||||
--default-{kernel,title,index}.
|
||||
|
||||
... and fix some failures where we see them.
|
||||
|
||||
Related: rhbz#1184014
|
||||
|
||||
(though I can't actually replicate his failure.)
|
||||
|
||||
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||
---
|
||||
grubby.c | 52 ++++++++++++++++++++-------------
|
||||
test.sh | 10 +++++++
|
||||
test/results/defaultkernel/g.1 | 1 +
|
||||
test/results/defaultkernel/l1.1 | 1 +
|
||||
test/results/defaultkernel/z.1 | 1 +
|
||||
test/results/defaulttitle/z.1 | 1 +
|
||||
6 files changed, 45 insertions(+), 21 deletions(-)
|
||||
create mode 100644 test/results/defaultkernel/g.1
|
||||
create mode 100644 test/results/defaultkernel/l1.1
|
||||
create mode 100644 test/results/defaultkernel/z.1
|
||||
create mode 100644 test/results/defaulttitle/z.1
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index 649597ed92b..0bb486967bf 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -428,7 +428,7 @@ char *grub2ExtractTitle(struct singleLine * line) {
|
||||
|
||||
/* bail out if line does not start with menuentry */
|
||||
if (strcmp(line->elements[0].item, "menuentry"))
|
||||
- return NULL;
|
||||
+ return NULL;
|
||||
|
||||
i = 1;
|
||||
current = line->elements[i].item;
|
||||
@@ -437,10 +437,12 @@ char *grub2ExtractTitle(struct singleLine * line) {
|
||||
/* if second word is quoted, strip the quotes and return single word */
|
||||
if (isquote(*current) && isquote(current[current_len - 1])) {
|
||||
char *tmp;
|
||||
-
|
||||
- tmp = strdup(current);
|
||||
- *(tmp + current_len - 1) = '\0';
|
||||
- return ++tmp;
|
||||
+
|
||||
+ tmp = strdup(current+1);
|
||||
+ if (!tmp)
|
||||
+ return NULL;
|
||||
+ tmp[strlen(tmp)-1] = '\0';
|
||||
+ return tmp;
|
||||
}
|
||||
|
||||
/* if no quotes, return second word verbatim */
|
||||
@@ -453,11 +455,11 @@ char *grub2ExtractTitle(struct singleLine * line) {
|
||||
char * result;
|
||||
/* need to ensure that ' does not match " as we search */
|
||||
char quote_char = *current;
|
||||
-
|
||||
+
|
||||
resultMaxSize = sizeOfSingleLine(line);
|
||||
result = malloc(resultMaxSize);
|
||||
snprintf(result, resultMaxSize, "%s", ++current);
|
||||
-
|
||||
+
|
||||
i++;
|
||||
for (; i < line->numElements; ++i) {
|
||||
current = line->elements[i].item;
|
||||
@@ -4648,27 +4650,35 @@ int main(int argc, const char ** argv) {
|
||||
struct singleLine * line;
|
||||
struct singleEntry * entry;
|
||||
|
||||
- if (config->defaultImage == -1) return 0;
|
||||
+ if (config->defaultImage == -1)
|
||||
+ return 0;
|
||||
if (config->defaultImage == DEFAULT_SAVED_GRUB2 &&
|
||||
cfi->defaultIsSaved)
|
||||
config->defaultImage = 0;
|
||||
entry = findEntryByIndex(config, config->defaultImage);
|
||||
- if (!entry) return 0;
|
||||
+ if (!entry)
|
||||
+ return 0;
|
||||
|
||||
if (!configureGrub2) {
|
||||
- line = getLineByType(LT_TITLE, entry->lines);
|
||||
- if (!line) return 0;
|
||||
- printf("%s\n", line->elements[1].item);
|
||||
-
|
||||
- } else {
|
||||
- char * title;
|
||||
-
|
||||
- dbgPrintf("This is GRUB2, default title is embeded in menuentry\n");
|
||||
- line = getLineByType(LT_MENUENTRY, entry->lines);
|
||||
- if (!line) return 0;
|
||||
- title = grub2ExtractTitle(line);
|
||||
- if (title)
|
||||
+ char *title;
|
||||
+ line = getLineByType(LT_TITLE, entry->lines);
|
||||
+ if (!line)
|
||||
+ return 0;
|
||||
+ title = extractTitle(config, line);
|
||||
+ if (!title)
|
||||
+ return 0;
|
||||
printf("%s\n", title);
|
||||
+ free(title);
|
||||
+ } else {
|
||||
+ char * title;
|
||||
+
|
||||
+ dbgPrintf("This is GRUB2, default title is embeded in menuentry\n");
|
||||
+ line = getLineByType(LT_MENUENTRY, entry->lines);
|
||||
+ if (!line)
|
||||
+ return 0;
|
||||
+ title = grub2ExtractTitle(line);
|
||||
+ if (title)
|
||||
+ printf("%s\n", title);
|
||||
}
|
||||
return 0;
|
||||
|
||||
diff --git a/test.sh b/test.sh
|
||||
index 6379698c6de..96e0087b1e2 100755
|
||||
--- a/test.sh
|
||||
+++ b/test.sh
|
||||
@@ -298,6 +298,9 @@ grubDisplayTest grub.9 defaulttitle/g.9 --default-title
|
||||
grubDisplayTest grub.10 defaulttitle/g.10 --default-title
|
||||
grubDisplayTest grub.11 defaulttitle/g.11 --default-title
|
||||
|
||||
+testing="GRUB display default kernel"
|
||||
+grubDisplayTest grub.1 defaultkernel/g.1 --default-kernel
|
||||
+
|
||||
testing="LILO default directive"
|
||||
liloTest lilo.1 default/l1.1 --set-default=/boot/vmlinuz-2.4.18-4
|
||||
liloTest lilo.1 default/l1.2 --remove-kernel=/boot/vmlinuz-2.4.18-4smp
|
||||
@@ -305,10 +308,17 @@ liloTest lilo.1 default/l1.3 --add-kernel /boot/kernel --title label \
|
||||
--copy-default
|
||||
liloTest lilo.1 default/l1.4 --add-kernel /boot/kernel --title label \
|
||||
--copy-default --make-default
|
||||
+liloDisplayTest lilo.1 defaultkernel/l1.1 --default-kernel
|
||||
|
||||
testing="Z/IPL default directive"
|
||||
ziplTest zipl.1 default/z1.1 --add-kernel /boot/new-kernel --title test
|
||||
ziplTest zipl.1 default/z1.2 --add-kernel /boot/new-kernel --title test --make-default
|
||||
+testing="Z/IPL display default index"
|
||||
+ziplDisplayTest zipl.1 defaultindex/0 --default-index
|
||||
+testing="Z/IPL display default title"
|
||||
+ziplDisplayTest zipl.1 defaulttitle/z.1 --default-title
|
||||
+testing="Z/IPL display default kernel"
|
||||
+ziplDisplayTest zipl.1 defaultkernel/z.1 --default-kernel
|
||||
|
||||
testing="GRUB fallback directive"
|
||||
grubTest grub.5 fallback/g5.1 --remove-kernel=/boot/vmlinuz-2.4.7-ac3 \
|
||||
diff --git a/test/results/defaultkernel/g.1 b/test/results/defaultkernel/g.1
|
||||
new file mode 100644
|
||||
index 00000000000..2c3ac11ead6
|
||||
--- /dev/null
|
||||
+++ b/test/results/defaultkernel/g.1
|
||||
@@ -0,0 +1 @@
|
||||
+/boot/vmlinuz-2.4.7-2
|
||||
diff --git a/test/results/defaultkernel/l1.1 b/test/results/defaultkernel/l1.1
|
||||
new file mode 100644
|
||||
index 00000000000..fd22b1be2b9
|
||||
--- /dev/null
|
||||
+++ b/test/results/defaultkernel/l1.1
|
||||
@@ -0,0 +1 @@
|
||||
+/boot/vmlinuz-2.4.18-4smp
|
||||
diff --git a/test/results/defaultkernel/z.1 b/test/results/defaultkernel/z.1
|
||||
new file mode 100644
|
||||
index 00000000000..2c62e98d4d9
|
||||
--- /dev/null
|
||||
+++ b/test/results/defaultkernel/z.1
|
||||
@@ -0,0 +1 @@
|
||||
+/boot/vmlinuz-2.4.9-37
|
||||
diff --git a/test/results/defaulttitle/z.1 b/test/results/defaulttitle/z.1
|
||||
new file mode 100644
|
||||
index 00000000000..a08e1f35eb7
|
||||
--- /dev/null
|
||||
+++ b/test/results/defaulttitle/z.1
|
||||
@@ -0,0 +1 @@
|
||||
+linux
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,28 @@
|
||||
From 5de1b279749f02a126932f9e03ac62706efde699 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Thu, 2 Jul 2015 12:44:51 -0400
|
||||
Subject: [PATCH 08/55] Emit better systemd debug settings on debug entries.
|
||||
|
||||
Resolves: rhbz#1212128
|
||||
|
||||
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||
---
|
||||
new-kernel-pkg | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/new-kernel-pkg b/new-kernel-pkg
|
||||
index 1cdbbb99501..1f6ab39499f 100755
|
||||
--- a/new-kernel-pkg
|
||||
+++ b/new-kernel-pkg
|
||||
@@ -121,7 +121,7 @@ mbkernel="$HYPERVISOR"
|
||||
mbargs="$HYPERVISOR_ARGS"
|
||||
adddracutargs=""
|
||||
addplymouthinitrd=""
|
||||
-DEBUGARG="systemd.debug"
|
||||
+DEBUGARG="systemd.log_level=debug systemd.log_target=kmsg"
|
||||
|
||||
usage() {
|
||||
echo "Usage: `basename $0` [-v] [--mkinitrd] [--rminitrd] [--dracut]" >&2
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,25 @@
|
||||
From 80e43f6b8c8316075d8f9f6553ad271e168060b1 Mon Sep 17 00:00:00 2001
|
||||
From: Chris Lumens <clumens@redhat.com>
|
||||
Date: Wed, 22 Jul 2015 09:13:11 -0400
|
||||
Subject: [PATCH 09/55] Add a new makefile target that does everything needed
|
||||
for jenkins.
|
||||
|
||||
We should have as much of the logic of how the CI tests are run in source
|
||||
control as possible, so that's what this target is for. Besides this, jenkins
|
||||
just runs a "git clean" first.
|
||||
---
|
||||
Makefile | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index ac144046133..ade4421aa25 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -84,3 +84,4 @@ archive:
|
||||
upload: archive
|
||||
@scp grubby-$(VERSION).tar.bz2 fedorahosted.org:grubby
|
||||
|
||||
+ci: test
|
||||
--
|
||||
2.17.1
|
||||
|
@ -1,104 +0,0 @@
|
||||
From 00241c65a5c0b4bb32a847a6abb5a86d0c704a8f Mon Sep 17 00:00:00 2001
|
||||
From: Javier Martinez Canillas <javierm@redhat.com>
|
||||
Date: Tue, 5 Feb 2019 20:08:43 +0100
|
||||
Subject: [PATCH] Fix GCC warnings about possible string truncations and buffer
|
||||
overflows
|
||||
|
||||
Building with -Werror=stringop-truncation and -Werror=stringop-overflow
|
||||
leads to GCC complaining about possible string truncation and overflows.
|
||||
|
||||
Fix this by using memcpy(), explicitly calculating the buffers lenghts
|
||||
and set a NUL byte terminator after copying the buffers.
|
||||
|
||||
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
||||
---
|
||||
grubby.c | 35 +++++++++++++++++++++++++++--------
|
||||
1 file changed, 27 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index 96d252a0a83..5ca689539cf 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -459,20 +459,26 @@ char *grub2ExtractTitle(struct singleLine * line) {
|
||||
snprintf(result, resultMaxSize, "%s", ++current);
|
||||
|
||||
i++;
|
||||
+ int result_len = 0;
|
||||
for (; i < line->numElements; ++i) {
|
||||
current = line->elements[i].item;
|
||||
current_len = strlen(current);
|
||||
current_indent = line->elements[i].indent;
|
||||
current_indent_len = strlen(current_indent);
|
||||
|
||||
- strncat(result, current_indent, current_indent_len);
|
||||
+ memcpy(result + result_len, current_indent, current_indent_len);
|
||||
+ result_len += current_indent_len;
|
||||
+
|
||||
if (!isquote(current[current_len-1])) {
|
||||
- strncat(result, current, current_len);
|
||||
+ memcpy(result + result_len, current_indent, current_indent_len);
|
||||
+ result_len += current_len;
|
||||
} else {
|
||||
- strncat(result, current, current_len - 1);
|
||||
+ memcpy(result + result_len, current_indent, current_indent_len);
|
||||
+ result_len += (current_len - 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
+ result[result_len] = '\0';
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1281,6 +1287,7 @@ static struct grubConfig * readConfig(const char * inName,
|
||||
extras = malloc(len + 1);
|
||||
*extras = '\0';
|
||||
|
||||
+ int buf_len = 0;
|
||||
/* get title. */
|
||||
for (int i = 0; i < line->numElements; i++) {
|
||||
if (!strcmp(line->elements[i].item, "menuentry"))
|
||||
@@ -1292,13 +1299,18 @@ static struct grubConfig * readConfig(const char * inName,
|
||||
|
||||
len = strlen(title);
|
||||
if (isquote(title[len-1])) {
|
||||
- strncat(buf, title,len-1);
|
||||
+ memcpy(buf + buf_len, title, len - 1);
|
||||
+ buf_len += (len - 1);
|
||||
break;
|
||||
} else {
|
||||
- strcat(buf, title);
|
||||
- strcat(buf, line->elements[i].indent);
|
||||
+ memcpy(buf + buf_len, title, len);
|
||||
+ buf_len += len;
|
||||
+ len = strlen(line->elements[i].indent);
|
||||
+ memcpy(buf + buf_len, line->elements[i].indent, len);
|
||||
+ buf_len += len;
|
||||
}
|
||||
}
|
||||
+ buf[buf_len] = '\0';
|
||||
|
||||
/* get extras */
|
||||
int count = 0;
|
||||
@@ -4494,10 +4506,17 @@ int main(int argc, const char ** argv) {
|
||||
exit(1);
|
||||
}
|
||||
saved_command_line[0] = '\0';
|
||||
+ int cmdline_len = 0, arg_len;
|
||||
for (int j = 1; j < argc; j++) {
|
||||
- strcat(saved_command_line, argv[j]);
|
||||
- strncat(saved_command_line, j == argc -1 ? "" : " ", 1);
|
||||
+ arg_len = strlen(argv[j]);
|
||||
+ memcpy(saved_command_line + cmdline_len, argv[j], arg_len);
|
||||
+ cmdline_len += arg_len;
|
||||
+ if (j != argc - 1) {
|
||||
+ memcpy(saved_command_line + cmdline_len, " ", 1);
|
||||
+ cmdline_len++;
|
||||
+ }
|
||||
}
|
||||
+ saved_command_line[cmdline_len] = '\0';
|
||||
|
||||
optCon = poptGetContext("grubby", argc, argv, options, 0);
|
||||
poptReadDefaultConfig(optCon, 1);
|
||||
--
|
||||
2.20.1
|
||||
|
@ -0,0 +1,41 @@
|
||||
From ec969de50ea5fa31d98cd00afa6a3f8a43e606a4 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Thu, 2 Jul 2015 14:30:09 -0400
|
||||
Subject: [PATCH 10/55] Make the grub1 "defaultkernel" test more reliable.
|
||||
|
||||
Basically just do it twice with various incarnations of
|
||||
--boot-filesystem={/,/boot}
|
||||
|
||||
Related: rhbz#1184014
|
||||
|
||||
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||
---
|
||||
test.sh | 3 ++-
|
||||
test/results/defaultkernel/g.2 | 1 +
|
||||
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||
create mode 100644 test/results/defaultkernel/g.2
|
||||
|
||||
diff --git a/test.sh b/test.sh
|
||||
index 96e0087b1e2..2985fd62bf9 100755
|
||||
--- a/test.sh
|
||||
+++ b/test.sh
|
||||
@@ -299,7 +299,8 @@ grubDisplayTest grub.10 defaulttitle/g.10 --default-title
|
||||
grubDisplayTest grub.11 defaulttitle/g.11 --default-title
|
||||
|
||||
testing="GRUB display default kernel"
|
||||
-grubDisplayTest grub.1 defaultkernel/g.1 --default-kernel
|
||||
+grubDisplayTest grub.1 defaultkernel/g.1 --boot-filesystem=/boot --default-kernel
|
||||
+grubDisplayTest grub.1 defaultkernel/g.2 --boot-filesystem=/ --default-kernel
|
||||
|
||||
testing="LILO default directive"
|
||||
liloTest lilo.1 default/l1.1 --set-default=/boot/vmlinuz-2.4.18-4
|
||||
diff --git a/test/results/defaultkernel/g.2 b/test/results/defaultkernel/g.2
|
||||
new file mode 100644
|
||||
index 00000000000..d15855e1b57
|
||||
--- /dev/null
|
||||
+++ b/test/results/defaultkernel/g.2
|
||||
@@ -0,0 +1 @@
|
||||
+/vmlinuz-2.4.7-2
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,85 @@
|
||||
From 38d8178482ea7dabf7c4ab8c2973faa2b469e9c7 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Thu, 2 Jul 2015 16:26:59 -0400
|
||||
Subject: [PATCH 11/55] Don't leak from one extractTitle() call.
|
||||
|
||||
Found by coverity.
|
||||
|
||||
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||
---
|
||||
grubby.c | 27 +++++++++++++++++----------
|
||||
1 file changed, 17 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index 0bb486967bf..70477ba14ee 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -1510,13 +1510,14 @@ static struct grubConfig * readConfig(const char * inName,
|
||||
return cfg;
|
||||
}
|
||||
|
||||
-static void writeDefault(FILE * out, char * indent,
|
||||
+static void writeDefault(FILE * out, char * indent,
|
||||
char * separator, struct grubConfig * cfg) {
|
||||
struct singleEntry * entry;
|
||||
struct singleLine * line;
|
||||
int i;
|
||||
|
||||
- if (!cfg->defaultImage && cfg->flags == GRUB_CONFIG_NO_DEFAULT) return;
|
||||
+ if (!cfg->defaultImage && cfg->flags == GRUB_CONFIG_NO_DEFAULT)
|
||||
+ return;
|
||||
|
||||
if (cfg->defaultImage == DEFAULT_SAVED)
|
||||
fprintf(out, "%sdefault%ssaved\n", indent, separator);
|
||||
@@ -1540,34 +1541,40 @@ static void writeDefault(FILE * out, char * indent,
|
||||
fprintf(out, "%sset default=\"%d\"\n", indent,
|
||||
cfg->defaultImage);
|
||||
} else {
|
||||
- fprintf(out, "%sdefault%s%d\n", indent, separator,
|
||||
+ fprintf(out, "%sdefault%s%d\n", indent, separator,
|
||||
cfg->defaultImage);
|
||||
}
|
||||
} else {
|
||||
int image = cfg->defaultImage;
|
||||
|
||||
entry = cfg->entries;
|
||||
- while (entry && entry->skip) entry = entry->next;
|
||||
+ while (entry && entry->skip)
|
||||
+ entry = entry->next;
|
||||
|
||||
i = 0;
|
||||
while (entry && i < image) {
|
||||
entry = entry->next;
|
||||
|
||||
- while (entry && entry->skip) entry = entry->next;
|
||||
+ while (entry && entry->skip)
|
||||
+ entry = entry->next;
|
||||
i++;
|
||||
}
|
||||
|
||||
- if (!entry) return;
|
||||
+ if (!entry)
|
||||
+ return;
|
||||
|
||||
line = getLineByType(LT_TITLE, entry->lines);
|
||||
|
||||
if (line && line->numElements >= 2)
|
||||
- fprintf(out, "%sdefault%s%s\n", indent, separator,
|
||||
+ fprintf(out, "%sdefault%s%s\n", indent, separator,
|
||||
line->elements[1].item);
|
||||
- else if (line && (line->numElements == 1) &&
|
||||
+ else if (line && (line->numElements == 1) &&
|
||||
cfg->cfi->titleBracketed) {
|
||||
- fprintf(out, "%sdefault%s%s\n", indent, separator,
|
||||
- extractTitle(cfg, line));
|
||||
+ char *title = extractTitle(cfg, line);
|
||||
+ if (title) {
|
||||
+ fprintf(out, "%sdefault%s%s\n", indent, separator, title);
|
||||
+ free(title);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
}
|
||||
--
|
||||
2.17.1
|
||||
|
@ -1,72 +0,0 @@
|
||||
From ed5e255c023c9b78120d9ff2246d6516f652d4b7 Mon Sep 17 00:00:00 2001
|
||||
From: Javier Martinez Canillas <javierm@redhat.com>
|
||||
Date: Mon, 10 Feb 2020 19:32:39 +0100
|
||||
Subject: [PATCH] Fix stringop-overflow warning
|
||||
|
||||
GCC gives the following compile warning:
|
||||
|
||||
grubby.c: In function 'main':
|
||||
grubby.c:4508:27: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=]
|
||||
4508 | saved_command_line[0] = '\0';
|
||||
| ~~~~~~~~~~~~~~~~~~~~~~^~~~~~
|
||||
grubby.c:4503:26: note: at offset 0 to an object with size 0 allocated by 'malloc' here
|
||||
4503 | saved_command_line = malloc(i);
|
||||
| ^~~~~~~~~
|
||||
cc1: all warnings being treated as errors
|
||||
make: *** [Makefile:38: grubby.o] Error 1
|
||||
|
||||
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
||||
---
|
||||
grubby.c | 35 +++++++++++++++++++----------------
|
||||
1 file changed, 19 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index 5ca689539cf..0c0f67a0ae5 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -4500,23 +4500,26 @@ int main(int argc, const char ** argv) {
|
||||
int i = 0;
|
||||
for (int j = 1; j < argc; j++)
|
||||
i += strlen(argv[j]) + 1;
|
||||
- saved_command_line = malloc(i);
|
||||
- if (!saved_command_line) {
|
||||
- fprintf(stderr, "grubby: %m\n");
|
||||
- exit(1);
|
||||
- }
|
||||
- saved_command_line[0] = '\0';
|
||||
- int cmdline_len = 0, arg_len;
|
||||
- for (int j = 1; j < argc; j++) {
|
||||
- arg_len = strlen(argv[j]);
|
||||
- memcpy(saved_command_line + cmdline_len, argv[j], arg_len);
|
||||
- cmdline_len += arg_len;
|
||||
- if (j != argc - 1) {
|
||||
- memcpy(saved_command_line + cmdline_len, " ", 1);
|
||||
- cmdline_len++;
|
||||
- }
|
||||
+
|
||||
+ if (i > 0) {
|
||||
+ saved_command_line = malloc(i);
|
||||
+ if (!saved_command_line) {
|
||||
+ fprintf(stderr, "grubby: %m\n");
|
||||
+ exit(1);
|
||||
+ }
|
||||
+ saved_command_line[0] = '\0';
|
||||
+ int cmdline_len = 0, arg_len;
|
||||
+ for (int j = 1; j < argc; j++) {
|
||||
+ arg_len = strlen(argv[j]);
|
||||
+ memcpy(saved_command_line + cmdline_len, argv[j], arg_len);
|
||||
+ cmdline_len += arg_len;
|
||||
+ if (j != argc - 1) {
|
||||
+ memcpy(saved_command_line + cmdline_len, " ", 1);
|
||||
+ cmdline_len++;
|
||||
+ }
|
||||
+ }
|
||||
+ saved_command_line[cmdline_len] = '\0';
|
||||
}
|
||||
- saved_command_line[cmdline_len] = '\0';
|
||||
|
||||
optCon = poptGetContext("grubby", argc, argv, options, 0);
|
||||
poptReadDefaultConfig(optCon, 1);
|
||||
--
|
||||
2.24.1
|
||||
|
@ -1,35 +0,0 @@
|
||||
From ee9f80190d4c458a09309fbd9a88d2756dc2d3fa Mon Sep 17 00:00:00 2001
|
||||
From: Javier Martinez Canillas <javierm@redhat.com>
|
||||
Date: Mon, 10 Feb 2020 20:13:13 +0100
|
||||
Subject: [PATCH] Fix maybe-uninitialized warning
|
||||
|
||||
GCC gives the following compile warning:
|
||||
|
||||
grubby.c: In function 'suseGrubConfGetBoot':
|
||||
grubby.c:2770:5: error: 'grubDevice' may be used uninitialized in this function [-Werror=maybe-uninitialized]
|
||||
2770 | free(grubDevice);
|
||||
| ^~~~~~~~~~~~~~~~
|
||||
cc1: all warnings being treated as errors
|
||||
make: *** [Makefile:38: grubby.o] Error 1
|
||||
|
||||
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
||||
---
|
||||
grubby.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index 0c0f67a0ae5..779c25a2bf9 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -2755,7 +2755,7 @@ int grubGetBootFromDeviceMap(const char * device,
|
||||
}
|
||||
|
||||
int suseGrubConfGetBoot(const char * path, char ** bootPtr) {
|
||||
- char * grubDevice;
|
||||
+ char * grubDevice = NULL;
|
||||
|
||||
if (suseGrubConfGetInstallDevice(path, &grubDevice))
|
||||
dbgPrintf("error looking for grub installation device\n");
|
||||
--
|
||||
2.24.1
|
||||
|
@ -0,0 +1,42 @@
|
||||
From 3a0171fd435765161406238c8df6f66e859ddd93 Mon Sep 17 00:00:00 2001
|
||||
From: Don Zickus <dzickus@redhat.com>
|
||||
Date: Wed, 22 Jul 2015 13:58:53 -0400
|
||||
Subject: [PATCH 12/55] ppc64le sync grub.cfg changes to disk (#1212114)
|
||||
|
||||
After installing a new kernel, if a panic is induced, not all the kernel
|
||||
pieces are on the disk (most importantly the grub.cfg changes). This can
|
||||
lead to a hung system on a reboot because the older kernel can not be found.
|
||||
|
||||
Address this by forcing all the changes (mainly the fs meta data) to disk
|
||||
before finishing the kernel package installation.
|
||||
|
||||
Tested by 'yum install kernel-...; echo c > /proc/sysrq-trigger'.
|
||||
|
||||
Before, the machine would panic and on reboot be stuck without a grub.cfg
|
||||
to read. After, works as expected.
|
||||
|
||||
Resolves: rhbz#1212114
|
||||
---
|
||||
new-kernel-pkg | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/new-kernel-pkg b/new-kernel-pkg
|
||||
index 1f6ab39499f..90652da06b7 100755
|
||||
--- a/new-kernel-pkg
|
||||
+++ b/new-kernel-pkg
|
||||
@@ -927,4 +927,12 @@ fi
|
||||
# if we mounted the U-Boot directory, unmount it.
|
||||
[ -n "$mounted" ] && umount $ubootDir
|
||||
|
||||
+# make sure changes make it to the disk.
|
||||
+# if /boot is a mountpoint, force the meta data on disk
|
||||
+# to by-pass writeback delay.
|
||||
+# PPC64LE-only to deal with Petitboot issues
|
||||
+if [ "$ARCH" = "ppc64le" ]; then
|
||||
+ sync && mountpoint -q /boot &&fsfreeze -f /boot && fsfreeze -u /boot
|
||||
+fi
|
||||
+
|
||||
exit 0
|
||||
--
|
||||
2.17.1
|
||||
|
@ -1,28 +0,0 @@
|
||||
From 1afddd618629a97479560bedbdcfa11b2c492a0e Mon Sep 17 00:00:00 2001
|
||||
From: Javier Martinez Canillas <javierm@redhat.com>
|
||||
Date: Fri, 26 Jun 2020 10:02:51 +0200
|
||||
Subject: [PATCH] Fix build with rpm-4.16
|
||||
|
||||
rpmvercmp() was moved to librpmio, so link against this library instead.
|
||||
|
||||
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
||||
---
|
||||
Makefile | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 1ab58aeb039..a54b053a30b 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -59,7 +59,7 @@ grubby:: $(OBJECTS)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(grubby_LIBS)
|
||||
|
||||
rpm-sort::rpm-sort.o
|
||||
- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ -lrpm
|
||||
+ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ -lrpmio
|
||||
|
||||
clean:
|
||||
rm -f *.o grubby rpm-sort *~
|
||||
--
|
||||
2.26.2
|
||||
|
@ -0,0 +1,38 @@
|
||||
From 92adaf4e655c3e6833e6f3b96fe1f5b75f75fd64 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Thu, 6 Aug 2015 10:06:13 -0400
|
||||
Subject: [PATCH 13/55] Make it possible to run "test.sh --verbose" from the
|
||||
make command line.
|
||||
|
||||
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||
---
|
||||
Makefile | 6 +++++-
|
||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index ade4421aa25..cc7e823959f 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -26,6 +26,10 @@ CC = gcc
|
||||
RPM_OPT_FLAGS ?= -O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector
|
||||
CFLAGS += $(RPM_OPT_FLAGS) -std=gnu99 -Wall -Werror -Wno-error=unused-function -Wno-unused-function -ggdb
|
||||
LDFLAGS :=
|
||||
+VERBOSE_TEST :=
|
||||
+ifneq ($(VERBOSE_TEST),)
|
||||
+ VERBOSE_TEST="--verbose"
|
||||
+endif
|
||||
|
||||
grubby_LIBS = -lblkid -lpopt
|
||||
|
||||
@@ -39,7 +43,7 @@ debug : clean
|
||||
|
||||
test: all
|
||||
@export TOPDIR=$(TOPDIR)
|
||||
- @./test.sh
|
||||
+ @./test.sh $(VERBOSE_TEST)
|
||||
|
||||
install: all
|
||||
mkdir -p $(DESTDIR)$(PREFIX)/sbin
|
||||
--
|
||||
2.17.1
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,586 @@
|
||||
From 5c8744420dfc891b2422db8f0be4bad2368f9970 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Thu, 6 Aug 2015 10:07:11 -0400
|
||||
Subject: [PATCH 15/55] Make SET_VARIABLE get handled individually in
|
||||
GetNextLine()
|
||||
|
||||
Resolves: rhbz#1152550
|
||||
|
||||
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||
---
|
||||
grubby.c | 119 ++++++++++++++++++++++-----
|
||||
.gitignore | 2 +
|
||||
test.sh | 8 ++
|
||||
test/grub2.16 | 156 +++++++++++++++++++++++++++++++++++
|
||||
test/results/add/g2-1.16 | 170 +++++++++++++++++++++++++++++++++++++++
|
||||
5 files changed, 433 insertions(+), 22 deletions(-)
|
||||
create mode 100644 test/grub2.16
|
||||
create mode 100644 test/results/add/g2-1.16
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index fe6595b8386..d66c1c5a40a 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -75,6 +75,7 @@ struct lineElement {
|
||||
};
|
||||
|
||||
enum lineType_e {
|
||||
+ LT_UNIDENTIFIED = 0,
|
||||
LT_WHITESPACE = 1 << 0,
|
||||
LT_TITLE = 1 << 1,
|
||||
LT_KERNEL = 1 << 2,
|
||||
@@ -747,6 +748,33 @@ static char *sdupprintf(const char *format, ...)
|
||||
return buf;
|
||||
}
|
||||
|
||||
+static inline int
|
||||
+kwcmp(struct keywordTypes *kw, const char * label, int case_insensitive)
|
||||
+{
|
||||
+ int kwl = strlen(kw->key);
|
||||
+ int ll = strlen(label);
|
||||
+ int rc;
|
||||
+ int (*snc)(const char *s1, const char *s2, size_t n) =
|
||||
+ case_insensitive ? strncasecmp : strncmp;
|
||||
+ int (*sc)(const char *s1, const char *s2) =
|
||||
+ case_insensitive ? strcasecmp : strcmp;
|
||||
+
|
||||
+ rc = snc(kw->key, label, kwl);
|
||||
+ if (rc)
|
||||
+ return rc;
|
||||
+
|
||||
+ for (int i = kwl; i < ll; i++) {
|
||||
+ if (isspace(label[i]))
|
||||
+ return 0;
|
||||
+ if (kw->separatorChar && label[i] == kw->separatorChar)
|
||||
+ return 0;
|
||||
+ else if (kw->nextChar && label[i] == kw->nextChar)
|
||||
+ return 0;
|
||||
+ return sc(kw->key+kwl, label+kwl);
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static enum lineType_e preferredLineType(enum lineType_e type,
|
||||
struct configFileInfo *cfi)
|
||||
{
|
||||
@@ -812,13 +840,8 @@ static enum lineType_e getTypeByKeyword(char *keyword,
|
||||
struct configFileInfo *cfi)
|
||||
{
|
||||
for (struct keywordTypes * kw = cfi->keywords; kw->key; kw++) {
|
||||
- if (cfi->caseInsensitive) {
|
||||
- if (!strcasecmp(keyword, kw->key))
|
||||
- return kw->type;
|
||||
- } else {
|
||||
- if (!strcmp(keyword, kw->key))
|
||||
- return kw->type;
|
||||
- }
|
||||
+ if (!kwcmp(kw, keyword, cfi->caseInsensitive))
|
||||
+ return kw->type;
|
||||
}
|
||||
return LT_UNKNOWN;
|
||||
}
|
||||
@@ -913,6 +936,7 @@ static int readFile(int fd, char **bufPtr)
|
||||
|
||||
static void lineInit(struct singleLine *line)
|
||||
{
|
||||
+ line->type = LT_UNIDENTIFIED;
|
||||
line->indent = NULL;
|
||||
line->elements = NULL;
|
||||
line->numElements = 0;
|
||||
@@ -995,7 +1019,7 @@ static int lineWrite(FILE * out, struct singleLine *line,
|
||||
|
||||
if (fprintf(out, "%s", line->elements[i].item) == -1)
|
||||
return -1;
|
||||
- if (i < line->numElements - 1)
|
||||
+ if (i < line->numElements - 1 || line->type == LT_SET_VARIABLE)
|
||||
if (fprintf(out, "%s", line->elements[i].indent) == -1)
|
||||
return -1;
|
||||
}
|
||||
@@ -1050,6 +1074,8 @@ static int getNextLine(char **bufPtr, struct singleLine *line,
|
||||
break;
|
||||
chptr++;
|
||||
}
|
||||
+ if (line->type == LT_UNIDENTIFIED)
|
||||
+ line->type = getTypeByKeyword(start, cfi);
|
||||
element->item = strndup(start, chptr - start);
|
||||
start = chptr;
|
||||
|
||||
@@ -1115,7 +1141,7 @@ static int getNextLine(char **bufPtr, struct singleLine *line,
|
||||
line->type = LT_WHITESPACE;
|
||||
line->numElements = 0;
|
||||
}
|
||||
- } else {
|
||||
+ } else if (line->type == LT_INITRD) {
|
||||
struct keywordTypes *kw;
|
||||
|
||||
kw = getKeywordByType(line->type, cfi);
|
||||
@@ -1177,6 +1203,39 @@ static int getNextLine(char **bufPtr, struct singleLine *line,
|
||||
}
|
||||
}
|
||||
}
|
||||
+ } else if (line->type == LT_SET_VARIABLE) {
|
||||
+ /* and if it's a "set blah=" we need to split it
|
||||
+ * yet a third way to avoid rhbz# XXX FIXME :/
|
||||
+ */
|
||||
+ char *eq;
|
||||
+ int l;
|
||||
+ int numElements = line->numElements;
|
||||
+ struct lineElement *newElements;
|
||||
+ eq = strchr(line->elements[1].item, '=');
|
||||
+ if (!eq)
|
||||
+ return 0;
|
||||
+ l = eq - line->elements[1].item;
|
||||
+ if (eq[1] != 0)
|
||||
+ numElements++;
|
||||
+ newElements = calloc(numElements,sizeof (*newElements));
|
||||
+ memcpy(&newElements[0], &line->elements[0],
|
||||
+ sizeof (newElements[0]));
|
||||
+ newElements[1].item =
|
||||
+ strndup(line->elements[1].item, l);
|
||||
+ newElements[1].indent = "=";
|
||||
+ *(eq++) = '\0';
|
||||
+ newElements[2].item = strdup(eq);
|
||||
+ free(line->elements[1].item);
|
||||
+ if (line->elements[1].indent)
|
||||
+ newElements[2].indent = line->elements[1].indent;
|
||||
+ for (int i = 2; i < line->numElements; i++) {
|
||||
+ newElements[i+1].item = line->elements[i].item;
|
||||
+ newElements[i+1].indent =
|
||||
+ line->elements[i].indent;
|
||||
+ }
|
||||
+ free(line->elements);
|
||||
+ line->elements = newElements;
|
||||
+ line->numElements = numElements;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1282,13 +1341,12 @@ static struct grubConfig *readConfig(const char *inName,
|
||||
getKeywordByType(LT_DEFAULT, cfi);
|
||||
if (kwType && line->numElements == 3
|
||||
&& !strcmp(line->elements[1].item, kwType->key)
|
||||
- && !is_special_grub2_variable(line->elements[2].
|
||||
- item)) {
|
||||
+ && !is_special_grub2_variable(
|
||||
+ line->elements[2].item)) {
|
||||
dbgPrintf("Line sets default config\n");
|
||||
cfg->flags &= ~GRUB_CONFIG_NO_DEFAULT;
|
||||
defaultLine = line;
|
||||
}
|
||||
-
|
||||
} else if (iskernel(line->type)) {
|
||||
/* if by some freak chance this is multiboot and the
|
||||
* "module" lines came earlier in the template, make
|
||||
@@ -1542,16 +1600,33 @@ static struct grubConfig *readConfig(const char *inName,
|
||||
}
|
||||
}
|
||||
} else if (cfi->defaultIsVariable) {
|
||||
- char *value = defaultLine->elements[2].item;
|
||||
- while (*value && (*value == '"' || *value == '\'' ||
|
||||
- *value == ' ' || *value == '\t'))
|
||||
- value++;
|
||||
- cfg->defaultImage = strtol(value, &end, 10);
|
||||
- while (*end && (*end == '"' || *end == '\'' ||
|
||||
- *end == ' ' || *end == '\t'))
|
||||
- end++;
|
||||
- if (*end)
|
||||
- cfg->defaultImage = -1;
|
||||
+ if (defaultLine->numElements == 2) {
|
||||
+ char *value = defaultLine->elements[1].item + 8;
|
||||
+ while (*value && (*value == '"' ||
|
||||
+ *value == '\'' ||
|
||||
+ *value == ' ' ||
|
||||
+ *value == '\t'))
|
||||
+ value++;
|
||||
+ cfg->defaultImage = strtol(value, &end, 10);
|
||||
+ while (*end && (*end == '"' || *end == '\'' ||
|
||||
+ *end == ' ' || *end == '\t'))
|
||||
+ end++;
|
||||
+ if (*end)
|
||||
+ cfg->defaultImage = -1;
|
||||
+ } else if (defaultLine->numElements == 3) {
|
||||
+ char *value = defaultLine->elements[2].item;
|
||||
+ while (*value && (*value == '"' ||
|
||||
+ *value == '\'' ||
|
||||
+ *value == ' ' ||
|
||||
+ *value == '\t'))
|
||||
+ value++;
|
||||
+ cfg->defaultImage = strtol(value, &end, 10);
|
||||
+ while (*end && (*end == '"' || *end == '\'' ||
|
||||
+ *end == ' ' || *end == '\t'))
|
||||
+ end++;
|
||||
+ if (*end)
|
||||
+ cfg->defaultImage = -1;
|
||||
+ }
|
||||
} else if (cfi->defaultSupportSaved &&
|
||||
!strncmp(defaultLine->elements[1].item, "saved",
|
||||
5)) {
|
||||
diff --git a/.gitignore b/.gitignore
|
||||
index e64d3bc0986..e78a392d601 100644
|
||||
--- a/.gitignore
|
||||
+++ b/.gitignore
|
||||
@@ -1,3 +1,5 @@
|
||||
grubby
|
||||
version.h
|
||||
*.o
|
||||
+core.*
|
||||
+vgcore.*
|
||||
diff --git a/test.sh b/test.sh
|
||||
index 2985fd62bf9..cd2d8707b5f 100755
|
||||
--- a/test.sh
|
||||
+++ b/test.sh
|
||||
@@ -543,6 +543,14 @@ if [ "$testgrub2" == "y" ]; then
|
||||
--copy-default --title "Fedora 21 Rescue" --args=root=/fooooo \
|
||||
--remove-kernel=wtf --boot-filesystem=/boot/ --efi
|
||||
|
||||
+ # a grub2 add with a "set" of the form: set foo="bar=1,2". bz#1152550
|
||||
+ # has this being emitted as: set foo="bar=1,2"=1,2"
|
||||
+ # which is wrong.
|
||||
+ grub2Test grub2.16 add/g2-1.16 \
|
||||
+ --add-kernel=/boot/vmlinuz-foo \
|
||||
+ --copy-default --title 'Red Hat Enterprise Linux Server' \
|
||||
+ --args=root=/dev/mapper/foo--
|
||||
+
|
||||
testing="GRUB2 add initrd"
|
||||
grub2Test grub2.2 add/g2-1.4 --update-kernel=/boot/new-kernel.img \
|
||||
--initrd=/boot/new-initrd --boot-filesystem=/boot/
|
||||
diff --git a/test/grub2.16 b/test/grub2.16
|
||||
new file mode 100644
|
||||
index 00000000000..136880a61ee
|
||||
--- /dev/null
|
||||
+++ b/test/grub2.16
|
||||
@@ -0,0 +1,156 @@
|
||||
+#
|
||||
+# DO NOT EDIT THIS FILE
|
||||
+#
|
||||
+# It is automatically generated by grub2-mkconfig using templates
|
||||
+# from /etc/grub.d and settings from /etc/default/grub
|
||||
+#
|
||||
+
|
||||
+### BEGIN /etc/grub.d/00_header ###
|
||||
+set pager=1
|
||||
+
|
||||
+if [ -s $prefix/grubenv ]; then
|
||||
+ load_env
|
||||
+fi
|
||||
+if [ "${next_entry}" ] ; then
|
||||
+ set default="${next_entry}"
|
||||
+ set next_entry=
|
||||
+ save_env next_entry
|
||||
+ set boot_once=true
|
||||
+else
|
||||
+ set default="${saved_entry}"
|
||||
+fi
|
||||
+
|
||||
+if [ x"${feature_menuentry_id}" = xy ]; then
|
||||
+ menuentry_id_option="--id"
|
||||
+else
|
||||
+ menuentry_id_option=""
|
||||
+fi
|
||||
+
|
||||
+export menuentry_id_option
|
||||
+
|
||||
+if [ "${prev_saved_entry}" ]; then
|
||||
+ set saved_entry="${prev_saved_entry}"
|
||||
+ save_env saved_entry
|
||||
+ set prev_saved_entry=
|
||||
+ save_env prev_saved_entry
|
||||
+ set boot_once=true
|
||||
+fi
|
||||
+
|
||||
+function savedefault {
|
||||
+ if [ -z "${boot_once}" ]; then
|
||||
+ saved_entry="${chosen}"
|
||||
+ save_env saved_entry
|
||||
+ fi
|
||||
+}
|
||||
+
|
||||
+function load_video {
|
||||
+ if [ x$feature_all_video_module = xy ]; then
|
||||
+ insmod all_video
|
||||
+ else
|
||||
+ insmod efi_gop
|
||||
+ insmod efi_uga
|
||||
+ insmod ieee1275_fb
|
||||
+ insmod vbe
|
||||
+ insmod vga
|
||||
+ insmod video_bochs
|
||||
+ insmod video_cirrus
|
||||
+ fi
|
||||
+}
|
||||
+
|
||||
+serial --speed=115200
|
||||
+terminal_input serial console
|
||||
+terminal_output serial console
|
||||
+if [ x$feature_timeout_style = xy ] ; then
|
||||
+ set timeout_style=menu
|
||||
+ set timeout=5
|
||||
+# Fallback normal timeout code in case the timeout_style feature is
|
||||
+# unavailable.
|
||||
+else
|
||||
+ set timeout=5
|
||||
+fi
|
||||
+### END /etc/grub.d/00_header ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/00_tuned ###
|
||||
+set tuned_params="isolcpus=1,3"
|
||||
+### END /etc/grub.d/00_tuned ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/01_users ###
|
||||
+if [ -f ${prefix}/user.cfg ]; then
|
||||
+ source ${prefix}/user.cfg
|
||||
+ if [ -n ${GRUB2_PASSWORD} ]; then
|
||||
+ set superusers="root"
|
||||
+ export superusers
|
||||
+ password_pbkdf2 root ${GRUB2_PASSWORD}
|
||||
+ fi
|
||||
+fi
|
||||
+### END /etc/grub.d/01_users ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/10_linux ###
|
||||
+menuentry 'Red Hat Enterprise Linux Server (3.10.0-297.el7.x86_64) 7.2 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-296.el7.x86_64-advanced-ae7b3742-9092-4432-9f7f-8abdbf0dc3db' {
|
||||
+ load_video
|
||||
+ set gfxpayload=keep
|
||||
+ insmod gzio
|
||||
+ insmod part_msdos
|
||||
+ insmod xfs
|
||||
+ set root='hd0,msdos1'
|
||||
+ if [ x$feature_platform_search_hint = xy ]; then
|
||||
+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' cae02b39-f239-4d26-9032-674d261c93d8
|
||||
+ else
|
||||
+ search --no-floppy --fs-uuid --set=root cae02b39-f239-4d26-9032-674d261c93d8
|
||||
+ fi
|
||||
+ linux16 /vmlinuz-3.10.0-297.el7.x86_64 root=/dev/mapper/rhel_hp--dl380pgen8--02--vm--10-root ro crashkernel=auto rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/root rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/swap console=ttyS0,115200n81 $tuned_params LANG=en_US.UTF-8
|
||||
+}
|
||||
+menuentry 'Red Hat Enterprise Linux Server (3.10.0-296.el7.x86_64) 7.2 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-296.el7.x86_64-advanced-ae7b3742-9092-4432-9f7f-8abdbf0dc3db' {
|
||||
+ load_video
|
||||
+ set gfxpayload=keep
|
||||
+ insmod gzio
|
||||
+ insmod part_msdos
|
||||
+ insmod xfs
|
||||
+ set root='hd0,msdos1'
|
||||
+ if [ x$feature_platform_search_hint = xy ]; then
|
||||
+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' cae02b39-f239-4d26-9032-674d261c93d8
|
||||
+ else
|
||||
+ search --no-floppy --fs-uuid --set=root cae02b39-f239-4d26-9032-674d261c93d8
|
||||
+ fi
|
||||
+ linux16 /vmlinuz-3.10.0-296.el7.x86_64 root=/dev/mapper/rhel_hp--dl380pgen8--02--vm--10-root ro crashkernel=auto rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/root rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/swap console=ttyS0,115200n81 $tuned_params
|
||||
+ initrd16 /initramfs-3.10.0-296.el7.x86_64.img
|
||||
+}
|
||||
+menuentry 'Red Hat Enterprise Linux Server (0-rescue-cc21b92886f9ebbd3ed5a494639b7fd7) 7.2 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-cc21b92886f9ebbd3ed5a494639b7fd7-advanced-ae7b3742-9092-4432-9f7f-8abdbf0dc3db' {
|
||||
+ load_video
|
||||
+ insmod gzio
|
||||
+ insmod part_msdos
|
||||
+ insmod xfs
|
||||
+ set root='hd0,msdos1'
|
||||
+ if [ x$feature_platform_search_hint = xy ]; then
|
||||
+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' cae02b39-f239-4d26-9032-674d261c93d8
|
||||
+ else
|
||||
+ search --no-floppy --fs-uuid --set=root cae02b39-f239-4d26-9032-674d261c93d8
|
||||
+ fi
|
||||
+ linux16 /vmlinuz-0-rescue-cc21b92886f9ebbd3ed5a494639b7fd7 root=/dev/mapper/rhel_hp--dl380pgen8--02--vm--10-root ro crashkernel=auto rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/root rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/swap console=ttyS0,115200n81 $tuned_params
|
||||
+ initrd16 /initramfs-0-rescue-cc21b92886f9ebbd3ed5a494639b7fd7.img
|
||||
+}
|
||||
+if [ "x$default" = 'Red Hat Enterprise Linux Server (3.10.0-296.el7.x86_64) 7.2 (Maipo)' ]; then default='Advanced options for Red Hat Enterprise Linux Server>Red Hat Enterprise Linux Server (3.10.0-296.el7.x86_64) 7.2 (Maipo)'; fi;
|
||||
+### END /etc/grub.d/10_linux ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/20_linux_xen ###
|
||||
+### END /etc/grub.d/20_linux_xen ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/20_ppc_terminfo ###
|
||||
+### END /etc/grub.d/20_ppc_terminfo ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/30_os-prober ###
|
||||
+### END /etc/grub.d/30_os-prober ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/40_custom ###
|
||||
+# This file provides an easy way to add custom menu entries. Simply type the
|
||||
+# menu entries you want to add after this comment. Be careful not to change
|
||||
+# the 'exec tail' line above.
|
||||
+### END /etc/grub.d/40_custom ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/41_custom ###
|
||||
+if [ -f ${config_directory}/custom.cfg ]; then
|
||||
+ source ${config_directory}/custom.cfg
|
||||
+elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
|
||||
+ source $prefix/custom.cfg;
|
||||
+fi
|
||||
+### END /etc/grub.d/41_custom ###
|
||||
diff --git a/test/results/add/g2-1.16 b/test/results/add/g2-1.16
|
||||
new file mode 100644
|
||||
index 00000000000..fc98757f4fc
|
||||
--- /dev/null
|
||||
+++ b/test/results/add/g2-1.16
|
||||
@@ -0,0 +1,170 @@
|
||||
+#
|
||||
+# DO NOT EDIT THIS FILE
|
||||
+#
|
||||
+# It is automatically generated by grub2-mkconfig using templates
|
||||
+# from /etc/grub.d and settings from /etc/default/grub
|
||||
+#
|
||||
+
|
||||
+### BEGIN /etc/grub.d/00_header ###
|
||||
+set pager=1
|
||||
+
|
||||
+if [ -s $prefix/grubenv ]; then
|
||||
+ load_env
|
||||
+fi
|
||||
+if [ "${next_entry}" ] ; then
|
||||
+ set default="${next_entry}"
|
||||
+ set next_entry=
|
||||
+ save_env next_entry
|
||||
+ set boot_once=true
|
||||
+else
|
||||
+ set default="${saved_entry}"
|
||||
+fi
|
||||
+
|
||||
+if [ x"${feature_menuentry_id}" = xy ]; then
|
||||
+ menuentry_id_option="--id"
|
||||
+else
|
||||
+ menuentry_id_option=""
|
||||
+fi
|
||||
+
|
||||
+export menuentry_id_option
|
||||
+
|
||||
+if [ "${prev_saved_entry}" ]; then
|
||||
+ set saved_entry="${prev_saved_entry}"
|
||||
+ save_env saved_entry
|
||||
+ set prev_saved_entry=
|
||||
+ save_env prev_saved_entry
|
||||
+ set boot_once=true
|
||||
+fi
|
||||
+
|
||||
+function savedefault {
|
||||
+ if [ -z "${boot_once}" ]; then
|
||||
+ saved_entry="${chosen}"
|
||||
+ save_env saved_entry
|
||||
+ fi
|
||||
+}
|
||||
+
|
||||
+function load_video {
|
||||
+ if [ x$feature_all_video_module = xy ]; then
|
||||
+ insmod all_video
|
||||
+ else
|
||||
+ insmod efi_gop
|
||||
+ insmod efi_uga
|
||||
+ insmod ieee1275_fb
|
||||
+ insmod vbe
|
||||
+ insmod vga
|
||||
+ insmod video_bochs
|
||||
+ insmod video_cirrus
|
||||
+ fi
|
||||
+}
|
||||
+
|
||||
+serial --speed=115200
|
||||
+terminal_input serial console
|
||||
+terminal_output serial console
|
||||
+if [ x$feature_timeout_style = xy ] ; then
|
||||
+ set timeout_style=menu
|
||||
+ set timeout=5
|
||||
+# Fallback normal timeout code in case the timeout_style feature is
|
||||
+# unavailable.
|
||||
+else
|
||||
+ set timeout=5
|
||||
+fi
|
||||
+### END /etc/grub.d/00_header ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/00_tuned ###
|
||||
+set tuned_params="isolcpus=1,3"
|
||||
+### END /etc/grub.d/00_tuned ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/01_users ###
|
||||
+if [ -f ${prefix}/user.cfg ]; then
|
||||
+ source ${prefix}/user.cfg
|
||||
+ if [ -n ${GRUB2_PASSWORD} ]; then
|
||||
+ set superusers="root"
|
||||
+ export superusers
|
||||
+ password_pbkdf2 root ${GRUB2_PASSWORD}
|
||||
+ fi
|
||||
+fi
|
||||
+### END /etc/grub.d/01_users ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/10_linux ###
|
||||
+menuentry 'Red Hat Enterprise Linux Server' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-296.el7.x86_64-advanced-ae7b3742-9092-4432-9f7f-8abdbf0dc3db' {
|
||||
+ load_video
|
||||
+ set gfxpayload=keep
|
||||
+ insmod gzio
|
||||
+ insmod part_msdos
|
||||
+ insmod xfs
|
||||
+ set root='hd0,msdos1'
|
||||
+ if [ x$feature_platform_search_hint = xy ]; then
|
||||
+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' cae02b39-f239-4d26-9032-674d261c93d8
|
||||
+ else
|
||||
+ search --no-floppy --fs-uuid --set=root cae02b39-f239-4d26-9032-674d261c93d8
|
||||
+ fi
|
||||
+ linux16 /vmlinuz-foo root=/dev/mapper/foo-- ro crashkernel=auto rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/root rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/swap console=ttyS0,115200n81 $tuned_params LANG=en_US.UTF-8
|
||||
+}
|
||||
+menuentry 'Red Hat Enterprise Linux Server (3.10.0-297.el7.x86_64) 7.2 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-296.el7.x86_64-advanced-ae7b3742-9092-4432-9f7f-8abdbf0dc3db' {
|
||||
+ load_video
|
||||
+ set gfxpayload=keep
|
||||
+ insmod gzio
|
||||
+ insmod part_msdos
|
||||
+ insmod xfs
|
||||
+ set root='hd0,msdos1'
|
||||
+ if [ x$feature_platform_search_hint = xy ]; then
|
||||
+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' cae02b39-f239-4d26-9032-674d261c93d8
|
||||
+ else
|
||||
+ search --no-floppy --fs-uuid --set=root cae02b39-f239-4d26-9032-674d261c93d8
|
||||
+ fi
|
||||
+ linux16 /vmlinuz-3.10.0-297.el7.x86_64 root=/dev/mapper/rhel_hp--dl380pgen8--02--vm--10-root ro crashkernel=auto rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/root rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/swap console=ttyS0,115200n81 $tuned_params LANG=en_US.UTF-8
|
||||
+}
|
||||
+menuentry 'Red Hat Enterprise Linux Server (3.10.0-296.el7.x86_64) 7.2 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-296.el7.x86_64-advanced-ae7b3742-9092-4432-9f7f-8abdbf0dc3db' {
|
||||
+ load_video
|
||||
+ set gfxpayload=keep
|
||||
+ insmod gzio
|
||||
+ insmod part_msdos
|
||||
+ insmod xfs
|
||||
+ set root='hd0,msdos1'
|
||||
+ if [ x$feature_platform_search_hint = xy ]; then
|
||||
+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' cae02b39-f239-4d26-9032-674d261c93d8
|
||||
+ else
|
||||
+ search --no-floppy --fs-uuid --set=root cae02b39-f239-4d26-9032-674d261c93d8
|
||||
+ fi
|
||||
+ linux16 /vmlinuz-3.10.0-296.el7.x86_64 root=/dev/mapper/rhel_hp--dl380pgen8--02--vm--10-root ro crashkernel=auto rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/root rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/swap console=ttyS0,115200n81 $tuned_params
|
||||
+ initrd16 /initramfs-3.10.0-296.el7.x86_64.img
|
||||
+}
|
||||
+menuentry 'Red Hat Enterprise Linux Server (0-rescue-cc21b92886f9ebbd3ed5a494639b7fd7) 7.2 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-cc21b92886f9ebbd3ed5a494639b7fd7-advanced-ae7b3742-9092-4432-9f7f-8abdbf0dc3db' {
|
||||
+ load_video
|
||||
+ insmod gzio
|
||||
+ insmod part_msdos
|
||||
+ insmod xfs
|
||||
+ set root='hd0,msdos1'
|
||||
+ if [ x$feature_platform_search_hint = xy ]; then
|
||||
+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' cae02b39-f239-4d26-9032-674d261c93d8
|
||||
+ else
|
||||
+ search --no-floppy --fs-uuid --set=root cae02b39-f239-4d26-9032-674d261c93d8
|
||||
+ fi
|
||||
+ linux16 /vmlinuz-0-rescue-cc21b92886f9ebbd3ed5a494639b7fd7 root=/dev/mapper/rhel_hp--dl380pgen8--02--vm--10-root ro crashkernel=auto rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/root rd.lvm.lv=rhel_hp-dl380pgen8-02-vm-10/swap console=ttyS0,115200n81 $tuned_params
|
||||
+ initrd16 /initramfs-0-rescue-cc21b92886f9ebbd3ed5a494639b7fd7.img
|
||||
+}
|
||||
+if [ "x$default" = 'Red Hat Enterprise Linux Server (3.10.0-296.el7.x86_64) 7.2 (Maipo)' ]; then default='Advanced options for Red Hat Enterprise Linux Server>Red Hat Enterprise Linux Server (3.10.0-296.el7.x86_64) 7.2 (Maipo)'; fi;
|
||||
+### END /etc/grub.d/10_linux ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/20_linux_xen ###
|
||||
+### END /etc/grub.d/20_linux_xen ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/20_ppc_terminfo ###
|
||||
+### END /etc/grub.d/20_ppc_terminfo ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/30_os-prober ###
|
||||
+### END /etc/grub.d/30_os-prober ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/40_custom ###
|
||||
+# This file provides an easy way to add custom menu entries. Simply type the
|
||||
+# menu entries you want to add after this comment. Be careful not to change
|
||||
+# the 'exec tail' line above.
|
||||
+### END /etc/grub.d/40_custom ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/41_custom ###
|
||||
+if [ -f ${config_directory}/custom.cfg ]; then
|
||||
+ source ${config_directory}/custom.cfg
|
||||
+elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
|
||||
+ source $prefix/custom.cfg;
|
||||
+fi
|
||||
+### END /etc/grub.d/41_custom ###
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,31 @@
|
||||
From c014354834f496ade11dda3f6406cbddbee25f75 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Tue, 1 Sep 2015 11:02:07 -0400
|
||||
Subject: [PATCH 16/55] Specify bootloader directory in the test case for
|
||||
1152550.
|
||||
|
||||
Because otherwise it blows up when built in mock without /boot mounted.
|
||||
|
||||
Related: rhbz#1152550
|
||||
|
||||
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||
---
|
||||
test.sh | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/test.sh b/test.sh
|
||||
index cd2d8707b5f..ba466a50501 100755
|
||||
--- a/test.sh
|
||||
+++ b/test.sh
|
||||
@@ -547,7 +547,7 @@ if [ "$testgrub2" == "y" ]; then
|
||||
# has this being emitted as: set foo="bar=1,2"=1,2"
|
||||
# which is wrong.
|
||||
grub2Test grub2.16 add/g2-1.16 \
|
||||
- --add-kernel=/boot/vmlinuz-foo \
|
||||
+ --boot-filesystem=/boot --add-kernel=/boot/vmlinuz-foo \
|
||||
--copy-default --title 'Red Hat Enterprise Linux Server' \
|
||||
--args=root=/dev/mapper/foo--
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,63 @@
|
||||
From a8fd0f15979d5f4632c337c8bcfbdbae2b957f67 Mon Sep 17 00:00:00 2001
|
||||
From: marcosfrm <marcosfrm@users.noreply.github.com>
|
||||
Date: Tue, 6 Oct 2015 08:29:02 -0300
|
||||
Subject: [PATCH 17/55] Fix dracut cmdline options and conditionalize them to
|
||||
--add-dracut-args
|
||||
|
||||
By default initramfs generated by dracut is HostOnly and has vconsole.conf and locale.conf included. Instead of killing this import section, conditionalize it to --add-dracut-args.
|
||||
|
||||
Reference: http://git.kernel.org/cgit/boot/dracut/dracut.git/tree/modules.d/10i18n/parse-i18n.sh
|
||||
---
|
||||
new-kernel-pkg | 35 ++++++++++++++---------------------
|
||||
1 file changed, 14 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/new-kernel-pkg b/new-kernel-pkg
|
||||
index 90652da06b7..997fb1f4987 100755
|
||||
--- a/new-kernel-pkg
|
||||
+++ b/new-kernel-pkg
|
||||
@@ -825,28 +825,21 @@ if [[ ${ARCH} =~ armv[5|7].*l ]]; then
|
||||
fi
|
||||
[ -n "$verbose" ] && echo "devtreedir is $devtreedir"
|
||||
|
||||
-# add dracut i18n, keyboard and plymouth kernel args if requested
|
||||
-if [ -n "$dracut" -o -n "$adddracutargs" ]; then
|
||||
- if [ -r /etc/vconsole.conf ]; then
|
||||
- . /etc/vconsole.conf
|
||||
- elif [ -r /etc/sysconfig/keyboard ]; then
|
||||
- . /etc/sysconfig/keyboard
|
||||
- fi
|
||||
+# add dracut kernel args if requested
|
||||
+if [ -n "$dracut" -a -n "$adddracutargs" ]; then
|
||||
+ [ -r /etc/vconsole.conf ] && . /etc/vconsole.conf
|
||||
+ [ -r /etc/locale.conf ] && . /etc/locale.conf
|
||||
|
||||
- if [ -r /etc/locale.conf ]; then
|
||||
- . /etc/locale.conf
|
||||
- elif [ -r /etc/sysconfig/i18n ]; then
|
||||
- . /etc/sysconfig/i18n
|
||||
- fi
|
||||
-
|
||||
- for i in SYSFONT SYSFONTACM UNIMAP LANG KEYTABLE; do
|
||||
- val=$(eval echo \$$i)
|
||||
- [ -n "$val" ] && kernargs="$kernargs $i=$val"
|
||||
- done
|
||||
-
|
||||
- if [ -n "$KEYBOARDTYPE" -a "$KEYBOARDTYPE" != "pc" ]; then
|
||||
- kernargs="$kernargs KEYBOARDTYPE=$KEYBOARDTYPE"
|
||||
- fi
|
||||
+ while read opt rd_opt; do
|
||||
+ [ -n "${!opt}" ] && kernargs="$kernargs $rd_opt=\"${!opt}\""
|
||||
+ done <<< 'KEYMAP rd.vconsole.keymap
|
||||
+ FONT rd.vconsole.font
|
||||
+ FONT_MAP rd.vconsole.font.map
|
||||
+ FONT_UNIMAP rd.vconsole.font.unimap
|
||||
+ UNICODE rd.vconsole.font.unicode
|
||||
+ EXT_KEYMAP rd.vconsole.keymap.ext
|
||||
+ LANG rd.locale.LANG
|
||||
+ LC_ALL rd.locale.LC_ALL'
|
||||
fi
|
||||
|
||||
# set this as the default if we have the package and it matches
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,25 @@
|
||||
From 7ee039e026fe02e01dd4c7fd2b18682b8737697c Mon Sep 17 00:00:00 2001
|
||||
From: marcosfrm <marcosfrm@users.noreply.github.com>
|
||||
Date: Tue, 6 Oct 2015 08:40:44 -0300
|
||||
Subject: [PATCH 18/55] Add missing space
|
||||
|
||||
---
|
||||
new-kernel-pkg | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/new-kernel-pkg b/new-kernel-pkg
|
||||
index 997fb1f4987..9f56c470b4a 100755
|
||||
--- a/new-kernel-pkg
|
||||
+++ b/new-kernel-pkg
|
||||
@@ -925,7 +925,7 @@ fi
|
||||
# to by-pass writeback delay.
|
||||
# PPC64LE-only to deal with Petitboot issues
|
||||
if [ "$ARCH" = "ppc64le" ]; then
|
||||
- sync && mountpoint -q /boot &&fsfreeze -f /boot && fsfreeze -u /boot
|
||||
+ sync && mountpoint -q /boot && fsfreeze -f /boot && fsfreeze -u /boot
|
||||
fi
|
||||
|
||||
exit 0
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,123 @@
|
||||
From ae22f8322d2f2dccd19003fccd390fe19f7126c1 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Mon, 26 Oct 2015 14:22:39 -0400
|
||||
Subject: [PATCH 19/55] Always do the "rungrubby --debug" after the normal
|
||||
kernel on install.
|
||||
|
||||
This way the during an update, the right kernel is picked as "default"
|
||||
for the command line arguments.
|
||||
|
||||
Related: rhbz#1212128
|
||||
|
||||
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||
---
|
||||
new-kernel-pkg | 20 ++++++++++----------
|
||||
1 file changed, 10 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/new-kernel-pkg b/new-kernel-pkg
|
||||
index 9f56c470b4a..9574dbbf10b 100755
|
||||
--- a/new-kernel-pkg
|
||||
+++ b/new-kernel-pkg
|
||||
@@ -243,8 +243,8 @@ install() {
|
||||
--args=\"root=$rootdevice $kernargs \$debugargs\" \
|
||||
--remove-kernel=\"TITLE=$title\$debugtitle\""
|
||||
|
||||
- rungrubby --debug ${ARGS}
|
||||
rungrubby ${ARGS} $makedefault
|
||||
+ rungrubby --debug ${ARGS}
|
||||
else
|
||||
[ -n "$verbose" ] && echo "$grubConfig does not exist, not running grubby for grub 0.97"
|
||||
fi
|
||||
@@ -257,8 +257,8 @@ install() {
|
||||
${mbargs:+--mbargs=\"$mbargs\"} \
|
||||
--args=\"root=$rootdevice $kernargs \$debugargs\" \
|
||||
--remove-kernel=\"TITLE=$title\$debugtitle\""
|
||||
- rungrubby --debug ${ARGS}
|
||||
rungrubby ${ARGS} $makedefault
|
||||
+ rungrubby --debug ${ARGS}
|
||||
else
|
||||
[ -n "$verbose" ] && echo "$grub2Config does not exist, not running grubby for grub 2"
|
||||
fi
|
||||
@@ -272,8 +272,8 @@ install() {
|
||||
${mbargs:+--mbargs=\"$mbargs\"} \
|
||||
--args=\"root=$rootdevice $kernargs \$debugargs\" \
|
||||
--remove-kernel=\"TITLE=$title\$debugtitle\""
|
||||
- rungrubby --debug ${ARGS}
|
||||
rungrubby ${ARGS} $makedefault
|
||||
+ rungrubby --debug ${ARGS}
|
||||
else
|
||||
[ -n "$verbose" ] && echo "$grub2EfiConfig does not exist, not running grubby for grub 2 with UEFI"
|
||||
fi
|
||||
@@ -288,8 +288,8 @@ install() {
|
||||
--args=\"root=$rootdevice $kernargs \$debugargs\" \
|
||||
--remove-kernel=\"TITLE=$version\""
|
||||
|
||||
- rungrubby --debug ${ARGS}
|
||||
rungrubby ${ARGS} $makedefault
|
||||
+ rungrubby --debug ${ARGS}
|
||||
if [ -n "$runLilo" ]; then
|
||||
[ -n "$verbose" ] && echo "running $lilo"
|
||||
if [ ! -x $lilo ] ; then
|
||||
@@ -313,8 +313,8 @@ install() {
|
||||
--args=\"root=$rootdevice $kernargs \$debugargs\" \
|
||||
--remove-kernel=\"TITLE=$title\$debugtitle\""
|
||||
|
||||
- rungrubby --debug ${ARGS}
|
||||
rungrubby ${ARGS} $makedefault
|
||||
+ rungrubby --debug ${ARGS}
|
||||
else
|
||||
[ -n "$verbose" ] && echo "$extlinuxConfig does not exist, not running grubby for extlinux"
|
||||
fi
|
||||
@@ -480,8 +480,8 @@ update() {
|
||||
${mbkernel:+--add-multiboot=\"$mbkernel\"} \
|
||||
--title=\"$title\$debugtitle\""
|
||||
|
||||
- rungrubby --debug ${ARGS}
|
||||
rungrubby ${ARGS}
|
||||
+ rungrubby --debug ${ARGS}
|
||||
else
|
||||
[ -n "$verbose" ] && echo "$grubConfig does not exist, not running grubby"
|
||||
fi
|
||||
@@ -493,8 +493,8 @@ update() {
|
||||
${removeargs:+--remove-args=\"$removeargs\"} \
|
||||
--title=\"$title\$debugtitle\""
|
||||
|
||||
- rungrubby --debug ${ARGS}
|
||||
rungrubby ${ARGS}
|
||||
+ rungrubby --debug ${ARGS}
|
||||
else
|
||||
[ -n "$verbose" ] && echo "$grub2Config does not exist, not running grubby"
|
||||
fi
|
||||
@@ -506,8 +506,8 @@ update() {
|
||||
${removeargs:+--remove-args=\"$removeargs\"} \
|
||||
--title=\"$title\$debugtitle\""
|
||||
|
||||
- rungrubby --debug ${ARGS}
|
||||
rungrubby ${ARGS}
|
||||
+ rungrubby --debug ${ARGS}
|
||||
else
|
||||
[ -n "$verbose" ] && echo "$grub2EfiConfig does not exist, not running grubby"
|
||||
fi
|
||||
@@ -519,8 +519,8 @@ update() {
|
||||
${removeargs:+--remove-args=\"$removeargs\"} \
|
||||
--title=\"$title\$debugtitle\""
|
||||
|
||||
- rungrubby --debug ${ARGS}
|
||||
rungrubby ${ARGS}
|
||||
+ rungrubby --debug ${ARGS}
|
||||
|
||||
if [ -n "$runLilo" ]; then
|
||||
[ -n "$verbose" ] && echo "running $lilo"
|
||||
@@ -571,8 +571,8 @@ update() {
|
||||
${removeargs:+--remove-args=\"$removeargs\"} \
|
||||
--title=\"$title\$debugtitle\""
|
||||
|
||||
- rungrubby --debug ${ARGS}
|
||||
rungrubby ${ARGS}
|
||||
+ rungrubby --debug ${ARGS}
|
||||
else
|
||||
[ -n "$verbose" ] && echo "$extlinuxConfig does not exist, not running grubby"
|
||||
fi
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,298 @@
|
||||
From 8efba98644f9262d74a42fac7ea39d197192443a Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Wed, 22 Jun 2016 14:07:49 -0400
|
||||
Subject: [PATCH 20/55] grubby: add --set-index to specify which position to
|
||||
add new entries as
|
||||
|
||||
This adds an option, "--set-index N", to grubby, and will cause creation
|
||||
of any new entry to be at a particular zero-indexed position in the
|
||||
resulting configuration file.
|
||||
|
||||
Related: rhbz#1285601
|
||||
|
||||
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||
---
|
||||
grubby.c | 26 +++++++++++++++++++++-----
|
||||
.gitignore | 1 +
|
||||
grubby.8 | 8 ++++++--
|
||||
test.sh | 14 ++++++++++++++
|
||||
test/grub.15 | 19 +++++++++++++++++++
|
||||
test/results/add/g1.10 | 22 ++++++++++++++++++++++
|
||||
test/results/add/g1.17 | 19 +++++++++++++++++++
|
||||
test/results/add/g1.8 | 22 ++++++++++++++++++++++
|
||||
test/results/add/g1.9 | 22 ++++++++++++++++++++++
|
||||
9 files changed, 146 insertions(+), 7 deletions(-)
|
||||
create mode 100644 test/grub.15
|
||||
create mode 100644 test/results/add/g1.10
|
||||
create mode 100644 test/results/add/g1.17
|
||||
create mode 100644 test/results/add/g1.8
|
||||
create mode 100644 test/results/add/g1.9
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index d66c1c5a40a..54625e7da0a 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -4207,9 +4207,9 @@ int addNewKernel(struct grubConfig *config, struct singleEntry *template,
|
||||
const char *newKernelArgs, const char *newKernelInitrd,
|
||||
const char **extraInitrds, int extraInitrdCount,
|
||||
const char *newMBKernel, const char *newMBKernelArgs,
|
||||
- const char *newDevTreePath)
|
||||
+ const char *newDevTreePath, int newIndex)
|
||||
{
|
||||
- struct singleEntry *new;
|
||||
+ struct singleEntry *new, *entry, *prev = NULL;
|
||||
struct singleLine *newLine = NULL, *tmplLine = NULL, *masterLine = NULL;
|
||||
int needs;
|
||||
char *chptr;
|
||||
@@ -4239,9 +4239,20 @@ int addNewKernel(struct grubConfig *config, struct singleEntry *template,
|
||||
new = malloc(sizeof(*new));
|
||||
new->skip = 0;
|
||||
new->multiboot = 0;
|
||||
- new->next = config->entries;
|
||||
new->lines = NULL;
|
||||
- config->entries = new;
|
||||
+ entry = config->entries;
|
||||
+ for (unsigned int i = 0; i < newIndex; i++) {
|
||||
+ if (!entry)
|
||||
+ break;
|
||||
+ prev = entry;
|
||||
+ entry = entry->next;
|
||||
+ }
|
||||
+ new->next = entry;
|
||||
+
|
||||
+ if (prev)
|
||||
+ prev->next = new;
|
||||
+ else
|
||||
+ config->entries = new;
|
||||
|
||||
/* copy/update from the template */
|
||||
needs = NEED_KERNEL | NEED_TITLE;
|
||||
@@ -4734,6 +4745,7 @@ int main(int argc, const char **argv)
|
||||
char *newDevTreePath = NULL;
|
||||
char *newMBKernel = NULL;
|
||||
char *newMBKernelArgs = NULL;
|
||||
+ int newIndex = 0;
|
||||
char *removeMBKernelArgs = NULL;
|
||||
char *removeMBKernel = NULL;
|
||||
char *bootPrefix = NULL;
|
||||
@@ -4840,6 +4852,9 @@ int main(int argc, const char **argv)
|
||||
{"set-default-index", 0, POPT_ARG_INT, &defaultIndex, 0,
|
||||
_("make the given entry index the default entry"),
|
||||
_("entry-index")},
|
||||
+ {"set-index", 0, POPT_ARG_INT, &newIndex, 0,
|
||||
+ _("use the given index when creating a new entry"),
|
||||
+ _("entry-index")},
|
||||
{"silo", 0, POPT_ARG_NONE, &configureSilo, 0,
|
||||
_("configure silo bootloader")},
|
||||
{"title", 0, POPT_ARG_STRING, &newKernelTitle, 0,
|
||||
@@ -5255,7 +5270,8 @@ int main(int argc, const char **argv)
|
||||
if (addNewKernel(config, template, bootPrefix, newKernelPath,
|
||||
newKernelTitle, newKernelArgs, newKernelInitrd,
|
||||
(const char **)extraInitrds, extraInitrdCount,
|
||||
- newMBKernel, newMBKernelArgs, newDevTreePath))
|
||||
+ newMBKernel, newMBKernelArgs, newDevTreePath,
|
||||
+ newIndex))
|
||||
return 1;
|
||||
|
||||
if (numEntries(config) == 0) {
|
||||
diff --git a/.gitignore b/.gitignore
|
||||
index e78a392d601..1c00ff7c5ed 100644
|
||||
--- a/.gitignore
|
||||
+++ b/.gitignore
|
||||
@@ -3,3 +3,4 @@ version.h
|
||||
*.o
|
||||
core.*
|
||||
vgcore.*
|
||||
+*.tar.*
|
||||
diff --git a/grubby.8 b/grubby.8
|
||||
index 355b6eb6908..a4691f8ddb2 100644
|
||||
--- a/grubby.8
|
||||
+++ b/grubby.8
|
||||
@@ -7,12 +7,12 @@ grubby \- command line tool for configuring grub, lilo, elilo, yaboot and zipl
|
||||
[--bad-image-okay] [--boot-filesystem=\fIbootfs\fR]
|
||||
[--bootloader-probe] [--config-file \fIpath\fR] [--copy-default]
|
||||
[--debug] [--default-kernel] [--default-index] [--default-title]
|
||||
- [--devtree=\fIdevicetree.dtb\fR]
|
||||
+ [--devtree=\fIdevicetree.dtb\fR] [--set-entry=\fIentry-index\fR]
|
||||
[--grub] [--lilo] [--yaboot] [--silo] [--zipl]
|
||||
[--info=\fIkernel-path\fR] [--initrd=\fIinitrd-path\fR]
|
||||
[--make-default] [-o path] [--version]
|
||||
[--remove-kernel=\fIkernel-path\fR] [--remove-args=\fIargs\fR]
|
||||
- [--set-default=\fIkernel-path\fR] [--set-default-index=\fientry-index\fR]
|
||||
+ [--set-default=\fIkernel-path\fR] [--set-default-index=\fIentry-index\fR]
|
||||
[--title=entry-title] [--add-multiboot=\fImultiboot-path\fR]
|
||||
[--mbargs=\fIargs\fR] [--remove-multiboot=\fImultiboot-path\fR]
|
||||
[--remove-mbargs=\fIargs\fR]
|
||||
@@ -48,6 +48,10 @@ with that title are used.
|
||||
\fB-\-add-kernel\fR=\fIkernel-path\fR
|
||||
Add a new boot entry for the kernel located at \fIkernel-path\fR.
|
||||
|
||||
+.TP
|
||||
+\fB-\-set-entry\fR=\fIentry-index\fR
|
||||
+Set the position at which to add a new entry created with \fB-\-add-kernel\fR.
|
||||
+
|
||||
.TP
|
||||
\fB-\-args\fR=\fIkernel-args\fR
|
||||
When a new kernel is added, this specifies the command line arguments
|
||||
diff --git a/test.sh b/test.sh
|
||||
index ba466a50501..7d1794c83df 100755
|
||||
--- a/test.sh
|
||||
+++ b/test.sh
|
||||
@@ -485,6 +485,20 @@ grubTest grub.8 add/g8.2 --add-kernel=/boot/new-kernel.img --title='title' \
|
||||
grubTest grub.11 add/g11.1 --add-kernel=/boot/new-kernel.img --title='title' \
|
||||
--initrd=/boot/new-initrd --boot-filesystem=/boot --copy-default \
|
||||
--args='console=tty0 console=ttyS1,9600n81 single'
|
||||
+grubTest grub.1 add/g1.1 --add-kernel=/boot/new-kernel.img --title='title' \
|
||||
+ --initrd=/boot/new-initrd --boot-filesystem=/ --set-index 0
|
||||
+grubTest grub.1 add/g1.17 --add-kernel=/boot/new-kernel.img --title='title' \
|
||||
+ --initrd=/boot/new-initrd --boot-filesystem=/ --set-index 1
|
||||
+grubTest grub.1 add/g1.17 --add-kernel=/boot/new-kernel.img --title='title' \
|
||||
+ --initrd=/boot/new-initrd --boot-filesystem=/ --set-index 2
|
||||
+grubTest grub.15 add/g1.10 --add-kernel=/boot/new-kernel.img --title='title' \
|
||||
+ --initrd=/boot/new-initrd --boot-filesystem=/ --set-index 0
|
||||
+grubTest grub.15 add/g1.8 --add-kernel=/boot/new-kernel.img --title='title' \
|
||||
+ --initrd=/boot/new-initrd --boot-filesystem=/ --set-index 1
|
||||
+grubTest grub.15 add/g1.9 --add-kernel=/boot/new-kernel.img --title='title' \
|
||||
+ --initrd=/boot/new-initrd --boot-filesystem=/ --set-index 2
|
||||
+grubTest grub.15 add/g1.9 --add-kernel=/boot/new-kernel.img --title='title' \
|
||||
+ --initrd=/boot/new-initrd --boot-filesystem=/ --set-index 5
|
||||
|
||||
testgrub2=n
|
||||
ARCH=$(uname -m | sed s,i[3456789]86,ia32,)
|
||||
diff --git a/test/grub.15 b/test/grub.15
|
||||
new file mode 100644
|
||||
index 00000000000..e1c5f8a9b52
|
||||
--- /dev/null
|
||||
+++ b/test/grub.15
|
||||
@@ -0,0 +1,19 @@
|
||||
+# grub.conf generated by anaconda
|
||||
+#
|
||||
+# Note that you do not have to rerun grub after making changes to this file
|
||||
+# NOTICE: You have a /boot partition. This means that
|
||||
+# all kernel and initrd paths are relative to /boot/, eg.
|
||||
+# root (hd0,0)
|
||||
+# kernel /vmlinuz-version ro root=/dev/sda1
|
||||
+# initrd /initrd-version.img
|
||||
+#boot=/dev/hda
|
||||
+default=1
|
||||
+timeout=10
|
||||
+splashimage=(hd0,0)/grub/splash.xpm.gz
|
||||
+title Red Hat Linux (2.4.7-2)
|
||||
+ root (hd0,0)
|
||||
+ kernel /vmlinuz-2.4.7-2 ro root=/dev/sda1
|
||||
+ initrd /initrd-2.4.7-2.img
|
||||
+title zonk
|
||||
+ kernel /boot/new-kernel.img
|
||||
+ initrd /boot/new-initrd
|
||||
diff --git a/test/results/add/g1.10 b/test/results/add/g1.10
|
||||
new file mode 100644
|
||||
index 00000000000..dcdd8a8ce10
|
||||
--- /dev/null
|
||||
+++ b/test/results/add/g1.10
|
||||
@@ -0,0 +1,22 @@
|
||||
+# grub.conf generated by anaconda
|
||||
+#
|
||||
+# Note that you do not have to rerun grub after making changes to this file
|
||||
+# NOTICE: You have a /boot partition. This means that
|
||||
+# all kernel and initrd paths are relative to /boot/, eg.
|
||||
+# root (hd0,0)
|
||||
+# kernel /vmlinuz-version ro root=/dev/sda1
|
||||
+# initrd /initrd-version.img
|
||||
+#boot=/dev/hda
|
||||
+default=2
|
||||
+timeout=10
|
||||
+splashimage=(hd0,0)/grub/splash.xpm.gz
|
||||
+title title
|
||||
+ kernel /boot/new-kernel.img
|
||||
+ initrd /boot/new-initrd
|
||||
+title Red Hat Linux (2.4.7-2)
|
||||
+ root (hd0,0)
|
||||
+ kernel /vmlinuz-2.4.7-2 ro root=/dev/sda1
|
||||
+ initrd /initrd-2.4.7-2.img
|
||||
+title zonk
|
||||
+ kernel /boot/new-kernel.img
|
||||
+ initrd /boot/new-initrd
|
||||
diff --git a/test/results/add/g1.17 b/test/results/add/g1.17
|
||||
new file mode 100644
|
||||
index 00000000000..6a388228768
|
||||
--- /dev/null
|
||||
+++ b/test/results/add/g1.17
|
||||
@@ -0,0 +1,19 @@
|
||||
+# grub.conf generated by anaconda
|
||||
+#
|
||||
+# Note that you do not have to rerun grub after making changes to this file
|
||||
+# NOTICE: You have a /boot partition. This means that
|
||||
+# all kernel and initrd paths are relative to /boot/, eg.
|
||||
+# root (hd0,0)
|
||||
+# kernel /vmlinuz-version ro root=/dev/sda1
|
||||
+# initrd /initrd-version.img
|
||||
+#boot=/dev/hda
|
||||
+default=1
|
||||
+timeout=10
|
||||
+splashimage=(hd0,0)/grub/splash.xpm.gz
|
||||
+title Red Hat Linux (2.4.7-2)
|
||||
+ root (hd0,0)
|
||||
+ kernel /vmlinuz-2.4.7-2 ro root=/dev/sda1
|
||||
+ initrd /initrd-2.4.7-2.img
|
||||
+title title
|
||||
+ kernel /boot/new-kernel.img
|
||||
+ initrd /boot/new-initrd
|
||||
diff --git a/test/results/add/g1.8 b/test/results/add/g1.8
|
||||
new file mode 100644
|
||||
index 00000000000..5893a2f5af1
|
||||
--- /dev/null
|
||||
+++ b/test/results/add/g1.8
|
||||
@@ -0,0 +1,22 @@
|
||||
+# grub.conf generated by anaconda
|
||||
+#
|
||||
+# Note that you do not have to rerun grub after making changes to this file
|
||||
+# NOTICE: You have a /boot partition. This means that
|
||||
+# all kernel and initrd paths are relative to /boot/, eg.
|
||||
+# root (hd0,0)
|
||||
+# kernel /vmlinuz-version ro root=/dev/sda1
|
||||
+# initrd /initrd-version.img
|
||||
+#boot=/dev/hda
|
||||
+default=2
|
||||
+timeout=10
|
||||
+splashimage=(hd0,0)/grub/splash.xpm.gz
|
||||
+title Red Hat Linux (2.4.7-2)
|
||||
+ root (hd0,0)
|
||||
+ kernel /vmlinuz-2.4.7-2 ro root=/dev/sda1
|
||||
+ initrd /initrd-2.4.7-2.img
|
||||
+title title
|
||||
+ kernel /boot/new-kernel.img
|
||||
+ initrd /boot/new-initrd
|
||||
+title zonk
|
||||
+ kernel /boot/new-kernel.img
|
||||
+ initrd /boot/new-initrd
|
||||
diff --git a/test/results/add/g1.9 b/test/results/add/g1.9
|
||||
new file mode 100644
|
||||
index 00000000000..310623d13d2
|
||||
--- /dev/null
|
||||
+++ b/test/results/add/g1.9
|
||||
@@ -0,0 +1,22 @@
|
||||
+# grub.conf generated by anaconda
|
||||
+#
|
||||
+# Note that you do not have to rerun grub after making changes to this file
|
||||
+# NOTICE: You have a /boot partition. This means that
|
||||
+# all kernel and initrd paths are relative to /boot/, eg.
|
||||
+# root (hd0,0)
|
||||
+# kernel /vmlinuz-version ro root=/dev/sda1
|
||||
+# initrd /initrd-version.img
|
||||
+#boot=/dev/hda
|
||||
+default=2
|
||||
+timeout=10
|
||||
+splashimage=(hd0,0)/grub/splash.xpm.gz
|
||||
+title Red Hat Linux (2.4.7-2)
|
||||
+ root (hd0,0)
|
||||
+ kernel /vmlinuz-2.4.7-2 ro root=/dev/sda1
|
||||
+ initrd /initrd-2.4.7-2.img
|
||||
+title zonk
|
||||
+ kernel /boot/new-kernel.img
|
||||
+ initrd /boot/new-initrd
|
||||
+title title
|
||||
+ kernel /boot/new-kernel.img
|
||||
+ initrd /boot/new-initrd
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,37 @@
|
||||
From 0a4d6c3ae61bd6fd6a664b2b55b3e9453cf813ac Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Thu, 23 Jun 2016 14:47:35 -0400
|
||||
Subject: [PATCH 21/55] Fix thinko on --set-index naming.
|
||||
|
||||
Related: rhbz#1285601
|
||||
|
||||
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||
---
|
||||
grubby.8 | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/grubby.8 b/grubby.8
|
||||
index a4691f8ddb2..f1bfb9336e9 100644
|
||||
--- a/grubby.8
|
||||
+++ b/grubby.8
|
||||
@@ -7,7 +7,7 @@ grubby \- command line tool for configuring grub, lilo, elilo, yaboot and zipl
|
||||
[--bad-image-okay] [--boot-filesystem=\fIbootfs\fR]
|
||||
[--bootloader-probe] [--config-file \fIpath\fR] [--copy-default]
|
||||
[--debug] [--default-kernel] [--default-index] [--default-title]
|
||||
- [--devtree=\fIdevicetree.dtb\fR] [--set-entry=\fIentry-index\fR]
|
||||
+ [--devtree=\fIdevicetree.dtb\fR] [--set-index=\fIentry-index\fR]
|
||||
[--grub] [--lilo] [--yaboot] [--silo] [--zipl]
|
||||
[--info=\fIkernel-path\fR] [--initrd=\fIinitrd-path\fR]
|
||||
[--make-default] [-o path] [--version]
|
||||
@@ -49,7 +49,7 @@ with that title are used.
|
||||
Add a new boot entry for the kernel located at \fIkernel-path\fR.
|
||||
|
||||
.TP
|
||||
-\fB-\-set-entry\fR=\fIentry-index\fR
|
||||
+\fB-\-set-index\fR=\fIentry-index\fR
|
||||
Set the position at which to add a new entry created with \fB-\-add-kernel\fR.
|
||||
|
||||
.TP
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,386 @@
|
||||
From a23da4b29281ca07b06aab0bb772fedfe1f8ce35 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Fri, 24 Jun 2016 16:13:41 -0400
|
||||
Subject: [PATCH 22/55] Add a test case for a failure rmarshall saw in
|
||||
--set-index=
|
||||
|
||||
Related: rhbz#1285601
|
||||
|
||||
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||
---
|
||||
test.sh | 9 ++
|
||||
test/grub2-support_files/grubenv.3 | 3 +
|
||||
test/grub2.18 | 154 ++++++++++++++++++++++++++
|
||||
test/results/add/g2-1.18 | 168 +++++++++++++++++++++++++++++
|
||||
4 files changed, 334 insertions(+)
|
||||
create mode 100644 test/grub2-support_files/grubenv.3
|
||||
create mode 100644 test/grub2.18
|
||||
create mode 100644 test/results/add/g2-1.18
|
||||
|
||||
diff --git a/test.sh b/test.sh
|
||||
index 7d1794c83df..fb7cd2381d5 100755
|
||||
--- a/test.sh
|
||||
+++ b/test.sh
|
||||
@@ -565,6 +565,15 @@ if [ "$testgrub2" == "y" ]; then
|
||||
--copy-default --title 'Red Hat Enterprise Linux Server' \
|
||||
--args=root=/dev/mapper/foo--
|
||||
|
||||
+ # copy a stanza and add arguments as well, while using --set-index=
|
||||
+ testing="GRUB2 add stanza and new args with --set-index="
|
||||
+ grub2Test grub2.18 add/g2-1.18 --env grubenv.3 \
|
||||
+ --add-kernel=/boot/vmlinuz-3.10.0-327.22.2.el7.x86_64.debug \
|
||||
+ --boot-filesystem=/boot --copy-default \
|
||||
+ --title "Red Hat Enterprise Linux Server (3.10.0-327.22.2.el7.x86_64.debug) 7.2 (Maipo) with debugging" \
|
||||
+ --args="root=/dev/mapper/rhel_team--area--222-root systemd.log_level=debug systemd.log_target=kmsg" \
|
||||
+ --set-index=1
|
||||
+
|
||||
testing="GRUB2 add initrd"
|
||||
grub2Test grub2.2 add/g2-1.4 --update-kernel=/boot/new-kernel.img \
|
||||
--initrd=/boot/new-initrd --boot-filesystem=/boot/
|
||||
diff --git a/test/grub2-support_files/grubenv.3 b/test/grub2-support_files/grubenv.3
|
||||
new file mode 100644
|
||||
index 00000000000..b9a8c798328
|
||||
--- /dev/null
|
||||
+++ b/test/grub2-support_files/grubenv.3
|
||||
@@ -0,0 +1,3 @@
|
||||
+# GRUB Environment Block
|
||||
+saved_entry=Red Hat Enterprise Linux Server (3.10.0-327.22.2.el7.x86_64.debug) 7.2 (Maipo) with debugging
|
||||
+#############################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################
|
||||
\ No newline at end of file
|
||||
diff --git a/test/grub2.18 b/test/grub2.18
|
||||
new file mode 100644
|
||||
index 00000000000..529608da773
|
||||
--- /dev/null
|
||||
+++ b/test/grub2.18
|
||||
@@ -0,0 +1,154 @@
|
||||
+#
|
||||
+# DO NOT EDIT THIS FILE
|
||||
+#
|
||||
+# It is automatically generated by grub2-mkconfig using templates
|
||||
+# from /etc/grub.d and settings from /etc/default/grub
|
||||
+#
|
||||
+
|
||||
+### BEGIN /etc/grub.d/00_header ###
|
||||
+set pager=1
|
||||
+
|
||||
+if [ -s $prefix/grubenv ]; then
|
||||
+ load_env
|
||||
+fi
|
||||
+if [ "${next_entry}" ] ; then
|
||||
+ set default="${next_entry}"
|
||||
+ set next_entry=
|
||||
+ save_env next_entry
|
||||
+ set boot_once=true
|
||||
+else
|
||||
+ set default="${saved_entry}"
|
||||
+fi
|
||||
+
|
||||
+if [ x"${feature_menuentry_id}" = xy ]; then
|
||||
+ menuentry_id_option="--id"
|
||||
+else
|
||||
+ menuentry_id_option=""
|
||||
+fi
|
||||
+
|
||||
+export menuentry_id_option
|
||||
+
|
||||
+if [ "${prev_saved_entry}" ]; then
|
||||
+ set saved_entry="${prev_saved_entry}"
|
||||
+ save_env saved_entry
|
||||
+ set prev_saved_entry=
|
||||
+ save_env prev_saved_entry
|
||||
+ set boot_once=true
|
||||
+fi
|
||||
+
|
||||
+function savedefault {
|
||||
+ if [ -z "${boot_once}" ]; then
|
||||
+ saved_entry="${chosen}"
|
||||
+ save_env saved_entry
|
||||
+ fi
|
||||
+}
|
||||
+
|
||||
+function load_video {
|
||||
+ if [ x$feature_all_video_module = xy ]; then
|
||||
+ insmod all_video
|
||||
+ else
|
||||
+ insmod efi_gop
|
||||
+ insmod efi_uga
|
||||
+ insmod ieee1275_fb
|
||||
+ insmod vbe
|
||||
+ insmod vga
|
||||
+ insmod video_bochs
|
||||
+ insmod video_cirrus
|
||||
+ fi
|
||||
+}
|
||||
+
|
||||
+terminal_output console
|
||||
+if [ x$feature_timeout_style = xy ] ; then
|
||||
+ set timeout_style=menu
|
||||
+ set timeout=5
|
||||
+# Fallback normal timeout code in case the timeout_style feature is
|
||||
+# unavailable.
|
||||
+else
|
||||
+ set timeout=5
|
||||
+fi
|
||||
+### END /etc/grub.d/00_header ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/00_tuned ###
|
||||
+set tuned_params=""
|
||||
+### END /etc/grub.d/00_tuned ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/01_users ###
|
||||
+if [ -f ${prefix}/user.cfg ]; then
|
||||
+ source ${prefix}/user.cfg
|
||||
+ if [ -n ${GRUB2_PASSWORD} ]; then
|
||||
+ set superusers="root"
|
||||
+ export superusers
|
||||
+ password_pbkdf2 root ${GRUB2_PASSWORD}
|
||||
+ fi
|
||||
+fi
|
||||
+### END /etc/grub.d/01_users ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/10_linux ###
|
||||
+menuentry 'Red Hat Enterprise Linux Server (3.10.0-327.22.2.el7.x86_64.debug) 7.2 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-91b16928-66bf-4801-8aed-fab3f1a6876c' {
|
||||
+ load_video
|
||||
+ set gfxpayload=keep
|
||||
+ insmod gzio
|
||||
+ insmod part_msdos
|
||||
+ insmod xfs
|
||||
+ set root='hd0,msdos1'
|
||||
+ if [ x$feature_platform_search_hint = xy ]; then
|
||||
+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 7e972fc0-6cf8-4a58-ace6-1b381e52733d
|
||||
+ else
|
||||
+ search --no-floppy --fs-uuid --set=root 7e972fc0-6cf8-4a58-ace6-1b381e52733d
|
||||
+ fi
|
||||
+ linux16 /vmlinuz-3.10.0-327.22.2.el7.x86_64.debug root=/dev/mapper/rhel_team--area--222-root ro crashkernel=auto rd.lvm.lv=rhel_team-area-222/root rd.lvm.lv=rhel_team-area-222/swap rhgb quiet LANG=en_US.UTF-8
|
||||
+}
|
||||
+menuentry 'Red Hat Enterprise Linux Server (3.10.0-327.el7.x86_64) 7.2 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-91b16928-66bf-4801-8aed-fab3f1a6876c' {
|
||||
+ load_video
|
||||
+ set gfxpayload=keep
|
||||
+ insmod gzio
|
||||
+ insmod part_msdos
|
||||
+ insmod xfs
|
||||
+ set root='hd0,msdos1'
|
||||
+ if [ x$feature_platform_search_hint = xy ]; then
|
||||
+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 7e972fc0-6cf8-4a58-ace6-1b381e52733d
|
||||
+ else
|
||||
+ search --no-floppy --fs-uuid --set=root 7e972fc0-6cf8-4a58-ace6-1b381e52733d
|
||||
+ fi
|
||||
+ linux16 /vmlinuz-3.10.0-327.el7.x86_64 root=/dev/mapper/rhel_team--area--222-root ro crashkernel=auto rd.lvm.lv=rhel_team-area-222/root rd.lvm.lv=rhel_team-area-222/swap rhgb quiet LANG=en_US.UTF-8
|
||||
+ initrd16 /initramfs-3.10.0-327.el7.x86_64.img
|
||||
+}
|
||||
+menuentry 'Red Hat Enterprise Linux Server (0-rescue-925cd320373b6a4a9a66a26371afccd2) 7.2 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-925cd320373b6a4a9a66a26371afccd2-advanced-91b16928-66bf-4801-8aed-fab3f1a6876c' {
|
||||
+ load_video
|
||||
+ insmod gzio
|
||||
+ insmod part_msdos
|
||||
+ insmod xfs
|
||||
+ set root='hd0,msdos1'
|
||||
+ if [ x$feature_platform_search_hint = xy ]; then
|
||||
+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 7e972fc0-6cf8-4a58-ace6-1b381e52733d
|
||||
+ else
|
||||
+ search --no-floppy --fs-uuid --set=root 7e972fc0-6cf8-4a58-ace6-1b381e52733d
|
||||
+ fi
|
||||
+ linux16 /vmlinuz-0-rescue-925cd320373b6a4a9a66a26371afccd2 root=/dev/mapper/rhel_team--area--222-root ro crashkernel=auto rd.lvm.lv=rhel_team-area-222/root rd.lvm.lv=rhel_team-area-222/swap rhgb quiet
|
||||
+ initrd16 /initramfs-0-rescue-925cd320373b6a4a9a66a26371afccd2.img
|
||||
+}
|
||||
+
|
||||
+### END /etc/grub.d/10_linux ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/20_linux_xen ###
|
||||
+### END /etc/grub.d/20_linux_xen ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/20_ppc_terminfo ###
|
||||
+### END /etc/grub.d/20_ppc_terminfo ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/30_os-prober ###
|
||||
+### END /etc/grub.d/30_os-prober ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/40_custom ###
|
||||
+# This file provides an easy way to add custom menu entries. Simply type the
|
||||
+# menu entries you want to add after this comment. Be careful not to change
|
||||
+# the 'exec tail' line above.
|
||||
+### END /etc/grub.d/40_custom ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/41_custom ###
|
||||
+if [ -f ${config_directory}/custom.cfg ]; then
|
||||
+ source ${config_directory}/custom.cfg
|
||||
+elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
|
||||
+ source $prefix/custom.cfg;
|
||||
+fi
|
||||
+### END /etc/grub.d/41_custom ###
|
||||
diff --git a/test/results/add/g2-1.18 b/test/results/add/g2-1.18
|
||||
new file mode 100644
|
||||
index 00000000000..ca5fe2393d5
|
||||
--- /dev/null
|
||||
+++ b/test/results/add/g2-1.18
|
||||
@@ -0,0 +1,168 @@
|
||||
+#
|
||||
+# DO NOT EDIT THIS FILE
|
||||
+#
|
||||
+# It is automatically generated by grub2-mkconfig using templates
|
||||
+# from /etc/grub.d and settings from /etc/default/grub
|
||||
+#
|
||||
+
|
||||
+### BEGIN /etc/grub.d/00_header ###
|
||||
+set pager=1
|
||||
+
|
||||
+if [ -s $prefix/grubenv ]; then
|
||||
+ load_env
|
||||
+fi
|
||||
+if [ "${next_entry}" ] ; then
|
||||
+ set default="${next_entry}"
|
||||
+ set next_entry=
|
||||
+ save_env next_entry
|
||||
+ set boot_once=true
|
||||
+else
|
||||
+ set default="${saved_entry}"
|
||||
+fi
|
||||
+
|
||||
+if [ x"${feature_menuentry_id}" = xy ]; then
|
||||
+ menuentry_id_option="--id"
|
||||
+else
|
||||
+ menuentry_id_option=""
|
||||
+fi
|
||||
+
|
||||
+export menuentry_id_option
|
||||
+
|
||||
+if [ "${prev_saved_entry}" ]; then
|
||||
+ set saved_entry="${prev_saved_entry}"
|
||||
+ save_env saved_entry
|
||||
+ set prev_saved_entry=
|
||||
+ save_env prev_saved_entry
|
||||
+ set boot_once=true
|
||||
+fi
|
||||
+
|
||||
+function savedefault {
|
||||
+ if [ -z "${boot_once}" ]; then
|
||||
+ saved_entry="${chosen}"
|
||||
+ save_env saved_entry
|
||||
+ fi
|
||||
+}
|
||||
+
|
||||
+function load_video {
|
||||
+ if [ x$feature_all_video_module = xy ]; then
|
||||
+ insmod all_video
|
||||
+ else
|
||||
+ insmod efi_gop
|
||||
+ insmod efi_uga
|
||||
+ insmod ieee1275_fb
|
||||
+ insmod vbe
|
||||
+ insmod vga
|
||||
+ insmod video_bochs
|
||||
+ insmod video_cirrus
|
||||
+ fi
|
||||
+}
|
||||
+
|
||||
+terminal_output console
|
||||
+if [ x$feature_timeout_style = xy ] ; then
|
||||
+ set timeout_style=menu
|
||||
+ set timeout=5
|
||||
+# Fallback normal timeout code in case the timeout_style feature is
|
||||
+# unavailable.
|
||||
+else
|
||||
+ set timeout=5
|
||||
+fi
|
||||
+### END /etc/grub.d/00_header ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/00_tuned ###
|
||||
+set tuned_params=""
|
||||
+### END /etc/grub.d/00_tuned ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/01_users ###
|
||||
+if [ -f ${prefix}/user.cfg ]; then
|
||||
+ source ${prefix}/user.cfg
|
||||
+ if [ -n ${GRUB2_PASSWORD} ]; then
|
||||
+ set superusers="root"
|
||||
+ export superusers
|
||||
+ password_pbkdf2 root ${GRUB2_PASSWORD}
|
||||
+ fi
|
||||
+fi
|
||||
+### END /etc/grub.d/01_users ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/10_linux ###
|
||||
+menuentry 'Red Hat Enterprise Linux Server (3.10.0-327.22.2.el7.x86_64.debug) 7.2 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-91b16928-66bf-4801-8aed-fab3f1a6876c' {
|
||||
+ load_video
|
||||
+ set gfxpayload=keep
|
||||
+ insmod gzio
|
||||
+ insmod part_msdos
|
||||
+ insmod xfs
|
||||
+ set root='hd0,msdos1'
|
||||
+ if [ x$feature_platform_search_hint = xy ]; then
|
||||
+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 7e972fc0-6cf8-4a58-ace6-1b381e52733d
|
||||
+ else
|
||||
+ search --no-floppy --fs-uuid --set=root 7e972fc0-6cf8-4a58-ace6-1b381e52733d
|
||||
+ fi
|
||||
+ linux16 /vmlinuz-3.10.0-327.22.2.el7.x86_64.debug root=/dev/mapper/rhel_team--area--222-root ro crashkernel=auto rd.lvm.lv=rhel_team-area-222/root rd.lvm.lv=rhel_team-area-222/swap rhgb quiet LANG=en_US.UTF-8
|
||||
+}
|
||||
+menuentry 'Red Hat Enterprise Linux Server (3.10.0-327.22.2.el7.x86_64.debug) 7.2 (Maipo) with debugging' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-91b16928-66bf-4801-8aed-fab3f1a6876c' {
|
||||
+ load_video
|
||||
+ set gfxpayload=keep
|
||||
+ insmod gzio
|
||||
+ insmod part_msdos
|
||||
+ insmod xfs
|
||||
+ set root='hd0,msdos1'
|
||||
+ if [ x$feature_platform_search_hint = xy ]; then
|
||||
+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 7e972fc0-6cf8-4a58-ace6-1b381e52733d
|
||||
+ else
|
||||
+ search --no-floppy --fs-uuid --set=root 7e972fc0-6cf8-4a58-ace6-1b381e52733d
|
||||
+ fi
|
||||
+ linux16 /vmlinuz-3.10.0-327.22.2.el7.x86_64.debug root=/dev/mapper/rhel_team--area--222-root ro crashkernel=auto rd.lvm.lv=rhel_team-area-222/root rd.lvm.lv=rhel_team-area-222/swap rhgb quiet LANG=en_US.UTF-8 systemd.log_level=debug systemd.log_target=kmsg
|
||||
+}
|
||||
+menuentry 'Red Hat Enterprise Linux Server (3.10.0-327.el7.x86_64) 7.2 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-91b16928-66bf-4801-8aed-fab3f1a6876c' {
|
||||
+ load_video
|
||||
+ set gfxpayload=keep
|
||||
+ insmod gzio
|
||||
+ insmod part_msdos
|
||||
+ insmod xfs
|
||||
+ set root='hd0,msdos1'
|
||||
+ if [ x$feature_platform_search_hint = xy ]; then
|
||||
+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 7e972fc0-6cf8-4a58-ace6-1b381e52733d
|
||||
+ else
|
||||
+ search --no-floppy --fs-uuid --set=root 7e972fc0-6cf8-4a58-ace6-1b381e52733d
|
||||
+ fi
|
||||
+ linux16 /vmlinuz-3.10.0-327.el7.x86_64 root=/dev/mapper/rhel_team--area--222-root ro crashkernel=auto rd.lvm.lv=rhel_team-area-222/root rd.lvm.lv=rhel_team-area-222/swap rhgb quiet LANG=en_US.UTF-8
|
||||
+ initrd16 /initramfs-3.10.0-327.el7.x86_64.img
|
||||
+}
|
||||
+menuentry 'Red Hat Enterprise Linux Server (0-rescue-925cd320373b6a4a9a66a26371afccd2) 7.2 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-925cd320373b6a4a9a66a26371afccd2-advanced-91b16928-66bf-4801-8aed-fab3f1a6876c' {
|
||||
+ load_video
|
||||
+ insmod gzio
|
||||
+ insmod part_msdos
|
||||
+ insmod xfs
|
||||
+ set root='hd0,msdos1'
|
||||
+ if [ x$feature_platform_search_hint = xy ]; then
|
||||
+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 7e972fc0-6cf8-4a58-ace6-1b381e52733d
|
||||
+ else
|
||||
+ search --no-floppy --fs-uuid --set=root 7e972fc0-6cf8-4a58-ace6-1b381e52733d
|
||||
+ fi
|
||||
+ linux16 /vmlinuz-0-rescue-925cd320373b6a4a9a66a26371afccd2 root=/dev/mapper/rhel_team--area--222-root ro crashkernel=auto rd.lvm.lv=rhel_team-area-222/root rd.lvm.lv=rhel_team-area-222/swap rhgb quiet
|
||||
+ initrd16 /initramfs-0-rescue-925cd320373b6a4a9a66a26371afccd2.img
|
||||
+}
|
||||
+
|
||||
+### END /etc/grub.d/10_linux ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/20_linux_xen ###
|
||||
+### END /etc/grub.d/20_linux_xen ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/20_ppc_terminfo ###
|
||||
+### END /etc/grub.d/20_ppc_terminfo ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/30_os-prober ###
|
||||
+### END /etc/grub.d/30_os-prober ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/40_custom ###
|
||||
+# This file provides an easy way to add custom menu entries. Simply type the
|
||||
+# menu entries you want to add after this comment. Be careful not to change
|
||||
+# the 'exec tail' line above.
|
||||
+### END /etc/grub.d/40_custom ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/41_custom ###
|
||||
+if [ -f ${config_directory}/custom.cfg ]; then
|
||||
+ source ${config_directory}/custom.cfg
|
||||
+elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
|
||||
+ source $prefix/custom.cfg;
|
||||
+fi
|
||||
+### END /etc/grub.d/41_custom ###
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,46 @@
|
||||
From f88808a37044c323e35eda49dbc326dcf260439b Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Fri, 24 Jun 2016 16:05:45 -0400
|
||||
Subject: [PATCH 23/55] Ensure command line updates also honor --set-index
|
||||
|
||||
Related: rhbz#1285601
|
||||
|
||||
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||
---
|
||||
grubby.c | 8 +++++++-
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index 54625e7da0a..d889399449b 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -4212,11 +4212,17 @@ int addNewKernel(struct grubConfig *config, struct singleEntry *template,
|
||||
struct singleEntry *new, *entry, *prev = NULL;
|
||||
struct singleLine *newLine = NULL, *tmplLine = NULL, *masterLine = NULL;
|
||||
int needs;
|
||||
+ char *indexs;
|
||||
char *chptr;
|
||||
+ int rc;
|
||||
|
||||
if (!newKernelPath)
|
||||
return 0;
|
||||
|
||||
+ rc = asprintf(&indexs, "%d", newIndex);
|
||||
+ if (rc < 0)
|
||||
+ return 1;
|
||||
+
|
||||
/* if the newKernelTitle is too long silently munge it into something
|
||||
* we can live with. truncating is first check, then we'll just mess with
|
||||
* it until it looks better */
|
||||
@@ -4715,7 +4721,7 @@ int addNewKernel(struct grubConfig *config, struct singleEntry *template,
|
||||
abort();
|
||||
}
|
||||
|
||||
- if (updateImage(config, "0", prefix, newKernelArgs, NULL,
|
||||
+ if (updateImage(config, indexs, prefix, newKernelArgs, NULL,
|
||||
newMBKernelArgs, NULL))
|
||||
return 1;
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,67 @@
|
||||
From fe9bc763507e849caa45926e49c1c324532ced6e Mon Sep 17 00:00:00 2001
|
||||
From: Robert Marshall <rmarshall@redhat.com>
|
||||
Date: Thu, 23 Jun 2016 14:41:12 -0400
|
||||
Subject: [PATCH 24/55] Change debug entry insertion order (rhbz#1285601)
|
||||
|
||||
Customer reports indicated that it was confusing to have the debugging
|
||||
entries before non-debugging entries. Altered the insertion code to use
|
||||
the --set-index feature on the debug kernels to force them to insert
|
||||
after the initial non-debugging entry.
|
||||
|
||||
Resolves: rhbz#1285601
|
||||
---
|
||||
new-kernel-pkg | 10 +++++-----
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/new-kernel-pkg b/new-kernel-pkg
|
||||
index 9574dbbf10b..64225deb06b 100755
|
||||
--- a/new-kernel-pkg
|
||||
+++ b/new-kernel-pkg
|
||||
@@ -244,7 +244,7 @@ install() {
|
||||
--remove-kernel=\"TITLE=$title\$debugtitle\""
|
||||
|
||||
rungrubby ${ARGS} $makedefault
|
||||
- rungrubby --debug ${ARGS}
|
||||
+ rungrubby --debug ${ARGS} --set-index=1
|
||||
else
|
||||
[ -n "$verbose" ] && echo "$grubConfig does not exist, not running grubby for grub 0.97"
|
||||
fi
|
||||
@@ -258,7 +258,7 @@ install() {
|
||||
--args=\"root=$rootdevice $kernargs \$debugargs\" \
|
||||
--remove-kernel=\"TITLE=$title\$debugtitle\""
|
||||
rungrubby ${ARGS} $makedefault
|
||||
- rungrubby --debug ${ARGS}
|
||||
+ rungrubby --debug ${ARGS} --set-index=1
|
||||
else
|
||||
[ -n "$verbose" ] && echo "$grub2Config does not exist, not running grubby for grub 2"
|
||||
fi
|
||||
@@ -273,7 +273,7 @@ install() {
|
||||
--args=\"root=$rootdevice $kernargs \$debugargs\" \
|
||||
--remove-kernel=\"TITLE=$title\$debugtitle\""
|
||||
rungrubby ${ARGS} $makedefault
|
||||
- rungrubby --debug ${ARGS}
|
||||
+ rungrubby --debug ${ARGS} --set-index=1
|
||||
else
|
||||
[ -n "$verbose" ] && echo "$grub2EfiConfig does not exist, not running grubby for grub 2 with UEFI"
|
||||
fi
|
||||
@@ -289,7 +289,7 @@ install() {
|
||||
--remove-kernel=\"TITLE=$version\""
|
||||
|
||||
rungrubby ${ARGS} $makedefault
|
||||
- rungrubby --debug ${ARGS}
|
||||
+ rungrubby --debug ${ARGS} --set-index=1
|
||||
if [ -n "$runLilo" ]; then
|
||||
[ -n "$verbose" ] && echo "running $lilo"
|
||||
if [ ! -x $lilo ] ; then
|
||||
@@ -314,7 +314,7 @@ install() {
|
||||
--remove-kernel=\"TITLE=$title\$debugtitle\""
|
||||
|
||||
rungrubby ${ARGS} $makedefault
|
||||
- rungrubby --debug ${ARGS}
|
||||
+ rungrubby --debug ${ARGS} --set-index=1
|
||||
else
|
||||
[ -n "$verbose" ] && echo "$extlinuxConfig does not exist, not running grubby for extlinux"
|
||||
fi
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,356 @@
|
||||
From 9073de7c059fcc9fd5ca837068d96cb0246f3c99 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Marshall <rmarshall@redhat.com>
|
||||
Date: Fri, 1 Jul 2016 14:03:38 -0400
|
||||
Subject: [PATCH 25/55] Reorganize grubby man page (#1232168)
|
||||
|
||||
Broke the grubby man page into clearer sections and re-organized the
|
||||
content by general use case for easier reading.
|
||||
|
||||
Related: rhbz#1232168
|
||||
---
|
||||
grubby.8 | 220 ++++++++++++++++++++++++++++++-------------------------
|
||||
1 file changed, 120 insertions(+), 100 deletions(-)
|
||||
|
||||
diff --git a/grubby.8 b/grubby.8
|
||||
index f1bfb9336e9..a3033d87254 100644
|
||||
--- a/grubby.8
|
||||
+++ b/grubby.8
|
||||
@@ -1,15 +1,18 @@
|
||||
.TH GRUBBY 8 "Tue Jan 18 2005"
|
||||
+
|
||||
.SH NAME
|
||||
+
|
||||
grubby \- command line tool for configuring grub, lilo, elilo, yaboot and zipl
|
||||
|
||||
.SH SYNOPSIS
|
||||
-\fBgrubby\fR [--add-kernel=\fIkernel-path\fR] [--args=\fIargs\fR]
|
||||
- [--bad-image-okay] [--boot-filesystem=\fIbootfs\fR]
|
||||
+
|
||||
+\fBgrubby\fR [--add-kernel=\fIkernel-path\fR] [--args=\fIargs\fR]
|
||||
+ [--bad-image-okay] [--boot-filesystem=\fIbootfs\fR]
|
||||
[--bootloader-probe] [--config-file \fIpath\fR] [--copy-default]
|
||||
[--debug] [--default-kernel] [--default-index] [--default-title]
|
||||
[--devtree=\fIdevicetree.dtb\fR] [--set-index=\fIentry-index\fR]
|
||||
[--grub] [--lilo] [--yaboot] [--silo] [--zipl]
|
||||
- [--info=\fIkernel-path\fR] [--initrd=\fIinitrd-path\fR]
|
||||
+ [--info=\fIkernel-path\fR] [--initrd=\fIinitrd-path\fR]
|
||||
[--make-default] [-o path] [--version]
|
||||
[--remove-kernel=\fIkernel-path\fR] [--remove-args=\fIargs\fR]
|
||||
[--set-default=\fIkernel-path\fR] [--set-default-index=\fIentry-index\fR]
|
||||
@@ -18,12 +21,17 @@ grubby \- command line tool for configuring grub, lilo, elilo, yaboot and zipl
|
||||
[--remove-mbargs=\fIargs\fR]
|
||||
|
||||
.SH DESCRIPTION
|
||||
+
|
||||
+.SS General Information
|
||||
+
|
||||
\fBgrubby\fR is a command line tool for updating and displaying information
|
||||
about the configuration files for the \fBgrub\fR, \fBlilo\fR, \fBelilo\fR
|
||||
(ia64), \fByaboot\fR (powerpc) and \fBzipl\fR (s390) boot loaders. It
|
||||
is primarily designed to be used from scripts which install new
|
||||
kernels and need to find information about the current boot environment.
|
||||
|
||||
+.SS Architecture Support
|
||||
+
|
||||
On BIOS-based Intel x86 platforms, \fBgrub2\fR is the default bootloader and
|
||||
the configuration file is in \fB/boot/grub2/grub.cfg\fR. On UEFI-based Intel
|
||||
x86 platforms, \fBgrub2\fR is the default bootloader, and the configuration
|
||||
@@ -35,6 +43,8 @@ config stored in \fB/boot/grub2/grub.cfg\fR. The earlier Power7 systems use \fBy
|
||||
parsing and the configuration file should be in \fB/etc/yaboot.conf\fR. On
|
||||
s390 platforms the \fBzipl bootloader\fR will read from \fB/etc/zipl.conf\fR.
|
||||
|
||||
+.SS Special Arguments
|
||||
+
|
||||
There are a number of ways to specify the kernel used for \fB-\-info\fR,
|
||||
\fB-\-remove-kernel\fR, and \fB-\-update-kernel\fR. Specificying \fBDEFAULT\fR
|
||||
or \fBALL\fR selects the default entry and all of the entries, respectively.
|
||||
@@ -44,13 +54,24 @@ be specified by using \fBTITLE=\fItitle\fR as the argument; all entries
|
||||
with that title are used.
|
||||
|
||||
.SH OPTIONS
|
||||
+
|
||||
+.SS Basic Options
|
||||
+
|
||||
.TP
|
||||
\fB-\-add-kernel\fR=\fIkernel-path\fR
|
||||
Add a new boot entry for the kernel located at \fIkernel-path\fR.
|
||||
|
||||
.TP
|
||||
-\fB-\-set-index\fR=\fIentry-index\fR
|
||||
-Set the position at which to add a new entry created with \fB-\-add-kernel\fR.
|
||||
+\fB-\-remove-kernel\fR=\fIkernel-path\fR
|
||||
+Removes all boot entries which match \fIkernel-path\fR. This may be used
|
||||
+along with -\-add-kernel, in which case the new kernel being added will
|
||||
+never be removed.
|
||||
+
|
||||
+.TP
|
||||
+\fB-\-update-kernel\fR=\fIkernel-path\fR
|
||||
+The entries for kernels matching \fRkernel-path\fR are updated. Currently
|
||||
+the only items that can be updated is the kernel argument list, which is
|
||||
+modified via the \fB-\-args\fR and \fB-\-remove-args\fR options.
|
||||
|
||||
.TP
|
||||
\fB-\-args\fR=\fIkernel-args\fR
|
||||
@@ -65,38 +86,11 @@ file has special handling for specifying the root filesystem (like
|
||||
lilo.conf does).
|
||||
|
||||
.TP
|
||||
-\fB-\-bad-image-okay\fR
|
||||
-When \fBgrubby\fR is looking for a entry to use for something (such
|
||||
-as a template or a default boot entry) it uses sanity checks, such as
|
||||
-ensuring that the kernel exists in the filesystem, to make sure
|
||||
-entries that obviously won't work aren't selected. This option overrides
|
||||
-that behavior, and is designed primarily for testing.
|
||||
-
|
||||
-.TP
|
||||
-\fB-\-boot-filesystem\fR=\fIbootfs\fR
|
||||
-The \fBgrub\fR boot loader expects file paths listed in it's configuration
|
||||
-path to be relative to the top of the filesystem they are on, rather then
|
||||
-relative to the current root filesystem. By default \fBgrubby\fR searches
|
||||
-the list of currently mounted filesystems to determine this. If this option
|
||||
-is given \fBgrubby\fR acts as if the specified filesystem was the filesystem
|
||||
-containing the kernel (this option is designed primarily for testing).
|
||||
-
|
||||
-.TP
|
||||
-\fB-\-bootloader-probe\fR
|
||||
-\fBgrubby\fR tries to determine if \fBgrub\fR or \fBlilo\fR is currently
|
||||
-installed. When one of those bootloaders is found the name of that bootloader
|
||||
-is displayed on stdout. Both could be installed (on different devices), and
|
||||
-grubby will print out the names of both bootloaders, one per line. The probe
|
||||
-for \fBgrub\fR requires a commented out boot directive \fBgrub.conf\fR
|
||||
-identical to the standard directive in the lilo configuration file. If this
|
||||
-is not present \fBgrubby\fR will assume grub is not installed (note
|
||||
-that \fBanaconda\fR places this directive in \fBgrub.conf\fR files it creates).
|
||||
-This option is only available on ia32 platforms.
|
||||
-
|
||||
-
|
||||
-.TP
|
||||
-\fB-\-config-file\fR=\fIpath\fR
|
||||
-Use \fIpath\fR as the configuration file rather then the default.
|
||||
+\fB-\-remove-args\fR=\fIkernel-args\fR
|
||||
+The arguments specified by \fIkernel-args\fR are removed from the
|
||||
+kernels specified by \fB-\-update-kernel\fR. The \fBroot\fR argument
|
||||
+gets special handling for configuration files that support separate root
|
||||
+filesystem configuration.
|
||||
|
||||
.TP
|
||||
\fB-\-copy-default\fR
|
||||
@@ -104,10 +98,41 @@ Use \fIpath\fR as the configuration file rather then the default.
|
||||
root device) as possible from the current default kernel. The kernel path
|
||||
and initrd path will never be copied.
|
||||
|
||||
+.TP
|
||||
+\fB-\-title\fR=\fIentry-title\fR
|
||||
+When a new kernel entry is added \fIentry-title\fR is used as the title
|
||||
+(\fBlilo\fR label) for the entry. If \fIentry-title\fR is longer then maximum
|
||||
+length allowed by the bootloader (15 for lilo, unlimited for grub and elilo)
|
||||
+the title is shortened to a (unique) entry.
|
||||
+
|
||||
+.TP
|
||||
+\fB-\-initrd\fR=\fIinitrd-path\fR
|
||||
+Use \fIinitrd-path\fR as the path to an initial ram disk for a new kernel
|
||||
+being added.
|
||||
+
|
||||
+.TP
|
||||
+\fB-\-set-default\fR=\fIkernel-path\fR
|
||||
+The first entry which boots the specified kernel is made the default
|
||||
+boot entry.
|
||||
+
|
||||
+.TP
|
||||
+\fB-\-set-default-index\fR=\fIentry-index\fR
|
||||
+Makes the given entry number the default boot entry.
|
||||
+
|
||||
+.TP
|
||||
+\fB-\-make-default\fR
|
||||
+Make the new kernel entry being added the default entry.
|
||||
+
|
||||
+.TP
|
||||
+\fB-\-set-index\fR=\fIentry-index\fR
|
||||
+Set the position at which to add a new entry created with \fB-\-add-kernel\fR.
|
||||
+
|
||||
.TP
|
||||
\fB-\-debug\fR
|
||||
Display extra debugging information for failures.
|
||||
|
||||
+.SS Display Options
|
||||
+
|
||||
.TP
|
||||
\fB-\-default-kernel\fR
|
||||
Display the full path to the current default kernel and exit.
|
||||
@@ -121,9 +146,26 @@ Display the numeric index of the current default boot entry and exit.
|
||||
Display the title of the current default boot entry and exit.
|
||||
|
||||
.TP
|
||||
-\fB-\-devtree\fR=\fIpath\fR
|
||||
-Use \fIpath\fR for device tree path in place of the path of any devicetree
|
||||
-directive found in the template stanza.
|
||||
+\fB-\-info\fR=\fIkernel-path\fR
|
||||
+Display information on all boot entries which match \fIkernel-path\fR. I
|
||||
+
|
||||
+.TP
|
||||
+\fB-\-bootloader-probe\fR
|
||||
+\fBgrubby\fR tries to determine if \fBgrub\fR or \fBlilo\fR is currently
|
||||
+installed. When one of those bootloaders is found the name of that bootloader
|
||||
+is displayed on stdout. Both could be installed (on different devices), and
|
||||
+grubby will print out the names of both bootloaders, one per line. The probe
|
||||
+for \fBgrub\fR requires a commented out boot directive \fBgrub.conf\fR
|
||||
+identical to the standard directive in the lilo configuration file. If this
|
||||
+is not present \fBgrubby\fR will assume grub is not installed (note
|
||||
+that \fBanaconda\fR places this directive in \fBgrub.conf\fR files it creates).
|
||||
+This option is only available on ia32 platforms.
|
||||
+
|
||||
+.TP
|
||||
+\fB-\-version\fR
|
||||
+Display the version of \fBgrubby\fR being run and then exit immediately.
|
||||
+
|
||||
+.SS Output Format Options
|
||||
|
||||
.TP
|
||||
\fB-\-elilo\fR
|
||||
@@ -134,62 +176,10 @@ Use an \fBelilo\fR style configuration file.
|
||||
Use a \fBgrub\fR style configuration file instead of \fBlilo\fR style. This
|
||||
is the default on ia32 platforms.
|
||||
|
||||
-.TP
|
||||
-\fB-\-info\fR=\fIkernel-path\fR
|
||||
-Display information on all boot entries which match \fIkernel-path\fR. I
|
||||
-
|
||||
-.TP
|
||||
-\fB-\-initrd\fR=\fIinitrd-path\fR
|
||||
-Use \fIinitrd-path\fR as the path to an initial ram disk for a new kernel
|
||||
-being added.
|
||||
-
|
||||
.TP
|
||||
\fB-\-lilo\fR
|
||||
Use a \fBlilo\fR style configuration file.
|
||||
|
||||
-.TP
|
||||
-\fB-\-make-default\fR
|
||||
-Make the new kernel entry being added the default entry.
|
||||
-
|
||||
-.TP
|
||||
-\fB-\-remove-args\fR=\fIkernel-args\fR
|
||||
-The arguments specified by \fIkernel-args\fR are removed from the
|
||||
-kernels specified by \fB-\-update-kernel\fR. The \fBroot\fR argument
|
||||
-gets special handling for configuration files that support separate root
|
||||
-filesystem configuration.
|
||||
-
|
||||
-.TP
|
||||
-\fB-\-remove-kernel\fR=\fIkernel-path\fR
|
||||
-Removes all boot entries which match \fIkernel-path\fR. This may be used
|
||||
-along with -\-add-kernel, in which case the new kernel being added will
|
||||
-never be removed.
|
||||
-
|
||||
-.TP
|
||||
-\fB-\-set-default\fR=\fIkernel-path\fR
|
||||
-The first entry which boots the specified kernel is made the default
|
||||
-boot entry.
|
||||
-
|
||||
-.TP
|
||||
-\fB-\-set-default-index\fR=\fIentry-index\fR
|
||||
-Makes the given entry number the default boot entry.
|
||||
-
|
||||
-.TP
|
||||
-\fB-\-title\fR=\fIentry-title\fR
|
||||
-When a new kernel entry is added \fIentry-title\fR is used as the title
|
||||
-(\fBlilo\fR label) for the entry. If \fIentry-title\fR is longer then maximum
|
||||
-length allowed by the bootloader (15 for lilo, unlimited for grub and elilo)
|
||||
-the title is shortened to a (unique) entry.
|
||||
-
|
||||
-.TP
|
||||
-\fB-\-update-kernel\fR=\fIkernel-path\fR
|
||||
-The entries for kernels matching \fRkernel-path\fR are updated. Currently
|
||||
-the only items that can be updated is the kernel argument list, which is
|
||||
-modified via the \fB-\-args\fR and \fB-\-remove-args\fR options.
|
||||
-
|
||||
-.TP
|
||||
-\fB-\-version\fR
|
||||
-Display the version of \fBgrubby\fR being run and then exit immediately.
|
||||
-
|
||||
.TP
|
||||
\fB-\-yaboot\fR
|
||||
Use an \fByaboot\fR style configuration file.
|
||||
@@ -198,7 +188,35 @@ Use an \fByaboot\fR style configuration file.
|
||||
\fB-\-zipl\fR
|
||||
Use an \fBzipl\fR style configuration file.
|
||||
|
||||
-.SH MULTIBOOT OPTIONS
|
||||
+.SS Override Options
|
||||
+
|
||||
+.TP
|
||||
+\fB-\-bad-image-okay\fR
|
||||
+When \fBgrubby\fR is looking for a entry to use for something (such
|
||||
+as a template or a default boot entry) it uses sanity checks, such as
|
||||
+ensuring that the kernel exists in the filesystem, to make sure
|
||||
+entries that obviously won't work aren't selected. This option overrides
|
||||
+that behavior, and is designed primarily for testing.
|
||||
+
|
||||
+.TP
|
||||
+\fB-\-boot-filesystem\fR=\fIbootfs\fR
|
||||
+The \fBgrub\fR boot loader expects file paths listed in it's configuration
|
||||
+path to be relative to the top of the filesystem they are on, rather then
|
||||
+relative to the current root filesystem. By default \fBgrubby\fR searches
|
||||
+the list of currently mounted filesystems to determine this. If this option
|
||||
+is given \fBgrubby\fR acts as if the specified filesystem was the filesystem
|
||||
+containing the kernel (this option is designed primarily for testing).
|
||||
+
|
||||
+.TP
|
||||
+\fB-\-config-file\fR=\fIpath\fR
|
||||
+Use \fIpath\fR as the configuration file rather then the default.
|
||||
+
|
||||
+\fB-\-devtree\fR=\fIpath\fR
|
||||
+Use \fIpath\fR for device tree path in place of the path of any devicetree
|
||||
+directive found in the template stanza.
|
||||
+
|
||||
+.SS Multiboot Options
|
||||
+
|
||||
The Multiboot Specification provides a genreic interface for boot
|
||||
loaders and operating systems. It is supported by the GRUB bootloader.
|
||||
|
||||
@@ -210,34 +228,36 @@ Add a new boot entry for the multiboot kernel located at
|
||||
|
||||
.TP
|
||||
\fB-\-remove-multiboot\fR=\fImultiboot-path\fR
|
||||
-Removes all boot entries which match \fImultiboot-path\fR.
|
||||
+Removes all boot entries which match \fImultiboot-path\fR.
|
||||
|
||||
.TP
|
||||
\fB-\-mbargs\fR=\fImultiboot-args\fR
|
||||
-When a new multiboot kernel is added, this specifies the command line
|
||||
-arguments which should be passed to that kernel by default
|
||||
+When a new multiboot kernel is added, this specifies the command line
|
||||
+arguments which should be passed to that kernel by default
|
||||
When \fB-\-update-kernel\fR is used, this specifies new arguments to add
|
||||
to the argument list. Multiple, space separated arguments may be used. If
|
||||
-an argument already exists the new value replaces the old values.
|
||||
+an argument already exists the new value replaces the old values.
|
||||
|
||||
.TP
|
||||
\fB-\-remove-mbargs\fR=\fImultiboot-args\fR
|
||||
-The arguments specified by \fImultiboot-args\fR are removed from the
|
||||
-kernels specified by \fB-\-update-kernel\fR.
|
||||
-
|
||||
+The arguments specified by \fImultiboot-args\fR are removed from the
|
||||
+kernels specified by \fB-\-update-kernel\fR.
|
||||
|
||||
.SH "BUGS"
|
||||
+
|
||||
The command line syntax is more than a little baroque. This probably
|
||||
won't be fixed as \fBgrubby\fR is only intended to be called from shell
|
||||
scripts which can get it right.
|
||||
|
||||
.SH "SEE ALSO"
|
||||
+
|
||||
.BR grub (8),
|
||||
.BR lilo (8),
|
||||
.BR yaboot (8),
|
||||
.BR mkinitrd (8)
|
||||
|
||||
.SH AUTHORS
|
||||
+
|
||||
.nf
|
||||
Erik Troan
|
||||
Jeremy Katz
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,369 @@
|
||||
From e08236e8d15ff0fc581d56efaf4d855c57d6d994 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Marshall <rmarshall@redhat.com>
|
||||
Date: Fri, 1 Jul 2016 15:03:13 -0400
|
||||
Subject: [PATCH 26/55] Update grubby man page contents (#bz1232168)
|
||||
|
||||
The grubby man page was missing several options that were added in
|
||||
previous releases. Added those to the man page as well as updated the
|
||||
text on others to provide further clarity.
|
||||
|
||||
Added an EXAMPLE section containing some basic use cases.
|
||||
|
||||
Resolves: rhbz#1232168
|
||||
---
|
||||
grubby.8 | 218 +++++++++++++++++++++++++++++++++++++++++++------------
|
||||
1 file changed, 173 insertions(+), 45 deletions(-)
|
||||
|
||||
diff --git a/grubby.8 b/grubby.8
|
||||
index a3033d87254..64a6984fba0 100644
|
||||
--- a/grubby.8
|
||||
+++ b/grubby.8
|
||||
@@ -2,51 +2,69 @@
|
||||
|
||||
.SH NAME
|
||||
|
||||
-grubby \- command line tool for configuring grub, lilo, elilo, yaboot and zipl
|
||||
+grubby \- command line tool used to configure bootloader menu entries across multiple architectures
|
||||
|
||||
.SH SYNOPSIS
|
||||
|
||||
-\fBgrubby\fR [--add-kernel=\fIkernel-path\fR] [--args=\fIargs\fR]
|
||||
- [--bad-image-okay] [--boot-filesystem=\fIbootfs\fR]
|
||||
- [--bootloader-probe] [--config-file \fIpath\fR] [--copy-default]
|
||||
- [--debug] [--default-kernel] [--default-index] [--default-title]
|
||||
- [--devtree=\fIdevicetree.dtb\fR] [--set-index=\fIentry-index\fR]
|
||||
- [--grub] [--lilo] [--yaboot] [--silo] [--zipl]
|
||||
- [--info=\fIkernel-path\fR] [--initrd=\fIinitrd-path\fR]
|
||||
- [--make-default] [-o path] [--version]
|
||||
- [--remove-kernel=\fIkernel-path\fR] [--remove-args=\fIargs\fR]
|
||||
- [--set-default=\fIkernel-path\fR] [--set-default-index=\fIentry-index\fR]
|
||||
- [--title=entry-title] [--add-multiboot=\fImultiboot-path\fR]
|
||||
- [--mbargs=\fIargs\fR] [--remove-multiboot=\fImultiboot-path\fR]
|
||||
- [--remove-mbargs=\fIargs\fR]
|
||||
+\fBgrubby\fR [\fIOPTIONS...\fR]
|
||||
|
||||
.SH DESCRIPTION
|
||||
|
||||
.SS General Information
|
||||
|
||||
\fBgrubby\fR is a command line tool for updating and displaying information
|
||||
-about the configuration files for the \fBgrub\fR, \fBlilo\fR, \fBelilo\fR
|
||||
-(ia64), \fByaboot\fR (powerpc) and \fBzipl\fR (s390) boot loaders. It
|
||||
-is primarily designed to be used from scripts which install new
|
||||
-kernels and need to find information about the current boot environment.
|
||||
+about the configuration files for various architecture specific bootloaders.
|
||||
+It is primarily designed to be used from scripts which install new kernels
|
||||
+and need to find information about the current boot environment.
|
||||
|
||||
.SS Architecture Support
|
||||
|
||||
-On BIOS-based Intel x86 platforms, \fBgrub2\fR is the default bootloader and
|
||||
-the configuration file is in \fB/boot/grub2/grub.cfg\fR. On UEFI-based Intel
|
||||
-x86 platforms, \fBgrub2\fR is the default bootloader, and the configuration
|
||||
-file is in \fB/boot/efi/EFI/redhat/grub.cfg\fR. On Intel ia64 platforms,
|
||||
-\fBelilo\fR mode is used and the default location for the configuration file
|
||||
-is \fB/boot/efi/EFI/redhat/elilo.conf\fR. On PowerPC platforms, systems based
|
||||
-on Power8 now support \fBgrub2\fR as a bootloader and store using a default
|
||||
-config stored in \fB/boot/grub2/grub.cfg\fR. The earlier Power7 systems use \fByaboot\fR
|
||||
-parsing and the configuration file should be in \fB/etc/yaboot.conf\fR. On
|
||||
-s390 platforms the \fBzipl bootloader\fR will read from \fB/etc/zipl.conf\fR.
|
||||
+The \fBgrubby\fR executable has full support for the \fBgrub2\fR
|
||||
+bootloader on \fBx86_64\fR systems using legacy BIOS or modern
|
||||
+UEFI firmware and \fBppc64\fR and \fBppc64le\fR hardware using
|
||||
+OPAL or SLOF as firmware.
|
||||
+
|
||||
+Legacy \fBs390\fR and the current \fBs390x\fR architectures
|
||||
+and their \fBzipl\fR bootloader are fully supported.
|
||||
+
|
||||
+Support for \fByaboot\fR has been deprecated as all ppc architecture
|
||||
+hardware since the Power8 system uses \fBgrub2\fR or petitboot
|
||||
+which both use the grub2 configuration file format.
|
||||
+
|
||||
+Legacy bootloaders \fBLILO\fR, \fBSILO\fR, and \fBELILO\fR
|
||||
+are deprecated in favor of previously mentioned bootloaders. The
|
||||
+\fBSILO\fR bootloader should also be considered unsupported.
|
||||
+
|
||||
+.SS Default Behavior
|
||||
+
|
||||
+The default architecture is chosen at compile time. The grubby executable
|
||||
+has a series of built in assumptions about what bootloader is being used and
|
||||
+where its configuration file lives. If no output format option is specified
|
||||
+on the command line then grubby will use these default settings to first
|
||||
+search for an existing configuration and, if it is not found, assume that
|
||||
+it should be placed in the standard location. These default assumptions are
|
||||
+listed in the table below.
|
||||
+
|
||||
+.TS
|
||||
+allbox;
|
||||
+lbw6 lbw10 lbw18
|
||||
+l l l.
|
||||
+ Arch Bootloader Configuration File
|
||||
+ x86_64 [BIOS] grub2 /boot/grub2/grub.cfg
|
||||
+ x86_64 [UEFI] grub2 /boot/efi/EFI/redhat/grub.cfg
|
||||
+ i386 grub2 /boot/grub2/grub.cfg
|
||||
+ ia64 elilo /boot/efi/EFI/redhat/elilo.conf
|
||||
+ ppc [>=Power8] grub2 /boot/grub2/grub.cfg
|
||||
+ ppc [<=Power7] yaboot /etc/yaboot.conf
|
||||
+ s390 zipl /etc/zipl.conf
|
||||
+ s390x zipl /etc/zipl.conf
|
||||
+.TE
|
||||
+
|
||||
|
||||
.SS Special Arguments
|
||||
|
||||
There are a number of ways to specify the kernel used for \fB-\-info\fR,
|
||||
-\fB-\-remove-kernel\fR, and \fB-\-update-kernel\fR. Specificying \fBDEFAULT\fR
|
||||
+\fB-\-remove-kernel\fR, and \fB-\-update-kernel\fR. Specifying \fBDEFAULT\fR
|
||||
or \fBALL\fR selects the default entry and all of the entries, respectively.
|
||||
If a comma separated list of numbers is given, the boot entries indexed
|
||||
by those numbers are selected. Finally, the title of a boot entry may
|
||||
@@ -59,12 +77,17 @@ with that title are used.
|
||||
|
||||
.TP
|
||||
\fB-\-add-kernel\fR=\fIkernel-path\fR
|
||||
-Add a new boot entry for the kernel located at \fIkernel-path\fR.
|
||||
+Add a new boot entry for the kernel located at \fIkernel-path\fR. A title for
|
||||
+the boot entry must be set using \fB-\-title\fR. Most invocations should also
|
||||
+include \fB-\-initrd\fR with memtest86 as a notable exception.
|
||||
+
|
||||
+The \fB-\-update-kernel\fR
|
||||
+option may not be used in the same invocation.
|
||||
|
||||
.TP
|
||||
\fB-\-remove-kernel\fR=\fIkernel-path\fR
|
||||
Removes all boot entries which match \fIkernel-path\fR. This may be used
|
||||
-along with -\-add-kernel, in which case the new kernel being added will
|
||||
+along with \fB-\-add-kernel\fR, in which case the new kernel being added will
|
||||
never be removed.
|
||||
|
||||
.TP
|
||||
@@ -110,14 +133,19 @@ the title is shortened to a (unique) entry.
|
||||
Use \fIinitrd-path\fR as the path to an initial ram disk for a new kernel
|
||||
being added.
|
||||
|
||||
+.TP
|
||||
+\fB-\-efi\fR
|
||||
+Use linuxefi and initrdefi when constructing bootloader stanzas instead of linux and initrd.
|
||||
+
|
||||
.TP
|
||||
\fB-\-set-default\fR=\fIkernel-path\fR
|
||||
The first entry which boots the specified kernel is made the default
|
||||
-boot entry.
|
||||
+boot entry. This may not be invoked with \fB-\-set-default-index\fR.
|
||||
|
||||
.TP
|
||||
\fB-\-set-default-index\fR=\fIentry-index\fR
|
||||
-Makes the given entry number the default boot entry.
|
||||
+Makes the given entry number the default boot entry. This may not
|
||||
+be invoked with \fB-\-set-default\fR.
|
||||
|
||||
.TP
|
||||
\fB-\-make-default\fR
|
||||
@@ -131,8 +159,17 @@ Set the position at which to add a new entry created with \fB-\-add-kernel\fR.
|
||||
\fB-\-debug\fR
|
||||
Display extra debugging information for failures.
|
||||
|
||||
+.TP
|
||||
+\fB-i\fR, \fB-\-extra-initrd\fR=\fIinitrd-path\fR
|
||||
+Use \fIinitrd-path\fR as the path for an auxiliary initrd image.
|
||||
+
|
||||
.SS Display Options
|
||||
|
||||
+Passing the display option to grubby will cause it to print out the
|
||||
+requested information about the current bootloader configuration and
|
||||
+then immediately exit. These options should not be used in any
|
||||
+script intended to update the bootloader configuration.
|
||||
+
|
||||
.TP
|
||||
\fB-\-default-kernel\fR
|
||||
Display the full path to the current default kernel and exit.
|
||||
@@ -159,34 +196,56 @@ for \fBgrub\fR requires a commented out boot directive \fBgrub.conf\fR
|
||||
identical to the standard directive in the lilo configuration file. If this
|
||||
is not present \fBgrubby\fR will assume grub is not installed (note
|
||||
that \fBanaconda\fR places this directive in \fBgrub.conf\fR files it creates).
|
||||
-This option is only available on ia32 platforms.
|
||||
+
|
||||
+\fIThis option is only available on i386 platforms.\fR
|
||||
|
||||
.TP
|
||||
-\fB-\-version\fR
|
||||
+\fB-v\fR, \fB-\-version\fR
|
||||
Display the version of \fBgrubby\fR being run and then exit immediately.
|
||||
|
||||
.SS Output Format Options
|
||||
|
||||
+Sane default options for the current platform are compiled into grubby on
|
||||
+a per platform basis. These defaults determine the format and layout of
|
||||
+the generated bootloader configuration file. A different configuration file
|
||||
+format may be specified on the command line if the system uses a supported
|
||||
+alternative bootloader.
|
||||
+
|
||||
.TP
|
||||
\fB-\-elilo\fR
|
||||
-Use an \fBelilo\fR style configuration file.
|
||||
+Use an \fBelilo\fR style configuration file. This is the default on ia64 platforms. This format is deprecated.
|
||||
+
|
||||
+.TP
|
||||
+\fB-\-extlinux\fR
|
||||
+Use an \fBextlinux\fR style configuration file. This format is deprecated.
|
||||
|
||||
.TP
|
||||
\fB-\-grub\fR
|
||||
-Use a \fBgrub\fR style configuration file instead of \fBlilo\fR style. This
|
||||
-is the default on ia32 platforms.
|
||||
+Use a \fBgrub\fR style configuration file. This is the default on ia32 platforms.
|
||||
+
|
||||
+.TP
|
||||
+\fB-\-grub2\fR
|
||||
+Use a \fBgrub2\fR style configuration file. This is the default on \fBx86_64\fR
|
||||
+architecture as well as the \fBppc64\fR and \fBppc64le\fR architectures
|
||||
+running on Power8 or later hardware.
|
||||
|
||||
.TP
|
||||
\fB-\-lilo\fR
|
||||
Use a \fBlilo\fR style configuration file.
|
||||
|
||||
+.TP
|
||||
+\fB-\-silo\fR
|
||||
+Use a \fBsilo\fR style configuration file. This is the default on SPARC systems. This format is legacy, deprecated, and unsupported.
|
||||
+
|
||||
.TP
|
||||
\fB-\-yaboot\fR
|
||||
-Use an \fByaboot\fR style configuration file.
|
||||
+Use a \fByaboot\fR style configuration file. This is the default for
|
||||
+the \fBppc\fR architecture on on Power7 and earlier hardware.
|
||||
|
||||
.TP
|
||||
\fB-\-zipl\fR
|
||||
-Use an \fBzipl\fR style configuration file.
|
||||
+Use a \fBzipl\fR style configuration file. This is the default on the
|
||||
+legacy s390 and current s390x architectures.
|
||||
|
||||
.SS Override Options
|
||||
|
||||
@@ -200,7 +259,7 @@ that behavior, and is designed primarily for testing.
|
||||
|
||||
.TP
|
||||
\fB-\-boot-filesystem\fR=\fIbootfs\fR
|
||||
-The \fBgrub\fR boot loader expects file paths listed in it's configuration
|
||||
+The \fBgrub\fR boot loader expects file paths listed in its configuration
|
||||
path to be relative to the top of the filesystem they are on, rather then
|
||||
relative to the current root filesystem. By default \fBgrubby\fR searches
|
||||
the list of currently mounted filesystems to determine this. If this option
|
||||
@@ -208,23 +267,39 @@ is given \fBgrubby\fR acts as if the specified filesystem was the filesystem
|
||||
containing the kernel (this option is designed primarily for testing).
|
||||
|
||||
.TP
|
||||
-\fB-\-config-file\fR=\fIpath\fR
|
||||
+\fB-\-env\fR=\fIpath\fR
|
||||
+Path for the file where grub environment data is stored.
|
||||
+
|
||||
+.TP
|
||||
+\fB-c\fR, \fB-\-config-file\fR=\fIpath\fR
|
||||
Use \fIpath\fR as the configuration file rather then the default.
|
||||
|
||||
-\fB-\-devtree\fR=\fIpath\fR
|
||||
+.TP
|
||||
+\fB-o\fR, \fB-\-output-file\fR=\fIfile_path\fR
|
||||
+The destination path for the updated configuration file. Use "-" to
|
||||
+send it to stdout.
|
||||
+
|
||||
+.TP
|
||||
+\fB-\-devtree\fR=\fIfile_path\fR
|
||||
Use \fIpath\fR for device tree path in place of the path of any devicetree
|
||||
directive found in the template stanza.
|
||||
|
||||
+.TP
|
||||
+\fB-\-devtreedir\fR=\fIfile_path\fR
|
||||
+Use the specified \fIfile path\fR to load the devicetree definition. This is for
|
||||
+platforms where a flat file is used instead of firmware to instruct the kernel
|
||||
+how to communicate with devices.
|
||||
+
|
||||
.SS Multiboot Options
|
||||
|
||||
-The Multiboot Specification provides a genreic interface for boot
|
||||
+The Multiboot Specification provides a generic interface for boot
|
||||
loaders and operating systems. It is supported by the GRUB bootloader.
|
||||
|
||||
.TP
|
||||
\fB-\-add-multiboot\fR=\fImultiboot-path\fR
|
||||
Add a new boot entry for the multiboot kernel located at
|
||||
\fImultiboot-path\fR. Note that this is generally accompanied with a
|
||||
-\fI--add-kernel\fR option.
|
||||
+\fB--add-kernel\fR option.
|
||||
|
||||
.TP
|
||||
\fB-\-remove-multiboot\fR=\fImultiboot-path\fR
|
||||
@@ -249,11 +324,63 @@ The command line syntax is more than a little baroque. This probably
|
||||
won't be fixed as \fBgrubby\fR is only intended to be called from shell
|
||||
scripts which can get it right.
|
||||
|
||||
+.SH EXAMPLE
|
||||
+
|
||||
+The following examples assume the following:
|
||||
+
|
||||
+.TS
|
||||
+allbox;
|
||||
+rbw15 l.
|
||||
+cfg_file Full path to bootloader config file
|
||||
+new_kernel Full path to kernel image to be installed
|
||||
+old_kernel Full path to old kernel image to be removed
|
||||
+current_kernel Full path to a currently installed kernel
|
||||
+entry_title Title that appears on bootloader menu
|
||||
+new_initrd Full path to initrd for a new kernel
|
||||
+kernel_args Set of arguments for the kernel
|
||||
+menu_index Index number of a menu entry
|
||||
+.TE
|
||||
+
|
||||
+The examples below quote strings that may have spaces or other whitespace in them. It is also
|
||||
+perfectly valid to backslash escape these strings if that is more convenient.
|
||||
+
|
||||
+.PP
|
||||
+Add a new kernel entry and copy all options from the current default kernel. This is the behavior
|
||||
+that most users will want.
|
||||
+.IP
|
||||
+\fBgrubby\fR --add-kernel=\fInew_kernel\fR --title="\fIentry_title\fR" --initrd="\fInew_initrd\fR" --copy-default
|
||||
+.PP
|
||||
+Add a new kernel entry with custom arguments
|
||||
+.IP
|
||||
+\fBgrubby\fR --add-kernel=\fInew_kernel\fR --title="\fIentry_title\fR" --initrd="\fInew_initrd\fR" --args=\fIkernel_args\fR
|
||||
+.PP
|
||||
+Remove \fBall menu entries\fR for a specified kernel.
|
||||
+.IP
|
||||
+\fBgrubby\fR --remove-kernel=\fIold_kernel\fR
|
||||
+.PP
|
||||
+Target a single menu entry to remove without targetting other entries with the same kernel.
|
||||
+.IP
|
||||
+\fBgrubby\fR --info=\fIold_kernel\fR
|
||||
+
|
||||
+\fBgrubby\fR --remove-kernel=\fImenu_index\fR
|
||||
+.PP
|
||||
+Update the arguments for all entries of a specific kernel. New arguments get added while existing arguments get updated values.
|
||||
+.IP
|
||||
+\fBgrubby\fR --update-kernel=\fIcurrent_kernel\fR --args="\fIkernel_args\fR"
|
||||
+.PP
|
||||
+Remove the arguments for a single entry of a specific kernel.
|
||||
+.IP
|
||||
+\fBgrubby\fR --info=\fIcurrent_kernel\fR
|
||||
+
|
||||
+\fBgrubby\fR --remove-args=\fImenu_index\fR --args="\fIkernel_args\fR"
|
||||
+
|
||||
.SH "SEE ALSO"
|
||||
|
||||
.BR grub (8),
|
||||
.BR lilo (8),
|
||||
.BR yaboot (8),
|
||||
+.BR zipl (8),
|
||||
+.BR dracut (8),
|
||||
.BR mkinitrd (8)
|
||||
|
||||
.SH AUTHORS
|
||||
@@ -262,4 +389,5 @@ scripts which can get it right.
|
||||
Erik Troan
|
||||
Jeremy Katz
|
||||
Peter Jones
|
||||
+Robert Marshall
|
||||
.fi
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,29 @@
|
||||
From 850fbd8b0dcc728653993661b92349f3eb2b39a6 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Marshall <rmarshall@redhat.com>
|
||||
Date: Tue, 28 Jun 2016 16:26:32 -0400
|
||||
Subject: [PATCH 27/55] Fix inline help typo (#1232168)
|
||||
|
||||
Discovered a typo while synchronizing the inline help with the man pages
|
||||
and fixed it.
|
||||
|
||||
Related: rhbz#1232168
|
||||
---
|
||||
grubby.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index d889399449b..e2384c55898 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -4786,7 +4786,7 @@ int main(int argc, const char **argv)
|
||||
NULL},
|
||||
{"boot-filesystem", 0, POPT_ARG_STRING, &bootPrefix, 0,
|
||||
_
|
||||
- ("filestystem which contains /boot directory (for testing only)"),
|
||||
+ ("filesystem which contains /boot directory (for testing only)"),
|
||||
_("bootfs")},
|
||||
#if defined(__i386__) || defined(__x86_64__) || defined (__powerpc64__) || defined (__ia64__)
|
||||
{"bootloader-probe", 0, POPT_ARG_NONE, &bootloaderProbe, 0,
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,213 @@
|
||||
From b24cd1c5c8467ac6f7c5680db3a49ef6adc8df21 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Tue, 28 Jun 2016 16:50:37 -0400
|
||||
Subject: [PATCH 28/55] More edits for grubby.8 (#1232168)
|
||||
|
||||
- Don't switch between the passive and active voice between the option
|
||||
descriptions
|
||||
- keep the same point of view between options ("[it] removes all
|
||||
entries" vs "remove all entries")
|
||||
- line wrap everywhere except the example envocations at <80 columns,
|
||||
not 100.
|
||||
- consistent use of i386 vs ia32
|
||||
|
||||
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||
|
||||
Related: rhbz#1232168
|
||||
---
|
||||
grubby.8 | 88 ++++++++++++++++++++++++++++++--------------------------
|
||||
1 file changed, 48 insertions(+), 40 deletions(-)
|
||||
|
||||
diff --git a/grubby.8 b/grubby.8
|
||||
index 64a6984fba0..690676858ca 100644
|
||||
--- a/grubby.8
|
||||
+++ b/grubby.8
|
||||
@@ -2,11 +2,12 @@
|
||||
|
||||
.SH NAME
|
||||
|
||||
-grubby \- command line tool used to configure bootloader menu entries across multiple architectures
|
||||
+grubby \- command line tool used to configure bootloader menu entries across
|
||||
+multiple architectures
|
||||
|
||||
.SH SYNOPSIS
|
||||
|
||||
-\fBgrubby\fR [\fIOPTIONS...\fR]
|
||||
+\fBgrubby\fR [\fIOPTIONS\fR]
|
||||
|
||||
.SH DESCRIPTION
|
||||
|
||||
@@ -37,13 +38,13 @@ are deprecated in favor of previously mentioned bootloaders. The
|
||||
|
||||
.SS Default Behavior
|
||||
|
||||
-The default architecture is chosen at compile time. The grubby executable
|
||||
-has a series of built in assumptions about what bootloader is being used and
|
||||
-where its configuration file lives. If no output format option is specified
|
||||
-on the command line then grubby will use these default settings to first
|
||||
-search for an existing configuration and, if it is not found, assume that
|
||||
-it should be placed in the standard location. These default assumptions are
|
||||
-listed in the table below.
|
||||
+The default bootloader target is primarily determined by the architecture
|
||||
+for which grubby has been built. Each architecture has a preferred
|
||||
+bootloader, and each bootloader has its own configuration file. If no
|
||||
+bootloader is selected on the command line, grubby will use these default
|
||||
+settings to search for an existing configuration. If no bootloader
|
||||
+configuration file is found, grubby will use the default value for that
|
||||
+architecture. These defaults are listed in the table below.
|
||||
|
||||
.TS
|
||||
allbox;
|
||||
@@ -81,19 +82,18 @@ Add a new boot entry for the kernel located at \fIkernel-path\fR. A title for
|
||||
the boot entry must be set using \fB-\-title\fR. Most invocations should also
|
||||
include \fB-\-initrd\fR with memtest86 as a notable exception.
|
||||
|
||||
-The \fB-\-update-kernel\fR
|
||||
-option may not be used in the same invocation.
|
||||
+The \fB-\-update-kernel\fR option may not be used in the same invocation.
|
||||
|
||||
.TP
|
||||
\fB-\-remove-kernel\fR=\fIkernel-path\fR
|
||||
-Removes all boot entries which match \fIkernel-path\fR. This may be used
|
||||
-along with \fB-\-add-kernel\fR, in which case the new kernel being added will
|
||||
-never be removed.
|
||||
+Remove all boot entries which match \fIkernel-path\fR. This may be used
|
||||
+along with \fB-\-add-kernel\fR, in which case the new entry being added will
|
||||
+not be removed.
|
||||
|
||||
.TP
|
||||
\fB-\-update-kernel\fR=\fIkernel-path\fR
|
||||
-The entries for kernels matching \fRkernel-path\fR are updated. Currently
|
||||
-the only items that can be updated is the kernel argument list, which is
|
||||
+Update the entries for kernels matching \fRkernel-path\fR. Currently
|
||||
+the only item that can be updated is the kernel argument list, which is
|
||||
modified via the \fB-\-args\fR and \fB-\-remove-args\fR options.
|
||||
|
||||
.TP
|
||||
@@ -135,7 +135,7 @@ being added.
|
||||
|
||||
.TP
|
||||
\fB-\-efi\fR
|
||||
-Use linuxefi and initrdefi when constructing bootloader stanzas instead of linux and initrd.
|
||||
+Use appropriate bootloader commands for EFI on this architecture.
|
||||
|
||||
.TP
|
||||
\fB-\-set-default\fR=\fIkernel-path\fR
|
||||
@@ -188,16 +188,18 @@ Display information on all boot entries which match \fIkernel-path\fR. I
|
||||
|
||||
.TP
|
||||
\fB-\-bootloader-probe\fR
|
||||
+Attempt to probe for installed bootloaders. If this option is specified,
|
||||
\fBgrubby\fR tries to determine if \fBgrub\fR or \fBlilo\fR is currently
|
||||
-installed. When one of those bootloaders is found the name of that bootloader
|
||||
-is displayed on stdout. Both could be installed (on different devices), and
|
||||
-grubby will print out the names of both bootloaders, one per line. The probe
|
||||
-for \fBgrub\fR requires a commented out boot directive \fBgrub.conf\fR
|
||||
-identical to the standard directive in the lilo configuration file. If this
|
||||
-is not present \fBgrubby\fR will assume grub is not installed (note
|
||||
-that \fBanaconda\fR places this directive in \fBgrub.conf\fR files it creates).
|
||||
+installed. When one of those bootloaders is found the name of that
|
||||
+bootloader is displayed on stdout. Both could be installed (on different
|
||||
+devices), and grubby will print out the names of both bootloaders, one per
|
||||
+line. The probe for \fBgrub\fR requires a commented out boot directive
|
||||
+\fBgrub.conf\fR identical to the standard directive in the lilo
|
||||
+configuration file. If this is not present \fBgrubby\fR will assume grub is
|
||||
+not installed (note that \fBanaconda\fR places this directive in
|
||||
+\fBgrub.conf\fR files it creates).
|
||||
|
||||
-\fIThis option is only available on i386 platforms.\fR
|
||||
+\fIThis option is only available on x86 BIOS platforms.\fR
|
||||
|
||||
.TP
|
||||
\fB-v\fR, \fB-\-version\fR
|
||||
@@ -213,7 +215,8 @@ alternative bootloader.
|
||||
|
||||
.TP
|
||||
\fB-\-elilo\fR
|
||||
-Use an \fBelilo\fR style configuration file. This is the default on ia64 platforms. This format is deprecated.
|
||||
+Use an \fBelilo\fR style configuration file. This is the default on ia64
|
||||
+platforms. This format is deprecated.
|
||||
|
||||
.TP
|
||||
\fB-\-extlinux\fR
|
||||
@@ -221,13 +224,14 @@ Use an \fBextlinux\fR style configuration file. This format is deprecated.
|
||||
|
||||
.TP
|
||||
\fB-\-grub\fR
|
||||
-Use a \fBgrub\fR style configuration file. This is the default on ia32 platforms.
|
||||
+Use a \fBgrub\fR style configuration file. This is the default on the i386
|
||||
+architecture.
|
||||
|
||||
.TP
|
||||
\fB-\-grub2\fR
|
||||
-Use a \fBgrub2\fR style configuration file. This is the default on \fBx86_64\fR
|
||||
-architecture as well as the \fBppc64\fR and \fBppc64le\fR architectures
|
||||
-running on Power8 or later hardware.
|
||||
+Use a \fBgrub2\fR style configuration file. This is the default on
|
||||
+\fBx86_64\fR architecture as well as the \fBppc64\fR and \fBppc64le\fR
|
||||
+architectures running on Power8 or later hardware.
|
||||
|
||||
.TP
|
||||
\fB-\-lilo\fR
|
||||
@@ -235,7 +239,8 @@ Use a \fBlilo\fR style configuration file.
|
||||
|
||||
.TP
|
||||
\fB-\-silo\fR
|
||||
-Use a \fBsilo\fR style configuration file. This is the default on SPARC systems. This format is legacy, deprecated, and unsupported.
|
||||
+Use a \fBsilo\fR style configuration file. This is the default on SPARC
|
||||
+systems. This format is legacy, deprecated, and unsupported.
|
||||
|
||||
.TP
|
||||
\fB-\-yaboot\fR
|
||||
@@ -286,9 +291,9 @@ directive found in the template stanza.
|
||||
|
||||
.TP
|
||||
\fB-\-devtreedir\fR=\fIfile_path\fR
|
||||
-Use the specified \fIfile path\fR to load the devicetree definition. This is for
|
||||
-platforms where a flat file is used instead of firmware to instruct the kernel
|
||||
-how to communicate with devices.
|
||||
+Use the specified \fIfile path\fR to load the devicetree definition. This is
|
||||
+for platforms where a flat file is used instead of firmware to instruct the
|
||||
+kernel how to communicate with devices.
|
||||
|
||||
.SS Multiboot Options
|
||||
|
||||
@@ -341,12 +346,13 @@ kernel_args Set of arguments for the kernel
|
||||
menu_index Index number of a menu entry
|
||||
.TE
|
||||
|
||||
-The examples below quote strings that may have spaces or other whitespace in them. It is also
|
||||
-perfectly valid to backslash escape these strings if that is more convenient.
|
||||
+The examples below quote strings that may have spaces or other whitespace in
|
||||
+them. It is also perfectly valid to backslash escape these strings if that
|
||||
+is more convenient.
|
||||
|
||||
.PP
|
||||
-Add a new kernel entry and copy all options from the current default kernel. This is the behavior
|
||||
-that most users will want.
|
||||
+Add a new kernel entry and copy all options from the current default kernel.
|
||||
+This is the behavior that most users will want.
|
||||
.IP
|
||||
\fBgrubby\fR --add-kernel=\fInew_kernel\fR --title="\fIentry_title\fR" --initrd="\fInew_initrd\fR" --copy-default
|
||||
.PP
|
||||
@@ -358,13 +364,15 @@ Remove \fBall menu entries\fR for a specified kernel.
|
||||
.IP
|
||||
\fBgrubby\fR --remove-kernel=\fIold_kernel\fR
|
||||
.PP
|
||||
-Target a single menu entry to remove without targetting other entries with the same kernel.
|
||||
+Target a single menu entry to remove without targetting other entries with
|
||||
+the same kernel.
|
||||
.IP
|
||||
\fBgrubby\fR --info=\fIold_kernel\fR
|
||||
|
||||
\fBgrubby\fR --remove-kernel=\fImenu_index\fR
|
||||
.PP
|
||||
-Update the arguments for all entries of a specific kernel. New arguments get added while existing arguments get updated values.
|
||||
+Update the arguments for all entries of a specific kernel. New arguments get
|
||||
+added while existing arguments get updated values.
|
||||
.IP
|
||||
\fBgrubby\fR --update-kernel=\fIcurrent_kernel\fR --args="\fIkernel_args\fR"
|
||||
.PP
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,36 @@
|
||||
From 79651f6be03752ecaefc9c77e2460e1763f6c0ea Mon Sep 17 00:00:00 2001
|
||||
From: Robert Marshall <rmarshall@redhat.com>
|
||||
Date: Fri, 1 Jul 2016 14:24:27 -0400
|
||||
Subject: [PATCH 29/55] Minor man page changes (#1232168)
|
||||
|
||||
Minor wording changes made in the Architecture section after placing the
|
||||
initial draft up for public comment.
|
||||
|
||||
Related: rhbz#1232168
|
||||
---
|
||||
grubby.8 | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/grubby.8 b/grubby.8
|
||||
index 690676858ca..fdf2766fe9a 100644
|
||||
--- a/grubby.8
|
||||
+++ b/grubby.8
|
||||
@@ -29,12 +29,12 @@ Legacy \fBs390\fR and the current \fBs390x\fR architectures
|
||||
and their \fBzipl\fR bootloader are fully supported.
|
||||
|
||||
Support for \fByaboot\fR has been deprecated as all ppc architecture
|
||||
-hardware since the Power8 system uses \fBgrub2\fR or petitboot
|
||||
+hardware since the Power8 uses \fBgrub2\fR or petitboot
|
||||
which both use the grub2 configuration file format.
|
||||
|
||||
Legacy bootloaders \fBLILO\fR, \fBSILO\fR, and \fBELILO\fR
|
||||
-are deprecated in favor of previously mentioned bootloaders. The
|
||||
-\fBSILO\fR bootloader should also be considered unsupported.
|
||||
+are deprecated and no longer receiving active support in favor of
|
||||
+previously mentioned bootloaders.
|
||||
|
||||
.SS Default Behavior
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,66 @@
|
||||
From 7b34b49d2a08a2636e0319b94d72ab654a30343d Mon Sep 17 00:00:00 2001
|
||||
From: Robert Marshall <rmarshall@redhat.com>
|
||||
Date: Thu, 8 Dec 2016 13:39:22 -0500
|
||||
Subject: [PATCH 30/55] Rename setDefaultImage variables
|
||||
|
||||
The variable names in setDefaultImage did not match well with
|
||||
how they were being used inside the function. Refactored the
|
||||
variable names as a precursor to refactoring the function.
|
||||
|
||||
Related: rhbz#1285601
|
||||
---
|
||||
grubby.c | 18 +++++++++---------
|
||||
1 file changed, 9 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index e2384c55898..9af8d17b345 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -2491,19 +2491,19 @@ void markRemovedImage(struct grubConfig *cfg, const char *image,
|
||||
entry->skip = 1;
|
||||
}
|
||||
|
||||
-void setDefaultImage(struct grubConfig *config, int hasNew,
|
||||
- const char *defaultKernelPath, int newIsDefault,
|
||||
- const char *prefix, int flags, int index)
|
||||
+void setDefaultImage(struct grubConfig *config, int isUserSpecifiedKernelPath,
|
||||
+ const char *defaultKernelPath, int newBootEntryIsDefault,
|
||||
+ const char *prefix, int flags, int newDefaultBootEntryIndex)
|
||||
{
|
||||
struct singleEntry *entry, *entry2, *newDefault;
|
||||
int i, j;
|
||||
|
||||
- if (newIsDefault) {
|
||||
+ if (newBootEntryIsDefault) {
|
||||
config->defaultImage = 0;
|
||||
return;
|
||||
- } else if ((index >= 0) && config->cfi->defaultIsIndex) {
|
||||
- if (findEntryByIndex(config, index))
|
||||
- config->defaultImage = index;
|
||||
+ } else if ((newDefaultBootEntryIndex >= 0) && config->cfi->defaultIsIndex) {
|
||||
+ if (findEntryByIndex(config, newDefaultBootEntryIndex))
|
||||
+ config->defaultImage = newDefaultBootEntryIndex;
|
||||
else
|
||||
config->defaultImage = -1;
|
||||
return;
|
||||
@@ -2531,7 +2531,7 @@ void setDefaultImage(struct grubConfig *config, int hasNew,
|
||||
|
||||
if (entry && !entry->skip) {
|
||||
/* we can preserve the default */
|
||||
- if (hasNew)
|
||||
+ if (isUserSpecifiedKernelPath)
|
||||
config->defaultImage++;
|
||||
|
||||
/* count the number of entries erased before this one */
|
||||
@@ -2540,7 +2540,7 @@ void setDefaultImage(struct grubConfig *config, int hasNew,
|
||||
if (entry2->skip)
|
||||
config->defaultImage--;
|
||||
}
|
||||
- } else if (hasNew) {
|
||||
+ } else if (isUserSpecifiedKernelPath) {
|
||||
config->defaultImage = 0;
|
||||
} else {
|
||||
/* Either we just erased the default (or the default line was
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,198 @@
|
||||
From 624a75f2d01d986ec78f60319ebc2acd37faada2 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Marshall <rmarshall@redhat.com>
|
||||
Date: Tue, 13 Dec 2016 14:36:31 -0500
|
||||
Subject: [PATCH 31/55] Add index constant definitions instead of open-coded
|
||||
values.
|
||||
|
||||
Added numeric constants NO_DEFAULT_ENTRY and FIRST_ENTRY_INDEX. This
|
||||
clarifies the intent of various assignment operations throughout the
|
||||
source file.
|
||||
|
||||
Related: rhbz#1285601
|
||||
---
|
||||
grubby.c | 44 ++++++++++++++++++++++++--------------------
|
||||
1 file changed, 24 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index 9af8d17b345..a717c18999b 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -132,6 +132,10 @@ struct singleEntry {
|
||||
#define NEED_DEVTREE (1 << 6)
|
||||
|
||||
#define MAIN_DEFAULT (1 << 0)
|
||||
+#define FIRST_ENTRY_INDEX 0 /* boot entry index value begin and increment
|
||||
+ from this initial value */
|
||||
+#define NO_DEFAULT_ENTRY -1 /* indicates that no specific default boot
|
||||
+ entry was set or currently exists */
|
||||
#define DEFAULT_SAVED -2
|
||||
#define DEFAULT_SAVED_GRUB2 -3
|
||||
|
||||
@@ -1612,7 +1616,7 @@ static struct grubConfig *readConfig(const char *inName,
|
||||
*end == ' ' || *end == '\t'))
|
||||
end++;
|
||||
if (*end)
|
||||
- cfg->defaultImage = -1;
|
||||
+ cfg->defaultImage = NO_DEFAULT_ENTRY;
|
||||
} else if (defaultLine->numElements == 3) {
|
||||
char *value = defaultLine->elements[2].item;
|
||||
while (*value && (*value == '"' ||
|
||||
@@ -1625,7 +1629,7 @@ static struct grubConfig *readConfig(const char *inName,
|
||||
*end == ' ' || *end == '\t'))
|
||||
end++;
|
||||
if (*end)
|
||||
- cfg->defaultImage = -1;
|
||||
+ cfg->defaultImage = NO_DEFAULT_ENTRY;
|
||||
}
|
||||
} else if (cfi->defaultSupportSaved &&
|
||||
!strncmp(defaultLine->elements[1].item, "saved",
|
||||
@@ -1635,7 +1639,7 @@ static struct grubConfig *readConfig(const char *inName,
|
||||
cfg->defaultImage =
|
||||
strtol(defaultLine->elements[1].item, &end, 10);
|
||||
if (*end)
|
||||
- cfg->defaultImage = -1;
|
||||
+ cfg->defaultImage = NO_DEFAULT_ENTRY;
|
||||
} else if (defaultLine->numElements >= 2) {
|
||||
int i = 0;
|
||||
while ((entry = findEntryByIndex(cfg, i))) {
|
||||
@@ -1663,7 +1667,7 @@ static struct grubConfig *readConfig(const char *inName,
|
||||
if (entry) {
|
||||
cfg->defaultImage = i;
|
||||
} else {
|
||||
- cfg->defaultImage = -1;
|
||||
+ cfg->defaultImage = NO_DEFAULT_ENTRY;
|
||||
}
|
||||
}
|
||||
} else if (cfg->cfi->defaultIsSaved && cfg->cfi->getEnv) {
|
||||
@@ -1680,7 +1684,7 @@ static struct grubConfig *readConfig(const char *inName,
|
||||
cfg->defaultImage = index;
|
||||
}
|
||||
} else {
|
||||
- cfg->defaultImage = 0;
|
||||
+ cfg->defaultImage = FIRST_ENTRY_INDEX;
|
||||
}
|
||||
|
||||
return cfg;
|
||||
@@ -1700,7 +1704,7 @@ static void writeDefault(FILE * out, char *indent,
|
||||
fprintf(out, "%sdefault%ssaved\n", indent, separator);
|
||||
else if (cfg->cfi->defaultIsSaved) {
|
||||
fprintf(out, "%sset default=\"${saved_entry}\"\n", indent);
|
||||
- if (cfg->defaultImage >= 0 && cfg->cfi->setEnv) {
|
||||
+ if (cfg->defaultImage >= FIRST_ENTRY_INDEX && cfg->cfi->setEnv) {
|
||||
char *title;
|
||||
entry = findEntryByIndex(cfg, cfg->defaultImage);
|
||||
line = getLineByType(LT_MENUENTRY, entry->lines);
|
||||
@@ -1713,7 +1717,7 @@ static void writeDefault(FILE * out, char *indent,
|
||||
"saved_entry", title);
|
||||
}
|
||||
}
|
||||
- } else if (cfg->defaultImage > -1) {
|
||||
+ } else if (cfg->defaultImage >= FIRST_ENTRY_INDEX) {
|
||||
if (cfg->cfi->defaultIsIndex) {
|
||||
if (cfg->cfi->defaultIsVariable) {
|
||||
fprintf(out, "%sset default=\"%d\"\n", indent,
|
||||
@@ -2417,7 +2421,7 @@ struct singleEntry *findTemplate(struct grubConfig *cfg, const char *prefix,
|
||||
}
|
||||
}
|
||||
}
|
||||
- } else if (cfg->defaultImage > -1) {
|
||||
+ } else if (cfg->defaultImage >= FIRST_ENTRY_INDEX) {
|
||||
entry = findEntryByIndex(cfg, cfg->defaultImage);
|
||||
if (entry && suitableImage(entry, prefix, skipRemoved, flags)) {
|
||||
if (indexPtr)
|
||||
@@ -2499,20 +2503,20 @@ void setDefaultImage(struct grubConfig *config, int isUserSpecifiedKernelPath,
|
||||
int i, j;
|
||||
|
||||
if (newBootEntryIsDefault) {
|
||||
- config->defaultImage = 0;
|
||||
+ config->defaultImage = FIRST_ENTRY_INDEX;
|
||||
return;
|
||||
} else if ((newDefaultBootEntryIndex >= 0) && config->cfi->defaultIsIndex) {
|
||||
if (findEntryByIndex(config, newDefaultBootEntryIndex))
|
||||
config->defaultImage = newDefaultBootEntryIndex;
|
||||
else
|
||||
- config->defaultImage = -1;
|
||||
+ config->defaultImage = NO_DEFAULT_ENTRY;
|
||||
return;
|
||||
} else if (defaultKernelPath) {
|
||||
i = 0;
|
||||
if (findEntryByPath(config, defaultKernelPath, prefix, &i)) {
|
||||
config->defaultImage = i;
|
||||
} else {
|
||||
- config->defaultImage = -1;
|
||||
+ config->defaultImage = NO_DEFAULT_ENTRY;
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -2524,7 +2528,7 @@ void setDefaultImage(struct grubConfig *config, int isUserSpecifiedKernelPath,
|
||||
/* default is set to saved, we don't want to change it */
|
||||
return;
|
||||
|
||||
- if (config->defaultImage > -1)
|
||||
+ if (config->defaultImage >= FIRST_ENTRY_INDEX)
|
||||
entry = findEntryByIndex(config, config->defaultImage);
|
||||
else
|
||||
entry = NULL;
|
||||
@@ -2541,7 +2545,7 @@ void setDefaultImage(struct grubConfig *config, int isUserSpecifiedKernelPath,
|
||||
config->defaultImage--;
|
||||
}
|
||||
} else if (isUserSpecifiedKernelPath) {
|
||||
- config->defaultImage = 0;
|
||||
+ config->defaultImage = FIRST_ENTRY_INDEX;
|
||||
} else {
|
||||
/* Either we just erased the default (or the default line was
|
||||
* bad to begin with) and didn't put a new one in. We'll use
|
||||
@@ -2550,7 +2554,7 @@ void setDefaultImage(struct grubConfig *config, int isUserSpecifiedKernelPath,
|
||||
findTemplate(config, prefix, &config->defaultImage, 1,
|
||||
flags);
|
||||
if (!newDefault)
|
||||
- config->defaultImage = -1;
|
||||
+ config->defaultImage = NO_DEFAULT_ENTRY;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5175,11 +5179,11 @@ int main(int argc, const char **argv)
|
||||
struct singleEntry *entry;
|
||||
char *rootspec;
|
||||
|
||||
- if (config->defaultImage == -1)
|
||||
+ if (config->defaultImage == NO_DEFAULT_ENTRY)
|
||||
return 0;
|
||||
if (config->defaultImage == DEFAULT_SAVED_GRUB2 &&
|
||||
cfi->defaultIsSaved)
|
||||
- config->defaultImage = 0;
|
||||
+ config->defaultImage = FIRST_ENTRY_INDEX;
|
||||
entry = findEntryByIndex(config, config->defaultImage);
|
||||
if (!entry)
|
||||
return 0;
|
||||
@@ -5202,11 +5206,11 @@ int main(int argc, const char **argv)
|
||||
struct singleLine *line;
|
||||
struct singleEntry *entry;
|
||||
|
||||
- if (config->defaultImage == -1)
|
||||
+ if (config->defaultImage == NO_DEFAULT_ENTRY)
|
||||
return 0;
|
||||
if (config->defaultImage == DEFAULT_SAVED_GRUB2 &&
|
||||
cfi->defaultIsSaved)
|
||||
- config->defaultImage = 0;
|
||||
+ config->defaultImage = FIRST_ENTRY_INDEX;
|
||||
entry = findEntryByIndex(config, config->defaultImage);
|
||||
if (!entry)
|
||||
return 0;
|
||||
@@ -5236,11 +5240,11 @@ int main(int argc, const char **argv)
|
||||
return 0;
|
||||
|
||||
} else if (displayDefaultIndex) {
|
||||
- if (config->defaultImage == -1)
|
||||
+ if (config->defaultImage == NO_DEFAULT_ENTRY)
|
||||
return 0;
|
||||
if (config->defaultImage == DEFAULT_SAVED_GRUB2 &&
|
||||
cfi->defaultIsSaved)
|
||||
- config->defaultImage = 0;
|
||||
+ config->defaultImage = FIRST_ENTRY_INDEX;
|
||||
printf("%i\n", config->defaultImage);
|
||||
return 0;
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,50 @@
|
||||
From 12ae8096bd3099b81fded8c30be1a8050ed7e68c Mon Sep 17 00:00:00 2001
|
||||
From: Robert Marshall <rmarshall@redhat.com>
|
||||
Date: Thu, 8 Dec 2016 16:52:45 -0500
|
||||
Subject: [PATCH 32/55] Track configuration modifications
|
||||
|
||||
The setDefaultImage function had a subtle dependency on being run before
|
||||
addNewKernel is invoked. Added the ability to track invocation to
|
||||
prevent them from being so tightly coupled.
|
||||
|
||||
Related: rhbz#1285601
|
||||
---
|
||||
grubby.c | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index a717c18999b..1f712ec1391 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -678,6 +678,8 @@ struct grubConfig {
|
||||
int fallbackImage; /* just like defaultImage */
|
||||
int flags;
|
||||
struct configFileInfo *cfi;
|
||||
+ int isModified; /* assumes only one entry added
|
||||
+ per invocation of grubby */
|
||||
};
|
||||
|
||||
blkid_cache blkid;
|
||||
@@ -1297,6 +1299,7 @@ static struct grubConfig *readConfig(const char *inName,
|
||||
cfg->theLines = NULL;
|
||||
cfg->entries = NULL;
|
||||
cfg->fallbackImage = 0;
|
||||
+ cfg->isModified = 0;
|
||||
|
||||
/* copy everything we have */
|
||||
while (*head) {
|
||||
@@ -4726,8 +4729,10 @@ int addNewKernel(struct grubConfig *config, struct singleEntry *template,
|
||||
}
|
||||
|
||||
if (updateImage(config, indexs, prefix, newKernelArgs, NULL,
|
||||
- newMBKernelArgs, NULL))
|
||||
+ newMBKernelArgs, NULL)) {
|
||||
+ config->isModified = 1;
|
||||
return 1;
|
||||
+ }
|
||||
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,65 @@
|
||||
From 5ec8c855f307a89f08013c832bd7e121c8f83327 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Marshall <rmarshall@redhat.com>
|
||||
Date: Thu, 15 Dec 2016 21:47:28 -0500
|
||||
Subject: [PATCH 33/55] Fix some test cases where the resulting default index
|
||||
is wrong
|
||||
|
||||
Fix two issues with tests where removing a kernel or adding a boot entry
|
||||
at a user specified index had the wrong default index selected in the
|
||||
expected output.
|
||||
|
||||
One of these issues is the --set-index test cases for grub 1, which
|
||||
expect --make-default is implied where it should not be.
|
||||
|
||||
The third is a removal test, where the default index in the result data
|
||||
is off by one when we've removed 2 entries keyed off of the kernel
|
||||
filesystem path.
|
||||
|
||||
This change causes these test cases to fail.
|
||||
|
||||
Resolves: rhbz#1285601
|
||||
---
|
||||
test/results/add/g1.17 | 2 +-
|
||||
test/results/add/g1.9 | 2 +-
|
||||
test/results/remove/g7.1 | 2 +-
|
||||
3 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/test/results/add/g1.17 b/test/results/add/g1.17
|
||||
index 6a388228768..eda4e93329d 100644
|
||||
--- a/test/results/add/g1.17
|
||||
+++ b/test/results/add/g1.17
|
||||
@@ -7,7 +7,7 @@
|
||||
# kernel /vmlinuz-version ro root=/dev/sda1
|
||||
# initrd /initrd-version.img
|
||||
#boot=/dev/hda
|
||||
-default=1
|
||||
+default=0
|
||||
timeout=10
|
||||
splashimage=(hd0,0)/grub/splash.xpm.gz
|
||||
title Red Hat Linux (2.4.7-2)
|
||||
diff --git a/test/results/add/g1.9 b/test/results/add/g1.9
|
||||
index 310623d13d2..8976e762d74 100644
|
||||
--- a/test/results/add/g1.9
|
||||
+++ b/test/results/add/g1.9
|
||||
@@ -7,7 +7,7 @@
|
||||
# kernel /vmlinuz-version ro root=/dev/sda1
|
||||
# initrd /initrd-version.img
|
||||
#boot=/dev/hda
|
||||
-default=2
|
||||
+default=1
|
||||
timeout=10
|
||||
splashimage=(hd0,0)/grub/splash.xpm.gz
|
||||
title Red Hat Linux (2.4.7-2)
|
||||
diff --git a/test/results/remove/g7.1 b/test/results/remove/g7.1
|
||||
index ea1a6fbaec9..611d7a16685 100644
|
||||
--- a/test/results/remove/g7.1
|
||||
+++ b/test/results/remove/g7.1
|
||||
@@ -1,4 +1,4 @@
|
||||
-default=1
|
||||
+default=0
|
||||
timeout=10
|
||||
splashimage=(hd0,5)/boot/grub/splash.xpm.gz
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,197 @@
|
||||
From ff38bf8209faf54c25e15b1fcec4184fee1f39e9 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Marshall <rmarshall@redhat.com>
|
||||
Date: Tue, 13 Dec 2016 18:20:15 -0500
|
||||
Subject: [PATCH 34/55] Don't assume --make-default just because --set-index
|
||||
was passed.
|
||||
|
||||
grubby previously made the assumption that every time a new
|
||||
boot entry gets added using --set-index, it should be the default. Due
|
||||
to this behavior, it also masked an logic error that prevented the
|
||||
selection of the proper index in cases where it was necessary to
|
||||
dynamically pick a new default boot entry, or to keep the existing
|
||||
default boot entry when its position in the config file moved.
|
||||
|
||||
Resolves: rhbz#1285601
|
||||
---
|
||||
grubby.c | 138 ++++++++++++++++++++++++++++++++++++++-----------------
|
||||
1 file changed, 97 insertions(+), 41 deletions(-)
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index 1f712ec1391..fcca6364887 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -2498,66 +2498,121 @@ void markRemovedImage(struct grubConfig *cfg, const char *image,
|
||||
entry->skip = 1;
|
||||
}
|
||||
|
||||
-void setDefaultImage(struct grubConfig *config, int isUserSpecifiedKernelPath,
|
||||
+void setDefaultImage(struct grubConfig *config, int isAddingBootEntry,
|
||||
const char *defaultKernelPath, int newBootEntryIsDefault,
|
||||
- const char *prefix, int flags, int newDefaultBootEntryIndex)
|
||||
+ const char *prefix, int flags,
|
||||
+ int newDefaultBootEntryIndex, int newBootEntryIndex)
|
||||
{
|
||||
- struct singleEntry *entry, *entry2, *newDefault;
|
||||
- int i, j;
|
||||
+ struct singleEntry *bootEntry, *newDefault;
|
||||
+ int indexToVerify, firstKernelEntryIndex, currentLookupIndex;
|
||||
|
||||
+ /* handle the two cases where the user explictly picks the default
|
||||
+ * boot entry index as it would exist post-modification */
|
||||
+
|
||||
+ /* Case 1: user chose to make the latest boot entry the default */
|
||||
if (newBootEntryIsDefault) {
|
||||
- config->defaultImage = FIRST_ENTRY_INDEX;
|
||||
+ config->defaultImage = newBootEntryIndex;
|
||||
return;
|
||||
- } else if ((newDefaultBootEntryIndex >= 0) && config->cfi->defaultIsIndex) {
|
||||
- if (findEntryByIndex(config, newDefaultBootEntryIndex))
|
||||
+ }
|
||||
+
|
||||
+ /* Case 2: user picked an arbitrary index as the default boot entry */
|
||||
+ if (newDefaultBootEntryIndex >= FIRST_ENTRY_INDEX
|
||||
+ && config->cfi->defaultIsIndex) {
|
||||
+ indexToVerify = newDefaultBootEntryIndex;
|
||||
+
|
||||
+ /* user chose to make latest boot entry the default */
|
||||
+ if (newDefaultBootEntryIndex == newBootEntryIndex) {
|
||||
+ config->defaultImage = newBootEntryIndex;
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ /* the user picks the default index based on the
|
||||
+ * order of the bootloader configuration after
|
||||
+ * modification; ensure we are checking for the
|
||||
+ * existence of the correct entry */
|
||||
+ if (newBootEntryIndex < newDefaultBootEntryIndex) {
|
||||
+ if (!config->isModified)
|
||||
+ indexToVerify--;
|
||||
+ }
|
||||
+
|
||||
+ /* verify the user selected index will exist */
|
||||
+ if (findEntryByIndex(config, indexToVerify)) {
|
||||
config->defaultImage = newDefaultBootEntryIndex;
|
||||
- else
|
||||
- config->defaultImage = NO_DEFAULT_ENTRY;
|
||||
- return;
|
||||
- } else if (defaultKernelPath) {
|
||||
- i = 0;
|
||||
- if (findEntryByPath(config, defaultKernelPath, prefix, &i)) {
|
||||
- config->defaultImage = i;
|
||||
} else {
|
||||
config->defaultImage = NO_DEFAULT_ENTRY;
|
||||
- return;
|
||||
}
|
||||
- }
|
||||
|
||||
- /* defaultImage now points to what we'd like to use, but before any
|
||||
- * order changes */
|
||||
- if ((config->defaultImage == DEFAULT_SAVED) ||
|
||||
- (config->defaultImage == DEFAULT_SAVED_GRUB2))
|
||||
- /* default is set to saved, we don't want to change it */
|
||||
return;
|
||||
+ }
|
||||
|
||||
- if (config->defaultImage >= FIRST_ENTRY_INDEX)
|
||||
- entry = findEntryByIndex(config, config->defaultImage);
|
||||
- else
|
||||
- entry = NULL;
|
||||
+ /* handle cases where the index value may shift */
|
||||
|
||||
- if (entry && !entry->skip) {
|
||||
- /* we can preserve the default */
|
||||
- if (isUserSpecifiedKernelPath)
|
||||
+ /* check validity of existing default or first-entry-found
|
||||
+ selection */
|
||||
+ if (defaultKernelPath) {
|
||||
+ /* user requested first-entry-found */
|
||||
+ if (!findEntryByPath(config, defaultKernelPath,
|
||||
+ prefix, &firstKernelEntryIndex)) {
|
||||
+ /* don't change default if can't find match */
|
||||
+ config->defaultImage = NO_DEFAULT_ENTRY;
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ config->defaultImage = firstKernelEntryIndex;
|
||||
+
|
||||
+ /* this is where we start looking for decrement later */
|
||||
+ currentLookupIndex = config->defaultImage;
|
||||
+
|
||||
+ if (isAddingBootEntry && !config->isModified &&
|
||||
+ (newBootEntryIndex < config->defaultImage)) {
|
||||
+ /* increment because new entry added before default */
|
||||
config->defaultImage++;
|
||||
-
|
||||
- /* count the number of entries erased before this one */
|
||||
- for (j = 0; j < config->defaultImage; j++) {
|
||||
- entry2 = findEntryByIndex(config, j);
|
||||
- if (entry2->skip)
|
||||
- config->defaultImage--;
|
||||
}
|
||||
- } else if (isUserSpecifiedKernelPath) {
|
||||
- config->defaultImage = FIRST_ENTRY_INDEX;
|
||||
} else {
|
||||
- /* Either we just erased the default (or the default line was
|
||||
- * bad to begin with) and didn't put a new one in. We'll use
|
||||
- * the first valid image. */
|
||||
+ /* use pre-existing default entry */
|
||||
+ currentLookupIndex = config->defaultImage;
|
||||
+
|
||||
+ if (isAddingBootEntry
|
||||
+ && (newBootEntryIndex <= config->defaultImage)) {
|
||||
+ config->defaultImage++;
|
||||
+
|
||||
+ if (config->isModified) {
|
||||
+ currentLookupIndex++;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /* sanity check - is this entry index valid? */
|
||||
+ bootEntry = findEntryByIndex(config, currentLookupIndex);
|
||||
+
|
||||
+ if ((bootEntry && bootEntry->skip) || !bootEntry) {
|
||||
+ /* entry is to be skipped or is invalid */
|
||||
+ if (isAddingBootEntry) {
|
||||
+ config->defaultImage = newBootEntryIndex;
|
||||
+ return;
|
||||
+ }
|
||||
newDefault =
|
||||
findTemplate(config, prefix, &config->defaultImage, 1,
|
||||
flags);
|
||||
- if (!newDefault)
|
||||
+ if (!newDefault) {
|
||||
config->defaultImage = NO_DEFAULT_ENTRY;
|
||||
+ }
|
||||
+
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ currentLookupIndex--;
|
||||
+
|
||||
+ /* decrement index by the total number of entries deleted */
|
||||
+
|
||||
+ for (indexToVerify = currentLookupIndex;
|
||||
+ indexToVerify >= FIRST_ENTRY_INDEX; indexToVerify--) {
|
||||
+
|
||||
+ bootEntry = findEntryByIndex(config, indexToVerify);
|
||||
+
|
||||
+ if (bootEntry && bootEntry->skip) {
|
||||
+ config->defaultImage--;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5265,7 +5320,8 @@ int main(int argc, const char **argv)
|
||||
markRemovedImage(config, removeKernelPath, bootPrefix);
|
||||
markRemovedImage(config, removeMBKernel, bootPrefix);
|
||||
setDefaultImage(config, newKernelPath != NULL, defaultKernel,
|
||||
- makeDefault, bootPrefix, flags, defaultIndex);
|
||||
+ makeDefault, bootPrefix, flags, defaultIndex,
|
||||
+ newIndex);
|
||||
setFallbackImage(config, newKernelPath != NULL);
|
||||
if (updateImage(config, updateKernelPath, bootPrefix, newKernelArgs,
|
||||
removeArgs, newMBKernelArgs, removeMBKernelArgs))
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,32 @@
|
||||
From 8836f04b716c9ca56b518627c3d8064f18f9c33d Mon Sep 17 00:00:00 2001
|
||||
From: Robert Marshall <rmarshall@redhat.com>
|
||||
Date: Thu, 15 Dec 2016 21:53:31 -0500
|
||||
Subject: [PATCH 35/55] Clarify --set-default-index in the man page.
|
||||
|
||||
This changes the man page to say that the index value provided with
|
||||
--set-default-index applies to the boot entry list after modifications.
|
||||
|
||||
Resolves: rhbz#1285601
|
||||
---
|
||||
grubby.8 | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/grubby.8 b/grubby.8
|
||||
index fdf2766fe9a..1e8f140c4df 100644
|
||||
--- a/grubby.8
|
||||
+++ b/grubby.8
|
||||
@@ -144,8 +144,9 @@ boot entry. This may not be invoked with \fB-\-set-default-index\fR.
|
||||
|
||||
.TP
|
||||
\fB-\-set-default-index\fR=\fIentry-index\fR
|
||||
-Makes the given entry number the default boot entry. This may not
|
||||
-be invoked with \fB-\-set-default\fR.
|
||||
+Makes the given entry number the default boot entry. This may not be invoked
|
||||
+with \fB-\-set-default\fR. The given value represents the index in the
|
||||
+post-modification boot entry list.
|
||||
|
||||
.TP
|
||||
\fB-\-make-default\fR
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,261 @@
|
||||
From 2d19bc931b0b2a70abc18f6d15dddbf547cafd94 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Marshall <rmarshall@redhat.com>
|
||||
Date: Thu, 22 Dec 2016 17:40:52 -0500
|
||||
Subject: [PATCH 36/55] Add multi-entry removal test (#1285601)
|
||||
|
||||
Test what happens to the default entry set in the grub environment after
|
||||
removing the first two boot entries.
|
||||
|
||||
Related: rhbz#1285601
|
||||
---
|
||||
test.sh | 7 ++
|
||||
test/grub2-support_files/grubenv.4 | 3 +
|
||||
test/grub2.19 | 112 +++++++++++++++++++++++++++++
|
||||
test/results/remove/g2.19 | 88 +++++++++++++++++++++++
|
||||
4 files changed, 210 insertions(+)
|
||||
create mode 100644 test/grub2-support_files/grubenv.4
|
||||
create mode 100644 test/grub2.19
|
||||
create mode 100644 test/results/remove/g2.19
|
||||
|
||||
diff --git a/test.sh b/test.sh
|
||||
index fb7cd2381d5..1ef9eca535d 100755
|
||||
--- a/test.sh
|
||||
+++ b/test.sh
|
||||
@@ -565,6 +565,13 @@ if [ "$testgrub2" == "y" ]; then
|
||||
--copy-default --title 'Red Hat Enterprise Linux Server' \
|
||||
--args=root=/dev/mapper/foo--
|
||||
|
||||
+ grub2Test grub2.19 remove/g2.19 --env grubenv.4 \
|
||||
+ --remove-kernel=/boot/vmlinuz-2.6.38.2-9.fc15.x86_64 \
|
||||
+ --boot-filesystem=/boot/
|
||||
+ commandTest "saved_default output" \
|
||||
+ "grub2-editenv test/grub2-support_files/env_temp list" \
|
||||
+ "saved_entry=Linux, with Fedora 2.6.38.8-32.fc15.x86_64"
|
||||
+
|
||||
# copy a stanza and add arguments as well, while using --set-index=
|
||||
testing="GRUB2 add stanza and new args with --set-index="
|
||||
grub2Test grub2.18 add/g2-1.18 --env grubenv.3 \
|
||||
diff --git a/test/grub2-support_files/grubenv.4 b/test/grub2-support_files/grubenv.4
|
||||
new file mode 100644
|
||||
index 00000000000..13116382feb
|
||||
--- /dev/null
|
||||
+++ b/test/grub2-support_files/grubenv.4
|
||||
@@ -0,0 +1,3 @@
|
||||
+# GRUB Environment Block
|
||||
+saved_entry=Linux, with Fedora 2.6.38.8-32.fc15.x86_64
|
||||
+################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################
|
||||
diff --git a/test/grub2.19 b/test/grub2.19
|
||||
new file mode 100644
|
||||
index 00000000000..be07b3ea6b3
|
||||
--- /dev/null
|
||||
+++ b/test/grub2.19
|
||||
@@ -0,0 +1,112 @@
|
||||
+#
|
||||
+# DO NOT EDIT THIS FILE
|
||||
+#
|
||||
+# It is automatically generated by grub2-mkconfig using templates
|
||||
+# from /etc/grub.d and settings from /etc/default/grub
|
||||
+#
|
||||
+
|
||||
+### BEGIN /etc/grub.d/00_header ###
|
||||
+if [ -s $prefix/grubenv ]; then
|
||||
+ load_env
|
||||
+fi
|
||||
+if [ "${next_entry}" ] ; then
|
||||
+ set default="${next_entry}"
|
||||
+ set next_entry=
|
||||
+ save_env next_entry
|
||||
+ set boot_once=true
|
||||
+else
|
||||
+ set default="${saved_entry}"
|
||||
+fi
|
||||
+
|
||||
+if [ x"${feature_menuentry_id}" = xy ]; then
|
||||
+ menuentry_id_option="--id"
|
||||
+else
|
||||
+ menuentry_id_option=""
|
||||
+fi
|
||||
+
|
||||
+export menuentry_id_option
|
||||
+
|
||||
+if [ "${prev_saved_entry}" ]; then
|
||||
+ set saved_entry="${prev_saved_entry}"
|
||||
+ save_env saved_entry
|
||||
+ set prev_saved_entry=
|
||||
+ save_env prev_saved_entry
|
||||
+ set boot_once=true
|
||||
+fi
|
||||
+
|
||||
+function savedefault {
|
||||
+ if [ -z "${boot_once}" ]; then
|
||||
+ saved_entry="${chosen}"
|
||||
+ save_env saved_entry
|
||||
+ fi
|
||||
+}
|
||||
+
|
||||
+function load_video {
|
||||
+ insmod vbe
|
||||
+ insmod vga
|
||||
+ insmod video_bochs
|
||||
+ insmod video_cirrus
|
||||
+}
|
||||
+
|
||||
+set timeout=5
|
||||
+### END /etc/grub.d/00_header ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/10_linux ###
|
||||
+menuentry 'First Title To Remove' --class gnu-linux --class gnu --class os {
|
||||
+ load_video
|
||||
+ set gfxpayload=keep
|
||||
+ insmod part_msdos
|
||||
+ insmod ext2
|
||||
+ set root='(hd0,msdos1)'
|
||||
+ search --no-floppy --fs-uuid --set=root df0170c9-7d05-415c-bbd1-d4d503ba0eed
|
||||
+ echo 'Loading Linux 2.6.38.2-9.fc15.x86_64 ...'
|
||||
+ linux /vmlinuz-2.6.38.2-9.fc15.x86_64 root=/dev/mapper/vg_pjones5-lv_root ro quiet rhgb
|
||||
+ echo 'Loading initial ramdisk ...'
|
||||
+ initrd /initramfs-2.6.38.2-9.fc15.x86_64.img
|
||||
+}
|
||||
+menuentry 'Second Title To Remove' --class gnu-linux --class gnu --class os {
|
||||
+ load_video
|
||||
+ set gfxpayload=keep
|
||||
+ insmod part_msdos
|
||||
+ insmod ext2
|
||||
+ set root='(hd0,msdos1)'
|
||||
+ search --no-floppy --fs-uuid --set=root df0170c9-7d05-415c-bbd1-d4d503ba0eed
|
||||
+ echo 'Loading Linux 2.6.38.2-9.fc15.x86_64 ...'
|
||||
+ linux /vmlinuz-2.6.38.2-9.fc15.x86_64 root=/dev/mapper/vg_pjones5-lv_root ro quiet rhgb
|
||||
+ echo 'Loading initial ramdisk ...'
|
||||
+ initrd /initramfs-2.6.38.2-9.fc15.x86_64.img
|
||||
+}
|
||||
+menuentry 'Linux, with Fedora 2.6.38.8-32.fc15.x86_64' --class gnu-linux --class gnu --class os {
|
||||
+ load_video
|
||||
+ set gfxpayload=keep
|
||||
+ insmod part_msdos
|
||||
+ insmod ext2
|
||||
+ set root='(hd0,msdos1)'
|
||||
+ search --no-floppy --fs-uuid --set=root df0170c9-7d05-415c-bbd1-d4d503ba0eed
|
||||
+ echo 'Loading Fedora 2.6.38.8-32.fc15.x86_64 ...'
|
||||
+ linux /vmlinuz-2.6.38.8-32.fc15.x86_64 root=/dev/mapper/vg_pjones5-lv_root ro quiet rhgb
|
||||
+ echo 'Loading initial ramdisk ...'
|
||||
+ initrd /initramfs-2.6.38.8-32.fc15.x86_64.img
|
||||
+}
|
||||
+### END /etc/grub.d/10_linux ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/20_linux_xen ###
|
||||
+### END /etc/grub.d/20_linux_xen ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/30_os-prober ###
|
||||
+### END /etc/grub.d/30_os-prober ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/40_custom ###
|
||||
+# This file provides an easy way to add custom menu entries. Simply type the
|
||||
+# menu entries you want to add after this comment. Be careful not to change
|
||||
+# the 'exec tail' line above.
|
||||
+### END /etc/grub.d/40_custom ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/41_custom ###
|
||||
+if [ -f $prefix/custom.cfg ]; then
|
||||
+ source $prefix/custom.cfg;
|
||||
+fi
|
||||
+### END /etc/grub.d/41_custom ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/90_persistent ###
|
||||
+### END /etc/grub.d/90_persistent ###
|
||||
diff --git a/test/results/remove/g2.19 b/test/results/remove/g2.19
|
||||
new file mode 100644
|
||||
index 00000000000..f65edd5ac29
|
||||
--- /dev/null
|
||||
+++ b/test/results/remove/g2.19
|
||||
@@ -0,0 +1,88 @@
|
||||
+#
|
||||
+# DO NOT EDIT THIS FILE
|
||||
+#
|
||||
+# It is automatically generated by grub2-mkconfig using templates
|
||||
+# from /etc/grub.d and settings from /etc/default/grub
|
||||
+#
|
||||
+
|
||||
+### BEGIN /etc/grub.d/00_header ###
|
||||
+if [ -s $prefix/grubenv ]; then
|
||||
+ load_env
|
||||
+fi
|
||||
+if [ "${next_entry}" ] ; then
|
||||
+ set default="${next_entry}"
|
||||
+ set next_entry=
|
||||
+ save_env next_entry
|
||||
+ set boot_once=true
|
||||
+else
|
||||
+ set default="${saved_entry}"
|
||||
+fi
|
||||
+
|
||||
+if [ x"${feature_menuentry_id}" = xy ]; then
|
||||
+ menuentry_id_option="--id"
|
||||
+else
|
||||
+ menuentry_id_option=""
|
||||
+fi
|
||||
+
|
||||
+export menuentry_id_option
|
||||
+
|
||||
+if [ "${prev_saved_entry}" ]; then
|
||||
+ set saved_entry="${prev_saved_entry}"
|
||||
+ save_env saved_entry
|
||||
+ set prev_saved_entry=
|
||||
+ save_env prev_saved_entry
|
||||
+ set boot_once=true
|
||||
+fi
|
||||
+
|
||||
+function savedefault {
|
||||
+ if [ -z "${boot_once}" ]; then
|
||||
+ saved_entry="${chosen}"
|
||||
+ save_env saved_entry
|
||||
+ fi
|
||||
+}
|
||||
+
|
||||
+function load_video {
|
||||
+ insmod vbe
|
||||
+ insmod vga
|
||||
+ insmod video_bochs
|
||||
+ insmod video_cirrus
|
||||
+}
|
||||
+
|
||||
+set timeout=5
|
||||
+### END /etc/grub.d/00_header ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/10_linux ###
|
||||
+menuentry 'Linux, with Fedora 2.6.38.8-32.fc15.x86_64' --class gnu-linux --class gnu --class os {
|
||||
+ load_video
|
||||
+ set gfxpayload=keep
|
||||
+ insmod part_msdos
|
||||
+ insmod ext2
|
||||
+ set root='(hd0,msdos1)'
|
||||
+ search --no-floppy --fs-uuid --set=root df0170c9-7d05-415c-bbd1-d4d503ba0eed
|
||||
+ echo 'Loading Fedora 2.6.38.8-32.fc15.x86_64 ...'
|
||||
+ linux /vmlinuz-2.6.38.8-32.fc15.x86_64 root=/dev/mapper/vg_pjones5-lv_root ro quiet rhgb
|
||||
+ echo 'Loading initial ramdisk ...'
|
||||
+ initrd /initramfs-2.6.38.8-32.fc15.x86_64.img
|
||||
+}
|
||||
+### END /etc/grub.d/10_linux ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/20_linux_xen ###
|
||||
+### END /etc/grub.d/20_linux_xen ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/30_os-prober ###
|
||||
+### END /etc/grub.d/30_os-prober ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/40_custom ###
|
||||
+# This file provides an easy way to add custom menu entries. Simply type the
|
||||
+# menu entries you want to add after this comment. Be careful not to change
|
||||
+# the 'exec tail' line above.
|
||||
+### END /etc/grub.d/40_custom ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/41_custom ###
|
||||
+if [ -f $prefix/custom.cfg ]; then
|
||||
+ source $prefix/custom.cfg;
|
||||
+fi
|
||||
+### END /etc/grub.d/41_custom ###
|
||||
+
|
||||
+### BEGIN /etc/grub.d/90_persistent ###
|
||||
+### END /etc/grub.d/90_persistent ###
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,40 @@
|
||||
From 46843e71656264d98ceda79985e5d341a8d58aa7 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Marshall <rmarshall@redhat.com>
|
||||
Date: Thu, 22 Dec 2016 17:52:14 -0500
|
||||
Subject: [PATCH 37/55] Fix findTemplate index logic (#1285601)
|
||||
|
||||
The fallback case where findTemplate has to look for the first entry
|
||||
contained a logic flaw that could return an incorrect index. This
|
||||
discovered index should be reduced by one for each boot entry that will
|
||||
be skipped in the final output. The flaw occurred because the index
|
||||
variable was used for the loop upper bound at the same time as it was
|
||||
being decremented within the actual loop body. The loop would thus fail
|
||||
to examine a number of boot entries equal to the total number of
|
||||
iterations the loop performed.
|
||||
|
||||
Related: rhbz#1285601
|
||||
---
|
||||
grubby.c | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index fcca6364887..692c351ccb6 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -2436,8 +2436,11 @@ struct singleEntry *findTemplate(struct grubConfig *cfg, const char *prefix,
|
||||
index = 0;
|
||||
while ((entry = findEntryByIndex(cfg, index))) {
|
||||
if (suitableImage(entry, prefix, skipRemoved, flags)) {
|
||||
- int j;
|
||||
- for (j = 0; j < index; j++) {
|
||||
+ int j, unmodifiedIndex;
|
||||
+
|
||||
+ unmodifiedIndex = index;
|
||||
+
|
||||
+ for (j = 0; j < unmodifiedIndex; j++) {
|
||||
entry2 = findEntryByIndex(cfg, j);
|
||||
if (entry2->skip)
|
||||
index--;
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,43 @@
|
||||
From d3c64808b6fc4794e2c58b1812315914966afea9 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Marshall <rmarshall@redhat.com>
|
||||
Date: Thu, 22 Dec 2016 17:56:44 -0500
|
||||
Subject: [PATCH 38/55] Write correct default to environment (#1285601)
|
||||
|
||||
grubby writes the title of the default boot entry to the bootloader
|
||||
environment. The title lookup did not correctly account for the offset
|
||||
required if some boot entries were marked for removal.
|
||||
|
||||
Related: rhbz#1285601
|
||||
---
|
||||
grubby.c | 15 ++++++++++++++-
|
||||
1 file changed, 14 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index 692c351ccb6..9edb26d0ded 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -1709,7 +1709,20 @@ static void writeDefault(FILE * out, char *indent,
|
||||
fprintf(out, "%sset default=\"${saved_entry}\"\n", indent);
|
||||
if (cfg->defaultImage >= FIRST_ENTRY_INDEX && cfg->cfi->setEnv) {
|
||||
char *title;
|
||||
- entry = findEntryByIndex(cfg, cfg->defaultImage);
|
||||
+ int trueIndex, currentIndex;
|
||||
+
|
||||
+ trueIndex = 0;
|
||||
+ currentIndex = 0;
|
||||
+
|
||||
+ while ((entry = findEntryByIndex(cfg, currentIndex))) {
|
||||
+ if (!entry->skip) {
|
||||
+ if (trueIndex == cfg->defaultImage) {
|
||||
+ break;
|
||||
+ }
|
||||
+ trueIndex++;
|
||||
+ }
|
||||
+ currentIndex++;
|
||||
+ }
|
||||
line = getLineByType(LT_MENUENTRY, entry->lines);
|
||||
if (!line)
|
||||
line = getLineByType(LT_TITLE, entry->lines);
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,29 @@
|
||||
From d124974021199ddee0d1af1b2c7866f533c2f23a Mon Sep 17 00:00:00 2001
|
||||
From: Robert Marshall <rmarshall@redhat.com>
|
||||
Date: Mon, 27 Feb 2017 15:59:53 -0500
|
||||
Subject: [PATCH 39/55] Initialize variable for ppc environment (#1285601)
|
||||
|
||||
Building on PPC does not default the value of an uninitialized integer
|
||||
to zero which caused test failures.
|
||||
|
||||
Related: rhbz#1285601
|
||||
---
|
||||
grubby.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index 9edb26d0ded..9ccad2735dd 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -2566,6 +2566,8 @@ void setDefaultImage(struct grubConfig *config, int isAddingBootEntry,
|
||||
/* check validity of existing default or first-entry-found
|
||||
selection */
|
||||
if (defaultKernelPath) {
|
||||
+ /* we must initialize this */
|
||||
+ firstKernelEntryIndex = 0;
|
||||
/* user requested first-entry-found */
|
||||
if (!findEntryByPath(config, defaultKernelPath,
|
||||
prefix, &firstKernelEntryIndex)) {
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,64 @@
|
||||
From a8367596ca63156509eed0b332a077247765b811 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Marshall <rmarshall@redhat.com>
|
||||
Date: Tue, 28 Feb 2017 18:31:56 -0500
|
||||
Subject: [PATCH 40/55] Fix initial saved_entry read issue (#1285601)
|
||||
|
||||
If a system has never had a kernel upgrade/rollback then grubby
|
||||
does not read saved_entry properly. Added a guard to catch
|
||||
saved_entry and read it to pick the proper index in these cases.
|
||||
|
||||
Resolves: rhbz#1285601
|
||||
---
|
||||
grubby.c | 29 +++++++++++++++++++++++++++--
|
||||
1 file changed, 27 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index 9ccad2735dd..974b81c7864 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -2522,6 +2522,9 @@ void setDefaultImage(struct grubConfig *config, int isAddingBootEntry,
|
||||
struct singleEntry *bootEntry, *newDefault;
|
||||
int indexToVerify, firstKernelEntryIndex, currentLookupIndex;
|
||||
|
||||
+ /* initialize */
|
||||
+ currentLookupIndex = FIRST_ENTRY_INDEX;
|
||||
+
|
||||
/* handle the two cases where the user explictly picks the default
|
||||
* boot entry index as it would exist post-modification */
|
||||
|
||||
@@ -2587,8 +2590,30 @@ void setDefaultImage(struct grubConfig *config, int isAddingBootEntry,
|
||||
config->defaultImage++;
|
||||
}
|
||||
} else {
|
||||
- /* use pre-existing default entry */
|
||||
- currentLookupIndex = config->defaultImage;
|
||||
+ /* check to see if the default is stored in the environment */
|
||||
+ if (config->defaultImage < FIRST_ENTRY_INDEX) {
|
||||
+ if (config->defaultImage == DEFAULT_SAVED || config->defaultImage == DEFAULT_SAVED_GRUB2)
|
||||
+ {
|
||||
+ if (config->cfi->defaultIsSaved) {
|
||||
+ if (config->cfi->getEnv) {
|
||||
+ char *defaultTitle = config->cfi->getEnv(config->cfi, "saved_entry");
|
||||
+
|
||||
+ if (defaultTitle) {
|
||||
+ if (isnumber(defaultTitle)) {
|
||||
+ currentLookupIndex = atoi(defaultTitle);
|
||||
+ } else {
|
||||
+ findEntryByTitle(config, defaultTitle, ¤tLookupIndex);
|
||||
+ }
|
||||
+ /* set the default Image to an actual index */
|
||||
+ config->defaultImage = currentLookupIndex;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ } else {
|
||||
+ /* use pre-existing default entry from the file*/
|
||||
+ currentLookupIndex = config->defaultImage;
|
||||
+ }
|
||||
|
||||
if (isAddingBootEntry
|
||||
&& (newBootEntryIndex <= config->defaultImage)) {
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,74 @@
|
||||
From 4d48c517db42b6d7f30d7d2441863704bd01eb11 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Marshall <rmarshall@redhat.com>
|
||||
Date: Tue, 14 Mar 2017 22:55:27 -0400
|
||||
Subject: [PATCH 41/55] Add s390/s390x --info test (#1285601)
|
||||
|
||||
Running the --info grubby option on s390/s390x platforms always returned
|
||||
the (null) value. Added a test to look at --info and ensure it comes out
|
||||
as a user would expect.
|
||||
|
||||
Resolves: rhbz#1285601
|
||||
---
|
||||
test.sh | 2 ++
|
||||
test/results/info/z2.1 | 6 ++++++
|
||||
test/zipl.2 | 22 ++++++++++++++++++++++
|
||||
3 files changed, 30 insertions(+)
|
||||
create mode 100644 test/results/info/z2.1
|
||||
create mode 100644 test/zipl.2
|
||||
|
||||
diff --git a/test.sh b/test.sh
|
||||
index 1ef9eca535d..afa4f705b2b 100755
|
||||
--- a/test.sh
|
||||
+++ b/test.sh
|
||||
@@ -320,6 +320,8 @@ testing="Z/IPL display default title"
|
||||
ziplDisplayTest zipl.1 defaulttitle/z.1 --default-title
|
||||
testing="Z/IPL display default kernel"
|
||||
ziplDisplayTest zipl.1 defaultkernel/z.1 --default-kernel
|
||||
+testing="Z/IPL display entry information"
|
||||
+ziplDisplayTest zipl.2 info/z2.1 --info=1
|
||||
|
||||
testing="GRUB fallback directive"
|
||||
grubTest grub.5 fallback/g5.1 --remove-kernel=/boot/vmlinuz-2.4.7-ac3 \
|
||||
diff --git a/test/results/info/z2.1 b/test/results/info/z2.1
|
||||
new file mode 100644
|
||||
index 00000000000..e5ce3a1a61f
|
||||
--- /dev/null
|
||||
+++ b/test/results/info/z2.1
|
||||
@@ -0,0 +1,6 @@
|
||||
+index=1
|
||||
+kernel=/boot/vmlinuz-3.10.0-514.6.2.el7.s390x
|
||||
+args="crashkernel=auto rd.dasd=0.0.0120 rd.dasd=0.0.0121 rd.dasd=0.0.0122 rd.dasd=0.0.0123 rd.lvm.lv=rhel_ibm-z-68/root rd.lvm.lv=rhel_ibm-z-68/swap rd.znet=qeth,0.0.8000,0.0.8001,0.0.8002,layer2=1,portname=z-68,portno=0 LANG=en_US.UTF-8 systemd.log_level=debug systemd.log_target=kmsg"
|
||||
+root=/dev/mapper/rhel_ibm--z--68-root
|
||||
+initrd=/boot/initramfs-3.10.0-514.6.2.el7.s390x.img
|
||||
+title=3.10.0-514.6.2.el7.s390x_with_debugging
|
||||
diff --git a/test/zipl.2 b/test/zipl.2
|
||||
new file mode 100644
|
||||
index 00000000000..f064b2a36d5
|
||||
--- /dev/null
|
||||
+++ b/test/zipl.2
|
||||
@@ -0,0 +1,22 @@
|
||||
+[defaultboot]
|
||||
+defaultauto
|
||||
+prompt=1
|
||||
+timeout=5
|
||||
+default=3.10.0-514.6.2.el7.s390x_with_debugging
|
||||
+target=/boot
|
||||
+[3.10.0-514.6.2.el7.s390x]
|
||||
+ image=/boot/vmlinuz-3.10.0-514.6.2.el7.s390x
|
||||
+ parameters="root=/dev/mapper/rhel_ibm--z--68-root crashkernel=auto rd.dasd=0.0.0120 rd.dasd=0.0.0121 rd.dasd=0.0.0122 rd.dasd=0.0.0123 rd.lvm.lv=rhel_ibm-z-68/root rd.lvm.lv=rhel_ibm-z-68/swap rd.znet=qeth,0.0.8000,0.0.8001,0.0.8002,layer2=1,portname=z-68,portno=0 LANG=en_US.UTF-8"
|
||||
+ ramdisk=/boot/initramfs-3.10.0-514.6.2.el7.s390x.img
|
||||
+[3.10.0-514.6.2.el7.s390x_with_debugging]
|
||||
+ image=/boot/vmlinuz-3.10.0-514.6.2.el7.s390x
|
||||
+ parameters="root=/dev/mapper/rhel_ibm--z--68-root crashkernel=auto rd.dasd=0.0.0120 rd.dasd=0.0.0121 rd.dasd=0.0.0122 rd.dasd=0.0.0123 rd.lvm.lv=rhel_ibm-z-68/root rd.lvm.lv=rhel_ibm-z-68/swap rd.znet=qeth,0.0.8000,0.0.8001,0.0.8002,layer2=1,portname=z-68,portno=0 LANG=en_US.UTF-8 systemd.log_level=debug systemd.log_target=kmsg"
|
||||
+ ramdisk=/boot/initramfs-3.10.0-514.6.2.el7.s390x.img
|
||||
+[linux]
|
||||
+ image=/boot/vmlinuz-3.10.0-514.el7.s390x
|
||||
+ ramdisk=/boot/initramfs-3.10.0-514.el7.s390x.img
|
||||
+ parameters="root=/dev/mapper/rhel_ibm--z--68-root crashkernel=auto rd.dasd=0.0.0120 rd.dasd=0.0.0121 rd.dasd=0.0.0122 rd.dasd=0.0.0123 rd.lvm.lv=rhel_ibm-z-68/root rd.lvm.lv=rhel_ibm-z-68/swap rd.znet=qeth,0.0.8000,0.0.8001,0.0.8002,layer2=1,portname=z-68,portno=0 LANG=en_US.UTF-8"
|
||||
+[linux-0-rescue-196fd0394b7442a6838686745f03fd04]
|
||||
+ image=/boot/vmlinuz-0-rescue-196fd0394b7442a6838686745f03fd04
|
||||
+ ramdisk=/boot/initramfs-0-rescue-196fd0394b7442a6838686745f03fd04.img
|
||||
+ parameters="root=/dev/mapper/rhel_ibm--z--68-root crashkernel=auto rd.dasd=0.0.0120 rd.dasd=0.0.0121 rd.dasd=0.0.0122 rd.dasd=0.0.0123 rd.lvm.lv=rhel_ibm-z-68/root rd.lvm.lv=rhel_ibm-z-68/swap rd.znet=qeth,0.0.8000,0.0.8001,0.0.8002,layer2=1,portname=z-68,portno=0"
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,59 @@
|
||||
From 8d81aeffcb1c2f9706dfe625a2f9f5e61f8a5c63 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Marshall <rmarshall@redhat.com>
|
||||
Date: Tue, 14 Mar 2017 15:20:53 -0400
|
||||
Subject: [PATCH 42/55] Fix --info for s390x/s390 (#1285601)
|
||||
|
||||
The --info flag for grubby on s390/s390x always returned (null). Fixed
|
||||
codepath to use extractTitle where necessary and get the actual title.
|
||||
|
||||
Related: rhbz#1285601
|
||||
---
|
||||
grubby.c | 15 +++++++++++----
|
||||
1 file changed, 11 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index 974b81c7864..9bf051dfed4 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -2684,7 +2684,7 @@ void setFallbackImage(struct grubConfig *config, int hasNew)
|
||||
}
|
||||
}
|
||||
|
||||
-void displayEntry(struct singleEntry *entry, const char *prefix, int index)
|
||||
+void displayEntry(struct grubConfig *config, struct singleEntry *entry, const char *prefix, int index)
|
||||
{
|
||||
struct singleLine *line;
|
||||
char *root = NULL;
|
||||
@@ -2780,7 +2780,14 @@ void displayEntry(struct singleEntry *entry, const char *prefix, int index)
|
||||
|
||||
line = getLineByType(LT_TITLE, entry->lines);
|
||||
if (line) {
|
||||
- printf("title=%s\n", line->elements[1].item);
|
||||
+ char *entryTitle;
|
||||
+ /* if we can extractTitle, then it's a zipl config and
|
||||
+ * if not then we go ahead with what's existed prior */
|
||||
+ entryTitle = extractTitle(config, line);
|
||||
+ if (!entryTitle) {
|
||||
+ entryTitle=line->elements[1].item;
|
||||
+ }
|
||||
+ printf("title=%s\n", entryTitle);
|
||||
} else {
|
||||
char *title;
|
||||
line = getLineByType(LT_MENUENTRY, entry->lines);
|
||||
@@ -3196,11 +3203,11 @@ int displayInfo(struct grubConfig *config, char *kernel, const char *prefix)
|
||||
printf("lba\n");
|
||||
}
|
||||
|
||||
- displayEntry(entry, prefix, i);
|
||||
+ displayEntry(config, entry, prefix, i);
|
||||
|
||||
i++;
|
||||
while ((entry = findEntryByPath(config, kernel, prefix, &i))) {
|
||||
- displayEntry(entry, prefix, i);
|
||||
+ displayEntry(config, entry, prefix, i);
|
||||
i++;
|
||||
}
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,59 @@
|
||||
From 6d2322507be50c828c400a6de0cd48bf30dfa1b1 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Marshall <rmarshall@redhat.com>
|
||||
Date: Tue, 14 Mar 2017 22:39:20 -0400
|
||||
Subject: [PATCH 43/55] Add s390/s390x set-default-index test (#1285601)
|
||||
|
||||
Adds a test to ensure set-default-index actually works for s390 and
|
||||
s390x platforms.
|
||||
|
||||
Related: rhbz#1285601
|
||||
---
|
||||
test.sh | 2 ++
|
||||
test/results/default/z2.1 | 22 ++++++++++++++++++++++
|
||||
2 files changed, 24 insertions(+)
|
||||
create mode 100644 test/results/default/z2.1
|
||||
|
||||
diff --git a/test.sh b/test.sh
|
||||
index afa4f705b2b..aaa6e9323a6 100755
|
||||
--- a/test.sh
|
||||
+++ b/test.sh
|
||||
@@ -314,6 +314,8 @@ liloDisplayTest lilo.1 defaultkernel/l1.1 --default-kernel
|
||||
testing="Z/IPL default directive"
|
||||
ziplTest zipl.1 default/z1.1 --add-kernel /boot/new-kernel --title test
|
||||
ziplTest zipl.1 default/z1.2 --add-kernel /boot/new-kernel --title test --make-default
|
||||
+testing="Z/IPL default index directive"
|
||||
+ziplTest zipl.2 default/z2.1 --set-default-index=0
|
||||
testing="Z/IPL display default index"
|
||||
ziplDisplayTest zipl.1 defaultindex/0 --default-index
|
||||
testing="Z/IPL display default title"
|
||||
diff --git a/test/results/default/z2.1 b/test/results/default/z2.1
|
||||
new file mode 100644
|
||||
index 00000000000..93e7491e00a
|
||||
--- /dev/null
|
||||
+++ b/test/results/default/z2.1
|
||||
@@ -0,0 +1,22 @@
|
||||
+[defaultboot]
|
||||
+defaultauto
|
||||
+prompt=1
|
||||
+timeout=5
|
||||
+default=3.10.0-514.6.2.el7.s390x
|
||||
+target=/boot
|
||||
+[3.10.0-514.6.2.el7.s390x]
|
||||
+ image=/boot/vmlinuz-3.10.0-514.6.2.el7.s390x
|
||||
+ parameters="root=/dev/mapper/rhel_ibm--z--68-root crashkernel=auto rd.dasd=0.0.0120 rd.dasd=0.0.0121 rd.dasd=0.0.0122 rd.dasd=0.0.0123 rd.lvm.lv=rhel_ibm-z-68/root rd.lvm.lv=rhel_ibm-z-68/swap rd.znet=qeth,0.0.8000,0.0.8001,0.0.8002,layer2=1,portname=z-68,portno=0 LANG=en_US.UTF-8"
|
||||
+ ramdisk=/boot/initramfs-3.10.0-514.6.2.el7.s390x.img
|
||||
+[3.10.0-514.6.2.el7.s390x_with_debugging]
|
||||
+ image=/boot/vmlinuz-3.10.0-514.6.2.el7.s390x
|
||||
+ parameters="root=/dev/mapper/rhel_ibm--z--68-root crashkernel=auto rd.dasd=0.0.0120 rd.dasd=0.0.0121 rd.dasd=0.0.0122 rd.dasd=0.0.0123 rd.lvm.lv=rhel_ibm-z-68/root rd.lvm.lv=rhel_ibm-z-68/swap rd.znet=qeth,0.0.8000,0.0.8001,0.0.8002,layer2=1,portname=z-68,portno=0 LANG=en_US.UTF-8 systemd.log_level=debug systemd.log_target=kmsg"
|
||||
+ ramdisk=/boot/initramfs-3.10.0-514.6.2.el7.s390x.img
|
||||
+[linux]
|
||||
+ image=/boot/vmlinuz-3.10.0-514.el7.s390x
|
||||
+ ramdisk=/boot/initramfs-3.10.0-514.el7.s390x.img
|
||||
+ parameters="root=/dev/mapper/rhel_ibm--z--68-root crashkernel=auto rd.dasd=0.0.0120 rd.dasd=0.0.0121 rd.dasd=0.0.0122 rd.dasd=0.0.0123 rd.lvm.lv=rhel_ibm-z-68/root rd.lvm.lv=rhel_ibm-z-68/swap rd.znet=qeth,0.0.8000,0.0.8001,0.0.8002,layer2=1,portname=z-68,portno=0 LANG=en_US.UTF-8"
|
||||
+[linux-0-rescue-196fd0394b7442a6838686745f03fd04]
|
||||
+ image=/boot/vmlinuz-0-rescue-196fd0394b7442a6838686745f03fd04
|
||||
+ ramdisk=/boot/initramfs-0-rescue-196fd0394b7442a6838686745f03fd04.img
|
||||
+ parameters="root=/dev/mapper/rhel_ibm--z--68-root crashkernel=auto rd.dasd=0.0.0120 rd.dasd=0.0.0121 rd.dasd=0.0.0122 rd.dasd=0.0.0123 rd.lvm.lv=rhel_ibm-z-68/root rd.lvm.lv=rhel_ibm-z-68/swap rd.znet=qeth,0.0.8000,0.0.8001,0.0.8002,layer2=1,portname=z-68,portno=0"
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,32 @@
|
||||
From 9b6266cdec60130435e9ba61af855e370ec31f1a Mon Sep 17 00:00:00 2001
|
||||
From: Robert Marshall <rmarshall@redhat.com>
|
||||
Date: Tue, 14 Mar 2017 22:25:02 -0400
|
||||
Subject: [PATCH 44/55] Fix setDefaultImage for s390/s390x (#1285601)
|
||||
|
||||
The setDefaultImage routine has never actually supported s390/s390x when
|
||||
picking an arbitrary index because a zipl config never has the property
|
||||
defaultIsIndex set to 1. Eliminating the extraneous check resolved the
|
||||
issue on s390/s390x and does not appear to break other platforms.
|
||||
|
||||
Related: rhbz#1285601
|
||||
---
|
||||
grubby.c | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index 9bf051dfed4..5202485a541 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -2535,8 +2535,7 @@ void setDefaultImage(struct grubConfig *config, int isAddingBootEntry,
|
||||
}
|
||||
|
||||
/* Case 2: user picked an arbitrary index as the default boot entry */
|
||||
- if (newDefaultBootEntryIndex >= FIRST_ENTRY_INDEX
|
||||
- && config->cfi->defaultIsIndex) {
|
||||
+ if (newDefaultBootEntryIndex >= FIRST_ENTRY_INDEX) {
|
||||
indexToVerify = newDefaultBootEntryIndex;
|
||||
|
||||
/* user chose to make latest boot entry the default */
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,78 @@
|
||||
From 7d48cb09b85b81f707565db6d35b1ba0d247b6b4 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Fran=C3=A7ois=20Cami?= <fcami@fedoraproject.org>
|
||||
Date: Fri, 23 Jun 2017 23:56:50 +0200
|
||||
Subject: [PATCH 45/55] Be more thorough about flushing our config file when
|
||||
writing.
|
||||
|
||||
Add missing fclose() at the end of writeConfig
|
||||
Use fflush(out) + fsync(fileno(out) on temporary file
|
||||
fsync() the destination directory after rename
|
||||
---
|
||||
grubby.c | 41 ++++++++++++++++++++++++++++++++++-------
|
||||
1 file changed, 34 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index 5202485a541..11ee64a02b9 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -1789,6 +1789,7 @@ static int writeConfig(struct grubConfig *cfg, char *outName,
|
||||
int needs = MAIN_DEFAULT;
|
||||
struct stat sb;
|
||||
int i;
|
||||
+ int rc = 0;
|
||||
|
||||
if (!strcmp(outName, "-")) {
|
||||
out = stdout;
|
||||
@@ -1903,16 +1904,42 @@ static int writeConfig(struct grubConfig *cfg, char *outName,
|
||||
}
|
||||
|
||||
if (tmpOutName) {
|
||||
- if (rename(tmpOutName, outName)) {
|
||||
+ /* write userspace buffers */
|
||||
+ if (fflush(out))
|
||||
+ rc = 1;
|
||||
+
|
||||
+ /* purge the write-back cache with fsync() */
|
||||
+ if (fsync(fileno(out)))
|
||||
+ rc = 1;
|
||||
+
|
||||
+ if (fclose(out))
|
||||
+ rc = 1;
|
||||
+
|
||||
+ if (rc == 0 && rename(tmpOutName, outName)) {
|
||||
+ unlink(tmpOutName);
|
||||
+ rc = 1;
|
||||
+ }
|
||||
+
|
||||
+ /* fsync() the destination directory after rename */
|
||||
+ if (rc == 0) {
|
||||
+ int dirfd;
|
||||
+
|
||||
+ dirfd = open(dirname(strdupa(outName)), O_RDONLY);
|
||||
+ if (dirfd < 0)
|
||||
+ rc = 1;
|
||||
+ else if (fsync(dirfd))
|
||||
+ rc = 1;
|
||||
+
|
||||
+ if (dirfd >= 0)
|
||||
+ close(dirfd);
|
||||
+ }
|
||||
+
|
||||
+ if (rc == 1)
|
||||
fprintf(stderr,
|
||||
- _("grubby: error moving %s to %s: %s\n"),
|
||||
- tmpOutName, outName, strerror(errno));
|
||||
- unlink(outName);
|
||||
- return 1;
|
||||
- }
|
||||
+ _("grubby: error flushing data: %m\n"));
|
||||
}
|
||||
|
||||
- return 0;
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
static int numEntries(struct grubConfig *cfg)
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,168 @@
|
||||
From 92d22c7cb9a100a601b9a28cb78b8fbde9dac9a8 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Wed, 27 Sep 2017 11:28:00 -0400
|
||||
Subject: [PATCH 46/55] Fix incorrect test case and --remove-args with a value.
|
||||
|
||||
Currently we have this test case:
|
||||
|
||||
grubTest grub.3 updargs/g3.4 --update-kernel=ALL --remove-args="hdd=foobar"
|
||||
|
||||
This fails to notice that the actual argument in grub.3 is hdd=ide-scsi,
|
||||
and removes it anyway, and the data in g3.4 supports that behavior.
|
||||
This is clearly wrong, and so this patch introduces updargs/g3.5, which
|
||||
leaves hdd=ide-scsi intact, and fixes the code so that it won't modify
|
||||
the command line in that case.
|
||||
|
||||
Resolves: rhbz#1476273
|
||||
|
||||
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||
---
|
||||
grubby.c | 71 ++++++++++++++++++++++++++++++++-------
|
||||
test.sh | 2 +-
|
||||
test/results/updargs/g3.5 | 16 +++++++++
|
||||
3 files changed, 76 insertions(+), 13 deletions(-)
|
||||
create mode 100644 test/results/updargs/g3.5
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index 11ee64a02b9..9af04dea01b 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -3563,23 +3563,67 @@ static void removeElement(struct singleLine *line, int removeHere)
|
||||
line->numElements--;
|
||||
}
|
||||
|
||||
-int argMatch(const char *one, const char *two)
|
||||
+static int argNameMatch(const char *one, const char *two)
|
||||
{
|
||||
char *first, *second;
|
||||
+ char *chptra, *chptrb;
|
||||
+ int rc;
|
||||
+
|
||||
+ first = strcpy(alloca(strlen(one) + 1), one);
|
||||
+ second = strcpy(alloca(strlen(two) + 1), two);
|
||||
+
|
||||
+ chptra = strchr(first, '=');
|
||||
+ if (chptra)
|
||||
+ *chptra = '\0';
|
||||
+
|
||||
+ chptrb = strchr(second, '=');
|
||||
+ if (chptrb)
|
||||
+ *chptrb = '\0';
|
||||
+
|
||||
+ rc = strcmp(first, second);
|
||||
+
|
||||
+ if (chptra)
|
||||
+ *chptra = '=';
|
||||
+ if (chptrb)
|
||||
+ *chptrb = '=';
|
||||
+
|
||||
+ return rc;
|
||||
+}
|
||||
+
|
||||
+static int argHasValue(const char *arg)
|
||||
+{
|
||||
char *chptr;
|
||||
|
||||
+ chptr = strchr(arg, '=');
|
||||
+ if (chptr)
|
||||
+ return 1;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int argValueMatch(const char *one, const char *two)
|
||||
+{
|
||||
+ char *first, *second;
|
||||
+ char *chptra, *chptrb;
|
||||
+
|
||||
first = strcpy(alloca(strlen(one) + 1), one);
|
||||
second = strcpy(alloca(strlen(two) + 1), two);
|
||||
|
||||
- chptr = strchr(first, '=');
|
||||
- if (chptr)
|
||||
- *chptr = '\0';
|
||||
+ chptra = strchr(first, '=');
|
||||
+ if (chptra)
|
||||
+ chptra += 1;
|
||||
|
||||
- chptr = strchr(second, '=');
|
||||
- if (chptr)
|
||||
- *chptr = '\0';
|
||||
+ chptrb = strchr(second, '=');
|
||||
+ if (chptrb)
|
||||
+ chptrb += 1;
|
||||
|
||||
- return strcmp(first, second);
|
||||
+ if (!chptra && !chptrb)
|
||||
+ return 0;
|
||||
+ else if (!chptra)
|
||||
+ return *chptrb - 0;
|
||||
+ else if (!chptrb)
|
||||
+ return 0 - *chptra;
|
||||
+ else
|
||||
+ return strcmp(chptra, chptrb);
|
||||
}
|
||||
|
||||
int updateActualImage(struct grubConfig *cfg, const char *image,
|
||||
@@ -3723,7 +3767,7 @@ int updateActualImage(struct grubConfig *cfg, const char *image,
|
||||
}
|
||||
if (usedElements[i])
|
||||
continue;
|
||||
- if (!argMatch(line->elements[i].item, *arg)) {
|
||||
+ if (!argNameMatch(line->elements[i].item, *arg)) {
|
||||
usedElements[i] = 1;
|
||||
break;
|
||||
}
|
||||
@@ -3782,9 +3826,12 @@ int updateActualImage(struct grubConfig *cfg, const char *image,
|
||||
!strcmp(line->elements[i].item, "--"))
|
||||
/* reached the end of hyper args, stop here */
|
||||
break;
|
||||
- if (!argMatch(line->elements[i].item, *arg)) {
|
||||
- removeElement(line, i);
|
||||
- break;
|
||||
+ if (!argNameMatch(line->elements[i].item, *arg)) {
|
||||
+ if (!argHasValue(*arg) ||
|
||||
+ !argValueMatch(line->elements[i].item, *arg)) {
|
||||
+ removeElement(line, i);
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
/* handle removing LT_ROOT line too */
|
||||
diff --git a/test.sh b/test.sh
|
||||
index aaa6e9323a6..a97ada94d22 100755
|
||||
--- a/test.sh
|
||||
+++ b/test.sh
|
||||
@@ -386,7 +386,7 @@ grubTest grub.3 updargs/g3.2 --update-kernel=DEFAULT \
|
||||
--args "root=/dev/hdd1 hdd=notide-scsi"
|
||||
grubTest grub.3 updargs/g3.4 --update-kernel=ALL --remove-args="hdd"
|
||||
grubTest grub.3 updargs/g3.4 --update-kernel=ALL --remove-args="hdd=ide-scsi"
|
||||
-grubTest grub.3 updargs/g3.4 --update-kernel=ALL --remove-args="hdd=foobar"
|
||||
+grubTest grub.3 updargs/g3.5 --update-kernel=ALL --remove-args="hdd=foobar"
|
||||
grubTest grub.3 updargs/g3.7 --update-kernel=ALL \
|
||||
--remove-args="hdd root ro"
|
||||
grubTest grub.7 updargs/g7.2 --boot-filesystem=/ \
|
||||
diff --git a/test/results/updargs/g3.5 b/test/results/updargs/g3.5
|
||||
new file mode 100644
|
||||
index 00000000000..7d50bb87d84
|
||||
--- /dev/null
|
||||
+++ b/test/results/updargs/g3.5
|
||||
@@ -0,0 +1,16 @@
|
||||
+#boot=/dev/hda
|
||||
+timeout=10
|
||||
+splashimage=(hd0,1)/grub/splash.xpm.gz
|
||||
+title Red Hat Linux (2.4.7-2smp)
|
||||
+ root (hd0,1)
|
||||
+ kernel /vmlinuz-2.4.7-2smp ro root=/dev/hda5 hdd=ide-scsi
|
||||
+ initrd /initrd-2.4.7-2smp.img
|
||||
+title Red Hat Linux-up (2.4.7-2)
|
||||
+ root (hd0,1)
|
||||
+ kernel /vmlinuz-2.4.7-2 ro root=/dev/hda5 hdd=ide-scsi
|
||||
+ initrd /initrd-2.4.7-2.img
|
||||
+title DOS
|
||||
+ rootnoverify (hd0,0)
|
||||
+ chainloader +1
|
||||
+
|
||||
+
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,59 @@
|
||||
From 19b47a3eab1b4fc490e007caaa9597595f15f496 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Wed, 31 Jan 2018 13:06:48 -0500
|
||||
Subject: [PATCH 47/55] grubby: Make sure configure$BOOTLOADER variables are
|
||||
set correctly.
|
||||
|
||||
When we've chosen a bootloader because it's default for a platform, and
|
||||
we've already determined it's not overridden by the command line, set
|
||||
the configure$BOOTLOADER variable to 1 so that our checks for which
|
||||
bootloader are selected work correctly.
|
||||
|
||||
Resolves: rhbz#1340893
|
||||
|
||||
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||
---
|
||||
grubby.c | 17 +++++++++++------
|
||||
1 file changed, 11 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index 9af04dea01b..c1b4104892c 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -5151,22 +5151,27 @@ int main(int argc, const char **argv)
|
||||
if (!cfi) {
|
||||
if (grub2FindConfig(&grub2ConfigType)) {
|
||||
cfi = &grub2ConfigType;
|
||||
+ configureGrub2 = 1;
|
||||
if (envPath)
|
||||
cfi->envFile = envPath;
|
||||
- } else
|
||||
+ } else {
|
||||
#ifdef __ia64__
|
||||
cfi = &eliloConfigType;
|
||||
-#elif __powerpc__
|
||||
+ configureLilo = 1;
|
||||
+#elif defined(__powerpc__)
|
||||
cfi = &yabootConfigType;
|
||||
-#elif __sparc__
|
||||
+ configureYaboot = 1;
|
||||
+#elif defined(__sparc__)
|
||||
cfi = &siloConfigType;
|
||||
-#elif __s390__
|
||||
+ configureSilo = 1;
|
||||
+#elif defined(__s390__) || defined(__s390x__)
|
||||
cfi = &ziplConfigType;
|
||||
-#elif __s390x__
|
||||
- cfi = &ziplConfigtype;
|
||||
+ configureZipl = 1;
|
||||
#else
|
||||
cfi = &grubConfigType;
|
||||
+ configureGrub = 1;
|
||||
#endif
|
||||
+ }
|
||||
}
|
||||
|
||||
if (!grubConfig) {
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,148 @@
|
||||
From bd789c1aa159fb4992904e7c529789d7defbe332 Mon Sep 17 00:00:00 2001
|
||||
From: Nathaniel McCallum <npmccallum@redhat.com>
|
||||
Date: Fri, 2 Mar 2018 14:59:32 -0500
|
||||
Subject: [PATCH 49/55] Change return type in getRootSpecifier()
|
||||
|
||||
Rather than returning a new allocation of the prefix, just return the
|
||||
length of the prefix. This change accomplishes a couple things. First,
|
||||
it reduces some memory leaks since the return value was often never
|
||||
freed. Second, it simplifies the caller who is usually only interested
|
||||
in the length of the prefix.
|
||||
---
|
||||
grubby.c | 57 ++++++++++++++++++++++++++------------------------------
|
||||
1 file changed, 26 insertions(+), 31 deletions(-)
|
||||
|
||||
diff --git a/grubby.c b/grubby.c
|
||||
index c1b4104892c..1fe850a3ddf 100644
|
||||
--- a/grubby.c
|
||||
+++ b/grubby.c
|
||||
@@ -698,7 +698,7 @@ static int lineWrite(FILE * out, struct singleLine *line,
|
||||
struct configFileInfo *cfi);
|
||||
static int getNextLine(char **bufPtr, struct singleLine *line,
|
||||
struct configFileInfo *cfi);
|
||||
-static char *getRootSpecifier(char *str);
|
||||
+static size_t getRootSpecifier(const char *str);
|
||||
static void requote(struct singleLine *line, struct configFileInfo *cfi);
|
||||
static void insertElement(struct singleLine *line,
|
||||
const char *item, int insertHere,
|
||||
@@ -2122,7 +2122,7 @@ int suitableImage(struct singleEntry *entry, const char *bootPrefix,
|
||||
char *fullName;
|
||||
int i;
|
||||
char *dev;
|
||||
- char *rootspec;
|
||||
+ size_t rs;
|
||||
char *rootdev;
|
||||
|
||||
if (skipRemoved && entry->skip) {
|
||||
@@ -2150,12 +2150,11 @@ int suitableImage(struct singleEntry *entry, const char *bootPrefix,
|
||||
|
||||
fullName = alloca(strlen(bootPrefix) +
|
||||
strlen(line->elements[1].item) + 1);
|
||||
- rootspec = getRootSpecifier(line->elements[1].item);
|
||||
- int rootspec_offset = rootspec ? strlen(rootspec) : 0;
|
||||
+ rs = getRootSpecifier(line->elements[1].item);
|
||||
int hasslash = endswith(bootPrefix, '/') ||
|
||||
- beginswith(line->elements[1].item + rootspec_offset, '/');
|
||||
+ beginswith(line->elements[1].item + rs, '/');
|
||||
sprintf(fullName, "%s%s%s", bootPrefix, hasslash ? "" : "/",
|
||||
- line->elements[1].item + rootspec_offset);
|
||||
+ line->elements[1].item + rs);
|
||||
if (access(fullName, R_OK)) {
|
||||
notSuitablePrintf(entry, 0, "access to %s failed\n", fullName);
|
||||
return 0;
|
||||
@@ -2247,7 +2246,6 @@ struct singleEntry *findEntryByPath(struct grubConfig *config,
|
||||
struct singleLine *line;
|
||||
int i;
|
||||
char *chptr;
|
||||
- char *rootspec = NULL;
|
||||
enum lineType_e checkType = LT_KERNEL;
|
||||
|
||||
if (isdigit(*kernel)) {
|
||||
@@ -2352,14 +2350,10 @@ struct singleEntry *findEntryByPath(struct grubConfig *config,
|
||||
|
||||
if (line && line->type != LT_MENUENTRY &&
|
||||
line->numElements >= 2) {
|
||||
- rootspec =
|
||||
- getRootSpecifier(line->elements[1].
|
||||
- item);
|
||||
- if (!strcmp
|
||||
- (line->elements[1].item +
|
||||
- ((rootspec !=
|
||||
- NULL) ? strlen(rootspec) : 0),
|
||||
- kernel + strlen(prefix)))
|
||||
+ if (!strcmp(line->elements[1].item +
|
||||
+ getRootSpecifier(
|
||||
+ line->elements[1].item),
|
||||
+ kernel + strlen(prefix)))
|
||||
break;
|
||||
}
|
||||
if (line->type == LT_MENUENTRY &&
|
||||
@@ -3268,12 +3262,12 @@ struct singleLine *addLineTmpl(struct singleEntry *entry,
|
||||
type & (LT_HYPER | LT_KERNEL | LT_MBMODULE | LT_INITRD |
|
||||
LT_KERNEL_EFI | LT_INITRD_EFI | LT_KERNEL_16 |
|
||||
LT_INITRD_16)) {
|
||||
- char *rootspec =
|
||||
- getRootSpecifier(tmplLine->elements[1].item);
|
||||
- if (rootspec != NULL) {
|
||||
+ size_t rs = getRootSpecifier(tmplLine->elements[1].item);
|
||||
+ if (rs > 0) {
|
||||
free(newLine->elements[1].item);
|
||||
- newLine->elements[1].item =
|
||||
- sdupprintf("%s%s", rootspec, val);
|
||||
+ newLine->elements[1].item = sdupprintf(
|
||||
+ "%.*s%s", (int) rs,
|
||||
+ tmplLine->elements[1].item, val);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4325,17 +4319,19 @@ int checkForElilo(struct grubConfig *config)
|
||||
return 1;
|
||||
}
|
||||
|
||||
-static char *getRootSpecifier(char *str)
|
||||
+static size_t getRootSpecifier(const char *str)
|
||||
{
|
||||
- char *idx, *rootspec = NULL;
|
||||
+ size_t rs = 0;
|
||||
|
||||
if (*str == '(') {
|
||||
- idx = rootspec = strdup(str);
|
||||
- while (*idx && (*idx != ')') && (!isspace(*idx)))
|
||||
- idx++;
|
||||
- *(++idx) = '\0';
|
||||
+ for (; str[rs] != ')' && !isspace(str[rs]); rs++) {
|
||||
+ if (!str[rs])
|
||||
+ return rs;
|
||||
+ }
|
||||
+ rs++;
|
||||
}
|
||||
- return rootspec;
|
||||
+
|
||||
+ return rs;
|
||||
}
|
||||
|
||||
static char *getInitrdVal(struct grubConfig *config,
|
||||
@@ -5365,7 +5361,7 @@ int main(int argc, const char **argv)
|
||||
if (displayDefault) {
|
||||
struct singleLine *line;
|
||||
struct singleEntry *entry;
|
||||
- char *rootspec;
|
||||
+ size_t rs;
|
||||
|
||||
if (config->defaultImage == NO_DEFAULT_ENTRY)
|
||||
return 0;
|
||||
@@ -5384,9 +5380,8 @@ int main(int argc, const char **argv)
|
||||
if (!line)
|
||||
return 0;
|
||||
|
||||
- rootspec = getRootSpecifier(line->elements[1].item);
|
||||
- printf("%s%s\n", bootPrefix, line->elements[1].item +
|
||||
- ((rootspec != NULL) ? strlen(rootspec) : 0));
|
||||
+ rs = getRootSpecifier(line->elements[1].item);
|
||||
+ printf("%s%s\n", bootPrefix, line->elements[1].item + rs);
|
||||
|
||||
return 0;
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
@ -1,25 +1,24 @@
|
||||
From e08c858af4d2b09e62441560f3ccecc9e750c87a Mon Sep 17 00:00:00 2001
|
||||
From be8c1d611186d1fc35c50d417ba7b43ce25c6054 Mon Sep 17 00:00:00 2001
|
||||
From: Rafael dos Santos <rdossant@redhat.com>
|
||||
Date: Tue, 29 May 2018 15:15:24 +0200
|
||||
Subject: [PATCH 5/8] Use system LDFLAGS
|
||||
Subject: [PATCH 52/55] Use system LDFLAGS
|
||||
|
||||
---
|
||||
Makefile | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
Makefile | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index ac144046133..f0d13720db5 100644
|
||||
index cc7e823959f..65cd28295aa 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -25,7 +25,7 @@ OBJECTS = grubby.o log.o
|
||||
@@ -25,6 +25,7 @@ OBJECTS = grubby.o log.o
|
||||
CC = gcc
|
||||
RPM_OPT_FLAGS ?= -O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector
|
||||
CFLAGS += $(RPM_OPT_FLAGS) -std=gnu99 -Wall -Werror -Wno-error=unused-function -Wno-unused-function -ggdb
|
||||
-LDFLAGS :=
|
||||
+LDFLAGS := $(RPM_LD_FLAGS)
|
||||
|
||||
grubby_LIBS = -lblkid -lpopt
|
||||
|
||||
LDFLAGS :=
|
||||
VERBOSE_TEST :=
|
||||
ifneq ($(VERBOSE_TEST),)
|
||||
--
|
||||
2.17.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From fa1bf7b54cb71fa193da16ffc404f8535d7d16ac Mon Sep 17 00:00:00 2001
|
||||
From f8482113065878c0ace605fbca296fc7601c47cc Mon Sep 17 00:00:00 2001
|
||||
From: Javier Martinez Canillas <javierm@redhat.com>
|
||||
Date: Tue, 31 Jul 2018 17:43:53 +0200
|
||||
Subject: [PATCH 7/8] Make installkernel to use kernel-install scripts on BLS
|
||||
Subject: [PATCH 54/55] Make installkernel to use kernel-install scripts on BLS
|
||||
configuration
|
||||
|
||||
The kernel make install target executes the arch/$ARCH/boot/install.sh
|
@ -1,73 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# set -x
|
||||
|
||||
if [[ "$(uname -m)" == arm* || "$(uname -m)" == aarch64 ]]
|
||||
then
|
||||
COMMAND="$1"
|
||||
KERNEL_VERSION="$2"
|
||||
#BOOT_DIR_ABS="$3"
|
||||
#KERNEL_IMAGE="$4"
|
||||
|
||||
[ -f /etc/u-boot.conf ] && source /etc/u-boot.conf || true
|
||||
[ -z "$FIRMWAREDT" ] || FirmwareDT=$FIRMWAREDT
|
||||
|
||||
if [[ $FirmwareDT == "True" ]]
|
||||
then
|
||||
# if we want to use firmware DT we remove symlink to current kernel DT
|
||||
if [ -h /boot/dtb ]; then
|
||||
rm -f /boot/dtb
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Setup a /boot/dtb -> /boot/dtb-$newest_kernel_version symlink so that
|
||||
# u-boot can find the correct dtb to load.
|
||||
#
|
||||
# If invoked to 'add' a new kernel, find the newest based on `sort`ing
|
||||
# the kernel versions dtb. If 'remove', then follow basically the same
|
||||
# procedure but exclude the version currently being removed.
|
||||
#
|
||||
# The theory of operation here is that, while newer kernels may add new
|
||||
# dtb nodes and fields, as upstreaming hw support for some particular
|
||||
# device progresses, it should never make backward incompatible changes.
|
||||
# So it should always be safe to use a newer dtb with an older kernel.
|
||||
|
||||
list_dtb_versions() {
|
||||
excluded_version="$1"
|
||||
for dtbdir in /boot/dtb-*; do
|
||||
dtbver=${dtbdir#*-}
|
||||
if [ "$dtbver" != "$excluded_version" ]; then
|
||||
echo $dtbver
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
setup_dtb_link() {
|
||||
ver=`list_dtb_versions $1 | sort -r --sort=version | head -1`
|
||||
if [ -h /boot/dtb ]; then
|
||||
rm -f /boot/dtb
|
||||
fi
|
||||
ln -s dtb-$ver /boot/dtb
|
||||
}
|
||||
|
||||
ret=0
|
||||
case "$COMMAND" in
|
||||
add)
|
||||
# If we're adding a kernel we want that version
|
||||
if [ -h /boot/dtb ]; then
|
||||
rm -f /boot/dtb
|
||||
fi
|
||||
ln -s dtb-$KERNEL_VERSION /boot/dtb
|
||||
ret=$?
|
||||
;;
|
||||
remove)
|
||||
setup_dtb_link $KERNEL_VERSION
|
||||
ret=$?
|
||||
;;
|
||||
esac
|
||||
exit $ret
|
||||
else
|
||||
# Just exit on non ARM
|
||||
exit 0
|
||||
fi
|
@ -1,33 +0,0 @@
|
||||
#!/usr/bin/bash
|
||||
|
||||
if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
COMMAND="$1"
|
||||
KERNEL_VERSION="$2"
|
||||
BOOT_DIR_ABS="$3"
|
||||
|
||||
# If $BOOT_DIR_ABS exists, some other boot loader is active.
|
||||
[[ -d "$BOOT_DIR_ABS" ]] && exit 0
|
||||
|
||||
run_hooks()
|
||||
{
|
||||
local f
|
||||
local files="$1"
|
||||
for f in $files ; do
|
||||
[ -x "$f" ] || continue
|
||||
"$f" "$KERNEL_VERSION" "/boot/vmlinuz-$KERNEL_VERSION"
|
||||
done
|
||||
}
|
||||
|
||||
case "$COMMAND" in
|
||||
add)
|
||||
run_hooks "/etc/kernel/postinst.d/*[^~] /etc/kernel/postinst.d/$KERNEL_VERSION/*[^~]"
|
||||
;;
|
||||
remove)
|
||||
run_hooks "/etc/kernel/prerm.d/*[^~] /etc/kernel/prerm.d/$KERNEL_VERSION/*[^~]"
|
||||
;;
|
||||
*)
|
||||
exit 0
|
||||
esac
|
@ -1,8 +1,8 @@
|
||||
#!/bin/bash
|
||||
if [[ -x @@LIBEXECDIR@@/grubby ]] ; then
|
||||
exec @@LIBEXECDIR@@/grubby "${@}"
|
||||
elif [[ -x @@LIBEXECDIR@@/grubby-bls ]] ; then
|
||||
if [[ -x @@LIBEXECDIR@@/grubby-bls ]] ; then
|
||||
exec @@LIBEXECDIR@@/grubby-bls "${@}"
|
||||
elif [[ -x @@LIBEXECDIR@@/grubby ]] ; then
|
||||
exec @@LIBEXECDIR@@/grubby "${@}"
|
||||
fi
|
||||
echo "Grubby is not installed correctly." >>/dev/stderr
|
||||
exit 1
|
||||
|
Loading…
Reference in new issue