Catalyst

De Drakonix Network @ web01
Aller à : navigation, rechercher

Déployer les machines virtuelles

L'architecture proposée dans le cadre de cette documentation met en œuvre plusieurs machines physiques chacune d'entre elle portant un certain nombre de machines virtuelles toutes basées sur Gentoo. Ces machines virtuelles partagent toutes une base logicielle commune et disposent de ressources matérielles moindre que celles des machines physiques. De plus, certaines d’entre elles étant redondées, elles porteront les mêmes paquets compilés avec les mêmes supports.

La base commune de chaque machine virtuelle est obtenue à l'aide d'une archive de type stage4. Les archives de type stage3 sont généralement téléchargées sur les serveurs officiels de Gentoo et utilisées pour l'installation initiale du système. Une archive de type stage4 est donc une archive stage3 modifiée (ajout de nouveaux paquets, de scripts, pré-configuration du système...). L'archive stage4 qui est construite ici sera utilisée pour le déploiement des machines virtuelles.

L'outil catalyst utilisé par les développeurs de Gentoo pour préparer les releases officielles de la distribution ainsi que les livecd parait être un bon candidat pour produire les stage4 dont nous aurons besoin. Cependant j'ai fait le choix de développer mon propre environnement de travail et d'utiliser un script (st4builder) pour construire mes propres archives. Ce script, si il reprend un certain nombre de principes utilisés par catalyst, me semble donner plus de flexibilité notamment dans le contexte spécifique de la mise en œuvre de la plateforme. En complément de ce script un second (vmbuilder) est également utilisé pour produire les VM à partir des stage4.

Attention
La suite de cet article constitue une tentative de mise en place d'un mécanisme visant à faciliter le déploiement des machines virtuelles de la plateforme et leur maintenance logicielle à l'aide de différents scripts. Il s'agit donc d'une documentation propre au contexte spécifique de cette série d'article.
Note
Ce système est déployé sur le serveur NFS, la machine greenbox est chargée de construire les archives stage4, ces archives seront donc disponibles depuis les serveurs blackbox & whitebox qui pourront aisément les utiliser pour déployer les machines virtuelles qu'ils hébergeront.

Préparer l'environnement de travail

Nous allons commencer par créer un répertoire dédié à la construction des stage4 et des VM :

greenboxroot #mkdir /alternc/catalyst && cd /alternc/catalyst

Le script st4builder s'appuie sur une série de fichiers de configuration préalablement préparés en vue du déploiement des stage4 sur nos futurs machines virtuelles. Ces fichiers sont stockés dans le sous-répertoire ./sources/root_overlay :

greenboxroot #mkdir -p ./sources/root_overlay/{etc,root,usr}

Nous allons également créer un répertoire dédié à la configuration de portage. Le contenu du répertoire etc_portage contiendra une configuration standard de portage qui sera utilisée pour forcer certains paramètres lors de la construction du stage4 :

greenboxroot #mkdir -p ./sources/etc_portage/{sets,repos.conf}

Un dernier fichier est utilisé par le script de création de l'archive stage4, il s'agit d'un script qui sera exécuté lors de la création de l'archive :

greenboxroot #touch ./sources/fsscript

Le répertoire root_overlay

Les fichiers concernés par cet overlay sont ceux qui sont traditionnellement modifiés lors de l’installation d'un nouveau système. Pour un certain nombre d'entre eux une simple copie du fichier existant sur l'hôte fera l'affaire:

greenboxroot #cd ./sources/root_overlay/
greenboxroot #cp /etc/{crontab,inittab,locale.gen,rc.conf} ./etc/
greenboxroot #mkdir -p ./etc/conf.d/ && cp /etc/conf.d/{hwclock,keymaps} ./etc/conf.d/
greenboxroot #cp /root/{.bash_profile,.bashrc} ./root/
greenboxroot #mkdir -p ./usr/local/bin/ && cp /usr/local/bin/{portage-sync,upgrade,syscron-ng,draknet} ./usr/local/bin/
greenboxroot #mkdir -p ./usr/local/portage/ && cp -rf /usr/local/portage/overlay ./usr/local/portage/

Parmis les fichiers que nous venons de copier, le fichier inittab doit être modifié et la ligne suivante ajoutée pour autoriser l'accès en console depuis le dom0 :

Nous devons également modifier le fichier crontab et notamment décaler l'heure de synchronisation de portage par rapport à celle du serveur principal:

Enfin la variable rc_sys du fichier de configuration d'OpenRC peut-être mise à jour :

greenboxroot #sed -i -e 's|rc_sys="xen0"|rc_sys="xenU"|' ./etc/rc.conf

A l'exception du fichier de configuration de syslog-ng, le reste des fichiers liés à la configuration de la gestion des logs peut être intégralement copiée sans modification :

