Les logiciels d'administration système V 1.2
Présentation Comment gérer de multiples serveurs de type Unix ? Solution classique : ssh + rsync + scripts shell => pose problème si le parc est étendu et hétérogène Cfengine est une tentative de réponse à cette problématique : il permet de décrire la configuration d'un ensemble de serveurs/ordinateurs (DNS, NTP, ...) Puppet est également un outil de ce type
Cfengine Marc Burgess - University College – Oslo -1993 Permet de configurer des logiciels à partir de modèles/classes et de déployer des configuration Effectue « toutes » les actions de base d'un administrateur systeme
Cfengine – Installation Paquets disponibles pour l'ensemble des distributions Linux et des Unix pas trop anciens (Solaris, Aix, …) Des versions Windows existent (??)
Cfengine – caractéristiques cfengine s'appuie essentiellement sur 4 programmes : cfkey, cfagent, cfservd et cfrun. cfagent : analyse et exécute les fichiers de configuration. cfrun : lance les cfagent à distance ; cfservd est un « daemon » serveur de fichiers intégré à cfengine. Il permet également de lancer cfagent sur une sollicitation réseau ; cfkey génère une bi-clé utilisée pour sécuriser la connexion entre cfagent/cfrun et cfservd ;
Cfengine - les classes Définies par l'OS, la date, l'adresse IP, adresse MAC, nom DNS, ..... exemple control: Actionsequence = ( shellcommands ) shellcommands: redhat.Hr01:: "/usr/local/bin/backup" linux.!redhat.Hr23:: (aix|sun).Hr02::
Cfengine -exemple d'utilisation # cat /var/cfengine/inputs/cfagent.conf control: actionsequence = ( shellcommands tidy ) shellcommands: "/usr/bin/id" tidy: /tmp pattern=*~ recurse=inf age=2
Cfengine : liens http://2001.jres.org/actes/cfengine. pdf http://cfengine.org http://cfwiki.org
Puppet se présente comme le successeur de cfengine - récent écrit en Ruby par Luke Kanies Site reductivelabs.com utilisé par Google et de nombreuses autres entreprises
Puppet – Caractéristiques 1 serveur : PuppetMaster contenant les configurations communes Des machines ou noeuds qui exécutent le démon puppetd appliquent la configuration vérifient par défaut toutes les 20 mn Communication chiffrée utilisant HTTPS (certificats)
Puppet : le langage Il permet de définir classes (permet de définir les confs de chaque service) héritage (permet de regrouper les confs communes) types d’objets particuliers (définis par puppet, ou par des modules ruby utilisateur) fonctions utilisateur ...
Puppet – Facter disponible sur les noeuds utilisant Puppetd, il fournit des variables utilisables dans les templates puppet : Adresse ip Hostname Distribution et version Toutes autres variables locales définies par l’utilisateur.
Facter : exemple de sortie marge:~# facter architecture => i386 domain => lecastel.lan facterversion => 1.5.1 fqdn => marge.lecastel.lan hardwaremodel => i686 hostname => marge interfaces => eth0,venet0 ipaddress => 172.16.0.2 ipaddress_eth0 => 172.16.0.2 kernel => Linux kernelrelease => 2.6.24-7-pve kernelversion => 2.6.24 macaddress => 00:18:51:af:57:20
Les objets - 1 File, permet de demander qu’un fichier existe, dispose de certains droits, et corresponde éventuellement à un certain contenu, fournit statiquement, ou à travers un modèle (template) avec substitution de variables Service, permet de déclarer un service, de s’assurer qu’il fonctionne, de le redémarrer dans certaines conditions
Les objets – 2 Package, permet de demander l’installation, la mise à jour ou la désinstallation d’un package, en utilisant le système de packaging natif de l’OS utilisé (ports, deb, packages MacOsX etc.) User, permet de gérer les utilisateurs unix (dans /etc/passwd) indépendamment de l’OS utilisé.
Configuration des résolveurs DNS Exemple 1: Configuration des résolveurs DNS class resolv { file { "/etc/resolv.conf": owner => root, group => root, mode => 644, # Le contenu de ce fichier est servi par l'hôte puppet dans son partage files/etc/resolv.conf source => "puppet://puppet/files/etc/resolv.conf" }
Exemple 2 : fichier dhcp.pp class dhcp { package { dhcp3-server: ensure => installed, } file { "/etc/dhcp3/dhcpd.conf": owner => root, group => root, mode => 644, source => [ "puppet://puppet/files/dhcpd/dhcpd.conf" ] service { dhcp3-server: ensure => running, subscribe => [Package[dhcp3-server], File["/etc/dhcp3/dhcpd.conf]]
Mise en oeuvre Sur Debian : sur le serveur : apt-get install puppetmaster Sur le client : apt-get install puppet Pour le détail voir http://www.debian- administration.org/articles/526 Ou sur Howtoforge
L'ecosystème Puppet Des applications ont été développées Puppet dashboard : interface Web à Puppet Foreman : gestion web de parc avec Puppet
Remarques Il est très intéressant d'utiliser un outil de gestion de version comme svn ou encore git pour gérer les fichiers (templates, recettes, …) du fichier puppetmaster Ceci permet de revenir en arrière et de disposer d'information (quoi ? qui ? Quand ? Pourquoi ?) sur les modification Pour Debian, il est possible d'utiliser du pre- seeding pour répondre automatiquement aux questions de l'installateur de paquets.
Puppet et Git Installer les paquets Debian git-core # cd /etc/puppet # git-init-db Le dépot git est créé dans /etc/puppet. Il servira à stocker les versions des fichiers de configuration # git commit -a -c "Chgt DNS" effectue une MAJ du dépôt # git show log affiche l'historique des MAJ
Git et etckeeper Git peut être utilisé pour gérer le répertoire /etc Il suffit d'installer le paquet etckeeper qui prend en charge l'installation
Puppet/Cfengine Apprentissage plus facile : fichiers de configuration moins complexes Très puisssant et très expressif Utilisation de Ruby = > empreinte mémoire supérieure Encore quelques incertitudes pour les sites à grande échelle (1 serveur gère actuellement jusqu'à 30 clients)
En conclusion Puppet permet de définir les configurations logicielles utilisées => maîtrise des « bonnes pratiques » Ne fait pas le déploiement : il faut utiliser des outils comme FAI ou SystemImager. Ces outils sont souvent paramétrés pour utiliser cfengine/puppet dans la foulée de l'installation