从源码构建coredns, 添加redis插件
更新日期:
在项目中使用了coredns
来作为简单的DNS服务器, 已经能通过file
插件在Corefile
中来自定义子域名的A地址记录。最近需要实现程序新增DNS记录的功能,于是乎查找coredns plugin列表,选择redis
插件 。但是, redis
为非coredns自带插件, 需要重新编译coredns。
编译 coredns
先从github下载代码
|
|
编辑coredns代码目录下plugin.cfg
文件,添加插件
|
|
注意: 插件的添加与调用顺序有关,通过测试发现redis插件一直不生效,调整至file
插件之前就起作用了。
编译过程使用的命令如下,需要从github下载一列依赖的包
|
|
在编译过程中遇到报错note: module requires Go 1.19
, 原因是golang版本太低,需要升级golang版本;另外是在windows系统下编译linux使用的包, 需要指定交叉编译环境变量。于是最终使用的命令如下:
|
|
参考:
- coredns github:https://github.com/coredns/coredns
- coredns 编译时启用插件 https://coredns.io/2017/07/25/compile-time-enabling-or-disabling-plugins/
- redis 插件: https://coredns.io/explugins/redis/
升级golang
golang是支持多个版本同时存在, 使用时程序命令后会多出版本号。 安装golang程序,如同安装golang的库一样。
|
|
参考:
- https://go.dev/doc/manage-install
- https://go.dev/dl/
- https://www.cnblogs.com/pebblecome/p/14815365.html
交叉编译与优化
- windows下交叉编译linux下使用的程序,设置环境变量:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64
. 另外GOOS
可根据目标执行平台,指定为windows
或者darwin
。 - 优化二进制输出文件大小,可以在
build
后添加参数-ldflags="-s -w"
。通过命令CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go1.21.5 build -ldflags="-s -w"
重新编译,输出的coredns程序从开始的80M
,减小为50M
,效果还是很明显的。