La cuisine de Gandi

Accueil > Hébergement > Modification des OS standards par Gandi

Modification des OS standards par Gandi

Modifications du système local

L'infrastructure de l'hébergement Gandi utilise la virtualisation Xen en mode paravirtualisation (pour le moment). Nous devons ainsi compiler un noyau Linux avec des options spécifiques pour lui permettre de démarrer votre serveur virtuel. De plus, comme nous offrons la possibilité aux clients d'ajouter ou retirer des ressources dynamiquement, le système hotplug du noyau a été patché par notre équipe pour rendre cette fonctionnalité efficace (principalement des appels à udev). Tous les modules noyaux sont disponible pour chaque nouvelle version du noyau sur http://mirrors.gandi.net/kernel/. A partir de Linux 2.6.32, nous compilons le noyau Linux xenU avec les sources disponibles sur noyau.org et vous pourrez trouver le fichier de config de la compilation dans /proc/config.gz sur votre serveur virtuel. Nous intégrons aussi des patches externes comme drbd (avant son intégration dans les sources officielles du noyau Linux).

Chaque image de système d'exploitation que nous mettons à disposition sur l'hébergement Gandi contient des modifications par notre équipe. Nous désactivons par exemple le service d'horloge matériel (hwclock) car Xen ne permet pas d'y accéder. Sur certaines distributions nous désactivons des fonctionnalités du démarrage comme ureadahead ou plymouth pour obtenir un démarrage fluide du serveur virtuel. La plupart de la configuration système est effectué pendant le démarrage du serveur, notamment pendant le premier boot.

Il faut noter que sur l'architecture x86_32 et afin d'utiliser la capacité matériel (hwcap) de Xen, la libc peut utiliser la capacité nosegneg avec le package libc-xen correct.

Le package gandi-hosting-vm

L'idée de cet article a été initiée par la mise à disposition d'une nouvelle version de gandi-hosting-vm. Le package contient une collection de scripts pour configurer le système de votre serveur virtuel à chaque boot et sur des événements spécifiques des ressources du serveur.

Changement dynamique des ressources du serveur

Lorsque vous ajoutez ou retirez des ressources dynamiquement à votre serveur, le noyau Linux reçoit des informations de la part de Xen - le système gérant la virtualisation. Chacun de ces événements est passé au démon udevd qui les compare à ses règles définies. Sa fonction principale est de créer les fichiers dans le répertoire /dev/ pour permettre aux applications d'accéder aux nouvelles ressources.

Sur l'hébergement Gandi et afin de gérer les ressources dynamiques, notre équipe a écrit des règles udev (disponible dans /etc/udev/rules.d/86-gandi.rules) pour démarrer un script quand un disque virtuel, une interface réseau virtuel ou même un processeur virtuel est attaché (ou retiré) du serveur virtuel.

À un niveau plus détaillé, quand une interface virtuelle est attachée au serveur, le script /etc/gandi/manage_iface.sh est appelé par le démon udev et une requête DHCP est envoyée sur l'interface. Plusieurs scripts traitent ensuite les données récupérées par la réponse DHCP et configurent la route par défaut (/etc/gandi/dhcp-postconf) et stockent les informations de configuration réseau (/etc/dchp-hostname) dans un répertoire en tmpfs pour une configuration complète pendant le démarrage. Quand l'interface réseau virtuel est détachée, le script enlève simplement l'interface.

Quand un disque virtuel est attaché, un script (/etc/gandi/manage_data_disk.py) est appelé de manière similaire. Il essaie de vérifier le système de fichier sur le disque ou les partitions (seulement en mode GandiAI) puis monte le tout dans un point de montage spécifique utilisant le label du système de fichier /srv/<FS label>. Si aucun label n'est configuré, le nom du disque ou de la partition est alors utilisé (par exemple /dev/xvdc). Pour changer les options de montage par défaut, vous pouvez éditer la variable mount_options au début du script Python.

Pendant le démarrage du serveur

Le package gandi-hosting-vm installe deux services appelé au démarrage : gandi-mount et gandi-config. Le premier monte les systèmes de fichiers des disques virtuels déjà attachés dans le répertoire /srv/ du système d'exploitation (voir la description de /etc/gandi/manage_data_disk.py ci-dessus). Vous pouvez lancer le service manuellement ensuite une fois le serveur démarré complètement et il va essayer de monter les systèmes de fichiers de tout les disques virtuels attachés au serveur (dans le cas où vous désinstallez les packages udev par exemple).

Le deuxième service démarre plusieurs 'plugin' spécifique pour configurer le système. Une partie des étapes de configuration est optionnelle et un fichier de configuration (/etc/default/gandi) est disponible pour choisir d'activer ou non ces étapes. Chaque variable de configuration contient une courte description. Ces 'plugins' configurent par exemple : la console locale pour accéder par la console d'urgence de l'hébergement Gandi, le nom de la machine et les serveurs DNS pour les requêtes, le fuseau horaire à Europe/Paris, la capacité matériel (hwcap) nosegneg en fonction du kernel choisi, modifie le message du jour (motd) avec un texte par défaut, etc.

Par exemple, quand le 'plugin' 11-config_ssh est appelé, il créé les clefs SSH pour la machine virtuelle si elles ne sont pas déjà présentes. Puis, en fonction de votre configuration, il peut ajouter la clef SSH de management par Gandi dans le trousseau de clef du compte root (variable CONFIG_SSHMGMT). Il va ensuite modifier la configuration du serveur ssh pour désactiver les mots de passe vides, activer la compression et désactiver les accès en root (variable CONFIG_SSHD).

Le package gandi-hosting-agent

L'agent Gandi est utilisé pour configurer le serveur virtuel en fonction des informations du client. Dans le cas de serveur en mode expert, la configuration du système local est limitée au mot de passe root et à la création de l'utilisateur administrateur (choisi par le client) pour éviter les accès en root par ssh. Dans le cas de serveur en mode GandiAI, l'agent utilise des modules spécifiques pour configurer les applications choisies sur le système.

Lorsque votre serveur en mode expert est configuré après la création, vous pouvez désinstaller les packages de gandi-hosting-agent. En utilisant par exemple : dpkg -P $(dpkg -l | awk '/gandi-hosting-agent/ { print $2 }' | xargs) pour une distribution à base de package .deb ou rpm -e gandi-hosting-agent pour une distribution à base de package .rpm.