Introducción

El builder de proxmox para packer, nos permitirá crear un template desde un archivo .json. Adicionalmente para poder descargar el archivo desatendido durante la instalación, packer levantara un servidor web provisional con un puerto random.

Requisitos

La máquina desde donde ejecutaremos Packer, tiene que cumplir los siguiente requisitos:

  • Acceso a la consola de proxmox vía web (por defecto por el puerto 8006)
  • Para hacerlo fácil, packer tiene que estar en la misma VLAN en el cual provisionamos el template.
  • La VLAN anterior tendrá que tener DHCP

Instalación

Primero descargamos packer de la web oficial, es un binario precompilado.

https://www.packer.io/downloads

Lo descomprimimos y ubicamos en el siguiente directorio:

/opt/packer/

Configuración

Descargamos los ficheros .json de la siguiente ubicación:

cd /opt/packer/
git clone https://github.com/danielcastropalomares/packer-pmx-debian10.git

En este ejemplo no necesitamos descargar previamente la ISO, ya que lo realizará packer y la subirá automáticamente a proxmox. Necesitamos conocer la URL de descarga y también el checksum de esta:

debian.json
"iso_checksum": "sha256:ab3763d553330e90869487a6843c88f1d4aa199333ff16b653e60e59ac1fc60b", "iso_storage_pool": "local", "iso_url": "https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-10.4.0-amd64-netinst.iso",

Lo único a modificar es cambiar el iso_storage_pool por el repositorios de ISO que tengas en tu caso:

variables.json
"var_storage_pool": "local-lvm"

 

El fichero variables contiene los siguientes parámetros:

{

  "proxmox_username": "root@pam",                            
  "proxmox_password": "XXXXXXXXXXXXXX",                      
  "var_proxmox_url": "https://192.168.0.222:8006/api2/json", 
  "var_ssh_password": "XXXXXXXXXXXXXX,                       
  "var_ssh_username": "root",                                
  "var_template_name": "debian-10-template",                 
  "var_storage_pool": "local-lvm"                            
}
  • proxmox_username: usuario con acceso a la consola web de proxmox.
  • proxmox_password: password para acceder la consola web de proxmox.
  • var_proxmox_url: URL consola web proxmox.
  • var_ssh_password: password que se utilizará para conectarse una vez finalizada la instalación de Debian.
  • var_ssh_username: usuario que se utilizará para conectarse vía SSH una vez finalizada la instalación de Debian.
  • var_template_name: nombre final del template.
  • var_storage_pool: ubicación del storage pool donde se ubican las ISO.

Durante la instalación desatendida, se creará tanto el password de root como un usuario adicional, a partir de ahora lo llamaremos «user». En mi caso, al tratarse de una POC, utilizare el mismo password tanto para root como para el usuario «user». Para generar el hash del password de root y del usuario durante la instalación:

printf "3LyWccqNZ63ZNtnY" | mkpasswd -s -m md5

Lo configuramos en el fichero http/preseed.cfg, tanto para el usuario como root como user:

d-i passwd/root-password-crypted password $1$DHUlEcsI$D/lF6448SdWmkFceDVD6E0
d-i passwd/user-password-crypted password $1$DHUlEcsI$D/lF6448SdWmkFceDVD6E0

Aqui indicaremos el nombre que le daremos dar al nuevo usuario, en mi caso «user»:

d-i passwd/user-fullname string user 
d-i passwd/username string user

Build

Una vez que hemos finalizado la definición de los parámetros del json y de los ficheros para la instalación de Debian, iniciamos el build:



Podemos seguir el avance de la instalación con la consola de proxmox. Si todo ha salido bien, podremos ver el template creado: