This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
docpublic:systemes:linux:cfengine [2012/06/25 08:28] PROCACCIA |
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. Il s' |
- | 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 de cfservd | + | |
- | 6 Firewall iptables | + | |
- | 7 Client cfengine | + | |
- | 7.1 Installation cfengine packagé sur le client | + | |
- | 7.2 Cle serveur | + | |
- | 7.3 Fichiers de configuration | + | |
- | 7.4 Distribution initiale | + | |
- | 7.5 Initialisation / Déploiement des fichiers sur le client | + | |
- | 7.6 Clé du client | + | |
- | 7.7 Echange de clé entre client et serveur | + | |
- | 7.7.1 Echange manuel | + | |
- | 7.7.2 Echange automatique de confiance | + | |
- | 7.8 Deploiement effectif initial | + | |
- | 8 Exemple pratique de strategie | + | |
- | 8.1 Fichier cfagent.conf | + | |
- | 8.2 Classes de machines | + | |
- | 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 ===== | ===== Introduction ===== | ||
Line 109: | Line 72: | ||
==== Distribution de la configuration ==== | ==== Distribution de la configuration ==== | ||
- | Afin d' | + | Afin d' |
==== update.conf ==== | ==== update.conf ==== | ||
Line 210: | Line 173: | ||
===== Configuration du serveur cfservd ===== | ===== 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 224: | 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 260: | Line 226: | ||
/ | / | ||
/ | / | ||
+ | </ | ||
+ | ==== Lancement de cfservd ==== | ||
- | 5.2 Lancement de cfservd | + | < |
[root@calaz / | [root@calaz / | ||
$ / | $ / | ||
Line 288: | 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, | 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 306: | 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 315: | 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 377: | 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 401: | 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 410: | 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 424: | 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 452: | 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 477: | 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 527: | 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 568: | 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 574: | 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 600: | 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 622: | 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 715: | Line 708: | ||
/ | / | ||
/ | / | ||
+ | </ | ||
- | + | ==== | |
- | 8.4 | + | |
Exemple de fichier de configuration propre aux machines linux: | Exemple de fichier de configuration propre aux machines linux: | ||
Line 753: | 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 768: | Line 762: | ||
$ ls | $ ls | ||
bashrc | bashrc | ||
+ | </ | ||
+ | ==== Lancement du client ==== | ||
- | 8.6 Lancement du client | + | < |
[root@arvouin / | [root@arvouin / | ||
$/ | $/ | ||
Line 873: | 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 883: | Line 878: | ||
http:// | http:// | ||
+ | < | ||
[root@calaz / | [root@calaz / | ||
$ cat cfengine.spec | $ cat cfengine.spec | ||
Line 1002: | 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 1014: | Line 1010: | ||
Exemple d' | Exemple d' | ||
+ | < | ||
control: | control: | ||
Line 1028: | 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 ... |