Product SiteDocumentation Site

12.3. Installation automatisée

Les administrateurs de Falcot SA, comme tous les administrateurs de parcs importants de machines, ont besoin d'outils pour installer (voire réinstaller) rapidement, et si possible automatiquement, leurs nouvelles machines.
Pour répondre à ces besoins, il y a différentes catégories de solutions : d'un côté, des outils génériques comme SystemImager qui gèrent cela en créant une image des fichiers d'une machine modèle qui peut ensuite être déployée sur les machines cibles ; de l'autre, debian-installer, l'installateur standard auquel on ajoute un fichier de configuration indiquant les réponses aux différentes questions posées au cours de l'installation. Entre les deux, on trouve un outil hybride comme FAI (Fully Automatic Installer) qui installe des machines en s'appuyant sur le système de paquetage, mais qui exploite sa propre infrastructure pour les autres tâches relevant du déploiement (démarrage, partitionnement, configuration, etc.).
Chacune de ces solutions a des avantages et des inconvénients : SystemImager ne dépend pas d'un système de paquetage particulier et permet donc de gérer des parcs de machines exploitant plusieurs distributions de Linux. Il offre en outre un mécanisme de mise à jour du parc sans requérir une réinstallation. Mais pour que ces mises à jour soient fiables, il faut en contrepartie que les machines du parc ne changent pas indépendamment. Autrement dit, il n'est pas question que l'utilisateur puisse mettre à jour certains logiciels voire en installer de supplémentaires. De même, les mises à jour de sécurité, qui pourraient être automatisées, ne devront pas l'être puisque qu'elles devront transiter via l'image de référence. Enfin, cette solution nécessite un parc homogène de machines pour éviter de devoir jongler avec de trop nombreuses images. Il n'est pas question d'installer une image powerpc sur une machine i386 !
Une installation automatisée avec debian-installer saura au contraire s'adapter aux spécificités des différentes machines : il récupérera le noyau et les logiciels dans les dépôts correspondants, détectera le matériel présent, partitionnera l'ensemble du disque pour exploiter tout l'espace disponible, installera le système Debian et configurera un chargeur de démarrage. En revanche, avec l'installateur standard, seules des versions Debian « standard » seront installées : c'est-à-dire le système de base plus les « tâches » que l'on aura présélectionnées. Impossible donc d'installer un profil très particulier comprenant des applications non empaquetées. Pour répondre à ces problématiques, il faut modifier l'installateur… Fort heureusement, ce dernier est très modulaire et des outils existent pour automatiser le plus gros de ce travail : il s'agit de simple-CDD (CDD est l'acronyme de Custom Debian Derivative — dérivée personnalisée de Debian). Même avec simple-CDD, cette solution ne répond qu'au besoin des installations initiales ; ce n'est pourtant pas jugé problématique puisque les outils APT permettent ensuite de déployer efficacement des mises à jour.
Nous n'aborderons que rapidement FAI et pas du tout SystemImager (qui ne fait plus partie de Debian), afin d'étudier plus en détail debian-installer et simple-CDD, les solutions les plus intéressantes dans un contexte où Debian est systématiquement employé.

12.3.1. Fully Automatic Installer (FAI)

