mirror of
				https://git.proxmox.com/git/grub2
				synced 2025-10-31 13:55:51 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			332 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			INI
		
	
	
	
	
	
			
		
		
	
	
			332 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			INI
		
	
	
	
	
	
| # 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
 | 
