1 Problemy z kompilacją

To są znane problemy dotyczące kompilacji Zabbix ze źródeł. We wszystkich pozostałych przypadkach zobacz stronę Znane problemy.

Biblioteka w niestandardowej lokalizacji

Zabbix umożliwia określenie biblioteki znajdującej się w niestandardowej lokalizacji. W poniższym przykładzie Zabbix uruchomi curl-config z podanej niestandardowej lokalizacji i użyje jego wyniku do określenia właściwej biblioteki libcurl do użycia.

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

To zadziała, jeśli jest to jedyna zainstalowana w systemie biblioteka libcurl, ale może nie zadziałać, jeśli inna biblioteka libcurl jest zainstalowana w standardowej lokalizacji (na przykład przez menedżer pakietów). Taka sytuacja ma miejsce, gdy potrzebujesz nowszej wersji biblioteki dla Zabbix, a starszej dla innych aplikacji.

Dlatego wskazanie komponentu w niestandardowej lokalizacji nie zawsze zadziała, gdy ten sam komponent istnieje również w standardowej lokalizacji.

Na przykład, jeśli używasz nowszej biblioteki libcurl zainstalowanej w /usr/local, a pakiet libcurl nadal jest zainstalowany, Zabbix może wybrać niewłaściwą wersję i kompilacja zakończy się niepowodzeniem:

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

W tym przypadku funkcja curl_easy_header() nie jest dostępna w starszej bibliotece /usr/lib/x86_64-linux-gnu/libcurl.so, ale jest dostępna w nowszej /usr/local/lib/libcurl.so.

Problem leży w kolejności flag linkera, a jednym z rozwiązań jest podanie pełnej ścieżki do biblioteki w zmiennej LDFLAGS:

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

Zwróć uwagę na opcję -Wl,--no-as-needed, która może być wymagana w niektórych systemach (zobacz też: domyślne opcje linkowania w systemach opartych na Debianie).

Zbyt mały rozmiar stosu w niektórych systemach

Jeśli Zabbix ulega awarii lub zawiesza się z powodu przepełnienia stosu, możesz zwiększyć rozmiar stosu dla pojedynczego wątku, używając opcji --with-stacksize podczas konfigurowania źródeł. Problem ten może wystąpić w systemach z niskimi domyślnymi limitami stosu wątków, zwłaszcza podczas preprocessing, gdy tworzonych jest wiele wątków.

Poniższy przykład ustawia rozmiar stosu na 512 KB na wątek:

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

Możesz sprawdzić limity stosu wątków systemu w czasie działania za pomocą polecenia ulimit -s w systemach opartych na Linuxie.