mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-07-19 09:16:29 +00:00
59 lines
1.3 KiB
Bash
Executable File
59 lines
1.3 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
|
|
;;
|
|
aarch64)
|
|
BOOTFILE=BOOTAA64.EFI
|
|
;;
|
|
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 cmdline)"
|
|
rm cmdline
|
|
|
|
cp /usr/local/share/$BOOTFILE .
|
|
|
|
CFG="set timeout=0
|
|
set gfxpayload=text
|
|
menuentry 'LinuxKit ISO Image' {
|
|
linux /kernel ${CMDLINE} text
|
|
initrd /initrd.img
|
|
}
|
|
"
|
|
|
|
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-initrd.iso .
|
|
|
|
cat linuxkit-efi-initrd.iso
|