Nagios : Crash du service à cause de downtime.h

Nagios : Crash du service à cause de downtime.h - Management du SI - Systèmes & Réseaux Pro

Marsh Posté le 20-08-2016 à 18:36:28    

Bonjour,
 
Je rencontre un problème sur Nagios. Tous les soirs à minuit, le service Nagios crash automatiquement. J'ai identifié le problème mais ne parvient pas à le corriger.
 
Voici les informations dont je dispose :  
 
Centos 6.5
Nagios 3.5.1
Check-MK 1.2.6p16
 
Le problème est lié à un hôte que j'ai déclaré en "scheduled downtime" : c'est à dire que Nagios ne va pas me générer de notification (par mail) même si l'host est down. Tous les soirs, à minuit, lors de la rotation des logs, Nagios crashe à cause de ce downtime. Il s'agit d'un bug connu : http://lists.mathias-kettner.de/pi [...] 14596.html. Il existe un patch (décrit dans le lien) mais je ne parviens pas à comprendre comment l'appliquer.
 
Une bonne âme pour m'aiguiller ?
 
Merci  :hello:

Reply

Marsh Posté le 20-08-2016 à 18:36:28   

Reply

Marsh Posté le 20-08-2016 à 20:34:57    

Il faut que tu télécharges les sources de Nagios, que tu appliques ton diff sur le fichier en question via la commande patch (patch -i 0007-fix_downtime_struct.diff downtime.h) et que tu recompiles Nagios pour obtenir ton binaire patché.

Reply

Marsh Posté le 20-08-2016 à 21:12:12    

Merci de l'info ! Donc pour résumé : j'ai installé Nagios via yum. Là, je retelecharge Nagios 3.5.1, par exemple dans /tmp, je patche avec la commande que tu m'indiques et pour recompiler il me suffit d'un make install ? Je ne risque pas de supprimer ce qui est déjà existant ? Il s'agit d'une machine qui est en production ..  
 
Merci !

Reply

Marsh Posté le 20-08-2016 à 21:28:29    

On fait pas de tests sur une machine en prod :p Je te conseille de refaire les manips sur une VM ou une autre machine, ca t'évitera de tout casser suite a une fausse manip.
 
 
Idéalement tu veux recompiler le Nagios avec exactement les mêmes options de compilations que celles utilisées dans ton RPM, ca t'évitera d'éventuels soucis.
 
Récupère plutôt le source rpm de Nagios, appliques le patch, et tu rebuild a partir du spec fourni dans le srpm.
 
Ensuite tu mets à jour ta machine de prod avec le rpm patché que tu as généré.

Reply

Marsh Posté le 20-08-2016 à 21:46:43    

Hmm.. Je sens que ça va piquer ! Je vais tenter ça dès demain matin, je me permets de revenir vers toi si je galère ?

Reply

Marsh Posté le 20-08-2016 à 22:02:56    

Si tu n'y arrives pas indique moi sur quel repository tu récupères le rpm Nagios (ou les repos que tu as dans /etc/yum.repos.d/) histoire que je me fasse une VM a l'identique de ta conf.

Reply

Marsh Posté le 21-08-2016 à 19:15:38    

Hello !
 
J'ai essayé de me débrouiller tout seul, mais visiblement je m'y prends mal ..  
 
Les repos : CentOS-Base.repo  
                                                                                               CentOS-fasttrack.repo  
                                                                                               CentOS-Vault.repo  
                                                                                               epel-testing.repo  
                                                                                               CentOS-Debuginfo.repo  
                                                                                               CentOS-Media.repo epel.repo          
                                                                                               ok.repo
 
 
J'ai récupérer le rpm de Nagios via yumdownloader nagios, dans /tmp.
Ensuite je tente d'extraire le fichier .rpm pour appliquer le patch (via rpm2cpio). Là je bloque !
 
Ensuite je pense que je dois utiliser rpmbuild --rebuild /tmp/nagiosxxx.src.rpm ?
 
Il me reste ensuite à vérifier que ça corrige le problème. Si oui, récupérer le rpm pour le mettre sur la machine de prod'.
 
Correction : CentOS 6.8 et pas 6.5.
 
Merci si tu passes par là :)

Reply

Marsh Posté le 21-08-2016 à 20:33:35    

Je suis dans le coin oui :p
 
Normalement tu installes le source rpm, tu patches, et tu rebuildes le rpm à partir du .spec
 
