]> git.proxmox.com Git - grub2.git/blob - debian/build-efi-images
c8c663d61d2edb1ee5b9ac4242c3f60743701e3b
[grub2.git] / debian / build-efi-images
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
23 if [ $# -lt 5 ]; then
24 echo "usage: $0 GRUB-MKIMAGE GRUB-CORE OUTPUT-DIRECTORY PLATFORM EFI-NAME [EFI-VENDOR]"
25 fi
26
27 grub_mkimage="$1"
28 grub_core="$2"
29 outdir="$3"
30 platform="$4"
31 efi_name="$5"
32 efi_vendor="${6:-$(dpkg-vendor --query vendor | tr '[:upper:]' '[:lower:]')}"
33
34 # mkfs.msdos may not be on the default PATH.
35 export PATH="$PATH:/sbin:/usr/sbin"
36
37 workdir=
38
39 cleanup () {
40 [ -z "$workdir" ] || rm -rf "$workdir"
41 }
42 trap cleanup EXIT HUP INT QUIT TERM
43
44 rm -rf "$outdir"
45 mkdir -p "$outdir"
46
47 workdir="$(mktemp -d build-efi-images.XXXXXX)"
48
49 # GRUB's rescue parser doesn't understand 'if'.
50 echo 'normal (memdisk)/grub.cfg' >"$workdir/grub-bootstrap.cfg"
51
52 # Skeleton configuration file which finds the real boot disk.
53 cat >"$workdir/grub.cfg" <<EOF
54 if [ -z "\$prefix" -o ! -e "\$prefix" ]; then
55 if ! search --file --set=root /.disk/info; then
56 search --file --set=root /.disk/mini-info
57 fi
58 set prefix=(\$root)/boot/grub
59 fi
60 if [ -e \$prefix/$platform/grub.cfg ]; then
61 source \$prefix/$platform/grub.cfg
62 elif [ -e \$prefix/grub.cfg ]; then
63 source \$prefix/grub.cfg
64 else
65 source \$cmdpath/grub.cfg
66 fi
67 EOF
68
69 cat >"$workdir/grub-netboot.cfg" <<EOF
70 if [ -e \$prefix/$platform/grub.cfg ]; then
71 source \$prefix/$platform/grub.cfg
72 else
73 source \$prefix/grub.cfg
74 fi
75 EOF
76
77 mkfs.msdos -C "$workdir/memdisk.fat" 64
78 mcopy -i "$workdir/memdisk.fat" "$workdir/grub.cfg" ::grub.cfg
79
80 mkfs.msdos -C "$workdir/memdisk-netboot.fat" 64
81 mcopy -i "$workdir/memdisk-netboot.fat" "$workdir/grub-netboot.cfg" ::grub.cfg
82
83 CD_MODULES="
84 all_video
85 boot
86 btrfs
87 cat
88 chain
89 configfile
90 echo
91 efifwsetup
92 efinet
93 ext2
94 fat
95 font
96 gettext
97 gfxmenu
98 gfxterm
99 gfxterm_background
100 gzio
101 halt
102 help
103 hfsplus
104 iso9660
105 jpeg
106 keystatus
107 loadenv
108 loopback
109 linux
110 ls
111 lsefi
112 lsefimmap
113 lsefisystab
114 lssal
115 memdisk
116 minicmd
117 normal
118 part_apple
119 part_msdos
120 part_gpt
121 password_pbkdf2
122 png
123 reboot
124 search
125 search_fs_uuid
126 search_fs_file
127 search_label
128 sleep
129 squash4
130 test
131 true
132 video
133 xfs
134 zfs
135 zfscrypt
136 zfsinfo
137 "
138
139 # Platform-specific modules
140 case $platform in
141 x86_64-efi|i386-efi)
142 CD_MODULES="$CD_MODULES
143 linuxefi
144 "
145 ;;
146 esac
147
148 GRUB_MODULES="$CD_MODULES
149 cryptodisk
150 gcry_arcfour
151 gcry_blowfish
152 gcry_camellia
153 gcry_cast5
154 gcry_crc
155 gcry_des
156 gcry_dsa
157 gcry_idea
158 gcry_md4
159 gcry_md5
160 gcry_rfc2268
161 gcry_rijndael
162 gcry_rmd160
163 gcry_rsa
164 gcry_seed
165 gcry_serpent
166 gcry_sha1
167 gcry_sha256
168 gcry_sha512
169 gcry_tiger
170 gcry_twofish
171 gcry_whirlpool
172 luks
173 lvm
174 mdraid09
175 mdraid1x
176 raid5rec
177 raid6rec
178 "
179 NET_MODULES="$CD_MODULES
180 tftp
181 "
182
183 "$grub_mkimage" -O "$platform" -o "$outdir/gcd$efi_name.efi" \
184 -d "$grub_core" \
185 -c "$workdir/grub-bootstrap.cfg" -m "$workdir/memdisk.fat" \
186 -p /boot/grub \
187 $CD_MODULES
188 "$grub_mkimage" -O "$platform" -o "$outdir/grub$efi_name.efi" \
189 -d "$grub_core" -p "/EFI/$efi_vendor" $GRUB_MODULES
190 "$grub_mkimage" -O "$platform" -o "$outdir/grubnet$efi_name.efi" \
191 -d "$grub_core" -c "$workdir/grub-bootstrap.cfg" \
192 -m "$workdir/memdisk-netboot.fat" -p /grub $NET_MODULES
193
194 exit 0