Difference between revisions of "CFEngine3"
(→cf-agent) |
|||
(52 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
+ | * [[Jenkins RobotFramework development workflow]] |
||
+ | * [[CFEngine3 Node]] |
||
+ | * [[Dynamic CFEngine3]] |
||
+ | * [[Debian-team]] |
||
+ | * [[Package-team]] |
||
+ | * [[Cfengine2]] |
||
N.B. Volop in bewerking en zeker nog niet klaar!<br/> |
N.B. Volop in bewerking en zeker nog niet klaar!<br/> |
||
− | Na de trip naar Los Angeles voor de cursus bij Vertical Sysadmins ziet het landschap er als volgt uit. |
+ | Na de trip naar Los Angeles voor de cursus bij [http://verticalsysadmin.com Vertical Sysadmins] ziet het landschap er als volgt uit. |
− | * De |
+ | * De Debian versie loopt achter op belangrijke features en er bestaan belangrijke verschillen van inzicht tussen het project en de Debian community; |
* De versie van Cfengine Company strookt niet met debian FHS; |
* De versie van Cfengine Company strookt niet met debian FHS; |
||
* Er is nog geen overzichtelijke opzet voor een werkende "out of the box" oplossing. |
* Er is nog geen overzichtelijke opzet voor een werkende "out of the box" oplossing. |
||
− | De |
+ | De eerste uitdaging is dus het bouwen van een actuele versie van CFengine voor debian: We hebben een initiatief in het [http://wiki.webhuis.nl/index.php/Debian-team Debian team voor CFengine!] <br/> |
+ | De tweede uitdaging is het opzetten van een toegankelijk goed gedocumenteerd raamwerk voor een werkende oplossing, door middel van het bouwen van een referentie model voor toepassing van de standaard versie van Cfengine. |
||
+ | = Aspecten van Cfegine = |
||
+ | De belangrijkste voorwaarde voor het werken met Cfengine is het hebben van grijze haren. Je moet een tijdje hebben meegedraaid in beheer en er ook een beetje in zijn dolgedraaid. Cfengine is niet zo maar iets, burgess, bergstra <br> |
||
+ | == Top Down of Bottom Up == |
||
+ | Top Down of Bottom Up is een klassieke tegenstelling in de benadering van elk probleem met informatie systemen. Het is zinloos om altijd principieel te kiezen voor een van beide opties, zoals gelijk duidelijk is als je de functionele benadering confronteert met de technische. Het leuke is dat is dat ze beide zijn te rechtvaardigen en het opvallende is dat beide benaderigen andersom werken. De functionelele benadering gaat van algemeen naar specifiek, in de technische benadering ga je van de details op het laagste niveau telkens een niveau hoger. |
||
+ | |||
+ | Webhuis onderzoekt nog wat de beste manier is bij de uiteindelijke uitvoering uitvoering van de layers. Cfengine hanteert meerdere "passes" dus alles komt hoe dan ook aan bod of je top down of bottom up werkt. |
||
+ | |||
+ | == Functionele opzet van Cfengine == |
||
+ | Achter Cfengine schuilt een weldoordacht concept voor beheer van systemen. Wil je succes hebben met het toepassen van het gebruik van Cfengine voor het beheren van systemen, dan moet je het beheer van deze systemen vooraf in kaart brengen en een gelaagd ontwerp maken voor het beheersysteem. De functionele hoofdlijnen voor beheer zijn: |
||
+ | * Domain layer |
||
+ | * Applicatie |
||
+ | * Middleware |
||
+ | * Security en Authorization |
||
+ | * Operating system |
||
+ | In deze opzet staat het design van het gelaagde beheer model centraal. Het gelaagde model is vastgelegd in een framework dat los staat van detaillering van de onderliggende onderdelen. |
||
+ | === Domains === |
||
+ | Administreren van verschillende domeinen houdt in dat deze informatie voor elk domein uniek beschikbaar is. |
||
+ | === Applicatie === |
||
+ | |||
+ | === Middleware === |
||
+ | ==== Ldap client ==== |
||
+ | |||
+ | === Operating system === |
||
+ | Elk systeem is voorzien van een standaard software set. Het design van het Operating System kent de volgende elementen: |
||
+ | * SELinux staat aan |
||
+ | * Systeemtaken verlopen via sudo |
||
+ | * De systemen hebben een standaard ldap client configuratie naar twee ldap servers |
||
+ | * Authorisatie van sudo verloopt via ldap |
||
+ | * Centrsle time server configuatie |
||
+ | * Basis set nagios configuratie |
||
+ | * Syslogng configuratie |
||
+ | * cf-execd staat in crontab |
||
+ | Standaard software set |
||
+ | * bzip2 less lynx mc ssh subversion sudo |
||
+ | Te verwijderen software |
||
+ | * aptitude nano] |
||
+ | ==== ssh configuratie ==== |
||
+ | * De ssh keys staan in dnssec |
||
+ | * Root login is onmogelijk |
||
+ | * Users hebben alleen een login met een ssh key |
||
+ | * Er is een standaard banner met waarschuwing voor login |
||
+ | * PAM staat uit |
||
+ | De client configuratie krijgt een ServerAliveInterval van 60 seconden. |
||
+ | |||
+ | === Security en Authorization === |
||
+ | Security en Authorizaton is verweven met alle lagen uit het model. Elke laag van het model kent aspecten die metsecurity en authorization te maken hebben. |
||
+ | * sudo via ldap |
||
+ | * ssh via dnssec |
||
+ | * ssh toegang alleen met keys, geen password en geen root login |
||
+ | ==== pam sudo en ldap ==== |
||
+ | De projecten pam-ldap en sudo-ldap hebben een conflict een de discussie hierover is actueel. Webhuis zoekt de oplossing in: |
||
+ | * http://serverfault.com/questions/284307/libpam-ldap-or-libpam-ldapd |
||
+ | * http://wiki.dailystuff.nl/wiki/Sudo |
||
+ | * http://wiki.debian.org/LDAP/PAM |
||
+ | |||
+ | == Technische implementatie van Cfengine == |
||
+ | De technische implementatie van het referentie model kent een verdere verbijzondering en voegt meerdere lagen toe. |
||
+ | * Common |
||
+ | * Operating system |
||
+ | * Linux brand |
||
+ | * Middle ware |
||
+ | * Application |
||
+ | * Role based behavior |
||
+ | * Host specifiek |
||
+ | == De cursus bij Vertical Sysadmins == |
||
+ | De cursus van Vertical Sysadmins was puur "Bottom Up", wel gegeven door een ervaren Cfengine engineer, maar erna bleven nog vragen over op het gebied van concepten, modellen en werking van het geheel. De [http://research.iu.hio.no/promises.php Promise Theory] zelf, het sterke en onderscheidende punt van Cfengine ten opzichte van alternatieven als Puppet en Chef, bleef in zijn geheel buiten beschouwing.<br/> |
||
+ | Webhuis heeft daarom een eigen cursus aanbod voor Cfengine in voorbereiding en ontwikkeling. De Webhuis cursus gaat uit van een case, die door de hele cursus mee loopt, waarin onderwerpen en concrete dagelijkse problemen uit de praktijk spelen. De technische details spelen daarin de rol van gereedschappen waarmee je duidelijk herkenbare problemen oplost. |
||
+ | |||
+ | = Werken met Cfegine = |
||
+ | Cfengine is van de drie bekende Open Source configuratie management systemen het meest lastig onder de knie te krijgen. |
||
+ | * Het Cfengine project heeft om goede redenen gebroken met het verleden |
||
+ | * De syntax luistert erg nauw |
||
+ | * De opzet is abstract |
||
+ | * Gebruikt regular expressions, regex. |
||
+ | Cfengine 3 heeft een programmeer interface die volledig afwijkt van de eerdere versies. Het project heeft daar goede redenen voor gehad, de oude programmeer interface was inconsistent en leverde problemen op. Een radicale breuk met tradities levert vanzelfsprekend problemen op, vervreemding, teloorgang van kennis en verlies van gebruikers. |
||
+ | == Besturing == |
||
+ | == Regular Expressions == |
||
+ | Een goed manier om regular expressions uit te testen: |
||
+ | http://www.freeformatter.com/regex-tester.html |
||
+ | |||
= Cfengine van Cfengine = |
= Cfengine van Cfengine = |
||
In de cursus is de community edition 3.4.3 gebruikt, in de 64 bits versie: https://cfengine.com/inside/binarydownload/items/1142 |
In de cursus is de community edition 3.4.3 gebruikt, in de 64 bits versie: https://cfengine.com/inside/binarydownload/items/1142 |
||
Line 10: | Line 97: | ||
Versie 3.4.3 staat bootstrapping toe op de server en de client. |
Versie 3.4.3 staat bootstrapping toe op de server en de client. |
||
=== De server === |
=== De server === |
||
− | Voor de |
+ | Voor de bootstrap |
+ | <pre> |
||
+ | root@cfengine:~# /etc/init.d/cfengine start |
||
+ | root@cfengine:~# cf-agent -B -s 10.22.23.24 |
||
+ | </pre> |
||
+ | Na de bootstrap toevoegen aan dev.cf: |
||
+ | <pre> |
||
+ | # List here the IP masks that we grant access to on the server |
||
+ | |||
+ | "acl" slist => { |
||
+ | "10.22.23.0/24", |
||
+ | }, |
||
+ | </pre> |
||
+ | Na een succesvolle bootstrap zie je in syslog: |
||
+ | <pre> |
||
+ | root@cfengine:/var/cfengine/masterfiles# tail -F /var/log/syslog |
||
+ | Mar 15 21:21:41 cfengine cf3[4878]: R: --> I'm a policy hub. |
||
+ | Mar 15 21:26:40 cfengine cf3[4897]: R: --> I'm a policy hub. |
||
+ | </pre> |
||
=== De client === |
=== De client === |
||
+ | Op de client hoef je maar een ding te doen: |
||
+ | cf-agent --bootstrap --policy-server 10.22.23.24 |
||
+ | Daarna zie je in syslog: |
||
+ | <pre> |
||
+ | Mar 15 22:06:47 cfengine3 cf3[26543]: R: --> 10.22.23.24 is my policy hub. |
||
+ | Mar 15 22:06:47 cfengine3 cf3[26543]: R: --> CFEngine is running on cfengine3.webhuis.nl |
||
+ | </pre> |
||
+ | |||
== cf-agent == |
== cf-agent == |
||
cf-agent is de component die het werk uitvoert, volgens onderstaand schema: |
cf-agent is de component die het werk uitvoert, volgens onderstaand schema: |
||
− | [[Media:Cfengine-process.gif|center]] |
+ | [[Image:Cfengine-process.gif|Media:Cfengine-process.gif|center]] |
= Cfengine debian = |
= Cfengine debian = |
||
Line 22: | Line 135: | ||
root@host:~# apt-get install cfengine3 |
root@host:~# apt-get install cfengine3 |
||
Daarmee is het echter nog niet gedaan, dit is het enige makkelijke stuk. Cfengine3 kent een buitengewoon steile leercurve, vooral omdat alle voorbeelden op detail niveau zijn, het ontbreekt aan een integraal werkend voorbeeld, de uitleg is cryptisch en de taal is ontoegankelijk en ingewikkeld. De waarde van de ervaring met [[Cfengine2]] is relatief, daarvoor zijn de verschillen tussen de beide versies te groot. |
Daarmee is het echter nog niet gedaan, dit is het enige makkelijke stuk. Cfengine3 kent een buitengewoon steile leercurve, vooral omdat alle voorbeelden op detail niveau zijn, het ontbreekt aan een integraal werkend voorbeeld, de uitleg is cryptisch en de taal is ontoegankelijk en ingewikkeld. De waarde van de ervaring met [[Cfengine2]] is relatief, daarvoor zijn de verschillen tussen de beide versies te groot. |
||
− | = Hobbels = |
+ | == Hobbels == |
Cfengine biedt veel voordelen, maar voordat het zover is moet de gebruiker een aantal lastige hobbels nemen. De voordelen in het gebruik van Cfengine zijn echter zo groot dat het de moeite waard is om in het nemen van de hobbels te investeren. |
Cfengine biedt veel voordelen, maar voordat het zover is moet de gebruiker een aantal lastige hobbels nemen. De voordelen in het gebruik van Cfengine zijn echter zo groot dat het de moeite waard is om in het nemen van de hobbels te investeren. |
||
− | == Techniek en ontwerp == |
+ | === Techniek en ontwerp === |
Het duurt een tijd voordat de techniek en de werking duidelijk zijn. De eigenlijke kracht van Cfengine schuilt in een zorgvuldige opzet van een werkend geheel. Pas op het moment dat duidelijk is hoe het werkt is het mogelijk om een ontwerp te maken van een gelaagde structuur van promises die werkt voor het hele machine park. |
Het duurt een tijd voordat de techniek en de werking duidelijk zijn. De eigenlijke kracht van Cfengine schuilt in een zorgvuldige opzet van een werkend geheel. Pas op het moment dat duidelijk is hoe het werkt is het mogelijk om een ontwerp te maken van een gelaagde structuur van promises die werkt voor het hele machine park. |
||
− | == Bootstrap lukt niet == |
+ | === Bootstrap lukt niet === |
Bootstrap is bedoeld voor het initialiseren van de server en de clients, dit lukt echter niet met de meegeleverde configuratie bestanden. |
Bootstrap is bedoeld voor het initialiseren van de server en de clients, dit lukt echter niet met de meegeleverde configuratie bestanden. |
||
Bootstrap zou op de server moeten lukken zonder enig configuratie bestand, nadat de meegeleverde configuratie in /var/lib/cfengine3/masterfiles zijn geplaatst. De server herkent zichzelf als policy hub, maar slaagt er niet in om de bestanden van masterfiles naar inputs te kopieren en dan verder te gaan. Aanwijzingen, ook met het hoogste debug niveau, om dit te repareren ontbreken. |
Bootstrap zou op de server moeten lukken zonder enig configuratie bestand, nadat de meegeleverde configuratie in /var/lib/cfengine3/masterfiles zijn geplaatst. De server herkent zichzelf als policy hub, maar slaagt er niet in om de bestanden van masterfiles naar inputs te kopieren en dan verder te gaan. Aanwijzingen, ook met het hoogste debug niveau, om dit te repareren ontbreken. |
||
− | == Symbolic links == |
+ | === Symbolic links === |
Het begint er gelijk mee dat de Debian implementatie problemen heeft met symbolic links. De Debian implementatie ven Cfengine3 behoeft wat aanpassingen voordat het gaat werken, "out of the box" werkt het niet. Het begint al bij het bootstrappen van de server, waarvoor meerdere aanpassingen nodig zijn. |
Het begint er gelijk mee dat de Debian implementatie problemen heeft met symbolic links. De Debian implementatie ven Cfengine3 behoeft wat aanpassingen voordat het gaat werken, "out of the box" werkt het niet. Het begint al bij het bootstrappen van de server, waarvoor meerdere aanpassingen nodig zijn. |
||
* Eerst krijg je een "SERIOUS SECURITY ALERT", vanwege een symbolic link; |
* Eerst krijg je een "SERIOUS SECURITY ALERT", vanwege een symbolic link; |
||
Line 44: | Line 157: | ||
</pre> |
</pre> |
||
− | == Locatie masterfiles == |
+ | === Locatie masterfiles === |
cf-agent kijkt bij het bootstrappen hardnekkig naar /var/cfengine/masterfiles, ook al staat /var/lib/cfengine3/masterfiles gespecificeers in /var/lib/cfengine3/inputs/update.cf. In dit geval loopt de bootstrap wel door na het aanbrengen van een symbolic link. |
cf-agent kijkt bij het bootstrappen hardnekkig naar /var/cfengine/masterfiles, ook al staat /var/lib/cfengine3/masterfiles gespecificeers in /var/lib/cfengine3/inputs/update.cf. In dit geval loopt de bootstrap wel door na het aanbrengen van een symbolic link. |
||
root@host:~# ln -s /var/lib/cfengine3/masterfiles /var/cfengine/masterfiles |
root@host:~# ln -s /var/lib/cfengine3/masterfiles /var/cfengine/masterfiles |
||
Line 66: | Line 179: | ||
root@cfengine3:~# |
root@cfengine3:~# |
||
</pre> |
</pre> |
||
− | == Classes of contexts == |
+ | === Classes of contexts === |
Op dit punt zetten de makers van Cfengine de gebruikers op het verkeerde been. Een Cfengine claas is namelijk helemaal geen class in de betekenis die wij kennen in Obeject Oriented Programming, maar een boolean om aan te duiden of een conditie wel of niete geldt voor een bepaalde groep van systemen. In Cfengine3 geldt het woord class nog steeds, maar is het begrip contaxt geintroduceerd als alternatief voor class. |
Op dit punt zetten de makers van Cfengine de gebruikers op het verkeerde been. Een Cfengine claas is namelijk helemaal geen class in de betekenis die wij kennen in Obeject Oriented Programming, maar een boolean om aan te duiden of een conditie wel of niete geldt voor een bepaalde groep van systemen. In Cfengine3 geldt het woord class nog steeds, maar is het begrip contaxt geintroduceerd als alternatief voor class. |
||
− | = Configuratie en bootstrap = |
+ | == Configuratie en bootstrap == |
Bootstrap voert controles uit en doet twee dingen: |
Bootstrap voert controles uit en doet twee dingen: |
||
* Kopieren van de bestanden uit /var/lib/cfengine3/masterfiles naar /var/lib/cfengine3/inputs; |
* Kopieren van de bestanden uit /var/lib/cfengine3/masterfiles naar /var/lib/cfengine3/inputs; |
||
Line 75: | Line 188: | ||
* Opnemen van cf-execd in crontab, waarmee de uitvoering van cf-agent is gegarandeerd. |
* Opnemen van cf-execd in crontab, waarmee de uitvoering van cf-agent is gegarandeerd. |
||
De huidige versie van cfegine3 vereist in ieder geval de verwijzing naar /etc/cfengine3 in plaats van naar de symbolic link /var/lib/cfengine3/inputs. |
De huidige versie van cfegine3 vereist in ieder geval de verwijzing naar /etc/cfengine3 in plaats van naar de symbolic link /var/lib/cfengine3/inputs. |
||
− | == Bootstapping de master == |
+ | === Bootstapping de master === |
Na de bootstrap van de master moeten de cfengine processen draaien op de master en moeten de bestanden uit de masterfiles directory in de inputs directory staan. De master is namelijk een client van zichzelf en dat biedt een mooi uitgangspunt.<br/> |
Na de bootstrap van de master moeten de cfengine processen draaien op de master en moeten de bestanden uit de masterfiles directory in de inputs directory staan. De master is namelijk een client van zichzelf en dat biedt een mooi uitgangspunt.<br/> |
||
In de directory /usr/share/doc/cfengine3/examples staan de bestanden die nodig zijn om de master te initialiseren: |
In de directory /usr/share/doc/cfengine3/examples staan de bestanden die nodig zijn om de master te initialiseren: |
||
Line 86: | Line 199: | ||
root@host:~# cf-agent -v -d 2 --bootstrap |
root@host:~# cf-agent -v -d 2 --bootstrap |
||
− | == Bootstrapping de client == |
+ | === Bootstrapping de client === |
Het belangrijkste is dat de client na het bootstrap proces is aangesloten op de de master, hiervoor moet het cf-execd proces in crontab staan. Dit garandeert dat de client op gezette tijden het cf-agent proces opstart, waarmee de client configuratie management informatie van de server ophaalt en uitvoert. |
Het belangrijkste is dat de client na het bootstrap proces is aangesloten op de de master, hiervoor moet het cf-execd proces in crontab staan. Dit garandeert dat de client op gezette tijden het cf-agent proces opstart, waarmee de client configuratie management informatie van de server ophaalt en uitvoert. |
||
− | = Cfengine in het gebruik = |
+ | == Cfengine in het gebruik == |
− | == failsafe == |
+ | === failsafe === |
Eisen aan failsafe. |
Eisen aan failsafe. |
||
− | == Normaal gebruik == |
+ | === Normaal gebruik === |
* http://my.opera.com/marcomarongiu/blog/2012/10/06/my-cfengine-policies-explained-part-1 |
* http://my.opera.com/marcomarongiu/blog/2012/10/06/my-cfengine-policies-explained-part-1 |
||
* https://github.com/cfengine/design-center/tree/master/examples |
* https://github.com/cfengine/design-center/tree/master/examples |
||
Line 102: | Line 215: | ||
* http://unix-heaven.org/node/55 |
* http://unix-heaven.org/node/55 |
||
<hr> |
<hr> |
||
+ | Return to: [[CFEngine]] |
||
− | Terug naar: [[Webhuis Infrastructuur]] |
Latest revision as of 16:09, 10 October 2023
- Jenkins RobotFramework development workflow
- CFEngine3 Node
- Dynamic CFEngine3
- Debian-team
- Package-team
- Cfengine2
N.B. Volop in bewerking en zeker nog niet klaar!
Na de trip naar Los Angeles voor de cursus bij Vertical Sysadmins ziet het landschap er als volgt uit.
- De Debian versie loopt achter op belangrijke features en er bestaan belangrijke verschillen van inzicht tussen het project en de Debian community;
- De versie van Cfengine Company strookt niet met debian FHS;
- Er is nog geen overzichtelijke opzet voor een werkende "out of the box" oplossing.
De eerste uitdaging is dus het bouwen van een actuele versie van CFengine voor debian: We hebben een initiatief in het Debian team voor CFengine!
De tweede uitdaging is het opzetten van een toegankelijk goed gedocumenteerd raamwerk voor een werkende oplossing, door middel van het bouwen van een referentie model voor toepassing van de standaard versie van Cfengine.
Contents
Aspecten van Cfegine
De belangrijkste voorwaarde voor het werken met Cfengine is het hebben van grijze haren. Je moet een tijdje hebben meegedraaid in beheer en er ook een beetje in zijn dolgedraaid. Cfengine is niet zo maar iets, burgess, bergstra
Top Down of Bottom Up
Top Down of Bottom Up is een klassieke tegenstelling in de benadering van elk probleem met informatie systemen. Het is zinloos om altijd principieel te kiezen voor een van beide opties, zoals gelijk duidelijk is als je de functionele benadering confronteert met de technische. Het leuke is dat is dat ze beide zijn te rechtvaardigen en het opvallende is dat beide benaderigen andersom werken. De functionelele benadering gaat van algemeen naar specifiek, in de technische benadering ga je van de details op het laagste niveau telkens een niveau hoger.
Webhuis onderzoekt nog wat de beste manier is bij de uiteindelijke uitvoering uitvoering van de layers. Cfengine hanteert meerdere "passes" dus alles komt hoe dan ook aan bod of je top down of bottom up werkt.
Functionele opzet van Cfengine
Achter Cfengine schuilt een weldoordacht concept voor beheer van systemen. Wil je succes hebben met het toepassen van het gebruik van Cfengine voor het beheren van systemen, dan moet je het beheer van deze systemen vooraf in kaart brengen en een gelaagd ontwerp maken voor het beheersysteem. De functionele hoofdlijnen voor beheer zijn:
- Domain layer
- Applicatie
- Middleware
- Security en Authorization
- Operating system
In deze opzet staat het design van het gelaagde beheer model centraal. Het gelaagde model is vastgelegd in een framework dat los staat van detaillering van de onderliggende onderdelen.
Domains
Administreren van verschillende domeinen houdt in dat deze informatie voor elk domein uniek beschikbaar is.
Applicatie
Middleware
Ldap client
Operating system
Elk systeem is voorzien van een standaard software set. Het design van het Operating System kent de volgende elementen:
- SELinux staat aan
- Systeemtaken verlopen via sudo
- De systemen hebben een standaard ldap client configuratie naar twee ldap servers
- Authorisatie van sudo verloopt via ldap
- Centrsle time server configuatie
- Basis set nagios configuratie
- Syslogng configuratie
- cf-execd staat in crontab
Standaard software set
- bzip2 less lynx mc ssh subversion sudo
Te verwijderen software
- aptitude nano]
ssh configuratie
- De ssh keys staan in dnssec
- Root login is onmogelijk
- Users hebben alleen een login met een ssh key
- Er is een standaard banner met waarschuwing voor login
- PAM staat uit
De client configuratie krijgt een ServerAliveInterval van 60 seconden.
Security en Authorization
Security en Authorizaton is verweven met alle lagen uit het model. Elke laag van het model kent aspecten die metsecurity en authorization te maken hebben.
- sudo via ldap
- ssh via dnssec
- ssh toegang alleen met keys, geen password en geen root login
pam sudo en ldap
De projecten pam-ldap en sudo-ldap hebben een conflict een de discussie hierover is actueel. Webhuis zoekt de oplossing in:
- http://serverfault.com/questions/284307/libpam-ldap-or-libpam-ldapd
- http://wiki.dailystuff.nl/wiki/Sudo
- http://wiki.debian.org/LDAP/PAM
Technische implementatie van Cfengine
De technische implementatie van het referentie model kent een verdere verbijzondering en voegt meerdere lagen toe.
- Common
- Operating system
- Linux brand
- Middle ware
- Application
- Role based behavior
- Host specifiek
De cursus bij Vertical Sysadmins
De cursus van Vertical Sysadmins was puur "Bottom Up", wel gegeven door een ervaren Cfengine engineer, maar erna bleven nog vragen over op het gebied van concepten, modellen en werking van het geheel. De Promise Theory zelf, het sterke en onderscheidende punt van Cfengine ten opzichte van alternatieven als Puppet en Chef, bleef in zijn geheel buiten beschouwing.
Webhuis heeft daarom een eigen cursus aanbod voor Cfengine in voorbereiding en ontwikkeling. De Webhuis cursus gaat uit van een case, die door de hele cursus mee loopt, waarin onderwerpen en concrete dagelijkse problemen uit de praktijk spelen. De technische details spelen daarin de rol van gereedschappen waarmee je duidelijk herkenbare problemen oplost.
Werken met Cfegine
Cfengine is van de drie bekende Open Source configuratie management systemen het meest lastig onder de knie te krijgen.
- Het Cfengine project heeft om goede redenen gebroken met het verleden
- De syntax luistert erg nauw
- De opzet is abstract
- Gebruikt regular expressions, regex.
Cfengine 3 heeft een programmeer interface die volledig afwijkt van de eerdere versies. Het project heeft daar goede redenen voor gehad, de oude programmeer interface was inconsistent en leverde problemen op. Een radicale breuk met tradities levert vanzelfsprekend problemen op, vervreemding, teloorgang van kennis en verlies van gebruikers.
Besturing
Regular Expressions
Een goed manier om regular expressions uit te testen:
http://www.freeformatter.com/regex-tester.html
Cfengine van Cfengine
In de cursus is de community edition 3.4.3 gebruikt, in de 64 bits versie: https://cfengine.com/inside/binarydownload/items/1142
Bootstrapping
Versie 3.4.3 staat bootstrapping toe op de server en de client.
De server
Voor de bootstrap
root@cfengine:~# /etc/init.d/cfengine start root@cfengine:~# cf-agent -B -s 10.22.23.24
Na de bootstrap toevoegen aan dev.cf:
# List here the IP masks that we grant access to on the server "acl" slist => { "10.22.23.0/24", },
Na een succesvolle bootstrap zie je in syslog:
root@cfengine:/var/cfengine/masterfiles# tail -F /var/log/syslog Mar 15 21:21:41 cfengine cf3[4878]: R: --> I'm a policy hub. Mar 15 21:26:40 cfengine cf3[4897]: R: --> I'm a policy hub.
De client
Op de client hoef je maar een ding te doen:
cf-agent --bootstrap --policy-server 10.22.23.24
Daarna zie je in syslog:
Mar 15 22:06:47 cfengine3 cf3[26543]: R: --> 10.22.23.24 is my policy hub. Mar 15 22:06:47 cfengine3 cf3[26543]: R: --> CFEngine is running on cfengine3.webhuis.nl
cf-agent
cf-agent is de component die het werk uitvoert, volgens onderstaand schema:
Cfengine debian
De installatie is recht toe recht aan:
root@host:~# apt-get install cfengine3
Daarmee is het echter nog niet gedaan, dit is het enige makkelijke stuk. Cfengine3 kent een buitengewoon steile leercurve, vooral omdat alle voorbeelden op detail niveau zijn, het ontbreekt aan een integraal werkend voorbeeld, de uitleg is cryptisch en de taal is ontoegankelijk en ingewikkeld. De waarde van de ervaring met Cfengine2 is relatief, daarvoor zijn de verschillen tussen de beide versies te groot.
Hobbels
Cfengine biedt veel voordelen, maar voordat het zover is moet de gebruiker een aantal lastige hobbels nemen. De voordelen in het gebruik van Cfengine zijn echter zo groot dat het de moeite waard is om in het nemen van de hobbels te investeren.
Techniek en ontwerp
Het duurt een tijd voordat de techniek en de werking duidelijk zijn. De eigenlijke kracht van Cfengine schuilt in een zorgvuldige opzet van een werkend geheel. Pas op het moment dat duidelijk is hoe het werkt is het mogelijk om een ontwerp te maken van een gelaagde structuur van promises die werkt voor het hele machine park.
Bootstrap lukt niet
Bootstrap is bedoeld voor het initialiseren van de server en de clients, dit lukt echter niet met de meegeleverde configuratie bestanden. Bootstrap zou op de server moeten lukken zonder enig configuratie bestand, nadat de meegeleverde configuratie in /var/lib/cfengine3/masterfiles zijn geplaatst. De server herkent zichzelf als policy hub, maar slaagt er niet in om de bestanden van masterfiles naar inputs te kopieren en dan verder te gaan. Aanwijzingen, ook met het hoogste debug niveau, om dit te repareren ontbreken.
Symbolic links
Het begint er gelijk mee dat de Debian implementatie problemen heeft met symbolic links. De Debian implementatie ven Cfengine3 behoeft wat aanpassingen voordat het gaat werken, "out of the box" werkt het niet. Het begint al bij het bootstrappen van de server, waarvoor meerdere aanpassingen nodig zijn.
- Eerst krijg je een "SERIOUS SECURITY ALERT", vanwege een symbolic link;
- Dan gaat het fout bij het zoeken naar de masterfiles. Cfengine3 verwacht de masterfiles in /var/cfengine/masterfiles.
De installatie is Debianized, dus moet je update.cf ook Debianizen. Het originele bestand update.cf wijst naar /var/lib/cfengine3/inputs, dat een symbolic link is van /etc/cfengine. Dit veroorzaakt de security fout. Wijzig dus update.cf op de master in /var/lib/cfengine3/inputs/update.cf en /var/lib/cfengine3/mastefiles/update.cf:
Van files: "/var/lib/cfengine3/inputs" Naar files: "/etc/cfengine3"
Locatie masterfiles
cf-agent kijkt bij het bootstrappen hardnekkig naar /var/cfengine/masterfiles, ook al staat /var/lib/cfengine3/masterfiles gespecificeers in /var/lib/cfengine3/inputs/update.cf. In dit geval loopt de bootstrap wel door na het aanbrengen van een symbolic link.
root@host:~# ln -s /var/lib/cfengine3/masterfiles /var/cfengine/masterfiles
Pas dan lukt het om de master te bootstrappen:
root@host:~# cf-agent -v --bootstrap --policy-server 10.20.30.40 cf3> -> Assuming the policy distribution point at: 10.20.30.40:/var/cfengine/masterfiles -> Attempting to initiate promised autonomous services... ** This host recognizes itself as a CFEngine Policy Hub, with policy distribution and knowledge base. -> The system is now converging. Full initialisation and self-analysis could take up to 30 minutes cf3> -> Bootstrap to 10.20.30.40 completed successfully root@host:~# crontab -l 0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/sbin/cf-execd -F root@cfengine3:~# ps ax | grep cf 11510 ? Ss 0:04 /var/lib/cfengine3/bin/cf-monitord 11515 ? Ss 0:02 /var/lib/cfengine3/bin/cf-serverd 14735 pts/0 S+ 0:00 grep cf root@cfengine3:~#
Classes of contexts
Op dit punt zetten de makers van Cfengine de gebruikers op het verkeerde been. Een Cfengine claas is namelijk helemaal geen class in de betekenis die wij kennen in Obeject Oriented Programming, maar een boolean om aan te duiden of een conditie wel of niete geldt voor een bepaalde groep van systemen. In Cfengine3 geldt het woord class nog steeds, maar is het begrip contaxt geintroduceerd als alternatief voor class.
Configuratie en bootstrap
Bootstrap voert controles uit en doet twee dingen:
- Kopieren van de bestanden uit /var/lib/cfengine3/masterfiles naar /var/lib/cfengine3/inputs;
- Plaatsen van de public key in ppkeys;
- Opnemen van cf-execd in crontab, waarmee de uitvoering van cf-agent is gegarandeerd.
De huidige versie van cfegine3 vereist in ieder geval de verwijzing naar /etc/cfengine3 in plaats van naar de symbolic link /var/lib/cfengine3/inputs.
Bootstapping de master
Na de bootstrap van de master moeten de cfengine processen draaien op de master en moeten de bestanden uit de masterfiles directory in de inputs directory staan. De master is namelijk een client van zichzelf en dat biedt een mooi uitgangspunt.
In de directory /usr/share/doc/cfengine3/examples staan de bestanden die nodig zijn om de master te initialiseren:
failsafe.cf library.cf promises.cf site.cf update.cf
Kopieer deze bestanden naar /etc/cfengine3 en /var/lib/cfengine3/inputs.
Breng de organisatie specifieke wijzigingen in de configuratie bestanden aan, vooral de ip-ranges.
Zet in /etc/default/cfengine3 de servers aan.
Bootstrap de configuratie met:
root@host:~# cf-agent -v -d 2 --bootstrap
Bootstrapping de client
Het belangrijkste is dat de client na het bootstrap proces is aangesloten op de de master, hiervoor moet het cf-execd proces in crontab staan. Dit garandeert dat de client op gezette tijden het cf-agent proces opstart, waarmee de client configuratie management informatie van de server ophaalt en uitvoert.
Cfengine in het gebruik
failsafe
Eisen aan failsafe.
Normaal gebruik
- http://my.opera.com/marcomarongiu/blog/2012/10/06/my-cfengine-policies-explained-part-1
- https://github.com/cfengine/design-center/tree/master/examples
- http://www.cfengine.org/manuals/cf3-3.0.5.html
- http://www.cfengine.org/manuals/cf3-tutorial.pdf
- http://cfengine.com/manuals/cf3-solutions/
- http://blog.cf-learn.info/
- http://unix-heaven.org/node/55
Return to: CFEngine