# 📦 Packer Configuration [![Packer](https://img.shields.io/badge/Packer-1.1.0+-blue?style=flat&logo=packer)](https://developer.hashicorp.com/packer) [![Proxmox](https://img.shields.io/badge/Proxmox-VE-orange?style=flat&logo=proxmox)](https://www.proxmox.com/) ## Overview Packer is used to create a reproducible Windows golden image template. This document details the Packer configuration in [`packer/windows.pkr.hcl`](../../packer/windows.pkr.hcl). --- ## Configuration Structure ```mermaid graph TD subgraph PackerConfig["Packer Configuration"] direction TB Block1[packer { required_plugins }] --> Block2[source "proxmox-iso" "windows-11"] Block2 --> Block3[build { sources } + provisioners] end subgraph Plugins["Plugins"] Plugin[proxmox >= 1.1.0] end subgraph Sources["Source Settings"] VM[VM Settings] --> HW[Hardware] --> Storage[Storage] --> Comm[Communicator] end PackerConfig --> Plugins PackerConfig --> Sources ``` --- ## Full Configuration ```hcl packer { required_plugins { proxmox = { version = ">= 1.1.0" source = "github.com/hashicorp/proxmox" } } } source "proxmox-iso" "windows-11" { # === Connection === proxmox_url = "https://proxmox-host:8006/api2/json" username = "root@pam" password = "secret" node = "la-vmh-07" # === VM Settings === vm_name = "win11-ltsc-template" template_description = "Built with Packer on ${timestamp()}" iso_file = "local:iso/CLIENT_LTSC_EVAL_x64FRE_en-us.iso" # === Hardware (Win11 Compliant) === qemu_agent = true cores = 4 memory = 8192 machine = "q35" bios = "ovmf" # UEFI + TPM 2.0 efi_config { efi_storage_pool = "local-lvm" pre_enrolled_keys = true } tpm_config { version = "2.0" tpm_storage_pool = "local-lvm" } # === Storage === scsi_controller = "virtio-scsi-pci" disks { disk_size = "60G" storage_pool = "local-lvm" type = "virtio" format = "raw" cache_mode = "writeback" } # === Additional ISOs === additional_iso_files { device = "sata1" iso_file = "local:iso/virtio-win.iso" } # === Communicator (WinRM) === communicator = "winrm" winrm_username = "Administrator" winrm_password = "PackerPassword123!" winrm_insecure = true winrm_use_ssl = true # === Boot Command === boot_command = [ "", "", "", "", "" ] boot_wait = "10s" } build { sources = ["source.proxmox-iso.windows-11"] # === Provisioners === provisioner "powershell" { inline = [ # Install VirtIO storage driver "pnputil /add-driver 'E:\\viostor\\w11\\amd64\\*.inf' /install", # Install VirtIO network driver "pnputil /add-driver 'E:\\NetKVM\\w11\\amd64\\*.inf' /install", # Install VirtIO guest tools "& 'E:\\virtio-win-guest-tools.exe' /install /passive /norestart" ] } } ``` --- ## Section Details ### Connection Settings | Setting | Value | Description | |---------|-------|-------------| | `proxmox_url` | `https://proxmox-host:8006/api2/json` | Proxmox API endpoint | | `username` | `root@pam` | Authentication user | | `password` | `secret` | Authentication password | | `node` | `la-vmh-07` | Target Proxmox node | ### Hardware Configuration | Setting | Value | Notes | |---------|-------|-------| | `cores` | 4 | Windows 11 minimum | | `memory` | 8192 | 8 GB RAM | | `machine` | `q35` | Modern chipset | | `bios` | `ovmf` | UEFI firmware | ### Storage Configuration | Setting | Value | Notes | |---------|-------|-------| | `disk_size` | 60G | 60 GB disk | | `storage_pool` | `local-lvm` | LVM storage | | `format` | `raw` | Raw disk format | ### Boot Command ```hcl boot_command = [ "", # Wait 30 seconds "", # Press Enter (handle "Press any key") "", # Confirm boot "", # Continue installation "" # Final confirmation ] boot_wait = "10s" # Initial wait before sending commands ``` --- ## Provisioners ### PowerShell Provisioner The PowerShell provisioner installs VirtIO drivers: ```powershell # Install VirtIO storage driver pnputil /add-driver 'E:\viostor\w11\amd64\*.inf' /install # Install VirtIO network driver pnputil /add-driver 'E:\NetKVM\w11\amd64\*.inf' /install # Install VirtIO guest tools (silent) & 'E:\virtio-win-guest-tools.exe' /install /passive /norestart ``` --- ## Build Process ```mermaid flowchart LR subgraph BuildSteps["Packer Build Process"] direction TB Start[Start Build] --> Create[Create VM] --> MountISO[Mount ISO] --> Install[Windows Install] --> InstallDrivers[Install Drivers] --> Shutdown[Shutdown] --> Template[Convert to Template] end subgraph InstallActions["Windows Setup"] Boot[Boot from ISO] --> WinSetup[Windows Setup] --> OOBE[OOBE - Autounattend.xml] --> Desktop[Desktop - WinRM Ready] end style BuildSteps fill:#e3f2fd style InstallActions fill:#e8f5e9 ``` --- ## Next Steps | Goal | Next Document | |------|---------------| | Configure Autounattend.xml | [Autounattend.xml Guide](autounattend.md) | | Build the template | Run `packer build windows.pkr.hcl` | | View Terraform | [OpenTofu Resources](../04-terraform/main.tf.md) | --- [← Documentation Index](../index.md) | [→ Autounattend.xml](autounattend.md) | [← ISO Requirements](../02-prerequisites/isos.md)