Hello community, here is the log from the commit of package os-prober for openSUSE:Factory checked in at 2015-12-27 01:57:55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/os-prober (Old) and /work/SRC/openSUSE:Factory/.os-prober.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "os-prober" Changes: -------- --- /work/SRC/openSUSE:Factory/os-prober/os-prober.changes 2015-11-12 19:38:55.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.os-prober.new/os-prober.changes 2015-12-27 01:57:56.000000000 +0100 @@ -1,0 +2,13 @@ +Thu Dec 17 10:14:04 UTC 2015 - mch...@suse.com + +- The ld file tests cost too much as it transversed all files in + the given wildcard directory and path, we should avoid when not + necessary. (bsc#953987) + * added os-prober-linux-distro-avoid-expensive-ld-file-test.patch +- Fix missing linux16/initrd16 parsing in entry result +- Fix kernelfile path if separate boot partition on btrfs + * modified Improve-btrfs-handling-on-os-probing-for-grub2.patch +- fix os-prober failed to detect os in btrfs root tree (bsc#957018) + * added os-prober-btrfs-always-detect-default.patch + +------------------------------------------------------------------- New: ---- os-prober-btrfs-always-detect-default.patch os-prober-linux-distro-avoid-expensive-ld-file-test.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ os-prober.spec ++++++ --- /var/tmp/diff_new_pack.leJEJN/_old 2015-12-27 01:57:57.000000000 +0100 +++ /var/tmp/diff_new_pack.leJEJN/_new 2015-12-27 01:57:57.000000000 +0100 @@ -62,6 +62,10 @@ Patch19: os-prober-40grub-check-grub2.patch # PATCH-FIX-OPENSUSE: detect os on default subvolume in snapshot (bsc#954225) Patch21: os-prober-btrfs-snapshot-detection.patch +# PATCH-FIX-OPENSUSE: os-prober update broke Linux detection (bsc#957018) +Patch22: os-prober-btrfs-always-detect-default.patch +# PATCH-FIX-OPENSUSE: y2base runs at 100% cpu busy from beginning in installation of files to completion (bsc#953987) +Patch23: os-prober-linux-distro-avoid-expensive-ld-file-test.patch Requires: /bin/grep Requires: /bin/sed Requires: /sbin/modprobe @@ -102,6 +106,8 @@ %patch18 -p1 %patch19 -p1 %patch21 -p1 +%patch22 -p1 +%patch23 -p1 find . -name \*.orig -delete %build ++++++ Improve-btrfs-handling-on-os-probing-for-grub2.patch ++++++ --- /var/tmp/diff_new_pack.leJEJN/_old 2015-12-27 01:57:57.000000000 +0100 +++ /var/tmp/diff_new_pack.leJEJN/_new 2015-12-27 01:57:57.000000000 +0100 @@ -28,14 +28,20 @@ identical to the fs path). Signed-off-by: Egbert Eich <e...@suse.de> + +v2: +a. Fix missing linux16/initrd16 parsing in entry result +b. Fix kernelfile path if separate boot partition on btrfs + +Signed-off-by: Michael Chang <mch...@suse.com> --- linux-boot-probes/mounted/common/40grub2 | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) -diff --git a/linux-boot-probes/mounted/common/40grub2 b/linux-boot-probes/mounted/common/40grub2 -index b548585..ccdbebb 100755 ---- a/linux-boot-probes/mounted/common/40grub2 -+++ b/linux-boot-probes/mounted/common/40grub2 +Index: os-prober-1.61/linux-boot-probes/mounted/common/40grub2 +=================================================================== +--- os-prober-1.61.orig/linux-boot-probes/mounted/common/40grub2 ++++ os-prober-1.61/linux-boot-probes/mounted/common/40grub2 @@ -14,9 +14,19 @@ bootsv="$6" found_item=0 @@ -59,3 +65,30 @@ else kernelfile=$kernel fi +@@ -81,7 +91,7 @@ parse_grub_menu () { + ignore_item=1 + fi + ;; +- linux|linuxefi) ++ linux|linuxefi|linux16) + # Hack alert: sed off any (hdn,n) but + # assume the kernel is on the same + # partition. +@@ -90,14 +100,14 @@ 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|initrdefi) ++ initrd|initrdefi|initrd16) + initrd="$(echo "$2" | sed 's/(.*)//')" + # Initrd same. +- if [ "$partition" != "$bootpart" ]; then ++ if [ "$partition" != "$bootpart" -a "$type" != "btrfs" ]; then + initrd="/boot$initrd" + fi + ;; ++++++ os-prober-btrfs-always-detect-default.patch ++++++ Index: os-prober-1.61/linux-boot-prober =================================================================== --- os-prober-1.61.orig/linux-boot-prober +++ os-prober-1.61/linux-boot-prober @@ -67,7 +67,12 @@ if [ "$type" = btrfs ]; then fi if [ -z "$mpoint" ]; then # mount the btrfs root - if ! mount -o subvol=$subvol -t btrfs -U $UUID "$tmpmnt" 2>/dev/null; then + + if [ -n "$subvol" ]; then + opts="-o subvol=$subvol" + fi + + if ! mount $opts -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 Index: os-prober-1.61/os-probes/common/50mounted-tests =================================================================== --- os-prober-1.61.orig/os-probes/common/50mounted-tests +++ os-prober-1.61/os-probes/common/50mounted-tests @@ -99,6 +99,48 @@ if [ "$mounted" ]; then fi fi + +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 subvol processing here. Handle both unmounted and # mounted subvolumes. if [ "$types" = btrfs ]; then @@ -121,45 +163,23 @@ if [ "$types" = btrfs ]; then rmdir "$tmpmnt" || true exit 1 fi - if [ -z "$subvols" ]; then - debug "no subvols found on btrfs volume $UUID" - exit 1 - fi + found= - for subvol in $subvols; do - debug "begin btrfs processing for $UUID subvol=$subvol" - if [ "$subvol" != "$defaultvol" ]; then - if echo "$rosubvols" | grep -q -x "$subvol"; then - continue - fi - if echo "$sssubvols" | grep -q -x "$subvol"; then - continue - fi - 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 + # 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 - if [ -z "$mounted" ]; then - if ! umount "$tmpmnt"; then - warn "failed to umount $tmpmnt" - fi + debug "begin btrfs processing for $UUID subvol=$subvol" + if probe_subvol "$subvol" "$partition" "$UUID" "$tmpmnt"; then + found=1 fi done if [ "$found" ]; then ++++++ os-prober-linux-distro-avoid-expensive-ld-file-test.patch ++++++ Index: os-prober-1.70/os-probes/mounted/common/90linux-distro =================================================================== --- os-prober-1.70.orig/os-probes/mounted/common/90linux-distro +++ os-prober-1.70/os-probes/mounted/common/90linux-distro @@ -10,6 +10,113 @@ type="$3" uuid="$4" subvol="$5" +if [ -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/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")" # 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 @@ -19,126 +126,17 @@ subvol="$5" # 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* || 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")")" - # 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/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")" - 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 +elif (ls "$dir"/lib*/ld*.so* || ls "$dir"/usr/lib*/ld*.so*) >/dev/null 2>/dev/null; then + short="Linux" + long="unknown Linux distribution" 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-1.70/os-prober =================================================================== --- os-prober-1.70.orig/os-prober +++ os-prober-1.70/os-prober @@ -187,6 +187,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