Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package grub2 for openSUSE:Factory checked in at 2021-11-08 17:23:53 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/grub2 (Old) and /work/SRC/openSUSE:Factory/.grub2.new.1890 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "grub2" Mon Nov 8 17:23:53 2021 rev:252 rq:928660 version:2.06 Changes: -------- --- /work/SRC/openSUSE:Factory/grub2/grub2.changes 2021-10-25 15:17:51.821691774 +0200 +++ /work/SRC/openSUSE:Factory/.grub2.new.1890/grub2.changes 2021-11-08 17:24:08.332691515 +0100 @@ -1,0 +2,24 @@ +Thu Oct 21 12:51:46 UTC 2021 - Michael Chang <mch...@suse.com> + +- Remove openSUSE Tumbleweed specific handling for default grub + distributor (bsc#1191198) +- Use /usr/lib/os-release as fallback (bsc#1191196) + * grub2-default-distributor.patch + * grub2-check-default.sh +- VUL-0: grub2: grub2-once uses fixed file name in /var/tmp (bsc#1190474) + * grub2-once + * grub2-once.service +- Fix unknown TPM error on buggy uefi firmware (bsc#1191504) + * 0001-tpm-Pass-unknown-error-as-non-fatal-but-debug-print-.patch +- Fix error /boot/grub2/locale/POSIX.gmo not found (bsc#1189769) + * 0001-Filter-out-POSIX-locale-for-translation.patch +- Fix error lvmid disk cannot be found after second disk added to the root + volume group (bsc#1189874) (bsc#1071559) + * 0001-ieee1275-implement-FCP-methods-for-WWPN-and-LUNs.patch +- Fix error in grub installation due to unnecessary requirement to support + excessive device for the root logical volume (bsc#1184135) + * 0001-disk-diskfilter-Use-nodes-in-logical-volume-s-segmen.patch +- Fix regression in reading xfs v4 + *0001-fs-xfs-Fix-unreadable-filesystem-with-v4-superblock.patch + +------------------------------------------------------------------- New: ---- 0001-Filter-out-POSIX-locale-for-translation.patch 0001-disk-diskfilter-Use-nodes-in-logical-volume-s-segmen.patch 0001-fs-xfs-Fix-unreadable-filesystem-with-v4-superblock.patch 0001-ieee1275-implement-FCP-methods-for-WWPN-and-LUNs.patch 0001-tpm-Pass-unknown-error-as-non-fatal-but-debug-print-.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ grub2.spec ++++++ --- /var/tmp/diff_new_pack.0eHYPj/_old 2021-11-08 17:24:10.240692768 +0100 +++ /var/tmp/diff_new_pack.0eHYPj/_new 2021-11-08 17:24:10.244692770 +0100 @@ -307,6 +307,11 @@ Patch790: 0001-30_uefi-firmware-fix-printf-format-with-null-byte.patch Patch791: 0001-i386-pc-build-btrfs-zstd-support-into-separate-modul.patch Patch792: 0001-templates-Follow-the-path-of-usr-merged-kernel-confi.patch +Patch793: 0001-tpm-Pass-unknown-error-as-non-fatal-but-debug-print-.patch +Patch794: 0001-Filter-out-POSIX-locale-for-translation.patch +Patch795: 0001-ieee1275-implement-FCP-methods-for-WWPN-and-LUNs.patch +Patch796: 0001-disk-diskfilter-Use-nodes-in-logical-volume-s-segmen.patch +Patch797: 0001-fs-xfs-Fix-unreadable-filesystem-with-v4-superblock.patch Requires: gettext-runtime %if 0%{?suse_version} >= 1140 ++++++ 0001-Filter-out-POSIX-locale-for-translation.patch ++++++ >From 87b01d35b4db56778e2d9f99d18656026f818bab Mon Sep 17 00:00:00 2001 From: Michael Chang <mch...@suse.com> Date: Tue, 26 Oct 2021 13:31:24 +0800 Subject: [PATCH] Filter out POSIX locale for translation The POSIX locale is default or native operating system's locale identical to the C locale, so no translation to human speaking languages provided. For this reason we should filter out LANG=POSIX as well as LANG=C upon generating grub.cfg to avoid looking up for it's gettext's message catalogs that will consequently result in the unpleasant message. error: file `/boot/grub/locale/POSIX.gmo' not found Signed-off-by: Michael Chang <mch...@suse.com> --- util/grub.d/00_header.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/grub.d/00_header.in b/util/grub.d/00_header.in index 57a35a14a..b21caa4bc 100644 --- a/util/grub.d/00_header.in +++ b/util/grub.d/00_header.in @@ -250,7 +250,7 @@ EOF EOF # Gettext variables and module -if [ "x${LANG}" != "xC" ] && [ "x${LANG}" != "x" ]; then +if [ "x${LANG}" != "xC" ] && [ "x${LANG}" != "xPOSIX" ] && [ "x${LANG}" != "x" ]; then cat << EOF set locale_dir=\$prefix/locale set lang=${grub_lang} -- 2.31.1 ++++++ 0001-disk-diskfilter-Use-nodes-in-logical-volume-s-segmen.patch ++++++ >From 5cc00eac24c7019d9696a859f69b587e11f1621e Mon Sep 17 00:00:00 2001 From: Michael Chang <mch...@suse.com> Date: Mon, 27 Sep 2021 17:39:56 +0800 Subject: [PATCH] disk/diskfilter: Use nodes in logical volume's segment as member device Currently the grub_diskfilter_memberlist() function returns all physical volumes added to a volume group to which a logical volume (LV) belongs. However, this is suboptimal as it doesn't fit the intended behavior of returning underlying devices that make up the LV. To give a clear picture, the result should be identical to running commands below to display the logical volumes with underlying physical volumes in use. localhost:~ # lvs -o lv_name,vg_name,devices /dev/system/root LV VG Devices root system /dev/vda2(512) localhost:~ # lvdisplay --maps /dev/system/root --- Logical volume --- ... --- Segments --- Logical extents 0 to 4604: Type linear Physical volume /dev/vda2 Physical extents 512 to 5116 As shown above, we can know system-root LV uses only /dev/vda2 to allocate it's extents, or we can say that /dev/vda2 is the member device comprising the system-root LV. It is important to be precise on the member devices, because that helps to avoid pulling in excessive dependency. Let's use an example to demonstrate why it is needed. localhost:~ # findmnt / TARGET SOURCE FSTYPE OPTIONS / /dev/mapper/system-root ext4 rw,relatime localhost:~ # pvs PV VG Fmt Attr PSize PFree /dev/mapper/data system lvm2 a-- 1020.00m 0 /dev/vda2 system lvm2 a-- 19.99g 0 localhost:~ # cryptsetup status /dev/mapper/data /dev/mapper/data is active and is in use. type: LUKS1 cipher: aes-xts-plain64 keysize: 512 bits key location: dm-crypt device: /dev/vdb sector size: 512 offset: 4096 sectors size: 2093056 sectors mode: read/write localhost:~ # vgs VG #PV #LV #SN Attr VSize VFree system 2 3 0 wz--n- 20.98g 0 localhost:~ # lvs -o lv_name,vg_name,devices LV VG Devices data system /dev/mapper/data(0) root system /dev/vda2(512) swap system /dev/vda2(0) We can learn from above that /dev/mapper/data is an encrypted volume and also gets assigned to volume group "system" as one of it's physical volumes. And also it is not used by root device, /dev/mapper/system-root, for allocating extents, so it shouldn't be taking part in the process of setting up GRUB to access root device. However, running grub-install reports error as volume group "system" contains encrypted volume. error: attempt to install to encrypted disk without cryptodisk enabled. Set `GRUB_ENABLE_CRYPTODISK=y' in file `/etc/default/grub'. Certainly we can enable GRUB_ENABLE_CRYPTODISK=y and move on, but that is not always acceptable since the server may need to be booted unattended. Additionally, typing passphrase for every system startup can be a big hassle of which most users would like to avoid. This patch solves the problem by returning exact physical volume, /dev/vda2, rightly used by system-root from the example above, thus grub-install will not error out because the excessive encrypted device to boot the root device is not configured. Signed-off-by: Michael Chang <mch...@suse.com> Tested-by: Olav Reinert <seroto...@gmail.com> Reviewed-by: Daniel Kiper <daniel.ki...@oracle.com> --- grub-core/disk/diskfilter.c | 61 ++++++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 17 deletions(-) diff --git a/grub-core/disk/diskfilter.c b/grub-core/disk/diskfilter.c index d094f7882..39d74cb86 100644 --- a/grub-core/disk/diskfilter.c +++ b/grub-core/disk/diskfilter.c @@ -396,6 +396,8 @@ grub_diskfilter_memberlist (grub_disk_t disk) grub_disk_dev_t p; struct grub_diskfilter_vg *vg; struct grub_diskfilter_lv *lv2 = NULL; + struct grub_diskfilter_segment *seg; + unsigned int i, j; if (!lv->vg->pvs) return NULL; @@ -427,27 +429,52 @@ grub_diskfilter_memberlist (grub_disk_t disk) } } - for (pv = lv->vg->pvs; pv; pv = pv->next) - { - if (!pv->disk) + for (i = 0, seg = lv->segments; i < lv->segment_count; i++, seg++) + for (j = 0; j < seg->node_count; ++j) + if (seg->nodes[j].pv != NULL) { - /* TRANSLATORS: This message kicks in during the detection of - which modules needs to be included in core image. This happens - in the case of degraded RAID and means that autodetection may - fail to include some of modules. It's an installation time - message, not runtime message. */ - grub_util_warn (_("Couldn't find physical volume `%s'." - " Some modules may be missing from core image."), - pv->name); - continue; + pv = seg->nodes[j].pv; + + if (pv->disk == NULL) + { + /* + * TRANSLATORS: This message kicks in during the detection of + * which modules needs to be included in core image. This happens + * in the case of degraded RAID and means that autodetection may + * fail to include some of modules. It's an installation time + * message, not runtime message. + */ + grub_util_warn (_("Couldn't find physical volume `%s'." + " Some modules may be missing from core image."), + pv->name); + continue; + } + + for (tmp = list; tmp != NULL; tmp = tmp->next) + if (!grub_strcmp (tmp->disk->name, pv->disk->name)) + break; + if (tmp != NULL) + continue; + + tmp = grub_malloc (sizeof (*tmp)); + if (tmp == NULL) + goto fail; + tmp->disk = pv->disk; + tmp->next = list; + list = tmp; } - tmp = grub_malloc (sizeof (*tmp)); - tmp->disk = pv->disk; - tmp->next = list; - list = tmp; - } return list; + + fail: + while (list != NULL) + { + tmp = list; + list = list->next; + grub_free (tmp); + } + + return NULL; } void -- 2.31.1 ++++++ 0001-fs-xfs-Fix-unreadable-filesystem-with-v4-superblock.patch ++++++ >From 7c11f4f3d71c3fc8acff820b1fd449c94095dab9 Mon Sep 17 00:00:00 2001 From: Erwan Velu <erwanalia...@gmail.com> Date: Wed, 25 Aug 2021 15:31:52 +0200 Subject: [PATCH] fs/xfs: Fix unreadable filesystem with v4 superblock The commit 8b1e5d193 (fs/xfs: Add bigtime incompat feature support) introduced the bigtime support by adding some features in v3 inodes. This change extended grub_xfs_inode struct by 76 bytes but also changed the computation of XFS_V2_INODE_SIZE and XFS_V3_INODE_SIZE. Prior this commit, XFS_V2_INODE_SIZE was 100 bytes. After the commit it's 84 bytes XFS_V2_INODE_SIZE becomes 16 bytes too small. As a result, the data structures aren't properly aligned and the GRUB generates "attempt to read or write outside of partition" errors when trying to read the XFS filesystem: GNU GRUB version 2.11 .... grub> set debug=efi,gpt,xfs grub> insmod part_gpt grub> ls (hd0,gpt1)/ partmap/gpt.c:93: Read a valid GPT header partmap/gpt.c:115: GPT entry 0: start=4096, length=1953125 fs/xfs.c:931: Reading sb fs/xfs.c:270: Validating superblock fs/xfs.c:295: XFS v4 superblock detected fs/xfs.c:962: Reading root ino 128 fs/xfs.c:515: Reading inode (128) - 64, 0 fs/xfs.c:515: Reading inode (739521961424144223) - 344365866970255880, 3840 error: attempt to read or write outside of partition. This commit change the XFS_V2_INODE_SIZE computation by subtracting 76 bytes instead of 92 bytes from the actual size of grub_xfs_inode struct. This 76 bytes value comes from added members: 20 grub_uint8_t unused5 1 grub_uint64_t flags2 48 grub_uint8_t unused6 This patch explicitly splits the v2 and v3 parts of the structure. The unused4 is still ending of the v2 structures and the v3 starts at unused5. Thanks to this we will avoid future corruptions of v2 or v3 inodes. The XFS_V2_INODE_SIZE is returning to its expected size and the filesystem is back to a readable state: GNU GRUB version 2.11 .... grub> set debug=efi,gpt,xfs grub> insmod part_gpt grub> ls (hd0,gpt1)/ partmap/gpt.c:93: Read a valid GPT header partmap/gpt.c:115: GPT entry 0: start=4096, length=1953125 fs/xfs.c:931: Reading sb fs/xfs.c:270: Validating superblock fs/xfs.c:295: XFS v4 superblock detected fs/xfs.c:962: Reading root ino 128 fs/xfs.c:515: Reading inode (128) - 64, 0 fs/xfs.c:515: Reading inode (128) - 64, 0 fs/xfs.c:931: Reading sb fs/xfs.c:270: Validating superblock fs/xfs.c:295: XFS v4 superblock detected fs/xfs.c:962: Reading root ino 128 fs/xfs.c:515: Reading inode (128) - 64, 0 fs/xfs.c:515: Reading inode (128) - 64, 0 fs/xfs.c:515: Reading inode (128) - 64, 0 fs/xfs.c:515: Reading inode (131) - 64, 768 efi/ fs/xfs.c:515: Reading inode (3145856) - 1464904, 0 grub2/ fs/xfs.c:515: Reading inode (132) - 64, 1024 grub/ fs/xfs.c:515: Reading inode (139) - 64, 2816 grub> Fixes: 8b1e5d193 (fs/xfs: Add bigtime incompat feature support) Signed-off-by: Erwan Velu <e.v...@criteo.com> Tested-by: Carlos Maiolino <cmaiol...@redhat.com> Reviewed-by: Daniel Kiper <daniel.ki...@oracle.com> --- grub-core/fs/xfs.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/grub-core/fs/xfs.c b/grub-core/fs/xfs.c index 0f524c3a8..e3816d1ec 100644 --- a/grub-core/fs/xfs.c +++ b/grub-core/fs/xfs.c @@ -192,6 +192,11 @@ struct grub_xfs_time_legacy grub_uint32_t nanosec; } GRUB_PACKED; +/* + * The struct grub_xfs_inode layout was taken from the + * struct xfs_dinode_core which is described here: + * https://mirrors.edge.kernel.org/pub/linux/utils/fs/xfs/docs/xfs_filesystem_structure.pdf + */ struct grub_xfs_inode { grub_uint8_t magic[2]; @@ -208,14 +213,15 @@ struct grub_xfs_inode grub_uint32_t nextents; grub_uint16_t unused3; grub_uint8_t fork_offset; - grub_uint8_t unused4[37]; + grub_uint8_t unused4[17]; /* Last member of inode v2. */ + grub_uint8_t unused5[20]; /* First member of inode v3. */ grub_uint64_t flags2; - grub_uint8_t unused5[48]; + grub_uint8_t unused6[48]; /* Last member of inode v3. */ } GRUB_PACKED; #define XFS_V3_INODE_SIZE sizeof(struct grub_xfs_inode) -/* Size of struct grub_xfs_inode until fork_offset (included). */ -#define XFS_V2_INODE_SIZE (XFS_V3_INODE_SIZE - 92) +/* Size of struct grub_xfs_inode v2, up to unused4 member included. */ +#define XFS_V2_INODE_SIZE (XFS_V3_INODE_SIZE - 76) struct grub_xfs_dirblock_tail { -- 2.31.1 ++++++ 0001-ieee1275-implement-FCP-methods-for-WWPN-and-LUNs.patch ++++++ >From a37d0cc089edd66ab35f1a27b0da09dd2f02deb3 Mon Sep 17 00:00:00 2001 From: Diego Domingos <dieg...@br.ibm.com> Date: Mon, 24 Jun 2019 10:15:56 -0400 Subject: [PATCH] ieee1275: implement FCP methods for WWPN and LUNs This patch enables the fcp-targets and fcp-luns methods which are responsible to get WWPNs and LUNs for fibre channel devices. Those methods are specially necessary if the boot directory and grub installation are in different FCP disks, allowing the dev_iterate() to find the WWPNs and LUNs when called by searchfs.uuid tool. --- grub-core/disk/ieee1275/ofdisk.c | 117 ++++++++++++++++++++++++++++++- 1 file changed, 116 insertions(+), 1 deletion(-) diff --git a/grub-core/disk/ieee1275/ofdisk.c b/grub-core/disk/ieee1275/ofdisk.c index ea7f78ac7..258a6e389 100644 --- a/grub-core/disk/ieee1275/ofdisk.c +++ b/grub-core/disk/ieee1275/ofdisk.c @@ -209,7 +209,122 @@ dev_iterate_real (const char *name, const char *path) static void dev_iterate (const struct grub_ieee1275_devalias *alias) { - if (grub_strcmp (alias->type, "vscsi") == 0) + if (grub_strcmp (alias->type, "fcp") == 0) + { + + /* If we are dealing with fcp devices, we need + * to find the WWPNs and LUNs to iterate them */ + grub_ieee1275_ihandle_t ihandle; + grub_uint64_t *ptr_targets, *ptr_luns, k, l; + unsigned int i, j, pos; + char *buf, *bufptr; + + struct set_fcp_targets_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t method; + grub_ieee1275_cell_t ihandle; + grub_ieee1275_cell_t catch_result; + grub_ieee1275_cell_t nentries; + grub_ieee1275_cell_t table; + } args_targets; + + struct set_fcp_luns_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t method; + grub_ieee1275_cell_t ihandle; + grub_ieee1275_cell_t wwpn_h; + grub_ieee1275_cell_t wwpn_l; + grub_ieee1275_cell_t catch_result; + grub_ieee1275_cell_t nentries; + grub_ieee1275_cell_t table; + } args_luns; + + struct args_ret + { + grub_uint64_t addr; + grub_uint64_t len; + }; + + if(grub_ieee1275_open (alias->path, &ihandle)) + { + grub_dprintf("disk", "failed to open the disk while iterating FCP disk path=%s\n", alias->path); + return; + } + + /* Setup the fcp-targets method to call via pfw*/ + INIT_IEEE1275_COMMON (&args_targets.common, "call-method", 2, 3); + args_targets.method = (grub_ieee1275_cell_t) "fcp-targets"; + args_targets.ihandle = ihandle; + + /* Setup the fcp-luns method to call via pfw */ + INIT_IEEE1275_COMMON (&args_luns.common, "call-method", 4, 3); + args_luns.method = (grub_ieee1275_cell_t) "fcp-luns"; + args_luns.ihandle = ihandle; + + if (IEEE1275_CALL_ENTRY_FN (&args_targets) == -1) + { + grub_dprintf("disk", "failed to get the targets while iterating FCP disk path=%s\n", alias->path); + grub_ieee1275_close(ihandle); + return; + } + + buf = grub_malloc (grub_strlen (alias->path) + 32 + 32); + + if (!buf) + { + grub_ieee1275_close(ihandle); + return; + } + + bufptr = grub_stpcpy (buf, alias->path); + + /* Iterate over entries returned by pfw. Each entry contains a + * pointer to wwpn table and his length. */ + struct args_ret *targets_table = (struct args_ret *)(args_targets.table); + for (i=0; i< args_targets.nentries; i++) + { + ptr_targets = (grub_uint64_t*)(grub_uint32_t) targets_table[i].addr; + /* Iterate over all wwpns in given table */ + for(k=0;k<targets_table[i].len;k++) + { + args_luns.wwpn_l = (grub_ieee1275_cell_t) (*ptr_targets); + args_luns.wwpn_h = (grub_ieee1275_cell_t) (*ptr_targets >> 32); + pos=grub_snprintf (bufptr, 32, "/disk@%" PRIxGRUB_UINT64_T, + *ptr_targets++); + /* Get the luns for given wwpn target */ + if (IEEE1275_CALL_ENTRY_FN (&args_luns) == -1) + { + grub_dprintf("disk", "failed to get the LUNS while iterating FCP disk path=%s\n", buf); + grub_ieee1275_close (ihandle); + grub_free (buf); + return; + } + + struct args_ret *luns_table = (struct args_ret *)(args_luns.table); + + /* Iterate over all LUNs */ + for(j=0;j<args_luns.nentries; j++) + { + ptr_luns = (grub_uint64_t*) (grub_uint32_t) luns_table[j].addr; + for(l=0;l<luns_table[j].len;l++) + { + grub_snprintf (&bufptr[pos], 30, ",%" PRIxGRUB_UINT64_T, + *ptr_luns++); + dev_iterate_real(buf,buf); + } + } + + } + } + + grub_ieee1275_close (ihandle); + grub_free (buf); + return; + + } + else if (grub_strcmp (alias->type, "vscsi") == 0) { static grub_ieee1275_ihandle_t ihandle; struct set_color_args -- 2.31.1 ++++++ 0001-tpm-Pass-unknown-error-as-non-fatal-but-debug-print-.patch ++++++ >From 2cecb472ffba4dbc534f4ce3346a453762371c52 Mon Sep 17 00:00:00 2001 From: Mathieu Trudel-Lapierre <mathieu...@gmail.com> Date: Fri, 25 Oct 2019 10:27:54 -0400 Subject: [PATCH] tpm: Pass unknown error as non-fatal, but debug print the error we got Signed-off-by: Mathieu Trudel-Lapierre <mathieu.trudel-lapie...@canonical.com> Patch-Name: ubuntu-tpm-unknown-error-non-fatal.patch --- grub-core/commands/efi/tpm.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/grub-core/commands/efi/tpm.c b/grub-core/commands/efi/tpm.c index a97d85368..1e399a964 100644 --- a/grub-core/commands/efi/tpm.c +++ b/grub-core/commands/efi/tpm.c @@ -145,7 +145,8 @@ grub_efi_log_event_status (grub_efi_status_t status) case GRUB_EFI_NOT_FOUND: return grub_error (GRUB_ERR_UNKNOWN_DEVICE, N_("TPM unavailable")); default: - return grub_error (GRUB_ERR_UNKNOWN_DEVICE, N_("Unknown TPM error")); + grub_dprintf("tpm", "Unknown TPM error: %" PRIdGRUB_SSIZE, status); + return 0; } } -- 2.31.1 ++++++ grub2-check-default.sh ++++++ --- /var/tmp/diff_new_pack.0eHYPj/_old 2021-11-08 17:24:10.572692985 +0100 +++ /var/tmp/diff_new_pack.0eHYPj/_new 2021-11-08 17:24:10.572692985 +0100 @@ -99,7 +99,25 @@ exit 0 fi -source /etc/os-release +for i in /etc/os-release /usr/lib/os-release ; do + if [ -f "$i" ]; then + OS_RELEASE="$i" + break + fi +done + +if [ -z "$OS_RELEASE" ]; then + debug_print "No os-release file present" + exit 0 +fi + +debug_print "Applying settings from $OS_RELEASE" +source "$OS_RELEASE" + +if [ -z "$VERSION" ]; then + debug_print "No os-release version tag present, assuming rolling release" + exit 0 +fi NEW_SAVED_ENTRY=`echo $SAVED_ENTRY | sed -ne "s/$NAME [0-9a-zA-Z_.-]\{1,\}/$NAME $VERSION/pg"` ++++++ grub2-default-distributor.patch ++++++ --- /var/tmp/diff_new_pack.0eHYPj/_old 2021-11-08 17:24:10.596693001 +0100 +++ /var/tmp/diff_new_pack.0eHYPj/_new 2021-11-08 17:24:10.596693001 +0100 @@ -1,8 +1,16 @@ -Index: grub-2.02~beta3/grub-core/osdep/unix/config.c +v1: +As long as VERSION in /etc/os-release has been commented out for rolling +release, we can replace openSUSE Tumbleweed specific handling for grub +distributor with a generic one. + +v2: +Use /usr/lib/os-release as fallback to /etc/os-release + +Index: grub-2.06/grub-core/osdep/unix/config.c =================================================================== ---- grub-2.02~beta3.orig/grub-core/osdep/unix/config.c -+++ grub-2.02~beta3/grub-core/osdep/unix/config.c -@@ -61,6 +61,143 @@ grub_util_get_localedir (void) +--- grub-2.06.orig/grub-core/osdep/unix/config.c ++++ grub-2.06/grub-core/osdep/unix/config.c +@@ -61,6 +61,131 @@ grub_util_get_localedir (void) return LOCALEDIR; } @@ -69,7 +77,6 @@ + char *cfgfile; + char buf[1024]; + FILE *fp = NULL; -+ char *os_pretty_name = NULL; + char *os_name = NULL; + char *os_version = NULL; + @@ -77,7 +84,12 @@ + if (!grub_util_is_regular (cfgfile)) + { + grub_free (cfgfile); -+ return NULL; ++ cfgfile = grub_util_path_concat (2, "/usr/lib", "os-release"); ++ if (!grub_util_is_regular (cfgfile)) ++ { ++ grub_free (cfgfile); ++ return NULL; ++ } + } + + fp = grub_util_fopen (cfgfile, "r"); @@ -97,30 +109,19 @@ + if (buf[grub_strlen(buf) - 1] == '\n') + buf[grub_strlen(buf) - 1] = '\0'; + -+ if (!os_pretty_name -+ && (os_pretty_name = os_release_get_val (buf, "PRETTY_NAME"))) -+ continue; + if (!os_name + && (os_name = os_release_get_val (buf, "NAME"))) + continue; + if (!os_version + && (os_version = os_release_get_val (buf, "VERSION"))) + continue; -+ if (os_pretty_name && os_name && os_version) ++ if (os_name && os_version) + break; + } + + fclose (fp); + -+ if (os_name && grub_strncmp (os_name, "openSUSE Tumbleweed", sizeof ("openSUSE Tumbleweed") - 1) == 0) -+ { -+ grub_free (os_name); -+ if (os_version) -+ grub_free (os_version); -+ -+ return os_pretty_name; -+ } -+ else if (os_name && os_version) ++ if (os_name && os_version) + { + char *os_name_version; + @@ -128,16 +129,11 @@ + + grub_free (os_name); + grub_free (os_version); -+ if (os_pretty_name) -+ grub_free (os_pretty_name); + + return os_name_version; + } + -+ if (os_pretty_name) -+ grub_free (os_pretty_name); -+ if (os_version) -+ grub_free (os_version); ++ grub_free (os_version); + + return os_name; +} @@ -146,7 +142,7 @@ void grub_util_load_config (struct grub_util_config *cfg) { -@@ -125,7 +262,17 @@ grub_util_load_config (struct grub_util_ +@@ -125,7 +250,17 @@ grub_util_load_config (struct grub_util_ waitpid (pid, NULL, 0); } if (f) @@ -165,7 +161,7 @@ f = grub_util_fopen (cfgfile, "r"); if (f) -@@ -136,4 +283,13 @@ grub_util_load_config (struct grub_util_ +@@ -136,4 +271,13 @@ grub_util_load_config (struct grub_util_ else grub_util_warn (_("cannot open configuration file `%s': %s"), cfgfile, strerror (errno)); @@ -179,20 +175,25 @@ + } +#endif } -Index: grub-2.02~beta3/util/grub-mkconfig.in +Index: grub-2.06/util/grub-mkconfig.in =================================================================== ---- grub-2.02~beta3.orig/util/grub-mkconfig.in -+++ grub-2.02~beta3/util/grub-mkconfig.in -@@ -206,6 +206,14 @@ GRUB_ACTUAL_DEFAULT="$GRUB_DEFAULT" +--- grub-2.06.orig/util/grub-mkconfig.in ++++ grub-2.06/util/grub-mkconfig.in +@@ -225,6 +225,19 @@ GRUB_ACTUAL_DEFAULT="$GRUB_DEFAULT" if [ "x${GRUB_ACTUAL_DEFAULT}" = "xsaved" ] ; then GRUB_ACTUAL_DEFAULT="`"${grub_editenv}" - list | sed -n '/^saved_entry=/ s,^saved_entry=,,p'`" ; fi -+if [ x"${GRUB_DISTRIBUTOR}" = x ] && [ -f "${sysconfdir}/os-release" ] ; then -+ . "${sysconfdir}/os-release" -+ if echo "$NAME" | grep -q "^openSUSE Tumbleweed" ; then -+ GRUB_DISTRIBUTOR="${PRETTY_NAME}" -+ else ++if [ x"${GRUB_DISTRIBUTOR}" = x ] ; then ++ for i in "${sysconfdir}/os-release" "/usr/lib/os-release" ; do ++ if [ -f "$i" ] ; then ++ . "$i" ++ break ++ fi ++ done ++ if [ x"${NAME}" != x ] && [ x"${VERSION}" != x ] ; then + GRUB_DISTRIBUTOR="${NAME} ${VERSION}" ++ else ++ GRUB_DISTRIBUTOR="${NAME}" + fi +fi ++++++ grub2-once ++++++ --- /var/tmp/diff_new_pack.0eHYPj/_old 2021-11-08 17:24:10.756693106 +0100 +++ /var/tmp/diff_new_pack.0eHYPj/_new 2021-11-08 17:24:10.756693106 +0100 @@ -178,10 +178,12 @@ sub enable_restore_grubenv_service { my $systemctl = "/usr/bin/systemctl"; - my $cleanup = "/var/tmp/grub2-cleanup-once"; + my $cleanup = "/var/lib/misc/grub2-cleanup-once"; - open(my $fh, ">", $cleanup) or die "open: $cleanup $!\n"; - close($fh); + unless (-e $cleanup) { + open(my $fh, ">", $cleanup) or die "open: $cleanup $!\n"; + close($fh); + } return 0 if (system("$systemctl --quiet is-enabled grub2-once") == 0); system "$systemctl --no-reload enable grub2-once >/dev/null 2>&1"; ++++++ grub2-once.service ++++++ --- /var/tmp/diff_new_pack.0eHYPj/_old 2021-11-08 17:24:10.796693133 +0100 +++ /var/tmp/diff_new_pack.0eHYPj/_new 2021-11-08 17:24:10.796693133 +0100 @@ -5,12 +5,12 @@ Before=sysinit.target shutdown.target Conflicts=shutdown.target ConditionPathIsReadWrite=/boot/grub2/grubenv -ConditionPathExists=/var/tmp/grub2-cleanup-once +ConditionPathExists=/var/lib/misc/grub2-cleanup-once [Service] Type=oneshot ExecStart=-/usr/bin/grub2-editenv /boot/grub2/grubenv unset next_entry -ExecStartPost=-/usr/bin/rm -f /var/tmp/grub2-cleanup-once +ExecStartPost=-/usr/bin/rm -f /var/lib/misc/grub2-cleanup-once StandardOutput=journal [Install]