Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:bmwiedemann:reproducible:distribution:ring1
os-prober
Improve-btrfs-handling-on-os-probing-for-grub2....
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File Improve-btrfs-handling-on-os-probing-for-grub2.patch of Package os-prober
From: Egbert Eich <eich@suse.de> Date: Fri May 29 08:55:21 2015 +0200 Subject: Improve btrfs handling on os-probing for grub2 Patch-mainline: never References: bsc#892364 Signed-off-by: Egbert Eich <eich@suse.com> Currently probing of a grub2 config file is broken if the root/boot fs is btrfs. This is due to a patch picked from Fedora which attempts to determine the location of the kernel and probe for it. This code has meanwhile changed on Fedora, however the new version works no better than the old one. It is possible that this code works under very special circumstances of the Fedora system, however it is by no means valid. Our goal is to a. determine the location of the kernel in the mounted fs regardless whether the grub2 config specifies an absolute or relative path to the kernel file. b. Prepend the correct prefix if grub2_btrfs expects an absolute path (either because the current grub2 fs isn't btrfs or absolute path addressing is explicitely requested). c. Attempt to handle the location of the kernel file correctly if this lives on a separate btrfs subvolume. (Currently this only works if the path to this subvolume is identical to the fs path). Signed-off-by: Egbert Eich <eich@suse.de> v2: a. Fix missing linux16/initrd16 parsing in entry result b. Fix kernelfile path if separate boot partition on btrfs Signed-off-by: Michael Chang <mchang@suse.com> --- linux-boot-probes/mounted/common/40grub2 | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) --- a/linux-boot-probes/mounted/common/40grub2 +++ b/linux-boot-probes/mounted/common/40grub2 @@ -14,9 +14,19 @@ found_item=0 entry_result () { - if [ "x$type" = "xbtrfs" -a "$rootsv" = "$bootsv" ]; then - # trim off the leading subvol - kernelfile=$(echo "$kernel" | cut -d '/' -f 2- | cut -d '/' -f 2-) + if [ "x$type" = "xbtrfs" ]; then + bsv=${bootsv:+/}${bootsv} + # if path is not relative to subvolume make it relative + kernel=${kernel#${bsv}} + kernelfile=$kernel + initrd=${initrd#${bsv}} + if [ "x$GRUB_FS" != "xbtrfs" -o "x${SUSE_BTRFS_SNAPSHOT_BOOTING}" != "xtrue" ]; then + # absolute path needed: prepend subvolume if $kernel isn't empty + kernel=${kernel:+${bsv}}${kernel} + initrd=${initrd:+${bsv}}${initrd} + fi + # assumed: rootsv != bootsv if rootsv isn't ancestor of bootsv + [ "$partition" != "$bootpart" -o "$rootsv" != "$bootsv" ] && kernelfile="/boot${kernelfile}" else kernelfile=$kernel fi @@ -81,7 +91,7 @@ ignore_item=1 fi ;; - linux|linuxefi) + linux|linuxefi|linux16) # Hack alert: sed off any (hdn,n) but # assume the kernel is on the same # partition. @@ -90,18 +100,18 @@ parameters="$@" # Systems with a separate /boot will not have # the path to the kernel in grub.cfg. - if [ "$partition" != "$bootpart" ]; then + if [ "$partition" != "$bootpart" -a "$type" != "btrfs" ]; then kernel="/boot$kernel" fi ;; - initrd|initrdefi) + initrd|initrdefi|initrd16) shift initrd="" for initrd_path in "$@"; do # sed hack, as above initrd_path="$(echo "$initrd_path" | sed 's/(.*)//')" # Initrd same. - if [ "$partition" != "$bootpart" ]; then + if [ "$partition" != "$bootpart" -a "$type" != "btrfs" ]; then initrd_path="/boot$initrd_path" fi if [ -z "$initrd" ]; then
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor