1 Problemy z kompilacją

Poniżej przedstawiono znane problemy dotyczące kompilacji Zabbix ze źródeł. We wszystkich innych przypadkach zobacz stronę Znane problemy.

Kompilacja agent Zabbix na HP-UX

Jeśli zainstalujesz bibliotekę PCRE z popularnej witryny pakietów HP-UX http://hpux.connect.org.uk (na przykład z pliku pcre-8.42-ia64_64-11.31.depot), w katalogu /usr/local/lib/hpux64 zostanie zainstalowana tylko 64-bitowa wersja biblioteki.

W takim przypadku, aby kompilacja agent zakończyła się powodzeniem, dla skryptu configure potrzebna jest niestandardowa opcja, na przykład:

CFLAGS="+DD64" ./configure --enable-agent --with-libpcre-include=/usr/local/include --with-libpcre-lib=/usr/local/lib/hpux64

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 biblioteka libcurl zainstalowana w systemie, 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 określenie komponentu w niestandardowej lokalizacji nie zawsze będzie dział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ą bibliotekę 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

Tutaj funkcja curl_easy_header() nie jest dostępna w starszej /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 na 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ć na 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, używając polecenia ulimit -s w systemach opartych na Linuxie.