VIRTIO_VERSION := 0.1.266 VIRTIO_ISO_URL := https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-$(VIRTIO_VERSION)-1/virtio-win-$(VIRTIO_VERSION).iso VIRTIO_ISO := virtio-win.iso VAR_FILE := variables.pkrvars.hcl .PHONY: all build init validate clean distclean help all: build ## Install Packer QEMU plugin init: packer init . ## Download VirtIO drivers ISO (~500 MB, one-time) $(VIRTIO_ISO): curl -L --progress-bar -o $(VIRTIO_ISO) $(VIRTIO_ISO_URL) virtio-iso: $(VIRTIO_ISO) ## Validate the Packer template (does not run the build) validate: $(VIRTIO_ISO) SWTPM_SOCK=/tmp/dummy-validate \ packer validate -var "swtpm_sock=/tmp/dummy" -var-file=$(VAR_FILE) . ## Build the VM image (starts swtpm, runs Packer, cleans up) build: init $(VIRTIO_ISO) @test -f $(VAR_FILE) || { \ echo "ERROR: $(VAR_FILE) not found."; \ echo " cp variables.pkrvars.hcl.example $(VAR_FILE) and fill it in."; \ exit 1; } bash build.sh $(VAR_FILE) ## Remove build output (keeps downloaded ISOs) clean: rm -rf output/ ## Remove build output and downloaded ISOs distclean: clean rm -f $(VIRTIO_ISO) help: @echo "Targets:" @echo " build Build the VM image (default)" @echo " validate Validate Packer config without building" @echo " init Install Packer plugins" @echo " virtio-iso Download the VirtIO drivers ISO" @echo " clean Remove build output" @echo " distclean Remove build output + downloaded ISOs"