Cobbler : orchestration de deploiements PXE multi-OS

Cobbler : orchestration de deploiements PXE multi-OS

Cobbler est un serveur de provisioning Linux qui gere DHCP, DNS, TFTP, HTTP et fichiers de kickstart/preseed en un seul outil. Ideal pour deployer plusieurs OS et versions sur des centaines de machines.

Introduction

Cobbler centralise :

  • Gestion d'images d'install (distros)
  • Configuration DHCP + DNS + TFTP automatique
  • Templates de kickstart (RHEL), preseed (Debian), autoinstall (Ubuntu)
  • Profils heritables (base > customisation par usage)
  • API REST + CLI
  • Webhooks pour deploy automation
  • Power management (IPMI, iLO) pour rebooter les machines

Cas d'usage : datacenter VeryCloud, lab de provisioning rapide, deploiement automatise de fleet.

Prerequis

  • VPS Linux Debian 12 / Ubuntu 24.04 / Rocky 9
  • 4 vCPU, 4 Go RAM, 100 Go disk minimum
  • LAN avec controle DHCP
  • Acces root

Etape 1 : Installation

Debian / Ubuntu

sudo apt update
sudo apt install -y cobbler cobbler-web dhcp-server tftpd-hpa apache2

Rocky / RHEL

sudo dnf install -y cobbler cobbler-web httpd
sudo systemctl enable --now httpd cobblerd

Etape 2 : Configuration de base

/etc/cobbler/settings.yaml :

default_password_crypted: "$6$rounds=4096$xxxx..."
manage_dhcp: true
manage_dhcp_v4: true
manage_tftpd: true
manage_dns: false
next_server_v4: 192.168.1.5
server: 192.168.1.5
pxe_just_once: true

Generez le password root :

openssl passwd -6

Etape 3 : Demarrer Cobbler

sudo systemctl enable --now cobblerd
sudo cobbler check

cobbler check liste tout ce qui doit etre fixe. Corrigez avant de continuer.

Etape 4 : Configurer DHCP via Cobbler

/etc/cobbler/dhcp.template :

subnet 192.168.1.0 netmask 255.255.255.0 {
    option routers 192.168.1.1;
    option domain-name-servers 1.1.1.1, 8.8.8.8;
    option subnet-mask 255.255.255.0;
    range dynamic-bootp 192.168.1.100 192.168.1.200;
    filename "pxelinux.0";
    next-server $next_server_v4;
}
sudo cobbler sync

Cela regenere les configs DHCP, TFTP et HTTP a partir des templates Cobbler.

Etape 5 : Importer une distro

Telechargez une ISO Debian 12 :

sudo mkdir -p /var/cobbler-isos
cd /var/cobbler-isos
sudo wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.5.0-amd64-netinst.iso
sudo mount -o loop debian-12.5.0-amd64-netinst.iso /mnt

Importez :

sudo cobbler import --name=debian12 --path=/mnt --breed=debian --os-version=bookworm
sudo umount /mnt

Cobbler copie les fichiers d'install dans /var/www/cobbler/distro_mirror/ et cree automatiquement une distro et un profile.

Verifiez :

sudo cobbler distro list
sudo cobbler profile list

Etape 6 : Profile et kickstart

Voir les details du profile :

sudo cobbler profile report --name=debian12-x86_64

Editez le kickstart/preseed associe :

sudo cp /var/lib/cobbler/templates/sample.seed /var/lib/cobbler/templates/debian12.seed
sudo nano /var/lib/cobbler/templates/debian12.seed

Exemple /var/lib/cobbler/templates/debian12.seed :

d-i debian-installer/locale string fr_FR.UTF-8
d-i keyboard-configuration/xkb-keymap select fr

d-i netcfg/choose_interface select auto
d-i netcfg/get_hostname string $hostname

d-i mirror/country string manual
d-i mirror/http/hostname string ftp.fr.debian.org
d-i mirror/http/directory string /debian

d-i passwd/root-login boolean true
d-i passwd/root-password-crypted password $default_password_crypted

d-i clock-setup/utc boolean true
d-i time/zone string Europe/Paris

d-i partman-auto/method string regular
d-i partman-auto/choose_recipe select atomic
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true

tasksel tasksel/first multiselect ssh-server
d-i pkgsel/include string openssh-server sudo curl vim

d-i grub-installer/bootdev string default

d-i finish-install/reboot_in_progress note

Assignez-le au profile :

sudo cobbler profile edit --name=debian12-x86_64 --autoinstall=debian12.seed

Etape 7 : Customiser via profiles heritables

Cobbler supporte les profils enfants pour customisation :

# Profile parent : Debian 12 generique
sudo cobbler profile edit --name=debian12-x86_64 --kopts="quiet"

# Profile enfant : Debian 12 web
sudo cobbler profile add --name=debian12-web --parent=debian12-x86_64 \
    --autoinstall=debian12-web.seed \
    --kopts-post="role=web"

