123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332 |
- # Sample GRUB script to autodetect operating systems
- #
- # Copyright (C) 2010 Free Software Foundation, Inc.
- #
- # GRUB 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.
- #
- # GRUB 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 GRUB. If not, see <http://www.gnu.org/licenses/>.
- set saved_root=$root
- function freebsd_ufs_variants {
- set device=$1
- set fstype=$2
- set uuid=$3
- menuentry "FreeBSD (on $fstype $device)" $device $uuid {
- set root=$2
- set uuid=$3
- freebsd /boot/kernel/kernel
- set FreeBSD.acpi_load=YES
- set FreeBSD.hint.acpi.0.disabled=0
- set FreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid
- frebsd_loadenv /boot/device.hints
- }
- menuentry "FreeBSD (on $fstype $device) (single)" $device $uuid {
- set root=$2
- set uuid=$3
- freebsd /boot/kernel/kernel --single
- set FreeBSD.acpi_load=YES
- set FreeBSD.hint.acpi.0.disabled=0
- set FreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid
- frebsd_loadenv /boot/device.hints
- }
- menuentry "FreeBSD (on $fstype $device) (verbose)" $device $uuid {
- set root=$2
- set uuid=$3
- freebsd /boot/kernel/kernel --verbose
- set FreeBSD.acpi_load=YES
- set FreeBSD.hint.acpi.0.disabled=0
- set FreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid
- frebsd_loadenv /boot/device.hints
- }
- menuentry "FreeBSD (on $fstype $device) (without ACPI)" $device $uuid {
- set root=$2
- set uuid=$3
- freebsd /boot/kernel/kernel --verbose
- unset FreeBSD.acpi_load
- set FreeBSD.hint.acpi.0.disabled=1
- set FreeBSD.loader.acpi_disabled_by_user=1
- set FreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid
- frebsd_loadenv /boot/device.hints
- }
- menuentry "FreeBSD (on $fstype $device) (safe mode)" $device $uuid {
- set root=$2
- set uuid=$3
- freebsd /boot/kernel/kernel --verbose
- unset FreeBSD.acpi_load
- set FreeBSD.hint.acpi.0.disabled=1
- set FreeBSD.loader.acpi_disabled_by_user=1
- set FreeBSD.hint.apic.0.disabled=1
- set FreeBSD.hw.ata.ata_dma=0
- set FreeBSD.hw.ata.atapi_dma=0
- set FreeBSD.hw.ata.wc=0
- set FreeBSD.hw.eisa_slots=0
- set FreeBSD.hint.kbdmux.0.disabled=1
- set FreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid
- frebsd_loadenv /boot/device.hints
- }
- }
- function freebsd_zfs_variants {
- set device=$1
- set fstype=zfs
- menuentry "FreeBSD (on $fstype $device)" $device {
- set root=$2
- freebsd /@/boot/kernel/kernel
- set FreeBSD.acpi_load=YES
- set FreeBSD.hint.acpi.0.disabled=0
- freebsd_module_elf /@/boot/kernel/opensolaris.ko
- freebsd_module_elf /@/boot/kernel/zfs.ko
- freebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
- probe -l -s name $root
- set FreeBSD.vfs.root.mountfrom=zfs:$name
- freebsd_loadenv /@/boot/device.hints
- }
- menuentry "FreeBSD (on $fstype $device) (single)" $device {
- set root=$2
- freebsd /@/boot/kernel/kernel --single
- set FreeBSD.acpi_load=YES
- set FreeBSD.hint.acpi.0.disabled=0
- freebsd_module_elf /@/boot/kernel/opensolaris.ko
- freebsd_module_elf /@/boot/kernel/zfs.ko
- freebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
- probe -l -s name $root
- set FreeBSD.vfs.root.mountfrom=zfs:$name
- freebsd_loadenv /@/boot/device.hints
- }
- menuentry "FreeBSD (on $fstype $device) (verbose)" $device {
- set root=$2
- freebsd /@/boot/kernel/kernel --verbose
- set FreeBSD.acpi_load=YES
- set FreeBSD.hint.acpi.0.disabled=0
- freebsd_module_elf /@/boot/kernel/opensolaris.ko
- freebsd_module_elf /@/boot/kernel/zfs.ko
- freebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
- probe -l -s name $root
- set FreeBSD.vfs.root.mountfrom=zfs:$name
- freebsd_loadenv /@/boot/device.hints
- }
- menuentry "FreeBSD (on $fstype $device) (without ACPI)" $device {
- set root=$2
- freebsd /@/boot/kernel/kernel --verbose
- unset FreeBSD.acpi_load
- set FreeBSD.hint.acpi.0.disabled=1
- set FreeBSD.loader.acpi_disabled_by_user=1
- freebsd_module_elf /@/boot/kernel/opensolaris.ko
- freebsd_module_elf /@/boot/kernel/zfs.ko
- freebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
- probe -l -s name $root
- set FreeBSD.vfs.root.mountfrom=zfs:$name
- freebsd_loadenv /@/boot/device.hints
- }
- menuentry "FreeBSD (on $fstype $device) (safe mode)" $device {
- set root=$2
- freebsd /@/boot/kernel/kernel --verbose
- unset FreeBSD.acpi_load
- set FreeBSD.hint.acpi.0.disabled=1
- set FreeBSD.loader.acpi_disabled_by_user=1
- set FreeBSD.hint.apic.0.disabled=1
- set FreeBSD.hw.ata.ata_dma=0
- set FreeBSD.hw.ata.atapi_dma=0
- set FreeBSD.hw.ata.wc=0
- set FreeBSD.hw.eisa_slots=0
- set FreeBSD.hint.kbdmux.0.disabled=1
- freebsd_module_elf /@/boot/kernel/opensolaris.ko
- freebsd_module_elf /@/boot/kernel/zfs.ko
- freebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
- probe -l -s name $root
- set FreeBSD.vfs.root.mountfrom=zfs:$name
- freebsd_loadenv /@/boot/device.hints
- }
- }
- insmod regexp
- for dev in (*); do
- # $device: parenthesis removed from $dev
- regexp -s device '\((.*)\)' $dev
- # $fstype: filesystem type identified
- probe -s fstype -f $dev
- # uuid: filesystem UUID
- probe -s uuid -u $dev
- if test -f ($device)/isolinux/isolinux.cfg ; then
- menuentry "ISOLINUX config (on $device)" $device {
- set root=$2
- syslinux_configfile -i /isolinux/isolinux.cfg
- }
- fi
- if test -f ($device)/bootmgr -a -f ($device)/boot/bcd; then
- menuentry "Windows Vista bootmgr (on $device)" $device {
- set root=$2
- chainloader +1
- }
- elif test -f ($device)/ntldr -a \
- -e ($device)/ntdetect.com -a -f ($device)/boot.ini; then
- menuentry "Windows NT/2000/XP loader (on $device)" $device {
- set root=$2
- regexp -s devnum 'hd([0-9]+)' $root
- if test "$devnum" != "0"; then
- drivemap -s hd0 $root
- fi
- chainloader +1
- }
- elif test -f ($device)/windows/win.com; then
- menuentry "Windows 98/ME (on $device)" $device {
- set root=$2
- regexp -s devnum 'hd([0-9]+)' $root
- if test "$devnum" != "0"; then
- drivemap -s hd0 $root
- fi
- chainloader +1
- }
- elif test -f ($device)/io.sys -a -f ($device)/command.com; then
- menuentry "MS-DOS (on $device)" $device {
- set root=$2
- regexp -s devnum 'hd([0-9]+)' $root
- if test "$devnum" != "0"; then
- drivemap -s hd0 $root
- fi
- chainloader +1
- }
- elif test -f ($device)/kernel.sys; then
- menuentry "FreeDOS (on $device)" $device {
- set root=$2
- regexp -s type '([fh])d[0-9]+' $root
- regexp -s devnum '[fh]d([0-9]+)' $root
- if test $type = 'h' -a "$devnum" != "0"; then
- drivemap -s hd0 $root
- fi
- chainloader +1
- }
- 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; then
- menuentry "Mac OS X/Darwin" $device $uuid {
- set root=$2
- set uuid=$3
- insmod vbe
- do_resume=0
- if [ /var/vm/sleepimage -nt10 / ]; then
- if xnu_resume /var/vm/sleepimage; then
- do_resume=1
- fi
- fi
- if [ $do_resume = 1 ]; then
- xnu_uuid $uuid uuid
- if [ -f /Extra/DSDT.aml ]; then
- acpi -e /Extra/DSDT.aml
- fi
- xnu_kernel /mach_kernel boot-uuid=${uuid} rd=*uuid
- if [ /System/Library/Extensions.mkext -nt /System/Library/Extensions ]; then
- xnu_mkext /System/Library/Extensions.mkext
- else
- xnu_mkext /System/Library/Extensions
- 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/devtree.txt ]; then
- xnu_devtree /Extra/devtree.txt
- 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
- }
- else
- set root=$device
- for file in /boot/vmlinuz-* /boot/linux-*; do
- if test -f $file; then
- regexp -s version '/boot/vmlinuz-(.*)' $file
- regexp -s version '/boot/linux-(.*)' $file
- menuentry "Linux $file" $device $uuid $file $version {
- set root=$2
- set uuid=$3
- set kernel=$4
- set version=$5
- linux $kernel root=UUID=$uuid ro
- if 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
- fi
- }
- menuentry "Linux $file (single)" $device $uuid $file $version {
- set root=$2
- set uuid=$3
- set kernel=$4
- set version=$5
- linux $kernel root=UUID=$uuid ro single
- if 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
- fi
- }
- fi
- done
- fi
- done
- set root=$saved_root
|