Skip to content
This repository was archived by the owner on Sep 18, 2020. It is now read-only.

Commit d2c3dcd

Browse files
author
Nick Owens
committed
build_library: support uefi boot from iso
1 parent 39c3ec9 commit d2c3dcd

File tree

3 files changed

+81
-31
lines changed

3 files changed

+81
-31
lines changed

build_library/grub.cfg

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -57,23 +57,25 @@ if [ "$net_default_server" != "" ]; then
5757
fi
5858

5959
# Search for the OEM partition, load additional configuration if found.
60-
if [ "$secure_boot" = "0" ]; then
60+
if [ "$secure_boot" = "0" -a -z "$isoboot" ]; then
6161
search --no-floppy --set oem --part-label OEM --hint "$root"
6262
if [ -n "$oem" -a -f "($oem)/grub.cfg" ]; then
6363
source "($oem)/grub.cfg"
6464
fi
6565
fi
6666

6767
# Determine if this is a first boot.
68-
search --no-floppy --set first_boot \
69-
--disk-uuid 00000000-0000-0000-0000-000000000001
70-
if [ -n "$first_boot" ]; then
71-
# Note we explicitly request the disk-guid randomization, first_boot only triggers ignition.
72-
set first_boot="coreos.first_boot=1 coreos.randomize_disk_guid=00000000-0000-0000-0000-000000000001"
73-
fi
74-
75-
if [ -n "$oem_id" ]; then
76-
set oem_id="coreos.oem.id=$oem_id"
68+
if [ -z "$isoboot" ]; then
69+
search --no-floppy --set first_boot \
70+
--disk-uuid 00000000-0000-0000-0000-000000000001
71+
if [ -n "$first_boot" ]; then
72+
# Note we explicitly request the disk-guid randomization, first_boot only triggers ignition.
73+
set first_boot="coreos.first_boot=1 coreos.randomize_disk_guid=00000000-0000-0000-0000-000000000001"
74+
fi
75+
76+
if [ -n "$oem_id" ]; then
77+
set oem_id="coreos.oem.id=$oem_id"
78+
fi
7779
fi
7880

7981
# If no specific console has been set by the OEM then select based on
@@ -107,19 +109,27 @@ fi
107109
# Assemble the options applicable to all the kernels below
108110
set linux_cmdline="rootflags=rw mount.usrflags=ro consoleblank=0 $linux_root $linux_console $first_boot $oem_id $linux_append"
109111

110-
menuentry "CoreOS default" --id=coreos {
111-
gptprio.next -d usr -u usr_uuid
112-
if [ "$usr_uuid" = "7130c94a-213a-4e5a-8e26-6cce9662f132" ]; then
113-
linux$suf /coreos/vmlinuz-a @@MOUNTUSR@@=PARTUUID=$usr_uuid $linux_cmdline
114-
else
115-
linux$suf /coreos/vmlinuz-b @@MOUNTUSR@@=PARTUUID=$usr_uuid $linux_cmdline
116-
fi
117-
}
118-
119-
menuentry "CoreOS USR-A" --id=coreos-a {
120-
linux$suf /coreos/vmlinuz-a @@MOUNTUSR@@=PARTLABEL=USR-A $linux_cmdline
121-
}
112+
if [ -z "$isoboot" ]; then
113+
menuentry "CoreOS default" --id=coreos {
114+
gptprio.next -d usr -u usr_uuid
115+
if [ "$usr_uuid" = "7130c94a-213a-4e5a-8e26-6cce9662f132" ]; then
116+
linux$suf /coreos/vmlinuz-a @@MOUNTUSR@@=PARTUUID=$usr_uuid $linux_cmdline
117+
else
118+
linux$suf /coreos/vmlinuz-b @@MOUNTUSR@@=PARTUUID=$usr_uuid $linux_cmdline
119+
fi
120+
}
121+
122+
menuentry "CoreOS USR-A" --id=coreos-a {
123+
linux$suf /coreos/vmlinuz-a @@MOUNTUSR@@=PARTLABEL=USR-A $linux_cmdline
124+
}
125+
126+
menuentry "CoreOS USR-B" --id=coreos-b {
127+
linux$suf /coreos/vmlinuz-b @@MOUNTUSR@@=PARTLABEL=USR-B $linux_cmdline
128+
}
129+
else
130+
menuentry "CoreOS default" --id=coreos {
131+
linux$suf /coreos/vmlinuz coreos.autologin= $linux_console
132+
initrd$suf /coreos/cpio.gz
133+
}
134+
fi
122135

