较多的 os 上,完全内网,目前是 docker 起的,但是这样机器宕机启动的时候,keepalived 容器是在 docker daemon 后起来的,所以目前打算是静态编译 keepalived ,尝试了下都不行。 尝试的步骤见 issue https://github.com/acassen/keepalived/issues/2107
1
julyclyde 2022-02-23 13:20:33 +08:00
这东西就不适合放 docker 里
|
2
hu8245 2022-02-23 13:22:45 +08:00
你不先把你的依赖关系搞定再提问吗?
|
3
guanzhangzhang OP 来个搞过的大佬回复下,不像回复没用的评论了
|
4
julyclyde 2022-02-23 15:24:12 +08:00 1
看了附言,lzsb ,鉴定完毕
|
6
guanzhangzhang OP 几个弱智别回复了
|
7
defunct9 2022-02-23 15:36:05 +08:00
哦,用 ucarp 吧。看看你的编译报错,需要一堆库。也许 ucarp 需要的库少,适宜静态编译。
|
8
guanzhangzhang OP @defunct9 大佬,你说的这个我搜了下不符合我的使用场景。不好换的,目前我是使用 lvs ,已经生产上运行很久了,现在是解决容灾拉低故障时间,编译这个已经看了官方的 INSTALL 的那个文档,尝试过在不同阶段传入 CFLAGS 和 LDFLAGS 都报错,感觉官方可能某个地方这俩变量传入是覆盖而不是拼接,所以 lib 找不到。
|
9
defunct9 2022-02-23 16:13:13 +08:00
上 F5 、BigIP
|
10
tomychen 2022-02-23 16:48:04 +08:00
keepalived 要静态编译首先:
1. 你的依赖库得静编,包括 openssl kmod 等。 2. 依赖库静编了,也不代表一定能编过编译,因为依赖库静编的过程,有可能是有动、静交叉 3. 以上条件全符合了,也不代表就一定能在不同版本的系统上跑。因为还有个变态的 glibc 。 |
11
liprais 2022-02-23 16:50:16 +08:00
楼主这问问题的态度真是.....
不能静态编译,我搞过,你信么.... |
12
a663 2022-02-23 17:10:07 +08:00
张馆长?
|
14
corvofeng 2022-02-23 17:16:37 +08:00
我之前用 docker 编译过旧版本的 puppet, 可以考虑在 Docker 里面静态编译, 然后拷贝二进制文件来用
https://corvo.myseu.cn/2019/11/12/2019-11-12-Docker%E7%B3%BB%E5%88%97(%E5%85%AB)-Docker%E5%A5%87%E7%94%A8-%E7%BC%96%E8%AF%91%E6%97%A7%E7%89%88%E8%BD%AF%E4%BB%B6/ |
15
guanzhangzhang OP @defunct9 完全内网。toB 的,f5 不现实,很多客户是只提供机器,我明天看看等 issue 看看开发者的回复,下午和开发者沟通后 configure 过了,但是 make 报错
|
16
guanzhangzhang OP @liprais 我下午试过很多不同 os 里,以及 issue 的作者回复,目前过了 configure ,make 有问题,等晚上时区后看看其他开发者有见解没😁
|
17
guanzhangzhang OP @corvofeng 静态编译是指编译完成后 file 它显示 static link ,以及 ldd 它显示 not a dynamic link 。也就是不依赖 so ,我们客户是很多不同的 os 都有,而且完全内网都有可能,也就是说包管理被我们默认当成无法使用,所以包管理安装 keepalived 不现实,包括 docker 我们现阶段是用官方的 static-bin 那个压缩包安装的。目前我静态编译过 nginx ,fio ,keepalived 这个我下午尝试了下很难。
你文章这个我看了下实际是动态编译的,恰好宿主机也有这些 so ,静态编译一般是 configure 脚本提供选项 --with-cc-opts 之类的,或者传值 CFLAGS LDFLAGS 之类的,以及编译阶段的支持,我还是等 issue 里开发者回复吧 |
18
yinyu 2022-02-23 23:55:04 +08:00
猜猜我是谁
|
19
szpunk 2022-02-24 01:40:24 +08:00
@guanzhangzhang #17 issue 里面回答了,改下 -lcrypto -lssl 顺序,把 -lssl 放前面,就只有一个报错了,这个报错我不知道是不是 OpenSSL 3.0 改了啥还是怎么,反正硬改那个报错的 check_ssl.c 让它通过编译,能不能用你自己测试了。
|
20
corvofeng 2022-02-24 07:52:47 +08:00 via Android
@guanzhangzhang 我看 issue 里面普通的动态编译也没成功。应该想办法先编译成功,再加参数来做静态链接。
|
22
defunct9 2022-02-24 08:52:22 +08:00
似乎 issue 解决了这个问题。但是能不能用就得你来测试并给出答案了。
|
25
CnpPt 2022-02-24 08:55:14 +08:00
我之前编译了 keepalived 单二进制随处用这算是静态编译吗
|
27
guanzhangzhang OP @corvofeng 老哥你起好早刷论坛,不使用 CCFLAG 和 LDFALGS 那俩变量动态编译是能成功的(这样就是跟随官方的教程编译安装的)。issue 里的步骤我今天试下
|
28
guanzhangzhang OP @CnpPt 可以 ldd `which keepalived`看下是不是显示 not a dynamic link 就可以看出来是不是静态编译,我们客户是不同的政企,也就是客户是完全内网也可能,包管理用不了,所以安装 keepalived 很难,从 docker 挪出来就要考虑静态编译了
|
29
Kinnice 2022-02-24 09:32:11 +08:00
@guanzhangzhang 如果静态编译如果实在不好解决的话,可以尝试把各个 os 的包以及可能用到的依赖下载下来,然后编写脚本判断安装 [keepalived.tar install.sh],这是能预期的解决方案。
|
30
corvofeng 2022-02-24 10:03:52 +08:00
@guanzhangzhang 实在编译麻烦可以把.so 文件一起打包拷贝过去, 加个 LD_PRELOAD 环境变量到对应的目录就可以, 需要静态编译的场景用 go 会好一点
|
31
guanzhangzhang OP @corvofeng 我是在纯服务进程,然后利用 iptables +ipset+ keepalived 的 lvs 把 k8s 的 ipvs-svc https://zhangguanzhang.github.io/2021/09/28/ipvs-svc/ 扣下来上生产的,不是所有环境都需要 k8s ,go 的话可以从 kube-proxy 扣代码实现个,但是后续还要评估和增加成本
|
32
guanzhangzhang OP @Kinnice 开发者已经更新 keepalived 的 configure 了,我试了下能静态编译了,下午我找个实体的 os 测下我用的配置功能能正常工作不
|
33
CnpPt 2022-02-24 14:56:22 +08:00
|