aboutsummaryrefslogtreecommitdiff
path: root/packer
diff options
context:
space:
mode:
authorclyhtsuriva <aimeric@adjutor.xyz>2025-01-31 16:55:54 +0100
committerclyhtsuriva <aimeric@adjutor.xyz>2025-01-31 16:55:54 +0100
commit47aa1f63736103deb23bab13bc62d593902a168b (patch)
tree8c4f29176a235094eb330fd84ec8db374c556374 /packer
parentf8d5025fa2b03c2bd1454c8600eda77b7536a4c7 (diff)
packer: updating debian template, currently stuck at 'Waiting for cloud-init'
Diffstat (limited to 'packer')
-rw-r--r--packer/README.md13
-rw-r--r--packer/debian-server-bookworm/debian-server-bookworm.pkr.hcl150
-rw-r--r--packer/debian-server-bookworm/files/99-pve.cfg (renamed from packer/debian/files/99-pve.cfg)0
-rw-r--r--packer/debian-server-bookworm/http/preseed.cfg80
-rw-r--r--packer/debian/debian-server-bookworm.pkr.hcl154
-rw-r--r--packer/debian/http/meta-data0
-rw-r--r--packer/debian/http/user-data35
-rw-r--r--packer/pkr-builder.pkr.hcl (renamed from packer/plugin.pkr.hcl)0
8 files changed, 243 insertions, 189 deletions
diff --git a/packer/README.md b/packer/README.md
index 12009de..e34056d 100644
--- a/packer/README.md
+++ b/packer/README.md
@@ -1,3 +1,16 @@
# Packer Templates
This folder contains Packer templates for creating custom VM images.
+
+# Usage
+
+1. Make sure you have a file called `credentials.pkr.hcl` at the root of packer.
+2. Go into a subdirectory corresponding to an image.
+3. Validate the packer template.
+4. Build the image.
+
+```sh
+cd <image subfolder>
+packer validate -var-file=../credentials.pkr.hcl ./debian-server-bookworm.pkr.hcl
+packer build -var-file=../credentials.pkr.hcl ./debian-server-bookworm.pkr.hcl
+```
diff --git a/packer/debian-server-bookworm/debian-server-bookworm.pkr.hcl b/packer/debian-server-bookworm/debian-server-bookworm.pkr.hcl
new file mode 100644
index 0000000..902105b
--- /dev/null
+++ b/packer/debian-server-bookworm/debian-server-bookworm.pkr.hcl
@@ -0,0 +1,150 @@
+# Debian Server Bookworm (12.9.0)
+# ---
+# Packer Template to create a Debian Server (Bookworm 12.9.0) on Proxmox
+
+# Variable Definitions
+variable "proxmox_api_url" {
+ type = string
+}
+
+variable "proxmox_api_token_id" {
+ type = string
+}
+
+variable "proxmox_api_token_secret" {
+ type = string
+ sensitive = true
+}
+
+variable "vm_hostname" {
+ type = string
+ default = "debian-server-bookworm-test-1"
+}
+
+# Resource Definition for the VM Template
+source "proxmox-iso" "debian-server-bookworm-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 = "100"
+ vm_name = "${var.vm_hostname}"
+ template_description = "Debian Server Bookworm 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/debian-12.9.0-amd64-netinst.iso"
+ unmount = true
+ iso_checksum = "sha512:9ebe405c3404a005ce926e483bc6c6841b405c4d85e0c8a7b1707a7fe4957c617ae44bd807a57ec3e5c2d3e99f2101dfb26ef36b3720896906bdc3aaeec4cd80"
+ }
+
+ # 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 = [
+ "<wait><esc><wait>",
+ "auto preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg netcfg/get_hostname=${var.vm_hostname}<enter>"
+ ]
+
+ 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 = "debian-server-bookworm-test-1"
+ sources = ["source.proxmox-iso.debian-server-bookworm-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 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"]
+ }
+}
diff --git a/packer/debian/files/99-pve.cfg b/packer/debian-server-bookworm/files/99-pve.cfg
index e5477bc..e5477bc 100644
--- a/packer/debian/files/99-pve.cfg
+++ b/packer/debian-server-bookworm/files/99-pve.cfg
diff --git a/packer/debian-server-bookworm/http/preseed.cfg b/packer/debian-server-bookworm/http/preseed.cfg
new file mode 100644
index 0000000..cf696e0
--- /dev/null
+++ b/packer/debian-server-bookworm/http/preseed.cfg
@@ -0,0 +1,80 @@
+### Debian Preseed File for Unattended Installation
+
+### Enable automatic installation
+d-i auto-install/enable boolean true
+
+### Set language, country, and locale
+d-i debian-installer/language string en
+d-i debian-installer/country string US
+d-i debian-installer/locale string en_US.UTF-8
+
+### Console and keyboard configuration
+d-i console-setup/ask_detect boolean false
+d-i debconf/frontend select noninteractive
+d-i keyboard-configuration/xkb-keymap select us
+d-i keymap select us
+
+### Network configuration
+d-i netcfg/choose_interface select auto
+d-i netcfg/get_hostname string debian
+d-i netcfg/get_domain string local
+
+### Set time zone and clock settings
+d-i clock-setup/utc boolean true
+d-i time/zone string UTC
+
+### Configure package mirrors
+d-i mirror/country string FR
+d-i mirror/http/hostname string httpredir.debian.org
+d-i mirror/http/directory string /debian/
+d-i mirror/http/proxy string
+d-i apt-setup/use_mirror boolean true
+
+### Partitioning (Use entire disk, no LVM, no swap)
+d-i partman-auto/method string regular
+d-i partman-auto/choose_recipe select atomic
+d-i partman-partitioning/confirm_write_new_label boolean true
+d-i partman/choose_partition select finish
+d-i partman/confirm boolean true
+d-i partman/confirm_nooverwrite boolean true
+d-i partman-basicfilesystems/no_swap boolean true
+
+### User setup (Create user "mas", disable root login)
+d-i passwd/user-fullname string mas
+d-i passwd/username string mas
+d-i passwd/user-password-crypted password !
+d-i passwd/root-login boolean false
+d-i user-setup/allow-password-weak boolean true
+d-i user-setup/encrypt-home boolean false
+
+### Select base installation packages
+tasksel tasksel/first multiselect standard, ssh-server
+
+### Install additional packages
+d-i pkgsel/include string openssh-server qemu-guest-agent sudo neovim tmux
+
+### SSH setup (Disable password authentication, allow only SSH key)
+d-i preseed/late_command string \
+ in-target mkdir -p /home/mas/.ssh && \
+ in-target chmod 700 /home/mas/.ssh && \
+ in-target /bin/sh -c "echo 'ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCtB9NZgJMVovVR4foT0OOV9GdHeHZoPtK1TGko2W4wli/reKjpUYBhlSPWbaWD9WUbl0RRqdzkODy1fB001zxs= mas@TMV2' >> /home/mas/.ssh/authorized_keys" && \
+ in-target chmod 600 /home/mas/.ssh/authorized_keys && \
+ in-target chown -R mas:mas /home/mas/.ssh && \
+ in-target usermod -aG sudo mas && \
+ in-target sed -i '/^%sudo/c\%sudo ALL=(ALL:ALL) NOPASSWD:ALL' /etc/sudoers && \
+ 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-target systemctl restart ssh && \
+ in-target sed -i '/^deb cdrom:/s/^/#/' /etc/apt/sources.list
+
+### Configure GRUB bootloader
+d-i grub-installer/only_debian boolean true
+d-i grub-installer/with_other_os boolean false
+d-i grub-installer/bootdev string default
+
+### Disable popularity contest (privacy setting)
+popularity-contest popularity-contest/participate boolean false
+
+### Automatically reboot after installation completes
+d-i finish-install/reboot_in_progress note
diff --git a/packer/debian/debian-server-bookworm.pkr.hcl b/packer/debian/debian-server-bookworm.pkr.hcl
deleted file mode 100644
index f077f3b..0000000
--- a/packer/debian/debian-server-bookworm.pkr.hcl
+++ /dev/null
@@ -1,154 +0,0 @@
-# Debian Server Bookworm (12.9.0)
-# ---
-# Packer Template to create a Debian Server (Bookworm 12.9.0) on Proxmox
-
-# Variable Definitions
-variable "proxmox_api_url" {
- type = string
-}
-
-variable "proxmox_api_token_id" {
- type = string
-}
-
-variable "proxmox_api_token_secret" {
- type = string
- sensitive = true
-}
-
-
-# Resource Definiation for the VM Template
-source "proxmox-iso" "debian-server-bookworm-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 = "debian-server-bookworm-test-1"
- template_description = "Debian Server Bookworm 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/debian-12.9.0-amd64-netinst.iso"
- unmount = true
- iso_checksum = "sha512:9ebe405c3404a005ce926e483bc6c6841b405c4d85e0c8a7b1707a7fe4957c617ae44bd807a57ec3e5c2d3e99f2101dfb26ef36b3720896906bdc3aaeec4cd80"
- }
-
-
- # 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 = "debian-server-bookworm-test-1"
- sources = ["source.proxmox-iso.debian-server-bookworm-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" ]
- }
-}
diff --git a/packer/debian/http/meta-data b/packer/debian/http/meta-data
deleted file mode 100644
index e69de29..0000000
--- a/packer/debian/http/meta-data
+++ /dev/null
diff --git a/packer/debian/http/user-data b/packer/debian/http/user-data
deleted file mode 100644
index 952e269..0000000
--- a/packer/debian/http/user-data
+++ /dev/null
@@ -1,35 +0,0 @@
-#cloud-config
-autoinstall:
- version: 1
- locale: en_US
- keyboard:
- layout: us
- ssh:
- install-server: true
- allow-pw: true
- disable_root: true
- ssh_quiet_keygen: true
- allow_public_ssh_keys: true
- packages:
- - qemu-guest-agent
- - sudo
- - neovim
- - tmux
- storage:
- layout:
- name: direct
- swap:
- size: 0
- user-data:
- package_upgrade: true
- timezone: Europe/Paris
- users:
- - name: mas
- groups: [adm, sudo]
- lock-passwd: false
- sudo: ALL=(ALL) NOPASSWD:ALL
- shell: /bin/bash
- # passwd: your-password
- # - or -
- ssh_authorized_keys:
- - ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCtB9NZgJMVovVR4foT0OOV9GdHeHZoPtK1TGko2W4wli/reKjpUYBhlSPWbaWD9WUbl0RRqdzkODy1fB001zxs= mas@TMV2
diff --git a/packer/plugin.pkr.hcl b/packer/pkr-builder.pkr.hcl
index 4265280..4265280 100644
--- a/packer/plugin.pkr.hcl
+++ b/packer/pkr-builder.pkr.hcl