summaryrefslogtreecommitdiff
path: root/src/grub-efi.sh
blob: f3f6b1cc7a46e78367418e8ccc133d108c99c4a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/bin/bash
. samizdat-paths.sh

if [ "$BOOTLOADER_ONLY" ]
then
  linux_kernel_commandline='boot=samizdat components quiet nbdroot=192.168.10.1/samizdat.btrfs nbddev=/dev/nbd0 ip=dhcp'
else
  linux_kernel_commandline='boot=samizdat components quiet'
fi

grub_config()
{
    cat <<EOF
insmod echo
echo GRUB (samizdat)

insmod normal
insmod keystatus

insmod linux
insmod iso9660

insmod part_acorn
insmod part_amiga
insmod part_apple
insmod part_bsd
insmod part_dvh
insmod part_gpt
insmod part_msdos
insmod part_plan
insmod part_sun
insmod part_sunpc

echo Loading vmlinuz...

linux /linux/vmlinuz ${linux_kernel_commandline}

echo Loading initrd.img...
initrd /linux/initrd.img

echo Booting.
echo
boot

EOF
}

real_destdir=$samizdat_grub_efi_dir
[ "$real_destdir" ] || exit 1
destdir=$real_destdir.tmp

set -e
rm -r "${destdir}" 2>/dev/null || true
mkdir -p "${destdir}"/grub/i386-pc/
cp -r /usr/lib/grub/i386-pc/*  "${destdir}"/grub/i386-pc/
rm "${destdir}"/grub/i386-pc/*.img || true

grub_config > "${destdir}"/load_cfg

grub-mkimage -O i386-pc -d /usr/lib/grub/i386-pc/ -o "${destdir}"/core.img -c "${destdir}"/load_cfg  --prefix=/grub iso9660 biosdisk
cat /usr/lib/grub/i386-pc/cdboot.img "${destdir}"/core.img > "${destdir}"/grub/i386-pc/eltorito.img
cat /usr/lib/grub/i386-pc/boot.img "${destdir}"/core.img > "${destdir}"/embedded.img

rm -r "$real_destdir" 2>/dev/null || true
mv -T "$destdir" "$real_destdir"