summaryrefslogtreecommitdiff
path: root/sys-boot/os-prober
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2021-12-22 14:08:05 +0000
committerV3n3RiX <venerix@koprulu.sector>2021-12-22 14:08:05 +0000
commit93a93e9a3b53c1a73142a305ea1f8136846942ee (patch)
treeb9791a06ab3284e27b568412c59316c66240c682 /sys-boot/os-prober
parent2771f79232c273bc2a57d23bf335dd81ccf6af28 (diff)
gentoo resync : 22.12.2021
Diffstat (limited to 'sys-boot/os-prober')
-rw-r--r--sys-boot/os-prober/Manifest6
-rw-r--r--sys-boot/os-prober/files/os-prober-1.79-btrfs-subvolume-detection.patch238
-rw-r--r--sys-boot/os-prober/files/os-prober-1.79-detect-void.patch20
-rw-r--r--sys-boot/os-prober/files/os-prober-1.79-handle-multiple-initrd-paths.patch17
-rw-r--r--sys-boot/os-prober/os-prober-1.79-r1.ebuild105
5 files changed, 260 insertions, 126 deletions
diff --git a/sys-boot/os-prober/Manifest b/sys-boot/os-prober/Manifest
index ce14b440e277..31062b3603b6 100644
--- a/sys-boot/os-prober/Manifest
+++ b/sys-boot/os-prober/Manifest
@@ -1,15 +1,17 @@
AUX os-prober-1.76-exherbo.patch 905 BLAKE2B e8d78b730d33b5760128eaf910f20ac01dc7db3e2b3a271279859869e3c8451e7c8dd72ed5b2784a0dfbf3f31747a81509445d3793a8ed8070a1a721b1b84186 SHA512 0c3c2e4cde868e186131b08268e6344841f0830be5bf4131e5a7ded93a222097599b0a011168e4b7bd0bc97b69ece194df1d46d98eac2c921f16b3e76d004cc8
AUX os-prober-1.78-btrfsfix.patch 14379 BLAKE2B 5aff7aad1957966355748eafb7b1b426e81428c1de9d1053e708cccb271efe97c8728887a7dbc969a78e4ff3d92cbb0b1badf7551532030b585c5211a7308323 SHA512 deefcd22ac50b9a5cdc4609eda6cc5c58f40989c17e56a8f098f529bacfef7bb65fca9775e7ea85540b850eecfd1380d9474388644f13c47459c14bc6cbe681f
-AUX os-prober-1.79-btrfs-subvolume-detection.patch 14719 BLAKE2B 94d2c67eac4d17fee345f046a147c8f9d2f12446e07b651a0ddd8245fc6791589bf38603c02dfbbeba05f7ab63a1bd996692ca6b066bc568d33b63c396571d5d SHA512 588f68ab64547d3f854879ec65c74067fe0a3068a0e2f5e2c8bb461e08e4fe3a2be7dcfb10a5d7b44033ad46419e9ef6e8af28c59085fea06f77d6885a11bb35
+AUX os-prober-1.79-btrfs-subvolume-detection.patch 15634 BLAKE2B 3df775b2f28004a86e31d79aaead1482dff2a738acb2d2b905b1ce15d22c2d6dd5f3e37208b571d9687eb2a494f450833673e23ba58c02a2e3b402150d4805df SHA512 05888bedca4a9e972b40060122776349010943c6de7239ad17ddeecafa7fdf4136c4acf84e2b7e2e16f4bd0a205638dde7bb0203b08064e9901671faec48222c
+AUX os-prober-1.79-detect-void.patch 693 BLAKE2B 2e9539551d8840a082b3a9d94400629bb71dac67661de785d7c0aea5a518ce47d2c3b914c54ac37dc1413b4ff62ee2b67ff77f892bc0aa8f65879125f11171c7 SHA512 fbcb3d1b9018504e27db64aa85df4f7304970c09d06cbe0b25927e17dd0cc26c2d4132af4792b0d67a4ec1c1c984b1b97b4df7166ef9fb9df0a2da97a1433354
AUX os-prober-1.79-efi-chroot-blkid-fallback.patch 1025 BLAKE2B 86a4b2fee4ac16f0e454cd244f7c27ea40b5115c0a4945b2b0f69be683854853e5f9ae9ed9844821c22e0dd0604f2fb6947a97d2640fc6b1f5e7c723f3b424b7 SHA512 36bc04c07182a83dac3c0e0328a046a665cb535c8719a934756a0f0575122897c3f5542aef0052709aace3a1d4331d7486b5bd993e8d412da5f4b7afe2d48d1b
AUX os-prober-1.79-fix-busy-umount-message.patch 435 BLAKE2B 547286075651f19518a4a8815a920604e8c31190fdcea9ef8a0ec2a607d126f2181e51fb77ef1585dac5551e990e6a07aca81004b0fa4fc8ed39559866a0d005 SHA512 b68352f1a7f3607ca853de42bd589600cf310abe34dd7ab99fdb12eebbe1a50b7b5a6b208a8902f2cdb61ce7acff12f6d616311d704ba4ee5347120d44adc37a
-AUX os-prober-1.79-handle-multiple-initrd-paths.patch 1008 BLAKE2B b66a9e9e2f2ab3a2e1a092efa5eba519c71d2b48ffde010d260a704a225da39e72a09bc1ed609ad0ccdf738b54f3b25536fa340a973d553d82d6625944a81231 SHA512 266c896c80e36a779502f4f7a10c64d9778bff5d914df1f191f55dd39c2f2d4f4cdcd957ce396d21b486d5d8d48bb353704379ee0eda43ff3c8e0791a5a2f6f6
+AUX os-prober-1.79-handle-multiple-initrd-paths.patch 1133 BLAKE2B f82902b7641288bb0226e0ac46eb375f2e813cc8fcf01691ae64c82a9f06a9ad8b597bb553ed36c7a3cce95529d3a94e300c1820774a5f8322ff25dab93a2cc6 SHA512 87c1cda3d6b05df53a0e0cb06ef8c53490d9b93eb8cdbade625f31a1353caa9bdc5d068683a4e1f5d259adbbcbc9a2d18c5a9ccedb56d4140ea0dbfc8836ccda
AUX os-prober-1.79-mdraid-detection.patch 848 BLAKE2B 11ec43662f174d7f12f09b9b46f57ea7519d45aa1560ef31fc9c75b2684d1f549b3a679aa3f6dff855fc79c72757f0814ea147e75536f6503fc76f3426f8c648 SHA512 a4d68ea8cb6dcc2fc452a15ed983cb911e6a6097ec48515511b94c7f0096c6f611ffb4bf8af3c373cc5774f94e398ef74e1e2a8fe68669ace31bed134e839697
AUX os-prober-1.79-mounted-boot-partition-fix.patch 555 BLAKE2B 9b98506f986ceb509271a8a1ce0cc357fb25402ec1059d16411c79e96c727ef40182b5d9f362f16ae4ddab95a45155380cc5742ad1f15ac2cd39fdf273fc9a90 SHA512 fa66356859001d15823c3dbe8143e905e25ee937c236c787965b2a9a50493b55006e0fc9190b076fe106f942ea6074ef7556a443a237d0108b6b936106186061
AUX os-prober-1.79-use-fstab-name.patch 1101 BLAKE2B 37353efa899fd72e68d297325218be5a81abc2eee50bda5607e87c0eb799924fff0f510b4f13c681213e5e4be864a62fec9d5c98e539a61e9cd4036315eeabc5 SHA512 25236c935559398a4c37cdec04c358787f6178a016a6d0d4780c7dcd9eb7e18f308f4a89a1ddbb37d6c7dd17d334d879961029afb4463cef5e9029eab58fdc5c
DIST os-prober_1.78.tar.xz 26848 BLAKE2B eee68ab9be36807d86e8bda831cfd490a01d20d9cc3f84ca50d5e1143e5a2dd66e47d3bdf2b4780cf73cc692f0ffc9497c6cbf13ce7aa0057e996b13d706c8f7 SHA512 7a0425130d17ce8554e7d0797b53e3a984f63a2fdcf8e668c83d357418d8c68259ada25bc350b199adece2e683d9014f234e3a83ce5ab7485be2e69c45874640
DIST os-prober_1.79.tar.xz 27028 BLAKE2B b3efacce9d7fce3708f5ec727a219e872e8d1de6dea15540cfbc0a0e8372c1033098230d3ddb9066fb5474d44e5584ee28631e0e5ab981e8fb1dc29ee3cbd89d SHA512 89b827b9b90a1d3bc11e0090ec04d808502cc1883ab10997b6d9edbe6005dcf8a0acdd7d200102c9dccde56297bda6087d68fb6dec419f0920090c2655c9c7d8
EBUILD os-prober-1.78-r1.ebuild 2233 BLAKE2B 7fa1535d0b90ec18c1ec2a49759915a786f35657a1bbed560239fed784e87d8517b2754c315017013f72398d6159faff5178f9976963443fd42ac52c6210f4db SHA512 54cb1e72251533af64b65675b1fb5833c699f9f91c6d20586268e5300a7977e2d95dcd3e8d32629ac6aaf45a9fecc434151aff4d7e656f577ae42f17c15b2f14
+EBUILD os-prober-1.79-r1.ebuild 2587 BLAKE2B fddd96476140557c8b703ed11d6a73c609d9c233f54eb8258356aed4a80f0724b8cebd8ff3b0ffab3d28608467a1ab013d268bae195a0f9834ef6802a474d8e1 SHA512 8b1715a9e321b84cce144715efb0856c174eb0e0a95b365cdadad0c16364fefe13571a2795e9f75d785acde07f695eaa7f3b5f5aba7244ff4200ec7276984535
EBUILD os-prober-1.79.ebuild 2543 BLAKE2B 350e41f8141b46037344bee7f16ef0fb63c40e4d50a70f026d0a39abf24b1d6908620abd8db184261f4e03223738138438b591bdf94a870c5e4f1485d05c20db SHA512 b6e8b8380b1c2a430a4cade4d9489eebca7f3e469467f417717b2fd9dc052de364dc1f6b8bebc9cefeeb312076f365b7719828923a39b1602c423037c227a6d8
EBUILD os-prober-9999.ebuild 2482 BLAKE2B c59a755ba75807f6bdc3f9437ea319ee55600658997a23168f586eb19c4ea1012a9dfc0d637ae18bce2d972f8533e81360249c1af4157e67dad4de242c8dbe1b SHA512 62c4eb2541c01148e715eebf2b65d4ebaa0435a431839360e06509935706cfee3c1c5afc444333e94921f43d767d0964cedc118f9981bf4cb8cc01fcd7ed492c
MISC metadata.xml 384 BLAKE2B 98bf64680e61d1c0f0c9cbd73ce11be5a98fc7014517d263be8808064b1ab5b7ef200c243c472c3dedfad24176851007d9f4b03399e0970fd351f086b13d355c SHA512 dd391671666f17ce8e45093ff42c898c4bb0c685df9bb631c56089379d0825a15364656dedf4eec13c7652cfdbeb9c4f40f7bae0a8360cadd9b2cff136189bc3
diff --git a/sys-boot/os-prober/files/os-prober-1.79-btrfs-subvolume-detection.patch b/sys-boot/os-prober/files/os-prober-1.79-btrfs-subvolume-detection.patch
index 14cd794530ee..61337661401f 100644
--- a/sys-boot/os-prober/files/os-prober-1.79-btrfs-subvolume-detection.patch
+++ b/sys-boot/os-prober/files/os-prober-1.79-btrfs-subvolume-detection.patch
@@ -1,23 +1,22 @@
Fixes detection of multiple linux installations on different subvolumes of the
-same partition. Also contains changes from
-https://build.opensuse.org/package/view_file/openSUSE:Factory/os-prober/os-prober-btrfs-always-detect-default.patch
-to fix https://bugs.gentoo.org/790434.
+same partition. This patch is a combination of https://src.fedoraproject.org/rpms/os-prober/blob/a27e5121193e2222ada672db3521a7d9de70991b/f/os-prober-btrfsfix.patch and https://build.opensuse.org/package/view_file/openSUSE:Factory/os-prober/Improve-btrfs-handling-on-os-probing-for-grub2.patch?rev=56 .
Bug: https://bugs.gentoo.org/790434
+ https://bugs.gentoo.org/817905
https://bugs.debian.org/688336
https://bugzilla.redhat.com/888341
--- a/common.sh
+++ b/common.sh
-@@ -155,6 +155,7 @@
+@@ -155,6 +155,7 @@ parse_proc_mounts () {
done
}
-
+
+# add forth parameter to pickup btrfs subvol info
parsefstab () {
while read -r line; do
case "$line" in
-@@ -165,12 +166,22 @@
+@@ -165,12 +166,22 @@ parsefstab () {
set -f
set -- $line
set +f
@@ -27,7 +26,7 @@ Bug: https://bugs.gentoo.org/790434
esac
done
}
-
+
+#check_btrfs_mounted $bootsv $bootuuid)
+check_btrfs_mounted () {
+ bootsv="$1"
@@ -43,8 +42,8 @@ Bug: https://bugs.gentoo.org/790434
sed 's/\\011/ /g; s/\\012/\n/g; s/\\040/ /g; s/\\134/\\/g'
--- a/linux-boot-prober
+++ b/linux-boot-prober
-@@ -5,16 +5,148 @@
-
+@@ -5,16 +5,143 @@ set -e
+
newns "$@"
require_tmpdir
+ERR="n"
@@ -58,9 +57,9 @@ Bug: https://bugs.gentoo.org/790434
+bootmnt=
+bootsv=
+bootuuid=
-
+
grep "^/dev/" /proc/mounts | parse_proc_mounts >"$OS_PROBER_TMP/mounted-map" || true
-
+
-partition="$1"
+if [ -z "$1" ]; then
+ ERR=y
@@ -80,14 +79,14 @@ Bug: https://bugs.gentoo.org/790434
+ partition="$1"
+ type=other
+fi
-
+
-if [ -z "$partition" ]; then
+if [ "x$ERR" != xn ]; then
echo "usage: linux-boot-prober partition" >&2
+ echo " linux-boot-prober btrfs UUID=<> subvol=<>" >&2
exit 1
fi
-
+
+if [ "$type" = btrfs ]; then
+ # handle all of the btrfs stuff here
+ if [ ! -e "/proc/self/mountinfo" ]; then
@@ -111,12 +110,7 @@ Bug: https://bugs.gentoo.org/790434
+ fi
+ if [ -z "$mpoint" ]; then
+ # mount the btrfs root
-+
-+ if [ -n "$subvol" ]; then
-+ opts="-o subvol=$subvol"
-+ fi
-+
-+ if ! mount $opts -t btrfs -U $UUID "$tmpmnt" 2>/dev/null; then
++ if ! mount -o subvol=$subvol -t btrfs -U $UUID "$tmpmnt" 2>/dev/null; then
+ warn "error mounting btrfs subvol=$subvol UUID=$UUID"
+ umount "$tmpmnt/boot" 2>/dev/null
+ umount "$tmpmnt" 2>/dev/null
@@ -194,8 +188,8 @@ Bug: https://bugs.gentoo.org/790434
if ! mapped="$(mapdevfs "$partition")"; then
log "Device '$partition' does not exist; skipping"
continue
-@@ -22,8 +154,8 @@
-
+@@ -22,8 +149,8 @@ fi
+
if ! grep -q "^$mapped " "$OS_PROBER_TMP/mounted-map"; then
for test in /usr/lib/linux-boot-probes/*; do
- debug "running $test"
@@ -206,10 +200,10 @@ Bug: https://bugs.gentoo.org/790434
break
--- a/linux-boot-probes/mounted/common/40grub2
+++ b/linux-boot-probes/mounted/common/40grub2
-@@ -2,17 +2,30 @@
+@@ -2,17 +2,42 @@
. /usr/share/os-prober/common.sh
set -e
-
+
+# add support for btrfs with no separate /boot
+# that is, rootsv = bootsv
partition="$1"
@@ -218,16 +212,28 @@ Bug: https://bugs.gentoo.org/790434
type="$4"
+rootsv="$5"
+bootsv="$6"
-
+
found_item=0
-
+
entry_result () {
-+ if [ "x$type" = "xbtrfs" -a "$partition" = "$bootpart" ]; then
-+ # trim off the leading subvol
-+ kernelfile=$(echo "$kernel" | cut -d '/' -f 2- | cut -d '/' -f 2-)
-+ if [ "x$rootsv" != "x$bootsv" ]; then
-+ kernelfile="/boot/$kernelfile"
++ 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" ]; then
++ # absolute path needed: prepend subvolume if $kernel isn't empty
++ kernel=${kernel:+${bsv}}${kernel}
++ # handle multiple initrd paths
++ local initrd_path=
++ for path in ${initrd}; do
++ initrd_path+="${bsv}${path} "
++ done
++ initrd="${initrd_path% }"
+ fi
++ # assumed: rootsv != bootsv if rootsv isn't ancestor of bootsv
++ [ "$partition" != "$bootpart" -o "$rootsv" != "$bootsv" ] && kernelfile="/boot${kernelfile}"
+ else
+ kernelfile=$kernel
+ fi
@@ -238,22 +244,41 @@ Bug: https://bugs.gentoo.org/790434
result "$rootpart:$bootpart:$title:$kernel:$initrd:$parameters"
found_item=1
fi
-@@ -108,9 +121,9 @@
- [ "$mpoint/boot/grub/grub.cfg" -nt "$mpoint/boot/grub/menu.lst" ]); then
- debug "parsing grub.cfg"
- parse_grub_menu "$mpoint" "$partition" "$bootpart" < "$mpoint/boot/grub/grub.cfg"
--elif [ -e "$mpoint/boot/grub2/grub.cfg" ]; then
-+elif [ -e "$mpoint/boot/grub/grub.cfg" ]; then
- debug "parsing grub.cfg"
-- parse_grub_menu "$mpoint" "$partition" "$bootpart" < "$mpoint/boot/grub2/grub.cfg"
-+ parse_grub_menu "$mpoint" "$partition" "$bootpart" < "$mpoint/boot/grub/grub.cfg"
- fi
-
- if [ "$found_item" = 0 ]; then
+@@ -64,7 +88,7 @@ parse_grub_menu () {
+ ignore_item=1
+ fi
+ ;;
+- linux)
++ linux|linuxefi|linux16)
+ # Hack alert: sed off any (hdn,n) but
+ # assume the kernel is on the same
+ # partition.
+@@ -73,18 +98,18 @@ parse_grub_menu () {
+ 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)
++ 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
--- a/os-prober
+++ b/os-prober
-@@ -76,9 +76,12 @@
-
+@@ -76,9 +76,12 @@ partitions () {
+
# Also detect OSes on LVM volumes (assumes LVM is active)
if type lvs >/dev/null 2>&1; then
- echo "$(LVM_SUPPRESS_FD_WARNINGS=1 log_output lvs --noheadings --separator : -o vg_name,lv_name |
@@ -264,21 +289,21 @@ Bug: https://bugs.gentoo.org/790434
+ # now lets make sure we got all of the btrfs partitions and disks
+ blkid | grep 'TYPE="btrfs"' | cut -d ':' -f 1
}
-
+
parse_proc_swaps () {
-@@ -136,6 +139,8 @@
+@@ -136,6 +139,8 @@ if [ -f /proc/mdstat ] ; then
grep "^md" /proc/mdstat | cut -d: -f2- | parse_proc_mdstat >"$OS_PROBER_TMP/raided-map" || true
fi
-
+
+: >"$OS_PROBER_TMP/btrfs-vols"
+
for partition in $(partitions); do
if ! mapped="$(mapdevfs "$partition")"; then
log "Device '$partition' does not exist; skipping"
-@@ -154,7 +159,26 @@
+@@ -154,7 +159,26 @@ for partition in $(partitions); do
continue
fi
-
+
- if ! grep -q "^$mapped " "$OS_PROBER_TMP/mounted-map" ; then
+ # do btrfs processing here; both mounted and unmounted will
+ # be handled by 50mounted-tests so we can do a subvol only once.
@@ -305,10 +330,10 @@ Bug: https://bugs.gentoo.org/790434
debug "running $test on $partition"
--- a/os-probes/common/50mounted-tests
+++ b/os-probes/common/50mounted-tests
-@@ -14,19 +14,31 @@
+@@ -14,19 +14,31 @@ do_unmount() {
rmdir "$tmpmnt" || true
}
-
+
-types="$(fs_type "$partition")"
+if [ "x$1" = xbtrfs ]; then
+ types=btrfs
@@ -342,7 +367,7 @@ Bug: https://bugs.gentoo.org/790434
elif [ "$types" = ntfs ]; then
if type ntfs-3g >/dev/null 2>&1; then
types='ntfs-3g ntfs'
-@@ -35,7 +47,7 @@
+@@ -35,7 +47,7 @@ elif [ -z "$types" ]; then
if type cryptsetup >/dev/null 2>&1 && \
cryptsetup luksDump "$partition" >/dev/null 2>&1; then
debug "$1 is a LUKS partition; skipping"
@@ -351,52 +376,11 @@ Bug: https://bugs.gentoo.org/790434
fi
for type in $(grep -v nodev /proc/filesystems); do
# hfsplus filesystems are mountable as hfs. Try hfs last so
-@@ -58,6 +70,127 @@
+@@ -58,6 +70,108 @@ if [ ! -d "$tmpmnt" ]; then
fi
-
+
mounted=
+
-+probe_subvol ()
-+{
-+ local subvol=$1
-+ local partition=$2
-+ local UUID=$3
-+ local tmpmnt=$4
-+
-+ mounted=
-+ mpoint="$(grep btrfs /proc/self/mountinfo | grep "$partition " | grep "/$subvol " | cut -d ' ' -f 5)"
-+ ret=1
-+
-+ if [ -n "$subvol" ]; then
-+ opts="-o subvol=$subvol"
-+ fi
-+
-+ if [ -n "$mpoint" ]; then
-+ if [ "x$mpoint" = "x/" ]; then
-+ continue # this is the root for the running system
-+ fi
-+ mounted=1
-+ else
-+ # again, do not mount btrfs ro
-+ mount -t btrfs $opts -U "$UUID" "$tmpmnt"
-+ mpoint="$tmpmnt"
-+ fi
-+ test="/usr/lib/os-probes/mounted/90linux-distro"
-+ if [ -f "$test" ] && [ -x "$test" ]; then
-+ debug "running subtest $test"
-+ if "$test" "$partition" "$mpoint" btrfs "UUID=$UUID" "subvol=$subvol"; then
-+ debug "os found by subtest $test on subvol $subvol"
-+ ret=0
-+ fi
-+ fi
-+ if [ -z "$mounted" ]; then
-+ if ! umount "$tmpmnt"; then
-+ warn "failed to umount $tmpmnt"
-+ fi
-+ fi
-+ return $ret
-+}
-+
+# all btrfs processing here. Handle both unmounted and
+# mounted subvolumes.
+if [ "$types" = btrfs ]; then
@@ -436,7 +420,7 @@ Bug: https://bugs.gentoo.org/790434
+ mpoint="$tmpmnt"
+ fi
+
-+ test="/usr/libexec/os-probes/mounted/90linux-distro"
++ test="/usr/lib/os-probes/mounted/90linux-distro"
+ if [ -f "$test" ] && [ -x "$test" ]; then
+ debug "running subtest $test"
+ if "$test" "$partition" "$mpoint" btrfs "UUID=$UUID"; then
@@ -450,24 +434,46 @@ Bug: https://bugs.gentoo.org/790434
+ fi
+ fi
+ fi
-+ found=
-+ # Always probe subvol or root set as default
-+ if probe_subvol "$defaultvol" "$partition" "$UUID" "$tmpmnt"; then
-+ found=1
-+ fi
+
-+ # Probe any other OS on subvol
-+ for subvol in $subvols; do
-+ if echo "$rosubvols" | grep -q -x "$subvol" ||
-+ echo "$sssubvols" | grep -q -x "$subvol" ||
-+ echo "$defaultvol" | grep -q -x "$subvol"; then
-+ continue
-+ fi
-+ debug "begin btrfs processing for $UUID subvol=$subvol"
-+ if probe_subvol "$subvol" "$partition" "$UUID" "$tmpmnt"; then
-+ found=1
-+ fi
-+ done
++ if [ -z "$subvols" ]; then
++ debug "no subvols found on btrfs volume $UUID"
++ else
++ found=
++ for subvol in $subvols; do
++ debug "begin btrfs processing for $UUID subvol=$subvol"
++ if echo "$rosubvols" | grep -q -x "$subvol"; then
++ continue
++ fi
++ if echo "$sssubvols" | grep -q -x "$subvol"; then
++ continue
++ fi
++ mounted=
++ mpoint="$(grep btrfs /proc/self/mountinfo | grep "$partition " | grep "/$subvol " | cut -d ' ' -f 5)"
++ if [ -n "$mpoint" ]; then
++ if [ "x$mpoint" = "x/" ]; then
++ continue # this is the root for the running system
++ fi
++ mounted=1
++ else
++ # again, do not mount btrfs ro
++ mount -t btrfs -o subvol="$subvol" -U "$UUID" "$tmpmnt"
++ mpoint="$tmpmnt"
++ fi
++ test="/usr/lib/os-probes/mounted/90linux-distro"
++ if [ -f "$test" ] && [ -x "$test" ]; then
++ debug "running subtest $test"
++ if "$test" "$partition" "$mpoint" btrfs "UUID=$UUID" "subvol=$subvol"; then
++ debug "os found by subtest $test on subvol $subvol"
++ found=1
++ fi
++ fi
++ if [ -z "$mounted" ]; then
++ if ! umount "$tmpmnt"; then
++ warn "failed to umount $tmpmnt"
++ fi
++ fi
++ done
++ fi
+ rmdir "$tmpmnt" || true
+ if [ "$found" ]; then
+ exit 0
@@ -481,16 +487,16 @@ Bug: https://bugs.gentoo.org/790434
grub-mount "$partition" "$tmpmnt" 2>/dev/null; then
--- a/os-probes/mounted/common/90linux-distro
+++ b/os-probes/mounted/common/90linux-distro
-@@ -7,6 +7,8 @@
+@@ -7,6 +7,8 @@ set -e
partition="$1"
dir="$2"
type="$3"
+uuid="$4"
+subvol="$5"
-
+
# This test is inaccurate, but given separate / and /boot partitions and the
# fact that only some architectures have ld-linux.so, I can't see anything
-@@ -143,7 +145,11 @@
+@@ -143,7 +145,11 @@ if (ls "$dir"/lib*/ld*.so* && [ -d "$dir/boot" ] || ls "$dir"/usr/lib*/ld*.so*)
fi
label="$(count_next_label "$short")"
diff --git a/sys-boot/os-prober/files/os-prober-1.79-detect-void.patch b/sys-boot/os-prober/files/os-prober-1.79-detect-void.patch
new file mode 100644
index 000000000000..9d7855906b78
--- /dev/null
+++ b/sys-boot/os-prober/files/os-prober-1.79-detect-void.patch
@@ -0,0 +1,20 @@
+Handle Void Linux detection. From upstream https://github.com/void-linux/void-packages/blob/2fd8d4df94855a157a4de16c61d54153e16ef185/srcpkgs/os-prober/patches/detect-void.patch
+
+Bug: https://bugs.gentoo.org/817905
+
+--- a/os-probes/mounted/common/90linux-distro
++++ b/os-probes/mounted/common/90linux-distro
+@@ -116,6 +116,13 @@
+ elif [ -e "$dir/sbin/pkgtool" ]; then
+ short="Slackware"
+ long="Slackware Linux"
++ elif [ -e "$dir/sbin/xbps-install" ]; then
++ short="Void"
++ if file "$dir/sbin/xbps-install"|grep -q 32-bit; then
++ long="Void Linux 32"
++ else
++ long="Void Linux 64"
++ fi
+ elif grep -qs OpenLinux "$dir/etc/issue"; then
+ short="Caldera"
+ long="Caldera OpenLinux"
diff --git a/sys-boot/os-prober/files/os-prober-1.79-handle-multiple-initrd-paths.patch b/sys-boot/os-prober/files/os-prober-1.79-handle-multiple-initrd-paths.patch
index 0b477c17c362..ceab85a92727 100644
--- a/sys-boot/os-prober/files/os-prober-1.79-handle-multiple-initrd-paths.patch
+++ b/sys-boot/os-prober/files/os-prober-1.79-handle-multiple-initrd-paths.patch
@@ -2,14 +2,15 @@ Backport handling of multiple initrd paths, like those needed by Manjaro
installations. Note, it still requires resolution of
https://savannah.gnu.org/bugs/index.php?47681 on grub's end.
-Commit: https://salsa.debian.org/installer-team/os-prober/-/commit/53b920e106f13acf87ef8a275161e20f94feeb8a
+Commits: https://salsa.debian.org/installer-team/os-prober/-/commit/7641c2da0c81f78c5f2ee2a66a1c21350cab03fc
+ https://salsa.debian.org/installer-team/os-prober/-/commit/53b920e106f13acf87ef8a275161e20f94feeb8a
--- a/linux-boot-probes/mounted/common/40grub2
+++ b/linux-boot-probes/mounted/common/40grub2
-@@ -78,11 +78,21 @@
- fi
- ;;
- initrd)
+@@ -78,11 +78,21 @@ parse_grub_menu () {
+ fi
+ ;;
+ initrd)
- initrd="$(echo "$2" | sed 's/(.*)//')"
- # Initrd same.
- if [ "$partition" != "$bootpart" ]; then
@@ -30,6 +31,6 @@ Commit: https://salsa.debian.org/installer-team/os-prober/-/commit/53b920e106f13
+ initrd="$initrd $initrd_path"
+ fi
+ done
- ;;
- "}")
- entry_result
+ ;;
+ "}")
+ entry_result
diff --git a/sys-boot/os-prober/os-prober-1.79-r1.ebuild b/sys-boot/os-prober/os-prober-1.79-r1.ebuild
new file mode 100644
index 000000000000..b310aa3de302
--- /dev/null
+++ b/sys-boot/os-prober/os-prober-1.79-r1.ebuild
@@ -0,0 +1,105 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+inherit readme.gentoo-r1 toolchain-funcs
+
+DESCRIPTION="Utility to detect other OSs on a set of drives"
+HOMEPAGE="https://salsa.debian.org/installer-team/os-prober"
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://salsa.debian.org/installer-team/${PN}.git"
+else
+ SRC_URI="mirror://debian/pool/main/${PN::1}/${PN}/${PN}_${PV}.tar.xz"
+ KEYWORDS="~amd64 ~x86"
+ S="${WORKDIR}"/${PN}
+fi
+
+LICENSE="GPL-3"
+SLOT="0"
+
+# grub-mount needed per bug #607518
+RDEPEND="sys-boot/grub:2[mount]"
+
+# bug 594250
+QA_MULTILIB_PATHS="usr/lib/os-prober/.*"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-1.79-handle-multiple-initrd-paths.patch
+ "${FILESDIR}"/${PN}-1.79-mdraid-detection.patch
+ "${FILESDIR}"/${PN}-1.79-btrfs-subvolume-detection.patch
+ "${FILESDIR}"/${PN}-1.79-use-fstab-name.patch
+ "${FILESDIR}"/${PN}-1.79-mounted-boot-partition-fix.patch
+ "${FILESDIR}"/${PN}-1.79-fix-busy-umount-message.patch
+ "${FILESDIR}"/${PN}-1.79-efi-chroot-blkid-fallback.patch
+ "${FILESDIR}"/${PN}-1.79-detect-void.patch
+)
+
+DOC_CONTENTS="
+ If you intend for os-prober to detect versions of Windows installed on
+ NTFS-formatted partitions, your system must be capable of reading the
+ NTFS filesystem. One way to do this is by installing sys-fs/ntfs3g.
+
+ NOTE: Since sys-boot/grub-2.06-rc1, grub-mkconfig disables os-prober by default.
+ To enable it, add GRUB_DISABLE_OS_PROBER=false to /etc/default/grub.
+"
+
+src_prepare() {
+ default
+ # use default GNU rules
+ rm Makefile || die 'rm Makefile failed'
+}
+
+src_compile() {
+ tc-export CC
+ emake newns
+}
+
+src_install() {
+ dobin os-prober linux-boot-prober
+
+ # Note: as no shared libraries are installed, /usr/lib is correct
+ exeinto /usr/lib/os-prober
+ doexe newns
+
+ insinto /usr/share/os-prober
+ doins common.sh
+
+ keepdir /var/lib/os-prober
+
+ local debarch=${ARCH%-*} dir
+
+ case ${debarch} in
+ amd64) debarch=x86 ;;
+ ppc|ppc64) debarch=powerpc ;;
+ esac
+
+ for dir in os-probes{,/mounted,/init} linux-boot-probes{,/mounted}; do
+ exeinto /usr/lib/${dir}
+ doexe ${dir}/common/*
+ if [[ -d ${dir}/${debarch} ]]; then
+ for exe in ${dir}/${debarch}/*; do
+ [[ ! -d "${exe}" ]] && doexe "${exe}"
+ done
+ fi
+ if [[ -d ${dir}/${debarch}/efi ]]; then
+ exeinto /usr/lib/${dir}/efi
+ doexe ${dir}/${debarch}/efi/*
+ fi
+ done
+
+ if use amd64 || use x86; then
+ exeinto /usr/lib/os-probes/mounted
+ doexe os-probes/mounted/powerpc/20macosx
+ fi
+
+ einstalldocs
+ dodoc debian/changelog
+
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ readme.gentoo_print_elog
+}