1 Problèmes de compilation
Voici les problèmes connus concernant la compilation de Zabbix à partir des sources. Pour tous les autres cas, consultez la page Problèmes connus.
Bibliothèque dans un emplacement non standard
Zabbix permet de spécifier une bibliothèque située dans un emplacement non standard. Dans l'exemple ci-dessous, Zabbix exécutera curl-config depuis l'emplacement non standard spécifié et utilisera sa sortie pour déterminer la bonne version de libcurl à utiliser.
$ ./configure --enable-server --with-mysql --with-libcurl=/usr/local/bin/curl-config
Cela fonctionnera si c'est la seule libcurl installée sur le système, mais cela peut ne pas fonctionner s'il existe une autre libcurl installée dans un emplacement standard (par le gestionnaire de paquets, par exemple). C'est le cas lorsque vous avez besoin d'une version plus récente de la bibliothèque pour Zabbix et de l'ancienne pour d'autres applications.
Par conséquent, spécifier un composant dans un emplacement non standard ne fonctionnera pas toujours lorsque ce même composant existe également dans un emplacement standard.
Par exemple, si vous utilisez une libcurl plus récente installée dans /usr/local alors que le paquet libcurl est toujours installé, Zabbix peut récupérer la mauvaise version et la compilation échouera :
usr/bin/ld: ../../src/libs/zbxhttp/libzbxhttp.a(http.o): in function 'zbx_http_convert_to_utf8':
/tmp/zabbix-master/src/libs/zbxhttp/http.c:957: undefined reference to 'curl_easy_header'
collect2: error: ld returned 1 exit status
Ici, la fonction curl_easy_header() n'est pas disponible dans l'ancienne /usr/lib/x86_64-linux-gnu/libcurl.so, mais elle est disponible dans la nouvelle /usr/local/lib/libcurl.so.
Le problème vient de l'ordre des options de l'éditeur de liens, et une solution consiste à spécifier le chemin complet vers la bibliothèque dans une variable LDFLAGS :
$ LDFLAGS="-Wl,--no-as-needed /usr/local/lib/libcurl.so" ./configure --enable-server --with-mysql --with-libcurl=/usr/local/bin/curl-config
Notez l'option -Wl,--no-as-needed, qui peut être nécessaire sur certains systèmes (voir aussi : les options de liaison par défaut sur les systèmes basés sur Debian).
Taille de pile trop faible sur certains systèmes
Si Zabbix plante ou se fige en raison de dépassements de pile, vous pouvez augmenter la taille de pile par thread à l'aide de l'option --with-stacksize lors de la configuration des sources.
Ce problème peut se produire sur des systèmes dont les limites de pile de thread par défaut sont faibles, en particulier pendant le prétraitement, où plusieurs threads sont créés.
L'exemple suivant définit la taille de pile à 512 KB par thread :
./configure --enable-server --with-mysql --with-stacksize=512
Vous pouvez vérifier les limites de pile des threads du système à l'exécution à l'aide de la commande ulimit -s sur les systèmes basés sur Linux.