[ZBX-10760] Dependency from UnixODBC for Zabbix utilities and Zabbix agent Created: 2016 May 06 Updated: 2017 May 30 Resolved: 2016 May 24 |
|
Status: | Closed |
Project: | ZABBIX BUGS AND ISSUES |
Component/s: | Agent (G) |
Affects Version/s: | None |
Fix Version/s: | 3.0.4rc1, 3.2.0alpha1 |
Type: | Incident report | Priority: | Trivial |
Reporter: | Alexey Pustovalov | Assignee: | Unassigned |
Resolution: | Fixed | Votes: | 0 |
Labels: | agent, get, odbc, sender | ||
Remaining Estimate: | Not Specified | ||
Time Spent: | Not Specified | ||
Original Estimate: | Not Specified | ||
Environment: |
CentOS 7 |
Attachments: | ZBX-10760.diff | ||||||||
Issue Links: |
|
Description |
If Zabbix sources compiled with --with-unixodbc flag, there is added dependency from libodbc.so to zabbix_get, zabbix_agentd applications: ./configure --enable-agent --with-unixodbc --enable-server --with-mysql [root@localhost 3.0.2]# ldd ./src/zabbix_get/zabbix_get linux-vdso.so.1 => (0x00007ffdfcb44000) libodbc.so.2 => /lib64/libodbc.so.2 (0x00007f76b36e3000) libm.so.6 => /lib64/libm.so.6 (0x00007f76b33e1000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f76b31dc000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f76b2fc2000) libc.so.6 => /lib64/libc.so.6 (0x00007f76b2c01000) libltdl.so.7 => /lib64/libltdl.so.7 (0x00007f76b29f6000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f76b27da000) /lib64/ld-linux-x86-64.so.2 (0x00007f76b3955000) [root@localhost 3.0.2]# ldd ./src/zabbix_agent/zabbix_agentd linux-vdso.so.1 => (0x00007ffd949dc000) libodbc.so.2 => /lib64/libodbc.so.2 (0x00007fbce3c9a000) libm.so.6 => /lib64/libm.so.6 (0x00007fbce3998000) libdl.so.2 => /lib64/libdl.so.2 (0x00007fbce3793000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fbce3579000) libc.so.6 => /lib64/libc.so.6 (0x00007fbce31b8000) libltdl.so.7 => /lib64/libltdl.so.7 (0x00007fbce2fad000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fbce2d91000) /lib64/ld-linux-x86-64.so.2 (0x00007fbce3f0c000) [root@localhost 3.0.2]# ldd ./src/zabbix_sender/zabbix_sender linux-vdso.so.1 => (0x00007ffe67d2c000) libodbc.so.2 => /lib64/libodbc.so.2 (0x00007f9526040000) libm.so.6 => /lib64/libm.so.6 (0x00007f9525d3e000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f9525b39000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f952591f000) libc.so.6 => /lib64/libc.so.6 (0x00007f952555e000) libltdl.so.7 => /lib64/libltdl.so.7 (0x00007f9525353000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f9525137000) /lib64/ld-linux-x86-64.so.2 (0x00007f95262b2000) |
Comments |
Comment by Oleksii Zagorskyi [ 2016 May 06 ] |
Compilation options are identical for both versions, all features enabled: # /zab/zabbix-2.4/src/zabbix_get/zabbix_get -V Zabbix get v2.4.8 (revision 59629) (20 April 2016) Compilation time: Apr 27 2016 11:47:35 # ldd /zab/zabbix-2.4/src/zabbix_get/zabbix_get linux-vdso.so.1 (0x00007fff025f8000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0e9cd36000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0e9cb32000) libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f0e9c91b000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0e9c570000) /lib64/ld-linux-x86-64.so.2 (0x00007f0e9d037000)
# /zab/zabbix-3.0.0/src/zabbix_get/zabbix_get -V
zabbix_get (Zabbix) 3.0.0
Revision 58460 15 February 2016, compilation time: May 6 2016 15:42:16
Copyright (C) 2016 Zabbix SIA
License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it according to
the license. There is NO WARRANTY, to the extent permitted by law.
# ldd /zab/zabbix-3.0.0/src/zabbix_get/zabbix_get
linux-vdso.so.1 (0x00007ffea2db8000)
libodbc.so.2 => /usr/lib/x86_64-linux-gnu/libodbc.so.2 (0x00007ff5442ee000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff543fed000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff543de9000)
libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007ff543bd2000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff543827000)
libltdl.so.7 => /usr/lib/x86_64-linux-gnu/libltdl.so.7 (0x00007ff54361d000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff543400000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff544556000)
|
Comment by Oleksii Zagorskyi [ 2016 May 06 ] |
I can CONFIRM it. |
Comment by Glebs Ivanovskis (Inactive) [ 2016 May 06 ] |
One can see -lodbc appearing in compiler options twice for agent and three times for server: gcc -DZABBIX_DAEMON -DSYSCONFDIR="\"/usr/local/etc\"" -DLIBDIR="\"/usr/local/lib\"" -g -O2 -rdynamic -o zabbix_agentd zabbix_agentd-active.o zabbix_agentd-stats.o zabbix_agentd-cpustat.o zabbix_agentd-diskdevices.o zabbix_agentd-vmstats.o zabbix_agentd-logfiles.o zabbix_agentd-zbxconf.o zabbix_agentd-listener.o zabbix_agentd-procstat.o zabbix_agentd-zabbix_agentd.o ../../src/libs/zbxsysinfo/libzbxagentsysinfo.a ../../src/libs/zbxsysinfo/linux/libspecsysinfo.a ../../src/libs/zbxsysinfo/linux/libspechostnamesysinfo.a ../../src/libs/zbxsysinfo/agent/libagentsysinfo.a ../../src/libs/zbxsysinfo/common/libcommonsysinfo.a ../../src/libs/zbxsysinfo/simple/libsimplesysinfo.a ../../src/libs/zbxlog/libzbxlog.a ../../src/libs/zbxregexp/libzbxregexp.a ../../src/libs/zbxalgo/libzbxalgo.a ../../src/libs/zbxsys/libzbxsys.a ../../src/libs/zbxnix/libzbxnix.a ../../src/libs/zbxcomms/libzbxcomms.a ../../src/libs/zbxconf/libzbxconf.a ../../src/libs/zbxcommon/libzbxcommon.a ../../src/libs/zbxcrypto/libzbxcrypto.a ../../src/libs/zbxjson/libzbxjson.a ../../src/libs/zbxexec/libzbxexec.a ../../src/libs/zbxmodules/libzbxmodules.a ../../src/libs/zbxself/libzbxself.a -lodbc -lm -ldl -lresolv -lodbc ... gcc -DZABBIX_DAEMON -DSYSCONFDIR="\"/usr/local/etc\"" -DDATADIR="\"/usr/local/share\"" -DLIBDIR="\"/usr/local/lib\"" -I../../src/libs/zbxdbcache -g -O2 -L/usr/lib -rdynamic -o zabbix_server zabbix_server-actions.o zabbix_server-operations.o zabbix_server-events.o zabbix_server-scripts.o zabbix_server-server.o alerter/libzbxalerter.a dbsyncer/libzbxdbsyncer.a dbconfig/libzbxdbconfig.a discoverer/libzbxdiscoverer.a pinger/libzbxpinger.a poller/libzbxpoller.a housekeeper/libzbxhousekeeper.a timer/libzbxtimer.a trapper/libzbxtrapper.a snmptrapper/libzbxsnmptrapper.a httppoller/libzbxhttppoller.a watchdog/libzbxwatchdog.a escalator/libzbxescalator.a proxypoller/libzbxproxypoller.a selfmon/libzbxselfmon.a vmware/libzbxvmware.a ../../src/libs/zbxsysinfo/libzbxserversysinfo.a ../../src/libs/zbxsysinfo/common/libcommonsysinfo.a ../../src/libs/zbxsysinfo/simple/libsimplesysinfo.a ../../src/libs/zbxlog/libzbxlog.a ../../src/libs/zbxserver/libzbxserver.a ../../src/libs/zbxdbcache/libzbxdbcache.a ../../src/libs/zbxmemory/libzbxmemory.a ../../src/libs/zbxregexp/libzbxregexp.a ../../src/libs/zbxalgo/libzbxalgo.a ../../src/libs/zbxnix/libzbxnix.a ../../src/libs/zbxsys/libzbxsys.a ../../src/libs/zbxconf/libzbxconf.a ../../src/libs/zbxmedia/libzbxmedia.a ../../src/libs/zbxcommon/libzbxcommon.a ../../src/libs/zbxcrypto/libzbxcrypto.a ../../src/libs/zbxcomms/libzbxcomms.a ../../src/libs/zbxcommshigh/libzbxcommshigh.a ../../src/libs/zbxjson/libzbxjson.a ../../src/libs/zbxexec/libzbxexec.a ../../src/libs/zbxself/libzbxself.a ../../src/libs/zbxicmpping/libzbxicmpping.a ../../src/libs/zbxdbupgrade/libzbxdbupgrade.a ../../src/libs/zbxdbhigh/libzbxdbhigh.a ../../src/libs/zbxdb/libzbxdb.a ../../src/libs/zbxmodules/libzbxmodules.a -lpq -lodbc -lodbc -lm -ldl -lresolv -lodbc Seems like we do not restore original LDFLAGS and LIBS in m4/libunixodbc.m4: if test "x$unixodbc_error" = "x"; then _save_unixodbc_cflags="${CFLAGS}" _save_unixodbc_ldflags="${LDFLAGS}" _save_unixodbc_libs="${LIBS}" CFLAGS="${CFLAGS} ${UNIXODBC_CFLAGS}" LDFLAGS="${LDFLAGS} ${UNIXODBC_LDFLAGS}" LIBS="${LIBS} ${UNIXODBC_LIBS}" AC_CHECK_LIB(odbc, SQLAllocHandle, ,[unixodbc_error="unixODBC library not found"]) if test "x$unixodbc_error" = "x"; then AC_DEFINE(HAVE_UNIXODBC,1,[Define to 1 if unixUNIXODBC Driver Manager should be used.]) fi fi Probably broken by |
Comment by Glebs Ivanovskis (Inactive) [ 2016 May 10 ] |
Attached patch which seemingly fixes the issue. Before: $ CC=clang ./configure -q --enable-agent --enable-proxy --enable-server --with-postgresql --with-unixodbc Configuration: Detected OS: linux-gnu Install path: /usr/local Compilation arch: linux Compiler: clang Compiler flags: -g -O2 Library-specific flags: database: -I/usr/include/postgresql Enable server: yes Server details: With database: PostgreSQL WEB Monitoring: no Native Jabber: no SNMP: no IPMI: no SSH: no TLS: no ODBC: yes Linker flags: -L/usr/lib -rdynamic Libraries: -lpq -lodbc -lodbc -lm -ldl -lresolv -lodbc Enable proxy: yes Proxy details: With database: PostgreSQL WEB Monitoring: no SNMP: no IPMI: no SSH: no TLS: no ODBC: yes Linker flags: -L/usr/lib -rdynamic Libraries: -lpq -lodbc -lodbc -lm -ldl -lresolv -lodbc Enable agent: yes Agent details: TLS: no Linker flags: -rdynamic Libraries: -lodbc -lm -ldl -lresolv -lodbc Enable Java gateway: no LDAP support: no IPv6 support: no *********************************************************** * Now run 'make install' * * * * Thank you for using Zabbix! * * <http://www.zabbix.com> * *********************************************************** $ make clean ... $ make ... $ ldd src/zabbix_agent/zabbix_agentd linux-vdso.so.1 => (0x00007ffece93e000) libodbc.so.1 => /usr/lib/x86_64-linux-gnu/libodbc.so.1 (0x00007f0a8305f000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0a82d59000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0a82b54000) libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f0a82939000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0a82574000) libltdl.so.7 => /usr/lib/x86_64-linux-gnu/libltdl.so.7 (0x00007f0a82369000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f0a8214b000) /lib64/ld-linux-x86-64.so.2 (0x00007f0a832ef000) After: $ svn patch ~/ZBX-10760.diff U m4/libunixodbc.m4 $ ./bootstrap.sh $ CC=clang ./configure -q --enable-agent --enable-proxy --enable-server --with-postgresql --with-unixodbc Configuration: Detected OS: linux-gnu Install path: /usr/local Compilation arch: linux Compiler: clang Compiler flags: -g -O2 Library-specific flags: database: -I/usr/include/postgresql Enable server: yes Server details: With database: PostgreSQL WEB Monitoring: no Native Jabber: no SNMP: no IPMI: no SSH: no TLS: no ODBC: yes Linker flags: -L/usr/lib -rdynamic Libraries: -lpq -lodbc -lm -ldl -lresolv Enable proxy: yes Proxy details: With database: PostgreSQL WEB Monitoring: no SNMP: no IPMI: no SSH: no TLS: no ODBC: yes Linker flags: -L/usr/lib -rdynamic Libraries: -lpq -lodbc -lm -ldl -lresolv Enable agent: yes Agent details: TLS: no Linker flags: -rdynamic Libraries: -lm -ldl -lresolv Enable Java gateway: no LDAP support: no IPv6 support: no *********************************************************** * Now run 'make install' * * * * Thank you for using Zabbix! * * <http://www.zabbix.com> * *********************************************************** $ make clean ... $ make ... $ ldd src/zabbix_agent/zabbix_agentd linux-vdso.so.1 => (0x00007ffe4a172000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f122e27d000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f122e079000) libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f122de5d000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f122da98000) /lib64/ld-linux-x86-64.so.2 (0x00007f122e5ac000) P.S. gcc did not add dependency from libodbc even when -lodbc flag was present... or I made something wrong... Anyway, you can see that -lodbc disappears from ./configure output. |
Comment by Glebs Ivanovskis (Inactive) [ 2016 May 10 ] |
Fix for version 3.0 is available in development branch svn://svn.zabbix.com/branches/dev/ZBX-10760 revision 59987. |
Comment by Andris Zeila [ 2016 May 13 ] |
Successfully tested |
Comment by Aleksandrs Saveljevs [ 2016 May 16 ] |
(1) Unrelated to this task, but while branches are frozen, decided to provide a bit more proper implementation for dc_string_buffer_realloc() and dc_local_get_history_slot() functions in r60114 and r60115. Please verify. glebs.ivanovskis As I understand, the main idea is not to waste zbx_realloc() calls. Please have a look at r60118. asaveljevs Yes, your understanding is correct. Commit in r60118 had an overly long line, so r60119 combines the two approaches. glebs.ivanovskis Code in r60119 performs division every time reallocation is needed, although ZBX_STRING_REALLOC_STEP should be chosen so that in majority of situations one addition would be sufficient. I went back to iterative method in r60238. asaveljevs Wonderful! CLOSED. |
Comment by Glebs Ivanovskis (Inactive) [ 2016 May 23 ] |
Fixed in pre-3.0.4rc1 r60260, pre-3.1.0 (trunk) r60261. |