Secrets d'un déploiement réussi (Ecrit en 2004)

Intro

Vous qui êtes responsable d'un parc d'au moins une vingtaine de machines, une question vous est sûrement venu à l'esprit: « comment diminuer le nombre de pannes ? ». Une partie de la réponse passe par l'uniformisation du matériel et du logiciel et donc par un déploiement d'OS pré installés. Je vais vous expliquer ici toute la démarche que j'ai mise en place pour déployer un parc de cent machines à moindre frais. Le parc est composé de trois types de machines: des portables, des pc de bureautique et des pc de CAO.

Pour déployer un parc de machines (Microsoft en général) les solution mises à disposition dans le commerce s'avèrent le plus souvent fort onéreuses. Heureusement notre OS préféré est la pour remettre en place. Cette méthode peut s'appliquer à tout type d'OS sur tout type de plates formes (à partir du moment où celles-ci peuvent booter sur un CD et accéder au réseau). J'expliquerai ici le déploiement d'un OS Microsoft de type Windows XP sur des machines de type PC.

Préparation de la machine

Il faut tout d'abord commencer par définir et délimiter le déploiement. Pour cela il faut savoir au minimum le type des machines et les logiciels à installer en commun sur celles ci. Vous pourrez faire un déploiement plus précis en listant les matériels et logiciels spécifiques qui ne seront pas installés sur toutes les machines. Il faut ensuite disposer du matériel qui sera déployé afin de préparer celui-ci. Dans mon cas, je me suis fait prêter un exemplaire de chaque machine par vendeur avant la livraison finale.

La préparation logicielle de la machine est la partie la plus importante et la plus diversifiée, en effet elle dépend uniquement de vos besoins. Je ne peut donc pas donner d'indications précises sur celle ci, mais uniquement des conseils valables en général pour toutes les plates formes.

Vous devrez préparer une installation sur une machine propre, donc les mises à jours d'OS sont à éviter. N'oubliez pas que cette préparation sera copiée sur toutes les machines de votre parc, par conséquent, il est primordial que celle-ci soit très propre.

Préparez une liste de toutes les modifications a faire a la main sur votre OS telles que la création de raccourcis. Vous aurez en général à recopier ces modifications sur vos différents types de machines. Le fait de les noter vous ferra ainsi gagner beaucoup de temps, et sera très utiles pour le suivi des modifications lors des tests.

