diff --git a/kernel/drivers/module-virtualbox-guest/pspec.xml b/kernel/drivers/module-virtualbox-guest/pspec.xml
index 155b1667..9807042f 100644
--- a/kernel/drivers/module-virtualbox-guest/pspec.xml
+++ b/kernel/drivers/module-virtualbox-guest/pspec.xml
@@ -12,7 +12,7 @@
driver
Kernel modules for VirtualBox guest machines
This package provides the kernel modules needed for mouse integration and shared folder support between VirtualBox host and guest systems.
- https://sourceforge.net/projects/pisilinux/files/source/module-virtualbox-guest-6.0.10.tar.xz
+ https://sourceforge.net/projects/pisilinux/files/source/module-virtualbox-guest-6.0.12.tar.xz
kernel-module-headers
@@ -55,6 +55,13 @@
+
+ 2019-09-29
+ 6.0.12
+ Version bump.
+ Mustafa Cinasal
+ muscnsl@gmail.com
+
2019-08-04
6.0.10
diff --git a/kernel/drivers/module-virtualbox/pspec.xml b/kernel/drivers/module-virtualbox/pspec.xml
index 59713f6f..a890904d 100644
--- a/kernel/drivers/module-virtualbox/pspec.xml
+++ b/kernel/drivers/module-virtualbox/pspec.xml
@@ -12,7 +12,7 @@
driver
Kernel modules for VirtualBox
This package provides the kernel support for VirtualBox.
- https://sourceforge.net/projects/pisilinux/files/source/module-virtualbox-6.0.10.tar.xz
+ https://sourceforge.net/projects/pisilinux/files/source/module-virtualbox-6.0.12.tar.xz
kernel-module-headers
@@ -50,6 +50,13 @@
+
+ 2019-09-29
+ 6.0.12
+ Version bump.
+ Mustafa Cinasal
+ muscnsl@gmail.com
+
2019-08-04
6.0.10
diff --git a/system/boot/grub2/actions.py b/system/boot/grub2/actions.py
index fcbbd287..b1f30eaf 100644
--- a/system/boot/grub2/actions.py
+++ b/system/boot/grub2/actions.py
@@ -65,7 +65,7 @@ def install():
pisitools.insinto("/boot/grub2", "unicode.pf2")
# Insall our theme
- pisitools.insinto("/usr/share/grub/themes/","themes/pisilinux")
+ pisitools.insinto("/usr/share/grub/themes/pisilinux","themes/Pisilinux-Bluez-0.1/*")
#remove -r 0x0-0x7F entries to fix ugly fonts or find a suitable range parameter -r ***
shelltools.system("./grub-mkfont -o DejaVuSans-10.pf2 -r 0x0-0x7F -s 10 /usr/share/fonts/dejavu/DejaVuSans.ttf")
diff --git a/system/boot/grub2/files/grub-defaults b/system/boot/grub2/files/grub-defaults
index 3b229de5..e1aa59ef 100644
--- a/system/boot/grub2/files/grub-defaults
+++ b/system/boot/grub2/files/grub-defaults
@@ -46,7 +46,8 @@ GRUB_COLOR_HIGHLIGHT="black/white"
#GRUB_THEME="/path/to/gfxtheme"
#Possible locations
GRUB_THEME="/usr/share/grub/themes/pisilinux/theme.txt"
+#GRUB_THEME="/boot/grub/themes/Pisilinux-Bluez/theme.txt"
# Uncomment to get a beep at GRUB start
#GRUB_INIT_TUNE="480 440 1"
-#GRUB_SAVEDEFAULT="true"
\ No newline at end of file
+#GRUB_SAVEDEFAULT="true"
diff --git a/system/boot/grub2/pspec.xml b/system/boot/grub2/pspec.xml
index 17cd387b..5b9c08b8 100644
--- a/system/boot/grub2/pspec.xml
+++ b/system/boot/grub2/pspec.xml
@@ -14,8 +14,9 @@
GNU GRUB (short for GNU GRand Unified Bootloader) is a boot loader package from the GNU Project.
http://ftp.gnu.org/gnu/grub/grub-2.02.tar.xz
http://source.pisilinux.org/1.0/grub2_extras_915resolution_r10.tar.xz
- http://ftp.gnu.org/gnu/unifont/unifont-6.3.20131217/unifont-6.3.20131217.bdf.gz
- https://sourceforge.net/projects/pisilinux/files/source/grub2-theme-pisilinux-0.4.tar.xz
+ https://ftp.gnu.org/gnu/unifont/unifont-12.1.03/unifont_jp-12.1.03.bdf.gz
+
+ https://github.com/sebo28/Pisilinux-Bluez/archive/v0.1.tar.gz
autogen
binutils
@@ -88,6 +89,27 @@
+
+ 2019-10-09
+ 2.02
+ revert 2.02
+ Mustafa Cinasal
+ muscnsl@gmail.com
+
+
+ 2019-09-06
+ 2.04
+ Version bump
+ Mustafa Cinasal
+ muscnsl@gmail.com
+
+
+ 2019-10-05
+ 2.02
+ theme add
+ Ertuğrul Erata
+ ertugrulerata@gmail.com
+
2018-07-15
2.02
diff --git a/system/boot/os-prober/actions.py b/system/boot/os-prober/actions.py
index ed82676e..056a1065 100644
--- a/system/boot/os-prober/actions.py
+++ b/system/boot/os-prober/actions.py
@@ -9,6 +9,10 @@ from pisi.actionsapi import pisitools
from pisi.actionsapi import shelltools
def build():
+ shelltools.system("sed -i -e 's|grub-probe|grub2-probe|g' os-probes/common/50mounted-tests \
+ linux-boot-probes/common/50mounted-tests")
+ shelltools.system("sed -i -e 's|grub-mount|grub2-mount|g' os-probes/common/50mounted-tests \
+ linux-boot-probes/common/50mounted-tests common.sh")
shelltools.unlink("Makefile")
autotools.make("newns")
@@ -16,7 +20,8 @@ def install():
pisitools.dodoc("debian/copyright", "debian/changelog", "README")
pisitools.dobin("os-prober")
pisitools.dobin("linux-boot-prober")
- pisitools.insinto("/usr/lib/os-prober", "newns")
+ #pisitools.insinto("/usr/lib/os-prober", "newns")
+ pisitools.doexe("newns", "/usr/lib/os-prober/")
pisitools.insinto("/usr/share/os-prober", "common.sh")
for d in ("os-probes",
"os-probes/mounted",
diff --git a/system/boot/os-prober/files/fedora/os-prober-bootpart-name-fix.patch b/system/boot/os-prober/files/fedora/os-prober-bootpart-name-fix.patch
new file mode 100644
index 00000000..40a909da
--- /dev/null
+++ b/system/boot/os-prober/files/fedora/os-prober-bootpart-name-fix.patch
@@ -0,0 +1,29 @@
+Index: os-prober/common.sh
+===================================================================
+--- os-prober.orig/common.sh
++++ os-prober/common.sh
+@@ -269,7 +269,7 @@ linux_mount_boot () {
+ if [ "$bindfrom" != "$tmpmnt/boot" ]; then
+ if mount --bind "$bindfrom" "$tmpmnt/boot"; then
+ mounted=1
+- bootpart="$1"
++ bootpart="$tmppart"
+ else
+ debug "failed to bind-mount $bindfrom onto $tmpmnt/boot"
+ fi
+@@ -277,6 +277,15 @@ linux_mount_boot () {
+ fi
+ if [ "$mounted" ]; then
+ :
++ elif [ -e "$tmppart" ]; then
++ bootpart="$tmppart"
++ boottomnt="$tmppart"
++ elif [ -e "$tmpmnt/$tmppart" ]; then
++ bootpart="$tmppart"
++ boottomnt="$tmpmnt/$tmppart"
++ elif [ -e "/target/$tmppart" ]; then
++ bootpart="$tmppart"
++ boottomnt="/target/$tmppart"
+ elif [ -e "$1" ]; then
+ bootpart="$1"
+ boottomnt="$1"
diff --git a/system/boot/os-prober/files/fedora/os-prober-btrfsfix.patch b/system/boot/os-prober/files/fedora/os-prober-btrfsfix.patch
new file mode 100644
index 00000000..1047d249
--- /dev/null
+++ b/system/boot/os-prober/files/fedora/os-prober-btrfsfix.patch
@@ -0,0 +1,472 @@
+diff --git a/common.sh b/common.sh
+index c2c5f46..8fb3c5f 100644
+--- a/common.sh
++++ b/common.sh
+@@ -155,6 +155,7 @@ parse_proc_mounts () {
+ done
+ }
+
++# add forth parameter to pickup btrfs subvol info
+ parsefstab () {
+ while read -r line; do
+ case "$line" in
+@@ -165,12 +166,22 @@ parsefstab () {
+ set -f
+ set -- $line
+ set +f
+- printf '%s %s %s\n' "$1" "$2" "$3"
++ printf '%s %s %s %s\n' "$1" "$2" "$3" "$4"
+ ;;
+ esac
+ done
+ }
+
++#check_btrfs_mounted $bootsv $bootuuid)
++check_btrfs_mounted () {
++ bootsv="$1"
++ bootuuid="$2"
++ bootdev=$(blkid | grep "$bootuuid" | cut -d ':' -f 1)
++ bindfrom=$(grep " btrfs " /proc/self/mountinfo |
++ grep " $bootdev " | grep " /$bootsv " | cut -d ' ' -f 5)
++ printf "%s" "$bindfrom"
++}
++
+ unescape_mount () {
+ printf %s "$1" | \
+ sed 's/\\011/ /g; s/\\012/\n/g; s/\\040/ /g; s/\\134/\\/g'
+diff --git a/linux-boot-prober b/linux-boot-prober
+index e32dc84..2a60fa2 100755
+--- a/linux-boot-prober
++++ b/linux-boot-prober
+@@ -5,16 +5,143 @@ set -e
+
+ newns "$@"
+ require_tmpdir
++ERR="n"
++
++tmpmnt=/var/lib/os-prober/mount
++if [ ! -d "$tmpmnt" ]; then
++ mkdir "$tmpmnt"
++fi
++
++mounted=
++bootmnt=
++bootsv=
++bootuuid=
+
+ grep "^/dev/" /proc/mounts | parse_proc_mounts >"$OS_PROBER_TMP/mounted-map" || true
+
+-partition="$1"
++if [ -z "$1" ]; then
++ ERR=y
++elif [ "$1" = btrfs -a -z "$2" ]; then
++ ERR=y
++elif [ "$1" = btrfs -a -z "$3" ]; then
++ ERR=y
++elif [ "$1" = btrfs ]; then
++ type=btrfs
++ echo "$2" | grep -q "^UUID=" || ERR=y
++ echo "$3" | grep -q "^subvol=" || ERR=y
++ export "$2"
++ export "$3"
++ partition=$(blkid | grep "$UUID" | cut -d ':' -f 1 | tr '\n' ' ' | cut -d ' ' -f 1)
++ debug "btrfs: partition=$partition, UUID=$UUID, subvol=$subvol"
++else
++ partition="$1"
++ type=other
++fi
+
+-if [ -z "$partition" ]; then
++if [ "x$ERR" != xn ]; then
+ echo "usage: linux-boot-prober partition" >&2
++ echo " linux-boot-prober btrfs UUID=<> subvol=<>" >&2
+ exit 1
+ fi
+
++if [ "$type" = btrfs ]; then
++ # handle all of the btrfs stuff here
++ if [ ! -e "/proc/self/mountinfo" ]; then
++ warn "/proc/self/mountinfo does not exist, exiting"
++ umount "$tmpmnt" 2>/dev/null
++ rmdir "$tmpmnt" 2>/dev/null
++ exit 1
++ fi
++ mpoint=$(grep "btrfs" /proc/self/mountinfo | grep " /$subvol " | grep " $partition " | cut -d ' ' -f 5)
++ if [ "$mpoint" = "/" ]; then
++ warn "specifying active root not valid, exiting"
++ umount "$tmpmnt" 2>/dev/null
++ rmdir "$tmpmnt" 2>/dev/null
++ exit 1
++ fi
++ if [ "$mpoint" = "$tmpmnt" ]; then
++ warn "btrfs subvol=$subvool, UUID=$UUID, already mounted on $tmpmnt **ERROR**"
++ umount "$tmpmnt" 2>/dev/null
++ rmdir "$tmpmnt" 2>/dev/null
++ exit 1
++ fi
++ if [ -z "$mpoint" ]; then
++ # mount the btrfs root
++ if ! mount -o subvol=$subvol -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
++ rmdir "$tmpmnt" 2>/dev/null
++ exit 1
++ fi
++ else
++ # bind-mount
++ if ! mount -o bind "$mpoint" "$tmpmnt" 2>/dev/null; then
++ warn "error mounting btrfs bindfrom=$mpoint subvol=$subvol UUID=$UUID"
++ umount "$tmpmnt/boot" 2>/dev/null
++ umount "$tmpmnt" 2>/dev/null
++ rmdir "$tmpmnt" 2>/dev/null
++ exit 1
++ fi
++ fi
++ debug "mounted btrfs $partition, subvol=$subvol on $tmpmnt"
++ if [ ! -e "$tmpmnt/etc/fstab" ]; then
++ warn "btrfs subvol=$subvol not root"
++ umount "$tmpmnt" 2>/dev/null
++ rmdir "$tmpmnt" 2>/dev/null
++ exit 1
++ fi
++ bootmnt=$(parsefstab < "$tmpmnt/etc/fstab" | grep " /boot ") || true
++ if [ -z "$bootmnt" ]; then
++ # /boot is part of the root
++ bootpart="$partition"
++ bootsv="$subvol"
++ elif echo "$bootmnt" | cut -d ' ' -f 3 | grep -q "btrfs"; then
++ # separate btrfs /boot subvolume
++ bootsv=$(echo "$bootmnt" | cut -d ' ' -f 4 | grep "^subvol=" | sed "s/subvol=//" )
++ bootuuid=$(echo "$bootmnt" | cut -d ' ' -f 1 | grep "^UUID=" | sed "s/UUID=//" )
++ debug "mounting btrfs $tmpmnt/boot UUID=$bootuuid subvol=$bootsv"
++ bindfrom=$(check_btrfs_mounted $bootsv $bootuuid)
++ if [ -n "$bindfrom" ]; then
++ # already mounted some place
++ if ! mount -o bind $bindfrom "$tmpmnt/boot" 2>/dev/null; then
++ warn "error bind mounting btrfs boot subvol=$bootsv, from=$bindfrom"
++ umount "$tmpmnt/boot" 2>/dev/null
++ umount "$tmpmnt" 2>/dev/null
++ rmdir "$tmpmnt" 2>/dev/null
++ exit 1
++ fi
++ elif ! mount -o subvol=$bootsv -t btrfs -U $bootuuid "$tmpmnt/boot" 2>/dev/null; then
++ warn "error mounting btrfs boot partition subvol=$bootsv, UUID=$bootuuid"
++ umount "$tmpmnt/boot" 2>/dev/null
++ umount "$tmpmnt" 2>/dev/null
++ rmdir "$tmpmnt" 2>/dev/null
++ exit 1
++ fi
++ bootpart=$(grep " btrfs " /proc/self/mountinfo | grep " /$bootsv " | cut -d ' ' -f 10)
++ else
++ # non-btrfs partition or logical volume
++ linux_mount_boot $partition $tmpmnt
++ bootpart="${mountboot%% *}"
++ bootsv=
++ fi
++
++ test="/usr/lib/linux-boot-probes/mounted/40grub2"
++ if [ -f $test ] && [ -x $test ]; then
++ debug "running $test $partition $bootpart $tmpmnt $type $subvol $bootsv"
++ if $test "$partition" "$bootpart" "$tmpmnt" "$type" "$subvol" "$bootsv"; then
++ debug "$test succeeded"
++ fi
++ fi
++ umount "$tmpmnt/boot" 2>/dev/null || true
++ if ! umount "$tmpmnt" 2>/dev/null; then
++ warn "problem umount $tmpmnt"
++ fi
++ rmdir "$tmpmnt" 2>/dev/null || true
++
++ exit 0
++fi
++
+ if ! mapped="$(mapdevfs "$partition")"; then
+ log "Device '$partition' does not exist; skipping"
+ continue
+@@ -22,8 +149,8 @@ fi
+
+ if ! grep -q "^$mapped " "$OS_PROBER_TMP/mounted-map"; then
+ for test in /usr/lib/linux-boot-probes/*; do
+- debug "running $test"
+ if [ -x $test ] && [ -f $test ]; then
++ debug "running $test"
+ if $test "$partition"; then
+ debug "linux detected by $test"
+ break
+diff --git a/linux-boot-probes/mounted/common/40grub2 b/linux-boot-probes/mounted/common/40grub2
+index 885614e..db5cbfd 100755
+--- a/linux-boot-probes/mounted/common/40grub2
++++ b/linux-boot-probes/mounted/common/40grub2
+@@ -2,17 +2,30 @@
+ . /usr/share/os-prober/common.sh
+ set -e
+
++# add support for btrfs with no separate /boot
++# that is, rootsv = bootsv
+ partition="$1"
+ bootpart="$2"
+ mpoint="$3"
+ type="$4"
++rootsv="$5"
++bootsv="$6"
+
+ found_item=0
+
+ entry_result () {
++ if [ "x$type" = "xbtrfs" -a "$partition" = "$bootpart" ]; then
++ # trim off the leading subvol
++ kernelfile=$(echo "$kernel" | cut -d '/' -f 2- | cut -d '/' -f 2-)
++ if [ "x$rootsv" != "x$bootsv" ]; then
++ kernelfile="/boot/$kernelfile"
++ fi
++ else
++ kernelfile=$kernel
++ fi
+ if [ "$ignore_item" = 0 ] && \
+ [ -n "$kernel" ] && \
+- [ -e "$mpoint/$kernel" ]; then
++ [ -e "$mpoint/$kernelfile" ]; then
+ result "$rootpart:$bootpart:$title:$kernel:$initrd:$parameters"
+ found_item=1
+ fi
+diff --git a/os-prober b/os-prober
+index 8852887..482c3c2 100755
+--- a/os-prober
++++ b/os-prober
+@@ -76,9 +76,12 @@ partitions () {
+
+ # Also detect OSes on LVM volumes (assumes LVM is active)
+ if type lvs >/dev/null 2>&1; then
+- echo "$(LVM_SUPPRESS_FD_WARNINGS=1 log_output lvs --noheadings --separator : -o vg_name,lv_name |
++ echo "$(LVM_SUPPRESS_FD_WARNINGS=1 log_output lvs --noheadings --separator : -o vg_name,lv_name 2>/dev/null |
+ sed "s|-|--|g;s|^[[:space:]]*\(.*\):\(.*\)$|/dev/mapper/\1-\2|")"
+ fi
++
++ # now lets make sure we got all of the btrfs partitions and disks
++ blkid | grep 'TYPE="btrfs"' | cut -d ':' -f 1
+ }
+
+ parse_proc_swaps () {
+@@ -136,6 +139,8 @@ if [ -f /proc/mdstat ] ; then
+ grep "^md" /proc/mdstat | cut -d: -f2- | parse_proc_mdstat >"$OS_PROBER_TMP/raided-map" || true
+ fi
+
++: >"$OS_PROBER_TMP/btrfs-vols"
++
+ for partition in $(partitions); do
+ if ! mapped="$(mapdevfs "$partition")"; then
+ log "Device '$partition' does not exist; skipping"
+@@ -154,7 +159,26 @@ for partition in $(partitions); do
+ continue
+ fi
+
+- if ! grep -q "^$mapped " "$OS_PROBER_TMP/mounted-map" ; then
++ # do btrfs processing here; both mounted and unmounted will
++ # 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
++ uuid=$(blkid -o value -s UUID $mapped)
++ if grep -q "^$uuid" "$OS_PROBER_TMP/btrfs-vols" ; then
++ continue
++ fi
++ debug "btrfs volume uuid=$uuid partition=$partition"
++ echo "$uuid" >>"$OS_PROBER_TMP/btrfs-vols"
++ test="/usr/lib/os-probes/50mounted-tests"
++ if [ -f "$test" ] && [ -x "$test" ]; then
++ debug "running $test on btrfs $partition"
++ if "$test" btrfs "$uuid" "$partition"; then
++ debug "os detected by $test"
++ continue
++ fi
++ fi
++
++ elif ! grep -q "^$mapped " "$OS_PROBER_TMP/mounted-map" ; then
+ for test in /usr/lib/os-probes/*; do
+ if [ -f "$test" ] && [ -x "$test" ]; then
+ debug "running $test on $partition"
+diff --git a/os-probes/common/50mounted-tests b/os-probes/common/50mounted-tests
+index 2951ef9..e33eb82 100755
+--- a/os-probes/common/50mounted-tests
++++ b/os-probes/common/50mounted-tests
+@@ -19,19 +19,31 @@ do_unmount() {
+ rmdir "$tmpmnt" || true
+ }
+
+-types="$(fs_type "$partition")"
++if [ "x$1" = xbtrfs ]; then
++ types=btrfs
++ if [ -z "$2" -o -z "$3" ]; then
++ debug "missing btrfs parameters, exiting"
++ exit 1
++ fi
++ UUID="$2"
++ BTRFSDEV="$3"
++else
++ partition="$1"
++ types="$(fs_type "$partition")" || types=NOT-DETECTED
++fi
++
+ if [ "$types" = NOT-DETECTED ]; then
+ debug "$1 type not recognised; skipping"
+- exit 0
++ exit 1
+ elif [ "$types" = swap ]; then
+ debug "$1 is a swap partition; skipping"
+- exit 0
++ exit 1
+ elif [ "$types" = crypto_LUKS ]; then
+ debug "$1 is a LUKS partition; skipping"
+- exit 0
++ exit 1
+ elif [ "$types" = LVM2_member ]; then
+ debug "$1 is an LVM member; skipping"
+- exit 0
++ exit 1
+ elif [ "$types" = ntfs ]; then
+ if type ntfs-3g >/dev/null 2>&1; then
+ types='ntfs-3g ntfs'
+@@ -40,7 +52,7 @@ elif [ -z "$types" ]; then
+ if type cryptsetup >/dev/null 2>&1 && \
+ cryptsetup luksDump "$partition" >/dev/null 2>&1; then
+ debug "$1 is a LUKS partition; skipping"
+- exit 0
++ exit 1
+ fi
+ for type in $(grep -v nodev /proc/filesystems); do
+ # hfsplus filesystems are mountable as hfs. Try hfs last so
+@@ -63,6 +75,108 @@ if [ ! -d "$tmpmnt" ]; then
+ fi
+
+ mounted=
++
++# all btrfs processing here. Handle both unmounted and
++# mounted subvolumes.
++if [ "$types" = btrfs ]; then
++ partition="$BTRFSDEV"
++ debug "begin btrfs processing for $UUID"
++ # note that the btrfs volume must not be mounted ro
++ if mount -t btrfs -U "$UUID" "$tmpmnt" 2>/dev/null; then
++ debug "btrfs volume $UUID mounted"
++ else
++ warn "cannot mount btrfs volume $UUID, exiting"
++ rmdir "$tmpmnt" || true
++ exit 1
++ fi
++ # besides regular subvols, get ro and snapshot so thet can be excluded
++ subvols=$(btrfs subvolume list "$tmpmnt" | cut -d ' ' -f 9)
++ rosubvols=$(btrfs subvolume list -r "$tmpmnt" | cut -d ' ' -f 9)
++ sssubvols=$(btrfs subvolume list -s "$tmpmnt" | cut -d ' ' -f 14)
++ if ! umount "$tmpmnt"; then
++ warn "failed to umount btrfs volume on $tmpmnt"
++ rmdir "$tmpmnt" || true
++ exit 1
++ fi
++
++ found=
++ mounted=
++
++ mpoint="$(grep btrfs /proc/self/mountinfo | grep "$partition " | cut -d ' ' -f 5)"
++ if [ -n "$mpoint" -a "x$mpoint" = "x/" ]; then
++ debug "This is the root for the running system" #running system must be done elsewhere
++ else
++ #partition was not root of running system, so lets look for bootable subvols
++ if [ -n "$mpoint" ] ; then
++ mounted=1 #partition was already mounted,so lets not unmount it when done
++ else
++ # again, do not mount btrfs ro
++ mount -t btrfs -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"; then
++ debug "os found by subtest $test on $partition"
++ found=1
++ fi
++ fi
++ if [ -z "$mounted" ]; then
++ if ! umount "$tmpmnt"; then
++ warn "failed to umount $tmpmnt"
++ fi
++ fi
++ fi
++
++ if [ -z "$subvols" ]; then
++ debug "no subvols found on btrfs volume $UUID"
++ else
++ found=
++ for subvol in $subvols; do
++ debug "begin btrfs processing for $UUID subvol=$subvol"
++ if echo "$rosubvols" | grep -q -x "$subvol"; then
++ continue
++ fi
++ if echo "$sssubvols" | grep -q -x "$subvol"; then
++ continue
++ 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
++ fi
++ if [ -z "$mounted" ]; then
++ if ! umount "$tmpmnt"; then
++ warn "failed to umount $tmpmnt"
++ fi
++ fi
++ done
++ fi
++ rmdir "$tmpmnt" || true
++ if [ "$found" ]; then
++ exit 0
++ else
++ exit 1
++ fi
++fi
++
+ if type grub-mount >/dev/null 2>&1 && \
+ type grub-probe >/dev/null 2>&1 && \
+ grub-mount "$partition" "$tmpmnt" 2>/dev/null; then
+diff --git a/os-probes/mounted/common/90linux-distro b/os-probes/mounted/common/90linux-distro
+index badfbb1..9bc5154 100755
+--- a/os-probes/mounted/common/90linux-distro
++++ b/os-probes/mounted/common/90linux-distro
+@@ -7,6 +7,8 @@ set -e
+ partition="$1"
+ dir="$2"
+ 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
+@@ -143,7 +145,11 @@ if (ls "$dir"/lib*/ld*.so* && [ -d "$dir/boot" ] || ls "$dir"/usr/lib*/ld*.so*)
+ fi
+
+ label="$(count_next_label "$short")"
+- result "$partition:$long:$label:linux"
++ 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
+ else
+ exit 1
diff --git a/system/boot/os-prober/files/fedora/os-prober-factor-out-logger.patch b/system/boot/os-prober/files/fedora/os-prober-factor-out-logger.patch
new file mode 100644
index 00000000..52cb7cea
--- /dev/null
+++ b/system/boot/os-prober/files/fedora/os-prober-factor-out-logger.patch
@@ -0,0 +1,107 @@
+Index: os-prober/common.sh
+===================================================================
+--- os-prober.orig/common.sh
++++ os-prober/common.sh
+@@ -62,10 +62,14 @@ cache_progname() {
+ esac
+ }
+
+-log() {
+- cache_progname
+- logger -t "$progname" "$@"
+-}
++# fd_logger: bind value now, possibly after assigning default.
++eval '
++ log() {
++ cache_progname
++ echo "$progname: $@" 1>&'${fd_logger:=9}'
++ }
++'
++export fd_logger # so subshells inherit current value by default
+
+ error() {
+ log "error: $@"
+@@ -81,10 +85,14 @@ debug() {
+ fi
+ }
+
+-result () {
+- log "result:" "$@"
+- echo "$@"
+-}
++# fd_result: bind value now, possibly after assigning default.
++eval '
++ result() {
++ log "result:" "$@"
++ echo "$@" 1>&'${fd_result:=1}'
++ }
++'
++export fd_result # so subshells inherit current value by default
+
+ # shim to make it easier to use os-prober outside d-i
+ if ! type mapdevfs >/dev/null 2>&1; then
+Index: os-prober/linux-boot-prober
+===================================================================
+--- os-prober.orig/linux-boot-prober
++++ os-prober/linux-boot-prober
+@@ -1,4 +1,12 @@
+ #!/bin/sh
++
++# dash shell does not have "{varname}>&1" feature that bash shell has
++# for auto-assignment of new filedescriptors.
++# It is cumbersome to write the 'eval' to use our own variables in redirections.
++# Therefore use fixed numbers.
++export fd_result=3 # file descriptor for external results
++export fd_logger=9 # file descriptor for input to logger
++
+ . /usr/share/os-prober/common.sh
+
+ set -e
+@@ -19,6 +27,7 @@ bootuuid=
+
+ grep "^/dev/" /proc/mounts | parse_proc_mounts >"$OS_PROBER_TMP/mounted-map" || true
+
++( (
+ if [ -z "$1" ]; then
+ ERR=y
+ elif [ "$1" = btrfs -a -z "$2" ]; then
+@@ -186,3 +195,5 @@ else
+ fi
+ fi
+ fi
++) 9>&1 | logger 1>&- # fd_logger
++) 3>&1 # fd_result
+Index: os-prober/os-prober
+===================================================================
+--- os-prober.orig/os-prober
++++ os-prober/os-prober
+@@ -1,7 +1,14 @@
+ #!/bin/sh
+ set -e
+
+-. /usr/share/os-prober/common.sh
++# dash shell does not have "{varname}>&1" feature that bash shell has
++# for auto-assignment of new filedescriptors.
++# It is cumbersome to write the 'eval' to use our own variables in redirections.
++# Therefore use fixed numbers.
++export fd_result=3 # file descriptor for external results
++export fd_logger=9 # file descriptor for input to logger
++
++ . /usr/share/os-prober/common.sh
+
+ newns "$@"
+ require_tmpdir
+@@ -136,6 +143,7 @@ fi
+
+ : >"$OS_PROBER_TMP/btrfs-vols"
+
++( (
+ for partition in $(partitions); do
+ if ! mapped="$(mapdevfs "$partition")"; then
+ log "Device '$partition' does not exist; skipping"
+@@ -200,3 +208,5 @@ for partition in $(partitions); do
+ fi
+ fi
+ done
++) 9>&1 | logger 1>&- # fd_logger
++) 3>&1 # fd_result
diff --git a/system/boot/os-prober/files/fedora/os-prober-factored-logger-efi-fix.patch b/system/boot/os-prober/files/fedora/os-prober-factored-logger-efi-fix.patch
new file mode 100644
index 00000000..5c66fa00
--- /dev/null
+++ b/system/boot/os-prober/files/fedora/os-prober-factored-logger-efi-fix.patch
@@ -0,0 +1,16 @@
+Index: os-prober/os-probes/mounted/x86/05efi
+===================================================================
+--- os-prober.orig/os-probes/mounted/x86/05efi
++++ os-prober/os-probes/mounted/x86/05efi
+@@ -59,7 +59,11 @@ ret=1
+ for test in /usr/lib/os-probes/mounted/efi/*; do
+ debug "running subtest $test"
+ if [ -f "$test" ] && [ -x "$test" ]; then
++ # we need results of subtest in stdout
++ orig_fd_res=$fd_result
++ export fd_result=1
+ entry=$("$test" "$mpoint/$efi")
++ export fd_result=$orig_fd_res
+ if [ -n "$entry" ]; then
+ debug "bootloader $entry found by subtest $test"
+ ret=0
diff --git a/system/boot/os-prober/files/fedora/os-prober-gentoo-fix.patch b/system/boot/os-prober/files/fedora/os-prober-gentoo-fix.patch
new file mode 100644
index 00000000..8545db25
--- /dev/null
+++ b/system/boot/os-prober/files/fedora/os-prober-gentoo-fix.patch
@@ -0,0 +1,13 @@
+Index: os-prober/linux-boot-probes/mounted/common/90fallback
+===================================================================
+--- os-prober.orig/linux-boot-probes/mounted/common/90fallback
++++ os-prober/linux-boot-probes/mounted/common/90fallback
+@@ -33,7 +33,7 @@ for kernpat in /vmlinuz /vmlinux /boot/v
+ # Dracut initramfses are named differently again.
+ initrdname3=$(echo "$kernfile" | sed "s/vmlinu[zx]/initramfs\*/" | sed 's/$/.img/')
+ # And Gentoo's also
+- initrdname4=$(echo "$kernfile" | sed "s/kernel/initramfs\*/")
++ initrdname4=$(echo "$kernfile" | sed "s/kernel\|vmlinu[zx]/initramfs\*/")
+ foundinitrd=0
+ for initrd in $(eval ls "$initrdname" "$initrdname1" "$initrdname2" "$initrdname3" "$initrdname4" 2>/dev/null); do
+ if [ "$initrd" != "$kernfile" ] && [ -f "$initrd" ] && [ ! -L "$initrd" ]; then
diff --git a/system/boot/os-prober/files/fedora/os-prober-grepfix.patch b/system/boot/os-prober/files/fedora/os-prober-grepfix.patch
new file mode 100644
index 00000000..4dadd4f5
--- /dev/null
+++ b/system/boot/os-prober/files/fedora/os-prober-grepfix.patch
@@ -0,0 +1,13 @@
+Index: os-prober/os-probes/mounted/x86/83haiku
+===================================================================
+--- os-prober.orig/os-probes/mounted/x86/83haiku
++++ os-prober/os-probes/mounted/x86/83haiku
+@@ -13,7 +13,7 @@ case "$type" in
+ *) debug "$partition is not a BeFS partition: exiting"; exit 1 ;;
+ esac
+
+-if head -c 512 "$partition" | grep -qs "system.haiku_loader"; then
++if head -c 512 "$partition" | grep -aqs "system.haiku_loader"; then
+ debug "Stage 1 bootloader found"
+ else
+ debug "Stage 1 bootloader not found: exiting"
diff --git a/system/boot/os-prober/files/fedora/os-prober-grub2-parsefix.patch b/system/boot/os-prober/files/fedora/os-prober-grub2-parsefix.patch
new file mode 100644
index 00000000..0ef8bdaf
--- /dev/null
+++ b/system/boot/os-prober/files/fedora/os-prober-grub2-parsefix.patch
@@ -0,0 +1,22 @@
+Index: os-prober-1.58/linux-boot-probes/mounted/common/40grub2
+===================================================================
+--- os-prober-1.58.orig/linux-boot-probes/mounted/common/40grub2
++++ os-prober-1.58/linux-boot-probes/mounted/common/40grub2
+@@ -77,7 +77,7 @@ parse_grub_menu () {
+ ignore_item=1
+ fi
+ ;;
+- linux)
++ linux*)
+ # Hack alert: sed off any (hdn,n) but
+ # assume the kernel is on the same
+ # partition.
+@@ -90,7 +90,7 @@ parse_grub_menu () {
+ kernel="/boot$kernel"
+ fi
+ ;;
+- initrd)
++ initrd*)
+ initrd="$(echo "$2" | sed 's/(.*)//')"
+ # Initrd same.
+ if [ "$partition" != "$bootpart" ]; then
diff --git a/system/boot/os-prober/files/fedora/os-prober-mdraidfix.patch b/system/boot/os-prober/files/fedora/os-prober-mdraidfix.patch
new file mode 100644
index 00000000..33a432de
--- /dev/null
+++ b/system/boot/os-prober/files/fedora/os-prober-mdraidfix.patch
@@ -0,0 +1,25 @@
+Index: os-prober/os-prober
+===================================================================
+--- os-prober.orig/os-prober
++++ os-prober/os-prober
+@@ -64,6 +64,11 @@ partitions () {
+ exit 0
+ fi
+
++ # Add MD RAID devices
++ if [ -f /proc/mdstat ] ; then
++ awk '/^md/ {printf "/dev/"$1"\n"}' /proc/mdstat
++ fi
++
+ # Also detect OSes on LVM volumes (assumes LVM is active)
+ if type lvs >/dev/null 2>&1; then
+ echo "$(LVM_SUPPRESS_FD_WARNINGS=1 log_output lvs --noheadings --separator : -o vg_name,lv_name |
+@@ -123,7 +128,7 @@ if [ -f /proc/swaps ]; then
+ fi
+ : >"$OS_PROBER_TMP/raided-map"
+ if [ -f /proc/mdstat ] ; then
+- grep "^md" /proc/mdstat | parse_proc_mdstat >"$OS_PROBER_TMP/raided-map" || true
++ grep "^md" /proc/mdstat | cut -d: -f2- | parse_proc_mdstat >"$OS_PROBER_TMP/raided-map" || true
+ fi
+
+ for partition in $(partitions); do
diff --git a/system/boot/os-prober/files/fedora/os-prober-mounted-partitions-fix.patch b/system/boot/os-prober/files/fedora/os-prober-mounted-partitions-fix.patch
new file mode 100644
index 00000000..aecfc9f9
--- /dev/null
+++ b/system/boot/os-prober/files/fedora/os-prober-mounted-partitions-fix.patch
@@ -0,0 +1,26 @@
+Index: os-prober/common.sh
+===================================================================
+--- os-prober.orig/common.sh
++++ os-prober/common.sh
+@@ -146,7 +146,7 @@ parse_proc_mounts () {
+ set -f
+ set -- $line
+ set +f
+- printf '%s %s %s\n' "$(mapdevfs "$1")" "$2" "$3"
++ printf '%s %s %s %s\n' "$(mapdevfs "$1")" "$2" "$3" "$1"
+ done
+ }
+
+Index: os-prober/linux-boot-prober
+===================================================================
+--- os-prober.orig/linux-boot-prober
++++ os-prober/linux-boot-prober
+@@ -167,7 +167,7 @@ else
+ bootpart="${mountboot%% *}"
+ bootmounted="${mountboot#* }"
+ else
+- bootpart="$partition"
++ bootpart="$(grep " $mpoint/boot " "$OS_PROBER_TMP/mounted-map" | head -n1 | cut -d " " -f 4)"
+ bootmounted=0
+ fi
+ for test in /usr/lib/linux-boot-probes/mounted/*; do
diff --git a/system/boot/os-prober/files/fedora/os-prober-no-dummy-mach-kernel.patch b/system/boot/os-prober/files/fedora/os-prober-no-dummy-mach-kernel.patch
new file mode 100644
index 00000000..b9e12541
--- /dev/null
+++ b/system/boot/os-prober/files/fedora/os-prober-no-dummy-mach-kernel.patch
@@ -0,0 +1,22 @@
+From f71f7eb5c492720c24033901ef8c6c420e188ff2 Mon Sep 17 00:00:00 2001
+From: Peter Jones
+Date: Thu, 10 May 2012 14:47:35 -0400
+Subject: [PATCH] Don't count our dummy mach_kernel as real MacOS X.
+
+---
+ os-probes/mounted/powerpc/20macosx | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: b/os-probes/mounted/powerpc/20macosx
+===================================================================
+--- a/os-probes/mounted/powerpc/20macosx
++++ b/os-probes/mounted/powerpc/20macosx
+@@ -21,7 +21,7 @@ esac
+ # but I don't think it exists on Mac OS <= 9, and it's XML so parsing in
+ # shell will be nasty.
+
+-if [ -e "$2/mach_kernel" ]; then
++if [ -e "$2/mach_kernel" ] && ! dd if="$2/mach_kernel" count=1 bs=5 2>/dev/null | grep -aq Dummy ; then
+ label="$(count_next_label MacOSX)"
+ result "$1:Mac OS X:$label:macosx"
+ exit 0
diff --git a/system/boot/os-prober/files/fedora/os-prober-umount-fix.patch b/system/boot/os-prober/files/fedora/os-prober-umount-fix.patch
new file mode 100644
index 00000000..6e7937c1
--- /dev/null
+++ b/system/boot/os-prober/files/fedora/os-prober-umount-fix.patch
@@ -0,0 +1,18 @@
+Index: os-prober/common.sh
+===================================================================
+--- os-prober.orig/common.sh
++++ os-prober/common.sh
+@@ -336,3 +336,13 @@ linux_mount_boot () {
+
+ mountboot="$bootpart $mounted"
+ }
++
++umount_exec=$(which umount)
++umount() {
++ if ! $umount_exec $@ 2> /dev/null; then
++ error "umount error, retrying after 1 sec"
++ sleep 1
++ $umount_exec $@
++ fi
++}
++
diff --git a/system/boot/os-prober/pspec.xml b/system/boot/os-prober/pspec.xml
index 4b509f2c..8d9bfd22 100644
--- a/system/boot/os-prober/pspec.xml
+++ b/system/boot/os-prober/pspec.xml
@@ -12,7 +12,20 @@
app:console
Utility to detect other OSes on a set of drives
os-probe detects other OSes available on a system and outputs the results in a generic machine-readable format. Support for new OSes and Linux distributions can be added easily.
- https://sourceforge.net/projects/pisilinux/files/source/os-prober_1.71.tar.xz
+ http://cdn-fastly.deb.debian.org/debian/pool/main/o/os-prober/os-prober_1.77.tar.xz
+
+ fedora/os-prober-bootpart-name-fix.patch
+ fedora/os-prober-btrfsfix.patch
+ fedora/os-prober-factor-out-logger.patch
+ fedora/os-prober-factored-logger-efi-fix.patch
+ fedora/os-prober-gentoo-fix.patch
+ fedora/os-prober-grepfix.patch
+ fedora/os-prober-grub2-parsefix.patch
+ fedora/os-prober-mdraidfix.patch
+ fedora/os-prober-mounted-partitions-fix.patch
+ fedora/os-prober-no-dummy-mach-kernel.patch
+ fedora/os-prober-umount-fix.patch
+
os-prober
@@ -25,6 +38,13 @@
+
+ 2019-10-10
+ 1.77
+ Version bump.
+ Mustafa Cinasal
+ muscnsl@gmail.com
+
2018-07-15
1.71