]> git.proxmox.com Git - grub2.git/blame - util/grub-mkrescue.in
Fix declarations of previous commit
[grub2.git] / util / grub-mkrescue.in
CommitLineData
fc2208b0
RM
1#! /bin/sh -e
2
3# Make GRUB rescue image
4# Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc.
5#
6# GRUB is free software: you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
8# the Free Software Foundation, either version 3 of the License, or
9# (at your option) any later version.
10#
11# GRUB is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14# GNU General Public License for more details.
15#
16# You should have received a copy of the GNU General Public License
17# along with GRUB. If not, see <http://www.gnu.org/licenses/>.
18
19# Initialize some variables.
20transform="@program_transform_name@"
21
22prefix=@prefix@
23exec_prefix=@exec_prefix@
24bindir=@bindir@
25libdir=@libdir@
26PACKAGE_NAME=@PACKAGE_NAME@
27PACKAGE_TARNAME=@PACKAGE_TARNAME@
28PACKAGE_VERSION=@PACKAGE_VERSION@
29target_cpu=@target_cpu@
efda854e 30native_platform=@platform@
fc2208b0
RM
31
32coreboot_dir=${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/${target_cpu}-coreboot
33pc_dir=${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/${target_cpu}-pc
fc2208b0
RM
34
35# Usage: usage
36# Print the usage.
37usage () {
38 cat <<EOF
39Usage: $0 [OPTION] SOURCE...
40Make GRUB rescue image.
41
42 -h, --help print this message and exit
43 -v, --version print the version information and exit
44 --modules=MODULES pre-load specified modules MODULES
74ff1dd5 45 --output=FILE save output in FILE [required]
fc2208b0
RM
46
47$0 generates a bootable rescue image with specified source files or directories.
48
49Report bugs to <bug-grub@gnu.org>.
50EOF
51}
52
53# Check the arguments.
54for option in "$@"; do
55 case "$option" in
56 -h | --help)
57 usage
58 exit 0 ;;
59 -v | --version)
60 echo "$0 (GNU GRUB ${PACKAGE_VERSION})"
61 exit 0 ;;
62 --modules=*)
63 modules=`echo "$option" | sed 's/--modules=//'` ;;
64 --output=*)
65 output_image=`echo "$option" | sed 's/--output=//'` ;;
efda854e
RM
66 # Intentionally undocumented
67 --override-directory=*)
68 override_dir=`echo "${option}/" | sed 's/--override-directory=//'`
69 PATH=${override_dir}:$PATH
70 export PATH
71 ;;
fc2208b0
RM
72 -*)
73 echo "Unrecognized option \`$option'" 1>&2
74 usage
75 exit 1
76 ;;
77 *)
78 source="${source} ${option}" ;;
79 esac
80done
81
74ff1dd5
FZ
82if [ "x${output_image}" = x ] ; then
83 echo "output file must be given" >&2
84 usage
85 exit 1
86fi
87
fc2208b0
RM
88iso9660_dir=`mktemp -d`
89mkdir -p ${iso9660_dir}/boot/grub
90
efda854e
RM
91process_input_dir ()
92{
93 input_dir="$1"
94 platform="$2"
95 mkdir -p ${iso9660_dir}/boot/grub/${target_cpu}-${platform}
96 for file in ${input_dir}/*.mod ${input_dir}/efiemu??.o \
97 ${input_dir}/command.lst ${input_dir}/moddep.lst ${input_dir}/fs.lst \
98 ${input_dir}/handler.lst ${input_dir}/parttool.lst; do
99 if test -f "$file"; then
100 cp -f "$file" ${iso9660_dir}/boot/grub/${target_cpu}-${platform}/
101 fi
102 done
103}
104
105if [ "${override_dir}" = "" ] ; then
106 if test -e "${coreboot_dir}" ; then
107 process_input_dir ${coreboot_dir} coreboot
fc2208b0 108 fi
efda854e
RM
109 if test -e "${pc_dir}" ; then
110 process_input_dir ${pc_dir} pc
111 fi
112else
113 process_input_dir ${override_dir} ${native_platform}
114 coreboot_dir=
115 pc_dir=
116 case "${native_platform}" in
117 coreboot) coreboot_dir=${override_dir} ;;
118 pc) pc_dir=${override_dir} ;;
119 esac
120fi
fc2208b0
RM
121
122# build coreboot core.img
efda854e
RM
123if test -e "${coreboot_dir}" ; then
124 echo "Generates coreboot"
fc2208b0
RM
125 memdisk_img=`mktemp`
126 memdisk_dir=`mktemp -d`
127 mkdir -p ${memdisk_dir}/boot/grub
128 # obtain date-based UUID
129 iso_uuid=$(date +%Y-%m-%d-%H-%M-%S-00)
130
131 modules="$(cat ${coreboot_dir}/partmap.lst) ${modules}"
132 cat << EOF > ${memdisk_dir}/boot/grub/grub.cfg
133search --fs-uuid --set ${iso_uuid}
134set prefix=(\${root})/boot/grub/${target_cpu}-coreboot
135EOF
136 (for i in ${modules} ; do
137 echo "insmod $i"
138 done ; \
139 echo "source /boot/grub/grub.cfg") \
140 > ${iso9660_dir}/boot/grub/i386-pc/grub.cfg
141
142 tar -C ${memdisk_dir} -cf ${memdisk_img} boot
143 rm -rf ${memdisk_dir}
144 grub-mkelfimage -d ${coreboot_dir}/ -m ${memdisk_img} -o ${iso9660_dir}/boot/multiboot.img \
145 memdisk tar search iso9660 configfile sh \
146 ata at_keyboard
147 rm -f ${memdisk_img}
efda854e 148 grub_mkisofs_arguments="${grub_mkisofs_arguments} --modification-date=$(echo ${iso_uuid} | sed -e s/-//g)"
fc2208b0
RM
149fi
150
fc2208b0 151# build eltorito core.img
efda854e
RM
152if test -e "${pc_dir}" ; then
153 echo "Generates eltorito"
fc2208b0
RM
154 core_img=`mktemp`
155 grub-mkimage -d ${pc_dir}/ -o ${core_img} --prefix=/boot/grub/i386-pc \
156 memdisk tar search iso9660 configfile sh \
157 biosdisk
158 cat ${pc_dir}/cdboot.img ${core_img} > ${iso9660_dir}/boot/grub/i386-pc/eltorito.img
159 rm -f ${core_img}
160
161 modules="$(cat ${pc_dir}/partmap.lst) ${modules}"
162 (for i in ${modules} ; do
163 echo "insmod $i"
164 done ; \
165 echo "source /boot/grub/grub.cfg") \
166 > ${iso9660_dir}/boot/grub/i386-pc/grub.cfg
167
efda854e 168 grub_mkisofs_arguments="${grub_mkisofs_arguments} -b boot/grub/i386-pc/eltorito.img -boot-info-table"
fc2208b0
RM
169fi
170
171# build iso image
13774a2f 172grub-mkisofs ${grub_mkisofs_arguments} -o ${output_image} -r ${iso9660_dir} ${source}
fc2208b0
RM
173rm -rf ${iso9660_dir}
174
175exit 0