# ------------------------------------------------------------------------- # Name: vm-libvirt-arch-minimal # Desc: Create a minimal Arch Linux VM install on a libvirt/kvm hypervisor. # ------------------------------------------------------------------------- #-------------------- # Requirements block. #-------------------- packer { required_plugins { libvirt = { version = ">= 0.3.4" source = "github.com/thomasklein94/libvirt" } } } # ---------------- # Variables block. # ---------------- data "http" "image_checksum" { url = var.checksum_url } locals { image_checksum = split(" ",data.http.image_checksum.body)[0] libvirt_uri = "qemu+ssh://${var.host_ssh_user}@${var.host_ssh_address}/system?keyfile=${var.host_ssh_private_key}&no_verify=1" nvram_path = "${var.nvram_path_base}/${var.guest_hostname}_VARS.fd" cidata_name = "${var.volume_name}_cidata" } #--------------- # Sources block. #--------------- source "libvirt" "arch-minimal" { libvirt_uri = local.libvirt_uri domain_name = var.guest_hostname vcpu = var.cpu_count memory = var.memory boot_devices = ["hd"] shutdown_mode = "guest" domain_type = var.domain_type arch = var.arch chipset = var.chipset loader_type = var.loader_type loader_path = var.loader_path // nvram_template = var.nvram_template // nvram_path = local.nvram_path nvram_template = local.nvram_path nvram_path = var.nvram_template secure_boot = var.secure_boot volume { alias = "artifact" name = var.volume_name pool = var.volume_pool readonly = false target_dev = "vda" bus = "virtio" format = "qcow2" size = "2G" capacity = var.volume_capacity source { type = "external" urls = [var.image_url] checksum = local.image_checksum // checksum = "f237ada9ba61431f6aebb066d2b3f0b5b432ea21da6034d98248725df1417545" } } volume { alias = "cidata" name = local.cidata_name pool = var.volume_pool readonly = true source { type = "cloud-init" meta_data = jsonencode({ "instance-id" = "${var.guest_hostname}" "hostname" = "${var.guest_hostname}" }) user_data = format("#cloud-config\n%s", jsonencode({ "packages" = [ "qemu-guest-agent", "ufw" ] "runcmd" = [ ["systemctl", "enable", "--now", "qemu-guest-agent"], ["ufw", "enable"], ["ufw", "allow", "from", "${var.ssh_source}", "to", "port", "22", "proto", "tcp"], ["systemctl", "enable", "--now", "ufw"] ] })) network_config = jsonencode({ renderer = "networkd" version = 2 ethernets = { eth0 = { match = { name = "en*" } dhcp4 = false addresses = ["${var.network_address}"] gateway4 = "${var.network_gateway}" nameservers = { addresses = ["${var.network_nameserver}"] search = ["${var.network_domain}"] } } } }) } } artifact_volume_alias = "artifact" network_interface { type = "bridge" bridge = var.bridge_name model = "virtio" alias = "default-network" } network_address_source = "agent" graphics { type = "vnc" port = 5902 } communicator { ssh_username = var.guest_ssh_user ssh_port = var.guest_ssh_port ssh_private_key_file = var.guest_ssh_private_key } communicator_interface = "default-network" } #------------- # Build block. #------------- build { sources = ["source.libvirt.arch-minimal"] }