source: grub-pc/trunk/fuentes/.pc/grub-shell-no-pad.patch/tests/util/grub-shell.in @ 22

Last change on this file since 22 was 22, checked in by mabarracus, 4 years ago

updated version and apply net.ifnames=0 into debian/rules

File size: 11.6 KB
Line 
1#! /bin/sh
2set -e
3
4# Run GRUB script in a Qemu instance
5# Copyright (C) 2009,2010  Free Software Foundation, Inc.
6#
7# GRUB is free software: you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
9# the Free Software Foundation, either version 3 of the License, or
10# (at your option) any later version.
11#
12# GRUB is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15# GNU General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License
18# along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
19
20# Initialize some variables.
21prefix="@prefix@"
22exec_prefix="@exec_prefix@"
23datarootdir="@datarootdir@"
24builddir="@builddir@"
25srcdir="@srcdir@"
26PACKAGE_NAME=@PACKAGE_NAME@
27PACKAGE_TARNAME=@PACKAGE_TARNAME@
28PACKAGE_VERSION=@PACKAGE_VERSION@
29
30# Force build directory components
31PATH="${builddir}:$PATH"
32export PATH
33
34trim=0
35
36# Usage: usage
37# Print the usage.
38usage () {
39    cat <<EOF
40Usage: $0 [OPTION] [SOURCE]
41Run GRUB script in a Qemu instance.
42
43  -h, --help              print this message and exit
44  -v, --version           print the version information and exit
45  --boot=[fd|hd|cd|net]   boot method for Qemu instance
46  --modules=MODULES       pre-load specified modules MODULES
47  --qemu=FILE             Name of qemu binary
48  --disk=FILE             Attach FILE as a disk
49  --qemu-opts=OPTIONS     extra options to pass to Qemu instance
50  --files=FILES           add files to the image
51  --mkrescue-arg=ARGS     additional arguments to grub-mkrescue
52  --timeout=SECONDS       set timeout
53  --trim                  trim firmware output
54
55$0 runs input GRUB script or SOURCE file in a Qemu instance and prints
56its output.
57
58Report bugs to <bug-grub@gnu.org>.
59EOF
60}
61
62. "${builddir}/grub-core/modinfo.sh"
63qemuopts="${GRUB_QEMU_OPTS}"
64serial_port=com0
65serial_null=
66halt_cmd=halt
67pseries=n
68disk=hda
69case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
70    *-emu)
71        device_map=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1
72        boot=emu
73        console=console
74        disk=0
75        # To skip "Welcome to GRUB" and color setttings
76        trim=1
77        ;;
78    powerpc-ieee1275)
79        boot=hd
80        qemu=qemu-system-ppc
81        console=console
82        serial_port=escc-ch-b
83        serial_null="-serial null"
84        netbootext=elf
85        ;;
86
87    sparc64-ieee1275)
88        boot=cd
89        qemu=qemu-system-sparc64
90        console=
91        serial_port=ieee1275/ttya
92        trim=1
93        qemuopts="$qemuopts -no-reboot"
94        halt_cmd=reboot
95        ;;
96
97    mips-qemu_mips)
98        boot=mips_qemu
99        qemu=qemu-system-mips
100        qemuopts="$qemuopts -M mips"
101        console=vga_text
102        ;;
103    mips-arc)
104        boot=cd
105        qemu=qemu-system-mips64
106        qemuopts="$qemuopts -M indy"
107        serial_port=arc/serial0/line0
108        console=
109        trim=1
110        ;;
111    mipsel-arc)
112        boot=cd
113        qemu=qemu-system-mips64el
114        qemuopts="$qemuopts -M magnum -no-reboot"
115        serial_port=arc/multi0/serial0
116        console=console
117        halt_cmd=reboot
118        trim=1
119        ;;
120    mipsel-qemu_mips)
121        boot=mipsel_qemu
122        qemu=qemu-system-mipsel
123        qemuopts="$qemuopts -M mips"
124        console=vga_text
125        ;;
126    mipsel-loongson)
127        boot=mipsel_fulong2e
128        qemu=qemu-system-mips64el
129        qemuopts="$qemuopts -M fulong2e"
130        console=
131        trim=1
132        ;;
133    i386-coreboot)
134        boot=coreboot
135        qemu=qemu-system-i386
136        console=vga_text
137        ;;
138    i386-multiboot)
139        boot=cd
140        qemu=qemu-system-i386
141        console=vga_text;;
142
143    i386-ieee1275)
144        boot=hd
145        qemu=qemu-system-i386
146        console=console
147        trim=1
148        disk=hdb
149        ;;
150    i386-qemu)
151        boot=qemu
152        qemu=qemu-system-i386
153        console=vga_text;;
154
155    i386-pc)
156        boot=cd
157        qemu=qemu-system-i386
158        console=console
159        netbootext=0
160        ;;
161
162    i386-efi)
163        qemu=qemu-system-i386
164        boot=cd
165        console=console
166        trim=1
167        ;;
168    x86_64-efi)
169        qemu=qemu-system-x86_64
170        boot=cd
171        console=console
172        trim=1
173        ;;
174    *)
175        boot=hd
176        qemu=qemu-system-i386
177        console=console;;
178esac
179
180timeout=60
181mkimage_extra_arg=
182
183# Check the arguments.
184for option in "$@"; do
185    case "$option" in
186    -h | --help)
187        usage
188        exit 0 ;;
189    -v | --version)
190        echo "$0 (GNU GRUB ${PACKAGE_VERSION})"
191        exit 0 ;;
192    --trim)
193        trim=1
194        ;;
195    --debug)
196        debug=1 ;;
197    --modules=*)
198        ms=`echo "$option" | sed -e 's/--modules=//' -e 's/,/ /g'`
199        modules="$modules $ms" ;;
200    --files=*)
201        fls=`echo "$option" | sed -e 's/--files=//' -e 's/,/ /g'`
202        files="$files $fls" ;;
203    --mkrescue-arg=*)
204        mkr=`echo "$option" | sed -e 's/--mkrescue-arg=//' -e 's/,/ /g'`
205        mkrescue_args="$mkrescue_args $mkr" ;;
206    --qemu=*)
207        qemu=`echo "$option" | sed -e 's/--qemu=//' -e 's/,/ /g'`;;
208    --pseries)
209        qemu=qemu-system-ppc64
210        serial_port=ieee1275/hvterm
211        serial_null=
212        qemuopts="$qemuopts -M pseries -no-reboot"
213        trim=1
214        pseries=y
215            ;;
216    --qemu-opts=*)
217        qs=`echo "$option" | sed -e 's/--qemu-opts=//'`
218        qemuopts="$qemuopts $qs" ;;
219    --disk=*)
220        dsk=`echo "$option" | sed -e 's/--disk=//'`
221        if [ ${grub_modinfo_platform} = emu ]; then
222            echo "(hd$disk)  $dsk" >> "$device_map"
223            disk="$((disk+1))"
224        else
225            if [ $disk = error ]; then
226                echo "Too many disks" 1>&2
227                exit 1;
228            fi
229            qemuopts="$qemuopts -$disk $dsk"
230            if [ "$disk" = hda ]; then
231                disk=hdb;
232            elif [ "$disk" = hdb ]; then
233                # CDROM is hdc
234                disk=hdd
235            elif [ "$disk" = hdd ]; then
236                # CDROM is hdc
237                disk=error
238            fi
239        fi
240        ;;
241    --timeout=*)
242        timeout=`echo "$option" | sed -e 's/--timeout=//'`
243        ;;
244
245    # Intentionally undocumented
246    --grub-mkimage-extra)
247        mkimage_extra_arg="$mkimage_extra_arg `argument $option "$@"`"; shift ;;
248    --grub-mkimage-extra=*)
249        mkimage_extra_arg="$mkimage_extra_arg `echo "$option" | sed 's/--grub-mkimage-extra=//'`" ;;
250
251    --boot=*)
252        dev=`echo "$option" | sed -e 's/--boot=//'`
253        if   [ "$dev" = "fd" ] ; then boot=fd;
254        elif [ "$dev" = "hd" ] ; then boot=hd;
255        elif [ "$dev" = "cd" ] ; then boot=cd;
256        elif [ "$dev" = "net" ] ; then boot=net;
257        elif [ "$dev" = "qemu" ] ; then boot=qemu;
258        elif [ "$dev" = "coreboot" ] ; then boot=coreboot;
259        elif [ "$dev" = "mips_qemu" ] ; then boot=mips_qemu;
260        elif [ "$dev" = "mipsel_qemu" ] ; then boot=mipsel_qemu;
261        elif [ "$dev" = "mipsel_fulong2e" ] ; then boot=mipsel_fulong2e;
262        else
263            echo "Unrecognized boot method \`$dev'" 1>&2
264            usage
265            exit 1
266        fi ;;
267    -*)
268        echo "Unrecognized option \`$option'" 1>&2
269        usage
270        exit 1 ;;
271    *)
272        if [ "x${source}" != x ] ; then
273            echo "too many parameters at the end" 1>&2
274            usage
275            exit 1
276        fi
277        source="${option}" ;;
278    esac
279done
280
281if [ "x${source}" = x ] ; then
282    tmpfile=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1
283    while read REPLY; do
284        echo "$REPLY" >> ${tmpfile}
285    done
286    source=${tmpfile}
287fi
288
289cfgfile=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1
290cat <<EOF >${cfgfile}
291grubshell=yes
292EOF
293
294
295if [ "${grub_modinfo_platform}" != emu ]; then
296    echo insmod serial >>${cfgfile}
297fi
298
299if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = powerpc-ieee1275 ]; then
300    echo insmod escc >>${cfgfile}
301fi
302if [ "${grub_modinfo_platform}" != emu ]; then
303    echo "serial ${serial_port}" >>${cfgfile}
304    term="serial_${serial_port}"
305else
306    term=console
307fi
308
309cat <<EOF >>${cfgfile}
310terminfo -g 1024x1024 ${term} dumb
311terminal_input ${term}
312terminal_output ${term}
313EOF
314
315trim_head=664cbea8-132f-4770-8aa4-1696d59ac35c
316
317if [ $trim = 1 ]; then
318    echo "echo $trim_head" >>${cfgfile}
319fi
320
321rom_directory=`mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1
322
323for mod in ${modules}
324do
325    echo "insmod ${mod}" >> ${cfgfile}
326done
327
328cat <<EOF >>${cfgfile}
329source "\$prefix/testcase.cfg"
330# Stop serial output to suppress "ACPI shutdown failed" error.
331EOF
332if [ x$console != x ]; then
333    echo "terminal_output $console" >>${cfgfile}
334fi
335echo "${halt_cmd}" >>${cfgfile}
336
337test -z "$debug" || echo "GRUB script: ${cfgfile}" >&2
338test -z "$debug" || echo "GRUB testcase script: ${tmpfile}" >&2
339test -z "$debug" || echo "Boot device: ${boot}" >&2
340
341isofile=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1
342test -z "$debug" || echo "GRUB ISO file: ${isofile}" >&2
343test -z "$debug" || echo "GRUB ROM directory: ${rom_directory}" >&2
344
345if test -z "$debug"; then
346  qemuopts="${qemuopts} -nographic -monitor file:/dev/null"
347fi
348
349if [ x$boot != xnet ] && [ x$boot != xemu ]; then
350    pkgdatadir="@builddir@" "@builddir@/grub-mkrescue" "--output=${isofile}" "--override-directory=${builddir}/grub-core" \
351        --rom-directory="${rom_directory}" \
352        --themes-directory="@srcdir@/themes" \
353        $mkimage_extra_arg ${mkrescue_args} \
354        "/boot/grub/grub.cfg=${cfgfile}" "/boot/grub/testcase.cfg=${source}" \
355        ${files} >/dev/null 2>&1
356fi
357if [ x$boot = xhd ]; then
358    if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = mips-arc ]; then
359        device="hdb "
360    else
361        device="hda "
362    fi
363    bootdev="-boot c"
364fi
365if [ x$boot = xcd ]; then
366    if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = powerpc-ieee1275 ] && [ x$pseries != xy ] ; then
367        device="-drive if=ide,media=cdrom,file="
368    else
369        device="cdrom "
370    fi
371    bootdev="-boot d"
372fi
373if [ x$boot = xfd ]; then
374    device="fda "
375    bootdev="-boot a"
376fi
377
378if [ x$boot = xqemu ]; then
379    bootdev="-bios ${rom_directory}/qemu.img"
380    device="cdrom "
381fi
382
383if [ x$boot = xmipsel_qemu ]; then
384    bootdev="-kernel ${rom_directory}/mipsel-qemu_mips.elf"
385    device="cdrom "
386fi
387
388if [ x$boot = xmipsel_fulong2e ]; then
389    bootdev="-kernel ${rom_directory}/mipsel-loongson.elf -append machtype=lemote-fuloong-2e"
390    device="cdrom "
391fi
392
393if [ x$boot = xmips_qemu ]; then
394    bootdev="-kernel ${rom_directory}/mips-qemu_mips.elf"
395    device="cdrom "
396fi
397
398if [ x$boot = xcoreboot ]; then
399    imgfile=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1
400    cp "${GRUB_COREBOOT_ROM}" "${imgfile}"
401    "${GRUB_CBFSTOOL}" "${imgfile}" add-payload "${rom_directory}/coreboot.elf" fallback/payload
402    bootdev="-bios ${imgfile}"
403    device="cdrom "
404    test -z "$debug" || echo "Coreboot image: ${imgfile}" >&2
405fi
406
407if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = mipsel-arc ]; then
408    case "$boot" in
409        hd)
410            bootdev="-global ds1225y.filename=$GRUB_QEMU_MAGNUM_NVRAM_DIR/disk" ;;
411        *)
412            bootdev="-global ds1225y.filename=$GRUB_QEMU_MAGNUM_NVRAM_DIR/cdrom";;
413    esac
414fi
415
416do_trim ()
417{
418    if [ $trim = 1 ]; then
419        awk '{ if (have_head == 1) print $0; } /664cbea8-132f-4770-8aa4-1696d59ac35c/ { have_head=1; }'
420    else
421        cat
422    fi
423}
424
425if [ x$boot = xnet ]; then
426    netdir=`mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1
427    pkgdatadir="@builddir@" "@builddir@/grub-mknetdir" "--grub-mkimage=${builddir}/grub-mkimage" "--directory=${builddir}/grub-core" "--net-directory=$netdir" ${mkrescue_args} > /dev/null
428    cp "${cfgfile}" "$netdir/boot/grub/grub.cfg"
429    cp "${source}" "$netdir/boot/grub/testcase.cfg"
430    timeout -s KILL $timeout "${qemu}" ${qemuopts} ${serial_null} -serial file:/dev/stdout -boot n -net "user,tftp=$netdir,bootfile=/boot/grub/${grub_modinfo_target_cpu}-${grub_modinfo_platform}/core.$netbootext"  -net nic  | cat | tr -d "\r" | do_trim
431elif [ x$boot = xemu ]; then
432    grubdir="$(mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX")"
433    mkdir -p "$grubdir/fonts"
434    mkdir -p "$grubdir/themes"
435    mkdir -p "$grubdir/locale"
436    cp "@builddir@/"unicode.pf2 "$grubdir/fonts/unicode.pf2"
437    cp -R "@srcdir@/themes/starfield" "$grubdir/themes/starfield"
438    for file in "@srcdir@/po/"*.gmo; do
439        if [ -f "$file" ]; then
440            cp "$file" "$grubdir/locale/"
441        fi
442    done
443    cp "${cfgfile}" "$grubdir/grub.cfg"
444    cp "${source}" "$grubdir/testcase.cfg"
445    @builddir@/grub-core/grub-emu -m "$device_map" -d "$grubdir" | tr -d "\r" | do_trim
446    rm -rf "$grubdir"
447else
448    timeout -s KILL $timeout "${qemu}" ${qemuopts} ${serial_null} -serial file:/dev/stdout -${device}"${isofile}" ${bootdev} | cat | tr -d "\r" | do_trim
449fi
450if [ x$boot = xcoreboot ]; then
451    test -n "$debug" || rm -f "${imgfile}"
452fi
453test -n "$debug" || rm -f "${isofile}"
454test -n "$debug" || rm -rf "${rom_directory}"
455test -n "$debug" || rm -f "${tmpfile}" "${cfgfile}"
456exit 0
457
458
Note: See TracBrowser for help on using the repository browser.