Vous êtes ici:

Menu

Stacks Image 15405
Qui n’a pas espéré avoir un jour une seule ligne de commande pour installer Centreon sur Debian ? C’est l’objectif que je me suis fixé actuellement pour améliorer et simplifier cette installation. Le projet est ambitieux et je pars de très loin car je découvre au fur et à mesure toutes les facettes de la création des packages pour Debian. Cet article sera complété au fur et à mesure de mes recherches et tests suivant le plan ci-dessous :
  1. Organisation des fichiers Centreon sur Debian
  2. Choix des paquets et dépendances
  3. Utilisation de cmake et cpack
  4. Création des scripts pour les paquets Debian
  5. Création d’un paquet Debian
  6. Utilisation d’un dépôt non-officiel
  7. Tests et installation de Centreon-Engine
J’ai commencé par la version Wheezy (version 7.x) 64bits de Debian mais j’ai compris assez rapidement qu’il était plus intéressant d’approfondir l’installation sur la version Jessie (version 8.x). J’ai commencé avec des anciennes versions des sources de Centreon pour vérifier le système de mises à jour. À la fin de cet article, nous verrons l’installation d’une version minimale de Centreon-Engine. Deux pages supplémentaire ont été créé, la première présente l’installation d’un poller et sur la deuxième l’installation d’un central avec poller et le module centreon-poller-display.

1 Organisation des fichiers Centreon sur Debian

Afin de nous constituer nos paquets Debian, nous allons déterminer l’emplacement des binaires et fichiers de configuration de l’écosystème Centreon. Je me suis inspiré de la configuration d’une distribution CES et de l’installation des plugins de base Nagios. La librairie partagée Centreon-Clib sera aussi installée dans le dossier préconisé par Debian. Voici ci-dessous l’organisation des fichiers que nous allons réaliser.
Stacks Image 49113

organisation des fichiers

2 Choix des paquets et dépendances

Nous devons faire un choix d’architecture en fonction des sources que Centreon nous propose. Le choix est relativement simple pour le moteur de supervision. Nous avons la brique de base centreon-clib, ensuite centreon-connector qui peut être optionnelle mais fortement conseillée. Et enfin en dernier, nous aurons centreon-engine. Nous pouvons étudier la création d’un paquet avec les plugins centreon qui seront bientôt intégrés avec la version 3. À cette étape, nous avons une installation fonctionnelle pour un poller par exemple.
Pour l’installation d’un Central, nous aurons besoin d’un de centreon-broker et ensuite de centreon-ui, l’interface graphique de Centreon. On peut étudier la création de paquet pour centreon-clapi et centreon-widget. Un Central peut éventuellement être installé sans moteur de supervision, il faut étudier la possibilité d’installer centreon-broker sans centreon-engine. Autre réflexion, il faut étudier la possibilité d’installer le module centreon-broker pour un poller. Attention, les informations données à ce stade peuvent évoluer au cours de mes réflexions.
Stacks Image 49131
dépendances des paquets centreon
Première modification depuis la genèse de projet, j’ai séparé les deux connecteurs en deux paquets Debian distincts. Après discussion avec l’équipe de Centreon, nous avons décidé de réaliser des paquets se rapprochant de l’architecture CES. les paquets Centreon-Engine et Centreon-Broker sont divisés en paquets spécialisés. Il restera les méta-paquets centreon-broker et centreon-engine qui permettra de simplifier l’installation. Voici la nouvelle achitecture disponible sur le miroir Centreon-deb.
Stacks Image 42202
Nouvelle organisation au 2 juin 2015
Sortie d’une version qui va permettre l’installation de Centreon 2.6 sur Debian7 en une seule ligne de commande.
Stacks Image 43000
Nouvelle organisation au 30 juillet 2015
Ultime version suite au passage chez Centreon, nous avons améliorer la modularité et les dépendances. Pour l’instant, cette version ne s’applique qu’à Jessie. On remarque de suite les méta-paquets qui serviront à installer un central, un central sans base de données, un poller et son module centreon-poller-display.
Stacks Image 44940
Nouvelle organisation au 30 juillet 2015