greenboxroot #cp /etc/logrotate.conf ./etc/
greenboxroot #mkdir -p ./etc/logrotate.d/ && cp /etc/logrotate.d/syslog-ng ./etc/logrotate.d/
greenboxroot #mkdir -p ./etc/logcheck/ && cp /etc/logcheck/{logcheck.logfiles,logcheck.conf} ./etc/logcheck/
greenboxroot #chown -R logcheck:logcheck ./etc/logcheck
greenboxroot #mkdir -p ./etc/syslog-ng/

Pour ce qui concerne le fichier de configuration de syslog-ng, nous allons utiliser celui-ci :

Il nous reste à préparer les fichiers de configuration qui nécessitent une modification spécifique lors du déploiement des machines virtuelles. Ces modifications seront réalisées par le script de déploiement et consistent essentiellement à renseigner certaines variables par des valeurs spécifiques au système déployé. Nous allons donc utiliser des chaînes de caractères spéciales qu'il sera facile de remplacer ensuite.

Voici un tableau de synthèse recensant les informations qui seront dynamiquement renseignées lors du déploiement :

Fichier Chaine Description
./etc/fstab {FSTAB} les détails de montage des partitions
./etc/hosts {HOSTNAME} + {DOMAIN} le nom et domaine de la machine virtuelle
./etc/conf.d/hostname {HOSTNAME} le nom de la machine virtuelle
./etc/conf.d/net {DNS} + {DOMAIN} + {IP} + {MAC} + {GW} le détail de la configuration des interfaces réseau
./etc/munin/munin-node.conf {HOSTNAME} + {MUNIN} + {IP} le détail de la configuration client du système de monitoring munin

Dans le tableau précédent 1 fichier est totalement nouveau et n'a pas été évoqué jusqu'à maintenant. Il concernent la configuration cliente d'un des systèmes de monitoring qui seront utilisés sur la plateforme : munin. Le détail de l'installation de ces systèmes seront donnés dans une autre partie de cette documentation. Nous pouvons cependant anticiper et préparer la configuration cliente de munin dès à présent.

Voici les contenus des fichiers évoqués dans le précédent tableau:


Le répertoire etc_portage
root #cd ../etc_portage

Ce répertoire nous sert à stocker une configuration spécifique de portage qui sera utilisée lors de la création du stage4. Certains fichiers présents dans ce répertoire seront modifiés lors du déploiement des machines virtuelles. Ces variables spécifiques aux systèmes déployés sont listés dans le tableau suivant :

Fichier Chaine Description
./make.conf {BINUSER} + {BINPASS} + {BINHOST} les informations de connexion au serveur de paquets binaires
./repos.d/gentoo.conf {RSYNC} l'adresse du serveur de synchronisation de portage
Le premier fichier créé est le fichier standard de configuration globale de Gentoo:
Note
Le paramètre FEATURES indique que le système doit tenter de récupérer des versions binaires des programmes. Le paramètre PORTAGE_BINHOST nous sert à spécifier quels serveurs de binaires contacter, avec quel utilisateur et quel mot de passe. Ces lignes sont commentées car elles sont inutiles lors de la création du stage4. Le script de déploiement des machines virtuelles se chargera de les activer.
Le second fichier est utilisé pour indiquer au système quel miroir de synchronisation utiliser : Le fichier suivant contient les paramètres de compilation spécifiques à certains paquets (USE flags) : Le prochain fichier permet de démasquer certains paquets protégés par les keywords :

Le dernier fichier est utilisé pour marquer les versions des paquets que nous ne voulons pas installer sur le système :

root #touch /alternc/catalyst/sources/etc_portage/package.mask
Le script de paramétrage du stage4
Ce script est exécuté dans un environnement chroot, il se sert du fichier de configuration global du stage4 pour installer les paquets, ajouter les services nécessaires au démarrage de la future machine, définir certains paramètres de configuration global du système tel que la langue par défaut du système, sa localisation ou encore l'ajout des comptes utilisateurs et la définition de leurs mots de passe :

Le script de création d'un stage4

Ce script est créé dans le répertoire racine de l’environnement de travail. Il s'appuie sur un fichier de configuration du stage4.

La configuration du stage4
greenboxroot #cd /alternc/catalyst/
Le script
root #chmod a+x /alternc/catalyst/st4builder

Le script prend pour argument un nom identifiant le stage4 à construire. Les fichiers de configuration précédemment créés et stockés dans le répertoire sources/ (etc_portage / root_overlay / fsscript) sont copiés dans un répertoire dédié à notre stage4. Le fichier de configuration du stage4 est copié à la racine du répertoire config/ et nommé selon le nom donné au stage4. Avant de tester ce script voici rapidement ce qu'il réalise :

  • Création d'un répertoire dédié au projet de stage4
  • Création d'un fichier de conf du projet et copie du script fsscript et des répertoires etc_portage / root_overlay dans le nouveau projet
  • Edition de la configuration du projet (fichier de conf + fichiers du répertoire etc_portage)
  • Récupération de la dernière archive stage3 depuis un miroir officiel
  • Récupération d'une archive snapshot de portage (optionnel)
  • Extraction des archives / montage de certains répertoires / copie des fichiers
  • Exécution du script fsscript dans un environnement chroot
  • Démontage des répertoires et création de l'archive stage4

