#Augeas: Mise en oeuvre sur Centos ##Présentation Augeas est un outil d'édition de configuration. Il analyse les fichiers de configuration dans leurs formats natifs et les transforme en arbre. Les modifications de configuration sont effectuées en manipulant cet arbre et en le sauvegardant dans des fichiers de configuration natifs. ##Augeas c'est: * Une API fournie par une bibliothèque C * Un outil de ligne de commande pour manipuler la configuration à partir du shell (et des scripts shell) * Des addons pour faire la même chose à partir des divers langage de script * Des représentations arborescentes canoniques de fichiers de configuration courants * Un langage spécifique au domaine pour décrire les formats de fichiers de configuration ##Objectifs d'Augeas: * Manipuler les fichiers de configuration en toute sécurité, de manière plus sûre que les techniques ad-hoc généralement utilisées avec les mécanismes grep, sed, awk et similaires dans les langages de script * Fournir une API de configuration locale pour Linux * Faciliter l'intégration de nouveaux fichiers de configuration dans l'arbre Augeas #Notions fondamentales ##Les Arbres (Tree) L'arborescence qu'Augeas gère est très similaire à l'arborescence des fichiers et des répertoires d'un système de fichiers: les composants d'un chemin sont des chaînes, et les nœuds ont une valeur facultative qui leur est associée, qui peut être une chaîne arbitraire. L'arbre d'Augeas s'écarte du modèle files-in-a-filesystem d'une manière importante: plusieurs enfants dans un arbre peuvent avoir la même étiquette. Par exemple, le schéma de /etc/hosts utilise celui-ci pour mapper plusieurs alias pour le même hôte sur plusieurs nœuds, tous avec le chemin /files/etc/hosts/N/ alias, où N est le numéro de l'entrée hôte dans le fichier. ##Les Lenses Les lenses sont les blocs de construction de base pour établir la cartographie à partir de fichiers dans l'arbre d'Augeas. On peut considérer une lens comme un enregistrement de trois fonctions get, put et create, où la fonction get prend le contenu d'un fichier texte, l'analyse et produit une partie de l'arbre d'Augeas. Les fonctions put et create prennent un arbre et le transforment en un fichier texte. La différence est que put est utilisé lorsque la partie de l'arbre est transformée, et la fonction create est utilisée quand elle ne l'est pas. Les lenses existent en deux versions: lenses primitives et lenses combinators. Les premiers prennent une partie du fichier et la traitent, Le seconds combinent des lenses plus petites pour former une grande lens. Les lenses sont stockées dans le répertoire `/usr/share/netcf/lenses/` Pour faciliter l'installation il faut clôner la liste complète des lenses publies sur https://github.com/hercules-team/augeas.git sur le dépôt local http://xx.xx.xxx.xxx:8089/lenses/ #Installation d'augeas **Note**:Activer les repos d'EPEL (paquets supplémentaires pour Enterprise Linux) pour installer augeas. $ yum -y install augeas #Exemples d'utilisation d'Augeas ##En ligne de commande ###Clonage du répertoire de configuration pour test Créer un répertoire pour accueillir le clône : $ export AUGEAS_ROOT=/app/augeas $ mkdir -p $AUGEAS_ROOT Copier de manière récursive tous les fichiers et les répertoires de `/etc`: $ cp -rp /etc $AUGEAS_ROOT ###Test de configuration avec le clône Le fichier `/etc/hosts` d'origine est le suivant: $ cat /etc/hosts //// 127.0.0.1 localhost.localdomain localhost nessus xx.xx.xxx.xx audit-sec.sns.dgfip nessus 192.168.0.1 master2012.localdomain master2012 xx.xx.xxx.xx master2012.localdomain master2012 master2012.localdomain master2012 master2012.localdomain master2012 xx.xx.xxx.xx t013000-000 L'arbre d'Augeas pour `$AUGEAS_ROOT/etc/hosts` est le suivant: $ augtool -b print /files/etc/hosts //// /files/etc/hosts /files/etc/hosts/1 /files/etc/hosts/1/ipaddr = "127.0.0.1" /files/etc/hosts/1/canonical = "localhost.localdomain" /files/etc/hosts/1/alias[1] = "localhost" /files/etc/hosts/1/alias[2] = "nessus" /files/etc/hosts/2 /files/etc/hosts/2/ipaddr = "xx.xx.xxx.xx" /files/etc/hosts/2/canonical = "audit-sec.sns.dgfip" /files/etc/hosts/2/alias = "nessus" /files/etc/hosts/3 /files/etc/hosts/3/ipaddr = "192.168.0.1" /files/etc/hosts/3/canonical = "master2012.localdomain" /files/etc/hosts/3/alias = "master2012" /files/etc/hosts/4 /files/etc/hosts/4/ipaddr = "xx.xx.xxx.xx" /files/etc/hosts/4/canonical = "master2012.localdomain" /files/etc/hosts/4/alias = "master2012" /files/etc/hosts/5 /files/etc/hosts/5/ipaddr = "master2012.localdomain" /files/etc/hosts/5/canonical = "master2012" /files/etc/hosts/6 /files/etc/hosts/6/ipaddr = "master2012.localdomain" /files/etc/hosts/6/canonical = "master2012" /files/etc/hosts/7 /files/etc/hosts/7/ipaddr = "xx.xx.xxx.xx" /files/etc/hosts/7/canonical = "t013000-0003" Utilisation d'Augeas pour ajouter "192.168.1.201 centos7" dans le fichier `$AUGEAS_ROOT/etc/hosts`: $ augtool -b //// augtool> set /files/etc/hosts/3/ipaddr 192.168.1.201 augtool> set /files/etc/hosts/3/canonical centos7 augtool> set /files/etc/hosts/3/alias centos7.dgfip augtool> save Saved 1 file(s) augtool> quit c'est fait : $ cat $AUGEAS_ROOT/etc/hosts //// 127.0.0.1 localhost.localdomain localhost nessus xx.xx.xxx.xx audit-sec.sns.dgfip nessus 192.168.1.201 centos7 centos7.dgfip xx.xx.xxx.xx master2012.localdomain master2012 master2012.localdomain master2012 master2012.localdomain master2012 xx.xx.xxx.xx t013000-0003 Recherche de l'enregistrement ayant "centos7" comme nom canonique: $ augtool -b augtool> match /files/etc/hosts/*/canonical centos7 /files/etc/hosts/3/canonical augtool> print /files/etc/hosts/3 /files/etc/hosts/3 /files/etc/hosts/3/ipaddr = "192.168.1.201" /files/etc/hosts/3/canonical = "centos7" /files/etc/hosts/3/alias = "centos7.dgfip" augtool> quit ##Utilisation d'Augeas dans un script Ruby ###Installer le paquet "ruby-augeas": S'assurer que Ruby est installé: $ type ruby //// ruby est /usr/bin/ruby Installer le paquet "ruby-augeas" $ yum -y install ruby-augeas ###Exemple de script Script pour définir le nom de domaine "dgfip dans le fichier `$AUGEAS_ROOT/etc/resolv.conf`: $ touch essai.rb $ cat < essai.rb #!/usr/bin/env ruby # Augeas example using Ruby require 'augeas' Augeas.open do |aug| # Set the domain entry to §”dgfip” aug.set('/files/etc/resolv.conf/domain','dgfip') # save changes aug.save! end EOF Donner les droits d'exécution au script $ chmod +x essai.rb Fichier resolv.conf avant l'utilistaion du script: $ cat $AUGEAS_ROOT/etc/resolv.conf //// nameserver xx.xx.xxx.xx nameserver xx.xx.xxx.xx Exécution du script: $ ./essai.rb Fichier resolv.conf après l'exécution du script: $ cat $AUGEAS_ROOT/etc/resolv.conf //// nameserver 10.154.89.104 nameserver 10.156.32.33 domain dgfip