3 Utilisation de cmake et cpack

Maintenant, il n’est pas question de réinventer la roue, nous allons profiter des archives sources de Centreon. Lors de mes premiers essais, j’avais utilisé la commande checkinstall. Mais il faut bien le reconnaître, cela plus à du bricolage et cela ne gère pas les scripts des paquets Debian et les recherches des dépendances. Nous allons utiliser les commandes de l’utilitaire cake et plus particulièrement le module CPackDeb.
En regardant les fichiers sources de Centreon, les développeurs nous ont simplifié la tâche. Il nous suffira de modifier le fichier package.cmake se trouvant dans le dossier build et de l’adapter à nos besoins. J’attire votre attention sur le fait que je n’ai pas la prétention de réaliser des packages Debian pour être validé par la communauté mais nous essaierons de nous en approcher le plus possible.

3.1 structure d’une archive deb

Un paquet debian est une archive contenant obligatoirement un dossier DEBIAN. Celui-ci comprend obligatoirement un fichier appelé control. Des fichiers script peuvent être présents en fonction des besoins. Le fichier md5sums est créé automatiquement lors de la compilation du paquet avec cpack.
Ressources
Si vous voulez approfondir vos connaissances sur la création des paquets debian : le guide du nouveau responsable debian
Stacks Image 41014
structure simplifiée d’un paquet debian

3.2 le fichier control

Le fichier control contient toutes les informations nécessaires sur le paquet Debian et utilisé par le gestionnaire de paquet APT et l’utilitaire dpkg. C’est un fichier lisible comme l’exemple ci-dessous :
Package: centreon-engine
Version: 1.4.11
Section: net
Priority: extra
Architecture: amd64
Depends: libc6 (>= 2.2.5), libgcc1 (>= 1:4.1.1), libgsoap2, libstdc++6 (>= 4.6), libxerces-c3.1, zlib1g (>= 1:1.1.4), centreon-clib (>= 1.4.2), openssl, nagios-plugins-basic
Suggests: centreon-broker (>= 2.8.1), centreon-connector-perl (>= 1.1.1), centreon-connector-ssh (>= 1.1.1), centreon-plugins
Conflicts: nagios3, icinga
Installed-Size: 15497
Maintainer: Eric Coquard
Description: Centreon Engine is a monitoring engine fully Nagios-compatible but with additionnal features and performance improvements.
Quelques explications :
Package : c’est le nom du package.
Version : c’est la version du package.
Section : on détermine le classement du paquet en fonction de certains critères d’organisation des paquets Debian. Pas facile de s’y retrouver quand on débute, j’ai choisi la section net correspondant aux applications réseaux.
Priority : par défaut, j’utilise extra.
Architecture : le paquet peut fonctionner sur un type d’architecture donné (dans notre exemple amd64 architecture 64 bits). Il est possible d’utiliser le mot-clé any pour autoriser toutes les architectures possibles.
Depends : On définit les paquets nécessaires au fonctionnement du paquet. Ils s’installeront automatiquement avec la commande apt install.
Suggests : On définit les paquets qui seront recommandés avec l’utilisation du paquet.
Conflicts : On définit les paquets incompatibles avec l’installation du paquet.
Installed-Size : Informations utilisées par le gestionnaire de paquets.
Maintainer : Contact pour le responsable du paquet.
Description : Description courte du paquet utilisé par le gestionnaire de paquets.

3.3 les variables cpack

