Adrien's log

Yet Another Note Pad

CFEngine et Debian Wheezy : installation client/serveur

by adrien on 26 septembre 2012

Qu’est-ce ?

CFEngine est un système de gestion de configuration. On écrit notre configuration système dans un fichier dans un langage propre à CFEngine, puis on le place dans le répertoire adéquat et enfin il se trouve répliqué et exécuté sur les clients. Cette solution permet de maintenir un parc de machines dans un état voulu. Pour plus d’infos, voir le site de CFEngine.

Pourquoi un article ? Tout simplement parce que j’en ai bavé pour l’installer sur une machine sous Debian Wheezy : les fichiers de configuration de CFEngine semble ne pas convenir à une installation de type client/serveur (oui, parce que CFEngine, on peut l’utiliser uniquement en local si on le souhaite).

UPDATE: De ce que j’ai pu voir durant mes expérimentations, il semble que le paquet fourni par Apt est bogué. J’ai rencontré des problèmes durant la synchronisation des noeuds. Pour résoudre cela, j’ai utilisé le paquet (.deb) fournit sur le site de CFEngine.

Installons la bête !

Nous allons nous occuper du serveur puis du client. Nous récupèrerons les fichiers du serveur pour configurer le client plus rapidement.

Le serveur

Primo, installer CFEngine !

1
apt-get install cfengine3

Secondo, refaire les liens problématiques :

1
2
3
4
5
6
7
rm -rf /var/lib/cfengine3/inputs
 
rm -rf /etc/cfengine3
 
ln -s /var/lib/cfengine3/inputs /etc/cfengine3
 
ln -s /var/lib/cfengine3/inputs /var/cfengine

Tertio, activer les services CFEngine. Pour cela, dans /etc/default/cfengine3, passer les lignes serverd et execd à 1 pour le serveur. Pour un client, seule la ligne « execd » sera nécessaire. Et enfin, démarrer le service :

1
service cfengine3 start

Dernière étape, les fichiers de configuration !

Copiez-les depuis /usr/share/doc/cfengine3/expample_config dans /var/lib/cfengine3/inputs et /var/lib/cfengine3/masterfiles (ce dernier dossier peut ne pas exister, dans ce cas il faut le créer).

Ensuite, il faut modifier les fichiers de configuration que l’on vient de copier de sorte qu’ils collent bien à ce que l’on veut, à savoir une architecture client/serveur.

Pour le fichier promises.cf :

Allez chercher la partie « body server control » et ajouter l’adresse IP du client ou un masque d ‘adresse à accepter genre « 192.168.1.* » sur les trois lignes. Cela permet d’autoriser la communication avec les clients (échange de clés, envoie des fichiers de configuration, …).

Pour le fichier update.cf :

Le fichier update.cf doit être adapté pour une utilisation client/serveur car, d’origine, il est écrit pour une utilisation en local seulement. C’est pas bien compliqué.

Commencez par trouver la section « bundle agent update », puis sous « files », remarquez la ligne copy_from. Il va falloir remplacer « localhost » par l’adresse IP du serveur CFEngine.

« mycopy » représente une fonction. Mais cette fonction n’est pas adaptée pour la copie à travers le réseau. Il va donc falloir l’adapter elle aussi. Pour cela, recherchez la ligne « body copy_from mycopy(from,server) ». Entre les crochets et en dessous du texte existant, il va falloir ajouter les lignes suivantes :

1
2
3
servers => { "${server}" };
verify => "true";
purge => "true";

Sauvegardez et quittez.

Pour le fichier site.cf :

Ici, nous allons autoriser les clients à venir piocher les fichiers de configuration sur le serveur.

Commencez par localiser la partie « bundle server access_rules() », puis effacez le contenu sous « access: ». Vous le remplacerez par :

1
2
3
4
5
"/var/cfengine"
    admit => { "127.0.0.1", "UNEIPOUUNMASQUE" };
 
"/var/lib/cfengine3/masterfiles"
    admit => { "127.0.0.1", "UNEIPOUUNMASQUE" };

 

UPDATE: Dans son commentaire, bernard nous conseille d’utiliser l’adresse IP de la carte réseau, plutôt que celle de loopback dans le but de pouvoir bénéficier de la class ‘am_policy_hub’.

Sauvegardez et quittez.

Passons à la dernière étape : l’initialisation du serveur. Cela se passe avec la commande suivante :

1
cf-agent -B -s IPDUSERVEUR

Le serveur va se bootstraper sur lui-même.

Le client

Pour le client, recommencez l’opération de réparation des liens symboliques vue plus haut ainsi que le démarrage du service « execd ».

Enfin copiez le contenu de /var/lib/cfengine3/inputs du serveur dans celui du client.

Puis initialisez le client avec le commande suivante :

1
cf-agent -B -s IPDUSERVEUR

Le client va s’initialiser et se configurer suivant la configuration que vous lui avez demandé. Vous mettrez vous fichiers .cf perso dans le répertoire masterfiles du serveur et modifierez le fichier promises.cf en conséquence. La configuration des clients se fera automatiquement.

Voilà un pas de plus vers la domination du monde !

4 thoughts on “CFEngine et Debian Wheezy : installation client/serveur

  1. bernard says:

    cool la partie des liens symboliques, ca aidera des gens a se passer des paquets natifs debian qui sont pour le moins obsoletes.

    une petite remarque : il est toujours préférable de bootstrapper sur l’interface reseau ethernet plutot que sur la loopback. cela car vous beneficiez de la classe am_policy_hub , utile pour differencier le hub des client lors de la phase d’update des policies.

  2. adrien says:

    Ah ouais, effectivement, le bootstrap sur l’interface c’est plus intelligent. Je maj l’article en conséquence.

    Cela fait un moment que je n’ai pas retoucher a CFEngine (manque de temps, comme d’hab’), faudrait que je regarde si, depuis la sortie de Wheezy en stable, ils nous ont mit un nouveau paquet.

  3. bernard says:

    meme pas, debian reste en 3.2, mais les depots apt sont dispo chez l’editeur, c’est pas chez paye pour des paquets a jour :

    https://cfengine.com/cfengine-linux-distros

    dans ce cas, les paquets editeur n’etant pas soumis au cahier des charges Debian, les binaires ne sont pas dans le PATH, et les conf plus dans /etc.

    il faudra alors pour boostraper lancer via chemin absolu :

    /var/cfengine/bin/cf-agent -B -s IPDUSERVEUR

    le processus d’update initial va deposer des liens symboliques dans /usr/local/sbin des les premieres passes de l’executeur. il n’est donc pas necessaire de faire l’appel par le chemin absolu par la suite 🙂

  4. I have noticed you don’t monetize your site, don’t waste your
    traffic, you can earn additional bucks every
    month because you’ve got hi quality content. If you want to know how to make extra bucks, search for:
    Boorfe’s tips best adsense alternative

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *