Créer un template Cloudinit Debian 12 sur Proxmox

Télécharger l’image cloud debian 12

wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2

Installer libguestfs-tools si nécessaire et ajouter qemu-guest-agent à l’image cloud précédemment téléchargée

apt install -y libguestfs-tools
virt-customize -a debian-12-generic-amd64.qcow2 --install qemu-guest-agent --timezone Europe/France --update

Création de la VM avec l’ID 777

qm create 777 --name debian12-cloudinit --net0 virtio,bridge=vmbr1,tag=3152 --scsihw virtio-scsi-single

Attacher le disque et modifier sa taille à 20G

qm set 777 --scsi0 vmdata:0,iothread=1,backup=off,format=qcow2,import-from=/var/lib/vz/template/iso/debian-12-generic-amd64.qcow2
qm disk resize 777 scsi0 20G

Définir l’ordre de boot

qm set 777 --boot order=scsi0

Définir le nombre de coeurs et la mémoire RAM

qm set 777 --cpu host --cores 4 --memory 4096

Attacher un disque Cloudinit

qm set 777 --ide2 vmdata:cloudinit
qm set 777 --agent enabled=1
qm set 777 --tags "template,debian-cloud"
qm set 777 --ipconfig0 ip=dhcp
qm set 777 --keyboard fr
qm set 777 --ciuser user --cipassword yourpassword
qm set 777 --sshkeys ssh.pub

Convertir en template

qm template 777

Faire la même chose avec un script Bash

#!/bin/bash

# Définir les variables par défaut
DEFAULT_VMID=8000
DEFAULT_NAME="debian-cloudinit-$DEFAULT_VMID"
DEFAULT_IMAGE="debian-12-generic-amd64.qcow2"
DEFAULT_NETWORK="virtio,bridge=vmbr1,tag=vlantag"
DEFAULT_SCSI_DISK="vmdata:0,iothread=1,backup=off,format=qcow2,import-from=$(pwd)/$DEFAULT_IMAGE"
DEFAULT_DISK_SIZE="15G"
DEFAULT_CPU_TYPE="host"
DEFAULT_CORES=4
DEFAULT_MEMORY=4096
DEFAULT_CIUSER="test"
#DEFAULT_CIPASSWORD="yourpassword"
DEFAULT_TAG="template,debian-cloud"


# Fonction pour gérer les erreurs
error_exit() {
    echo -e "Erreur : $1"
    exit 1
}

# Activer la gestion des erreurs
set -e


cat << "EOF"

██╗   ██╗███╗   ███╗    ███████╗███████╗████████╗██╗   ██╗██████╗
██║   ██║████╗ ████║    ██╔════╝██╔════╝╚══██╔══╝██║   ██║██╔══██╗
██║   ██║██╔████╔██║    ███████╗█████╗     ██║   ██║   ██║██████╔╝
╚██╗ ██╔╝██║╚██╔╝██║    ╚════██║██╔══╝     ██║   ██║   ██║██╔═══╝
 ╚████╔╝ ██║ ╚═╝ ██║    ███████║███████╗   ██║   ╚██████╔╝██║
  ╚═══╝  ╚═╝     ╚═╝    ╚══════╝╚══════╝   ╚═╝    ╚═════╝ ╚═╝

EOF
echo -e


# Demander à l'utilisateur de saisir les variables
read -p "Enter VMID [${DEFAULT_VMID}]: " VMID
VMID=${VMID:-$DEFAULT_VMID}

read -p "Enter name [${DEFAULT_NAME}]: " NAME
NAME=${NAME:-$DEFAULT_NAME}

read -p "Enter image name [${DEFAULT_IMAGE}]: " IMAGE
IMAGE=${IMAGE:-$DEFAULT_IMAGE}

read -p "Enter network configuration [${DEFAULT_NETWORK}]: " NETWORK
NETWORK=${NETWORK:-$DEFAULT_NETWORK}

read -p "Enter SCSI disk configuration [${DEFAULT_SCSI_DISK}]: " SCSI_DISK
SCSI_DISK=${SCSI_DISK:-$DEFAULT_SCSI_DISK}

read -p "Enter disk size [${DEFAULT_DISK_SIZE}]: " DISK_SIZE
DISK_SIZE=${DISK_SIZE:-$DEFAULT_DISK_SIZE}

read -p "Enter CPU type [${DEFAULT_CPU_TYPE}]: " CPU_TYPE
CPU_TYPE=${CPU_TYPE:-$DEFAULT_CPU_TYPE}

read -p "Enter number of cores [${DEFAULT_CORES}]: " CORES
CORES=${CORES:-$DEFAULT_CORES}

read -p "Enter memory size in MB [${DEFAULT_MEMORY}]: " MEMORY
MEMORY=${MEMORY:-$DEFAULT_MEMORY}

read -p "Enter Cloud-Init username [${DEFAULT_CIUSER}]: " CIUSER
CIUSER=${CIUSER:-$DEFAULT_CIUSER}

read -p "Enter Cloud-Init password []: " CIPASSWORD # Ajouter -s pour cacher le password
CIPASSWORD=${CIPASSWORD:-$DEFAULT_CIPASSWORD}

read -p "Enter tags [${DEFAULT_TAG}]: " TAG
TAG=${TAG:-$DEFAULT_TAG}

# Étape 1 : Personnaliser l'image avec virt-customize
virt-customize -a "$IMAGE" --install qemu-guest-agent --timezone Europe/Berlin --update

# Étape 2 : Créer une VM avec l'ID spécifié
qm create "$VMID" --name "$NAME" --net0 "$NETWORK" --scsihw virtio-scsi-single

# Étape 3 : Ajouter un nouveau disque dur importé depuis l'image cloud
qm set "$VMID" --scsi0 "$SCSI_DISK"

# Étape 4 : Redimensionner le disque
qm disk resize "$VMID" scsi0 "$DISK_SIZE"

# Étape 5 : Définir le disque dur comme premier disque de démarrage
qm set "$VMID" --boot order=scsi0

# Étape 6 : Définir le nombre de cœurs et la mémoire RAM de la VM
qm set "$VMID" --cpu "$CPU_TYPE" --cores "$CORES" --memory "$MEMORY"

# Étape 7 : Attacher un disque Cloud-Init à la VM et faire la conf
qm set "$VMID" --ide2 vmdata:cloudinit
qm set "$VMID" --agent enabled=1
qm set "$VMID" --tags "$TAG"
qm set "$VMID" --ipconfig0 ip=dhcp
qm set "$VMID" --keyboard fr
qm set "$VMID" --ciuser "$CIUSER" --cipassword "$CIPASSWORD"

# Étape 8 : Convertir la VM en template
qm template "$VMID"

echo "Script exécuté avec succès. La VM $VMID a été créée et convertie en template."