Pour créer notre paquet Debian, à partir d’une archive source, nous utiliserons les variables cpack. Le fichier de configuration des packages se nomme package.make et se trouve dans le sous-dossier build dans les archives sources Centreon. Nous continuons à utiliser l’exemple de l’archive centreon-engine-1.4.11.tar.gz. Éditons le fichier package.make.
# Default settings.
set(CPACK_PACKAGE_VENDOR "Centreon")
set(CPACK_PACKAGE_NAME "centreon-engine")
Modifions la variable CPACK_PACKAGE_VENDOR avec Centreon. Rajoutons la variable CPACK_PACKAGE_NAME qui permet de définir le nom du paquet dans le fichier control. Si vous omettez ce paramètre, vous risquez d’avoir un nom de paquet incorrect. Par exemple, nous aurions dans notre cas, centreon engine sans le tiret et droit à un message d’erreur lors de la mise en place du paquet dans le dépôt comme ci-dessous :
reprepro --ask-passphrase -Vb . includedeb wheezy /home/vmdebian/project_package_centreon/centreon-engine-1.4.11/build/centreon-engine-1.4.11.deb
Error: Field 'Package' contains unexpected character 'e'!
There have been errors!
Continuons les modifications.
set(CPACK_PACKAGE_CONTACT "Eric Coquard ")
set (CPACK_SOURCE_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CENTREON_ENGINE_VERSION})
set (CPACK_SOURCE_IGNORE_FILES "~$" ".bz2$" ".gz$")
set (CPACK_SOURCE_TZ OFF)
On modifie le mainteneur du paquet avec CPACK_PACKAGE_CONTACT. On rajoute la variable CPACK_SOURCE_PACKAGE_FILE_NAME sinon les packages sources n’auront pas de nom lorsqu’on utilise la commande make configure_source. La variable CPACK_SOURCE_IGNORE_FILES permet d’ignorer certains fichiers lors de la génération des paquets sources et enfin on indique à cpack de ne pas générer de paquet avec l’extension .Z avec la variable CPACK_SOURCE_TZ à OFF. Nous arrivons au paramétrage du paquet Debian.
if (WITH_PACKAGE_DEB)
list(APPEND CPACK_GENERATOR "DEB")
list(APPEND PACKAGE_LIST "DEB package (.deb)")
set(CPACK_DEBIAN_PACKAGE_SECTION "net")
set (CPACK_DEBIAN_PACKAGE_PRIORITY "extra")
set (CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
set (CPACK_DEBIAN_PACKAGE_DEPENDS "centreon-clib (>= 1.4.2), openssl, nagios-plugins-basic")
set (CPACK_DEBIAN_PACKAGE_SUGGESTS "centreon-broker (>= 2.8.1), centreon-connector-perl (>= 1.1.1), centreon-connector-ssh (>= 1.1.1), centreon-plugins")
set (CPACK_DEBIAN_PACKAGE_CONFLICTS "nagios3, icinga")
configure_file("${SCRIPT_DIR}/deb/postinst.in" "${SCRIPT_DIR}/deb/postinst")
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
"${SCRIPT_DIR}/deb/postinst"
"${SCRIPT_DIR}/deb/prerm")
endif ()
Les trois premières lignes après la condition WITH_PACKAGE_DEB ne sont pas modifiées. On indique que l’on veut créer un package Debian avec l’extension .deb. On détermine le classement du paquet dans la section net. Ensuite on rajoute le paramètre priority avec la variable CPACK_DEBIAN_PACKAGE_PRIORITY. Afin de déterminer automatiquement les dépendances nécessaires au programme, on utilise la variable CPACK_DEBIAN_PACKAGE_SHLIBDEPS. Elle rajoutera automatiquement les dépendances dans le paramètre Depends. Attention toutefois, il sera nécessaire de rajouter manuellement les autres programmes qui ne sont pas détectés mais nécessaire au bon fonctionnement de l’application. Dans notre exemple, nous ajoutons la variable CPACK_DEBIAN_PACKAGE_DEPENDS avec le nom de trois paquets Debian. Le nombre entre parenthèses impose une version minimum du paquet Debian requis. Il est possible d’indiquer des programmes recommandés lors de l’installation du paquet comme l’exemple ci-dessous :
apt-get install centreon-engine
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés :
libgsoap2 libicu48 libxerces-c3.1 nagios-plugins-basic nagios-plugins-common
Paquets suggérés :
centreon-broker centreon-connector-perl centreon-connector-ssh centreon-plugins nagios3 icinga
La variable CPACK_DEBIAN_PACKAGE_SUGGESTS nous permet d’afficher dans notre exemple suivant les programmes suivants centreon-broker, centreon-connector-perl, centreon-connector-ssh et centreon-plugins. Les deux autres paquets nagios3 et icinga sont initiés par les paquets nagios-plugins-basic et nagios-plugins-common. Mais il n’est franchement pas conseillé d’installer plusieurs moteurs de supervision sur le même serveur. Pour éviter toute erreur d’installation, nous rajouterons la variable CPACK_DEBIAN_PACKAGE_CONFLICTS pour déterminer les programmes incompatibles entre-eux. Voici d’ailleurs le message que vous obtiendrez si vous tentez l’installation de centreon-engine avec nagios3.
apt-get install centreon-engine nagios3
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Certains paquets ne peuvent être installés. Ceci peut signifier
que vous avez demandé l'impossible, ou bien, si vous utilisez
la distribution unstable, que certains paquets n'ont pas encore
été créés ou ne sont pas sortis d'Incoming.
L'information suivante devrait vous aider à résoudre la situation :

