summaryrefslogtreecommitdiffstats
path: root/docs/autoiso.cfg
diff options
context:
space:
mode:
Diffstat (limited to 'docs/autoiso.cfg')
-rw-r--r--docs/autoiso.cfg244
1 files changed, 244 insertions, 0 deletions
diff --git a/docs/autoiso.cfg b/docs/autoiso.cfg
new file mode 100644
index 0000000..9ce51c6
--- /dev/null
+++ b/docs/autoiso.cfg
@@ -0,0 +1,244 @@
+# 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
+