Automatiser la création d'images systèmes (Templates) avec Packer¶
Résumé
Packer est un outil open source développé par HashiCorp qui permet de créer des images machines identiques (templates) pour de multiples plateformes à partir d'une seule configuration source. Ce tutoriel montre comment installer Packer et l'utiliser pour automatiser la création d'un template de machine virtuelle (par exemple, pour Proxmox VE), simplifiant ainsi vos déploiements futurs.
| Propriété | Valeur |
|---|---|
| Difficulté | Intermédiaire |
| OS / Environnement | Linux (Debian/Ubuntu) |
| Dernière mise à jour | 2026-06-25 |
Contexte¶
La création manuelle d'images systèmes (installer l'OS, faire les mises à jour, installer les prérequis de base, nettoyer l'image) est une tâche chronophage et source d'erreurs. Pour des étudiants ou des professionnels (TSSR, Administrateur Système), l'automatisation de cette tâche est indispensable. Packer permet de définir l'infrastructure sous forme de code (Infrastructure as Code - IaC) et de générer des templates fiables et reproductibles pour VMware, Proxmox, AWS, ou même Docker.
Prérequis¶
- Un poste de travail sous Linux (Debian ou Ubuntu).
- Un accès à un hyperviseur (dans cet exemple, Proxmox VE) avec des identifiants API (Token) valides.
- Une connaissance de base du terminal Linux.
Procédure¶
Étape 1 : Installation de Packer¶
Packer est distribué sous forme de binaire. Nous allons utiliser le dépôt officiel de HashiCorp pour l'installer sur Debian/Ubuntu.
# Ajout de la clé GPG officielle de HashiCorp
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
# Ajout du dépôt HashiCorp
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
# Mise à jour des paquets et installation
sudo apt update
sudo apt install packer
Vérifiez l'installation :
Étape 2 : Préparation du projet Packer¶
Créez un dossier dédié pour votre projet Packer et déplacez-vous dedans :
Packer utilise le langage HCL (HashiCorp Configuration Language), similaire à Terraform. Créez un fichier de configuration principal nommé ubuntu-server.pkr.hcl.
Étape 3 : Écriture du fichier de configuration Packer¶
Voici un exemple de configuration pour créer un template Ubuntu Server 24.04 sur Proxmox VE.
Variables d'environnement
Pour des raisons de sécurité, nous n'incluons pas les mots de passe dans le fichier. Ils seront passés via des variables d'environnement.
Créez le fichier ubuntu-server.pkr.hcl et ajoutez le code suivant :
packer {
required_plugins {
proxmox = {
version = ">= 1.1.8"
source = "github.com/hashicorp/proxmox"
}
}
}
variable "proxmox_api_url" {
type = string
}
variable "proxmox_api_token_id" {
type = string
}
variable "proxmox_api_token_secret" {
type = string
sensitive = true
}
source "proxmox-iso" "ubuntu" {
proxmox_url = var.proxmox_api_url
username = var.proxmox_api_token_id
token = var.proxmox_api_token_secret
insecure_skip_tls_verify = true
node = "pve-node-01"
vm_id = 9000
vm_name = "ubuntu-24.04-template"
template_description = "Template Ubuntu 24.04 généré par Packer"
# Paramètres de l'OS
iso_file = "local:iso/ubuntu-24.04-live-server-amd64.iso"
unmount_iso = true
# Paramètres matériels
cores = 2
memory = 2048
scsi_controller = "virtio-scsi-pci"
disks {
disk_size = "20G"
format = "raw"
storage_pool = "local-lvm"
type = "scsi"
}
network_adapters {
model = "virtio"
bridge = "vmbr0"
}
# Détection automatique de l'installation (Cloud-init / Autoinstall)
boot_command = [
"<esc><wait>",
"e<wait>",
"<down><down><down><end>",
" autoinstall ds=nocloud-net\\;s=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ ",
"<f10>"
]
boot_wait = "5s"
http_directory = "http"
ssh_username = "ubuntu"
ssh_password = "password123"
ssh_timeout = "20m"
}
build {
sources = ["source.proxmox-iso.ubuntu"]
provisioner "shell" {
inline = [
"sudo apt-get update",
"sudo apt-get upgrade -y",
"sudo apt-get clean",
# Nettoyage de l'ID machine pour le clonage
"sudo truncate -s 0 /etc/machine-id",
"sudo rm /var/lib/dbus/machine-id",
"sudo ln -s /etc/machine-id /var/lib/dbus/machine-id"
]
}
}
Étape 4 : Fichier Cloud-Init (Autoinstall)¶
L'installation automatisée d'Ubuntu repose sur un fichier de configuration Cloud-Init (user-data). Packer va le servir temporairement via un mini-serveur HTTP intégré.
Créez un dossier http et un fichier user-data à l'intérieur :
Créez le fichier http/user-data :
#cloud-config
autoinstall:
version: 1
identity:
hostname: ubuntu-template
password: "$6$exyv1/u5aY1eKk6r$Kk.z8m3gYn1sU.Tz4L0s2g.oV/2X2K3F4V/5M5E6P7Y8D9J0R1U2N3X4G5K6B7W8D9J0R1U2N3X4G5K6B/"
realname: Ubuntu User
username: ubuntu
ssh:
install-server: true
allow-pw: true
packages:
- qemu-guest-agent
- cloud-init
Mot de passe
Le hash correspond au mot de passe password123. Il est utilisé pour la connexion SSH initiale de Packer.
Créez également un fichier vide http/meta-data :
Étape 5 : Initialisation et Validation¶
Avant de lancer la construction, initialisez le projet pour télécharger le plugin Proxmox :
Validez ensuite la syntaxe de votre fichier :
Étape 6 : Lancement de la construction¶
Exportez vos identifiants Proxmox en tant que variables d'environnement (les noms de variables Packer préfixés par PKR_VAR_) :
export PKR_VAR_proxmox_api_url="https://votre-proxmox:8006/api2/json"
export PKR_VAR_proxmox_api_token_id="packer@pve!mon_token"
export PKR_VAR_proxmox_api_token_secret="votre-secret-token"
Lancez la création du template :
Packer va se connecter à Proxmox, créer une VM, la démarrer sur l'ISO, taper automatiquement la commande de démarrage (boot_command) pour lancer l'autoinstallation, attendre que le port SSH s'ouvre, exécuter le script de nettoyage (provisioner shell), et enfin convertir la VM en template.
Vérification¶
Une fois le processus terminé avec le message Build 'proxmox-iso.ubuntu' finished., connectez-vous à l'interface web de votre Proxmox.
Résultat attendu
Vous devriez voir un nouveau Template (avec l'ID 9000 et le nom ubuntu-24.04-template) dans votre nœud Proxmox. Vous pouvez désormais cloner ce template pour déployer rapidement de nouvelles machines virtuelles identiques, prêtes à l'emploi avec Terraform par exemple !
Ressources¶
- Documentation officielle de Packer — Référence complète pour comprendre et configurer Packer.
- Plugin Packer pour Proxmox — Options et paramètres pour le constructeur Proxmox ISO.
- Autoinstallation Ubuntu (Subiquity) — Documentation pour personnaliser le fichier
user-data.