123-
menuentry "CoreOS USR-B" --id=coreos-b {
124-
linux$suf /coreos/vmlinuz-b @@MOUNTUSR@@=PARTLABEL=USR-B $linux_cmdline
125-
}

build_library/grub_install.sh

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,14 @@ case "${FLAGS_target}" in
5454
CORE_NAME="core.img"
5555
;;
5656
x86_64-efi)
57-
CORE_MODULES+=( serial linuxefi efi_gop getenv smbios efinet verify http )
57+
CORE_MODULES+=( serial linuxefi efi_gop getenv smbios efinet verify http iso9660 )
5858
CORE_NAME="core.efi"
5959
;;
6060
x86_64-xen)
6161
CORE_NAME="core.elf"
6262
;;
6363
arm64-efi)
64-
CORE_MODULES+=( serial efi_gop getenv smbios efinet verify http )
64+
CORE_MODULES+=( serial linux efi_gop getenv smbios efinet verify http iso9660 )
6565
CORE_NAME="core.efi"
6666
BOARD_GRUB=1
6767
;;
@@ -140,6 +140,10 @@ info "Generating ${GRUB_DIR}/load.cfg"
140140
ESP_FSID=$(sudo grub-probe -t fs_uuid -d "${LOOP_DEV}p1")
141141
sudo_clobber "${ESP_DIR}/${GRUB_DIR}/load.cfg" <<EOF
142142
search.fs_uuid ${ESP_FSID} root \$root
143+
if [ "$root" = "(memdisk)" ]; then
144+
set root="(hd0)"
145+
set isoboot="1"
146+
fi
143147
set prefix=(memdisk)
144148
set
145149
EOF

build_library/vm_image_util.sh

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -570,16 +570,17 @@ _write_cpio_disk() {
570570
}
571571

572572
_write_iso_disk() {
573-
local base_dir="${VM_TMP_ROOT}/usr"
573+
local base_dir="${VM_TMP_ROOT}"
574574
local iso_target="${VM_TMP_DIR}/rootiso"
575+
local fat_target="${VM_TMP_DIR}/rootfat"
575576
local dst_dir=$(_dst_dir)
576577
local vmlinuz_name="$(_dst_name ".vmlinuz")"
577578

578579
mkdir "${iso_target}"
579580
pushd "${iso_target}" >/dev/null
580581
mkdir isolinux syslinux coreos
581582
_write_cpio_common "$1" "${iso_target}/coreos/cpio.gz"
582-
cp "${base_dir}"/boot/vmlinuz "${iso_target}/coreos/vmlinuz"
583+
cp "${base_dir}/usr/boot/vmlinuz" "${iso_target}/coreos/vmlinuz"
583584
cp -R /usr/share/syslinux/* isolinux/
584585
cat<<EOF > isolinux/isolinux.cfg
585586
INCLUDE /syslinux/syslinux.cfg
@@ -594,9 +595,44 @@ label coreos
594595
kernel /coreos/vmlinuz
595596
append initrd=/coreos/cpio.gz coreos.autologin
596597
EOF
597-
mkisofs -v -l -r -J -o $2 -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table .
598-
isohybrid $2
598+
599+
# create fat image of grub for EFI
600+
local grub_arch
601+
local grub_name
602+
case $BOARD in
603+
amd64-usr)
604+
grub_arch="x86_64-efi"
605+
grub_name="bootx64.efi"
606+
;;
607+
arm64-usr)
608+
grub_arch="arm64-efi"
609+
grub_name="bootaa64.efi"
610+
;;
611+
esac
612+
613+
# 2880K floppy which fits our grub nicely.
614+
dd if=/dev/zero of=isolinux/efi.img bs=512 count=5760 2>/dev/null
615+
mformat -i isolinux/efi.img -v EFI -f 2880
616+
mmd -i isolinux/efi.img efi
617+
mmd -i isolinux/efi.img efi/boot
618+
mcopy -i isolinux/efi.img -o "${base_dir}/boot/coreos/grub/${grub_arch}/core.efi" "::efi/boot/${grub_name}"
619+
620+
mkisofs -v -l -r -J -o $2 \
621+
-eltorito-boot isolinux/isolinux.bin \
622+
-eltorito-catalog isolinux/boot.cat \
623+
-no-emul-boot \
624+
-boot-load-size 4 \
625+
-boot-info-table \
626+
-eltorito-alt-boot \
627+
-eltorito-platform efi \
628+
-eltorito-boot isolinux/efi.img \
629+
-no-emul-boot \
630+
.
631+
632+
isohybrid --uefi $2
633+
599634
popd >/dev/null
635+
600636
}
601637

602638
# If a config format is defined write it!

0 commit comments

Comments
 (0)