]>
Commit | Line | Data |
---|---|---|
fa6c7410 CW |
1 | #! /bin/sh |
2 | set -e | |
3 | ||
4 | # Copyright (C) 2010, 2011, 2012 Canonical Ltd. | |
5 | # Author: Colin Watson <cjwatson@ubuntu.com> | |
6 | # | |
7 | # This program is free software; you can redistribute it and/or modify it | |
8 | # under the terms of the GNU General Public License as published by the Free | |
9 | # Software Foundation; either version 2, or (at your option) any later | |
10 | # version. | |
11 | # | |
12 | # This program is distributed in the hope that it will be useful, but | |
13 | # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | |
14 | # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 | # for more details. | |
16 | # | |
17 | # You should have received a copy of the GNU General Public License along | |
18 | # with this program; if not, write to the Free Software Foundation, Inc., | |
19 | # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. | |
20 | ||
21 | # Make EFI boot images for signing. | |
22 | ||
4144b27f CW |
23 | if [ $# -lt 7 ]; then |
24 | echo "usage: $0 GRUB-MKIMAGE GRUB-CORE OUTPUT-DIRECTORY DEB-ARCH PLATFORM EFI-NAME SBAT-CSV [EFI-VENDOR]" | |
fa6c7410 CW |
25 | fi |
26 | ||
27 | grub_mkimage="$1" | |
28 | grub_core="$2" | |
29 | outdir="$3" | |
e8bc4a23 SM |
30 | deb_arch="$4" |
31 | platform="$5" | |
32 | efi_name="$6" | |
4144b27f CW |
33 | sbat_csv="$7" |
34 | efi_vendor="${8:-$(dpkg-vendor --query vendor | tr '[:upper:]' '[:lower:]')}" | |
fa6c7410 | 35 | |
12848774 CW |
36 | # mkfs.msdos may not be on the default PATH. |
37 | export PATH="$PATH:/sbin:/usr/sbin" | |
38 | ||
fa6c7410 CW |
39 | workdir= |
40 | ||
41 | cleanup () { | |
42 | [ -z "$workdir" ] || rm -rf "$workdir" | |
43 | } | |
44 | trap cleanup EXIT HUP INT QUIT TERM | |
45 | ||
46 | rm -rf "$outdir" | |
47 | mkdir -p "$outdir" | |
48 | ||
49 | workdir="$(mktemp -d build-efi-images.XXXXXX)" | |
50 | ||
51 | # GRUB's rescue parser doesn't understand 'if'. | |
52 | echo 'normal (memdisk)/grub.cfg' >"$workdir/grub-bootstrap.cfg" | |
53 | ||
54 | # Skeleton configuration file which finds the real boot disk. | |
55 | cat >"$workdir/grub.cfg" <<EOF | |
81ad9ef0 CW |
56 | if [ -z "\$prefix" -o ! -e "\$prefix" ]; then |
57 | if ! search --file --set=root /.disk/info; then | |
58 | search --file --set=root /.disk/mini-info | |
59 | fi | |
60 | set prefix=(\$root)/boot/grub | |
fa6c7410 | 61 | fi |
fa6c7410 CW |
62 | if [ -e \$prefix/$platform/grub.cfg ]; then |
63 | source \$prefix/$platform/grub.cfg | |
bde7427b | 64 | elif [ -e \$prefix/grub.cfg ]; then |
fa6c7410 | 65 | source \$prefix/grub.cfg |
bde7427b MTL |
66 | else |
67 | source \$cmdpath/grub.cfg | |
fa6c7410 CW |
68 | fi |
69 | EOF | |
70 | ||
ca3f5ead CW |
71 | cat >"$workdir/grub-netboot.cfg" <<EOF |
72 | if [ -e \$prefix/$platform/grub.cfg ]; then | |
73 | source \$prefix/$platform/grub.cfg | |
74 | else | |
75 | source \$prefix/grub.cfg | |
76 | fi | |
77 | EOF | |
78 | ||
fa6c7410 CW |
79 | mkfs.msdos -C "$workdir/memdisk.fat" 64 |
80 | mcopy -i "$workdir/memdisk.fat" "$workdir/grub.cfg" ::grub.cfg | |
81 | ||
ca3f5ead CW |
82 | mkfs.msdos -C "$workdir/memdisk-netboot.fat" 64 |
83 | mcopy -i "$workdir/memdisk-netboot.fat" "$workdir/grub-netboot.cfg" ::grub.cfg | |
84 | ||
fa6c7410 | 85 | CD_MODULES=" |
e7609323 CW |
86 | all_video |
87 | boot | |
88 | btrfs | |
89 | cat | |
90 | chain | |
91 | configfile | |
92 | echo | |
93 | efifwsetup | |
94 | efinet | |
95 | ext2 | |
96 | fat | |
97 | font | |
146d21cc | 98 | f2fs |
e7609323 CW |
99 | gettext |
100 | gfxmenu | |
101 | gfxterm | |
9af7fea1 | 102 | gfxterm_background |
e7609323 CW |
103 | gzio |
104 | halt | |
39245563 | 105 | help |
e7609323 CW |
106 | hfsplus |
107 | iso9660 | |
e24c17ad | 108 | jfs |
e7609323 CW |
109 | jpeg |
110 | keystatus | |
111 | loadenv | |
eb5a1b16 | 112 | loopback |
e7609323 | 113 | linux |
39245563 | 114 | ls |
e7609323 CW |
115 | lsefi |
116 | lsefimmap | |
117 | lsefisystab | |
118 | lssal | |
119 | memdisk | |
120 | minicmd | |
121 | normal | |
f17c7dc0 | 122 | ntfs |
e7609323 CW |
123 | part_apple |
124 | part_msdos | |
125 | part_gpt | |
126 | password_pbkdf2 | |
127 | png | |
6c26522e | 128 | probe |
e7609323 | 129 | reboot |
07481aa3 | 130 | regexp |
e7609323 CW |
131 | search |
132 | search_fs_uuid | |
133 | search_fs_file | |
134 | search_label | |
135 | sleep | |
eb5a1b16 | 136 | squash4 |
e7609323 | 137 | test |
07231bba | 138 | true |
e7609323 | 139 | video |
01f1eee9 | 140 | xfs |
a293f3b3 CW |
141 | zfs |
142 | zfscrypt | |
143 | zfsinfo | |
e7609323 | 144 | " |
84d36c11 | 145 | |
146 | # Platform-specific modules | |
147 | case $platform in | |
bd2c77be | 148 | x86_64-efi|i386-efi) |
84d36c11 | 149 | CD_MODULES="$CD_MODULES |
f17c7dc0 | 150 | cpuid |
84d36c11 | 151 | linuxefi |
f17c7dc0 | 152 | play |
49fe0485 CW |
153 | tpm |
154 | " | |
155 | ;; | |
156 | esac | |
84d36c11 | 157 | |
e7609323 | 158 | GRUB_MODULES="$CD_MODULES |
7f8df903 CW |
159 | cryptodisk |
160 | gcry_arcfour | |
161 | gcry_blowfish | |
162 | gcry_camellia | |
163 | gcry_cast5 | |
164 | gcry_crc | |
165 | gcry_des | |
166 | gcry_dsa | |
167 | gcry_idea | |
168 | gcry_md4 | |
169 | gcry_md5 | |
170 | gcry_rfc2268 | |
171 | gcry_rijndael | |
172 | gcry_rmd160 | |
173 | gcry_rsa | |
174 | gcry_seed | |
175 | gcry_serpent | |
176 | gcry_sha1 | |
177 | gcry_sha256 | |
178 | gcry_sha512 | |
179 | gcry_tiger | |
180 | gcry_twofish | |
181 | gcry_whirlpool | |
4133b434 | 182 | luks |
e7609323 CW |
183 | lvm |
184 | mdraid09 | |
185 | mdraid1x | |
9b00f9af LT |
186 | raid5rec |
187 | raid6rec | |
e7609323 CW |
188 | " |
189 | NET_MODULES="$CD_MODULES | |
190 | tftp | |
191 | " | |
fa6c7410 | 192 | |
e8bc4a23 | 193 | # CD boot image |
0f1841a0 | 194 | echo "Including modules $CD_MODULES in $outdir/gcd$efi_name.efi" |
fa6c7410 | 195 | "$grub_mkimage" -O "$platform" -o "$outdir/gcd$efi_name.efi" \ |
81ad9ef0 | 196 | -d "$grub_core" \ |
fa6c7410 | 197 | -c "$workdir/grub-bootstrap.cfg" -m "$workdir/memdisk.fat" \ |
81ad9ef0 | 198 | -p /boot/grub \ |
4144b27f | 199 | --sbat "$sbat_csv" \ |
fa6c7410 | 200 | $CD_MODULES |
e8bc4a23 SM |
201 | |
202 | # Normal disk boot image | |
0f1841a0 | 203 | echo "Including modules $GRUB_MODULES in $outdir/grub$efi_name.efi" |
fa6c7410 | 204 | "$grub_mkimage" -O "$platform" -o "$outdir/grub$efi_name.efi" \ |
4144b27f CW |
205 | -d "$grub_core" -p "/EFI/$efi_vendor" \ |
206 | --sbat "$sbat_csv" \ | |
207 | $GRUB_MODULES | |
e8bc4a23 SM |
208 | |
209 | # Normal network boot image | |
0f1841a0 | 210 | echo "Including modules $NET_MODULES in $outdir/grubnet$efi_name.efi" |
ca3f5ead CW |
211 | "$grub_mkimage" -O "$platform" -o "$outdir/grubnet$efi_name.efi" \ |
212 | -d "$grub_core" -c "$workdir/grub-bootstrap.cfg" \ | |
e8bc4a23 | 213 | -m "$workdir/memdisk-netboot.fat" \ |
4144b27f CW |
214 | -p /grub \ |
215 | --sbat "$sbat_csv" \ | |
216 | $NET_MODULES | |
e8bc4a23 SM |
217 | |
218 | # Special network boot image for d-i to use. Just the same as the | |
219 | # normal network boot image, but with a different value baked in for | |
220 | # the prefix setting | |
0f1841a0 | 221 | echo "Including modules $NET_MODULES in $outdir/grubnet$efi_name-installer.efi" |
e8bc4a23 SM |
222 | "$grub_mkimage" -O "$platform" -o "$outdir/grubnet$efi_name-installer.efi" \ |
223 | -d "$grub_core" -c "$workdir/grub-bootstrap.cfg" \ | |
224 | -m "$workdir/memdisk-netboot.fat" \ | |
4b9590ca CW |
225 | -p "/${efi_vendor}-installer/$deb_arch/grub" \ |
226 | --sbat "$sbat_csv" \ | |
227 | $NET_MODULES | |
fa6c7410 CW |
228 | |
229 | exit 0 |