Cette page a pour but d'expliquer comment développer FAN pour ses propres besoins ou pour une personne voulant devenir contributeur au projet. Nous allons aborder essentiellement le packaging RPM et comment créer son propre ISO de FAN. Tout d'abord, il faudra avoir un environnement de développement : une distribution Linux utilisant de préférence le système de paquet RPM et installer les librairies de développement.
FAN étant basé sur une CentOS, le mieux serait d'utiliser cette même distribution pour notre environnement. On pourrait aussi utiliser Fedora, Mandriva ou autre… mais il n'est pas sûr que tout fonctionnera sans problème lors des phases de compilation. Pour ma part, j'ai choisi d'utiliser FAN car elle s'installe rapidement et on peut tester les paquets compilés directement sur celle-ci. Comme CentOS n'est pas ma distribution préférée _o< j'ai choisi de virtualiser mon environnement avec VirtualBox. Une fois votre environnement installé, nous allons installer les outils qui vont vous permettre de faire du packaging RPM.
# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
EPEL (Extra Packages for Enterprise Linux) basé sur la communauté Fedora, il permet d'ajouter des dépôts de paquets (yum) qui viennent compléter ceux de la CentOS et qui ont l'avantage d'être compatibles. Celui qui va nous intéresser est rpmdevtools.
# yum install rpmdevtools
En tant que simple utilisateur, lancer
$ rpmdev-setuptree
Cela aura pour effet de créer une arborescence de build à l'intérieur de votre répertoire personnel.
$ ls rpmbuild/BUILD rpmbuild/RPMS rpmbuild/SOURCES rpmbuild/SPECS rpmbuild/SRPMS
Sur le dépôt de FAN, il existe un méta paquet RPM qui en l'installant vous installe toutes les librairies de développement nécessaire à la compilation des paquets principaux de FAN. Créer le fichier /etc/yum.repos.d/FAN.repo
[FAN] name=FAN - Base baseurl=http://cedrictemple.net/FAN/repository/fanprod/ gpgcheck=1 gpgkey=http://cedrictemple.net/FAN/repository/fanprod/RPM-GPG-KEY-FAN-1
lancez ensuite
# yum update # yum install fan-dev
Pour créer les fichiers ISO de FAN, il faut aussi d'installer les paquets suivants
# yum install createrepo mkisofs
Dans le répertoire rpmbuild qui est à la racine de votre répertoire personnel. Nous allons supprimer les répertoires SPECS et SOURCES, pour utiliser ceux provenant du dépôt subversion de FAN
$ rm -fr rpmbuild/BUILD rpmbuild/SOURCES $ cd rpmbuild $ svn checkout https://fannagioscd.svn.sourceforge.net/svnroot/fannagioscd/branches/fannagioscd-1.0/SPECS $ svn checkout https://fannagioscd.svn.sourceforge.net/svnroot/fannagioscd/branches/fannagioscd-1.0/SOURCES
Les deux dernières commandes sont des exemples, ici nous récupérons les répertoires provenant de la branche fannagioscd-1.0. Mais on pourrait aussi utiliser ceux du trunk ou des tags. Plus bas, je vous expliquerai comment est organisé le svn.
A l'heure où j'écris cette page, la dernière version de FAN est la 1.0. Imaginons que nous voulions la refaire en apportant d'autres fonctionnalités. Il faut d'abord récupérer l'ISO sur l'un des mirroirs.
$ wget http://lkco.gezen.fr/FAN/FAN-1.0.iso
Toutes les données de l'image, il faudra la recopier dans un répertoire qui nous servira de “build”
# mount -o loop FAN-1.0.iso /media/cdrom $ cp -r /media/cdrom ~/fan-build # umount /media/cdrom
En faisant un petit tour dans le répertoire, nous avons :
$ cd ~/fan-build $ ls CentOS RELEASE-NOTES-de.html RELEASE-NOTES-nl.html EULA RELEASE-NOTES-en RELEASE-NOTES-pt_BR GPL RELEASE-NOTES-en.html RELEASE-NOTES-pt_BR.html images RELEASE-NOTES-es RELEASE-NOTES-ro isolinux RELEASE-NOTES-es.html RELEASE-NOTES-ro.html ks.cfg RELEASE-NOTES-fr repodata NOTES RELEASE-NOTES-fr.html RPM-GPG-KEY-beta RELEASE-NOTES-cs RELEASE-NOTES-ja RPM-GPG-KEY-CentOS-5 RELEASE-NOTES-cs.html RELEASE-NOTES-ja.html TRANS.TBL RELEASE-NOTES-de RELEASE-NOTES-nl
Dans le répertoire CentOS, nous y retrouvons tous les paquets RPM qui seront installés.
J'ai choisi cet exemple car une personne a posté une demande sur le forum de FAN. Elle demandait s'il était possible de sauvegarder la configuration de FAN et de la déployer sur d'autres machines. La réponse est “non” car ce n'est pas une fonctionnalité qui a été envisagée (pour le moment) par les développeurs. Mais toutefois, il est possible d'installer FAN avec une base Centreon modifiée qui permettra ainsi, de déployer rapidement la configuration de Nagios. C'est peut être cette fonctionnalité que recherchait la personne. Cependant, si la configuration Nagios fait appel à des plugins qui ne sont pas présents dans FAN à la base, il faudra les recopier ou créer un nouveau package pour les installer.
<note warning>Créer toujours une copie des fichiers que vous modifiez en cas de fausse manipulation</note>
Positionnons-nous dans :
$ cd ~/rpmbuild $ cat SPECS/centreon.spec [..] Patch0: centreon-db.patch [..]
Le patch centreon-db.patch se trouvant dans SOURCES permet la création des fichiers nommés “centreon.sql” et “centreon_cds.sql” qui seront utilisés lors de la création de la base de données Centreon. Si on souhaite modifier la base de Centreon, il suffit donc de modifier ce patch. Voici comment on procède, on va supposer que vous avez les dumps de Centreon, les nouveaux fichiers “centreon.sql” et “centreon_cds.sql” ce que nous appellerons “centreon-new.sql” et “centreon_cds-new.sql”
$ cd SOURCES $ tar xzf centreon-1.4.2.6.tar.gz $ cp -r centreon-1.4.2.6 centreon-1.4.2.6.ori $ cd centreon-1.4.2.6 $ patch -p1 < ../centreon-db.patch patching file centreon_cds.sql patching file centreon.sql patching file ODS/ods
On recopie ensuite les nouveaux fichiers
$ cp lechemin/centreon-new.sql centreon.sql $ cp lechemin/centreon_cds-new.sql centreon_cds.sql $ cd ../ $ ls centreon-1.4.2.6 centreon-1.4.2.6.ori
Pour créer un nouveau patch centreon-db.patch, on lance la commande
$ diff -Naurd centreon-1.4.2.6.ori centreon-1.4.2.6 > centreon-db.patch
Le packaging : Avant toute phase de packaging, il convient de modifier le fichier .spec en incrémentant le numéro de release (par ex fan.15) et de mettre un commentaire sur les modifications apportées dans le changelog (à la fin du fichier)
$ cd ~/rpmbuild $ rpmbuild -ba SPECS/centreon.spec
Si tout se passe bien le fichier RPM est créé dans le dossier RPMS
$ ls RPMS/noarch/ centreon-1.4.2.6-fan.15.noarch.rpm
Pour la création d'une nouvelle image, il faut d'abord copier la nouvelle version du paquet RPM de centreon et supprimer l'ancienne version du paquet
$ rm ~/fan-build/CentOS/centreon-1.4.2.6-fan.14.noarch.rpm $ cp RPMS/noarch/centreon-1.4.2.6-fan.15.noarch.rpm ~/fan-build/CentOS/
$ cd ~/fan-build/ $ createrepo -g repodata/comps.xml . $ mkisofs -R -J -T -no-emul-boot -boot-load-size 4 -boot-info-table -V "FAN.1.0-test1" -A "Created on 2008/09/18" -P "FANFoundry" -p "FANfoundry" -b isolinux/isolinux.bin -c isolinux/boot.cat -x "lost+found" -o /tmp/FAN.1.0-test1.iso .
Attention : il y a un point “.” à la fin des 2 dernières commandes.
Les 2 dernières commandes auront pour effet de remettre à jours la liste des paquets à installer et la création de l'image FAN.1.0-test1.iso dans /tmp. Voilà il ne reste plus qu'à tester que l'installation fonctionne correctement.
Pour la création d'un nouveau paquet, lancer
$ rpmdev-newspec monpaquet
Il faut ensuite écrire le fichier .spec de “monpaquet”. Il existe de très bons tutoriaux sur la toile qui vous expliqueront en détails les règles à respecter pour faire un paquet RPM, dont les docs sur Fedora.
Comme dans le paragraphe précédent, il faudra mettre le rpm du paquet dans le CentOS du “fan-build” et modifier le fichier ks.cfg en rajoutant dans la section %packages le nom du nouveau paquet. Pour finir, lancer les 2 commandes pour créér une nouvelle image ISO
$ cd ~/fan-build/ $ createrepo -g repodata/comps.xml . $ mkisofs -R -J -T -no-emul-boot -boot-load-size 4 -boot-info-table -V "FAN.1.0-test1" -A "Created on 2008/09/18" -P "FANFoundry" -p "FANfoundry" -b isolinux/isolinux.bin -c isolinux/boot.cat -x "lost+found" -o /tmp/FAN.1.0-test1.iso .
Dans le dépôt https://fannagioscd.svn.sourceforge.net/svnroot/fannagioscd, il y a le trunk, les branches et les tags.
Cette documentation vous donne un avant-goût dans la manière de créer ou modifier les paquets RPM puis de l'intégrer dans FAN. Toutefois, pour utiliser bien cette documentation il faut avoir un minimum de pré-requis dans le packaging, le script shell et surtout la supervision. Cela vous permettra de mieux comprendre, la manière qui a été employée pour packager tous les outils dont je ne présente pas car ça sera trop long pour l'expliquer. J'entends par là, les paquets tels que Nagios, Nareto, Ndo et tous les patches qui ont été créés afin de pouvoir intégrer tous ces outils dans un milieu homogène et fonctionnel. Cette documentation s'appuie sur un certain nombre de référence que voici :