User Tools

Site Tools


notes:augeas

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 <<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
notes/augeas.txt · Last modified: 2025/02/19 10:59 by 127.0.0.1