linuxkit/tools/mkimage-iso-efi/make-efi
Avi Deitcher ba25e59640 remove linuxefi grub EFI handover to normal linux loading
Signed-off-by: Avi Deitcher <avi@deitcher.net>
2024-08-29 17:30:57 +03:00

83 lines
2.5 KiB
Bash
Executable File

#!/bin/sh
set -e
# get the GRUB2 boot file name
ARCH=${TARGETARCH:-`uname -m`}
case $ARCH in
x86_64)
BOOTFILE=BOOTX64.EFI
ROOTDEV=/dev/sr0
;;
aarch64)
BOOTFILE=BOOTAA64.EFI
ROOTDEV=/dev/vda
;;
esac
mkdir -p /tmp/efi
cd /tmp/efi
# input is a tarball on stdin with kernel and cmdline in /boot
# output is an iso on stdout
# extract. BSD tar auto recognises compression, unlike GNU tar
# only if stdin is a tty, if so need files volume mounted...
[ -t 0 ] || bsdtar xzf -
CMDLINE="$(cat boot/cmdline)"
# if no root= root device specified, assume /dev/{sr0, vda} ie first CD drive
# need to detect the root device automatically in the future
echo "${CMDLINE}" | grep -q 'root=' || CMDLINE="${CMDLINE} root=${ROOTDEV}"
rm boot/cmdline
cp /usr/local/share/$BOOTFILE .
CFG="set timeout=0
set gfxpayload=text
menuentry 'LinuxKit ISO Image' {
linux /boot/kernel ${CMDLINE} text
}
"
mkdir -p EFI/BOOT
printf "$CFG" > EFI/BOOT/grub.cfg
# create a ISO with a EFI boot partition
# Stuff it into a FAT filesystem, making it as small as possible. 511KiB
# headroom seems to be enough; (x+31)/32*32 rounds up to multiple of 32.
mkfs.vfat -v -C boot.img \
$(( ($(stat -c %s "${BOOTFILE}") / 1024 + 511) \
/ 32 * 32 )) > /dev/null
echo "mtools_skip_check=1" >> /etc/mtools.conf && \
mmd -i boot.img ::/EFI
mmd -i boot.img ::/EFI/BOOT
mcopy -i boot.img $BOOTFILE ::/EFI/BOOT/
rm $BOOTFILE
xorriso -as mkisofs \
-R -e boot.img -hide boot.img -hide boot.catalog -no-emul-boot -o linuxkit-efi.iso .
cat linuxkit-efi.iso
# How to build a VHDX. Commented out because we are currently not using it
# Don't delete: It took too long to figure out how to do this...
# # create a disk image (150MB)
# # This is a little odd, as we run this as part of the default command.
# # Can't run this during the build step as it requires privilege.
# # The Magic numbers in losetup are startsector (2048) times 512 and
# # (endsector - startsector) * 512
# CMD cd /tmp/efi && \
# dd if=/dev/zero of=disk.raw bs=1024 count=51200 && \
# sgdisk -N 1 -t 1:ef00 disk.raw && \
# losetup -o 1048576 --sizelimit 51362816 /dev/loop/1 disk.raw && \
# mkfs.vfat /dev/loop/1 && \
# echo "drive c: file=\"/dev/loop/1\" mtools_skip_check=1" > /etc/mtools.conf && \
# mmd c:/EFI && \
# mmd c:/EFI/BOOT && \
# mcopy linuxkit.efi c:/EFI/BOOT/BOOTX64.EFI && \
# losetup -d /dev/loop/1 && \
# qemu-img convert -O vhdx disk.raw linuxkit-boot.vhdx && \
# cp /tmp/efi/linuxkit.efi /tmp/efi/linuxkitefi.iso /tmp/efi/linuxkit-boot.vhdx /mnt/