Installation de Cfengine depuis les sources

Cfengine est un logiciel de gestion de configuration, en constante évolution (surtout depuis que la version 3 est sortie l’an dernier). Cfengine AS, la société commerciale soutenant le produit, fournit depuis quelques mois des versions de CFengine directement packagées pour les différentes distributions ici (nécessite un login/mot de passe, création du compte gratuite).

Néanmoins, on peut vouloir compiler directement depuis les sources pour tester les nouvelles fonctionnalités, ou bien soumettre des patchs correctifs.

La procédure d’installation suivante a été testée sur une Debian stable fraichement installée, mais il ne devrait pas y avoir de différences fondamentales sur d’autres distributions.

Téléchargement des sources et dépendances

Cfengine nécessite quelques dépendances externes pour être compilé depuis les sources:

  • OpenSSL pour les échanges chiffrés
  • PCRE pour les expressions régulières étendues (Cfengine supporte les expressions régulières POSIX, mais les expressions étendues sont bien plus commodes)
  • BerkeleyDB pour stocker les données propre à l’outil
  • gcc, flex, bison, make pour la compilation

que l’on peut installer ainsi :

[sourcecode language=”text”]<br />aptitude install libssl-dev byacc bison gcc flex libpcre3 libpcre3-dev libdb4.6 libdb4.6-dev make<br />[/sourcecode]

Les sources peuvent être téléchargées depuis le site Cfengine en version tarball pour les releases, ou bien les versions de développement directement sur subversion.

Téléchargement des sources depuis le système de contrôle de sources

Il faut disposer de subversion :

[sourcecode language=”text”]<br />aptitude install subversion<br />[/sourcecode]

On télécharge ensuite les sources depuis le dépôt communautaire de Cfengine :

[sourcecode language=”text”]<br />svn checkout https://svn.iu.hio.no/projects/cfengine-3/trunk<br /><br />[/sourcecode]

Attention, le fingerprint du certificat indiqué sur le site web[1] n’est plus correct. Le message que vous aurez est :

[sourcecode language=”text”]<br />Erreur de validation du certificat du serveur pour ‘https://svn.iu.hio.no:443′ :<br />- Le nom d’hôte du certificat ne correspond pas.<br />Informations du certificat :<br />- nom d’hôte : cfengine.com<br />- valide de Thu, 19 Mar 2009 00:00:00 GMT à Sun, 18 Mar 2012 23:59:59 GMT<br />- signataire : Terms of use at https://www.verisign.com/rpa (c)05, VeriSign Trust Network, VeriSign, Inc., US<br />- empreinte : b0:fb:81:c4:8b:59:1b:28:fb:eb:07:33:a1:22:3b:1b:54:82:df:09<br />[/sourcecode]

Il faut accepter le certificat pour pouvoir télécharger les sources.

Compilation

Pour compiler le projet, il suffit de se placer dans le répertoire trunk, et d’utiliser les outils traditionnels

[sourcecode language=”text”]<br />cd trunk<br />./configure<br />make<br />su -c ‘make install'<br />[/sourcecode]

Vous devez maintenant avoir les fichiers et répertoires suivants présents sur votre système:

  • /usr/local/sbin/cf-* : les binaires issus de la compilation ;
  • /usr/local/share/doc/cfengine : un ensemble d’exemples de promises ;
  • /usr/local/share/man/man8/cf-* : les manuels des différents programmes ;
  • /usr/local/share/doc/cfengine/inputs/*.cf : les promises qui permettent de bootstrapper un serveur Cfengine.

Bootstrapper Cfengine

Cfengine utilise un répértoire de travail dédié, où il stocke toutes les données nécessaire à son bon fonctionnement. Pour l’utilisateur root, ce répertoire est /var/cfengine, pour les utilisateurs normaux, il s’agit de ~/.cfagent.
L’étape suivante consiste donc à générer l’ensemble de ces fichiers, et en particulier l’agent qui va gérer la configuration (cf-agent), le démon d’exécution (cf-execd), le démon de partage de fichier (cf-serverd) et le démon de monitoring d’activité (cf-monitord), ainsi que créer l’arborescence de Cfengine sous /var/cfengine

[sourcecode language=”text”]<br />mkdir -p /var/cfengine/masterfiles<br />cp /usr/local/share/doc/cfengine/inputs/*.cf /var/cfengine/masterfiles/<br />cd /var/cfengine/masterfiles/<br />/usr/local/sbin/cf-agent –bootstrap<br />[/sourcecode]

On constate maintenant que /var/cfengine contient les sous-répertoires suivants :

  • bin : les binaires cfengine,
  • inputs : les promesses utilisées, copiées périodiquement depuis masterfiles,
  • lastseen : les machines vues récemment,
  • masterfiles : les promesses de travail : c’est ici que les promesses doivent être éditées et testées, avant d’être validées et de passer dans le répertoire inputs,
  • modules : des modules d’extensions,
  • outputs : les sorties de cfengine,
  • ppkeys : les clefs publiques des autres agents connus, et la clef privée de cette machine,
  • reports : tout les rapports cfengine,
  • state : les états des différentes données monitorées.

Le répertoire /var/cfengine/inputs contient maintenant des promesses par défaut.

ATTENTION AVANT DE LANCER L’AGENT, prenez le temps de lire les promesses et de les comprendre. L’agent lancé en root a un contrôle total sur la machine, et sur le trunk les règles par défaut peuvent avoir des effets que vous ne souhaitez pas vraiment.

La version des promesses fournies à la date de l’écriture de ce post (version 1161) va :

  • Copier les binaires Cfengine dans le répertoire /var/cfengine/bin,
  • Copier les promesses depuis /var/cfengine/masterfiles vers /var/cfengine/inputs,
  • Mettre à jour la crontab pour y rajouter une exécution périodique de cf-execd toutes les 5 minutes,
  • Supprimer dans /etc/resolv.conf tous les domaines pour rajouter cfengine.com, [2]
  • Vérifier que les services cf-monitord et cf-serverd sont bien exécutés.

Note : Si root n’a pas de crontab, elle ne sera pas créée, et le lancement de cf-execd ne sera pas planifié. Il existe une autre méthode, plus efficace, pour gérer l’exécution de Cfengine, mais ce sera l’objet d’un autre article.

Voila, vous avez installé avec succès Cfengine. Que faire à partir de là ?

  • Exécuter cf-key pour générer les clefs publiques/privés pour dialoguer avec d’autres machines,
  • Voir sur le site communautaire les tutoriaux
  • Profit !

[1] Page pour les développeurs sur le site
[2] Vous voudrez probablement modifier le fichier site.cf pour remplacer “$(sys.resolv)” par “/tmp/resolv.conf”

SHARE THIS