Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 6 additions & 9 deletions runner.vm/Dockerfile.root
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
FROM archlinux AS builder
RUN pacman -Syyu --noconfirm && pacman --noconfirm -S mkinitcpio
RUN sed -i 's/MODULES=()/MODULES=(ext4 virtio virtio_pci virtio_net virtio_scsi)/' /etc/mkinitcpio.conf
RUN pacman --noconfirm -S dhcpcd \
docker \
COPY files/ /
RUN pacman -Syyu --noconfirm
RUN pacman --noconfirm -S docker \
docker-buildx \
git \
jq \
linux
COPY files/ /
linux \
mkinitcpio

RUN systemctl enable gcpnetwork.service docker.service runner.service limit.timer
RUN systemctl disable systemd-networkd systemd-timesyncd systemd-resolved
Expand All @@ -22,6 +21,4 @@ RUN truncate -s ${ROOT_PART_SIZE}MiB /rootfs.raw && mkfs.ext4 -E lazy_itable_ini

FROM scratch AS exportfs
COPY --from=buildfs /rootfs.raw /
COPY --from=builder /boot/initramfs-linux.img /
COPY --from=builder /boot/vmlinuz-linux /
COPY --from=builder /usr/lib/systemd/boot/efi/linuxx64.efi.stub /
COPY --from=builder /boot/arch.efi /
17 changes: 6 additions & 11 deletions runner.vm/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,22 @@ if [ -n "$TAR_FILENAME" ]; then
case "$TAR_FILENAME" in
rootfs.raw)
dd bs=${ESP_SIZE}MiB seek=1 of=disk.raw conv=notrunc status=none;;
arch.efi)
mcopy -i disk.raw@@2M - ::/EFI/BOOT/BOOTX64.EFI;;
*)
cat > "$TAR_FILENAME";;
echo "Unexpected file in output: $TAR_FILENAME" && exit 1;;
esac
exit 0
fi

rm disk.raw
[ -f disk.raw ] && echo "disk.raw already exists; need to remove before running script" && exit 1

truncate -s $(($ESP_SIZE - 2))MiB disk.raw
mformat -i disk.raw@@2M -F
mmd -i disk.raw@@2M ::/EFI
mmd -i disk.raw@@2M ::/EFI/BOOT
truncate -s ${DISK_SIZE}MiB disk.raw
parted disk.raw -s mklabel gpt mkpart EFI 2MiB ${ESP_SIZE}MiB mkpart root ${ESP_SIZE}MiB 100% set 1 esp

DOCKER_BUILDKIT=1 docker build --no-cache -o - -q --build-arg ROOT_PART_SIZE=$(($DISK_SIZE - $ESP_SIZE - 1)) -f Dockerfile.root . | tar x --to-command="$BASH_SOURCE"

objcopy \
--add-section .cmdline="cmdline.txt" --change-section-vma .cmdline=0x30000 \
--add-section .linux="vmlinuz-linux" --change-section-vma .linux=0x40000 \
--add-section .initrd="initramfs-linux.img" --change-section-vma .initrd=0x3000000 \
linuxx64.efi.stub BOOTX64.EFI

mmd -i disk.raw@@2M ::/EFI
mmd -i disk.raw@@2M ::/EFI/BOOT
mcopy -i disk.raw@@2M BOOTX64.EFI ::/EFI/BOOT
File renamed without changes.
9 changes: 9 additions & 0 deletions runner.vm/files/etc/mkinitcpio.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# by default mkinitcpio will auto-detect host modules,
# make sure required modules for a VM environment are included
MODULES=(ext4 virtio virtio_pci virtio_net virtio_scsi)

# rest of the settings are default
BINARIES=()
FILES=()
HOOKS=(base udev autodetect modconf kms keyboard keymap consolefont block filesystems fsck)

9 changes: 9 additions & 0 deletions runner.vm/files/etc/mkinitcpio.d/linux.preset
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
ALL_config="/etc/mkinitcpio.conf"
ALL_kver="/boot/vmlinuz-linux"
ALL_microcode=(/boot/*-ucode.img)

PRESETS=('default')

default_image="/boot/initramfs-linux.img"
default_uki="/boot/arch.efi"