# Profile enfant : Debian 12 db
sudo cobbler profile add --name=debian12-db --parent=debian12-x86_64 \
    --autoinstall=debian12-db.seed

Etape 8 : Enregistrer des hosts (systems)

Pour pre-configurer une machine specifique :

sudo cobbler system add \
    --name=web1 \
    --profile=debian12-web \
    --hostname=web1.verycloud.fr \
    --interface=eth0 \
    --mac=AA:BB:CC:DD:EE:01 \
    --ip-address=192.168.1.20 \
    --netmask=255.255.255.0 \
    --gateway=192.168.1.1 \
    --dns-name=web1.verycloud.fr

Au prochain boot PXE, la machine avec MAC AA:BB:CC:DD:EE:01 recevra automatiquement l'IP 192.168.1.20 et installera le profile debian12-web sans intervention.

sudo cobbler sync

Etape 9 : Power management

Pour rebooter des serveurs distants en IPMI / iLO :

sudo cobbler system edit --name=web1 \
    --power-type=ipmitool \
    --power-address=192.168.100.20 \
    --power-user=admin \
    --power-pass=motdepasse

Commande :

sudo cobbler system poweron --name=web1
sudo cobbler system poweroff --name=web1
sudo cobbler system reboot --name=web1

Combine avec un boot PXE one-time, vous deployez une fleet de zero en quelques minutes.

Etape 10 : Interface web

Apres install de cobbler-web :

sudo htdigest -c /etc/cobbler/users.digest "Cobbler" cobbler

Visitez https://IP:8080/cobbler_web. Login : cobbler + mdp choisi.

L'UI permet : voir distros, profiles, systems, lancer sync, etc.

Etape 11 : Snippets et templates

Cobbler utilise des snippets reutilisables :

sudo nano /var/lib/cobbler/snippets/custom_packages
htop curl vim git fail2ban ufw

Dans votre preseed :

d-i pkgsel/include string openssh-server $SNIPPET('custom_packages')

Etape 12 : API REST

Cobbler expose une API XML-RPC. Aussi du JSON sur /cblr/svc/op/.

Exemple en bash :

curl -k -H "Content-Type: application/json" \
    https://IP:8080/cblr/svc/op/profile_list/

En Python (cobbler-cli) :

import xmlrpc.client
server = xmlrpc.client.Server('http://localhost/cobbler_api')
token = server.login('cobbler', 'password')
profiles = server.get_profiles(token)
print(profiles)

Pratique pour automatiser via vos scripts ou Ansible.

Depannage

"cobbler check" liste plein d'erreurs

Avant de provisionner, fixez chaque erreur. Souvent :

  • SELinux a configurer
  • DHCP/TFTP ports bloques par firewall
  • Apache pas demarre

"Distro not found"

sudo cobbler distro list

Si vide, refaites un import :

sudo cobbler import --name=debian12 --path=/mnt --breed=debian

Sync echoue

sudo cobbler sync 2>&1 | tee /tmp/cobbler-sync.log

Cherchez l'erreur. Souvent un template avec erreur de syntaxe Cheetah.

Client PXE ne trouve pas son system

Verifiez le MAC dans Cobbler :

sudo cobbler system find --mac=AA:BB:CC:DD:EE:01

Sinon, le client va recevoir le profile par defaut.

Performance lente

Cobbler 3.x utilise un backend Python. Si vous avez beaucoup de systems (1000+), considerez Foreman a la place.

Commandes utiles

# Check / sync
sudo cobbler check
sudo cobbler sync

# Distros
sudo cobbler distro list
sudo cobbler distro report --name=debian12
sudo cobbler distro remove --name=debian12

# Profiles
sudo cobbler profile list
sudo cobbler profile add --name=...
sudo cobbler profile edit --name=...
sudo cobbler profile report --name=...

# Systems
sudo cobbler system list
sudo cobbler system add --name=... --mac=... --profile=...
sudo cobbler system find --mac=AA:BB:CC:DD:EE:01

# Power
sudo cobbler system poweron --name=web1
sudo cobbler system reboot --name=web1

# Import
sudo cobbler import --name=ubuntu24 --path=/mnt --breed=ubuntu

# Logs
sudo tail -f /var/log/cobbler/cobbler.log

Conclusion

Cobbler centralise et orchestre vos deploiements :

  • Multi-distro (Debian, Ubuntu, RHEL, etc.)
  • Templates et heritage de profiles
  • Power management
  • API REST

Limites :

  • Complexite initiale plus elevee que PXE simple
  • Moins moderne que MAAS / Foreman
  • Communaute active mais reduite

Pour aller plus loin :

  • Combinez avec Ansible pour la config post-install
  • Pour un workflow plus moderne, regardez Foreman ou MAAS
  • Cobbler 3.x reecrit en Python 3, evite Cobbler 2.x EOL

Ressources

Join our Discord community server

For any questions, suggestions, or just to chat with the community, join us on Discord!

900+Members