--- 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