Nadeshiko Manju
Nadeshiko Manju
> 但是只有从 0.8.1 开始才会出问题,会是哪个 commit 引入的问题呢? 哦?那我来 bisect 一下
> > > 我的建议是这个问题不太好解决,因为需要要求客户锁依赖。最好的方式是通过容器运行,保证二进制的一致性 > > > > > > 但是只有从 0.8.1 开始才会出问题,会是哪个 commit 引入的问题呢? > > 我还没有重现,我的猜测应该是启用CGO引入libpcap类库后,编译环境的C类库跟运行的环境有差异。 > > 编译构建的环境,期望是可以兼容更多内核的。 如果问题是这里的话,那确实不太好解决。 Bisect 下来是 https://github.com/gojue/ecapture/commit/938fcffb95e23015af8643ae046c0e912de0a438 这个 commit 引入的破坏 11a498a3835969de86a8002ab2f70b31b217b034 这个则没问题...
https://github.com/gojue/ecapture/commit/938fcffb95e23015af8643ae046c0e912de0a438#diff-eb154bbd601602eeae895e7af6a12b88cbdb7d585a2d32216c398f68cabcdff5R188-R197 目前二分代码测出来是和 HTTPServer 有关,我猜是两个 goroutine 同时初始化 CGO 然后 G 了,我看来看下汇编看看
查出来问题了。。和 glibc 版本有关 在 #541 中我们引入了 Gin 来作为 HTTP Server 支持 Conf 通过 HTTP 变更。https://github.com/gojue/ecapture/commit/938fcffb95e23015af8643ae046c0e912de0a438#diff-eb154bbd601602eeae895e7af6a12b88cbdb7d585a2d32216c398f68cabcdff5R189-R196 而我们默认给的地址是 `localhost` ,这就会触发 net/http Dial 时的 DNSReslove ,同时我们在编译参数中使用了 -linkmode=external -extldflags -static 这会导致我们依赖的 `getaddrinfo` 函数会绑定特定的 glibc...
以及构建时使用 `-tags 'linux netgo'` 也能处理,但是不确定是否有其余副作用 @cfc4n on your call(XD
> 理论来说,也会出现异常崩溃。只是当前并没有触发libpcap内涉及DNS解析的逻辑。 如果想完全避免这类问题,要么就是跟对不同libc版本进行构建,要么就是弃用libpcap的`bpf filter`特性。 是的, 这是一个隐藏但是没炸的雷,我的建议是我们彻底放弃二进制的分发,统一交给容器处理
> 不要禁用localhost的支持,禁用后,无法用一套配置同时运行在纯v4和纯v6的环境了,必须区分出`127.0.0.1` 和 `::1` 了,很不方便 确实,所以还是老老实实 netgo 吧
> 我们可以尝试使用 musl 作为静态链接时的 libc 吗? MUSL 就算了。。。坑一抹多。。。

Seems we need rework the whole login and auth part = =