Proxmox templates maken

Ik gebruik proxmox in mijn homelab om VM’s te draaien maar standaard moet je elke VM installeren vanaf een iso. Gelukkig kan je templates maken en ze met cloud init opzetten. In deze post toon ik hoe ik mijn images maak.

De basis images downloaden

We beginnen met een cloud image van de distributie die we willen gebruiken. Bijna alle distributies maken speciale cloudimages hiervoor. Ik heb enkele gelinkt:

Software toevoegen aan de images

Het belangrijkste dat we moeten toevoegen aan de images is de qemu guest agent. Dit kan met het volgende commando gedaan worden (vervang <image> met de image die je hebt gedownload). Je kan dit ook gebruiken om andere pakketten te installeren.

sudo apt update;
sudo apt install libguestfs-tools -y;
virt-customize --install qemu-guest-agent -a <image>

De templates maken.

Nu de disk image klaar is kunnen we beginnen met de templates te maken. We beginnen met het maken van een lege VM:

qm create 9000 --name debian-12-bookworm-template --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0 --agent 1

vervolgens kunnen we de disk importeren

# replace local-lvm with the name of your storage
qm importdisk 9000 <image> local-lvm
# if you use a normal "directory" volume for storage, you can use this instead:
qm importdisk 9000 <image> local --format qcow2

Vervolgens kunnen we de disk koppelen aan de vm, cloud init aanmaken en enkele andere opties instellen

qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-0
qm set 9000 --ide2 local-lvm:cloudinit
qm set 9000 --boot c --bootdisk scsi0
qm set 9000 --serial0 socket
qm set 9000 --ipconfig0 ip=dhcp
qm set 9000 --cpu cputype=x86-64-v2-AES

Je kan ook al de SSH key en user instellen voor cloudinit

qm set 9000 --sshkeys <filepath>
qm set 9000 --ciuser <username>

Nu kunnen we de disk een wat grotere minimumgrote geven, maar let op dat je dit later wel kunt vergroten, maar niet verkleinen.

qm resize 9000 scsi0 50G
qm template 9000

Als we het template nu clonen, moeten we de VM enkel starten (en eventueel eerst ook de netwerk informatie in cloudinit geven).