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.
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 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/
Note:Activer les repos d'EPEL (paquets supplémentaires pour Enterprise Linux) pour installer augeas.
$ yum -y install augeas
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
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
S'assurer que Ruby est installé:
$ type ruby
ruby est /usr/bin/ruby
Installer le paquet “ruby-augeas”
$ yum -y install ruby-augeas
Script pour définir le nom de domaine “dgfip dans le fichier $AUGEAS_ROOT/etc/resolv.conf
:
$ touch essai.rb $ cat <<EOF > 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