Fully Automatic Installer est probablement la plus ancienne des solutions de déploiement automatisé de systèmes Debian. C'est pourquoi cet outil est très fréquemment cité ; mais sa grande souplesse compense difficilement sa relative complexité.
Pour exploiter cette solution, il faut un système serveur qui va permettre de stocker les informations de déploiement et de démarrer les machines depuis le réseau. On y installera le paquet fai-server (ou fai-quickstart si on veut forcer l'installation de tous les éléments nécessaires pour une configuration relativement standard).
En ce qui concerne la définition des différents profils installables, FAI emploie une approche différente. Au lieu d'avoir une installation de référence que l'on se contente de dupliquer, FAI est un installateur à part entière mais qui est totalement paramétrable par un ensemble de fichiers et de scripts stockés sur le serveur : l'emplacement par défaut est /srv/fai/config/, mais ce répertoire n'existe pas, charge à l'administrateur donc de créer tous les fichiers nécessaires. En général, on s'inspirera des exemples que l'on trouve dans la documentation disponible dans le paquet fai-doc et plus particulièrement dans /usr/share/doc/fai-doc/examples/simple/.
Une fois ces profils totalement définis, il faut exécuter fai-setup pour régénérer les différents éléments nécessaires au démarrage d'une installation par FAI ; il s'agit essentiellement de préparer (ou mettre à jour) un système minimal (NFSROOT) qui est employé pendant l'installation. Alternativement, il est possible de générer un CD d'amorçage de l'installation avec fai-cd.
Avant d'être à même de créer tous ces fichiers de configuration, il convient d'avoir une bonne idée du fonctionnement de FAI. Une installation typique enchaîne les étapes suivantes :
  • récupération et démarrage du noyau par le réseau ;
  • montage du système racine par NFS (le nfsroot mentionné précédemment) ;
  • exécution de /usr/sbin/fai qui contrôle le reste de l'installation (les étapes suivantes sont donc initiées par ce script) ;
  • récupération de l'espace de configuration depuis le serveur et mise à disposition dans /fai/ ;
  • appel de fai-class. Les scripts /fai/class/[0-9][0-9]* sont exécutés et retournent des noms de « classe » qui doivent être appliqués à la machine en cours d'installation ; cette information sera réutilisée par les différentes étapes à suivre. Il s'agit d'un moyen relativement souple de définir les services qui doivent être installés et configurés.
  • récupération d'un certain nombre de variables de configuration en fonction des classes définies ;
  • partitionnement des disques et formatage des partitions à partir des informations fournies dans /fai/disk_config/classe ;
  • montage des partitions ;
  • installation d'un système de base ;
  • préconfiguration de la base Debconf avec fai-debconf ;
  • téléchargement de la liste des paquets disponibles pour APT ;
  • installation des logiciels listés dans les fichiers /fai/package_config/classe ;
  • exécution des scripts de post-configuration /fai/scripts/classe/[0-9][0-9]* ;
  • enregistrement des logs de l'installation, démontage des partitions, redémarrage.

12.3.2. Debian-installer avec préconfiguration

En fin de compte, le meilleur outil pour installer des systèmes Debian devrait logiquement être l'installateur officiel de Debian. C'est pourquoi, dès la conception de debian-installer, il a été prévu de l'employer de manière automatique. Il s'appuie pour cela sur le mécanisme offert par debconf. Celui-ci permet d'une part de restreindre le nombre de questions posées, les autres obtenant automatiquement la réponse par défaut et d'autre part, de fournir séparément toutes les réponses afin que l'installation puisse être non interactive. Cette dernière fonctionnalité porte le nom de preseeding, que l'on traduira simplement par préconfiguration.

12.3.2.1. Employer un fichier de préconfiguration

L'installateur peut récupérer un fichier de préconfiguration à différents emplacements :
  • dans l'initrd employé pour démarrer la machine — dans ce cas, la préconfiguration a lieu au tout début de l'installation et toutes les questions peuvent être évitées par ce biais. Il suffit de nommer le fichier preseed.cfg et de le placer à la racine de l'initrd.
  • sur le support de démarrage (CD-Rom ou clé USB) — dans ce cas, la préconfiguration a lieu dès que le support en question est monté, soit juste après les questions concernant la langue et le clavier. Le paramètre de démarrage preseed/file permet d'indiquer l'emplacement du fichier de préconfiguration (ex : /cdrom/preseed.cfg si l'on emploie un CD-Rom ou /hd-media/preseed.cfg pour une clé USB).
  • depuis le réseau — la préconfiguration n'a alors lieu qu'après la configuration (automatique) du réseau et le paramètre de démarrage à employer est de la forme preseed/url=http://serveur/preseed.cfg.
Inclure le fichier de préconfiguration dans l'initrd semble au premier abord la solution la plus intéressante, mais on ne l'emploiera que très rarement, en raison de la complexité de génération d'un initrd adapté à l'installateur. Les deux autres solutions seront donc privilégiées, d'autant plus qu'il existe un autre moyen de préconfigurer les premières questions de l'installation via les paramètres de démarrage. Pour éviter de les saisir manuellement, il faudra simplement modifier la configuration de isolinux (démarrage sur CD-Rom) ou syslinux (démarrage sur clé USB).

12.3.2.2. Créer un fichier de préconfiguration

Un fichier de préconfiguration est un simple fichier texte où chaque ligne contient une réponse à une question Debconf. Les questions se décomposent en 4 champs séparés par des blancs (espaces ou tabulations) comme dans l'exemple d-i mirror/suite string stable :
  • Le premier champ est le propriétaire de la question ; on y met d-i pour les questions concernant l'installateur, ou le nom du paquet pour les questions Debconf employées par les paquets Debian.
  • Le deuxième champ est l'identifiant de la question.
  • Le troisième champ est le type de la question.
  • Et enfin, le quatrième champ contient la valeur de la réponse. Signalons qu'un espace unique sépare le type de la valeur ; s'il y en a plus qu'un, les espaces suivants feront partie de la valeur.
Le moyen le plus simple de rédiger un fichier de préconfiguration est d'installer manuellement un système. On récupère ensuite toutes les réponses concernant debian-installer avec debconf-get-selections --installer ; pour les réponses concernant les paquets, on utilise debconf-get-selections. Toutefois, il est plus propre de rédiger un tel fichier manuellement à partir d'un exemple et de la documentation de référence : on ne préconfigurera une réponse que lorsque la réponse par défaut ne convient pas et pour le reste, on s'appuiera sur le paramètre de démarrage priority=critical qui restreint l'affichage aux seules questions critiques.

12.3.2.3. Créer un support de démarrage adapté

Ce n'est pas tout de savoir où il faut mettre le fichier de préconfiguration, encore faut-il savoir comment le faire. En effet, il faut d'une manière ou d'une autre modifier le support de démarrage de l'installation pour y changer les paramètres de démarrage et pour y ajouter le fichier.
12.3.2.3.1. Démarrage depuis le réseau
Lorsqu'on démarre un ordinateur depuis le réseau, c'est le serveur chargé d'envoyer les éléments de démarrage qui en définit les paramètres. C'est donc la configuration PXE sur le serveur de démarrage qu'il faut aller modifier et en particulier le fichier /tftpboot/pxelinux.cfg/default. La mise en place du démarrage par le réseau est un prérequis ; elle est détaillée dans le manuel d'installation.
12.3.2.3.2. Préparer une clé USB amorçable
Après avoir préparé une clé amorçable comme documenté dans la Section 4.1.2, « Démarrage depuis une clé USB », il ne reste plus que quelques opérations à effectuer (on suppose le contenu de la clé accessible via /media/usbdisk/) :
  • copier le fichier de préconfiguration dans /media/usbdisk/preseed.cfg ;
  • modifier /media/usbdisk/syslinux.cfg pour y ajouter les paramètres souhaités (voir un exemple ci-dessous).

Exemple 12.2. Fichier syslinux.cfg et paramètres pour la préconfiguration

default vmlinuz
append preseed/file=/hd-media/preseed.cfg locale=fr_FR console-keymaps-at/keymap=fr-latin9 languagechooser/language-name=French countrychooser/shortlist=FR vga=normal initrd=initrd.gz  --
12.3.2.3.3. Créer une image de CD-Rom
Une clé USB étant un support accessible en lecture/écriture, il est facile d'y ajouter un fichier et de modifier quelques paramètres. Ce n'est plus le cas avec un CD-Rom : nous devons régénérer une image ISO d'installation de Debian. C'est précisément le rôle de debian-cd. Malheureusement, cet outil est assez contraignant à l'usage. Il faut en effet disposer d'un miroir Debian local, prendre le temps de comprendre toutes les options offertes par /usr/share/debian-cd/CONF.sh, puis enchaîner des invocations de make. La lecture de /usr/share/debian-cd/README s'avérera nécessaire.
Cela dit, debian-cd procède toujours de la même manière : il crée un répertoire « image » qui contient exactement ce que le CD-Rom devra contenir, puis emploie un programme (genisoimage, mkisofs ou xorriso) pour transformer ce répertoire en fichier ISO. Le répertoire image est finalisé juste après l'étape make image-trees de debian-cd. À ce moment, au lieu de procéder directement à la génération du fichier ISO, on peut déposer le fichier de préconfiguration dans ce fameux répertoire (qui se trouve être $TDIR/$CODENAME/CD1/, $TDIR et $CODENAME étant des paramètres fournis par le fichier de configuration CONF.sh). Le chargeur d'amorçage du CD-Rom est isolinux ; la configuration préparée par debian-cd doit également être modifiée à ce moment, afin d'ajouter les paramètres de démarrage souhaités (le fichier précis à éditer est $TDIR/$CODENAME/boot1/isolinux/isolinux.cfg). Finalement, il n'y a plus qu'à générer l'image ISO avec make image CD=1 (ou make images si l'on génère un jeu de CD-Rom).

12.3.3. Simple-CDD : la solution tout en un

L'emploi d'un fichier de préconfiguration ne répond pas à tous les besoins liés à un déploiement de parc informatique. Même s'il est possible d'exécuter quelques scripts à la fin de l'installation, la souplesse de sélection des paquets à installer reste limitée (on sélectionne essentiellement les tâches) et surtout cela ne permet pas d'installer des paquets locaux ne provenant pas de Debian.
Pourtant debian-cd sait intégrer des paquets externes et debian-installer peut être étendu en insérant des étapes au cours de l'installation. En combinant ces deux facultés, il est donc possible de créer un installateur répondant à nos besoins, qui pourrait même configurer certains services après avoir procédé au décompactage des paquets désirés. Ce qui vient d'être décrit, ce n'est pas qu'une vue de l'esprit, c'est exactement le service que Simple-CDD (dans le paquet simple-cdd) propose !
Simple-CDD se veut un outil permettant à tout un chacun de créer facilement une distribution dérivée de Debian en sélectionnant un sous-ensemble de paquets, en les préconfigurant avec debconf, en y intégrant quelques logiciels spécifiques et en exécutant des scripts personnalisés à la fin de l'installation. On retrouve bien là la philosophie du système d'exploitation universel que chacun peut adapter pour ses besoins.

12.3.3.1. Définir des profils

À l'instar des « classes » de FAI, Simple-CDD permet de créer des « profils » et, au moment de l'installation, on décide de quels profils une machine va hériter. Un profil se définit par un ensemble de fichiers profiles/profil.* :
  • Le fichier .description contient une ligne de description du profil.
  • Le fichier .packages liste les paquets qui seront automatiquement installés si le profil est sélectionné.
  • Le fichier .downloads liste des paquets qui seront intégrés sur l'image d'installation mais qui ne seront pas nécessairement installés.
  • Le fichier .preseed contient une préconfiguration de questions debconf (aussi bien pour l'installateur que pour les paquets).
  • Le fichier .postinst contient un script qui est exécuté sur le système installé juste avant la fin de l'installation.
  • Et enfin le fichier .conf permet de modifier les paramètres de Simple-CDD en fonction des profils inclus dans une image.
Le profil default est particulier puisqu'il est systématiquement employé et contient le strict minimum pour que Simple-CDD puisse fonctionner. La seule chose qu'il soit intéressant de personnaliser dans ce profil est le paramètre de préconfiguration simple-cdd/profiles : on peut ainsi éviter une question introduite par Simple-CDD et qui demande la liste des profils qui doivent être installés.
Signalons également qu'il faudra invoquer la commande depuis le répertoire parent de ce répertoire profiles.

12.3.3.2. Configuration et fonctionnement de build-simple-cdd

Afin de pouvoir faire son œuvre, il faut fournir à Simple-CDD toute une série d'informations. Le plus pratique est de les regrouper dans un fichier de configuration que l'on transmettra à build-simple-cdd par son option --conf. Mais elles peuvent parfois être spécifiées par le biais de paramètres dédiés de build-simple-cdd. Passons en revue le fonctionnement de cette commande et l'influence des différents paramètres :
  • Le paramètre profiles liste les profils à inclure sur l'image de CD-Rom générée.
  • À partir de la liste des paquets requis, Simple-CDD recrée un miroir Debian partiel (qu'il passera en paramètre à debian-cd plus tard) en téléchargeant les fichiers nécessaires depuis le serveur mentionné dans server.
  • Il intègre dans ce miroir local les paquets Debian personnalisés listés dans local_packages.
  • Il exécute debian-cd (dont l'emplacement par défaut peut être configuré grâce à la variable debian_cd_dir) en lui passant la liste des paquets à intégrer.
  • Il interfère sur le répertoire préparé par debian-cd de plusieurs manières :
    • Il dépose les fichiers concernant les profils dans un répertoire simple-cdd sur le CD-Rom.
    • Il ajoute les fichiers listés par le paramètre all_extras.
    • Il rajoute des paramètres de démarrage pour activer la préconfiguration et pour éviter les premières questions concernant la langue et le pays. Il récupère ces informations depuis les paramètres language et country.
  • Il demande à debian-cd de générer l'image ISO finale.

12.3.3.3. Générer une image ISO

Une fois le fichier de configuration rédigé et les profils correctement définis, il ne reste donc plus qu'à invoquer build-simple-cdd --conf simple-cdd.conf. Après quelques minutes, on obtient alors l'image souhaitée : images/debian-8.0-amd64-CD-1.iso