diff --git a/runner.vm/Dockerfile.root b/runner.vm/Dockerfile.root index a1884e1..23f7515 100644 --- a/runner.vm/Dockerfile.root +++ b/runner.vm/Dockerfile.root @@ -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 @@ -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 / diff --git a/runner.vm/build.sh b/runner.vm/build.sh index 868b3de..a63f33f 100755 --- a/runner.vm/build.sh +++ b/runner.vm/build.sh @@ -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 diff --git a/runner.vm/cmdline.txt b/runner.vm/files/etc/kernel/cmdline similarity index 100% rename from runner.vm/cmdline.txt rename to runner.vm/files/etc/kernel/cmdline diff --git a/runner.vm/files/etc/mkinitcpio.conf b/runner.vm/files/etc/mkinitcpio.conf new file mode 100644 index 0000000..6af6613 --- /dev/null +++ b/runner.vm/files/etc/mkinitcpio.conf @@ -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) + diff --git a/runner.vm/files/etc/mkinitcpio.d/linux.preset b/runner.vm/files/etc/mkinitcpio.d/linux.preset new file mode 100644 index 0000000..f20b375 --- /dev/null +++ b/runner.vm/files/etc/mkinitcpio.d/linux.preset @@ -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" +