123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- # 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/>.
- function pathname { regexp -s 2:"$2" '^(\(.*\))?(/.*)$' "$1"; }
- function devname { regexp -s "$2" '^(\(.*\)).*$' "$1"; }
- function loopback_iso_entry {
- realdev="$1"
- isopath="$2"
- loopdev="$3"
- if test -f /boot/grub/loopback.cfg; then
- cfgpath=/boot/grub/loopback.cfg
- elif test -f /grub/loopback.cfg; then
- cfgpath=/grub/loopback.cfg
- else
- return 1;
- fi
- echo loopback.cfg $isopath: yes
- menuentry "Boot GRUB Loopback Config from ${realdev}${isopath}" "$realdev" "$isopath" "$cfgpath" {
- set device="$2"
- set iso_path="$3"
- set cfg_path="$4"
- export iso_path
- loopback loopdev_cfg "${device}${iso_path}"
- set root=(loopdev_cfg)
- configfile $cfg_path
- loopback -d loopdev_cfg
- }
- return 0
- }
- function grml_iso_entry {
- realdev="$1"
- isopath="$2"
- loopdev="$3"
- result=1
- for dir in /boot/grml /boot/grmlsmall /boot/grmlmedium; do
- if ! test -f ${dir}/linux26 -a -f ${dir}/initrd.gz; then continue; fi
- echo grml $isopath: yes
- result=0
- menuentry "GRML Linux from ${realdev}${isopath}" \
- "$realdev" "$isopath" "$dir" {
- set device="$2"
- set isopath="$3"
- set grmldir="$4"
- loopback loopdev_grml "${device}${isopath}"
- set root=(loopdev_grml)
- linux $grmldir/linux26 findiso="$isopath" apm=power-off quiet \
- boot=live nomce
- initrd $grmldir/initrd.gz
- loopback -d loopdev_grml
- }
- done
- return $result
- }
- function pmagic_iso_entry {
- realdev="$1"
- isopath="$2"
- loopdev="$3"
- if ! test -f /pmagic/bzImage -a -f /pmagic/initramfs; then return 1; fi
- echo pmagic $isopath: yes
- menuentry "Parted Magic from ${realdev}${isopath}" "$realdev" "$isopath" {
- set device="$2"
- set isopath="$3"
- loopback loopdev_pmagic "${device}${isopath}"
- set root=(loopdev_pmagic)
- linux /pmagic/bzImage iso_filename="$isopath" edd=off noapic \
- load_ramdisk=1 prompt_ramdisk=0 rw sleep=10 loglevel=0 \
- keymap=$langcode
- initrd /pmagic/initramfs
- loopback -d loopdev_pmagic
- }
- return 0
- }
- function sidux_iso_entry {
- realdev="$1"
- isopath="$2"
- loopdev="$3"
- result=1
- for kernel in /boot/vmlinuz-*-sidux-*; do
- if ! test -f "$kernel"; then continue; fi
- regexp -s 1:v1 -s 2:v2 '/boot/vmlinuz-(.*)-sidux-(.*)' "$kernel"
- initrd="/boot/initrd.img-$v1-sidux-$v2"
- if ! test -f "$initrd"; then continue; fi
- result=0
- echo sidux $isopath: yes
- menuentry "Sidux vmlinux-$v1-sidux-$v2 from ${realdev}${isopath}" "$realdev" "$isopath" "$kernel" "$initrd" {
- set device="$2"
- set isopath="$3"
- set kernel="$4"
- set initrd="$5"
- loopback loopdev_sidux "${device}${isopath}"
- set root=(loopdev_sidux)
- linux $kernel fromiso=$isopath boot=fll quiet
- initrd $initrd
- loopback -d loopdev_sidux
- }
- done
- return $result
- }
- function slax_iso_entry {
- realdev="$1"
- isopath="$2"
- loopdev="$3"
- if ! test -f /boot/vmlinuz -a -f /boot/initrd.gz; then return 1; fi
- echo slax $isopath: yes
- menuentry "Slax Linux from ${realdev}${isopath}" "$realdev" "$isopath" {
- set device="$2"
- set isopath="$3"
- loopback loopdev_slax "${device}${isopath}"
- set root=(loopdev_slax)
- linux /boot/vmlinuz from=$isopath ramdisk_size=6666 root=/dev/ram0 rw
- initrd /boot/initrd.gz
- loopback -d loopdev_slax
- }
- return 0
- }
- function tinycore_iso_entry {
- realpath="$1"
- isopath="$2"
- loopdev="$3"
- if ! test -f /boot/bzImage -a -f /boot/tinycore.gz; then return 1; fi
- echo tinycore $isopath: yes
- menuentry "Tinycore Linux from ${realdev}${isopath}" "$realdev" "$isopath" {
- set device="$2"
- set isopath="$3"
- loopback loopdev_tiny "${device}${isopath}"
- set root=(loopdev_tiny)
- linux /boot/bzImage
- initrd /boot/tinycore.gz
- loopback -d loopdev_tiny
- }
- return 0
- }
- function casper_iso_entry {
- realpath="$1"
- isopath="$2"
- loopdev="$3"
- if ! test -f /casper/vmlinuz; then return 1; fi
- initrd=
- for f in /casper/initrd.*z; do
- if ! test -f "$f"; then continue; fi
- pathname "$f" initrd
- done
- if test -z "$initrd"; then return 1; fi
- echo casper $isopath: yes
- menuentry "Casper based Linux from ${realdev}${isopath}" "$realdev" "$isopath" "$initrd" {
- set device="$2"
- set isopath="$3"
- set initrd="$4"
- loopback loopdev_casper "${device}${isopath}"
- set root=(loopdev_casper)
- linux /casper/vmlinuz boot=casper iso-scan/filename="$isopath" quiet splash noprompt keyb="$langcode" \
- debian-installer/language="$langcode" console-setup/layoutcode?="$langcode" --
- initrd $initrd
- loopback -d loopdev_casper
- }
- return 0
- }
- function scan_isos {
- isodirs="$1"
- for dev in (*); do
- for dir in $isodirs; do
- for file in ${dev}${dir}/*.iso ${dev}${dir}/*.ISO; do
- if ! test -f "$file"; then continue; fi
- pathname $file isopath
- if test -z "$dev" -o -z "$isopath"; then continue; fi
- if ! loopback loopdev_scan "$file"; then continue; fi
- saved_root=$root
- set root=(loopdev_scan)
- if loopback_iso_entry $dev $isopath (loopdev_scan); then true;
- elif grml_iso_entry $dev $isopath (loopdev_scan); then true;
- elif pmagic_iso_entry $dev $isopath (loopdev_scan); then true;
- elif sidux_iso_entry $dev $isopath (loopdev_scan); then true;
- elif slax_iso_entry $dev $isopath (loopdev_scan); then true;
- elif tinycore_iso_entry $dev $isopath (loopdev_scan); then true;
- elif casper_iso_entry $dev $isopath (loopdev_scan); then true;
- else true; fi
- set root=$saved_root
- loopback -d loopdev_scan
- done
- done
- done
- return 0
- }
- # XXX Remove later
- insmod serial
- serial
- terminal_output --append serial
- # terminal_input --append serial
- langcode="$lang"
- insmod regexp
- scan_isos /iso /boot/iso
|