-
Incident report
-
Resolution: Won't fix
-
Major
-
None
-
2.0.0
-
Alpine Linux. (uClibc rather than glibc)
Build fails with:
... ccache gcc -DZABBIX_DAEMON -DSYSCONFDIR="\"/etc\"" -march=i486 -Os -fomit-frame-pointer -pipe -I/usr/include -I. -I/usr/include -rdynamic -Wl,--as-needed -o zabbix_agentd zabbix_agentd-active.o zabbix_agentd-stats.o zabbix_agentd-cpustat.o zabbix_agentd-diskdevices.o zabbix_agentd-perfstat.o zabbix_agentd-vmstats.o zabbix_agentd-logfiles.o zabbix_agentd-zabbix_agentd.o zabbix_agentd-zbxconf.o zabbix_agentd-listener.o ../../src/libs/zbxsysinfo/libzbxagentsysinfo.a ../../src/libs/zbxsysinfo/linux/libspecsysinfo.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/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 -lcurl -lm -liconv ../../src/libs/zbxsysinfo/common/libcommonsysinfo.a(net.o): In function `dns_query.isra.0': net.c:(.text+0x312): undefined reference to `res_send' collect2: ld returned 1 exit status make[2]: *** [zabbix_agent] Error 1 make[2]: *** Waiting for unfinished jobs.... ../../src/libs/zbxsysinfo/common/libcommonsysinfo.a(net.o): In function `dns_query.isra.0': net.c:(.text+0x312): undefined reference to `res_send' collect2: ld returned 1 exit status make[2]: *** [zabbix_agentd] Error 1
The problem is that res_send() is not implemented in uclibc (and probably never will). The use of res_send() was introduced due to ZBXNEXT-467.
An option would be to test for res_send() separately and if not found only disable the retrans and timeout options and use res_query() like it was in 1.8.
Index: src/libs/zbxsysinfo/common/net.c
===================================================================
--- src/libs/zbxsysinfo/common/net.c (revision 28283)
+++ src/libs/zbxsysinfo/common/net.c (working copy)
@@ -418,6 +418,7 @@
#else /* not _WINDOWS */
res_init(); /* initialize always, settings might have changed */
+#if defined(HAVE_RES_MKQUERY) && defined(HAVE_RES_SEND)
if (-1 == (res = res_mkquery(QUERY, zone, C_IN, type, NULL, 0, NULL, buf, sizeof(buf))))
return SYSINFO_RET_FAIL;
@@ -436,7 +437,12 @@
_res.retry = retry;
res = res_send(buf, res, answer.buffer, sizeof(answer.buffer));
-
+#else /* defined(HAVE_RES_QUERY) && defined(HAVE_RES_SEND) */
+ /* retrand and retry are ignored */
+ if (-1 == (res = res_query(zone, C_IN, type, answer.buffer, sizeof(answer.buffer))))
+ return SYSINFO_RET_FAIL;
+#endif
+
hp = (HEADER *)answer.buffer;
if (1 == short_answer)
Index: configure.in
===================================================================
--- configure.in (revision 28283)
+++ configure.in (working copy)
@@ -149,6 +149,10 @@
AC_MSG_ERROR([Unable to DNS lookup functions "${found_resolv}"])
fi
LIBS="${LIBS} ${RESOLV_LIBS}"
+AC_SEARCH_LIBS([res_mkquery], [], [AC_DEFINE([HAVE_RES_MKQUERY], 1, [Define if res_mkquery exists])])
+AC_SEARCH_LIBS([__res_mkquery], [], [AC_DEFINE([HAVE_RES_MKQUERY], 1, [Define if res_mkquery exists])])
+AC_SEARCH_LIBS([res_send], [], [AC_DEFINE([HAVE_RES_SEND], 1, [Define if res_send exists])])
+AC_SEARCH_LIBS([__res_send], [], [AC_DEFINE([HAVE_RES_SEND], 1, [Define if res_send exists])])
dnl *****************************************************************
dnl * *
A better long-time approach would probably to be to use an external library like c-ares to do the DNS things. I think that would also allow you to control if dns request goes via udp or tcp so you could have both net.udp.dns and net.tcp.dns. That should probably be posted in a separate issue for ZBXNEXT.