diff options
Diffstat (limited to 'sys-boot/os-prober/files/os-prober-linux-distro-avoid-expensive-ld-file-test.patch')
-rw-r--r-- | sys-boot/os-prober/files/os-prober-linux-distro-avoid-expensive-ld-file-test.patch | 295 |
1 files changed, 295 insertions, 0 deletions
diff --git a/sys-boot/os-prober/files/os-prober-linux-distro-avoid-expensive-ld-file-test.patch b/sys-boot/os-prober/files/os-prober-linux-distro-avoid-expensive-ld-file-test.patch new file mode 100644 index 00000000..7a6e8a8b --- /dev/null +++ b/sys-boot/os-prober/files/os-prober-linux-distro-avoid-expensive-ld-file-test.patch @@ -0,0 +1,295 @@ +Index: os-prober/os-probes/mounted/common/90linux-distro +=================================================================== +--- os-prober.orig/os-probes/mounted/common/90linux-distro ++++ os-prober/os-probes/mounted/common/90linux-distro +@@ -10,147 +10,133 @@ 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 +-# 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/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")")" +- 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/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")")" + 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 +Index: os-prober/os-prober +=================================================================== +--- os-prober.orig/os-prober ++++ os-prober/os-prober +@@ -186,6 +186,11 @@ for partition in $(partitions); do + # 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 |