Files
linuxkit/alpine/Dockerfile.efi
Natanael Copa 66ba586cac Move built kernel to arch specific subdir
We want be able to build kernels for different archs without that they
clash with each other so we but the generated files into an $arch subdir.

Signed-off-by: Natanael Copa <natanael.copa@docker.com>
2016-07-25 17:18:02 +02:00

59 lines
2.4 KiB
Docker

# Create a EFI Bootable ISO
FROM alpine:3.4
ENV ARCH=x86_64
RUN apk add --no-cache binutils mtools xorriso gummiboot
RUN mkdir -p /tmp/efi
COPY initrd.img.gz /tmp/efi
COPY kernel/$ARCH/vmlinuz64 /tmp/efi
# Create a EFI boot file with kernel and initrd. From:
# https://github.com/haraldh/mkrescue-uefi/blob/master/mkrescue-uefi.sh
RUN cd /tmp/efi && \
cp /usr/lib/gummiboot/linuxx64.efi.stub . && \
echo "earlyprintk=serial console=ttyS0 mobyplatform=windows" > cmdline.txt && \
objcopy \
--add-section .osrel=/etc/os-release --change-section-vma .osrel=0x20000 \
--add-section .cmdline=./cmdline.txt --change-section-vma .cmdline=0x30000 \
--add-section .linux=./vmlinuz64 --change-section-vma .linux=0x40000 \
--add-section .initrd=initrd.img.gz --change-section-vma .initrd=0x3000000 \
./linuxx64.efi.stub \
mobylinux.efi
# create a ISO with a EFI boot partition
RUN cd /tmp/efi && \
mkdir -p iso && \
dd if=/dev/zero of=iso/efi.raw bs=1024 count=70000 && \
mkfs.vfat iso/efi.raw
RUN cd /tmp/efi && \
echo "mtools_skip_check=1" >> /etc/mtools.conf && \
mmd -i iso/efi.raw ::/EFI && \
mmd -i iso/efi.raw ::/EFI/BOOT && \
mcopy -i iso/efi.raw mobylinux.efi ::/EFI/BOOT/BOOTX64.EFI && \
xorriso -as mkisofs \
-R -f -e efi.raw -no-emul-boot -o mobylinux-efi.iso 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 mobylinux.efi c:/EFI/BOOT/BOOTX64.EFI && \
# losetup -d /dev/loop/1 && \
# qemu-img convert -O vhdx disk.raw mobylinux-boot.vhdx && \
# cp /tmp/efi/mobylinux.efi /tmp/efi/mobylinuxefi.iso /tmp/efi/mobylinux-boot.vhdx /mnt/