Les paquets suivants contiennent des dépendances non satisfaites :
centreon-engine : Est en conflit avec: nagios3 mais 3.4.1-3+deb7u1 devra être installé
E: Impossible de corriger les problèmes, des paquets défectueux sont en mode « garder en l'état ».
Les dernières lignes permettent la configuration des scripts optionnels pour l’installation et la désinstallation des paquets debian. La commande "configure_file" remplace les chaînes encadrées par le symbole @. Celles-ci sont substituées par des variables configurées dans le fichier CMakeLists.txt. Et la dernière variable CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA installe ces scripts dans le paquet debian. Nous allons voir plus en détail la configuration de ces scripts dans le chapitre suivant.

4 Création des scripts pour les paquets Debian

4.1 quatre scripts pour la gestion des paquets debian

Les scripts preinst, postint, prerm et postrm permettent la configuration du paquets et sont exécutés par le programme dpkg. Ils sont optionnels et doivent être le moins intrusifs possible. Il faut géré les erreurs avec minutie et faire tous les essais possibles. Il faut garder à l’esprit que ces scripts sont exécutés à l’installation, la mise à jour et à la suppression.
  • preinst est exécuté avant l’installation des binaires d’un paquet,
  • prerm est exécuté avant la suppression des binaires d’un paquet,
  • postinst est exécuté après l’installation des binaires d’un paquet,
  • ports est exécuté après la suppression des binaires d’un paquet.
Ces scripts sont normalement exécutables, il doivent avoir les droits de fichier 755. le programme cpack gère sans problème ce cas de figure.

4.2 Génération des scripts par cmake

Afin d’avoir un script compatible debian et avoir les bonnes valeurs, nous utiliserons le fichier de configuration de cmake et plus particulièrement le fichier package.make. La commande que l’on a vu précédemment va nous servir à configurer notre fichier.
configure_file("${SCRIPT_DIR}/deb/postinst.in" "${SCRIPT_DIR}/deb/postinst")
La variable SCRIPT_DIR indique le chemin centreon-engine-1.4.11/scripts. On utilise un fichier template postinst.in se trouvant dans le dossier deb. Tous les mots-clés encadrés par le symbole @ seront remplacés par des variables créées dans le fichier CMakeLists.txt. Les valeurs de ses variables peuvent être paramétrées lors de la configuration de la compilation avec la commande cmake. Vous trouverez, ci-dessous, une explication simplifiée du fonctionnement. Première action, on prépare la configuration et l’initialisation des variables. Deuxième action, lors de la compilation et de la création du package, le fichier postinst est créé en utilisant les variables créées lors de la configuration.
Stacks Image 41058
création du fichier postinst avec cmake

