1 Kompilēšanas problēmas

Šīs ir zināmās problēmas, kas saistītas ar Zabbix kompilēšanu no avota kodiem. Visos citos gadījumos skatiet lapu Zināmās problēmas.

Bibliotēka nestandarta atrašanās vietā

Zabbix ļauj norādīt bibliotēku, kas atrodas nestandarta atrašanās vietā. Tālāk redzamajā piemērā Zabbix palaidīs curl-config no norādītās nestandarta atrašanās vietas un izmantos tā izvadi, lai noteiktu pareizo libcurl, ko lietot.

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

Tas darbosies, ja tā ir vienīgā sistēmā instalētā libcurl bibliotēka, taču var nedarboties, ja ir instalēta cita libcurl standarta atrašanās vietā (piemēram, pakotņu pārvaldnieka instalēta). Tā var būt situācija, kad Zabbix vajadzīga jaunāka bibliotēkas versija, bet citām lietotnēm - vecākā.

Tāpēc komponenta norādīšana nestandarta atrašanās vietā ne vienmēr darbosies, ja tas pats komponents pastāv arī standarta atrašanās vietā.

Piemēram, ja izmantojat jaunāku libcurl, kas instalēta /usr/local, bet libcurl pakotne joprojām ir instalēta, Zabbix var paņemt nepareizo versiju, un kompilēšana neizdosies:

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

Šeit funkcija curl_easy_header() nav pieejama vecākajā /usr/lib/x86_64-linux-gnu/libcurl.so, bet ir pieejama jaunākajā /usr/local/lib/libcurl.so.

Problēma ir saistīta ar linkera karogu secību, un viens no risinājumiem ir norādīt pilnu ceļu uz bibliotēku LDFLAGS mainīgajā:

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

Ņemiet vērā -Wl,--no-as-needed opciju, kas dažās sistēmās var būt nepieciešama (skatiet arī: noklusējuma saistīšanas opcijas Debian-based sistēmās).

Steka izmērs ir pārāk mazs dažās sistēmās

Ja Zabbix avarē vai sasalst steka pārpildes dēļ, varat palielināt katra pavediena steka izmēru, konfigurējot avotus, izmantojot --with-stacksize opciju avotu konfigurēšanas laikā. Šī problēma var rasties sistēmās ar zemu noklusējuma pavedienu steka limitu, īpaši priekšapstrādes laikā, kad tiek izveidoti vairāki pavedieni.

Tālāk redzamais piemērs iestata steka izmēru uz 512 KB katram pavedienam:

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

Sistēmas pavedienu steka limitus izpildes laikā var pārbaudīt, Linux bāzētās sistēmās izmantojot komandu ulimit -s.