# Super Grub Disk - osdetect.cfg
# Copyright (C) 2009,2010,2011,2012,2013,2014,2015 Adrian Gibanel Lopez.
#
# Super Grub Disk is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Super Grub Disk is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Super Grub Disk. If not, see .
# Modified by Didier Spaier for Slint.
set option_title=$"Operating Systems"
function freebsd_ufs_variants {
set device="$1"
set fstype="$2"
set uuid="$3"
menuentry "${finaloption_tab_str}FreeBSD ($fstype $device)" $device $uuid {
set root="$2"
set uuid="$3"
kfreebsd /boot/kernel/kernel
set kFreeBSD.acpi_load=YES
set kFreeBSD.hint.acpi.0.disabled=0
set kFreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid
kfreebsd_loadenv /boot/device.hints
}
menuentry "${finaloption_tab_str}FreeBSD ($fstype $device) (single)" $device $uuid {
set root="$2"
set uuid="$3"
kfreebsd /boot/kernel/kernel -s
set kFreeBSD.acpi_load=YES
set kFreeBSD.hint.acpi.0.disabled=0
set kFreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid
kfreebsd_loadenv /boot/device.hints
}
menuentry "${finaloption_tab_str}FreeBSD ($fstype $device) (verbose)" $device $uuid {
set root="$2"
set uuid="$3"
kfreebsd /boot/kernel/kernel -v
set kFreeBSD.acpi_load=YES
set kFreeBSD.hint.acpi.0.disabled=0
set kFreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid
kfreebsd_loadenv /boot/device.hints
}
menuentry "${finaloption_tab_str}FreeBSD ($fstype $device) (no ACPI)" $device $uuid {
set root="$2"
set uuid="$3"
kfreebsd /boot/kernel/kernel -v
unset kFreeBSD.acpi_load
set kFreeBSD.hint.acpi.0.disabled=1
set kFreeBSD.loader.acpi_disabled_by_user=1
set kFreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid
kfreebsd_loadenv /boot/device.hints
}
menuentry "${finaloption_tab_str}FreeBSD ($fstype $device) (safe mode)" $device $uuid {
set root="$2"
set uuid="$3"
kfreebsd /boot/kernel/kernel -v
unset kFreeBSD.acpi_load
set kFreeBSD.hint.acpi.0.disabled=1
set kFreeBSD.loader.acpi_disabled_by_user=1
set kFreeBSD.hint.apic.0.disabled=1
set kFreeBSD.hw.ata.ata_dma=0
set kFreeBSD.hw.ata.atapi_dma=0
set kFreeBSD.hw.ata.wc=0
set kFreeBSD.hw.eisa_slots=0
set kFreeBSD.hint.kbdmux.0.disabled=1
set kFreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid
kfreebsd_loadenv /boot/device.hints
}
menuentry "${finaloption_tab_str}FreeBSD ($fstype $device) (Default boot loader)" $device $uuid {
set root="$2"
kfreebsd /boot/loader
}
}
function freebsd_zfs_variants {
set device="$1"
set fstype=zfs
menuentry "${finaloption_tab_str}FreeBSD ($fstype $device)" $device {
set root="$2"
kfreebsd /@/boot/kernel/kernel
set kFreeBSD.acpi_load=YES
set kFreeBSD.hint.acpi.0.disabled=0
kfreebsd_module_elf /@/boot/kernel/opensolaris.ko
kfreebsd_module_elf /@/boot/kernel/zfs.ko
kfreebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
probe -s name --label $root
set kFreeBSD.vfs.root.mountfrom=zfs:$name
kfreebsd_loadenv /@/boot/device.hints
}
menuentry "${finaloption_tab_str}FreeBSD ($fstype $device) (single)" $device {
set root="$2"
kfreebsd /@/boot/kernel/kernel -s
set kFreeBSD.acpi_load=YES
set kFreeBSD.hint.acpi.0.disabled=0
kfreebsd_module_elf /@/boot/kernel/opensolaris.ko
kfreebsd_module_elf /@/boot/kernel/zfs.ko
kfreebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
probe -s name --label $root
set kFreeBSD.vfs.root.mountfrom=zfs:$name
kfreebsd_loadenv /@/boot/device.hints
}
menuentry "${finaloption_tab_str}FreeBSD ($fstype $device) (verbose)" $device {
set root="$2"
kfreebsd /@/boot/kernel/kernel -v
set kFreeBSD.acpi_load=YES
set kFreeBSD.hint.acpi.0.disabled=0
kfreebsd_module_elf /@/boot/kernel/opensolaris.ko
kfreebsd_module_elf /@/boot/kernel/zfs.ko
kfreebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
probe -s name --label $root
set kFreeBSD.vfs.root.mountfrom=zfs:$name
kfreebsd_loadenv /@/boot/device.hints
}
menuentry "${finaloption_tab_str}FreeBSD ($fstype $device) (no ACPI)" $device {
set root="$2"
kfreebsd /@/boot/kernel/kernel -v
unset kFreeBSD.acpi_load
set kFreeBSD.hint.acpi.0.disabled=1
set kFreeBSD.loader.acpi_disabled_by_user=1
kfreebsd_module_elf /@/boot/kernel/opensolaris.ko
kfreebsd_module_elf /@/boot/kernel/zfs.ko
kfreebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
probe -s name --label $root
set kFreeBSD.vfs.root.mountfrom=zfs:$name
kfreebsd_loadenv /@/boot/device.hints
}
menuentry "${finaloption_tab_str}FreeBSD ($fstype $device) (safe mode)" $device {
set root="$2"
kfreebsd /@/boot/kernel/kernel -v
unset kFreeBSD.acpi_load
set kFreeBSD.hint.acpi.0.disabled=1
set kFreeBSD.loader.acpi_disabled_by_user=1
set kFreeBSD.hint.apic.0.disabled=1
set kFreeBSD.hw.ata.ata_dma=0
set kFreeBSD.hw.ata.atapi_dma=0
set kFreeBSD.hw.ata.wc=0
set kFreeBSD.hw.eisa_slots=0
set kFreeBSD.hint.kbdmux.0.disabled=1
kfreebsd_module_elf /@/boot/kernel/opensolaris.ko
kfreebsd_module_elf /@/boot/kernel/zfs.ko
kfreebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
probe -s name --label $root
set kFreeBSD.vfs.root.mountfrom=zfs:$name
kfreebsd_loadenv /@/boot/device.hints
}
menuentry "${finaloption_tab_str}FreeBSD ($fstype $device) (Default boot loader)" $device $uuid {
set root="$2"
kfreebsd /@/boot/loader
}
}
function get_efis {
blockdev="$1"
blockfs="$2"
efis=""
if [ "$blockfs" = "fat" ]; then
insmod regexp
for efi in \
($blockdev)/efi/*/*.efi \
($blockdev)/efi/*/*/*.efi \
($blockdev)/*.efi \
($blockdev)/*/*.efi \
($blockdev)/EFI/*/*.EFI \
($blockdev)/EFI/*/*/*.EFI \
($blockdev)/*.EFI \
($blockdev)/*/*.EFI \
($blockdev)/EFI/*/*.efi \
($blockdev)/EFI/*/*/*.efi \
($blockdev)/efi/*/*.EFI \
($blockdev)/efi/*/*/*.EFI \
; do
if [ -f "$efi" ] ; then
efis="$efis $efi"
fi
done
rmmod regexp
if [ -n "$efis" ]; then
return 0
fi
fi
return 1
}
function osx_entry_add {
set device="$1"
set uuid="$2"
set kerncmd="$3"
set arch="$4"
set args="$5"
set desc="$6"
menuentry "${finaloption_tab_str}Mac OS X/Darwin $arch-bit ($device) - $desc" $device $uuid $kerncmd $args {
set root="$2"
set uuid="$3"
set kerncmd="$4"
set args="$5"
insmod all_video
set do_resume=0
if [ /var/vm/sleepimage -nt10 / ]; then
if xnu_resume /var/vm/sleepimage; then
set do_resume=1
fi
fi
if [ $do_resume = 0 ]; then
xnu_uuid ${uuid} uuid
if [ -f /Extra/DSDT.aml ]; then
acpi -e /Extra/DSDT.aml
fi
if [ /kernelcache -nt /System/Library/Extensions ]; then
$kerncmd /kernelcache boot-uuid=${uuid} rd=*uuid $args
else
$kerncmd /mach_kernel boot-uuid=${uuid} rd=*uuid $args
if [ /System/Library/Extensions.mkext -nt /System/Library/Extensions ]; then
xnu_mkext /System/Library/Extensions.mkext
else
xnu_kextdir /System/Library/Extensions
fi
fi
if [ -f /Extra/Extensions.mkext ]; then
xnu_mkext /Extra/Extensions.mkext
fi
if [ -d /Extra/Extensions ]; then
xnu_kextdir /Extra/Extensions
fi
if [ -f /Extra/devprop.bin ]; then
xnu_devprop_load /Extra/devprop.bin
fi
if [ -f /Extra/splash.jpg ]; then
insmod jpeg
xnu_splash /Extra/splash.jpg
fi
if [ -f /Extra/splash.png ]; then
insmod png
xnu_splash /Extra/splash.png
fi
if [ -f /Extra/splash.tga ]; then
insmod tga
xnu_splash /Extra/splash.tga
fi
fi
}
}
function flagplatform {
sgdflagplat=""
if [ "$1" = "efi" ]; then
if [ "${grub_platform}" = "efi" ]; then
return 0
else
sgdflagplat=$"UEFI-BOOT-REQUIRED:"
fi
else
if [ "${grub_platform}" != "efi" ]; then
return 0
else
sgdflagplat=$"BIOS-BOOT-REQUIRED:"
fi
fi
}
function run_option {
source "${sg2d_directory}/tools.cfg"
set saved_root=$root
update_sg2d_devices
for dev in ${sg2d_devices}; do
getdevice device $dev
# $fstype: filesystem type identified
probe -s fstype --fs $dev
# partuuid: partition's UUID
probe -s partuuid --part-uuid $dev
probe -s uuid --fs-uuid $dev
if test \
'(' -f ($device)/bootmgr -a -f ($device)/boot/bcd ')' \
-o \
'(' -f ($device)/bootmgr -a -f ($device)/boot/Bcd ')' \
-o \
'(' -f ($device)/bootmgr -a -f ($device)/boot/BCD ')' \
-o \
'(' -f ($device)/bootmgr -a -f ($device)/Boot/bcd ')' \
-o \
'(' -f ($device)/bootmgr -a -f ($device)/Boot/Bcd ')' \
-o \
'(' -f ($device)/bootmgr -a -f ($device)/Boot/BCD ')' \
-o \
'(' -f ($device)/bootmgr -a -f ($device)/BOOT/bcd ')' \
-o \
'(' -f ($device)/bootmgr -a -f ($device)/BOOT/Bcd ')' \
-o \
'(' -f ($device)/bootmgr -a -f ($device)/BOOT/BCD ')' \
; then
flagplatform bios
menuentry "${finaloption_tab_str}${sgdflagplat}Windows Vista/7/8/2008 (R2) ... ($device)" $device {
if withplatform bios ; then
set root="$2"
chainloader +1
fi
}
flagplatform bios
menuentry "${finaloption_tab_str}${sgdflagplat}Windows Vista/7/8/2008 (R2) (Direct /bootmgr) ... ($device)" $device {
if withplatform bios ; then
set root="$2"
ntldr /bootmgr
fi
}
elif test \
'(' -f ($device)/ntldr -a -e ($device)/ntdetect.com -a -f ($device)/boot.ini ')' \
-o \
'(' -f ($device)/ntldr -a -e ($device)/ntdetect.com -a -f ($device)/BOOT.INI ')' \
-o \
'(' -f ($device)/ntldr -a -e ($device)/NTDETECT.COM -a -f ($device)/boot.ini ')' \
-o \
'(' -f ($device)/ntldr -a -e ($device)/NTDETECT.COM -a -f ($device)/BOOT.INI ')' \
-o \
'(' -f ($device)/NTLDR -a -e ($device)/ntdetect.com -a -f ($device)/boot.ini ')' \
-o \
'(' -f ($device)/NTLDR -a -e ($device)/ntdetect.com -a -f ($device)/BOOT.INI ')' \
-o \
'(' -f ($device)/NTLDR -a -e ($device)/NTDETECT.COM -a -f ($device)/boot.ini ')' \
-o \
'(' -f ($device)/NTLDR -a -e ($device)/NTDETECT.COM -a -f ($device)/BOOT.INI ')' \
; then
flagplatform bios
menuentry "${finaloption_tab_str}${sgdflagplat}Windows NT/2000/XP ($device)" $device {
if withplatform bios ; then
set root="$2"
insmod regexp
regexp -s devnum 'hd([0-9]+)' $root
rmmod regexp
if test "$devnum" != "0"; then
drivemap -s hd0 $root
fi
chainloader +1
fi
}
flagplatform bios
menuentry "${finaloption_tab_str}${sgdflagplat}Windows NT/2000/XP (Direct /ntldr) ($device)" $device {
if withplatform bios ; then
ntldr /ntldr
fi
}
elif test -f ($device)/windows/win.com; then
flagplatform bios
menuentry "${finaloption_tab_str}${sgdflagplat}Windows 98/ME ($device)" $device {
if withplatform bios ; then
set root="$2"
insmod regexp
regexp -s devnum 'hd([0-9]+)' $root
rmmod regexp
if test "$devnum" != "0"; then
drivemap -s hd0 $root
fi
chainloader +1
fi
}
elif test -f ($device)/io.sys -a -f ($device)/command.com; then
flagplatform bios
menuentry "${finaloption_tab_str}${sgdflagplat}MS-DOS ($device)" $device {
if withplatform bios ; then
set root="$2"
insmod regexp
regexp -s devnum 'hd([0-9]+)' $root
rmmod regexp
if test "$devnum" != "0"; then
drivemap -s hd0 $root
fi
chainloader +1
fi
}
elif test -f ($device)/kernel.sys; then
flagplatform bios
menuentry "${finaloption_tab_str}${sgdflagplat}FreeDOS ($device)" $device {
if withplatform bios ; then
set root="$2"
insmod regexp
regexp -s type '([fh])d[0-9]+' $root
regexp -s devnum '[fh]d([0-9]+)' $root
rmmod regexp
if test $type = 'h' -a "$devnum" != "0"; then
drivemap -s hd0 $root
fi
chainloader +1
fi
}
elif test "$fstype" = ufs1 -o "$fstype" = ufs2 -a \
-e ($device)/boot/kernel/kernel -a \
-e ($device)/boot/device.hints; then
freebsd_ufs_variants $device $fstype $uuid
elif test "$fstype" = zfs -a \
-e ($device)/@/boot/kernel/kernel -a \
-e ($device)/@/boot/device.hints; then
freebsd_zfs_variants $device
elif test "$fstype" = hfsplus -a -f ($device)/mach_kernel -a -d ($device)/Users; then
osx_entry_add $device $uuid "xnu_kernel" "32" "-v" "Verbose Mode"
osx_entry_add $device $uuid "xnu_kernel" "32" "-x" "Safe Mode"
osx_entry_add $device $uuid "xnu_kernel" "32" "-s" "Single User"
osx_entry_add $device $uuid "xnu_kernel" "32" "-f" "Ignore Caches"
osx_entry_add $device $uuid "xnu_kernel64" "64" "-v" "Verbose Mode"
osx_entry_add $device $uuid "xnu_kernel64" "64" "-x" "Safe Mode"
osx_entry_add $device $uuid "xnu_kernel64" "64" "-s" "Single User"
osx_entry_add $device $uuid "xnu_kernel64" "64" "-f" "Ignore Caches"
elif get_efis $device $fstype; then
flagplatform efi
for efi in $efis; do
menuentry "${finaloption_tab_str}${sgdflagplat}${efi} ($device)" "$efi" "$device" {
efi_device="$3"
efi="$2"
if withplatform efi; then
root="$efi_device"
chainloader "$efi"
fi
}
done
else
set root=$device
insmod regexp
for file in /boot/vmlinuz-* /boot/linux-* /boot/kernel-genkernel-*; do
if test -f $file; then
regexp -s version '/boot/vmlinuz-(.*)' $file
regexp -s version '/boot/linux-(.*)' $file
regexp -s version '/boot/kernel-genkernel-(.*)' $file
menuentry "${finaloption_tab_str}Linux $file ($device)" $device $partuuid $file $version {
set root="$2"
set partuuid="$3"
set kernel="$4"
set version="$5"
linux $kernel root=PARTUUID=$partuuid ro
if test -f /boot/initrd.gz; then
initrd /boot/initrd.gz
elif test -f /boot/initrd-$version.img; then
initrd /boot/initrd-$version.img
elif test -f /boot/initrd.img-$version; then
initrd /boot/initrd.img-$version
elif test -f /boot/initrd-$version; then
initrd /boot/initrd-$version
elif test -f /boot/initramfs-genkernel-$version; then
initrd /boot/initramfs-genkernel-$version
elif test -f /boot/initramfs-$version.img; then
initrd /boot/initramfs-$version.img
fi
}
menuentry "${finaloption_tab_str}Linux $file (single) ($device)" $device $partuuid $file $version {
set root="$2"
set partuuid="$3"
set kernel="$4"
set version="$5"
linux $kernel root=PARTUUID=$partuuid ro single
if test -f /boot/initrd.gz; then
initrd /boot/initrd.gz
elif test -f /boot/initrd-$version.img; then
initrd /boot/initrd-$version.img
elif test -f /boot/initrd.img-$version; then
initrd /boot/initrd.img-$version
elif test -f /boot/initrd-$version; then
initrd /boot/initrd-$version
elif test -f /boot/initramfs-genkernel-$version; then
initrd /boot/initramfs-genkernel-$version
elif test -f /boot/initramfs-$version.img; then
initrd /boot/initramfs-$version.img
fi
}
fi
done
rmmod regexp
fi
done
set root=$saved_root
}