4.3 Création du paquet debian avec des scripts

Rien de plus simple, Il faut notifier à cpack, par l’intermédiaire de la variable CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA, que nous utilisons des scripts pour la configuration du paquet. Voici un exemple :
    set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
"${SCRIPT_DIR}/deb/postinst"
"${SCRIPT_DIR}/deb/prerm")
Lors de la création du package, les scripts postinst et prerm situés dans centreon-engine-1.4.11/scripts/deb seront copiés dans le paquet centreon-engine-1.4.11.deb. Les chapitres suivant sont volontairement abandonnés pour l’instant, manque de temps. Je préfère me focaliser sur des procédures qui vont permettront d’utiliser le miroir Centreon-Deb.

5 Création d’un paquet Debian

6 Utilisation d’un dépôt non-officiel

7 Tests et installation des paquets

7.1 Squeeze

7.2 Wheezy

7.2.a ajout du dépôt

7.2.b Installation de Centreon-Engine

7.2.c Installation de Centreon-Broker

7.3 Jessie

7.3.a ajout du dépôt

Ajoutez le dépôt Debian, modifiez le fichier /etc/apt/source.list.
deb http://mirror.sugarbug.web4me.fr/centreon/ jessie main
Faites la mise à jour des dépôts sur votre machine.
apt-get update

7.3.b Installation et vérification de Centreon-Engine

Installez Centreon-Engine
apt-get install centreon-engine centreon-connector-perl centreon-connector-ssh
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés :
centreon-clib centreon-engine-daemon centreon-engine-extcommands centreon-engine-webservices libgsoap5 libperl5.20 libxerces-c3.1
monitoring-plugins-basic monitoring-plugins-common nagios-plugins-basic
Paquets suggérés :
centreon-broker centreon-plugins icinga icinga nagios3
Les NOUVEAUX paquets suivants seront installés :
centreon-clib centreon-connector-perl centreon-connector-ssh centreon-engine centreon-engine-daemon centreon-engine-extcommands
centreon-engine-webservices libgsoap5 libperl5.20 libxerces-c3.1 monitoring-plugins-basic monitoring-plugins-common
nagios-plugins-basic
0 mis à jour, 13 nouvellement installés, 0 à enlever et 5 non mis à jour.
Il est nécessaire de prendre 3 775 ko dans les archives.
Après cette opération, 24,0 Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] O
…………………
Paramétrage de nagios-plugins-basic (2.1.1-1) ...
Paramétrage de centreon-engine-daemon (1.4.13-1) ...
Paramétrage de centreon-engine-webservices (1.4.13-1) ...
Paramétrage de centreon-engine-extcommands (1.4.13-1) ...
Paramétrage de centreon-engine (1.4.13-1) ...
Traitement des actions différées (« triggers ») pour libc-bin (2.19-18) ...
Lancez le service et vérifiez l’exécution
service centengine start

service centengine status
● centengine.service - LSB: Start and stop Centreon Engine
Loaded: loaded (/etc/init.d/centengine)
Active: active (running) since mar. 2015-06-02 16:46:05 CEST; 4s ago
Process: 2664 ExecStart=/etc/init.d/centengine start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/centengine.service
└─2683 /usr/sbin/centengine /etc/centreon-engine/centengine.cfg

