Clonezilla ou comment installer 130 systèmes en quelques heures.

le

Notre mission puisque nous l'acceptions : installer Meego sur 130 Lenovo S10-3t. Nous avions deux jours.

Ma première idée : utiliser CloneZilla, rassembler un switch 24 ports, une bonne vingtaine de cordons ethernet et trouver une machine disponible pour l'utiliser comme serveur de réplication.

Clonezilla

Clonezilla existe en deux versions: Clonezilla Live et Clonezilla SE (pour Server Edition). La première est prévue pour la sauvegarde et la restauration d'une unique machine et la seconde est faite pour le déploiement massif (notamment en multicast).

Dans la documentation suivante nous générons une image du disque complet de la machine à cloner (nommée master) puis nous la clonons en multicast sur des lots de 13 machines.

Création de l'image disque du master

On utilise Clonezilla live. La création du volume bootable s'effectue avec tuxboot.

Une fois le volume booté, on choisi le mode Clonezilla Live, on précise le langage et l'agencement du clavier puis on Start Clonezilla. Dans notre cas nous avons utilisé le mode device-image qui permet de créer une image du disque entier, pour le servir ensuite avec notre serveur Clonezilla, mis en place à l'étape suivante.

Installation de Clonezilla et configuration

Clonezilla s'appuie sur DRBL (Diskless Remote Boot in Linux) pour permettre le boot PXE. DRBL est à l'origine conçu comme un serveur pour clients légers, fournissant des noyaux bootables en PXE, il inclut également Clonezilla.

Pour installer Clonezilla, on télécharge puis installe donc DRBL à la main ou on rajoute le dépôt quivabien dans son sources.list.d et on laisse apt faire le reste:

# echo -e "\n# DRBL & Clonezilla repositories\ndeb http://drbl.sourceforge.net/drbl-core drbl stable" >/etc/apt/sources.list.d/drbl.list
# curl http://drbl.nchc.org.tw/GPG-KEY-DRBL | apt-key add -
# aptitude update && aptitude install drbl

À noter que drbl n'a d'autres dépendances que bash et perl, mais il installera certains paquets lors de sa configuration (ouais, c'est sale).

La configuration se passe ensuite d'une manière semblable à un rituel païen : un ensemble de scripts à invoquer dans le bon ordre, et des réponses à fournir à certaines énigmes. Clonezilla est prévu pour fonctionner avec deux interfaces réseaux : une pour le Internet et une pour le réseau local. Pour des raisons pratiques nous faisons fi de cette recommandation, ne gardant la connexion à Internet que lors de la première étape où à lieu le téléchargement des paquets nécessaires. Par la suite on branchera l'interface réseau sur le réseau local, réseau sur lequel il n'y a que les machines destinataires de l'image clonée.

Voici la suite des invocations de scripts réalisées ensuite :

  • # /opt/drbl/sbin/drblsrv -i

Ce script demande s'il faut installer un autre noyau que celui du serveur, s'il faut configurer la console série, quelle architecture utiliser et s'il faut mettre à jour le système du serveur. On répond non ou i686 à toutes les questions. Ensuite, on peut se passer de la connexion à Internet pour se connecter uniquement au réseau local.

  • # /opt/drbl/sbin/drbl4imp

    Cette étape ne me semble pas essentielle, ce script drbl4imp (lire DRBL for impatients) configure très rapidement DRBL à des valeurs par défaut qui correspondront à la plupart des usages.

  • # /opt/drbl/sbin/drblpush -i

Ici c'est la configuration du serveur DRBL, le script posera des questions sur l'interface réseau à choisir, le nombre de machines à cloner, les plages d'adresses IP à attribuer, etc.

Lancement de Clonezilla

On invoque # /opt/drbl/sbin/dcs qui nous posera encore quelques questions, notamment sur le mode de clonage (on choisira multicast) et sur le comportement des clients, afin de générer et lancer la commande que voici :

# /opt/drbl/sbin/drbl-ocs -b -e2 -x -nogui -j2 -y1 -p reboot --clients-to-wait 13 -l fr_FR.UTF8 startdisk multicast_restore lenovo-meego-OEM-img-2011-10-27-11 sda

Correction des bugs de boot

Au lancement du premier lot de clonage, le noyau booté en PXE par les Lenovos ne détectait pas la carte réseau (NIC pour les intimes) et donc bloquait ... parce qu'elle n'était détectée que quelques secondes après que le noyau ai tenté de la configurer. Une solution a été trouvée en modifiant le configuration du noyau servi par le PXE :

  • Ajout de timeouts plus longs sur la détection du réseau dans /usr/lib/mkpxeinitrd-net/initrd-skel/etc/modules, deux modifications :

    sleep_time_after_NIC="5"
    et
    link_detect_timeout="150"
  • Ajout des modules nécessaires à la détection de l'interface réseau dans /usr/lib/mkpxeinitrd-net/initrd-skel/linuxrc.conf :

    broadcom
     tg3
     libphy
  • Création de l'initrd servi en PXE :

    # mkpxeinitrd-net

La morale de l'histoire

Le clonage d'un lot à proprement parler prenait moins de 10 minutes. L'ensemble des opérations (incluant déballage, installation des ultraportables autour du switch, rangement de ces derniers une fois le clonage terminé) nous a donc prit 7 bonnes heures, plus le temps de faire la chasse aux bugs et de domestiquer Clonezilla. Sans oublier ensuite de décoller le honteux sceau « Windows 7 » sur les machines fraîchement libérées et de réaliser que les Ghosts appartiennent au passé.


Partager cet article :