如何编译 dnsmasq 2.78?

如何编译 dnsmasq 2.78?

我想从编译新的 dnsmasqthekelleys.org。这有效,但后来我意识到标志与原始 ubuntu 版本 2.76-5 中的不一样:

Dnsmasq version 2.76  Copyright (c) 2000-2016 Simon Kelley
Compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP 
DHCPv6 no-Lua TFTP conntrack ipset auth DNSSEC loop-detect inotify

Dnsmasq version 2.78  Copyright (c) 2000-2017 Simon Kelley
Compile time options: IPv6 GNU-getopt no-DBus no-i18n no-IDN DHCP 
DHCPv6 no-Lua TFTP no-conntrack ipset auth no-DNSSEC loop-detect inotify

因此我更改了 config.h 但出现了一些我不知道如何解决的错误:

#定义 HAVE_CONNTRACK:

conntrack.c:21:59: fatal error: 
libnetfilter_conntrack/libnetfilter_conntrack.h: No such file or directory

#define HAVE_IDN: 未找到idna.h。

#定义 HAVE_DNSSEC:

dnssec.c:22:24: fatal error: nettle/rsa.h: No such file or directory

libnetfilter_conntrack.h 在哪里以及如何包含 rsa.h?我在哪里可以找到已被 canonical 修改的当前 ubuntu 版本的 config.h?

答案1

如果您想dnsmasq自行编译,则应安装其链接到的库的开发标头,以及gettext国际化 (i18n)。在 ubuntu 上,它将是这些包:

  • 获取文本
  • libdbus-1-dev
  • libidn11-dev
  • libnetfilter-conntrack-dev
  • 荨麻-dev

一般来说,你有一个文件名,例如libnetfilter_conntrack.h,你想知道哪个包提供了该文件,你可以使用该网站https://packages.ubuntu.com/然后使用“搜索包的内容”,它会带你到https://packages.ubuntu.com/search?searchon=contents&keywords=libnetfilter_conntrack.h&mode=exactfilename&suite=bionic&arch=any并告诉您搜索的包名为libnetfilter-conntrack-dev

所以现在,如果你像这样dnsmasq修改:src/config.h

--- a/src/config.h
+++ b/src/config.h
@@ -175,10 +175,10 @@ RESOLVFILE

 */


 /* #define HAVE_LUASCRIPT */ 
-/* #define HAVE_DBUS */
-/* #define HAVE_IDN */
-/* #define HAVE_CONNTRACK */
-/* #define HAVE_DNSSEC */
+#define HAVE_DBUS
+#define HAVE_IDN
+#define HAVE_CONNTRACK
+#define HAVE_DNSSEC

并且您使用它make all-i18n作为 make 目标,您将获得一个具有与 stock ubuntu 相同选项的二进制文件:

$ make all-i18n

$ src/dnsmasq -v
Dnsmasq version 2.77test4-8-g4e7694d  Copyright (c) 2000-2016 Simon Kelley
Compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP
conntrack ipset auth DNSSEC loop-detect inotify

如果您想知道 Ubuntu 究竟使用了哪些选项甚至补丁来编译其二进制包,您可以使用它apt-get source dnsmasq来获取同名包的源代码。

相关内容