Ce processus est réalisé à la création du projet, 2 appels supplémentaires au script permettent respectivement de réaliser une mise à jour du stage4 et d'éditer sa configuration.

Création du premier stage4 :

greenboxroot #/alternc/catalyst/st4builder --create generic

Lors de la création de ce nouveau stage4, les éléments suivants sont produits :

  • un répertoire contenant les sources du nouveau système : /alternc/catalyst/builds/generic/
  • un répertoire contenant le nouveau stage4 : /alternc/catalyst/stage4/stage4-amd64-generic.tar.bz2
  • un répertoire contenant les versions binaires des paquets installés : /alternc/catalyst/packages/generic

Ce dernier répertoire est important car nous l'utiliserons comme base pour créer un serveur de paquets binaires qui sera ensuite exploité par les machines virtuelles de la plateforme.

Pour mettre à jour un stage4 existant :

greenboxroot #/alternc/catalyst/st4builder --update generic

Et pour éditer la configuration du projet :

greenboxroot #/alternc/catalyst/st4builder --edit generic

Une dernière option est disponible, elle permet de fixer certains problèmes directement au sein de l'environnement chroot :

greenboxroot #/alternc/catalyst/st4builder --recover generic

Le script de création d'une machine virtuelle

Maintenant que nous avons construit notre première archive stage4, nous allons nous en servir comme base pour la création d'une première machine virtuelle. Un script dédié à cette opération a été écrit, il nécessite un fichier de configuration qui sera créé à partir du modèle ci-dessous pour chaque nouvelle VM.

La configuration de la vm
Le template de configuration des VM
Le script
root #chmod a+x /srv/catalyst/vmbuilder

Voici rapidement les différentes opérations réalisées par ce script:

  • Création des volumes logiques pour chaque système de fichier défini dans la configuration
  • Montage des différentes partitions
  • Extraction du stage4 dans le point de montage
  • Remplacement des variables dans les fichiers de configuration du nouveau système
  • Mise à jour de portage au sein du nouveau système (chroot)
  • Création de services standards pour le monitoring munin
  • Recherche et copie du noyau spécifié dans le fichier de configuration (noyau du système hôte)
  • Création d'un fichier de configuration xen pour la nouvelle machine virtuelle

Création d'une première machine :

root #/srv/catalyst/vmbuilder --project generic --create xen
Note
Pour créer une nouvelle VM nous devons indiquer au script quel stage4 (--project generic) utiliser, certains éléments de la conf du stage4 sont utilisés par le script de création de la VM (les infos concernant le noyau). Le second paramètre nous sert à spécifier le nom de la machine à créer. Une fois la VM créée, le fichier de configuration xen de la VM est généré dans le répertoire /srv/catalyst/virtual et son noyau est également copié dans ce même répertoire.

Lorsque nous avons préparé les fichiers de configuration du stage4, plusieurs chaînes de caractères spéciales ont été utilisées dans divers fichiers de configuration. Ceci avait pour but de faciliter leur remplacement par des valeurs propres à la machine virtuelle à installer. Le tableau suivant rappel ces chaînes de caractères et donne pour chacune d'entre elle la valeur correspondante pour une VM construite à partir des 2 fichiers de configuration utilisés pour la création d'un stage4 et de la première VM.

Chaine Valeur Description
{HOSTNAME} xen Le nom de la machine
{DOMAIN} drakonix.net Le nom de domaine principale
{FSTAB} /dev/xvda1 / ext4 noatime 0 1

/dev/xvda2 none swap sw 0 0

Le points de montages de la partition racine

La définition de la partition swap

{DNS} 8.8.8.8 L'adresse IP du resolveur DNS
{IP} 10.10.3.230/16 L'adresse IP de la machine
{MAC} 00:16:3e:0c:37:70 L'adresse MAC de l'interface réseau virtuelle
{GW} 10.10.4.1 L'adresse IP du routeur principal
{RSYNC} 10.10.3.1 L'adresse IP de la machine physique hébergeant la VM (synchronisation de portage)
{BINUSER} pbhu Le nom de l'utilisateur autorisé à se connecter au serveur de bianaires
{BINPASS} password Le mot de passe de connexion au serveur
{BINHOST} 10.10.3.1 L'adresse IP du serveur de binaires
{MUNIN} 10.10.10.131 L'adresse IP du serveur de monitoring munin

Lancement de la machine :

root #xl create -c /alternc/catalyst/virtual/xen.cnf