1. Проблемы при компиляции

Это известные проблемы, связанные с компиляцией Zabbix из исходных кодов. Во всех остальных случаях смотрите страницу Известные проблемы.

Библиотека в нестандартном месте

Zabbix позволяет указать библиотеку, расположенную в нестандартном месте. В приведённом ниже примере Zabbix запустит curl-config из указанного нестандартного местоположения и использует его вывод для определения правильной используемой библиотеки libcurl.

$ ./configure --enable-server --with-mysql --with-libcurl=/usr/local/bin/curl-config

Это будет работать, если это единственная библиотека libcurl, установленная в системе, но может не сработать, если имеется другая библиотека libcurl, установленная в стандартном месте (например, с помощью менеджера пакетов). Так бывает, когда вам нужна более новая версия библиотеки для Zabbix и более старая для остальных приложений.

Поэтому указание компонента в нестандартном месте не всегда будет работать, если тот же компонент существует и в стандартном месте.

Например, если вы используете более новую версию библиотеки libcurl, установленную в /usr/local, но при этом установлен ещё пакет libcurl, Zabbix может взять неправильную библиотеку, и компиляция завершится неудачно:

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

Здесь функция curl_easy_header() недоступна в старой версии /usr/lib/x86_64-linux-gnu/libcurl.so, но доступна в более новой /usr/local/lib/libcurl.so.

Проблема заключается в порядке флагов линкера, и одно из решений — указать полный путь к библиотеке в переменной LDFLAGS:

$ LDFLAGS="-Wl,--no-as-needed /usr/local/lib/libcurl.so" ./configure --enable-server --with-mysql --with-libcurl=/usr/local/bin/curl-config

Обратите внимание на параметр -Wl,--no-as-needed, который может потребоваться в некоторых системах (см. также: параметры связывания по умолчанию в системах на базе Debian [en]).

Слишком маленький размер стека на некоторых системах

Если Zabbix аварийно завершает работу или зависает из-за переполнения стека, вы можете увеличить размер стека для каждого потока с помощью параметра --with-stacksize при настройке исходных кодов. Эта проблема может возникать на системах с низкими значениями ограничения размера стека потоков по умолчанию, особенно во время предобработки, когда создается несколько потоков.

Следующий пример задает размер стека 512 КБ на поток:

./configure --enable-server --with-mysql --with-stacksize=512

Вы можете проверить ограничения размера стека потоков в системе во время выполнения с помощью команды ulimit -s в системах на базе Linux.