aboutsummaryrefslogtreecommitdiff
path: root/packer
diff options
context:
space:
mode:
Diffstat (limited to 'packer')
-rw-r--r--packer/debian-server-bookworm/debian-server-bookworm.pkr.hcl36
-rw-r--r--packer/debian-server-bookworm/http/preseed.cfg5
-rw-r--r--packer/pkr-builder.pkr.hcl6
-rw-r--r--packer/ubuntu-server-noble/ubuntu-server-noble.pkr.hcl260
4 files changed, 163 insertions, 144 deletions
diff --git a/packer/debian-server-bookworm/debian-server-bookworm.pkr.hcl b/packer/debian-server-bookworm/debian-server-bookworm.pkr.hcl
index d91d308..d93af5e 100644
--- a/packer/debian-server-bookworm/debian-server-bookworm.pkr.hcl
+++ b/packer/debian-server-bookworm/debian-server-bookworm.pkr.hcl
@@ -21,6 +21,11 @@ variable "vm_hostname" {
default = "debian-server-bookworm-test-1"
}
+variable "ssh_private_key_file" {
+ type = string
+ default = "~/.ssh/id_ecdsa"
+}
+
# Resource Definition for the VM Template
source "proxmox-iso" "debian-server-bookworm-test-1" {
@@ -60,11 +65,11 @@ source "proxmox-iso" "debian-server-bookworm-test-1" {
scsi_controller = "virtio-scsi-single"
disks {
- disk_size = "20G"
- format = "raw"
- storage_pool = "local-lvm"
- type = "virtio"
- iothread = true
+ disk_size = "20G"
+ format = "raw"
+ storage_pool = "local-lvm"
+ type = "virtio"
+ io_thread = true
}
# VM CPU Settings
@@ -75,9 +80,9 @@ source "proxmox-iso" "debian-server-bookworm-test-1" {
# VM Network Settings
network_adapters {
- model = "virtio"
- bridge = "vmbr0"
- firewall = "false"
+ model = "virtio"
+ bridge = "vmbr0"
+ firewall = "false"
}
# VM Cloud-Init Settings
@@ -91,7 +96,7 @@ source "proxmox-iso" "debian-server-bookworm-test-1" {
]
boot = "c"
- boot_wait = "10s"
+ boot_wait = "20s"
communicator = "ssh"
# PACKER Autoinstall Settings
@@ -107,7 +112,7 @@ source "proxmox-iso" "debian-server-bookworm-test-1" {
# ssh_password = "your-password"
# - or -
# (Option 2) Add your Private SSH KEY file here
- ssh_private_key_file = "~/.ssh/id_ecdsa"
+ ssh_private_key_file = "${var.ssh_private_key_file}"
# Raise the timeout, when installation takes longer
ssh_timeout = "30m"
@@ -119,6 +124,17 @@ build {
name = "debian-server-bookworm-test-1"
sources = ["source.proxmox-iso.debian-server-bookworm-test-1"]
+ # Using ansible playbooks to configure common base
+ provisioner "ansible" {
+ playbook_file = "../../ansible/playbooks/common.yml"
+ use_proxy = false
+ user = "mas"
+ ansible_env_vars = [
+ "ANSIBLE_HOST_KEY_CHECKING=False",
+ "ANSIBLE_CONFIG=${path.root}/../../ansible/ansible.cfg",
+ ]
+ }
+
# Copy default cloud-init config
provisioner "file" {
source = "files/cloud.cfg"
diff --git a/packer/debian-server-bookworm/http/preseed.cfg b/packer/debian-server-bookworm/http/preseed.cfg
index e5dd8c6..a63e4ab 100644
--- a/packer/debian-server-bookworm/http/preseed.cfg
+++ b/packer/debian-server-bookworm/http/preseed.cfg
@@ -34,6 +34,7 @@ d-i apt-setup/use_mirror boolean true
d-i partman-auto/method string lvm
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-lvm/confirm boolean true
+d-i partman-lvm/confirm_nooverwrite boolean true
d-i partman-auto-lvm/guided_size string max
d-i partman-auto/choose_recipe select atomic
d-i partman-partitioning/confirm_write_new_label boolean true
@@ -68,14 +69,12 @@ d-i preseed/late_command string \
in-target sed -i 's/^#\?PubkeyAuthentication.*/PubkeyAuthentication yes/' /etc/ssh/sshd_config && \
in-target sed -i 's|^#\?AuthorizedKeysFile.*|AuthorizedKeysFile %h/.ssh/authorized_keys|' /etc/ssh/sshd_config && \
in-target sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config && \
- in-targer sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config && \
+ in-target sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config && \
in-target systemctl restart ssh && \
in-target apt-get purge -y snapd unattended-upgrades && \
in-target apt-get autoremove -y && \
in-target apt-get clean && \
in-target cloud-init clean --logs && \
- in-target ufw allow ssh && \
- in-target ufw enable && \
in-target sed -i '/^deb cdrom:/s/^/#/' /etc/apt/sources.list
### Configure GRUB bootloader
diff --git a/packer/pkr-builder.pkr.hcl b/packer/pkr-builder.pkr.hcl
index 4265280..99fccd2 100644
--- a/packer/pkr-builder.pkr.hcl
+++ b/packer/pkr-builder.pkr.hcl
@@ -1,8 +1,12 @@
packer {
required_plugins {
- name = {
+ proxmox = {
version = "~> 1"
source = "github.com/hashicorp/proxmox"
}
+ ansible = {
+ version = "~> 1"
+ source = "github.com/hashicorp/ansible"
+ }
}
}
diff --git a/packer/ubuntu-server-noble/ubuntu-server-noble.pkr.hcl b/packer/ubuntu-server-noble/ubuntu-server-noble.pkr.hcl
index 5ba2019..1bdae1c 100644
--- a/packer/ubuntu-server-noble/ubuntu-server-noble.pkr.hcl
+++ b/packer/ubuntu-server-noble/ubuntu-server-noble.pkr.hcl
@@ -4,151 +4,151 @@
# Variable Definitions
variable "proxmox_api_url" {
- type = string
+ type = string
}
variable "proxmox_api_token_id" {
- type = string
+ type = string
}
variable "proxmox_api_token_secret" {
- type = string
- sensitive = true
+ type = string
+ sensitive = true
}
# Resource Definiation for the VM Template
source "proxmox-iso" "ubuntu-server-noble-test-1" {
- # Proxmox Connection Settings
- proxmox_url = "${var.proxmox_api_url}"
- username = "${var.proxmox_api_token_id}"
- token = "${var.proxmox_api_token_secret}"
- # (Optional) Skip TLS Verification
- insecure_skip_tls_verify = true
-
- # VM General Settings
- node = "pve"
- vm_id = "101"
- vm_name = "ubuntu-server-noble-test-1"
- template_description = "Ubuntu Server Noble Image Test 1"
-
- # VM OS Settings
- # (Option 1) Local ISO File
- # iso_file = "local:iso/ubuntu-24.04.1-live-server-amd64.iso"
- # - or -
- # (Option 2) Download ISO
- # iso_url = "https://releases.ubuntu.com/24.04/ubuntu-24.04-live-server-amd64.iso"
- # iso_checksum = "8762f7e74e4d64d72fceb5f70682e6b069932deedb4949c6975d0f0fe0a91be3"
- # iso_storage_pool = "local"
- # unmount_iso = true
- boot_iso {
- type = "scsi"
- iso_file = "local:iso/ubuntu-24.04.1-live-server-amd64.iso"
- unmount = true
- iso_checksum = "sha512:3d518612aabbdb77fd6b49cb55b824fed11e40540e4af52f5f26174257715c93740f83079ea618b4d933081f0b1bc69d32b7885b7c75bc90da5ad3fe1814cfd4"
- }
-
-
- # VM System Settings
- qemu_agent = true
-
- # VM Hard Disk Settings
- scsi_controller = "virtio-scsi-pci"
-
- disks {
- disk_size = "20G"
- format = "raw"
- storage_pool = "local-lvm"
- type = "virtio"
- }
-
- # VM CPU Settings
- cores = "1"
-
- # VM Memory Settings
- memory = "2048"
-
- # VM Network Settings
- network_adapters {
- model = "virtio"
- bridge = "vmbr0"
- firewall = "false"
- }
-
- # VM Cloud-Init Settings
- cloud_init = true
- cloud_init_storage_pool = "local-lvm"
-
- # PACKER Boot Commands
- boot_command = [
- "<esc><wait>",
- "e<wait>",
- "<down><down><down><end>",
- "<bs><bs><bs><bs><wait>",
- "autoinstall ds=nocloud-net\\;s=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ ---<wait>",
- "<f10><wait>"
- ]
-
- boot = "c"
- boot_wait = "10s"
- communicator = "ssh"
-
- # PACKER Autoinstall Settings
- http_directory = "http"
- # (Optional) Bind IP Address and Port
- # http_bind_address = "0.0.0.0"
- # http_port_min = 8802
- # http_port_max = 8802
-
- ssh_username = "mas"
-
- # (Option 1) Add your Password here
- # ssh_password = "your-password"
- # - or -
- # (Option 2) Add your Private SSH KEY file here
- ssh_private_key_file = "~/.ssh/id_ecdsa"
-
- # Raise the timeout, when installation takes longer
- ssh_timeout = "30m"
- ssh_pty = true
+ # Proxmox Connection Settings
+ proxmox_url = "${var.proxmox_api_url}"
+ username = "${var.proxmox_api_token_id}"
+ token = "${var.proxmox_api_token_secret}"
+ # (Optional) Skip TLS Verification
+ insecure_skip_tls_verify = true
+
+ # VM General Settings
+ node = "pve"
+ vm_id = "101"
+ vm_name = "ubuntu-server-noble-test-1"
+ template_description = "Ubuntu Server Noble Image Test 1"
+
+ # VM OS Settings
+ # (Option 1) Local ISO File
+ # iso_file = "local:iso/ubuntu-24.04.1-live-server-amd64.iso"
+ # - or -
+ # (Option 2) Download ISO
+ # iso_url = "https://releases.ubuntu.com/24.04/ubuntu-24.04-live-server-amd64.iso"
+ # iso_checksum = "8762f7e74e4d64d72fceb5f70682e6b069932deedb4949c6975d0f0fe0a91be3"
+ # iso_storage_pool = "local"
+ # unmount_iso = true
+ boot_iso {
+ type = "scsi"
+ iso_file = "local:iso/ubuntu-24.04.1-live-server-amd64.iso"
+ unmount = true
+ iso_checksum = "sha512:3d518612aabbdb77fd6b49cb55b824fed11e40540e4af52f5f26174257715c93740f83079ea618b4d933081f0b1bc69d32b7885b7c75bc90da5ad3fe1814cfd4"
+ }
+
+
+ # VM System Settings
+ qemu_agent = true
+
+ # VM Hard Disk Settings
+ scsi_controller = "virtio-scsi-pci"
+
+ disks {
+ disk_size = "20G"
+ format = "raw"
+ storage_pool = "local-lvm"
+ type = "virtio"
+ }
+
+ # VM CPU Settings
+ cores = "1"
+
+ # VM Memory Settings
+ memory = "2048"
+
+ # VM Network Settings
+ network_adapters {
+ model = "virtio"
+ bridge = "vmbr0"
+ firewall = "false"
+ }
+
+ # VM Cloud-Init Settings
+ cloud_init = true
+ cloud_init_storage_pool = "local-lvm"
+
+ # PACKER Boot Commands
+ boot_command = [
+ "<esc><wait>",
+ "e<wait>",
+ "<down><down><down><end>",
+ "<bs><bs><bs><bs><wait>",
+ "autoinstall ds=nocloud-net\\;s=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ ---<wait>",
+ "<f10><wait>"
+ ]
+
+ boot = "c"
+ boot_wait = "10s"
+ communicator = "ssh"
+
+ # PACKER Autoinstall Settings
+ http_directory = "http"
+ # (Optional) Bind IP Address and Port
+ # http_bind_address = "0.0.0.0"
+ # http_port_min = 8802
+ # http_port_max = 8802
+
+ ssh_username = "mas"
+
+ # (Option 1) Add your Password here
+ # ssh_password = "your-password"
+ # - or -
+ # (Option 2) Add your Private SSH KEY file here
+ ssh_private_key_file = "~/.ssh/id_ecdsa"
+
+ # Raise the timeout, when installation takes longer
+ ssh_timeout = "30m"
+ ssh_pty = true
}
# Build Definition to create the VM Template
build {
- name = "ubuntu-server-noble-test-1"
- sources = ["source.proxmox-iso.ubuntu-server-noble-test-1"]
-
- # Provisioning the VM Template for Cloud-Init Integration in Proxmox #1
- provisioner "shell" {
- inline = [
- "while [ ! -f /var/lib/cloud/instance/boot-finished ]; do echo 'Waiting for cloud-init...'; sleep 1; done",
- "sudo rm /etc/ssh/ssh_host_*",
- "sudo truncate -s 0 /etc/machine-id",
- "sudo apt -y autoremove --purge",
- "sudo apt -y clean",
- "sudo apt -y autoclean",
- "sudo cloud-init clean",
- "sudo rm -f /etc/cloud/cloud.cfg.d/subiquity-disable-cloudinit-networking.cfg",
- "sudo rm -f /etc/netplan/00-installer-config.yaml",
- "sudo sync"
- ]
- }
-
- # Provisioning the VM Template for Cloud-Init Integration in Proxmox #2
- provisioner "file" {
- source = "files/99-pve.cfg"
- destination = "/tmp/99-pve.cfg"
- }
-
- # Provisioning the VM Template for Cloud-Init Integration in Proxmox #3
- provisioner "shell" {
- inline = [ "sudo cp /tmp/99-pve.cfg /etc/cloud/cloud.cfg.d/99-pve.cfg" ]
- }
-
- # Random personal test, ID #4
- provisioner "shell" {
- inline = [ "id" ]
- }
+ name = "ubuntu-server-noble-test-1"
+ sources = ["source.proxmox-iso.ubuntu-server-noble-test-1"]
+
+ # Provisioning the VM Template for Cloud-Init Integration in Proxmox #1
+ provisioner "shell" {
+ inline = [
+ "while [ ! -f /var/lib/cloud/instance/boot-finished ]; do echo 'Waiting for cloud-init...'; sleep 1; done",
+ "sudo rm /etc/ssh/ssh_host_*",
+ "sudo truncate -s 0 /etc/machine-id",
+ "sudo apt -y autoremove --purge",
+ "sudo apt -y clean",
+ "sudo apt -y autoclean",
+ "sudo cloud-init clean",
+ "sudo rm -f /etc/cloud/cloud.cfg.d/subiquity-disable-cloudinit-networking.cfg",
+ "sudo rm -f /etc/netplan/00-installer-config.yaml",
+ "sudo sync"
+ ]
+ }
+
+ # Provisioning the VM Template for Cloud-Init Integration in Proxmox #2
+ provisioner "file" {
+ source = "files/99-pve.cfg"
+ destination = "/tmp/99-pve.cfg"
+ }
+
+ # Provisioning the VM Template for Cloud-Init Integration in Proxmox #3
+ provisioner "shell" {
+ inline = ["sudo cp /tmp/99-pve.cfg /etc/cloud/cloud.cfg.d/99-pve.cfg"]
+ }
+
+ # Random personal test, ID #4
+ provisioner "shell" {
+ inline = ["id"]
+ }
}