#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