[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#685159: os-prober does not detect Fedora



Package: os-prober
Version: 1.56
Followup-For: Bug #685159

The bug is caused by using GRUB's internal filesystems through FUSE
which doesn't support symlinks (at least not on ext4). This filesystem
is only used when the volume is not already mounted, therefore this bug
does not appear when the volume is previously mounted using a real
filesystem that properly supports symlinks.

The specific problem is in 90linux-distro, which checks for lib*/ld*.so*
in the target filesystem as a heuristic to recognize Linux root
filesystems. With broken symlinks this fails for distributions that
moved lib* to /usr and only left symlinks in place.

Attached patch fixes this by also checking for usr/lib*/ld*.so*.
Index: os-prober-1.56/os-probes/mounted/common/90linux-distro
===================================================================
--- os-prober-1.56.orig/os-probes/mounted/common/90linux-distro	2011-07-23 10:19:40.000000000 +0200
+++ os-prober-1.56/os-probes/mounted/common/90linux-distro	2012-11-23 02:15:50.800011728 +0100
@@ -12,8 +12,12 @@
 # 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* >/dev/null 2>/dev/null; then
+if (ls "$dir"/lib*/ld*.so* || ls "$dir"/usr/lib*/ld*.so*) >/dev/null 2>/dev/null; then
 	if [ -e "$dir/etc/debian_version" ]; then
 		short="Debian"
 		long="$(printf "Debian GNU/Linux (%s)\n" "$(cat "$dir/etc/debian_version")")"

Reply to: