为什么要自己编译caddy?
不是可以自行下载,包括各种平台各种插件,一有尽有,很方便呀?
何必自己编译,哪怕大家都知道 go 编译或是交叉编译都超级方便,可以但是没必要。
这是因为我需要使用的 dnspod 插件出了点问题
acme: error presenting token: API call failed: json: cannot unmarshal number into Go struct field DomainInfo.info.share_total of type string
还没来得及修复,只有自己动手编译了,还好这个问题很好修复
主要是 dnspod api 返回的 json 中某个字段的类型发生了变化,改过来就好了。
开始编译caddy
不复杂,参照 build 步骤即可。
但是我们的问题是,需要先修改一点点源代码的内容再来 build。
这里使用了go mod
,我对 go 的这个包管理方式是一无所知,无从下手。
先是go get
遇上了麻烦,被墙了。还好有本地的 http 代理,添加环境变量搞定。
export http_proxy=http://127.0.0.1:8080
export https_proxy=https://127.0.0.1:880
可是关键在于我们需要修改某个 package 的内容再 install,我并不知道这其中的机制到底是什么,但是我知道 get 下来的内容保存在了$GOPATH/pkg/mod
的文件夹下。于是我就直接进入这个文件夹下找到我需要修改的 package,完成我的修改然后再go install
。
然后 copy 到我的树莓派上运行!
OK!It’works!!
撒花🎉结束!
注意,交叉编译给我的树莓派使用需要添加以下的环境变量
GOOS=linux GOARCH=arm GOARM=7 go install
https://golang.org/doc/install/source#environment
uname -a
参看设备信息来选择GOARM
https://github.com/golang/go/wiki/GoArm#supported-architectures