From 415ad451de22ef60820f2704d783a87b712af744 Mon Sep 17 00:00:00 2001 From: Robbie Harwood Date: Apr 27 2022 17:08:25 +0000 Subject: Remove upstream and layers of indirection around -bls Signed-off-by: Robbie Harwood --- diff --git a/0001-remove-the-old-crufty-u-boot-support.patch b/0001-remove-the-old-crufty-u-boot-support.patch deleted file mode 100644 index f6f5e97..0000000 --- a/0001-remove-the-old-crufty-u-boot-support.patch +++ /dev/null @@ -1,235 +0,0 @@ -From aa4472dbc10f3d669e24ac07293d7ac19e606866 Mon Sep 17 00:00:00 2001 -From: Dennis Gilmore -Date: Wed, 30 Aug 2017 14:03:45 -0500 -Subject: [PATCH 1/8] remove the old crufty u-boot support - -Fedora has only supported extlinux.conf for a few releases now -as a result it should be the only way we boot systems. Remove -the no longer needed uboot file - -Signed-off-by: Dennis Gilmore ---- - new-kernel-pkg | 116 ------------------------------------------------- - uboot | 43 ------------------ - 2 files changed, 159 deletions(-) - delete mode 100644 uboot - -diff --git a/new-kernel-pkg b/new-kernel-pkg -index b634388a83f..962008e3c9d 100755 ---- a/new-kernel-pkg -+++ b/new-kernel-pkg -@@ -37,7 +37,6 @@ else - fi - - [ -f /etc/sysconfig/kernel ] && . /etc/sysconfig/kernel --[ -f /etc/sysconfig/uboot ] && . /etc/sysconfig/uboot - - cfgGrub2="" - cfgGrub2Efi="" -@@ -50,7 +49,6 @@ grubConfig="" - grub2Config="" - grub2EfiConfig="" - extlinuxConfig="" --ubootScript="/boot/boot.scr" - - ARCH=$(uname -m) - -@@ -84,13 +82,6 @@ elif [[ ${ARCH} =~ armv[5|7].*l ]] ; then - liloConfig="" - bootPrefix=/boot - extlinuxConfig=$(readlink -f /etc/extlinux.conf 2>/dev/null) -- ubootDir=${UBOOT_DIR:-"/boot"} -- ubootScript=$ubootDir/${UBOOT_SCR:-"boot.scr"} -- ubootKList=${UBOOT_KLIST:-"klist.txt"} -- ubootDevice=/dev/${UBOOT_DEVICE:-"mmcblk0p1"} -- ubootDefaultImage=${UBOOT_UIMAGE:-"uImage"} -- ubootDefaultInitrd=${UBOOT_UINITRD:-"uInitrd"} -- ubootAddress=${UBOOT_IMGADDR:-"0x00008000"} - mounted="" - liloFlag="" - isx86="" -@@ -382,53 +373,6 @@ remove() { - [ -n "$verbose" ] && echo "$liloConfig does not exist, not running grubby" - fi - -- if [ -n "$cfguBoot" ]; then -- [ -n "$verbose" ] && echo "removing $version from $ubootDir..." -- -- if [ -f $ubootDir/$ubootKList ]; then -- tmpKList=`mktemp $ubootDir/$ubootKList.XXXX` -- curversion=`tail -n1 $ubootDir/$ubootKList` -- sed "/$version$/d" $ubootDir/$ubootKList > $tmpKList -- newversion=`tail -n1 $tmpKList` -- if [ -f $ubootDir/uImage-$newversion ] && [ -f $ubootDir/uInitrd-$newversion ]; then -- if [ "$curversion" != "$newversion" ]; then -- cp -fp $ubootDir/uImage-$newversion $ubootDir/${ubootDefaultImage} -- if [ $? -ne 0 ]; then -- [ -n "$verbose" ] && echo "copy uImage-$newversion error, default kernel not replaced!" && exit -- fi -- cp -fp $ubootDir/uInitrd-$newversion $ubootDir/${ubootDefaultInitrd} -- if [ $? -ne 0 ]; then -- [ -n "$verbose" ] && echo "copy uInitrd-$newversion error, default Initrd not replaced!" && exit -- fi -- fi -- -- [ -n "$verbose" ] && echo "removing uImage-$version" -- if [ -f $ubootDir/uImage-$version ]; then -- rm -f $ubootDir/uImage-$version -- else -- [ -n "$verbose" ] && echo "uImage-$version did not exist!" -- fi -- -- [ -n "$verbose" ] && echo "removing uInitrd-$version" -- if [ -f $ubootDir/uInitrd-$version ]; then -- rm -f $ubootDir/uInitrd-$version -- else -- [ -n "$verbose" ] && echo "uInitrd-$version did not exist!" -- fi -- -- mv $tmpKList $ubootDir/$ubootKList -- [ -x /sbin/a-b-c ] && /sbin/a-b-c -- else -- [ -n "$verbose" ] && echo "uImage $newversion does not exist!" -- [ -f $tmpKList ] && rm -f $tmpKList -- fi -- else -- [ -n "$verbose" ] && echo "No previous kernel version. U-Boot images not removed!" -- fi -- else -- [ -n "$verbose" ] && echo "$ubootScript does not exist, not modifying $ubootDir" -- fi -- - if [ -n "$cfgExtlinux" ]; then - [ -n "$verbose" ] && echo "removing $version from $extlinuxConfig" - $grubby --extlinux -c $extlinuxConfig \ -@@ -530,36 +474,6 @@ update() { - [ -n "$verbose" ] && echo "$liloConfig does not exist, not running grubby" - fi - -- if [ -n "$cfguBoot" ]; then -- [ -n "$verbose" ] && echo "adding $version to $ubootDir..." -- -- [ -n "$verbose" ] && echo "creating uImage-$version" -- mkimage -A arm -O linux -T kernel -C none -a $ubootAddress \ -- -e $ubootAddress -n $version \ -- -d $kernelImage $ubootDir/uImage-$version -- -- [ -n "$verbose" ] && echo "creating uInitrd-$version" -- mkimage -A arm -O linux -T ramdisk -C none -a 0 -e 0 \ -- -n initramfs -d $initrdfile $ubootDir/uInitrd-$version -- -- if [ -f $ubootDir/uImage-$version ] && [ -f $ubootDir/uInitrd-$version ]; then -- cp -fp $ubootDir/uImage-$version $ubootDir/${ubootDefaultImage} -- if [ $? -ne 0 ]; then -- [ -n "$verbose" ] && echo "copy uImage-$version error, kernel not installed!" && exit -- fi -- cp -fp $ubootDir/uInitrd-$version $ubootDir/${ubootDefaultInitrd} -- if [ $? -ne 0 ]; then -- [ -n "$verbose" ] && echo "copy uInitrd-$version error, kernel not installed!" && exit -- fi -- echo $version >> $ubootDir/$ubootKList -- [ -x /sbin/a-b-c ] && /sbin/a-b-c -- else -- [ -n "$verbose" ] && echo "cannot make $version the default" -- fi -- else -- [ -n "$verbose" ] && echo "$ubootScript does not exist, not setting up $ubootDir" -- fi -- - if [ -n "$cfgExtlinux" ]; then - [ -n "$verbose" ] && echo "updating $version from $extlinuxConfig" - ARGS="--extlinux -c $extlinuxConfig --update-kernel=$kernelImage \ -@@ -877,33 +791,6 @@ fi - [ -n "$liloConfig" ] && [ -f "$liloConfig" ] && cfgLilo=1; - [ -n "$extlinuxConfig" ] && [ -f "$extlinuxConfig" ] && cfgExtlinux=1; - --# if we have a U-Boot directory, but no boot script, check if the directory --# is mounted. If not, mount it, and then check if a boot script exists. --if [ -n "$ubootDir" ]; then -- if [ -f "$ubootScript" ]; then -- cfguBoot=1 -- else -- mountEntry=`mount | grep $ubootDir` -- if [ -z "$mountEntry" ]; then -- mount $ubootDevice $ubootDir -- mounted=1 -- fi -- [ -f "$ubootScript" ] && cfguBoot=1; -- fi --fi -- --# if we're using U-Boot, check if the default load address should change --if [ -n "$cfguBoot" -a -z "$UBOOT_IMGADDR" ]; then -- [[ $version =~ .([^.]*)$ ]] -- platform=${BASH_REMATCH[1]} -- # A few platforms use an alternate kernel load address -- if [ "$platform" = "omap" ]; then -- ubootAddress=0x80008000 -- elif [ "$platform" = "imx" ]; then -- ubootAddress=0x90008000 -- fi --fi -- - # if we have a lilo config on an x86 box, see if the default boot loader - # is lilo to determine if it should be run - if [ -n "$cfgLilo" -a -n "$isx86" ]; then -@@ -920,7 +807,4 @@ elif [ "$mode" == "--rpmposttrans" ]; then - rpmposttrans - fi - --# if we mounted the U-Boot directory, unmount it. --[ -n "$mounted" ] && umount $ubootDir -- - exit 0 -diff --git a/uboot b/uboot -deleted file mode 100644 -index 07d8671822f..00000000000 ---- a/uboot -+++ /dev/null -@@ -1,43 +0,0 @@ --# Settings for uBoot setup in /sbin/new-kernel-pkg --# --# Default values are provided below (as comments) --# --# WARNING: These values affect where grubby installs and removes --# uBoot kernel images. Changing these _after_ kernels have --# been installed may cause removing a kernel image to fail. -- --# directory where uBoot images and scripts are found --#UBOOT_DIR=/boot -- --# Override the load address when running mkimage on the kernel. --# OMAP such as Beagleboard and Pandaboard: Use 0x80008000 --# Tegra such as Trimslice: Use 0x00008000 --# IMX such as Efika mx51 smarttop: Use 0x90008000 --# Kirkwood such as Dreamplug, Guruplug, Sheevaplug: Use 0x00008000 --# If left undefined grubby will use defults for Tegra or OMAP depending --# upon the contents of /proc/cpuinfo. --#UBOOT_IMGADDR=0x0x00008000 -- --# name of the text file containing the list of installed kernel versions --# NOTE: The versions are in order of installation. The last entry should --# always be the default boot kernel version. --#UBOOT_KLIST=klist.txt -- --# device partition where uBoot images reside; mounted on $UBOOT_DIR --#UBOOT_DEVICE=mmcblk0p1 -- -- --# NOTE: Both of the following files are automatically overwritte --# when a kernel package is installed or removed. -- --# default kernel uImage file name --#UBOOT_UIMAGE=uImage -- --# default initrd uInitrd file name --#UBOOT_UINITRD=uInitrd -- --# defualt for platform shipping an onboard dtb. --#SHIPSDTB=no -- --# option to tell new-kernel-pkg a specific dtb file to load in extlinux.conf --#dtbfile=foo.dtb --- -2.17.1 - diff --git a/0002-Change-return-type-in-getRootSpecifier.patch b/0002-Change-return-type-in-getRootSpecifier.patch deleted file mode 100644 index f2a1978..0000000 --- a/0002-Change-return-type-in-getRootSpecifier.patch +++ /dev/null @@ -1,143 +0,0 @@ -From 3afc4c0ed28d443bb71956b07fd45c8cfb07566f Mon Sep 17 00:00:00 2001 -From: Nathaniel McCallum -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 - diff --git a/0003-Add-btrfs-subvolume-support-for-grub2.patch b/0003-Add-btrfs-subvolume-support-for-grub2.patch deleted file mode 100644 index 583c5de..0000000 --- a/0003-Add-btrfs-subvolume-support-for-grub2.patch +++ /dev/null @@ -1,209 +0,0 @@ -From 112b6e5fc690b2a73b6ad8c92dc4645db08503b6 Mon Sep 17 00:00:00 2001 -From: Nathaniel McCallum -Date: Fri, 2 Mar 2018 08:40:18 -0500 -Subject: [PATCH 3/8] Add btrfs subvolume support for grub2 - -In order to find the subvolume prefix from a given path, we parse -/proc/mounts. In cases where /proc/mounts doesn't contain the -filesystem, the caller can use the --mounts option to specify his own -mounts file. - -Btrfs subvolumes are already supported by grub2 and by grub2-mkconfig. - -Fixes #22 ---- - grubby.c | 148 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- - 1 file changed, 143 insertions(+), 5 deletions(-) - -diff --git a/grubby.c b/grubby.c -index a062ef8e567..96d252a0a83 100644 ---- a/grubby.c -+++ b/grubby.c -@@ -68,6 +68,8 @@ int isEfi = 0; - - char *saved_command_line = NULL; - -+const char *mounts = "/proc/mounts"; -+ - /* comments get lumped in with indention */ - struct lineElement { - char * item; -@@ -1834,6 +1836,129 @@ static int endswith(const char *s, char c) - return s[slen] == c; - } - -+typedef struct { -+ const char *start; -+ size_t chars; -+} field; -+ -+static int iscomma(int c) -+{ -+ return c == ','; -+} -+ -+static int isequal(int c) -+{ -+ return c == '='; -+} -+ -+static field findField(const field *in, typeof(isspace) *isdelim, field *out) -+{ -+ field nxt = {}; -+ size_t off = 0; -+ -+ while (off < in->chars && isdelim(in->start[off])) -+ off++; -+ -+ if (off == in->chars) -+ return nxt; -+ -+ out->start = &in->start[off]; -+ out->chars = 0; -+ -+ while (off + out->chars < in->chars && !isdelim(out->start[out->chars])) -+ out->chars++; -+ -+ nxt.start = out->start + out->chars; -+ nxt.chars = in->chars - off - out->chars; -+ return nxt; -+} -+ -+static int fieldEquals(const field *in, const char *str) -+{ -+ return in->chars == strlen(str) && -+ strncmp(in->start, str, in->chars) == 0; -+} -+ -+/* Parse /proc/mounts to determine the subvolume prefix. */ -+static size_t subvolPrefix(const char *str) -+{ -+ FILE *file = NULL; -+ char *line = NULL; -+ size_t prfx = 0; -+ size_t size = 0; -+ -+ file = fopen(mounts, "r"); -+ if (!file) -+ return 0; -+ -+ for (ssize_t s; (s = getline(&line, &size, file)) >= 0; ) { -+ field nxt = { line, s }; -+ field dev = {}; -+ field path = {}; -+ field type = {}; -+ field opts = {}; -+ field opt = {}; -+ -+ nxt = findField(&nxt, isspace, &dev); -+ if (!nxt.start) -+ continue; -+ -+ nxt = findField(&nxt, isspace, &path); -+ if (!nxt.start) -+ continue; -+ -+ nxt = findField(&nxt, isspace, &type); -+ if (!nxt.start) -+ continue; -+ -+ nxt = findField(&nxt, isspace, &opts); -+ if (!nxt.start) -+ continue; -+ -+ if (!fieldEquals(&type, "btrfs")) -+ continue; -+ -+ /* We have found a btrfs mount point. */ -+ -+ nxt = opts; -+ while ((nxt = findField(&nxt, iscomma, &opt)).start) { -+ field key = {}; -+ field val = {}; -+ -+ opt = findField(&opt, isequal, &key); -+ if (!opt.start) -+ continue; -+ -+ opt = findField(&opt, isequal, &val); -+ if (!opt.start) -+ continue; -+ -+ if (!fieldEquals(&key, "subvol")) -+ continue; -+ -+ /* We have found a btrfs subvolume mount point. */ -+ -+ if (strncmp(val.start, str, val.chars)) -+ continue; -+ -+ if (val.start[val.chars - 1] != '/' && -+ str[val.chars] != '/') -+ continue; -+ -+ /* The subvolume mount point matches our input. */ -+ -+ if (prfx < val.chars) -+ prfx = val.chars; -+ } -+ } -+ -+ dbgPrintf("%s(): str: '%s', prfx: '%s'\n", __FUNCTION__, str, prfx); -+ -+ fclose(file); -+ free(line); -+ return prfx; -+} -+ - int suitableImage(struct singleEntry * entry, const char * bootPrefix, - int skipRemoved, int flags) { - struct singleLine * line; -@@ -2794,12 +2919,22 @@ 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)) { -- size_t rs = getRootSpecifier(tmplLine->elements[1].item); -+ const char *prfx = tmplLine->elements[1].item; -+ size_t rs = getRootSpecifier(prfx); -+ if (isinitrd(tmplLine->type)) { -+ for (struct singleLine *l = entry->lines; -+ rs == 0 && l; l = l->next) { -+ if (iskernel(l->type)) { -+ prfx = l->elements[1].item; -+ rs = getRootSpecifier(prfx); -+ } -+ } -+ } - if (rs > 0) { - free(newLine->elements[1].item); -- newLine->elements[1].item = sdupprintf("%.*s%s", (int) rs, -- tmplLine->elements[1].item, val); -- } -+ newLine->elements[1].item = sdupprintf("%.*s%s", -+ (int) rs, prfx, val); -+ } - } - } - -@@ -3738,7 +3873,7 @@ static size_t getRootSpecifier(const char *str) - rs++; - } - -- return rs; -+ return rs + subvolPrefix(str + rs); - } - - static char * getInitrdVal(struct grubConfig * config, -@@ -4253,6 +4388,9 @@ int main(int argc, const char ** argv) { - { "mbargs", 0, POPT_ARG_STRING, &newMBKernelArgs, 0, - _("default arguments for the new multiboot kernel or " - "new arguments for multiboot kernel being updated"), NULL }, -+ { "mounts", 0, POPT_ARG_STRING, &mounts, 0, -+ _("path to fake /proc/mounts file (for testing only)"), -+ _("mounts") }, - { "bad-image-okay", 0, 0, &badImageOkay, 0, - _("don't sanity check images in boot entries (for testing only)"), - NULL }, --- -2.17.1 - diff --git a/0004-Add-tests-for-btrfs-support.patch b/0004-Add-tests-for-btrfs-support.patch deleted file mode 100644 index f4b8ec8..0000000 --- a/0004-Add-tests-for-btrfs-support.patch +++ /dev/null @@ -1,1871 +0,0 @@ -From e319f73ca691b9cc138def3a9c19f1cb6e581475 Mon Sep 17 00:00:00 2001 -From: Gene Czarcinski -Date: Mon, 9 Jun 2014 21:11:37 -0400 -Subject: [PATCH 4/8] Add tests for btrfs support - -The tests performed are: -- add kernel with /boot on btrfs subvol (20) -- update kernel/add initrd with /boot on btrfs subvol (21) -- add kernel with rootfs on btrfs subvol and /boot a directory (22) -- update kernel/add initrd with rootfs on btrfs subvol and - /boot a directory (23) -- add kernel and initrd with /boot on btrfs subvol (24) -- add kernel and initrd with rootfs on btrfs subvol and /boot - a directory (25) ---- - test.sh | 40 +++++++ - test/grub2-support_files/g2.20-mounts | 2 + - test/grub2-support_files/g2.21-mounts | 1 + - test/grub2-support_files/g2.22-mounts | 1 + - test/grub2-support_files/g2.23-mounts | 1 + - test/grub2-support_files/g2.24-mounts | 1 + - test/grub2-support_files/g2.25-mounts | 1 + - test/grub2.20 | 126 ++++++++++++++++++++++ - test/grub2.21 | 140 +++++++++++++++++++++++++ - test/grub2.22 | 128 +++++++++++++++++++++++ - test/grub2.23 | 143 +++++++++++++++++++++++++ - test/grub2.24 | 126 ++++++++++++++++++++++ - test/grub2.25 | 128 +++++++++++++++++++++++ - test/results/add/g2-1.20 | 140 +++++++++++++++++++++++++ - test/results/add/g2-1.21 | 141 +++++++++++++++++++++++++ - test/results/add/g2-1.22 | 143 +++++++++++++++++++++++++ - test/results/add/g2-1.23 | 144 ++++++++++++++++++++++++++ - test/results/add/g2-1.24 | 141 +++++++++++++++++++++++++ - test/results/add/g2-1.25 | 144 ++++++++++++++++++++++++++ - 19 files changed, 1691 insertions(+) - create mode 100644 test/grub2-support_files/g2.20-mounts - create mode 120000 test/grub2-support_files/g2.21-mounts - create mode 100644 test/grub2-support_files/g2.22-mounts - create mode 120000 test/grub2-support_files/g2.23-mounts - create mode 120000 test/grub2-support_files/g2.24-mounts - create mode 120000 test/grub2-support_files/g2.25-mounts - create mode 100644 test/grub2.20 - create mode 100644 test/grub2.21 - create mode 100644 test/grub2.22 - create mode 100644 test/grub2.23 - create mode 100644 test/grub2.24 - create mode 100644 test/grub2.25 - create mode 100644 test/results/add/g2-1.20 - create mode 100644 test/results/add/g2-1.21 - create mode 100644 test/results/add/g2-1.22 - create mode 100644 test/results/add/g2-1.23 - create mode 100644 test/results/add/g2-1.24 - create mode 100644 test/results/add/g2-1.25 - -diff --git a/test.sh b/test.sh -index 6379698c6de..c35bfca1c89 100755 ---- a/test.sh -+++ b/test.sh -@@ -629,6 +629,46 @@ if [ "$testgrub2" == "y" ]; then - --initrd /boot/initramfs-0-rescue-5a94251776a14678911d4ae0949500f5.img \ - --copy-default --title "Fedora 21 Rescue" --args=root=/fooooo \ - --remove-kernel=wtf --boot-filesystem=/boot/ -+ -+ testing="GRUB2 add kernel with boot on btrfs subvol" -+ grub2Test grub2.20 add/g2-1.20 --add-kernel=/boot/new-kernel.img \ -+ --title='title' \ -+ --boot-filesystem=/boot/ \ -+ --copy-default \ -+ --mounts='test/grub2-support_files/g2.20-mounts' -+ -+ testing="GRUB2 add initrd with boot on btrfs subvol" -+ grub2Test grub2.21 add/g2-1.21 --update-kernel=/boot/new-kernel.img \ -+ --initrd=/boot/new-initrd --boot-filesystem=/boot/ \ -+ --mounts='test/grub2-support_files/g2.21-mounts' -+ -+ testing="GRUB2 add kernel with rootfs on btrfs subvol and boot directory" -+ grub2Test grub2.22 add/g2-1.22 --add-kernel=/boot/new-kernel.img \ -+ --title='title' \ -+ --boot-filesystem= \ -+ --copy-default \ -+ --mounts='test/grub2-support_files/g2.22-mounts' -+ -+ testing="GRUB2 add initrd with rootfs on btrfs subvol and boot directory" -+ grub2Test grub2.23 add/g2-1.23 --update-kernel=/boot/new-kernel.img \ -+ --initrd=/boot/new-initrd --boot-filesystem= \ -+ --mounts='test/grub2-support_files/g2.23-mounts' -+ -+ testing="GRUB2 add kernel and initrd with boot on btrfs subvol" -+ grub2Test grub2.24 add/g2-1.24 --add-kernel=/boot/new-kernel.img \ -+ --title='title' \ -+ --initrd=/boot/new-initrd \ -+ --boot-filesystem=/boot/ \ -+ --copy-default \ -+ --mounts='test/grub2-support_files/g2.24-mounts' -+ -+ testing="GRUB2 add kernel and initrd with rootfs on btrfs subvol and boot directory" -+ grub2Test grub2.25 add/g2-1.25 --add-kernel=/boot/new-kernel.img \ -+ --title='title' \ -+ --initrd=/boot/new-initrd \ -+ --boot-filesystem= \ -+ --copy-default \ -+ --mounts='test/grub2-support_files/g2.25-mounts' - fi - fi - -diff --git a/test/grub2-support_files/g2.20-mounts b/test/grub2-support_files/g2.20-mounts -new file mode 100644 -index 00000000000..00bdb48e4ab ---- /dev/null -+++ b/test/grub2-support_files/g2.20-mounts -@@ -0,0 +1,2 @@ -+/dev/sda / btrfs subvol=/root6,defaults 0 0 -+/dev/sda /boot btrfs subvol=/boot6,defaults 0 0 -diff --git a/test/grub2-support_files/g2.21-mounts b/test/grub2-support_files/g2.21-mounts -new file mode 120000 -index 00000000000..42ef3fd4272 ---- /dev/null -+++ b/test/grub2-support_files/g2.21-mounts -@@ -0,0 +1 @@ -+g2.20-mounts -\ No newline at end of file -diff --git a/test/grub2-support_files/g2.22-mounts b/test/grub2-support_files/g2.22-mounts -new file mode 100644 -index 00000000000..5b664e72519 ---- /dev/null -+++ b/test/grub2-support_files/g2.22-mounts -@@ -0,0 +1 @@ -+/dev/sda / btrfs defaults,subvol=/root4,ro 0 0 -diff --git a/test/grub2-support_files/g2.23-mounts b/test/grub2-support_files/g2.23-mounts -new file mode 120000 -index 00000000000..74f036fc4a3 ---- /dev/null -+++ b/test/grub2-support_files/g2.23-mounts -@@ -0,0 +1 @@ -+g2.22-mounts -\ No newline at end of file -diff --git a/test/grub2-support_files/g2.24-mounts b/test/grub2-support_files/g2.24-mounts -new file mode 120000 -index 00000000000..42ef3fd4272 ---- /dev/null -+++ b/test/grub2-support_files/g2.24-mounts -@@ -0,0 +1 @@ -+g2.20-mounts -\ No newline at end of file -diff --git a/test/grub2-support_files/g2.25-mounts b/test/grub2-support_files/g2.25-mounts -new file mode 120000 -index 00000000000..74f036fc4a3 ---- /dev/null -+++ b/test/grub2-support_files/g2.25-mounts -@@ -0,0 +1 @@ -+g2.22-mounts -\ No newline at end of file -diff --git a/test/grub2.20 b/test/grub2.20 -new file mode 100644 -index 00000000000..23b75fa8d3c ---- /dev/null -+++ b/test/grub2.20 -@@ -0,0 +1,126 @@ -+# -+# 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=15 -+# Fallback normal timeout code in case the timeout_style feature is -+# unavailable. -+else -+ set timeout=15 -+fi -+### END /etc/grub.d/00_header ### -+ -+### BEGIN /etc/grub.d/10_linux ### -+menuentry 'Fedora, with Linux 3.15.0-0.rc7.git2.1.fc21.x86_64' --class gnu-linux --class gnu --class os { -+ load_video -+ set gfxpayload=keep -+ insmod gzio -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ else -+ search --no-floppy --fs-uuid --set=root 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ fi -+ linux16 /boot6/vmlinuz-3.15.0-0.rc7.git2.1.fc21.x86_64 root=UUID=1bab15a4-93ce-4373-8d7d-b77f907fd0c6 ro rootflags=subvol=root6 rhgb quiet -+ initrd16 /boot6/initramfs-3.15.0-0.rc7.git2.1.fc21.x86_64.img -+} -+menuentry 'Fedora, with Linux 0-rescue-81378818f7a24478b496ebef90e1dd69' --class gnu-linux --class gnu --class os { -+ load_video -+ insmod gzio -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ else -+ search --no-floppy --fs-uuid --set=root 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ fi -+ linux16 /boot6/vmlinuz-0-rescue-81378818f7a24478b496ebef90e1dd69 root=UUID=1bab15a4-93ce-4373-8d7d-b77f907fd0c6 ro rootflags=subvol=root6 rhgb quiet -+ initrd16 /boot6/initramfs-0-rescue-81378818f7a24478b496ebef90e1dd69.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/grub2.21 b/test/grub2.21 -new file mode 100644 -index 00000000000..579c2f6744a ---- /dev/null -+++ b/test/grub2.21 -@@ -0,0 +1,140 @@ -+# -+# 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=15 -+# Fallback normal timeout code in case the timeout_style feature is -+# unavailable. -+else -+ set timeout=15 -+fi -+### END /etc/grub.d/00_header ### -+ -+### BEGIN /etc/grub.d/10_linux ### -+menuentry 'title' --class gnu-linux --class gnu --class os { -+ load_video -+ set gfxpayload=keep -+ insmod gzio -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ else -+ search --no-floppy --fs-uuid --set=root 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ fi -+ linux16 /boot6/new-kernel.img root=UUID=1bab15a4-93ce-4373-8d7d-b77f907fd0c6 ro rootflags=subvol=root6 rhgb quiet -+} -+menuentry 'Fedora, with Linux 3.15.0-0.rc7.git2.1.fc21.x86_64' --class gnu-linux --class gnu --class os { -+ load_video -+ set gfxpayload=keep -+ insmod gzio -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ else -+ search --no-floppy --fs-uuid --set=root 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ fi -+ linux16 /boot6/vmlinuz-3.15.0-0.rc7.git2.1.fc21.x86_64 root=UUID=1bab15a4-93ce-4373-8d7d-b77f907fd0c6 ro rootflags=subvol=root6 rhgb quiet -+ initrd16 /boot6/initramfs-3.15.0-0.rc7.git2.1.fc21.x86_64.img -+} -+menuentry 'Fedora, with Linux 0-rescue-81378818f7a24478b496ebef90e1dd69' --class gnu-linux --class gnu --class os { -+ load_video -+ insmod gzio -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ else -+ search --no-floppy --fs-uuid --set=root 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ fi -+ linux16 /boot6/vmlinuz-0-rescue-81378818f7a24478b496ebef90e1dd69 root=UUID=1bab15a4-93ce-4373-8d7d-b77f907fd0c6 ro rootflags=subvol=root6 rhgb quiet -+ initrd16 /boot6/initramfs-0-rescue-81378818f7a24478b496ebef90e1dd69.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/grub2.22 b/test/grub2.22 -new file mode 100644 -index 00000000000..9466bc35153 ---- /dev/null -+++ b/test/grub2.22 -@@ -0,0 +1,128 @@ -+# -+# 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=15 -+# Fallback normal timeout code in case the timeout_style feature is -+# unavailable. -+else -+ set timeout=15 -+fi -+### END /etc/grub.d/00_header ### -+ -+### BEGIN /etc/grub.d/10_linux ### -+menuentry 'Fedora, with Linux 3.15.0-0.rc7.git2.1.fc21.x86_64' --class gnu-linux --class gnu --class os { -+ load_video -+ set gfxpayload=keep -+ insmod gzio -+ insmod part_msdos -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' --hint='hd1,msdos3' 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ else -+ search --no-floppy --fs-uuid --set=root 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ fi -+ linux16 /root4/boot/vmlinuz-3.15.0-0.rc7.git2.1.fc21.x86_64 root=UUID=54c6abc2-b1e7-4987-aa73-c79927be69eb ro rootflags=subvol=root4 rhgb quiet -+ initrd16 /root4/boot/initramfs-3.15.0-0.rc7.git2.1.fc21.x86_64.img -+} -+menuentry 'Fedora, with Linux 0-rescue-20e7024f4e9c4b70b1042b91acd434c6' --class gnu-linux --class gnu --class os { -+ load_video -+ insmod gzio -+ insmod part_msdos -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' --hint='hd1,msdos3' 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ else -+ search --no-floppy --fs-uuid --set=root 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ fi -+ linux16 /root4/boot/vmlinuz-0-rescue-20e7024f4e9c4b70b1042b91acd434c6 root=UUID=54c6abc2-b1e7-4987-aa73-c79927be69eb ro rootflags=subvol=root4 rhgb quiet -+ initrd16 /root4/boot/initramfs-0-rescue-20e7024f4e9c4b70b1042b91acd434c6.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 ### -+### -+ -+### 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/grub2.23 b/test/grub2.23 -new file mode 100644 -index 00000000000..5cb240fc1de ---- /dev/null -+++ b/test/grub2.23 -@@ -0,0 +1,143 @@ -+# -+# 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=15 -+# Fallback normal timeout code in case the timeout_style feature is -+# unavailable. -+else -+ set timeout=15 -+fi -+### END /etc/grub.d/00_header ### -+ -+### BEGIN /etc/grub.d/10_linux ### -+menuentry 'title' --class gnu-linux --class gnu --class os { -+ load_video -+ set gfxpayload=keep -+ insmod gzio -+ insmod part_msdos -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' --hint='hd1,msdos3' 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ else -+ search --no-floppy --fs-uuid --set=root 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ fi -+ linux16 /root4/boot/new-kernel.img root=UUID=54c6abc2-b1e7-4987-aa73-c79927be69eb ro rootflags=subvol=root4 rhgb quiet -+} -+menuentry 'Fedora, with Linux 3.15.0-0.rc7.git2.1.fc21.x86_64' --class gnu-linux --class gnu --class os { -+ load_video -+ set gfxpayload=keep -+ insmod gzio -+ insmod part_msdos -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' --hint='hd1,msdos3' 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ else -+ search --no-floppy --fs-uuid --set=root 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ fi -+ linux16 /root4/boot/vmlinuz-3.15.0-0.rc7.git2.1.fc21.x86_64 root=UUID=54c6abc2-b1e7-4987-aa73-c79927be69eb ro rootflags=subvol=root4 rhgb quiet -+ initrd16 /root4/boot/initramfs-3.15.0-0.rc7.git2.1.fc21.x86_64.img -+} -+menuentry 'Fedora, with Linux 0-rescue-20e7024f4e9c4b70b1042b91acd434c6' --class gnu-linux --class gnu --class os { -+ load_video -+ insmod gzio -+ insmod part_msdos -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' --hint='hd1,msdos3' 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ else -+ search --no-floppy --fs-uuid --set=root 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ fi -+ linux16 /root4/boot/vmlinuz-0-rescue-20e7024f4e9c4b70b1042b91acd434c6 root=UUID=54c6abc2-b1e7-4987-aa73-c79927be69eb ro rootflags=subvol=root4 rhgb quiet -+ initrd16 /root4/boot/initramfs-0-rescue-20e7024f4e9c4b70b1042b91acd434c6.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 ### -+### -+ -+### 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/grub2.24 b/test/grub2.24 -new file mode 100644 -index 00000000000..23b75fa8d3c ---- /dev/null -+++ b/test/grub2.24 -@@ -0,0 +1,126 @@ -+# -+# 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=15 -+# Fallback normal timeout code in case the timeout_style feature is -+# unavailable. -+else -+ set timeout=15 -+fi -+### END /etc/grub.d/00_header ### -+ -+### BEGIN /etc/grub.d/10_linux ### -+menuentry 'Fedora, with Linux 3.15.0-0.rc7.git2.1.fc21.x86_64' --class gnu-linux --class gnu --class os { -+ load_video -+ set gfxpayload=keep -+ insmod gzio -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ else -+ search --no-floppy --fs-uuid --set=root 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ fi -+ linux16 /boot6/vmlinuz-3.15.0-0.rc7.git2.1.fc21.x86_64 root=UUID=1bab15a4-93ce-4373-8d7d-b77f907fd0c6 ro rootflags=subvol=root6 rhgb quiet -+ initrd16 /boot6/initramfs-3.15.0-0.rc7.git2.1.fc21.x86_64.img -+} -+menuentry 'Fedora, with Linux 0-rescue-81378818f7a24478b496ebef90e1dd69' --class gnu-linux --class gnu --class os { -+ load_video -+ insmod gzio -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ else -+ search --no-floppy --fs-uuid --set=root 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ fi -+ linux16 /boot6/vmlinuz-0-rescue-81378818f7a24478b496ebef90e1dd69 root=UUID=1bab15a4-93ce-4373-8d7d-b77f907fd0c6 ro rootflags=subvol=root6 rhgb quiet -+ initrd16 /boot6/initramfs-0-rescue-81378818f7a24478b496ebef90e1dd69.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/grub2.25 b/test/grub2.25 -new file mode 100644 -index 00000000000..9466bc35153 ---- /dev/null -+++ b/test/grub2.25 -@@ -0,0 +1,128 @@ -+# -+# 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=15 -+# Fallback normal timeout code in case the timeout_style feature is -+# unavailable. -+else -+ set timeout=15 -+fi -+### END /etc/grub.d/00_header ### -+ -+### BEGIN /etc/grub.d/10_linux ### -+menuentry 'Fedora, with Linux 3.15.0-0.rc7.git2.1.fc21.x86_64' --class gnu-linux --class gnu --class os { -+ load_video -+ set gfxpayload=keep -+ insmod gzio -+ insmod part_msdos -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' --hint='hd1,msdos3' 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ else -+ search --no-floppy --fs-uuid --set=root 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ fi -+ linux16 /root4/boot/vmlinuz-3.15.0-0.rc7.git2.1.fc21.x86_64 root=UUID=54c6abc2-b1e7-4987-aa73-c79927be69eb ro rootflags=subvol=root4 rhgb quiet -+ initrd16 /root4/boot/initramfs-3.15.0-0.rc7.git2.1.fc21.x86_64.img -+} -+menuentry 'Fedora, with Linux 0-rescue-20e7024f4e9c4b70b1042b91acd434c6' --class gnu-linux --class gnu --class os { -+ load_video -+ insmod gzio -+ insmod part_msdos -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' --hint='hd1,msdos3' 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ else -+ search --no-floppy --fs-uuid --set=root 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ fi -+ linux16 /root4/boot/vmlinuz-0-rescue-20e7024f4e9c4b70b1042b91acd434c6 root=UUID=54c6abc2-b1e7-4987-aa73-c79927be69eb ro rootflags=subvol=root4 rhgb quiet -+ initrd16 /root4/boot/initramfs-0-rescue-20e7024f4e9c4b70b1042b91acd434c6.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 ### -+### -+ -+### 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.20 b/test/results/add/g2-1.20 -new file mode 100644 -index 00000000000..579c2f6744a ---- /dev/null -+++ b/test/results/add/g2-1.20 -@@ -0,0 +1,140 @@ -+# -+# 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=15 -+# Fallback normal timeout code in case the timeout_style feature is -+# unavailable. -+else -+ set timeout=15 -+fi -+### END /etc/grub.d/00_header ### -+ -+### BEGIN /etc/grub.d/10_linux ### -+menuentry 'title' --class gnu-linux --class gnu --class os { -+ load_video -+ set gfxpayload=keep -+ insmod gzio -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ else -+ search --no-floppy --fs-uuid --set=root 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ fi -+ linux16 /boot6/new-kernel.img root=UUID=1bab15a4-93ce-4373-8d7d-b77f907fd0c6 ro rootflags=subvol=root6 rhgb quiet -+} -+menuentry 'Fedora, with Linux 3.15.0-0.rc7.git2.1.fc21.x86_64' --class gnu-linux --class gnu --class os { -+ load_video -+ set gfxpayload=keep -+ insmod gzio -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ else -+ search --no-floppy --fs-uuid --set=root 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ fi -+ linux16 /boot6/vmlinuz-3.15.0-0.rc7.git2.1.fc21.x86_64 root=UUID=1bab15a4-93ce-4373-8d7d-b77f907fd0c6 ro rootflags=subvol=root6 rhgb quiet -+ initrd16 /boot6/initramfs-3.15.0-0.rc7.git2.1.fc21.x86_64.img -+} -+menuentry 'Fedora, with Linux 0-rescue-81378818f7a24478b496ebef90e1dd69' --class gnu-linux --class gnu --class os { -+ load_video -+ insmod gzio -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ else -+ search --no-floppy --fs-uuid --set=root 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ fi -+ linux16 /boot6/vmlinuz-0-rescue-81378818f7a24478b496ebef90e1dd69 root=UUID=1bab15a4-93ce-4373-8d7d-b77f907fd0c6 ro rootflags=subvol=root6 rhgb quiet -+ initrd16 /boot6/initramfs-0-rescue-81378818f7a24478b496ebef90e1dd69.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.21 b/test/results/add/g2-1.21 -new file mode 100644 -index 00000000000..c0dded9724c ---- /dev/null -+++ b/test/results/add/g2-1.21 -@@ -0,0 +1,141 @@ -+# -+# 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=15 -+# Fallback normal timeout code in case the timeout_style feature is -+# unavailable. -+else -+ set timeout=15 -+fi -+### END /etc/grub.d/00_header ### -+ -+### BEGIN /etc/grub.d/10_linux ### -+menuentry 'title' --class gnu-linux --class gnu --class os { -+ load_video -+ set gfxpayload=keep -+ insmod gzio -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ else -+ search --no-floppy --fs-uuid --set=root 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ fi -+ linux16 /boot6/new-kernel.img root=UUID=1bab15a4-93ce-4373-8d7d-b77f907fd0c6 ro rootflags=subvol=root6 rhgb quiet -+ initrd16 /boot6/new-initrd -+} -+menuentry 'Fedora, with Linux 3.15.0-0.rc7.git2.1.fc21.x86_64' --class gnu-linux --class gnu --class os { -+ load_video -+ set gfxpayload=keep -+ insmod gzio -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ else -+ search --no-floppy --fs-uuid --set=root 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ fi -+ linux16 /boot6/vmlinuz-3.15.0-0.rc7.git2.1.fc21.x86_64 root=UUID=1bab15a4-93ce-4373-8d7d-b77f907fd0c6 ro rootflags=subvol=root6 rhgb quiet -+ initrd16 /boot6/initramfs-3.15.0-0.rc7.git2.1.fc21.x86_64.img -+} -+menuentry 'Fedora, with Linux 0-rescue-81378818f7a24478b496ebef90e1dd69' --class gnu-linux --class gnu --class os { -+ load_video -+ insmod gzio -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ else -+ search --no-floppy --fs-uuid --set=root 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ fi -+ linux16 /boot6/vmlinuz-0-rescue-81378818f7a24478b496ebef90e1dd69 root=UUID=1bab15a4-93ce-4373-8d7d-b77f907fd0c6 ro rootflags=subvol=root6 rhgb quiet -+ initrd16 /boot6/initramfs-0-rescue-81378818f7a24478b496ebef90e1dd69.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.22 b/test/results/add/g2-1.22 -new file mode 100644 -index 00000000000..5cb240fc1de ---- /dev/null -+++ b/test/results/add/g2-1.22 -@@ -0,0 +1,143 @@ -+# -+# 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=15 -+# Fallback normal timeout code in case the timeout_style feature is -+# unavailable. -+else -+ set timeout=15 -+fi -+### END /etc/grub.d/00_header ### -+ -+### BEGIN /etc/grub.d/10_linux ### -+menuentry 'title' --class gnu-linux --class gnu --class os { -+ load_video -+ set gfxpayload=keep -+ insmod gzio -+ insmod part_msdos -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' --hint='hd1,msdos3' 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ else -+ search --no-floppy --fs-uuid --set=root 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ fi -+ linux16 /root4/boot/new-kernel.img root=UUID=54c6abc2-b1e7-4987-aa73-c79927be69eb ro rootflags=subvol=root4 rhgb quiet -+} -+menuentry 'Fedora, with Linux 3.15.0-0.rc7.git2.1.fc21.x86_64' --class gnu-linux --class gnu --class os { -+ load_video -+ set gfxpayload=keep -+ insmod gzio -+ insmod part_msdos -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' --hint='hd1,msdos3' 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ else -+ search --no-floppy --fs-uuid --set=root 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ fi -+ linux16 /root4/boot/vmlinuz-3.15.0-0.rc7.git2.1.fc21.x86_64 root=UUID=54c6abc2-b1e7-4987-aa73-c79927be69eb ro rootflags=subvol=root4 rhgb quiet -+ initrd16 /root4/boot/initramfs-3.15.0-0.rc7.git2.1.fc21.x86_64.img -+} -+menuentry 'Fedora, with Linux 0-rescue-20e7024f4e9c4b70b1042b91acd434c6' --class gnu-linux --class gnu --class os { -+ load_video -+ insmod gzio -+ insmod part_msdos -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' --hint='hd1,msdos3' 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ else -+ search --no-floppy --fs-uuid --set=root 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ fi -+ linux16 /root4/boot/vmlinuz-0-rescue-20e7024f4e9c4b70b1042b91acd434c6 root=UUID=54c6abc2-b1e7-4987-aa73-c79927be69eb ro rootflags=subvol=root4 rhgb quiet -+ initrd16 /root4/boot/initramfs-0-rescue-20e7024f4e9c4b70b1042b91acd434c6.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 ### -+### -+ -+### 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.23 b/test/results/add/g2-1.23 -new file mode 100644 -index 00000000000..c3e87cf7897 ---- /dev/null -+++ b/test/results/add/g2-1.23 -@@ -0,0 +1,144 @@ -+# -+# 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=15 -+# Fallback normal timeout code in case the timeout_style feature is -+# unavailable. -+else -+ set timeout=15 -+fi -+### END /etc/grub.d/00_header ### -+ -+### BEGIN /etc/grub.d/10_linux ### -+menuentry 'title' --class gnu-linux --class gnu --class os { -+ load_video -+ set gfxpayload=keep -+ insmod gzio -+ insmod part_msdos -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' --hint='hd1,msdos3' 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ else -+ search --no-floppy --fs-uuid --set=root 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ fi -+ linux16 /root4/boot/new-kernel.img root=UUID=54c6abc2-b1e7-4987-aa73-c79927be69eb ro rootflags=subvol=root4 rhgb quiet -+ initrd16 /root4/boot/new-initrd -+} -+menuentry 'Fedora, with Linux 3.15.0-0.rc7.git2.1.fc21.x86_64' --class gnu-linux --class gnu --class os { -+ load_video -+ set gfxpayload=keep -+ insmod gzio -+ insmod part_msdos -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' --hint='hd1,msdos3' 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ else -+ search --no-floppy --fs-uuid --set=root 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ fi -+ linux16 /root4/boot/vmlinuz-3.15.0-0.rc7.git2.1.fc21.x86_64 root=UUID=54c6abc2-b1e7-4987-aa73-c79927be69eb ro rootflags=subvol=root4 rhgb quiet -+ initrd16 /root4/boot/initramfs-3.15.0-0.rc7.git2.1.fc21.x86_64.img -+} -+menuentry 'Fedora, with Linux 0-rescue-20e7024f4e9c4b70b1042b91acd434c6' --class gnu-linux --class gnu --class os { -+ load_video -+ insmod gzio -+ insmod part_msdos -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' --hint='hd1,msdos3' 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ else -+ search --no-floppy --fs-uuid --set=root 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ fi -+ linux16 /root4/boot/vmlinuz-0-rescue-20e7024f4e9c4b70b1042b91acd434c6 root=UUID=54c6abc2-b1e7-4987-aa73-c79927be69eb ro rootflags=subvol=root4 rhgb quiet -+ initrd16 /root4/boot/initramfs-0-rescue-20e7024f4e9c4b70b1042b91acd434c6.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 ### -+### -+ -+### 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.24 b/test/results/add/g2-1.24 -new file mode 100644 -index 00000000000..c0dded9724c ---- /dev/null -+++ b/test/results/add/g2-1.24 -@@ -0,0 +1,141 @@ -+# -+# 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=15 -+# Fallback normal timeout code in case the timeout_style feature is -+# unavailable. -+else -+ set timeout=15 -+fi -+### END /etc/grub.d/00_header ### -+ -+### BEGIN /etc/grub.d/10_linux ### -+menuentry 'title' --class gnu-linux --class gnu --class os { -+ load_video -+ set gfxpayload=keep -+ insmod gzio -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ else -+ search --no-floppy --fs-uuid --set=root 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ fi -+ linux16 /boot6/new-kernel.img root=UUID=1bab15a4-93ce-4373-8d7d-b77f907fd0c6 ro rootflags=subvol=root6 rhgb quiet -+ initrd16 /boot6/new-initrd -+} -+menuentry 'Fedora, with Linux 3.15.0-0.rc7.git2.1.fc21.x86_64' --class gnu-linux --class gnu --class os { -+ load_video -+ set gfxpayload=keep -+ insmod gzio -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ else -+ search --no-floppy --fs-uuid --set=root 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ fi -+ linux16 /boot6/vmlinuz-3.15.0-0.rc7.git2.1.fc21.x86_64 root=UUID=1bab15a4-93ce-4373-8d7d-b77f907fd0c6 ro rootflags=subvol=root6 rhgb quiet -+ initrd16 /boot6/initramfs-3.15.0-0.rc7.git2.1.fc21.x86_64.img -+} -+menuentry 'Fedora, with Linux 0-rescue-81378818f7a24478b496ebef90e1dd69' --class gnu-linux --class gnu --class os { -+ load_video -+ insmod gzio -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ else -+ search --no-floppy --fs-uuid --set=root 1bab15a4-93ce-4373-8d7d-b77f907fd0c6 -+ fi -+ linux16 /boot6/vmlinuz-0-rescue-81378818f7a24478b496ebef90e1dd69 root=UUID=1bab15a4-93ce-4373-8d7d-b77f907fd0c6 ro rootflags=subvol=root6 rhgb quiet -+ initrd16 /boot6/initramfs-0-rescue-81378818f7a24478b496ebef90e1dd69.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.25 b/test/results/add/g2-1.25 -new file mode 100644 -index 00000000000..c3e87cf7897 ---- /dev/null -+++ b/test/results/add/g2-1.25 -@@ -0,0 +1,144 @@ -+# -+# 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=15 -+# Fallback normal timeout code in case the timeout_style feature is -+# unavailable. -+else -+ set timeout=15 -+fi -+### END /etc/grub.d/00_header ### -+ -+### BEGIN /etc/grub.d/10_linux ### -+menuentry 'title' --class gnu-linux --class gnu --class os { -+ load_video -+ set gfxpayload=keep -+ insmod gzio -+ insmod part_msdos -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' --hint='hd1,msdos3' 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ else -+ search --no-floppy --fs-uuid --set=root 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ fi -+ linux16 /root4/boot/new-kernel.img root=UUID=54c6abc2-b1e7-4987-aa73-c79927be69eb ro rootflags=subvol=root4 rhgb quiet -+ initrd16 /root4/boot/new-initrd -+} -+menuentry 'Fedora, with Linux 3.15.0-0.rc7.git2.1.fc21.x86_64' --class gnu-linux --class gnu --class os { -+ load_video -+ set gfxpayload=keep -+ insmod gzio -+ insmod part_msdos -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' --hint='hd1,msdos3' 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ else -+ search --no-floppy --fs-uuid --set=root 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ fi -+ linux16 /root4/boot/vmlinuz-3.15.0-0.rc7.git2.1.fc21.x86_64 root=UUID=54c6abc2-b1e7-4987-aa73-c79927be69eb ro rootflags=subvol=root4 rhgb quiet -+ initrd16 /root4/boot/initramfs-3.15.0-0.rc7.git2.1.fc21.x86_64.img -+} -+menuentry 'Fedora, with Linux 0-rescue-20e7024f4e9c4b70b1042b91acd434c6' --class gnu-linux --class gnu --class os { -+ load_video -+ insmod gzio -+ insmod part_msdos -+ insmod part_msdos -+ insmod btrfs -+ set root='hd0,msdos1' -+ if [ x$feature_platform_search_hint = xy ]; then -+ search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' --hint='hd1,msdos3' 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ else -+ search --no-floppy --fs-uuid --set=root 54c6abc2-b1e7-4987-aa73-c79927be69eb -+ fi -+ linux16 /root4/boot/vmlinuz-0-rescue-20e7024f4e9c4b70b1042b91acd434c6 root=UUID=54c6abc2-b1e7-4987-aa73-c79927be69eb ro rootflags=subvol=root4 rhgb quiet -+ initrd16 /root4/boot/initramfs-0-rescue-20e7024f4e9c4b70b1042b91acd434c6.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 ### -+### -+ -+### 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 - diff --git a/0005-Use-system-LDFLAGS.patch b/0005-Use-system-LDFLAGS.patch deleted file mode 100644 index 17954c4..0000000 --- a/0005-Use-system-LDFLAGS.patch +++ /dev/null @@ -1,25 +0,0 @@ -From e08c858af4d2b09e62441560f3ccecc9e750c87a Mon Sep 17 00:00:00 2001 -From: Rafael dos Santos -Date: Tue, 29 May 2018 15:15:24 +0200 -Subject: [PATCH 5/8] Use system LDFLAGS - ---- - Makefile | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Makefile b/Makefile -index ac144046133..f0d13720db5 100644 ---- a/Makefile -+++ b/Makefile -@@ -25,7 +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 - --- -2.17.1 - diff --git a/0006-Honor-sbindir.patch b/0006-Honor-sbindir.patch deleted file mode 100644 index 0d947cc..0000000 --- a/0006-Honor-sbindir.patch +++ /dev/null @@ -1,36 +0,0 @@ -From db200499551e386e7616c621fcbd69e350081664 Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Wed, 18 Jul 2018 13:41:02 -0400 -Subject: [PATCH 6/8] Honor sbindir - -Signed-off-by: Peter Jones ---- - Makefile | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/Makefile b/Makefile -index f0d13720db5..cfa8e0d60ab 100644 ---- a/Makefile -+++ b/Makefile -@@ -42,14 +42,14 @@ test: all - @./test.sh - - install: all -- mkdir -p $(DESTDIR)$(PREFIX)/sbin -+ mkdir -p $(DESTDIR)$(PREFIX)$(sbindir) - mkdir -p $(DESTDIR)/$(mandir)/man8 -- install -m 755 new-kernel-pkg $(DESTDIR)$(PREFIX)/sbin -+ install -m 755 new-kernel-pkg $(DESTDIR)$(PREFIX)$(sbindir) - install -m 644 new-kernel-pkg.8 $(DESTDIR)/$(mandir)/man8 -- install -m 755 installkernel $(DESTDIR)$(PREFIX)/sbin -+ install -m 755 installkernel $(DESTDIR)$(PREFIX)$(sbindir) - install -m 644 installkernel.8 $(DESTDIR)/$(mandir)/man8 - if [ -f grubby ]; then \ -- install -m 755 grubby $(DESTDIR)$(PREFIX)/sbin ; \ -+ install -m 755 grubby $(DESTDIR)$(PREFIX)$(sbindir) ; \ - install -m 644 grubby.8 $(DESTDIR)/$(mandir)/man8 ; \ - fi - --- -2.17.1 - diff --git a/0007-Make-installkernel-to-use-kernel-install-scripts-on-.patch b/0007-Make-installkernel-to-use-kernel-install-scripts-on-.patch deleted file mode 100644 index 727cab6..0000000 --- a/0007-Make-installkernel-to-use-kernel-install-scripts-on-.patch +++ /dev/null @@ -1,48 +0,0 @@ -From fa1bf7b54cb71fa193da16ffc404f8535d7d16ac Mon Sep 17 00:00:00 2001 -From: Javier Martinez Canillas -Date: Tue, 31 Jul 2018 17:43:53 +0200 -Subject: [PATCH 7/8] Make installkernel to use kernel-install scripts on BLS - configuration - -The kernel make install target executes the arch/$ARCH/boot/install.sh -that in turns executes the distro specific installkernel script. This -script always uses new-kernel-pkg to install the kernel images. - -But on a BootLoaderSpec setup, the kernel-install scripts must be used -instead. Check if the system uses a BLS setup, and call kernel-install -add in that case instead of new-kernel-pkg. - -Reported-by: Hans de Goede -Signed-off-by: Javier Martinez Canillas ---- - installkernel | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/installkernel b/installkernel -index b887929c179..68dcfac16d2 100755 ---- a/installkernel -+++ b/installkernel -@@ -20,6 +20,8 @@ - # Author(s): tyson@rwii.com - # - -+[[ -f /etc/default/grub ]] && . /etc/default/grub -+ - usage() { - echo "Usage: `basename $0` " >&2 - exit 1 -@@ -77,6 +79,11 @@ cp $MAPFILE $INSTALL_PATH/System.map-$KERNEL_VERSION - ln -fs ${RELATIVE_PATH}$INSTALL_PATH/$KERNEL_NAME-$KERNEL_VERSION $LINK_PATH/$KERNEL_NAME - ln -fs ${RELATIVE_PATH}$INSTALL_PATH/System.map-$KERNEL_VERSION $LINK_PATH/System.map - -+if [ "x${GRUB_ENABLE_BLSCFG}" = "xtrue" ] || [ ! -f /sbin/new-kernel-pkg ]; then -+ kernel-install add $KERNEL_VERSION $INSTALL_PATH/$KERNEL_NAME-$KERNEL_VERSION -+ exit $? -+fi -+ - if [ -n "$cfgLoader" ] && [ -x /sbin/new-kernel-pkg ]; then - if [ -n "$(which dracut 2>/dev/null)" ]; then - new-kernel-pkg --mkinitrd --dracut --host-only --depmod --install --kernel-name $KERNEL_NAME $KERNEL_VERSION --- -2.17.1 - diff --git a/0008-Add-usr-libexec-rpm-sort.patch b/0008-Add-usr-libexec-rpm-sort.patch deleted file mode 100644 index b3e5faa..0000000 --- a/0008-Add-usr-libexec-rpm-sort.patch +++ /dev/null @@ -1,418 +0,0 @@ -From b8a581014170c6a9bb8ffb799090401a57a4bbe6 Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Fri, 12 Oct 2018 16:39:37 -0400 -Subject: [PATCH 8/8] Add /usr/libexec/rpm-sort - -Signed-off-by: Peter Jones ---- - rpm-sort.c | 355 +++++++++++++++++++++++++++++++++++++++++++++++++++++ - Makefile | 9 +- - .gitignore | 1 + - 3 files changed, 363 insertions(+), 2 deletions(-) - create mode 100644 rpm-sort.c - -diff --git a/rpm-sort.c b/rpm-sort.c -new file mode 100644 -index 00000000000..f19635645ba ---- /dev/null -+++ b/rpm-sort.c -@@ -0,0 +1,355 @@ -+#define _GNU_SOURCE -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+typedef enum { -+ RPMNVRCMP, -+ VERSNVRCMP, -+ RPMVERCMP, -+ STRVERSCMP, -+} comparitors; -+ -+static comparitors comparitor = RPMNVRCMP; -+ -+static inline void *xmalloc(size_t sz) -+{ -+ void *ret = malloc(sz); -+ -+ assert(sz == 0 || ret != NULL); -+ return ret; -+} -+ -+static inline void *xrealloc(void *p, size_t sz) -+{ -+ void *ret = realloc(p, sz); -+ -+ assert(sz == 0 || ret != NULL); -+ return ret; -+} -+ -+static inline char *xstrdup(const char * const s) -+{ -+ void *ret = strdup(s); -+ -+ assert(s == NULL || ret != NULL); -+ return ret; -+} -+ -+static size_t -+read_file (const char *input, char **ret) -+{ -+ FILE *in; -+ size_t s; -+ size_t sz = 2048; -+ size_t offset = 0; -+ char *text; -+ -+ if (!strcmp(input, "-")) -+ in = stdin; -+ else -+ in = fopen(input, "r"); -+ -+ text = xmalloc (sz); -+ -+ if (!in) -+ err(1, "cannot open `%s'", input); -+ -+ while ((s = fread (text + offset, 1, sz - offset, in)) != 0) -+ { -+ offset += s; -+ if (sz - offset == 0) -+ { -+ sz += 2048; -+ text = xrealloc (text, sz); -+ } -+ } -+ -+ text[offset] = '\0'; -+ *ret = text; -+ -+ if (in != stdin) -+ fclose(in); -+ -+ return offset + 1; -+} -+ -+/* returns name/version/release */ -+/* NULL string pointer returned if nothing found */ -+static void -+split_package_string (char *package_string, char **name, -+ char **version, char **release) -+{ -+ char *package_version, *package_release; -+ -+ /* Release */ -+ package_release = strrchr (package_string, '-'); -+ -+ if (package_release != NULL) -+ *package_release++ = '\0'; -+ -+ *release = package_release; -+ -+ /* Version */ -+ package_version = strrchr(package_string, '-'); -+ -+ if (package_version != NULL) -+ *package_version++ = '\0'; -+ -+ *version = package_version; -+ /* Name */ -+ *name = package_string; -+ -+ /* Bubble up non-null values from release to name */ -+ if (*name == NULL) -+ { -+ *name = (*version == NULL ? *release : *version); -+ *version = *release; -+ *release = NULL; -+ } -+ if (*version == NULL) -+ { -+ *version = *release; -+ *release = NULL; -+ } -+} -+ -+static int -+cmprpmversp(const void *p1, const void *p2) -+{ -+ return rpmvercmp(*(char * const *)p1, *(char * const *)p2); -+} -+ -+static int -+cmpstrversp(const void *p1, const void *p2) -+{ -+ return strverscmp(*(char * const *)p1, *(char * const *)p2); -+} -+ -+/* -+ * package name-version-release comparator for qsort -+ * expects p, q which are pointers to character strings (char *) -+ * which will not be altered in this function -+ */ -+static int -+package_version_compare (const void *p, const void *q) -+{ -+ char *local_p, *local_q; -+ char *lhs_name, *lhs_version, *lhs_release; -+ char *rhs_name, *rhs_version, *rhs_release; -+ int vercmpflag = 0; -+ int (*cmp)(const char *s1, const char *s2); -+ -+ switch(comparitor) -+ { -+ default: /* just to shut up -Werror=maybe-uninitialized */ -+ case RPMNVRCMP: -+ cmp = rpmvercmp; -+ break; -+ case VERSNVRCMP: -+ cmp = strverscmp; -+ break; -+ case RPMVERCMP: -+ return cmprpmversp(p, q); -+ break; -+ case STRVERSCMP: -+ return cmpstrversp(p, q); -+ break; -+ } -+ -+ local_p = alloca (strlen (*(char * const *)p) + 1); -+ local_q = alloca (strlen (*(char * const *)q) + 1); -+ -+ /* make sure these allocated */ -+ assert (local_p); -+ assert (local_q); -+ -+ strcpy (local_p, *(char * const *)p); -+ strcpy (local_q, *(char * const *)q); -+ -+ split_package_string (local_p, &lhs_name, &lhs_version, &lhs_release); -+ split_package_string (local_q, &rhs_name, &rhs_version, &rhs_release); -+ -+ /* Check Name and return if unequal */ -+ vercmpflag = cmp ((lhs_name == NULL ? "" : lhs_name), -+ (rhs_name == NULL ? "" : rhs_name)); -+ if (vercmpflag != 0) -+ return vercmpflag; -+ -+ /* Check version and return if unequal */ -+ vercmpflag = cmp ((lhs_version == NULL ? "" : lhs_version), -+ (rhs_version == NULL ? "" : rhs_version)); -+ if (vercmpflag != 0) -+ return vercmpflag; -+ -+ /* Check release and return the version compare value */ -+ vercmpflag = cmp ((lhs_release == NULL ? "" : lhs_release), -+ (rhs_release == NULL ? "" : rhs_release)); -+ -+ return vercmpflag; -+} -+ -+static void -+add_input (const char *filename, char ***package_names, size_t *n_package_names) -+{ -+ char *orig_input_buffer = NULL; -+ char *input_buffer; -+ char *position_of_newline; -+ char **names = *package_names; -+ char **new_names = NULL; -+ size_t n_names = *n_package_names; -+ -+ if (!*package_names) -+ new_names = names = xmalloc (sizeof (char *) * 2); -+ -+ if (read_file (filename, &orig_input_buffer) < 2) -+ { -+ if (new_names) -+ free (new_names); -+ if (orig_input_buffer) -+ free (orig_input_buffer); -+ return; -+ } -+ -+ input_buffer = orig_input_buffer; -+ while (input_buffer && *input_buffer && -+ (position_of_newline = strchrnul (input_buffer, '\n'))) -+ { -+ size_t sz = position_of_newline - input_buffer; -+ char *new; -+ -+ if (sz == 0) -+ { -+ input_buffer = position_of_newline + 1; -+ continue; -+ } -+ -+ new = xmalloc (sz+1); -+ strncpy (new, input_buffer, sz); -+ new[sz] = '\0'; -+ -+ names = xrealloc (names, sizeof (char *) * (n_names + 1)); -+ names[n_names] = new; -+ n_names++; -+ -+ /* move buffer ahead to next line */ -+ input_buffer = position_of_newline + 1; -+ if (*position_of_newline == '\0') -+ input_buffer = NULL; -+ } -+ -+ free (orig_input_buffer); -+ -+ *package_names = names; -+ *n_package_names = n_names; -+} -+ -+static char * -+help_filter (int key, const char *text, void *input __attribute__ ((unused))) -+{ -+ return (char *)text; -+} -+ -+static struct argp_option options[] = { -+ { "comparitor", 'c', "COMPARITOR", 0, "[rpm-nvr-cmp|vers-nvr-cmp|rpmvercmp|strverscmp]", 0}, -+ { 0, } -+}; -+ -+struct arguments -+{ -+ size_t ninputs; -+ size_t input_max; -+ char **inputs; -+}; -+ -+static error_t -+argp_parser (int key, char *arg, struct argp_state *state) -+{ -+ struct arguments *arguments = state->input; -+ switch (key) -+ { -+ case 'c': -+ if (!strcmp(arg, "rpm-nvr-cmp") || !strcmp(arg, "rpmnvrcmp")) -+ comparitor = RPMNVRCMP; -+ else if (!strcmp(arg, "vers-nvr-cmp") || !strcmp(arg, "versnvrcmp")) -+ comparitor = VERSNVRCMP; -+ else if (!strcmp(arg, "rpmvercmp")) -+ comparitor = RPMVERCMP; -+ else if (!strcmp(arg, "strverscmp")) -+ comparitor = STRVERSCMP; -+ else -+ err(1, "Invalid comparitor \"%s\"", arg); -+ break; -+ case ARGP_KEY_ARG: -+ assert (arguments->ninputs < arguments->input_max); -+ arguments->inputs[arguments->ninputs++] = xstrdup (arg); -+ break; -+ default: -+ return ARGP_ERR_UNKNOWN; -+ } -+ return 0; -+} -+ -+static struct argp argp = { -+ options, argp_parser, "[INPUT_FILES]", -+ "Sort a list of strings in RPM version sort order.", -+ NULL, help_filter, NULL -+}; -+ -+int -+main (int argc, char *argv[]) -+{ -+ struct arguments arguments; -+ char **package_names = NULL; -+ size_t n_package_names = 0; -+ int i; -+ -+ memset (&arguments, 0, sizeof (struct arguments)); -+ arguments.input_max = argc+1; -+ arguments.inputs = xmalloc ((arguments.input_max + 1) -+ * sizeof (arguments.inputs[0])); -+ memset (arguments.inputs, 0, (arguments.input_max + 1) -+ * sizeof (arguments.inputs[0])); -+ -+ /* Parse our arguments */ -+ if (argp_parse (&argp, argc, argv, 0, 0, &arguments) != 0) -+ errx(1, "%s", "Error in parsing command line arguments\n"); -+ -+ /* If there's no inputs in argv, add one for stdin */ -+ if (!arguments.ninputs) -+ { -+ arguments.ninputs = 1; -+ arguments.inputs[0] = xmalloc (2); -+ strcpy(arguments.inputs[0], "-"); -+ } -+ -+ for (i = 0; i < arguments.ninputs; i++) -+ add_input(arguments.inputs[i], &package_names, &n_package_names); -+ -+ if (package_names == NULL || n_package_names < 1) -+ errx(1, "Invalid input"); -+ -+ qsort (package_names, n_package_names, sizeof (char *), -+ package_version_compare); -+ -+ /* send sorted list to stdout */ -+ for (i = 0; i < n_package_names; i++) -+ { -+ fprintf (stdout, "%s\n", package_names[i]); -+ free (package_names[i]); -+ } -+ -+ free (package_names); -+ for (i = 0; i < arguments.ninputs; i++) -+ free (arguments.inputs[i]); -+ -+ free (arguments.inputs); -+ -+ return 0; -+} -diff --git a/Makefile b/Makefile -index cfa8e0d60ab..1ab58aeb039 100644 ---- a/Makefile -+++ b/Makefile -@@ -29,7 +29,7 @@ LDFLAGS := $(RPM_LD_FLAGS) - - grubby_LIBS = -lblkid -lpopt - --all: grubby -+all: grubby rpm-sort - - debug : clean - $(MAKE) CFLAGS="${CFLAGS} -DDEBUG=1" all -@@ -52,12 +52,17 @@ install: all - install -m 755 grubby $(DESTDIR)$(PREFIX)$(sbindir) ; \ - install -m 644 grubby.8 $(DESTDIR)/$(mandir)/man8 ; \ - fi -+ install -m 755 -d $(DESTDIR)$(PREFIX)$(libexecdir)/grubby/ -+ install -m 755 rpm-sort $(DESTDIR)$(PREFIX)$(libexecdir)/grubby/rpm-sort - - grubby:: $(OBJECTS) - $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(grubby_LIBS) - -+rpm-sort::rpm-sort.o -+ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ -lrpm -+ - clean: -- rm -f *.o grubby *~ -+ rm -f *.o grubby rpm-sort *~ - - GITTAG = $(VERSION)-1 - -diff --git a/.gitignore b/.gitignore -index e64d3bc0986..1a5a546eee3 100644 ---- a/.gitignore -+++ b/.gitignore -@@ -1,3 +1,4 @@ - grubby -+rpm-sort - version.h - *.o --- -2.17.1 - diff --git a/0009-Improve-man-page-for-info-option.patch b/0009-Improve-man-page-for-info-option.patch deleted file mode 100644 index 742eb62..0000000 --- a/0009-Improve-man-page-for-info-option.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 64f91f29b03639b0726f0c46f004a20f11379e22 Mon Sep 17 00:00:00 2001 -From: Jan Stodola -Date: Sat, 1 Dec 2018 02:33:23 +0100 -Subject: [PATCH] Improve man page for --info option - -1) commit 941d4a0b removed description of --info DEFAULT -2) Add description of --info ALL ---- - grubby.8 | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/grubby.8 b/grubby.8 -index 355b6eb6908..9ffef895b0f 100644 ---- a/grubby.8 -+++ b/grubby.8 -@@ -132,7 +132,10 @@ 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 -+Display information on all boot entries which match \fIkernel-path\fR. If -+\fIkernel-path\fR is \fBDEFAULT\fR, then information on the default kernel -+is displayed. If \fIkernel-path\fR is \fBALL\fR, then information on all boot -+entries are displayed. - - .TP - \fB-\-initrd\fR=\fIinitrd-path\fR --- -2.19.1 - diff --git a/0010-Fix-GCC-warnings-about-possible-string-truncations-a.patch b/0010-Fix-GCC-warnings-about-possible-string-truncations-a.patch deleted file mode 100644 index c4de866..0000000 --- a/0010-Fix-GCC-warnings-about-possible-string-truncations-a.patch +++ /dev/null @@ -1,104 +0,0 @@ -From 00241c65a5c0b4bb32a847a6abb5a86d0c704a8f Mon Sep 17 00:00:00 2001 -From: Javier Martinez Canillas -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 ---- - 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 - diff --git a/0011-Fix-stringop-overflow-warning.patch b/0011-Fix-stringop-overflow-warning.patch deleted file mode 100644 index 0fc4734..0000000 --- a/0011-Fix-stringop-overflow-warning.patch +++ /dev/null @@ -1,72 +0,0 @@ -From ed5e255c023c9b78120d9ff2246d6516f652d4b7 Mon Sep 17 00:00:00 2001 -From: Javier Martinez Canillas -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 ---- - 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 - diff --git a/0012-Fix-maybe-uninitialized-warning.patch b/0012-Fix-maybe-uninitialized-warning.patch deleted file mode 100644 index bcaa145..0000000 --- a/0012-Fix-maybe-uninitialized-warning.patch +++ /dev/null @@ -1,35 +0,0 @@ -From ee9f80190d4c458a09309fbd9a88d2756dc2d3fa Mon Sep 17 00:00:00 2001 -From: Javier Martinez Canillas -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 ---- - 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 - diff --git a/0013-Fix-build-with-rpm-4.16.patch b/0013-Fix-build-with-rpm-4.16.patch deleted file mode 100644 index 9c122b7..0000000 --- a/0013-Fix-build-with-rpm-4.16.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 1afddd618629a97479560bedbdcfa11b2c492a0e Mon Sep 17 00:00:00 2001 -From: Javier Martinez Canillas -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 ---- - 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 - diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..f90922e --- /dev/null +++ b/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/grubby.in b/grubby.in deleted file mode 100644 index 023e595..0000000 --- a/grubby.in +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -if [[ -x @@LIBEXECDIR@@/grubby ]] ; then - exec @@LIBEXECDIR@@/grubby "${@}" -elif [[ -x @@LIBEXECDIR@@/grubby-bls ]] ; then - exec @@LIBEXECDIR@@/grubby-bls "${@}" -fi -echo "Grubby is not installed correctly." >>/dev/stderr -exit 1 diff --git a/grubby.spec b/grubby.spec index abaa15d..b4c1faa 100644 --- a/grubby.spec +++ b/grubby.spec @@ -1,42 +1,27 @@ +# What? No. +%define __brp_mangle_shebangs %{nil} + Name: grubby Version: 8.40 -Release: 58%{?dist} +Release: 59%{?dist} Summary: Command line tool for updating bootloader configs License: GPLv2+ -URL: https://github.com/rhinstaller/grubby -# we only pull git snaps at the moment -# git clone git@github.com:rhinstaller/grubby.git -# git archive --format=tar --prefix=grubby-%%{version}/ HEAD |bzip2 > grubby-%%{version}.tar.bz2 -# Source0: %%{name}-%%{version}.tar.bz2 -Source0: https://github.com/rhboot/grubby/archive/%{version}-1.tar.gz Source1: grubby-bls -Source2: grubby.in -Source3: installkernel.in +Source2: rpm-sort.c +Source3: COPYING Source4: installkernel-bls Source5: 95-kernel-hooks.install Source6: 10-devicetree.install Source7: grubby.8 -Patch0001: 0001-remove-the-old-crufty-u-boot-support.patch -Patch0002: 0002-Change-return-type-in-getRootSpecifier.patch -Patch0003: 0003-Add-btrfs-subvolume-support-for-grub2.patch -Patch0004: 0004-Add-tests-for-btrfs-support.patch -Patch0005: 0005-Use-system-LDFLAGS.patch -Patch0006: 0006-Honor-sbindir.patch -Patch0007: 0007-Make-installkernel-to-use-kernel-install-scripts-on-.patch -Patch0008: 0008-Add-usr-libexec-rpm-sort.patch -Patch0009: 0009-Improve-man-page-for-info-option.patch -Patch0010: 0010-Fix-GCC-warnings-about-possible-string-truncations-a.patch -Patch0011: 0011-Fix-stringop-overflow-warning.patch -Patch0012: 0012-Fix-maybe-uninitialized-warning.patch -Patch0013: 0013-Fix-build-with-rpm-4.16.patch - BuildRequires: gcc -BuildRequires: pkgconfig glib2-devel popt-devel -BuildRequires: libblkid-devel sed make -# for make test / getopt: -BuildRequires: util-linux-ng +BuildRequires: glib2-devel +BuildRequires: libblkid-devel +BuildRequires: make +BuildRequires: pkgconfig +BuildRequires: popt-devel BuildRequires: rpm-devel +BuildRequires: sed %ifarch aarch64 i686 x86_64 %{power64} BuildRequires: grub2-tools-minimal Requires: grub2-tools-minimal @@ -57,27 +42,27 @@ BootLoaderSpec files and is meant to be backward compatible with the previous grubby tool. %prep -%autosetup -p1 -n grubby-%{version}-1 +# Make sure the license can be found in mock +cp %{SOURCE3} . || true %build %set_build_flags -%make_build LDFLAGS="${LDFLAGS}" +gcc ${CPPFLAGS} ${CFLAGS} ${LDFLAGS} -std=gnu99 -DVERSION='"8.4.0"' \ + -o rpm-sort %{SOURCE2} -lrpmio %install -make install DESTDIR=$RPM_BUILD_ROOT mandir=%{_mandir} sbindir=%{_sbindir} libexecdir=%{_libexecdir} - -mkdir -p %{buildroot}%{_libexecdir}/{grubby,installkernel}/ %{buildroot}%{_sbindir}/ -install -m 0755 %{SOURCE1} %{buildroot}%{_libexecdir}/grubby/ -install -m 0755 %{SOURCE4} %{buildroot}%{_libexecdir}/installkernel/ -sed -e "s,@@LIBEXECDIR@@,%{_libexecdir}/grubby,g" %{SOURCE2} \ - > %{buildroot}%{_sbindir}/grubby -sed -e "s,@@LIBEXECDIR@@,%{_libexecdir}/installkernel,g" %{SOURCE3} \ - > %{buildroot}%{_sbindir}/installkernel +mkdir -p %{buildroot}%{_libexecdir}/grubby/ +install -D -m 0755 rpm-sort %{buildroot}%{_libexecdir}/grubby + +mkdir -p %{buildroot}%{_sbindir}/ +install -T -m 0755 %{SOURCE1} %{buildroot}%{_sbindir}/grubby +install -T -m 0755 %{SOURCE4} %{buildroot}%{_sbindir}/installkernel + install -D -m 0755 -t %{buildroot}%{_prefix}/lib/kernel/install.d/ %{SOURCE5} install -D -m 0755 -t %{buildroot}%{_prefix}/lib/kernel/install.d/ %{SOURCE6} -rm %{buildroot}%{_mandir}/man8/{grubby,new-kernel-pkg}.8* + +mkdir -p %{buildroot}%{_mandir}/man8 install -m 0644 %{SOURCE7} %{buildroot}%{_mandir}/man8/ -rm %{buildroot}%{_sbindir}/new-kernel-pkg %post if [ "$1" = 2 ]; then @@ -89,17 +74,17 @@ fi %files %license COPYING %dir %{_libexecdir}/grubby -%dir %{_libexecdir}/installkernel -%attr(0755,root,root) %{_libexecdir}/grubby/grubby-bls %attr(0755,root,root) %{_libexecdir}/grubby/rpm-sort %attr(0755,root,root) %{_sbindir}/grubby -%attr(0755,root,root) %{_libexecdir}/installkernel/installkernel-bls %attr(0755,root,root) %{_sbindir}/installkernel %attr(0755,root,root) %{_prefix}/lib/kernel/install.d/10-devicetree.install %attr(0755,root,root) %{_prefix}/lib/kernel/install.d/95-kernel-hooks.install -%{_mandir}/man8/[gi]*.8* +%{_mandir}/man8/grubby.8* %changelog +* Wed Apr 27 2022 Robbie Harwood - 8.40-59 +- Remove upstream and layers of indirection around -bls + * Thu Mar 10 2022 Robbie Harwood - 8.40-58 - Remove grubby-deprecated diff --git a/installkernel.in b/installkernel.in deleted file mode 100644 index 87b81ee..0000000 --- a/installkernel.in +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -if [[ -x @@LIBEXECDIR@@/installkernel ]] ; then - exec @@LIBEXECDIR@@/installkernel "${@}" -elif [[ -x @@LIBEXECDIR@@/installkernel-bls ]] ; then - exec @@LIBEXECDIR@@/installkernel-bls "${@}" -fi -echo "installkernel is not installed correctly." >>/dev/stderr -exit 1 diff --git a/rpm-sort.c b/rpm-sort.c new file mode 100644 index 0000000..f196356 --- /dev/null +++ b/rpm-sort.c @@ -0,0 +1,355 @@ +#define _GNU_SOURCE + +#include +#include +#include +#include +#include +#include +#include +#include + +typedef enum { + RPMNVRCMP, + VERSNVRCMP, + RPMVERCMP, + STRVERSCMP, +} comparitors; + +static comparitors comparitor = RPMNVRCMP; + +static inline void *xmalloc(size_t sz) +{ + void *ret = malloc(sz); + + assert(sz == 0 || ret != NULL); + return ret; +} + +static inline void *xrealloc(void *p, size_t sz) +{ + void *ret = realloc(p, sz); + + assert(sz == 0 || ret != NULL); + return ret; +} + +static inline char *xstrdup(const char * const s) +{ + void *ret = strdup(s); + + assert(s == NULL || ret != NULL); + return ret; +} + +static size_t +read_file (const char *input, char **ret) +{ + FILE *in; + size_t s; + size_t sz = 2048; + size_t offset = 0; + char *text; + + if (!strcmp(input, "-")) + in = stdin; + else + in = fopen(input, "r"); + + text = xmalloc (sz); + + if (!in) + err(1, "cannot open `%s'", input); + + while ((s = fread (text + offset, 1, sz - offset, in)) != 0) + { + offset += s; + if (sz - offset == 0) + { + sz += 2048; + text = xrealloc (text, sz); + } + } + + text[offset] = '\0'; + *ret = text; + + if (in != stdin) + fclose(in); + + return offset + 1; +} + +/* returns name/version/release */ +/* NULL string pointer returned if nothing found */ +static void +split_package_string (char *package_string, char **name, + char **version, char **release) +{ + char *package_version, *package_release; + + /* Release */ + package_release = strrchr (package_string, '-'); + + if (package_release != NULL) + *package_release++ = '\0'; + + *release = package_release; + + /* Version */ + package_version = strrchr(package_string, '-'); + + if (package_version != NULL) + *package_version++ = '\0'; + + *version = package_version; + /* Name */ + *name = package_string; + + /* Bubble up non-null values from release to name */ + if (*name == NULL) + { + *name = (*version == NULL ? *release : *version); + *version = *release; + *release = NULL; + } + if (*version == NULL) + { + *version = *release; + *release = NULL; + } +} + +static int +cmprpmversp(const void *p1, const void *p2) +{ + return rpmvercmp(*(char * const *)p1, *(char * const *)p2); +} + +static int +cmpstrversp(const void *p1, const void *p2) +{ + return strverscmp(*(char * const *)p1, *(char * const *)p2); +} + +/* + * package name-version-release comparator for qsort + * expects p, q which are pointers to character strings (char *) + * which will not be altered in this function + */ +static int +package_version_compare (const void *p, const void *q) +{ + char *local_p, *local_q; + char *lhs_name, *lhs_version, *lhs_release; + char *rhs_name, *rhs_version, *rhs_release; + int vercmpflag = 0; + int (*cmp)(const char *s1, const char *s2); + + switch(comparitor) + { + default: /* just to shut up -Werror=maybe-uninitialized */ + case RPMNVRCMP: + cmp = rpmvercmp; + break; + case VERSNVRCMP: + cmp = strverscmp; + break; + case RPMVERCMP: + return cmprpmversp(p, q); + break; + case STRVERSCMP: + return cmpstrversp(p, q); + break; + } + + local_p = alloca (strlen (*(char * const *)p) + 1); + local_q = alloca (strlen (*(char * const *)q) + 1); + + /* make sure these allocated */ + assert (local_p); + assert (local_q); + + strcpy (local_p, *(char * const *)p); + strcpy (local_q, *(char * const *)q); + + split_package_string (local_p, &lhs_name, &lhs_version, &lhs_release); + split_package_string (local_q, &rhs_name, &rhs_version, &rhs_release); + + /* Check Name and return if unequal */ + vercmpflag = cmp ((lhs_name == NULL ? "" : lhs_name), + (rhs_name == NULL ? "" : rhs_name)); + if (vercmpflag != 0) + return vercmpflag; + + /* Check version and return if unequal */ + vercmpflag = cmp ((lhs_version == NULL ? "" : lhs_version), + (rhs_version == NULL ? "" : rhs_version)); + if (vercmpflag != 0) + return vercmpflag; + + /* Check release and return the version compare value */ + vercmpflag = cmp ((lhs_release == NULL ? "" : lhs_release), + (rhs_release == NULL ? "" : rhs_release)); + + return vercmpflag; +} + +static void +add_input (const char *filename, char ***package_names, size_t *n_package_names) +{ + char *orig_input_buffer = NULL; + char *input_buffer; + char *position_of_newline; + char **names = *package_names; + char **new_names = NULL; + size_t n_names = *n_package_names; + + if (!*package_names) + new_names = names = xmalloc (sizeof (char *) * 2); + + if (read_file (filename, &orig_input_buffer) < 2) + { + if (new_names) + free (new_names); + if (orig_input_buffer) + free (orig_input_buffer); + return; + } + + input_buffer = orig_input_buffer; + while (input_buffer && *input_buffer && + (position_of_newline = strchrnul (input_buffer, '\n'))) + { + size_t sz = position_of_newline - input_buffer; + char *new; + + if (sz == 0) + { + input_buffer = position_of_newline + 1; + continue; + } + + new = xmalloc (sz+1); + strncpy (new, input_buffer, sz); + new[sz] = '\0'; + + names = xrealloc (names, sizeof (char *) * (n_names + 1)); + names[n_names] = new; + n_names++; + + /* move buffer ahead to next line */ + input_buffer = position_of_newline + 1; + if (*position_of_newline == '\0') + input_buffer = NULL; + } + + free (orig_input_buffer); + + *package_names = names; + *n_package_names = n_names; +} + +static char * +help_filter (int key, const char *text, void *input __attribute__ ((unused))) +{ + return (char *)text; +} + +static struct argp_option options[] = { + { "comparitor", 'c', "COMPARITOR", 0, "[rpm-nvr-cmp|vers-nvr-cmp|rpmvercmp|strverscmp]", 0}, + { 0, } +}; + +struct arguments +{ + size_t ninputs; + size_t input_max; + char **inputs; +}; + +static error_t +argp_parser (int key, char *arg, struct argp_state *state) +{ + struct arguments *arguments = state->input; + switch (key) + { + case 'c': + if (!strcmp(arg, "rpm-nvr-cmp") || !strcmp(arg, "rpmnvrcmp")) + comparitor = RPMNVRCMP; + else if (!strcmp(arg, "vers-nvr-cmp") || !strcmp(arg, "versnvrcmp")) + comparitor = VERSNVRCMP; + else if (!strcmp(arg, "rpmvercmp")) + comparitor = RPMVERCMP; + else if (!strcmp(arg, "strverscmp")) + comparitor = STRVERSCMP; + else + err(1, "Invalid comparitor \"%s\"", arg); + break; + case ARGP_KEY_ARG: + assert (arguments->ninputs < arguments->input_max); + arguments->inputs[arguments->ninputs++] = xstrdup (arg); + break; + default: + return ARGP_ERR_UNKNOWN; + } + return 0; +} + +static struct argp argp = { + options, argp_parser, "[INPUT_FILES]", + "Sort a list of strings in RPM version sort order.", + NULL, help_filter, NULL +}; + +int +main (int argc, char *argv[]) +{ + struct arguments arguments; + char **package_names = NULL; + size_t n_package_names = 0; + int i; + + memset (&arguments, 0, sizeof (struct arguments)); + arguments.input_max = argc+1; + arguments.inputs = xmalloc ((arguments.input_max + 1) + * sizeof (arguments.inputs[0])); + memset (arguments.inputs, 0, (arguments.input_max + 1) + * sizeof (arguments.inputs[0])); + + /* Parse our arguments */ + if (argp_parse (&argp, argc, argv, 0, 0, &arguments) != 0) + errx(1, "%s", "Error in parsing command line arguments\n"); + + /* If there's no inputs in argv, add one for stdin */ + if (!arguments.ninputs) + { + arguments.ninputs = 1; + arguments.inputs[0] = xmalloc (2); + strcpy(arguments.inputs[0], "-"); + } + + for (i = 0; i < arguments.ninputs; i++) + add_input(arguments.inputs[i], &package_names, &n_package_names); + + if (package_names == NULL || n_package_names < 1) + errx(1, "Invalid input"); + + qsort (package_names, n_package_names, sizeof (char *), + package_version_compare); + + /* send sorted list to stdout */ + for (i = 0; i < n_package_names; i++) + { + fprintf (stdout, "%s\n", package_names[i]); + free (package_names[i]); + } + + free (package_names); + for (i = 0; i < arguments.ninputs; i++) + free (arguments.inputs[i]); + + free (arguments.inputs); + + return 0; +} diff --git a/sources b/sources deleted file mode 100644 index 0f5ce7f..0000000 --- a/sources +++ /dev/null @@ -1 +0,0 @@ -SHA512 (8.40-1.tar.gz) = 956ea6ccec2e7285fc8ebbf1d7659c4f41b1e9eda913d99a9712af9103144a13e66e93dce4c089b64ab370d1fed63656e922eafb88a0a39f843a6a6d166f72c5