Toegang tot je configuratiebestanden met Augeas

Linux-beheerders passen regelmatig configuratiebestanden in /etc aan. Door de verschillende syntax van die bestanden is het lastig om dat te automatiseren. Augeas helpt je met een consistente syntax.

De tool Augeas uit de Red Hat Emerging Technology-stal maakt het mogelijk om allerlei configuratiebestanden op een consistente manier uit te lezen en aan te passen. De configuratie van een bepaald bestand (bijvoorbeeld /etc/passwd of /etc/ntp.conf) wordt door een bestandsspecifieke 'lens' omgezet naar een boomstructuur, een beetje zoals XML. Het voordeel is dat je dan niet meer voor elk configuratiebestand ad hoc een samenraapsel van grep, sed, awk en cut moet verzinnen om de juiste informatie uit te lezen, maar dat één toegangsmethode volstaat.

Informatie uitlezen
Op de volgende manier lees je bijvoorbeeld de volledige naam van gebruiker koan in:


$ augtool get /files/etc/passwd/koan/name
/files/etc/passwd/koan/name = Koen Vervloesem



Het programma augtool gebruikt dus het pad /files/etc/passwd/koan/name voor een boomstructuur die de configuratie voorstelt. We gebruiken /files omdat we de configuratie uit een bestand lezen, /etc/passwd is het bestand dat we uitlezen, daarin vragen we informatie over de gebruiker koan en van die gebruiker willen we de waarde van het attribuut name weten. Willen we daarentegen de home-directory van de gebruiker weten, dan gebruiken we het pad /files/etc/passwd/koan/home, en willen we de shell weten, dan gebruiken we het pad /files/etc/passwd/koan/shell. Wil je zien welke attributen je allemaal kunt opvragen en instellen, gebruik dan de volgende opdracht:


$ augtool print /files/etc/passwd/koan



Wil je zien tot welke bestanden je allemaal toegang hebt met Augeas, gebruik dan:


$ augtool print /files



Je kunt ook de elementen opvragen die aan een bepaalde expressie voldoen. Zo vraag je bijvoorbeeld op de volgende manier de gebruiker op met user id 1000:


$ augtool match /files/etc/passwd/*/uid 1000
/files/etc/passwd/koan/uid



We hebben in deze opdracht de wildcard * gebruikt, maar de syntax van het pad laat alle XPath-expressies toe, dus ook zoiets als het volgende:



$ augtool print "/files/etc/passwd/*/name[last()]"

/files/etc/passwd/email-reminder/name = "Email-reminder mailer"



Informatie wijzigen
Augeas maakt het ook mogelijk om met diezelfde paden informatie in configuratiebestanden te wijzigen, namelijk met het subcommando set. Dit gaat als volgt, waarbij we tegelijk tonen hoe je augtool interactief gebruikt:


$ augtool get /files/etc/passwd/koan/name
/files/etc/passwd/koan/name = Koen Vervloesem
sudo augtool
augtool> set /files/etc/passwd/koan/name Test
augtool> save
Saved 1 file(s)
augtool> quit
$ augtool get /files/etc/passwd/koan/name
/files/etc/passwd/koan/name = Test



Bij het saven van je wijzigingen zorgt Augeas ervoor dat het de rest van het configuratiebestand zo weinig mogelijk aanpast. Commentaarregels worden bijvoorbeeld onaangeroerd gelaten en ook de volgorde van configuratieregels blijft behouden. Wil je kijken hoe de verschillende 'lenzen' van Augeas werken, bekijk dan de bestanden in /usr/share/augeas/lensen/dist.