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

Rejoignez notre serveur communautaire Discord

Pour toute question, suggestion ou simplement pour discuter avec la communauté, rejoignez-nous sur Discord !

900+Membres