J'ai une VM de Centos 6.8 en x86_64, je te refais le rpm un peu plus tard dans la soirée.

Reply

Marsh Posté le 21-08-2016 à 23:31:23    

On part du principe que tu as installé déja les outils de compilation + quelques trucs utiles (j'ai eu la main lourde sur l'install des prérequis Perl, ca installe aussi des prérequis inutiles => avoir une machine de compilation et pas le faire en prod directement).
 

yum groupinstall "Development tools"
yum install mock rpmbuild git
useradd mockbuild
yum install gd-devel libjpeg-devel libpng-devel perl-CPAN perl-ExtUtils-* perl-Test-* perl-HTML-Lint


 
Alors : j'ai activé le source repository de epel.repo, et on commence par récupérer le source rpm :
 

[root@Centos6 yum.repos.d]# yumdownloader --source nagios
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
epel/metalink                                                                                                                          |  22 kB     00:00
epel-source/metalink                                                                                                                   |  21 kB     00:00
epel-source                                                                                                                            | 3.5 kB     00:00
epel-source/primary_db                                                                                                                 | 1.8 MB     00:05
nagios-3.5.1-1.el6.src.rpm                                                                                                             | 1.7 MB     00:04


 
On installe le rpm. Les étapes de compilation et de rebuild du rpm ne se font pas en root.

[root@Centos6 ~]#su - mockbuild
[mockbuild@Centos6 ~]$ rpm -ivh nagios-3.5.1-1.el6.src.rpm
   1:nagios                 ########################################### [100%]
 
[mockbuild@Centos6 ~]$ ls
nagios-3.5.1-1.el6.src.rpm  rpmbuild


 
Tu obtiens les sources de Nagios + les patches RedHat + le spec qui permet de tout recompiler dans le répertoire rpmbuild du $HOME de ton utilisateur
 
Maintenant on place le patch Nagios ;

[mockbuild@Centos6 ~]$  vi rpmbuild/SOURCES/nagios-0012-Fix-downtime-crash.patch


 
Le contenu du fichier sera :

diff --git a/include/downtime.h b/include/downtime.h
--- a/include/downtime.h
+++ b/include/downtime.h
@@ -39,24 +39,26 @@
  char *service_description;
  time_t entry_time;
  time_t start_time;
- time_t flex_downtime_start;  /* Time the flexible downtime started */
  time_t end_time;
  int fixed;
  unsigned long triggered_by;
  unsigned long duration;
  unsigned long downtime_id;
- int is_in_effect;
- int start_notification_sent;
  char *author;
  char *comment;
 #ifdef NSCORE
  unsigned long comment_id;
+#endif
+ int is_in_effect;
+#ifdef NSCORE
  int start_flex_downtime;
  int incremented_pending_downtime;
 // int start_event;  
 // int stop_event;
 #endif
  struct scheduled_downtime_struct *next;
+ time_t flex_downtime_start;  /* Time the flexible downtime started */
+ int start_notification_sent;
  } scheduled_downtime;


 
On édite le .SPEC pour y placer la ligne qui va appliquer le patch lors du build :

[mockbuild@Centos6 ~]$ vi rpmbuild/SPECS/nagios.spec


On ajoute les lignes suivantes :
 

Ligne 35 : Patch12: nagios-0012-Fix-downtime-crash.patch
Ligne 141 : %patch12 -p1 -b .fix_downtime


 
On va aussi éditer le début du fichier pour changer la version et éviter de confondre le RPM modifié avec le RPM de base
 

Name: nagios
Version: 3.5.1
Release: 1%{?dist}.patched
Summary: Host/service/network monitoring program


 
Yapluka rebuilder le rpm
 

[mockbuild@Centos6 ~]$ rpmbuild -ba rpmbuild/SPECS/nagios.spec


 
Et tu obtiens un joli set de RPM :

[mockbuild@Centos6 ~]$ ls rpmbuild/RPMS/x86_64/nagios-
nagios-3.5.1-1.el6.patched.x86_64.rpm            nagios-debuginfo-3.5.1-1.el6.patched.x86_64.rpm
nagios-common-3.5.1-1.el6.patched.x86_64.rpm     nagios-devel-3.5.1-1.el6.patched.x86_64.rpm


 
Que j'ai mis à disposition la pendant quelques jours.
 
Et voila :)
 
Edit - Correction d'une faute de frappe


Message édité par ccp6128 le 22-08-2016 à 18:02:19
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed