Creating an image
I’m trying to create golden image for AlmaLinux with Packer which would support Proxmox cloud-init (NoCloud option).
Ton’s of tutorials available for Ubuntu, but lack of tutorial for rpm based distro.
So here is my almalinux.pkr.hcl:
# AlmaLinux
# ---
# Packer Template to create an Almalinux Server with Docker on Proxmox
# Install proxmox builder
# packer plugins install github.com/hashicorp/proxmox
# Variable Definitions
# Variable Definitions is set via ENV VAR
# EXPORT PROXMOX_USERNAME
# EXPORT PROXMOX_TOKEN
# EXPORT PROXMOX_URL
# Variable Definitions is set via ENV VAR
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" "almalinux-server-docker" {
# PACKER Autoinstall Settings
http_directory = "http"
boot_command = ["<esc><wait>", "vmlinuz initrd=initrd.img inst.geoloc=0 rd.driver.blacklist=dm-multipath net.ifnames=0 biosdevname=0 ", "ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/kickstart.cfg", "<enter>"]
boot_wait = "10s"
# 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 = "8002"
vm_name = "almalinux-server-docker"
template_description = "Almalinux Image with Docker pre-installed"
ssh_username = "root"
ssh_password = "root"
ssh_timeout = "20m"
# VM OS Settings
# (Option 1) Local ISO File
iso_file = "local:iso/AlmaLinux-8-latest-x86_64-dvd.iso"
# - or -
# (Option 2) Download ISO
# iso_url = "https://releases.ubuntu.com/.../ubuntu-22.04-live-server-amd64.iso"
# iso_checksum = "f8e3086f3cea0fb3fefb29937ab5ed9d19e767079633960ccb50e76153effc98"
iso_storage_pool = "local"
unmount_iso = true
# 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"
storage_pool_type = "lvm"
type = "virtio"
}
# VM CPU Settings
cores = "1"
# VM Memory Settings
memory = "2048"
# VM Network Settings
network_adapters {
model = "virtio"
bridge = "vmbr0"
firewall = "true"
# vlan_tag = "50"
}
# VM Cloud-Init Settings
cloud_init = true
cloud_init_storage_pool = "local-lvm"
}
# Build Definition to create the VM Template
build {
name = "almalinux-server-docker"
sources = ["source.proxmox-iso.almalinux-server-docker"]
provisioner "shell" {
inline = [
"sleep 30",
"echo 'Remove temporary cloud-init files'",
"rm -f /etc/cloud/cloud.cfg.d/05_logging.cfg",
"rm -f /etc/cloud/cloud.cfg.d/99_cleanup.cfg",
"rm -rf /var/lib/cloud/instances/*",
"echo 'Remove SSH host keys'",
"rm -f /etc/ssh/ssh_host_*",
"echo 'Remove Packer SSH key'",
"rm -f /root/.ssh/authorized_keys",
"systemctl enable sshd",
"echo 'Clean package cache'",
"dnf clean all",
"mkdir -p /var/lib/cloud/instance/ "
]
}
provisioner "file" {
source = "cloud-init.cfg"
destination = "/var/lib/cloud/instance/cloud-init.cfg"
}
provisioner "shell" {
inline = [
"echo 'Checking cloud-init configuration'",
"cloud-init schema --config-file /var/lib/cloud/instance/cloud-init.cfg"
]
}
}
kickstart.cfg:
lang en_US
keyboard --vckeymap=us --xlayouts='us'
timezone Europe/Warsaw --isUtc
#root passwrod is root
rootpw $1$random_s$E0GWrlXVjpmiQczaTXyXq/ --iscrypted
#platform x86, AMD64, or Intel EM64T
reboot
text
cdrom
bootloader --location=mbr --append="rhgb quiet crashkernel=auto"
zerombr
clearpart --all --initlabel
autopart
auth --passalgo=sha512 --useshadow
#password for almauser-proxomx is almauser
user --name=almauser-proxmox --password=$6$8v4lYU0pIayoWR0G$MTNdTtiH/Er1zVU.ISdgtqEQIKlJGMds3D8BzIZmFjU4oEiRJkjzsR3/vVoH53.xul6DTPXNv8pSklsWGcqgj1
selinux --disabled
firewall --disabled
skipx
firstboot --disable
%post
usermod -aG wheel almauser-proxmox
dnf install cloud-init -y
%end
%packages
%end
cloud-init.cfg:
#cloud-config
user-data:
hostname: my-almalinux-instance
users:
- name: almalinux-user
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, wheel
ssh_authorized_keys:
- ssh-rsa somerandompublickkeyishereAAAAABBBBBCCCCCDDDDD OpenSSH-rsa-import-061922
packages:
- mc
Command to build image:
packer build -var-file=./credentials.pkr.hcl ./almalinux.pkr.hcl
I’ve got almalinux-server-docker template in Proxmox.
Then I cloned template to a new VM instance and started.
According to boot logs cloud-init is not configuring the system. Also the hostname of a system is not the same as I chose during Clone VM template wizard.
What’s my aim:
I want to create a template for AlmaLinux in Proxmox. The template should automatically set the hostname when cloning through the VM template wizard and make some initial configurations during the first system boot.