Vous devrez bien prendre le temps de tester vos installations. A la fin de la préparation de la machine, vous créez une première image de celle ci (je traite la création de l'image plus loin) afin de pouvoir restaurer votre base propre et de pouvoir ajouter / modifier des éventuelles erreurs. Quand l'image est faite (ou plutôt disons quand l'installation est mise à l'abri), utilisez votre machine comme le ferrais un utilisateur lambda, toutes les erreurs d'installation remonterons aussitôt, notez les, restaurez l'image et corrigez les.

Pour des installations d'OS de type Windows XP et pour des machines qui doivent entrer dans un domaine Windows, il faut faire attention au choix des licences. Pour Windows XP, il faut des licences open, sinon vous devrez entrer le numéro de série et enregistré celui ci auprès des serveurs Microsoft après chaque déploiement. Ceci fait perdre un temps considérable et de plus l'enregistrement est limité à cinq fois, les cinq passés, il faut faire une demande spéciale auprès de Microsoft pour pouvoir réutiliser l'OS. Il en va de même pour l'installation du pack Office.

Afin que votre OS Windows XP puisse entrer dans un domaine et être correctement identifié, il doit regénérer son identifiant (SID) à chaque installation, vous pourrez pour cela utiliser le logiciel sysprep fournit par Microsoft sur le cd d'installation de Windows (ce lien explique sont fonctionnement: http://www.laboratoire-microsoft.org/articles/network/sysprep/).

Les partitions sous linux et la compression

Pour installer rapidement une machine sans se soucier de son système de fichier, il faut pouvoir copier les données d'un disque à l'autre bit à bit. C'est à ce moment là qu'intervient le noyau Linux et sa formidable panoplie d'outils GNU. Le noyau Linux est bien connu pour traiter chaque périphérique comme un fichier, et les disques durs n'échappent pas à ce principe. Le disque dur maître de la première nappe IDE est généralement représenté par le pseudo fichier /dev/hda et sur les noyaux plus récent /dev/ide/.../.

Les disques durs sont donc représentés par des fichiers, mais ce sont des fichiers accessibles qu'en mode 'bloc', afin de manipuler correctement ceux ci nous allons utiliser la commande 'dd'. Nous allons stocker tous les bits d'un disque dur dans un fichier idéalement sur un serveur. La commande dd s'utilise de la manière suivante: dd if=/dev/hda of=/mnt/nfs/disque_dur.gz bs=51200000. if signifie Input File, on précise le fichier source, ici c'est les disque dur 1. of veut dire Output File, il représente le fichier de sortie. bs sont les initiales de Bloc Size, ce paramètre donne le nombre d'octet a lire a chaque bloc. Les blocs d'un disque dur sont en général de 512 octets, j'utilise donc un multiple de 512. Après plusieurs essais, j'en ai conclu qu'utiliser des blocs d'environ 50Mo est le plus rapide.

En appliquant cette technique, on obtient une première image d'un disque dur, malheureusement cette image fait la taille du disque dur (qui atteint généralement 40Go sur des disques actuels), or en regardant une installation fraîche de Windows on peut constater que celle ci ne contient que 3Go de fichiers utiles. Tout le reste de la partition est donc inutilisé on peut en conclure que l'image de 40Go contient environs 37Go de données inutiles. Afin de supprimer ces données inutiles nous allons compresser l'image. En considérant que ces données indésirables ne soient que des 0, en simplifiant énormément les algorithmes de compression on peut dire qu'un fichier contenant 39 milliards de 0 peuvent être réduits à deux informations: 39 milliards et 0. La copie du disque dur et sa compression à la volée se fait par la commande suivante: dd if=/dev/hda bs=51200000 | gzip > /mnt/nfs/disque_dur.gz. Cette commande copie toujours les données depuis le disque dur par blocs de 50Mo mais au lieu de les écrire dans un fichier il renvois les données sur sa sortie standard, celle ci est renvoyée sur l'entrée standard de gzip qui s'occupe de compresser les données et les redirige vers un fichier.

Si pour faire votre installation vous avez utilisé un disque dur usagé ou si vous avez utilisé beaucoup de fichiers temporaires durant la préparation du master, vous constaterez certainement après l'installation et la génération de l'image que celle ci fait bien plus que les 3Go maximum espérés. Après cette constatation une explication sur le fonctionnement général des partitions apportera quelques explications. Une partition est un ensemble de clusters. Chaque fichier est répartit sur différents clusters. La liste des clusters qui composent un fichier est stockée dans la table d'allocation des fichiers (Figure 1).

schema de l'effacement d'un fichier

La suppression d'un fichier se contente de supprimer la définition du fichier dans la table d'allocation. Les données écrites dans les clusters restent présentent sur le disque dur (Figure 2). Voilà d'où proviennent les données parasites qui grossissent démesurément l'image du master. Pour remédier à cela, il suffit de remplir tous les clusters du disque dur par un même caractère. La technique la plus simple que j'ai trouvé est d'écrire un bout de script qui crée un fichier remplit du caractère '0'. Voilà son code pour une partition NTFS:

set FSys = CreateObject('Scripting.FileSystemObject')
set MonFic = Fsys.CreateTextFile('c:\zeros.txt')
do while true
  MonFic.write '00000000000000000000000000000000'
loop

Ce bout de code est à enregistré dans un fichier avec l'extension '.vbs', Windows reconnaîtra automatiquement un script et saura l'exécuter. Après la création du master, il faut lancer ce script jusqu'à ce qu'il plante par manque de place sur le disque dur, il ne faut pas oublier ensuite d'effacer le fichier généré (dans ce cas, c:\zeros.txt). Sur un master ou j'ai fait quelques erreur d'installation entraînant des suppression et réinstallation, je suis passé d'une image de 6Go à une image de 1,7Go.

Création d'un cd bootable et du serveur associé

le cd

le serveur devra être dimensionné en fonction du nombre de machine qu'il faudra déployer simultanément. Plus ce nombre sera élevé plus le serveur devra être rapide d'accès au disque dur ou les serveurs devront être nombreux. Comme nous l'avons vu lors de la création du cd bootable, les images seront fournies par un serveur NFS. Commençons donc par créer le ou les serveurs NFS. Le montage de ceux ci est extrêmement simple. Pour ma part j'ai installe une Redhat nettoyée de tout paquetage inutile, seul les outils réseaux et les nfs-utils servent. Lorsque le serveur est installé, créez un répertoire /home/nfs dans lequel vous mettrez toutes les images. Il faut ensuite partager ce répertoire, rien de plus simple, il suffit d'ajouter cette ligne '/home/nfs' au fichier /etc/exports. Il est impératif que les différents serveurs aient la même configuration NFS. Si vous avez choisi de travailler avec des disques scsi, vous pouvez sans crainte mettre plusieurs interface réseau sur le serveur, avec des disques ide, 2 interfaces sont un maximum. Vous devez donner des adresses IP fixes aux différents interfaces des différents serveurs.

Le montage des serveurs

Voyons maintenant la configuration du serveur DNS. Le serveur NFS est trouvé via une adresse DNS écrite en 'dur' dans le code shell du cd bootable. Comment faire pour que tous les interfaces réseaux soit utilisés à partir d'un seule adresse ? Nous allons utiliser le Round Robin DNS. C'est un mode un peut particulier de bind qui permet d'attribuer plusieurs adresses IP à un même nom DNS, ceci permet de faire une certaine forme de load balancing, à chaque nouvelle demande de résolution du nom DNS le serveur fournit une nouvelle IP de sa liste. La configuration de bind est fort simple. Il suffit d'ouvrir le fichier de définition de la zone (domaine.com) et de lui ajouter ces quelques lignes:

depl IN A 192.168.1.240
192.168.1.241
192.168.1.242
192.168.1.243
192.168.1.244
...

Vous pouvez faire des essais en tapant qq ping depl.domaine.com depuis différentes stations, vous verrez à chaque fois une nouvelle IP de la liste en réponse.

Voilà, la partie serveur est fin prête pour le déploiement.

Préparation au déploiement

La préparation au déploiement est plus une affaire d'organisation qu'une affaire technique. Il faut prévoir une salle asser grande pour contenir tout le matériel nécessaire. Il faut prévoit suffisamment de connexion réseaux qu'il y aura de machines a déployer. Il faut ensuite choisir une méthode de travail. Certaines personnes préfèrent utiliser un seul écran/clavier/souris pour déployer plusieurs machines en les couplant a un répartiteur d'écran. C'est une solution idéale pour les petits espaces. Si vous avez la place de travailler je vous conseille de prévoir plusieurs postes de travail écran /clavier/souris comme cela on suit ce qu'il se passe sur chaque machine sans devoir switcher et on voit immédiatement quand une machine est terminée.