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).