os-prober/os-prober-linux-distro-avoid-expensive-ld-file-test.patch
Michael Chang 2c62f81481 Accepting request 1044146 from home:michael-chang:branches:Base:System
- update to 1.81
- use %autosetup macro to unpack source and apply patch
- drop patch for upstream
  * os-prober-multiple-initrd.patch
- rediff
  * Improve-btrfs-handling-on-os-probing-for-grub2.patch
  * os-prober-linux-distro-avoid-expensive-ld-file-test.patch
  * os-prober-linux-distro-parse-os-release.patch
  * os-prober-linux-secure-boot.patch

OBS-URL: https://build.opensuse.org/request/show/1044146
OBS-URL: https://build.opensuse.org/package/show/Base:System/os-prober?expand=0&rev=107
2023-01-03 02:35:40 +00:00

309 lines
12 KiB
Diff

---
os-prober | 5
os-probes/mounted/common/90linux-distro | 280 +++++++++++++++-----------------
2 files changed, 138 insertions(+), 147 deletions(-)
--- a/os-probes/mounted/common/90linux-distro
+++ b/os-probes/mounted/common/90linux-distro
@@ -10,153 +10,139 @@
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
-# better. Make sure this test has a high number so that more accurate tests
-# can come first.
-# Unless volumes to checked are already mounted, they will be mounted using
-# GRUB's own filesystems through FUSE. Since these ATM doesn't support
-# symlinks we need to also check in $dir/usr/lib* for distributions that
-# moved /lib* to /usr and only left symlinks behind.
-# TODO: look for ld-linux.so on arches that have it
-if (ls "$dir"/lib*/ld*.so* && [ -d "$dir/boot" ] || ls "$dir"/usr/lib*/ld*.so*) >/dev/null 2>/dev/null; then
- if [ -e "$dir/etc/os-release" ]; then
- short="$(grep ^NAME= "$dir/etc/os-release" | sed 's/^[^=]*=//; s/^['\''"]\(.*\)['\''"]$/\1/; s/\\\(.\)/\1/g; s/[[:space:]].*//')"
- long="$(grep ^PRETTY_NAME= "$dir/etc/os-release" | sed 's/^[^=]*=//; s/^['\''"]\(.*\)['\''"]$/\1/; s/\\\(.\)/\1/g')"
- elif [ -e "$dir/usr/lib/os-release" ]; then
- short="$(grep ^NAME= "$dir/usr/lib/os-release" | sed 's/^[^=]*=//; s/^['\''"]\(.*\)['\''"]$/\1/; s/\\\(.\)/\1/g; s/[[:space:]].*//')"
- long="$(grep ^PRETTY_NAME= "$dir/usr/lib/os-release" | sed 's/^[^=]*=//; s/^['\''"]\(.*\)['\''"]$/\1/; s/\\\(.\)/\1/g')"
- elif [ -e "$dir/etc/debian_version" ]; then
- short="Debian"
- long="$(printf "Debian GNU/Linux (%s)\n" "$(cat "$dir/etc/debian_version")")"
- # RPM derived distributions may also have a redhat-release or
- # mandrake-release, so check their files first.
- elif [ -e "$dir/etc/altlinux-release" ]; then
- short="ALTLinux"
- long="$(cat "$dir/etc/altlinux-release")"
- elif [ -e "$dir/etc/magic-release" ]; then
- short="Magic"
- long="$(cat "$dir/etc/magic-release")"
- elif [ -e "$dir/etc/blackPanther-release" ]; then
- short="blackPanther"
- long="$(cat "$dir/etc/blackPanther-release")"
- elif [ -e "$dir/etc/ark-release" ]; then
- short="Ark"
- long="$(cat "$dir/etc/ark-release")"
- elif [ -e "$dir/etc/arch-release" ]; then
- short="Arch"
- long="$(cat "$dir/etc/arch-release")"
- elif [ -e "$dir/etc/asplinux-release" ]; then
- short="ASPLinux"
- long="$(cat "$dir/etc/asplinux-release")"
- elif [ -e "$dir/etc/lvr-release" ]; then
- short="LvR"
- long="$(cat "$dir/etc/lvr-release")"
- elif [ -e "$dir/etc/caos-release" ]; then
- short="cAos"
- long="$(cat "$dir/etc/caos-release")"
- elif [ -e "$dir/etc/aurox-release" ]; then
- short="Aurox"
- long="$(cat "$dir/etc/aurox-release")"
- elif [ -e "$dir/etc/engarde-release" ]; then
- short="EnGarde"
- long="$(cat "$dir/etc/engarde-release")"
- elif [ -e "$dir/etc/vine-release" ]; then
- short="Vine"
- long="$(cat "$dir/etc/vine-release")"
- elif [ -e "$dir/etc/whitebox-release" ]; then
- short="WhiteBox"
- long="$(cat "$dir/etc/whitebox-release")"
- elif [ -e "$dir/etc/pld-release" ]; then
- short="PLD"
- long="$(cat "$dir/etc/pld-release")"
- elif [ -e "$dir/etc/startcom-release" ]; then
- short="StartCom"
- long="$(cat "$dir/etc/startcom-release")"
- elif [ -e "$dir/etc/trustix-release" ]; then
- short="Trustix"
- long="$(cat "$dir/etc/trustix-release")"
- elif [ -e "$dir/etc/openna-release" ]; then
- short="OpenNA"
- long="$(cat "$dir/etc/openna-release")"
- elif [ -e "$dir/etc/mageia-release" ]; then
- short="Mageia"
- long="$(cat "$dir/etc/mageia-release")"
- elif [ -e "$dir/etc/conectiva-release" ]; then
- short="Conectiva"
- long="$(cat "$dir/etc/conectiva-release")"
- elif [ -e "$dir/etc/mandrake-release" ]; then
- short="Mandrake"
- long="$(cat "$dir/etc/mandrake-release")"
- elif [ -e "$dir/etc/fedora-release" ]; then
- short="Fedora"
- long="$(cat "$dir/etc/fedora-release")"
- elif [ -e "$dir/etc/redhat-release" ]; then
- short="RedHat"
- long="$(cat "$dir/etc/redhat-release")"
- elif [ -e "$dir/etc/SuSE-release" ]; then
- short="SUSE"
- long="$(head -n 1 "$dir/etc/SuSE-release")"
- elif [ -e "$dir/etc/gentoo-release" ]; then
- short="Gentoo"
- long="$(cat "$dir/etc/gentoo-release")"
- elif [ -e "$dir/etc/cobalt-release" ]; then
- short="Cobalt"
- long="$(cat "$dir/etc/cobalt-release")"
- elif [ -e "$dir/etc/yellowdog-release" ]; then
- short="YellowDog"
- long="$(cat "$dir/etc/yellowdog-release")"
- elif [ -e "$dir/etc/turbolinux-release" ]; then
- short="Turbolinux"
- long="$(cat "$dir/etc/turbolinux-release")"
- elif [ -e "$dir/etc/pardus-release" ]; then
- short="Pardus"
- long="$(cat "$dir/etc/pardus-release")"
- elif [ -e "$dir/etc/kanotix-version" ]; then
- short="Kanotix"
- long="$(cat "$dir/etc/kanotix-version")"
- elif [ -e "$dir/etc/slackware-version" ]; then
- short="Slackware"
- long="$(printf "Slackware Linux (%s)\n" "$(cat "$dir/etc/slackware-version")")"
- elif [ -e "$dir/sbin/pkgtool" ]; then
- short="Slackware"
- long="Slackware Linux"
- elif grep -qs OpenLinux "$dir/etc/issue"; then
- short="Caldera"
- long="Caldera OpenLinux"
- elif [ -e "$dir/etc/frugalware-release" ]; then
- short="Frugalware Linux"
- long="$(cat "$dir/etc/frugalware-release")"
- elif [ -e "$dir/etc/kdemar-release" ]; then
- short="K-DEMar"
- long="$(printf "K-DEMar GNU/Linux (%s)\n" "$(cat "$dir/etc/kdemar-release")")"
- elif [ -e "$dir/etc/lfs-release" ]; then
- short="LFS"
- long="$(printf "Linux From Scratch (%s)\n" "$(cat "$dir/etc/lfs-release")")"
- elif [ -e "$dir/etc/meego-release" ]; then
- short="MeeGo"
- long="$(head -1 "$dir/etc/meego-release")"
- elif [ -e "$dir/etc/4MLinux-version" ]; then
- short="4MLinux"
- long="4MLinux $(head -1 "$dir/etc/4MLinux-version")"
- elif [ -e "$dir/etc/devuan_version" ]; then
- short="Devuan"
- long="$(printf "Devuan GNU/Linux (%s)\n" "$(cat "$dir/etc/devuan_version")")"
- elif [ -e "$dir/etc/exherbo-release" ]; then
- short="Exherbo"
- long="Exherbo Linux"
- else
- short="Linux"
- long="unknown Linux distribution"
- fi
-
- label="$(count_next_label "$short")"
- if [ "x$type" = "xbtrfs" -a "x$uuid" != "x" -a "x$subvol" != "x" ]; then
- result "$partition:$long:$label:linux:$type:$uuid:$subvol"
- else
- result "$partition:$long:$label:linux"
- fi
- exit 0
+if [ -e "$dir/etc/os-release" ]; then
+ short="$(grep ^NAME= "$dir/etc/os-release" | sed 's/^[^=]*=//; s/^['\''"]\(.*\)['\''"]$/\1/; s/\\\(.\)/\1/g; s/[[:space:]].*//')"
+ long="$(grep ^PRETTY_NAME= "$dir/etc/os-release" | sed 's/^[^=]*=//; s/^['\''"]\(.*\)['\''"]$/\1/; s/\\\(.\)/\1/g')"
+elif [ -e "$dir/usr/lib/os-release" ]; then
+ short="$(grep ^NAME= "$dir/usr/lib/os-release" | sed 's/^[^=]*=//; s/^['\''"]\(.*\)['\''"]$/\1/; s/\\\(.\)/\1/g; s/[[:space:]].*//')"
+ long="$(grep ^PRETTY_NAME= "$dir/usr/lib/os-release" | sed 's/^[^=]*=//; s/^['\''"]\(.*\)['\''"]$/\1/; s/\\\(.\)/\1/g')"
+elif [ -e "$dir/etc/debian_version" ]; then
+ short="Debian"
+ long="$(printf "Debian GNU/Linux (%s)\n" "$(cat "$dir/etc/debian_version")")"
+# RPM derived distributions may also have a redhat-release or
+# mandrake-release, so check their files first.
+elif [ -e "$dir/etc/altlinux-release" ]; then
+ short="ALTLinux"
+ long="$(cat "$dir/etc/altlinux-release")"
+elif [ -e "$dir/etc/magic-release" ]; then
+ short="Magic"
+ long="$(cat "$dir/etc/magic-release")"
+elif [ -e "$dir/etc/blackPanther-release" ]; then
+ short="blackPanther"
+ long="$(cat "$dir/etc/blackPanther-release")"
+elif [ -e "$dir/etc/ark-release" ]; then
+ short="Ark"
+ long="$(cat "$dir/etc/ark-release")"
+elif [ -e "$dir/etc/arch-release" ]; then
+ short="Arch"
+ long="$(cat "$dir/etc/arch-release")"
+elif [ -e "$dir/etc/asplinux-release" ]; then
+ short="ASPLinux"
+ long="$(cat "$dir/etc/asplinux-release")"
+elif [ -e "$dir/etc/lvr-release" ]; then
+ short="LvR"
+ long="$(cat "$dir/etc/lvr-release")"
+elif [ -e "$dir/etc/caos-release" ]; then
+ short="cAos"
+ long="$(cat "$dir/etc/caos-release")"
+elif [ -e "$dir/etc/aurox-release" ]; then
+ short="Aurox"
+ long="$(cat "$dir/etc/aurox-release")"
+elif [ -e "$dir/etc/engarde-release" ]; then
+ short="EnGarde"
+ long="$(cat "$dir/etc/engarde-release")"
+elif [ -e "$dir/etc/vine-release" ]; then
+ short="Vine"
+ long="$(cat "$dir/etc/vine-release")"
+elif [ -e "$dir/etc/whitebox-release" ]; then
+ short="WhiteBox"
+ long="$(cat "$dir/etc/whitebox-release")"
+elif [ -e "$dir/etc/pld-release" ]; then
+ short="PLD"
+ long="$(cat "$dir/etc/pld-release")"
+elif [ -e "$dir/etc/startcom-release" ]; then
+ short="StartCom"
+ long="$(cat "$dir/etc/startcom-release")"
+elif [ -e "$dir/etc/trustix-release" ]; then
+ short="Trustix"
+ long="$(cat "$dir/etc/trustix-release")"
+elif [ -e "$dir/etc/openna-release" ]; then
+ short="OpenNA"
+ long="$(cat "$dir/etc/openna-release")"
+elif [ -e "$dir/etc/mageia-release" ]; then
+ short="Mageia"
+ long="$(cat "$dir/etc/mageia-release")"
+elif [ -e "$dir/etc/conectiva-release" ]; then
+ short="Conectiva"
+ long="$(cat "$dir/etc/conectiva-release")"
+elif [ -e "$dir/etc/mandrake-release" ]; then
+ short="Mandrake"
+ long="$(cat "$dir/etc/mandrake-release")"
+elif [ -e "$dir/etc/fedora-release" ]; then
+ short="Fedora"
+ long="$(cat "$dir/etc/fedora-release")"
+elif [ -e "$dir/etc/redhat-release" ]; then
+ short="RedHat"
+ long="$(cat "$dir/etc/redhat-release")"
+elif [ -e "$dir/etc/SuSE-release" ]; then
+ short="SUSE"
+ long="$(head -n 1 "$dir/etc/SuSE-release")"
+elif [ -e "$dir/etc/gentoo-release" ]; then
+ short="Gentoo"
+ long="$(cat "$dir/etc/gentoo-release")"
+elif [ -e "$dir/etc/cobalt-release" ]; then
+ short="Cobalt"
+ long="$(cat "$dir/etc/cobalt-release")"
+elif [ -e "$dir/etc/yellowdog-release" ]; then
+ short="YellowDog"
+ long="$(cat "$dir/etc/yellowdog-release")"
+elif [ -e "$dir/etc/turbolinux-release" ]; then
+ short="Turbolinux"
+ long="$(cat "$dir/etc/turbolinux-release")"
+elif [ -e "$dir/etc/pardus-release" ]; then
+ short="Pardus"
+ long="$(cat "$dir/etc/pardus-release")"
+elif [ -e "$dir/etc/kanotix-version" ]; then
+ short="Kanotix"
+ long="$(cat "$dir/etc/kanotix-version")"
+elif [ -e "$dir/etc/slackware-version" ]; then
+ short="Slackware"
+ long="$(printf "Slackware Linux (%s)\n" "$(cat "$dir/etc/slackware-version")")"
+elif [ -e "$dir/sbin/pkgtool" ]; then
+ short="Slackware"
+ long="Slackware Linux"
+elif grep -qs OpenLinux "$dir/etc/issue"; then
+ short="Caldera"
+ long="Caldera OpenLinux"
+elif [ -e "$dir/etc/frugalware-release" ]; then
+ short="Frugalware Linux"
+ long="$(cat "$dir/etc/frugalware-release")"
+elif [ -e "$dir/etc/kdemar-release" ]; then
+ short="K-DEMar"
+ long="$(printf "K-DEMar GNU/Linux (%s)\n" "$(cat "$dir/etc/kdemar-release")")"
+elif [ -e "$dir/etc/lfs-release" ]; then
+ short="LFS"
+ long="$(printf "Linux From Scratch (%s)\n" "$(cat "$dir/etc/lfs-release")")"
+elif [ -e "$dir/etc/meego-release" ]; then
+ short="MeeGo"
+ long="$(head -1 "$dir/etc/meego-release")"
+elif [ -e "$dir/etc/4MLinux-version" ]; then
+ short="4MLinux"
+ long="4MLinux $(head -1 "$dir/etc/4MLinux-version")"
+elif [ -e "$dir/etc/devuan_version" ]; then
+ short="Devuan"
+ long="$(printf "Devuan GNU/Linux (%s)\n" "$(cat "$dir/etc/devuan_version")")"
+elif [ -e "$dir/etc/exherbo-release" ]; then
+ short="Exherbo"
+ long="Exherbo Linux"
else
exit 1
fi
+
+label="$(count_next_label "$short")"
+if [ "x$type" = "xbtrfs" -a "x$uuid" != "x" -a "x$subvol" != "x" ]; then
+ result "$partition:$long:$label:linux:$type:$uuid:$subvol"
+else
+ result "$partition:$long:$label:linux"
+fi
+exit 0
--- a/os-prober
+++ b/os-prober
@@ -185,6 +185,11 @@
# be handled by 50mounted-tests so we can do a subvol only once.
type=$(blkid -o value -s TYPE $mapped || true)
if [ "$type" = btrfs ]; then
+ mpoint=$(grep "^$mapped " "$OS_PROBER_TMP/mounted-map" | head -n1 | cut -d " " -f 2)
+ mpoint="$(unescape_mount "$mpoint")"
+ if [ "$mpoint" = "/target/boot" ] || [ "$mpoint" = "/target" ] || [ "$mpoint" = "/" ]; then
+ continue
+ fi
uuid=$(blkid -o value -s UUID $mapped)
if grep -q "^$uuid" "$OS_PROBER_TMP/btrfs-vols" ; then
continue