This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
docpublic:systemes:linux:cfengine [2012/06/25 08:24] PROCACCIA created |
docpublic:systemes:linux:cfengine [2012/06/25 08:54] (current) PROCACCIA [cfengine par la pratique] |
||
---|---|---|---|
Line 1: | Line 1: | ||
===== cfengine par la pratique ===== | ===== cfengine par la pratique ===== | ||
- | doc du 16 mai 2005 reprise dans dokuwiki. | + | doc mai 2005 reprise dans dokuwiki. |
- | Table des matières | ||
- | 1 Introduction | + | ===== Résumé ===== |
- | | + | Ce document décrit pas à pas la mise en place de cfengine. |
- | 2.1 Installation rpm | + | |
- | 2.2 Contenu du répertoire principal | + | |
- | 2.3 Services utilisés | + | |
- | 3 Configuration | + | |
- | 3.1 Principe de configuration | + | |
- | 3.2 Distribution de la configuration | + | |
- | 3.3 update.conf | + | |
- | 4 Cle cfengine | + | |
- | 5 Configuration du serveur cfservd | + | |
- | 5.1 Définition du cfservd.conf | + | |
- | 5.2 Lancement | + | |
- | 6 Firewall iptables | + | |
- | 7 Client | + | |
- | 7.1 Installation cfengine packagé sur le client | + | |
- | 7.2 Cle serveur | + | |
- | 7.3 Fichiers | + | |
- | 7.4 Distribution initiale | + | |
- | 7.5 Initialisation / Déploiement des fichiers sur le client | + | |
- | 7.6 Clé du client | + | |
- | 7.7 Echange | + | |
- | 7.7.1 Echange manuel | + | |
- | 7.7.2 Echange automatique | + | |
- | 7.8 Deploiement effectif initial | + | |
- | 8 Exemple pratique | + | |
- | 8.1 Fichier cfagent.conf | + | |
- | 8.2 Classes | + | |
- | 8.3 Configuration générale | + | |
- | 8.4 Configuration propre aux machines linux | + | |
- | 8.5 Fichier sources du serveur | + | |
- | 8.6 Lancement du client | + | |
- | 9 Package RPM maison de cfengine | + | |
- | 10 Configurations évoluées | + | |
- | 10.1 Gestion des packages | + | |
- | 10.2 Pluggins maison | + | |
- | Résumé : Ce document décrit pas à pas la mise en place de cfengine. Il s' | + | ===== Introduction |
- | + | ||
- | 1 | + | |
Le site de référence est www.cfengine.org, | Le site de référence est www.cfengine.org, | ||
- | 2 | + | ===== Installation |
Nous avons packagé la distribution cfengine afin d' | Nous avons packagé la distribution cfengine afin d' | ||
- | 2.1 | + | ==== |
+ | < | ||
[root@calaz / | [root@calaz / | ||
$ rpm -Uvh / | $ rpm -Uvh / | ||
Préparation... | Préparation... | ||
| | ||
+ | </ | ||
- | + | ==== Contenu du répertoire principal | |
- | 2.2 | + | |
Outre les scripts de demarrage ajoutés par notre package / | Outre les scripts de demarrage ajoutés par notre package / | ||
+ | < | ||
[root@calaz / | [root@calaz / | ||
$ ls -R | $ ls -R | ||
Line 93: | Line 58: | ||
cf.groups.example | cf.groups.example | ||
cf.linux.example | cf.linux.example | ||
+ | </ | ||
+ | ==== Services utilisés ==== | ||
- | 2.3 Services utilisés | ||
Le répertoire sbin contien un certain nombre de binaires décrits ici http:// | Le répertoire sbin contien un certain nombre de binaires décrits ici http:// | ||
Dans cette mise en oeuvre simplifiée , nous nous contenterons d' | Dans cette mise en oeuvre simplifiée , nous nous contenterons d' | ||
- | 3 | + | ===== Configuration |
Le serveur va distribuer sur les clients les stratégies de configuration. Le serveur de fichiers (de strategie et de configurations) cfservf lira son fihcier de configuration cfservd.conf. Celui ci devra entre autre distribuer le fichier de configuration du service client (cfagent), fichier cfagent.conf | Le serveur va distribuer sur les clients les stratégies de configuration. Le serveur de fichiers (de strategie et de configurations) cfservf lira son fihcier de configuration cfservd.conf. Celui ci devra entre autre distribuer le fichier de configuration du service client (cfagent), fichier cfagent.conf | ||
- | 3.1 | + | ==== Principe de configuration |
Le principe est de modifier les stratégies de configuration dans le fichier centralisés cfagent.conf qui se trouve sur le serveur cfengine. Ensuite il s'agit de distribuer ce fichier sur les clients au travers d'une strategie simple et quasi immuable deployée dès l' | Le principe est de modifier les stratégies de configuration dans le fichier centralisés cfagent.conf qui se trouve sur le serveur cfengine. Ensuite il s'agit de distribuer ce fichier sur les clients au travers d'une strategie simple et quasi immuable deployée dès l' | ||
- | 3.2 | + | ==== |
- | Afin d' | + | Afin d' |
- | 3.3 | + | ==== update.conf |
+ | < | ||
[root@calaz / | [root@calaz / | ||
$ cat update.conf | $ cat update.conf | ||
Line 181: | Line 148: | ||
| | ||
+ | </ | ||
Line 188: | Line 155: | ||
Pour information voici le contenu de masterinputs que nous distriburons. | Pour information voici le contenu de masterinputs que nous distriburons. | ||
+ | < | ||
[root@calaz / | [root@calaz / | ||
$ ls | $ ls | ||
cfagent.conf | cfagent.conf | ||
+ | </ | ||
- | + | ===== Cle cfengine | |
- | 4 | + | |
Afin d' | Afin d' | ||
+ | < | ||
[root@calaz / | [root@calaz / | ||
$ / | $ / | ||
Line 201: | Line 170: | ||
Writing private key to / | Writing private key to / | ||
Writing public key to / | Writing public key to / | ||
+ | </ | ||
+ | ===== Configuration du serveur cfservd ===== | ||
- | 5 Configuration du serveur cfservd | ||
Lancement du serveur de fichier cfservd sur le serveur cfengine. | Lancement du serveur de fichier cfservd sur le serveur cfengine. | ||
+ | < | ||
[root@calaz / | [root@calaz / | ||
$ / | $ / | ||
Line 218: | Line 188: | ||
(END OF PARSING / | (END OF PARSING / | ||
Finished with / | Finished with / | ||
+ | </ | ||
On voit clairement qu'il manque le fichier de configuration cfservd.conf . | On voit clairement qu'il manque le fichier de configuration cfservd.conf . | ||
- | 5.1 | + | ==== Définition du cfservd.conf |
+ | < | ||
[root@calaz / | [root@calaz / | ||
$ cat cfservd.conf | $ cat cfservd.conf | ||
Line 254: | Line 226: | ||
/ | / | ||
/ | / | ||
+ | </ | ||
+ | ==== Lancement de cfservd ==== | ||
- | 5.2 Lancement de cfservd | + | < |
[root@calaz / | [root@calaz / | ||
$ / | $ / | ||
Line 282: | Line 255: | ||
Listening for connections ... | Listening for connections ... | ||
Checking file updates on / | Checking file updates on / | ||
+ | </ | ||
+ | Effectivement le serveur c'est bindé en ipv6 ! sur le port cfengine (tcp:5308) | ||
- | Effectivement le serveur c'est ``bindé'' | + | < |
[root@calaz / | [root@calaz / | ||
$ lsof -i tcp | grep cfser | $ lsof -i tcp | grep cfser | ||
cfservd | cfservd | ||
+ | </ | ||
+ | |||
+ | Le serveur cfengine est maintenant opérationnel, | ||
+ | ===== Firewall iptables ===== | ||
- | Le serveur cfengine est maintenant opérationnel, | ||
- | 6 Firewall iptables | ||
On viens de le voir, le serveur écoute sur le port 5308, il faut donc prévoir d' | On viens de le voir, le serveur écoute sur le port 5308, il faut donc prévoir d' | ||
+ | < | ||
[root@arvouin / | [root@arvouin / | ||
$/ | $/ | ||
Line 300: | Line 277: | ||
Connect to calaz.int-evry.fr = 157.159.50.197 on port cfengine | Connect to calaz.int-evry.fr = 157.159.50.197 on port cfengine | ||
cfengine:: Time out | cfengine:: Time out | ||
+ | </ | ||
Ouverture du port. | Ouverture du port. | ||
+ | < | ||
[root@calaz / | [root@calaz / | ||
$ grep 5308 / | $ grep 5308 / | ||
Line 309: | Line 287: | ||
[root@calaz / | [root@calaz / | ||
$ / | $ / | ||
+ | </ | ||
+ | ===== Client cfengine ===== | ||
- | 7 Client cfengine | + | ==== |
- | 7.1 | + | |
+ | < | ||
[root@arvouin /var] | [root@arvouin /var] | ||
$rpm -Uvh / | $rpm -Uvh / | ||
Préparation... | Préparation... | ||
| | ||
+ | </ | ||
+ | ==== Cle serveur ==== | ||
- | 7.2 Cle serveur | ||
La clé du serveur a bien été intégrée par le package: | La clé du serveur a bien été intégrée par le package: | ||
+ | < | ||
[root@arvouin / | [root@arvouin / | ||
$ls ppkeys/ | $ls ppkeys/ | ||
root-157.159.50.197.pub | root-157.159.50.197.pub | ||
+ | </ | ||
- | + | ==== Fichiers de configuration | |
- | 7.3 | + | |
Pour le momment il n'y a rien, c'est au premier lancement de cfagent que l' | Pour le momment il n'y a rien, c'est au premier lancement de cfagent que l' | ||
+ | < | ||
[root@arvouin / | [root@arvouin / | ||
$ls | $ls | ||
+ | </ | ||
- | + | ==== | |
- | 7.4 | + | |
Voici le contenu du répertoire principal apres l' | Voici le contenu du répertoire principal apres l' | ||
+ | < | ||
[root@arvouin / | [root@arvouin / | ||
$ls -R | $ls -R | ||
Line 371: | Line 355: | ||
cf.groups.example | cf.groups.example | ||
cf.linux.example | cf.linux.example | ||
+ | </ | ||
- | + | ==== | |
- | 7.5 | + | |
Afin que les fichiers de strategies soient deployés sur le client, il faut que ce dernier dispose d'une copie du fichier de distribution de ces fichiers -> le fichier update.conf evoqué auparavant lors de sa conception sur le serveur central de configuration cfengine. | Afin que les fichiers de strategies soient deployés sur le client, il faut que ce dernier dispose d'une copie du fichier de distribution de ces fichiers -> le fichier update.conf evoqué auparavant lors de sa conception sur le serveur central de configuration cfengine. | ||
Exemple de ditribution par simple copie manuelle, l' | Exemple de ditribution par simple copie manuelle, l' | ||
+ | < | ||
[root@arvouin / | [root@arvouin / | ||
$scp root@calaz:/ | $scp root@calaz:/ | ||
+ | </ | ||
- | + | ==== Clé du client | |
- | 7.6 | + | |
Si on lance tout de suite un cfagent (-parse et -verbose ) on constate ceci: | Si on lance tout de suite un cfagent (-parse et -verbose ) on constate ceci: | ||
+ | < | ||
[root@arvouin / | [root@arvouin / | ||
$/ | $/ | ||
Line 395: | Line 381: | ||
cfengine:: Couldn' | cfengine:: Couldn' | ||
cfengine:: open: No such file or directory | cfengine:: open: No such file or directory | ||
+ | </ | ||
+ | En effet il manque la paire de clé sur le client. Pour la démonstration nous la générons ici manuellement. Dans le cadre d'un deploiement industriel on assurera la création automatique de cette clé par un script (dans notre RPM; cfinit) qui se chargera au premier boot de la station fraichement installée de lancer le cfkey). | ||
- | En effet il manque la paire de clé sur le client. Pour la démonstration nous la générons ici manuellement. Dans le cadre d'un deploiement ``industriel'' | + | < |
[root@arvouin / | [root@arvouin / | ||
$/ | $/ | ||
Line 404: | Line 391: | ||
Writing private key to / | Writing private key to / | ||
Writing public key to / | Writing public key to / | ||
+ | </ | ||
- | + | ==== | |
- | 7.7 | + | |
Pour que la communication entre le client et le serveur cfengine se fasse, les deux machines s' | Pour que la communication entre le client et le serveur cfengine se fasse, les deux machines s' | ||
+ | < | ||
[root@arvouin / | [root@arvouin / | ||
$/ | $/ | ||
Line 418: | Line 406: | ||
cfengine:: Authentication dialogue with calaz.int-evry.fr failed | cfengine:: Authentication dialogue with calaz.int-evry.fr failed | ||
cfengine:: Unable to establish connection with calaz.int-evry.fr (failover) | cfengine:: Unable to establish connection with calaz.int-evry.fr (failover) | ||
+ | </ | ||
En revanche, le serveur ne dispose pas encore de la clé publique de ce client !. | En revanche, le serveur ne dispose pas encore de la clé publique de ce client !. | ||
- | 7.7.1 | + | |
+ | === | ||
Nous pouvons proceder à un transfert manuelle de la clé du client vers le serveur : | Nous pouvons proceder à un transfert manuelle de la clé du client vers le serveur : | ||
+ | < | ||
[root@arvouin / | [root@arvouin / | ||
$scp localhost.pub root@calaz:/ | $scp localhost.pub root@calaz:/ | ||
root@calaz' | root@calaz' | ||
localhost.pub | localhost.pub | ||
+ | </ | ||
Mais cela n'est pas tres industrialisable ! | Mais cela n'est pas tres industrialisable ! | ||
- | 7.7.2 | + | === |
On peux autrement déclarer dans le fichier de configuration du serveur cfservd que l'on accepte de recevoir des clé publiques des machines que nous allons gerer (exemple ici le sous reseau 157.159.50.27.0/ | On peux autrement déclarer dans le fichier de configuration du serveur cfservd que l'on accepte de recevoir des clé publiques des machines que nous allons gerer (exemple ici le sous reseau 157.159.50.27.0/ | ||
+ | < | ||
$ grep Trust / | $ grep Trust / | ||
TrustKeysFrom = ( 157.159.27.0/ | TrustKeysFrom = ( 157.159.27.0/ | ||
Line 446: | Line 438: | ||
IP: 157.159.27.0/ | IP: 157.159.27.0/ | ||
+ | </ | ||
Répertoire des cles sur le serveur avant le lancement du client: | Répertoire des cles sur le serveur avant le lancement du client: | ||
+ | < | ||
[root@calaz / | [root@calaz / | ||
$ ls | $ ls | ||
localhost.priv | localhost.priv | ||
+ | </ | ||
Lancement du client | Lancement du client | ||
+ | < | ||
[root@arvouin / | [root@arvouin / | ||
$/ | $/ | ||
Line 471: | Line 464: | ||
Did not have key root-157.159.27.199 | Did not have key root-157.159.27.199 | ||
cfservd: Weak authentication of trusted client arvouin.int-evry.fr/:: | cfservd: Weak authentication of trusted client arvouin.int-evry.fr/:: | ||
+ | </ | ||
Répertoire de clés sur le serveur apres le lancement du client: | Répertoire de clés sur le serveur apres le lancement du client: | ||
+ | < | ||
[root@calaz / | [root@calaz / | ||
$ ls | $ ls | ||
localhost.priv | localhost.priv | ||
+ | </ | ||
On y retrouve bien le clé du client root-157.159.27.199.pub . | On y retrouve bien le clé du client root-157.159.27.199.pub . | ||
- | 7.8 | + | ==== |
Maintenant que tout est correctement configuré, nous pouvons relancer l' | Maintenant que tout est correctement configuré, nous pouvons relancer l' | ||
+ | < | ||
[root@arvouin / | [root@arvouin / | ||
$/ | $/ | ||
Line 521: | Line 515: | ||
cfengine:: source=/ | cfengine:: source=/ | ||
Saving the setuid log in / | Saving the setuid log in / | ||
+ | </ | ||
La copie des fichiers réalisés par update.conf a bien eu lieu . Cfagent poursuis sur le vif du sujet , l' | La copie des fichiers réalisés par update.conf a bien eu lieu . Cfagent poursuis sur le vif du sujet , l' | ||
+ | < | ||
* (Changing context state to: main) * | * (Changing context state to: main) * | ||
Line 562: | Line 557: | ||
cfengine: | cfengine: | ||
cfengine: | cfengine: | ||
+ | </ | ||
La strategie de configuration cliente c'est donc executée dans la foulée ... nous y reviendrons apres . | La strategie de configuration cliente c'est donc executée dans la foulée ... nous y reviendrons apres . | ||
Line 568: | Line 563: | ||
Verification de la présence des fichiers de source masterinputs du serveur sur la destination inputs sur le client: | Verification de la présence des fichiers de source masterinputs du serveur sur la destination inputs sur le client: | ||
+ | < | ||
[root@arvouin / | [root@arvouin / | ||
$ls ../inputs/ | $ls ../inputs/ | ||
cfagent.conf | cfagent.conf | ||
cf.groups | cf.groups | ||
+ | </ | ||
Remarque; la version anterieur d'un fichier déjà présent et renomée en .cfsaved | Remarque; la version anterieur d'un fichier déjà présent et renomée en .cfsaved | ||
- | 8 | + | ===== |
Nous montrons ici le début d'un configuration plus industrielle avec quelques exemples stratégiques. | Nous montrons ici le début d'un configuration plus industrielle avec quelques exemples stratégiques. | ||
- | 8.1 | + | ==== |
Nous éclatons le fichier cfagent.conf en sous éléments par le biais le l' | Nous éclatons le fichier cfagent.conf en sous éléments par le biais le l' | ||
+ | < | ||
$ cat cfagent.conf | $ cat cfagent.conf | ||
################################################## | ################################################## | ||
Line 594: | Line 592: | ||
linux:: | linux:: | ||
cf.linux | cf.linux | ||
+ | </ | ||
- | + | ==== | |
- | 8.2 | + | |
Le premier fichier importé est cf.goups qui comprend la liste des classes de machines: | Le premier fichier importé est cf.goups qui comprend la liste des classes de machines: | ||
+ | < | ||
[root@calaz / | [root@calaz / | ||
$ cat cf.groups | $ cat cf.groups | ||
Line 616: | Line 614: | ||
autoconfigMozilla = ( arvouin ) | autoconfigMozilla = ( arvouin ) | ||
logoint = ( arvouin ) | logoint = ( arvouin ) | ||
+ | </ | ||
- | + | ==== | |
- | 8.3 | + | |
Le fichier cf.main contient les définitions et taches (strategies) générales valables pour toutes les machines présentes et futures du parc à gerer. Seules les actions à mener propres à cet exemple sont commentées dans le fichier, pour les directives et variables cfengine, voir la documentation de référence. | Le fichier cf.main contient les définitions et taches (strategies) générales valables pour toutes les machines présentes et futures du parc à gerer. Seules les actions à mener propres à cet exemple sont commentées dans le fichier, pour les directives et variables cfengine, voir la documentation de référence. | ||
+ | < | ||
[root@calaz / | [root@calaz / | ||
$ cat cf.main | $ cat cf.main | ||
Line 709: | Line 708: | ||
/ | / | ||
/ | / | ||
+ | </ | ||
- | + | ==== | |
- | 8.4 | + | |
Exemple de fichier de configuration propre aux machines linux: | Exemple de fichier de configuration propre aux machines linux: | ||
Line 747: | Line 746: | ||
- | 8.5 | + | ==== |
Les differents fichiers et dossiers évoqués dans les stratégies ci-dessus sont stockés sur le serveur cfengine / | Les differents fichiers et dossiers évoqués dans les stratégies ci-dessus sont stockés sur le serveur cfengine / | ||
+ | < | ||
$ mkdir / | $ mkdir / | ||
$ mkdir / | $ mkdir / | ||
Line 762: | Line 762: | ||
$ ls | $ ls | ||
bashrc | bashrc | ||
+ | </ | ||
+ | ==== Lancement du client ==== | ||
- | 8.6 Lancement du client | + | < |
[root@arvouin / | [root@arvouin / | ||
$/ | $/ | ||
Line 867: | Line 868: | ||
Existing restart sequence found (/ | Existing restart sequence found (/ | ||
cfengine: | cfengine: | ||
+ | </ | ||
Toutes les opérations se sont réalisées comme prevu . | Toutes les opérations se sont réalisées comme prevu . | ||
- | 9 | + | ===== Package RPM maison de cfengine |
Voici un exemple de fichier de spec de construction du package cfengine, à partir du tar.gz, il apporte en valeur ajoutée la clé du serveur, les scripts de demarrage (cfengine, cfinit, cron cfengine), la construction de l' | Voici un exemple de fichier de spec de construction du package cfengine, à partir du tar.gz, il apporte en valeur ajoutée la clé du serveur, les scripts de demarrage (cfengine, cfinit, cron cfengine), la construction de l' | ||
Pour les details de contruction de packages RPM voir: | Pour les details de contruction de packages RPM voir: | ||
Line 877: | Line 878: | ||
http:// | http:// | ||
+ | < | ||
[root@calaz / | [root@calaz / | ||
$ cat cfengine.spec | $ cat cfengine.spec | ||
Line 996: | Line 998: | ||
* Sat Jul 27 2000 Ian Macdonald < | * Sat Jul 27 2000 Ian Macdonald < | ||
- 1.5.4 packaged as RPM | - 1.5.4 packaged as RPM | ||
+ | </ | ||
- | + | ===== Configurations évoluées | |
- | 10 | + | |
Exemple de configurations évoluée (en cours d' | Exemple de configurations évoluée (en cours d' | ||
- | 10.1 | + | ==== |
Plutot que de faire une installation de logiciels à partir de shellcommands lançants rpm ou yum etc ... depuis la version 2.1 de cfengine il est possible d' | Plutot que de faire une installation de logiciels à partir de shellcommands lançants rpm ou yum etc ... depuis la version 2.1 de cfengine il est possible d' | ||
Line 1008: | Line 1010: | ||
Exemple d' | Exemple d' | ||
+ | < | ||
control: | control: | ||
Line 1022: | Line 1025: | ||
RealPlayer pkgmgr=rpm action=install | RealPlayer pkgmgr=rpm action=install | ||
scilab pkgmgr=rpm action=install | scilab pkgmgr=rpm action=install | ||
+ | </ | ||
- | + | ==== Pluggins maison | |
- | 10.2 | + | |
... à continuer ... | ... à continuer ... |