juin 02 16:46:03 debian8 centreon-engine[2683]: [1433256363] [2683] Event loop start at Tue Jun 2 16:46:03 2015
juin 02 16:46:03 debian8 centreon-engine[2683]: [1433256363] [2683] Processing object config file '/etc/centreon-engine/objects...s.cfg'
juin 02 16:46:03 debian8 centreon-engine[2683]: [1433256363] [2683] Processing object config file '/etc/centreon-engine/objects...s.cfg'
juin 02 16:46:03 debian8 centreon-engine[2683]: [1433256363] [2683] Processing object config file '/etc/centreon-engine/objects...s.cfg'
juin 02 16:46:03 debian8 centreon-engine[2683]: [1433256363] [2683] Processing object config file '/etc/centreon-engine/objects...s.cfg'
juin 02 16:46:03 debian8 centreon-engine[2683]: [1433256363] [2683] Warning: host failure_prediction_enabled was ignored
juin 02 16:46:03 debian8 centreon-engine[2683]: [1433256363] [2683] Warning: service parallelize_check was ignored
juin 02 16:46:03 debian8 centreon-engine[2683]: [1433256363] [2683] Warning: service failure_prediction_enabled was ignored
juin 02 16:46:03 debian8 centreon-engine[2683]: [1433256363] [2683] Processing object config file '/etc/centreon-engine/objects...t.cfg'
juin 02 16:46:05 debian8 centengine[2664]: centengine start: done.
Hint: Some lines were ellipsized, use -l to show in full.
Au bout de quelques secondes, on peut vérifier le fonctionnement du moteur.
centenginestats
Centreon Engine Statistics Utility 1.4.13

Copyright 2003-2008 Ethan Galstad
Copyright 2011-2013 Merethis
License: GPLv2

CURRENT STATUS DATA
------------------------------------------------------
Status File: /var/log/centreon-engine/status.dat
Status File Age: 0d 0h 0m 5s
Status File Version: (null)

Program Running Time: 0d 6h 26m 20s
Centreon Engine PID: 2683
Used/High/Total Command Buffers: 0 / 0 / 4096

Total Services: 8
Services Checked: 8
Services Scheduled: 8
Services Actively Checked: 8
Services Passively Checked: 0
Total Service State Change: 0.000 / 0.000 / 0.000 %
Active Service Latency: 0.059 / 0.062 / 0.061 sec
Active Service Execution Time: 0.062 / 4.020 / 0.558 sec
Active Service State Change: 0.000 / 0.000 / 0.000 %
Active Services Last 1/5/15/60 min: 0 / 8 / 8 / 8
Passive Service Latency: 0.000 / 0.000 / 0.000 sec
Passive Service State Change: 0.000 / 0.000 / 0.000 %
Passive Services Last 1/5/15/60 min: 0 / 0 / 0 / 0
Services Ok/Warn/Unk/Crit: 7 / 0 / 0 / 1
Services Flapping: 0
Services In Downtime: 0

Total Hosts: 1
Hosts Checked: 1
Hosts Scheduled: 1
Hosts Actively Checked: 1
Host Passively Checked: 0
Total Host State Change: 0.000 / 0.000 / 0.000 %
Active Host Latency: 0.036 / 0.036 / 0.036 sec
Active Host Execution Time: 4.002 / 4.002 / 4.002 sec
Active Host State Change: 0.000 / 0.000 / 0.000 %
Active Hosts Last 1/5/15/60 min: 0 / 1 / 1 / 1
Passive Host Latency: 0.000 / 0.000 / 0.000 sec
Passive Host State Change: 0.000 / 0.000 / 0.000 %
Passive Hosts Last 1/5/15/60 min: 0 / 0 / 0 / 0
Hosts Up/Down/Unreach: 1 / 0 / 0
Hosts Flapping: 0
Hosts In Downtime: 0

Active Host Checks Last 1/5/15 min: 0 / 1 / 5
Scheduled: 0 / 0 / 2
On-demand: 0 / 1 / 3
Parallel: 0 / 0 / 2
Serial: 0 / 0 / 0
Cached: 0 / 1 / 3
Passive Host Checks Last 1/5/15 min: 0 / 0 / 0
Active Service Checks Last 1/5/15 min: 6 / 8 / 24
Scheduled: 6 / 8 / 24
On-demand: 0 / 0 / 0
Cached: 0 / 0 / 0
Passive Service Checks Last 1/5/15 min: 0 / 0 / 0

External Commands Last 1/5/15 min: 0 / 0 / 0
comments powered by Disqus
 Vous êtes ici: