Met een configuratiebeheertool definieer je de configuratie van elk systeem in policy's en laat je de tool die policy's toepassen. Op elke machine draait een client die de policy's van een server haalt. Door dit te automatiseren zorg je ervoor dat al je machines zich altijd in een consistente toestand bevinden.

Configuratiebeheer is vooral gebruikelijk in Linux-omgevingen, maar ook voor Windows bestaan er configuratiebeheersystemen. Hier volgt een lijstje van de bekendste open source tools, zowel voor Linux als Windows.

Puppet

Puppet is waarschijnlijk wel het bekendste configuratiebeheersysteem. Het wordt onder andere gebruikt door Red Hat, Citrix en het Los Alamos National Laboratory. Puppet gebruikt een declaratieve taal om resources en de afhankelijkheden daartussen te beschrijven.

Puppet verzamelt dan alle geïnstalleerde Puppet-manifests en leidt hieruit af in welke toestand de systemen zich moeten bevinden en welke acties er daarvoor uitgevoerd moeten worden. Puppet ondersteunt heel wat UNIX-achtige besturingssystemen, waaronder Linux, FreeBSD en Solaris. Recent is er ook een beperkte ondersteuning voor Windows toegevoegd.

Puppet kwam in eerdere versies uit onder de GPL-licentie, maar gebruikt sinds versie 2.7.0 de Apache 2.0-licentie. Het is geschreven in Ruby en is ook uitbreidbaar voor wie Ruby kent. Zo kun je zelf je eigen types resources, providers en functies schrijven.

En met de Ruby DSL kun je sinds Puppet 2.6 zelfs Puppet-modules rechtstreeks in Ruby-syntax schrijven. Een nadeel van Ruby is wel dat het niet zo'n kleine footprint heeft, waardoor Puppet vooral op embedded systemen of andere machines met beperkte resources voor te veel overhead zorgt.

Puppet heeft een heel ecosysteem van tools. Er bestaan twee webinterfaces: Puppet Dashboard (de officiële webinterface van Puppet Labs) en (The) Foreman (ontwikkeld door Ohad Levy van Red Hat).

Die laatste kan ook machines provisioneren tot op het punt dat Puppet in actie kan schieten om de machines verder te configureren. Voor het bouwen van virtuele machines zijn er ook Vagrant, dat Puppet (en ook Chef) ondersteunt, en het daarmee gerelateerde VeeWee.

Puppet Labs heeft ook Puppet Forge gepubliceerd, een online repository waarin iedereen zijn Puppet-modules kan delen. Op dit moment staan er al 186 modules in de lijst. Voor wie complexe Puppet-modules schrijft, is er ook Geppetto, een op Eclipse gebaseerde ontwikkelomgeving, inclusief syntaxiskleuring, code folding, enzovoort.

Chef

Chef wordt vaak in één adem met Puppet genoemd (googel maar eens op "puppet vs chef"). Het wordt onder andere gebruikt door Engine Yard, 37signals en Scribd. Chef ondersteunt iets minder platforms dan Puppet, en is geen declaratieve taal maar gebruikt pure Ruby-code waarmee je aangeeft wat je op je servers wil doen.

Dat maakt Chef een heel krachtige tool, maar hiermee moet je ook opletten; de beperkingen van de Puppet DSL zijn er bijvoorbeeld niet voor niets en zorgen ervoor dat Puppet-manifests tenminste aan een bepaalde structuur voldoen. Chef is open source onder de Apache-licentie.

Nog een groot verschil met Puppet is het doelpubliek. Chef is vooral gericht op ontwikkelaars van (web)applicaties, en het is dan ook ideaal voor het deployen van dit soort applicaties op een server. In plaats van handmatig een webserver te installeren en te configureren met bijbehorende applicatieserver, databaseserver, load balancer, enzovoort, en daarna met tar, rsync en/of cap deploy je webapplicatie te installeren, geef je alle benodigde commando's op in zogenaamde Chef cookbooks.

Hierbij kun je van alle handigheidjes van de programmeertaal Ruby gebruikmaken, zodat je geen klassieke shell-scripts moet schrijven die met haken en ogen aan elkaar hangen. Gebruikers kunnen hun eigen cookbooks publiceren voor hergebruik door anderen. De Chef-server zelf die voor de configuratie van de verschillende servers zorgt is een lichtgewicht Ruby on Rails-applicatie.

CFEngine

CFEngine is de grootvader van alle configuratiebeheertools, in 1993 gestart door Mark Burgess van de universiteit van Oslo. Burgess is een natuurkundige en hij heeft zijn ideeën uit de fysica toegepast op het beschrijven van computergedrag als het gedrag van dynamische systemen. Zo ontwikkelde hij ook een theoretisch model voor gedistribueerde samenwerking, promise theory, en dit vormde de theoretische onderbouw voor een volledig herschreven CFEngine3.

Het configuratiebeheersysteem wordt onder andere gebruikt door Facebook, AMD en eBay en gebruikt als licentie de GPL. CFEngine ondersteunt heel wat besturingssystemen, waaronder Linux, Solaris, AIX, HPUX en ook Windows (via Cygwin).

CFEngine staat bekend om zijn steile leercurve, zodat je best met eenvoudige policy's begint voor je je servers met echt complexere policy's gaat beheren, maar een groot voordeel van CFEngine is dat het heel zuinig is met resources.

Vooral in een gevirtualiseerde omgeving is de resource-impact heel belangrijk, vertelde Ed Voncken eerder dit jaar aan Webwereld: heb je bijvoorbeeld tien virtuele machines met een configuratiebeheerclient die een overhead van 10% heeft, dan verspil je in totaal een volledige virtuele machine met die overhead. CFEngine-clients kunnen ook autonoom blijven werken in afwezigheid van de server, bijvoorbeeld als er problemen met de netwerkconnectiviteit zijn.

CFEngine mag dan wel minder populair zijn dan Puppet en Chef, deze in C geschreven en wat academisch aandoende configuratiebeheertool staat zeker zijn mannetje in situaties waar performance belangrijk is, zoals bij het beheer van veel virtuele machine of het beheer van machines met weinig resources zoals embedded systems, en waar betrouwbaarheid belangrijk is, zelfs wanneer het netwerk tijdelijk uitvalt.

OPSI

Terwijl de focus van de voorgaande systemen op Linux ligt, zijn er ook configuratiebeheersystemen die zich puur op Windows richten. Eén ervan is OPSI. Het programma wordt verspreid onder de GPL en is geschreven in Python en Java. De OPSI-server draait op Linux en de client ondersteunt Windows XP, Server 2003, Windows Vista, Server 2008, Windows 7 en Server 2008R2, zowel in de 32- als 64-bit versies.

Als de computers via PXE booten, kunnen ze een boot image van de OPSI-server downloaden, dat de harde schijf partitioneert, de benodigde drivers en de OPSI-client laadt en dan het besturingssysteem installeert. Elke keer de computers waarop de OPSI-client geïnstalleerd staat booten, verbindt de OPSI-client met de OPSI-server en vraagt of er software geïnstalleerd moet worden. Ook een push-model waarbij de server bepaalt wanneer de installatie van de software op de clients moet gebeuren is mogelijk. Nadien kunnen ook patches gecentraliseerd doorgevoerd worden met OPSI.

Voor ieder wat wils

Of je nu Linux-, Solaris- of Windows-systemen beheert, of je nu de installatie van software wil automatiseren of de configuratiebestanden van je servers synchroniseren, er is genoeg keuze in de wereld van configuratiebeheersystemen. De vier hier vermelde open source systemen hebben allemaal hun sterktes en zwakheden. Is je computerpark puur Windows-gebaseerd, dan is OPSI een krachtige oplossing.

Wil je je webapplicaties deployen, dan is Chef op je lijf geschreven. Zoek je een cross-platform oplossing voor al je UNIX- en Linux-machines, dan zal Puppet je niet teleurstellen. En is performance belangrijk, kijk dan eens naar CFEngine3. Alle hier vermelde systemen hebben bovendien ook een commerciële versie met support door de ontwikkelaars, dus als je speciale vereisten hebt, kan daar ook iets aan gedaan worden.