summaryrefslogtreecommitdiffstats
path: root/docs/autoiso.cfg
blob: 9ce51c692528ecd4c0aef1099119e1e2a6a628b3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
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