#796 os-probes librerias de grub con detección de nuevas versiones de sistemas opertativos (p.e win10). usado solo para ogLives antiguos (kernel 3.2)

git-svn-id: https://opengnsys.es/svn/branches/version1.1@5378 a21b9725-9963-47de-94b9-378ad31fedc9
remotes/github/debian-pkg
Antonio Doblas Viso 2017-06-23 10:45:30 +00:00
parent f2126fa6dd
commit 2cd8344911
17 changed files with 806 additions and 0 deletions

View File

@ -0,0 +1,14 @@
#!/bin/sh
# Sub-test to exclude ZVOLs
set -e
partition="$1"
. /usr/share/os-prober/common.sh
if [ "$(stat -L -c %t "$partition")" = "e6" ] ; then
debug "$1 is a ZVOL; skipping"
exit 0
fi
# No ZVOLs found
exit 1

View File

@ -0,0 +1,99 @@
#!/bin/sh
# Sub-tests that require a mounted partition.
set -e
partition="$1"
. /usr/share/os-prober/common.sh
types="$(fs_type "$partition")" || types=NOT-DETECTED
if [ "$types" = NOT-DETECTED ] || [ -z "$types" ]; then
debug "$1 type not recognised; skipping"
exit 0
elif [ "$types" = swap ]; then
debug "$1 is a swap partition; skipping"
exit 0
elif [ "$types" = LVM2_member ]; then
debug "$1 is a LVM member partition; skipping"
exit 0
elif [ "$types" = crypto_LUKS ]; then
debug "$1 is a LUKS partition; skipping"
exit 0
elif [ "$types" = ntfs ]; then
if type ntfs-3g >/dev/null 2>&1; then
types='ntfs-3g ntfs'
fi
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
fi
for type in $(grep -v nodev /proc/filesystems); do
# hfsplus filesystems are mountable as hfs. Try hfs last so
# that we can tell the difference.
if [ "$type" = hfs ]; then
delaytypes="${delaytypes:+$delaytypes }$type"
elif [ "$type" = fuseblk ]; then
if type ntfs-3g >/dev/null 2>&1; then
types="${types:+$types }ntfs-3g"
fi
else
types="${types:+$types }$type"
fi
done
fi
tmpmnt=/var/lib/os-prober/mount
if [ ! -d "$tmpmnt" ]; then
mkdir "$tmpmnt"
fi
mounted=
if type grub-mount >/dev/null 2>&1 && \
type grub-probe >/dev/null 2>&1 && \
grub-mount "$partition" "$tmpmnt" 2>/dev/null; then
mounted=1
type="$(grub-probe -d "$partition" -t fs)" || true
if [ "$type" ]; then
debug "mounted using GRUB $type filesystem driver"
else
debug "mounted using GRUB, but unknown filesystem?"
type=fuseblk
fi
else
echo "Failed to probe $partition for filesystem type" >&2
exit 1
fi
if [ "$mounted" ]; then
for test in /usr/lib/os-probes/mounted/*; do
debug "running subtest $test"
if [ -f "$test" ] && [ -x "$test" ]; then
if "$test" "$partition" "$tmpmnt" "$type"; then
debug "os found by subtest $test"
if ! umount "$tmpmnt"; then
warn "failed to umount $tmpmnt"
fi
case "$type" in
btrfs)
# umount to account for the bind-mount
if [ -x "$tmpmnt/@/lib" ] && \
! umount $tmpmnt; then
warn "failed to umount $tmpmnt"
fi
;;
esac
rmdir "$tmpmnt" || true
exit 0
fi
fi
done
if ! umount "$tmpmnt"; then
warn "failed to umount $tmpmnt"
fi
fi
rmdir "$tmpmnt" || true
# No tests found anything.
exit 1

View File

@ -0,0 +1,39 @@
#!/bin/sh
# Make sure filesystems are available.
set +e # ignore errors from modprobe
FILESYSTEMS='ext2 ext3 ext4 xfs jfs msdos vfat ntfs minix hfs hfsplus qnx4 ufs btrfs'
# fuse is needed to make grub-mount work.
FILESYSTEMS="$FILESYSTEMS fuse"
# The Ubuntu kernel udebs put a number of filesystem modules in
# fs-{core,secondary}-modules. It's fairly cheap to check for these too.
FILESYSTEMS="$FILESYSTEMS fs-core fs-secondary"
if [ ! -e /var/lib/os-prober/modules ]; then
# Check for anna-install to make it easier to use os-prober outside
# d-i.
if type anna-install >/dev/null 2>&1 && [ -d /lib/debian-installer ]; then
for fs in $FILESYSTEMS; do
ANNA_QUIET=1 DEBIAN_FRONTEND=none \
log-output -t os-prober \
anna-install "$fs-modules" || true
done
depmod -a >/dev/null 2>&1 || true
fi
for fs in $FILESYSTEMS; do
case "$fs" in
fs-*)
;;
*)
modprobe "$fs" 2>/dev/null | logger -t os-prober
;;
esac
done
# We only want to keep this state inside d-i, so this is as good a
# check as any.
if type anna-install >/dev/null 2>&1 && [ -d /lib/debian-installer ]; then
touch /var/lib/os-prober/modules
fi
fi

View File

@ -0,0 +1,71 @@
#!/bin/sh
# Detects all Microsoft OSes on a collection of partitions.
. /usr/share/os-prober/common.sh
partition="$1"
mpoint="$2"
type="$3"
# This file is for UEFI platform only
if [ ! -d /sys/firmware/efi ] || [ -f /var/lib/partman/ignore_uefi ]; then
debug "Not on UEFI platform"
exit 1
fi
# Weed out stuff that doesn't apply to us
case "$type" in
vfat) debug "$1 is a FAT32 partition" ;;
msdos) debug "$1 is a FAT16 partition" ;;
fat) debug "$1 is a FAT partition (mounted by GRUB)" ;;
*) debug "$1 is $type partition: exiting"; exit 1 ;;
esac
if type udevadm > /dev/null 2>&1; then
udevinfo () {
udevadm info "$@"
}
fi
if type udevinfo > /dev/null 2>&1; then
# Skip virtual devices
if udevinfo -q path -n $partition | grep -q /virtual/; then
debug "$1 is virtual device: exiting"
exit 1
fi
eval "$(udevinfo -q property -n "$partition" | grep -E '^ID_PART_ENTRY_(TYPE|SCHEME)=')"
debug "$partition partition scheme is $ID_PART_ENTRY_SCHEME"
debug "$partition partition type is $ID_PART_ENTRY_TYPE"
if [ -z "$ID_PART_ENTRY_TYPE" -o -z "$ID_PART_ENTRY_SCHEME" -o \
\( "$ID_PART_ENTRY_SCHEME" != gpt -a "$ID_PART_ENTRY_SCHEME" != msdos \) -o \
\( "$ID_PART_ENTRY_SCHEME" = gpt -a "$ID_PART_ENTRY_TYPE" != c12a7328-f81f-11d2-ba4b-00a0c93ec93b \) -o \
\( "$ID_PART_ENTRY_SCHEME" = msdos -a "$ID_PART_ENTRY_TYPE" != 0xef \) ]; then
debug "$partition is not a ESP partition: exiting"
exit 1
fi
else
debug "udevinfo and udevadm missing - cannot check partition type"
fi
efi=$(item_in_dir efi "$mpoint")
if [ -z "$efi" ]; then
debug "$mpoint does not have /EFI directory: exiting"
exit 1
fi
ret=1
for test in /usr/lib/os-probes/mounted/efi/*; do
debug "running subtest $test"
if [ -f "$test" ] && [ -x "$test" ]; then
entry=$("$test" "$mpoint/$efi")
if [ -n "$entry" ]; then
debug "bootloader $entry found by subtest $test"
ret=0
result "${partition}@/$efi/${entry}:efi"
fi
fi
done
exit $ret

View File

@ -0,0 +1,23 @@
#!/bin/sh
. /usr/share/os-prober/common.sh
partition="$1"
mpoint="$2"
type="$3"
# Weed out stuff that doesn't apply to us
case "$type" in
vfat) debug "$1 is a FAT32 partition" ;;
msdos) debug "$1 is a FAT16 partition" ;;
fat) debug "$1 is a FAT partition (mounted by GRUB)" ;;
*) debug "$1 is not a FAT partition: exiting"; exit 1 ;;
esac
if item_in_dir -q kernel.sys "$2" && item_in_dir -q command.com "$2"; then
label="$(count_next_label FreeDOS)"
result "$1:FreeDOS:$label:chain"
exit 0
else
exit 1
fi

View File

@ -0,0 +1,21 @@
#!/bin/sh
. /usr/share/os-prober/common.sh
partition="$1"
mpoint="$2"
type="$3"
# Weed out stuff that doesn't apply to us
case "$type" in
qnx4) debug "$partition is a QNX4 partition" ;;
*) debug "$partition is not a QNX4 partition: exiting"; exit 1 ;;
esac
if [ -e "$mpoint/.boot" ]; then
label="$(count_next_label QNX)"
result "$partition:QNX:$label:chain"
exit 0
else
exit 1
fi

View File

@ -0,0 +1,30 @@
#!/bin/sh -e
# Detects Mac OS X. I don't yet know how Mac OS <= 9 fits into this.
. /usr/share/os-prober/common.sh
partition="$1"
mpoint="$2"
type="$3"
debug() {
logger -t macosx-prober "debug: $@"
}
# Weed out stuff that doesn't apply to us
case "$type" in
hfsplus) debug "$1 is an HFS+ partition" ;;
*) debug "$1 is not an HFS+ partition: exiting"; exit 1 ;;
esac
# Could use a better test than this.
# /System/Library/CoreServices/SystemVersion.plist has version information,
# 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
label="$(count_next_label MacOSX)"
result "$1:Mac OS X:$label:macosx"
exit 0
else
exit 1
fi

View File

@ -0,0 +1,140 @@
#!/bin/sh
# Detects all Microsoft OSes on a collection of partitions.
. /usr/share/os-prober/common.sh
partition="$1"
mpoint="$2"
type="$3"
# This script looks for legacy BIOS bootloaders only. Skip if running UEFI
if [ -d /sys/firmware/efi ] && [ ! -f /var/lib/partman/ignore_uefi ] && [ -z "$WINOSDATA" ]; then
debug "Skipping legacy bootloaders on UEFI system"
exit 1
fi
# Weed out stuff that doesn't apply to us
case "$type" in
ntfs|ntfs-3g) debug "$1 is a NTFS partition" ;;
vfat) debug "$1 is a FAT32 partition" ;;
msdos) debug "$1 is a FAT16 partition" ;;
fat) debug "$1 is a FAT partition (mounted by GRUB)" ;;
fuse|fuseblk) debug "$1 is a FUSE partition" ;; # might be ntfs-3g
*) debug "$1 is not a MS partition: exiting"; exit 1 ;;
esac
found=
# Vista (previously Longhorn)
if item_in_dir -q bootmgr "$2"; then
# there might be different boot directories in different case as:
# boot Boot BOOT
for boot in $(item_in_dir boot "$2"); do
bcd=$(item_in_dir bcd "$2/$boot")
if [ -n "$bcd" ]; then
if grep -aqs "W.i.n.d.o.w.s. .1.0" "$2/$boot/$bcd"; then
long="Windows 10 (loader)"
elif grep -aqs "W.i.n.d.o.w.s. .8" "$2/$boot/$bcd"; then
long="Windows 8 (loader)"
elif grep -aqs "W.i.n.d.o.w.s. .7" "$2/$boot/$bcd"; then
long="Windows 7 (loader)"
elif grep -aqs "W.i.n.d.o.w.s. .V.i.s.t.a" "$2/$boot/$bcd"; then
long="Windows Vista (loader)"
elif grep -aqs "W.i.n.d.o.w.s. .S.e.r.v.e.r. .2.0.0.8. .R.2." "$2/$boot/$bcd"; then
long="Windows Server 2008 R2 (loader)"
elif grep -aqs "W.i.n.d.o.w.s. .S.e.r.v.e.r. .2.0.0.8." "$2/$boot/$bcd"; then
long="Windows Server 2008 (loader)"
elif grep -aqs "W.i.n.d.o.w.s. .R.e.c.o.v.e.r.y. .E.n.v.i.r.o.n.m.e.n.t" "$2/$boot/$bcd"; then
long="Windows Recovery Environment (loader)"
elif grep -aqs "W.i.n.d.o.w.s. .S.e.t.u.p" "$2/$boot/$bcd"; then
long="Windows Recovery Environment (loader)"
else
long="Windows Vista (loader)"
fi
short=Windows
found=true
break
fi
done
fi
# 2000/XP/NT4.0
if [ -z "$found" ] && item_in_dir -q ntldr "$2" && item_in_dir -q ntdetect.com "$2"; then
long="Windows NT/2000/XP"
short=Windows
ini=$(item_in_dir boot.ini "$2")
if [ -n "$ini" ]; then
multicount="$(grep -e "^multi" "$2/$ini" | wc -l)"
scsicount="$(grep -e "^scsi" "$2/$ini" | wc -l)"
msoscount="$(expr "${multicount}" + "${scsicount}")"
if [ "$msoscount" -eq 1 ]; then
# We need to remove a Carriage Return at the end of
# the line...
defaultmspart="$(grep -e "^default=" "$2/$ini" | cut -d '=' -f2 | tr -d '\r')"
# Escape any backslashes in defaultmspart
grepexp="^$(echo "$defaultmspart" | sed -e 's/\\/\\\\/')="
# Colons not allowed; replace by spaces
# Accented characters (non UTF-8) cause debconf to
# hang, so we fall back to the default if the name
# contains any weird characters.
long="$(grep -e "$grepexp" "$2/$ini" | cut -d '"' -f2 | \
tr ':' ' ' | LC_ALL=C grep -v '[^a-zA-Z0-9 &()/_-]')"
if [ -z "$long" ]; then
long="Windows NT/2000/XP"
fi
else
long="Windows NT/2000/XP (loader)"
fi
found=true
fi
fi
# MS-DOS
if [ -z "$found" ] && item_in_dir -q dos "$2"; then
long="MS-DOS 5.x/6.x/Win3.1"
short=MS-DOS
found=true
fi
# 95/98/Me
if [ -z "$found" ] && item_in_dir -q windows "$2" &&
item_in_dir -q win.com "$2"/"$(item_in_dir windows "$2")"; then
long="Windows 95/98/Me"
short=Windows9xMe
found=true
fi
# Restrict to partitions containing the OS
if [ -n "$WINOSDATA" ]; then
found=
if [ -d "$2/ProgramData/Microsoft/Windows/Start Menu/Programs/StartUp" ]; then
long=${long:-"Windows 8 (data)"}
short=${short:-"Windows"}
found=true
elif [ -d "$2/ProgramData/Microsoft/Windows/Start Menu/Programs/Startup" ]; then
long=${long:-"Windows 7 (data)"}
short=${short:-"Windows"}
found=true
elif [ -d "$2/Documents and Settings/All Users/Start Menu/Programs/Startup" ]; then
long=${long:-"Windows XP/Vista (data)"}
short=${short:-"Windows"}
found=true
elif [ -d "$2/Winnt/Profiles/All Users/Start Menu/Programs/Startup" ]; then
long=${long:-"Windows NT (data)"}
short=${short:-"Windows"}
found=true
fi
fi
if [ -z "$found" ]; then
exit 1
fi
label="$(count_next_label "$short")"
result "${partition}:${long}:${label}:chain"
exit 0

View File

@ -0,0 +1,33 @@
#!/bin/sh
# Detects utility (hw vendor recovery) partitions.
. /usr/share/os-prober/common.sh
partition="$1"
mpoint="$2"
type="$3"
# Weed out stuff that doesn't apply to us
case "$type" in
vfat) debug "$1 is a FAT32 partition" ;;
msdos) debug "$1 is a FAT16 partition" ;;
fat) debug "$1 is a FAT partition (mounted by GRUB)" ;;
*) debug "$1 is not a FAT partition: exiting"; exit 1 ;;
esac
# Dell Utility partitions have partition type 0xde, but no idea how to
# cleanly detect that from shell
if item_in_dir -q dellbio.bin "$2" && \
(item_in_dir -q delldiag.exe "$2" || item_in_dir -q delldiag.com "$2"); then
long="Dell Utility Partition"
short=DellUtility
elif item_in_dir -q f11.sys "$2"; then
long="Acronis Secure Zone"
short=AcroneZone
else
exit 1
fi
label="$(count_next_label "$short")"
result "${partition}:${long}:${label}:chain"
exit 0

View File

@ -0,0 +1,48 @@
#!/bin/sh
# Test for LSB systems.
set -e
. /usr/share/os-prober/common.sh
partition="$1"
dir="$2"
type="$3"
lsb_field () {
file="$1"
field="$2"
grep ^"$field" "$file" | cut -d = -f 2 | sed 's/^"//' | sed 's/"$//' | sed 's/:/ /g'
}
file="$dir/etc/lsb-release"
if [ ! -e "$file" ]; then
exit 1
fi
release=$(lsb_field "$file" DISTRIB_RELEASE)
if [ -z "$release" ]; then
release=$(lsb_field "$file" DISTRIB_CODENAME)
fi
description=$(lsb_field "$file" DISTRIB_DESCRIPTION)
if [ -z "$description" ]; then
description=$(lsb_field "$file" DISTRIB_CODENAME)
fi
if [ -n "$description" ]; then
if [ -n "$release" ]; then
long="$description ($release)"
else
long="$description"
fi
else
exit 1
fi
short=$(lsb_field "$file" DISTRIB_ID | sed 's/ //g')
if [ -z "$short" ]; then
short="UnknownLSB"
fi
label="$(count_next_label "$short")"
result "$partition:$long:$label:linux"
exit 0

View File

@ -0,0 +1,16 @@
#!/bin/sh
set -e
. /usr/share/os-prober/common.sh
partition="$1"
dir="$2"
type="$3"
if [ -d "$dir/servers" ] && [ -d "$dir/hurd" ]; then
label="$(count_next_label Hurd)"
result "$partition:GNU/Hurd:$label:hurd"
exit 0
else
exit 1
fi

View File

@ -0,0 +1,28 @@
#!/bin/sh
set -e
. /usr/share/os-prober/common.sh
partition="$1"
dir="$2"
type="$3"
# Weed out stuff that doesn't apply to us
case "$type" in
minix|minix2|ext2) ;;
*) exit 1 ;;
esac
if [ -f "$dir/minix" ] || [ -e "$dir/boot/image_big" ]; then
if [ -e "$dir/boot/image_latest" ]; then
boot="minix"
else
boot="chain"
fi
label="$(count_next_label Minix)"
result "$partition:Minix:$label:$boot"
exit 0
else
exit 1
fi

View File

@ -0,0 +1,35 @@
#!/bin/sh
# Detects Haiku on BeFS partitions.
. /usr/share/os-prober/common.sh
partition="$1"
mpoint="$2"
type="$3"
# Weed out stuff that doesn't apply to us
case "$type" in
befs|befs_be) debug "$partition is a BeFS partition" ;;
*) debug "$partition is not a BeFS partition: exiting"; exit 1 ;;
esac
if head -c 512 "$partition" | grep -qs "system.haiku_loader"; then
debug "Stage 1 bootloader found"
else
debug "Stage 1 bootloader not found: exiting"
exit 1
fi
if system="$(item_in_dir "system" "$mpoint")" &&
item_in_dir -q "haiku_loader" "$mpoint/$system" &&
(item_in_dir -q "kernel_x86" "$mpoint/$system" ||
item_in_dir -q "kernel_x86_64" "$mpoint/$system")
then
debug "Stage 2 bootloader and kernel found"
label="$(count_next_label Haiku)"
result "$partition:Haiku:$label:chain"
exit 0
else
debug "Stage 2 bootloader and kernel not found: exiting"
exit 1
fi

View File

@ -0,0 +1,138 @@
#!/bin/sh
# Test for linux distributions.
set -e
. /usr/share/os-prober/common.sh
partition="$1"
dir="$2"
type="$3"
# 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* || 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")"
result "$partition:$long:$label:linux"
exit 0
else
exit 1
fi

View File

@ -0,0 +1,19 @@
#!/bin/sh
# Attempt to check if solaris is installed in this system
# looking at the /etc/system parameters file and /etc/vfstab.
set -e
. /usr/share/os-prober/common.sh
partition="$1"
dir="$2"
type="$3"
if [ -f "$dir/etc/system" ] && [ -f "$dir/etc/vfstab" ]; then
label="$(count_next_label Solaris)"
result "$partition:Solaris/IA32:$label:chain"
exit 0
else
exit 1
fi

View File

@ -0,0 +1,24 @@
#!/bin/sh
# Detects ELILO bootloader on a EFI System Partition
. /usr/share/os-prober/common.sh
efi="$1"
found=
elilo=`find $1 -name "elilo.efi"`
if [ -n "$elilo" ]; then
bdir=`dirname $elilo`
bdir=`basename $bdir`
long="ELILO Boot Manager"
short="ELILO"
path=${bdir}/elilo.efi
found=true
fi
if [ -n "$found" ]; then
label="$(count_next_label "$short")"
result "${path}:${long}:${label}"
fi
exit 0

View File

@ -0,0 +1,28 @@
#!/bin/sh
# Detects Microsoft bootloader on a EFI System Partition
. /usr/share/os-prober/common.sh
efi="$1"
found=
for microsoft in $(item_in_dir microsoft "$efi"); do
for boot in $(item_in_dir boot "$efi/$microsoft"); do
bcd=$(item_in_dir bcd "$efi/$microsoft/$boot")
bootmgfw=$(item_in_dir bootmgfw.efi "$efi/$microsoft/$boot")
if [ -n "$bcd" -a -n "$bootmgfw" ]; then
long="Windows Boot Manager"
short=Windows
path="$microsoft/$boot/$bootmgfw"
found=true
break
fi
done
done
if [ -n "$found" ]; then
label="$(count_next_label "$short")"
result "${path}:${long}:${label}"
fi
exit 0