Check if the appropiate grub packages are installed in GRMLBASE/45-grub-images and...
[grml-live.git] / etc / grml / fai / config / scripts / GRMLBASE / 45-grub-images
1 #!/bin/bash
2 # Filename:      ${GRML_FAI_CONFIG}/config/scripts/GRMLBASE/45-efi
3 # Purpose:       create grub image for use in ISO for EFI boot
4 # Authors:       grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
5 # Bug-Reports:   see http://grml.org/bugs/
6 # License:       This file is licensed under the GPL v2 or any later version.
7 ################################################################################
8
9 set -e
10
11
12 BOOTX64="${target}/boot/bootx64.efi"
13 EFI_IMG="${target}/boot/efi.img"
14 TMP_CONFIG="${target}/tmp/grub_config_efi"
15
16 rm -f "$BOOTX64" "$EFI_IMG" "$TMP_CONFIG"
17
18 cat > "$TMP_CONFIG" <<EOF
19 search --set -f /conf/bootid.txt root
20 if [ -e /boot/grub/grub.cfg ]; then
21  set prefix=(\$root)/boot/grub
22  configfile /boot/grub/grub.cfg
23 else
24  echo "E: Could not find root device!"
25 fi
26 EOF
27
28 BOOTX64="${BOOTX64##${target}}"
29 EFI_IMG="${EFI_IMG##${target}}"
30 TMP_CONFIG="${TMP_CONFIG##${target}}"
31
32
33 declare -A ADDITIONAL_MODULES
34 ARCHS=()
35
36 if [ -r "${target}"/usr/lib/grub/i386-pc/moddep.lst ] ;  then
37   ARCHS+=(i386-pc)
38   ADDITIONAL_MODULES[i386-pc]="biosdisk"
39 fi
40
41 if ifclass AMD64 ; then
42   if [ -r "${target}"/usr/lib/grub/x86_64-efi/moddep.lst ] ; then
43     ARCHS+=(x86_64-efi)
44     ADDITIONAL_MODULES[x86_64-efi]="efi_gop efi_uga"
45   else
46     echo "/usr/lib/grub/x86_64-efi/moddep.lst could not be found, skipping."
47     echo "NOTE: grub-efi-amd64-bin not installed?"
48   fi
49 fi
50
51 BOOTX64="${BOOTX64##${target}}"
52 EFI_IMG="${EFI_IMG##${target}}"
53 TMP_CONFIG="${TMP_CONFIG##${target}}"
54
55
56 if [ -z "$ARCHS" ] ; then
57   echo "WARNING: No grub modules found, exiting" >&2
58   exit 0
59 fi
60
61 for arch in ${ARCHS[@]} ; do
62 $ROOTCMD grub-mkimage -O $arch -o /boot/$arch.img --prefix=/boot/grub/ --config="$TMP_CONFIG" \
63   bitmap boot btrfs cat chain cmp configfile cpio echo elf ext2    \
64   fat gfxmenu gfxterm gzio help iso9660 jpeg linux loopback lvm    \
65   memdisk minicmd multiboot normal part_gpt part_msdos play png    \
66   probe raid regexp reiserfs search search_fs_file search_fs_uuid  \
67   search_label squash4 terminal test video videoinfo xfs ${ADDITIONAL_MODULES[$arch]}
68 done
69
70 if [ -f "${target}/boot/i386-pc.img" ] ; then
71   mv "${target}/boot/i386-pc.img" "${target}/boot/grub/grub.img"
72 fi
73
74 if [ -f "${target}/boot/x86_64-efi.img" ] ; then
75   mv "${target}/boot/x86_64-efi.img" "${target}/${BOOTX64}"
76 fi
77
78 if ifclass AMD64 ; then
79   if ! [ -r "${target}/${BOOTX64}" ] ; then
80     echo "Can not access grub efi image." >&2
81     exit 0
82   fi
83
84   SIZE=$(du -sk "${target}/${BOOTX64}" | awk -F" " '{print $1'})
85   SIZE=$(((($SIZE / 32 )+2)*32))
86
87   dd if=/dev/zero of="${target}/${EFI_IMG}" bs=1k count="$SIZE" 2>/dev/null
88   $ROOTCMD mkfs.vfat -n GRML "$EFI_IMG" >/dev/null
89   $ROOTCMD mmd -i "$EFI_IMG" ::EFI
90   $ROOTCMD mmd -i "$EFI_IMG" ::EFI/BOOT
91   $ROOTCMD mcopy -i "$EFI_IMG" "$BOOTX64" ::EFI/BOOT/bootx64.efi >/dev/null
92   echo "Generated EFI image $BOOTX64"
93   echo "Generated bootx64 image $EFI_IMG"
94 fi
95
96 rm -f "${target}/${TMP_CONFIG}"
97 echo "Generated Grub images"
98
99
100 ## END OF FILE #################################################################
101 # vim:ft=sh expandtab ai tw=80 tabstop=4 shiftwidth=2