Distributions
› Ubuntu
› Fedora
› CentOS
中文资源站
› 网易开源镜像站
guanzhangzhang
V2EX  ›  Linux

有大佬试过静态编译 keepalived 吗

  •  
  •   guanzhangzhang ·
    zhangguanzhang · Feb 23, 2022 · 5744 views
    This topic created in 1725 days ago, the information mentioned may be changed or developed.

    较多的 os 上,完全内网,目前是 docker 起的,但是这样机器宕机启动的时候,keepalived 容器是在 docker daemon 后起来的,所以目前打算是静态编译 keepalived ,尝试了下都不行。 尝试的步骤见 issue https://github.com/acassen/keepalived/issues/2107

    Supplement 1  ·  Feb 23, 2022
    1. 不管适不适合 docker ,我现在要解决的是容灾的时候机器开机,keepalived 是容器,在 docker daemon 起来后起来的,你说不适合 docker ,那不能提供静态编译 keepalived 的话,就不要说不适合 docker 。我要静态编译自然是很多 os 上去直接部署
    2. 说我没搞懂依赖的,麻烦先去看看,issue
    3. 如果没搞过就不要回复没用的评论,我不想浪费双方的时间。
    Supplement 2  ·  Feb 23, 2022
    有几个人不看 我贴的 issue 连接里,我已经按照官方文档尝过的很几个步骤了。
    无用的和骂人的回复我已经删掉了,对线的话请到其他帖子里
    Supplement 3  ·  Feb 24, 2022
    截止 2022/02/24 11:38 ,issue 里有个大佬 hack 编译成功后,开发者已经根据他的提醒发现了 openssl 的一个 link 问题,并提交更改了 configure 后,我编译了下成功了。后续有空我跟进测试下看看使用上会有问题没
    Supplement 4  ·  Feb 24, 2022
    33 replies  •  2022-02-24 14:56:22 +08:00
    julyclyde
    julyclyde
    Feb 23, 2022
    1
    这东西就不适合放 docker 里
    hu8245
    hu8245
    Feb 23, 2022
    2
    你不先把你的依赖关系搞定再提问吗?
    guanzhangzhang
    guanzhangzhang
    OP
    Feb 23, 2022
    3
    来个搞过的大佬回复下,不像回复没用的评论了
    julyclyde
    julyclyde
    Feb 23, 2022❤️1
    4
    看了附言,lzsb ,鉴定完毕
    Badupp
    Badupp
    Feb 23, 2022
    5
    @julyclyde 很难不支持
    guanzhangzhang
    guanzhangzhang
    OP
    Feb 23, 2022
    6
    几个弱智别回复了
    defunct9
    defunct9
    Feb 23, 2022
    7
    哦,用 ucarp 吧。看看你的编译报错,需要一堆库。也许 ucarp 需要的库少,适宜静态编译。
    guanzhangzhang
    guanzhangzhang
    OP
    Feb 23, 2022
    8
    @defunct9 大佬,你说的这个我搜了下不符合我的使用场景。不好换的,目前我是使用 lvs ,已经生产上运行很久了,现在是解决容灾拉低故障时间,编译这个已经看了官方的 INSTALL 的那个文档,尝试过在不同阶段传入 CFLAGS 和 LDFLAGS 都报错,感觉官方可能某个地方这俩变量传入是覆盖而不是拼接,所以 lib 找不到。
    defunct9
    defunct9
    Feb 23, 2022
    9
    上 F5 、BigIP
    tomychen
    tomychen
    Feb 23, 2022
    10
    keepalived 要静态编译首先:
    1. 你的依赖库得静编,包括 openssl kmod 等。
    2. 依赖库静编了,也不代表一定能编过编译,因为依赖库静编的过程,有可能是有动、静交叉
    3. 以上条件全符合了,也不代表就一定能在不同版本的系统上跑。因为还有个变态的 glibc 。
    F281M6Dh8DXpD1g2
    F281M6Dh8DXpD1g2
    Feb 23, 2022
    11
    楼主这问问题的态度真是.....
    不能静态编译,我搞过,你信么....
    a663
    a663
    Feb 23, 2022
    12
    张馆长?
    a663
    a663
    Feb 23, 2022
    13
    @julyclyde 人家来讨论技术的,你上来就 SB ,这里只有你 SB
    corvofeng
    corvofeng
    Feb 23, 2022
    14
    我之前用 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/
    guanzhangzhang
    guanzhangzhang
    OP
    Feb 23, 2022
    15
    @defunct9 完全内网。toB 的,f5 不现实,很多客户是只提供机器,我明天看看等 issue 看看开发者的回复,下午和开发者沟通后 configure 过了,但是 make 报错
    guanzhangzhang
    guanzhangzhang
    OP
    Feb 23, 2022
    16
    @liprais 我下午试过很多不同 os 里,以及 issue 的作者回复,目前过了 configure ,make 有问题,等晚上时区后看看其他开发者有见解没😁
    guanzhangzhang
    guanzhangzhang
    OP
    Feb 23, 2022
    17
    @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 里开发者回复吧
    yinyu
    yinyu
    Feb 23, 2022
    18
    猜猜我是谁
    szpunk
    szpunk
    Feb 24, 2022
    19
    @guanzhangzhang #17 issue 里面回答了,改下 -lcrypto -lssl 顺序,把 -lssl 放前面,就只有一个报错了,这个报错我不知道是不是 OpenSSL 3.0 改了啥还是怎么,反正硬改那个报错的 check_ssl.c 让它通过编译,能不能用你自己测试了。
    corvofeng
    corvofeng
    Feb 24, 2022 via Android
    20
    @guanzhangzhang 我看 issue 里面普通的动态编译也没成功。应该想办法先编译成功,再加参数来做静态链接。
    zhoudaiyu
    zhoudaiyu
    Feb 24, 2022 via iPhone
    21
    @defunct9 还是开个 SSH 让我上去瞅瞅吧 🐶
    defunct9
    defunct9
    Feb 24, 2022
    22
    似乎 issue 解决了这个问题。但是能不能用就得你来测试并给出答案了。
    defunct9
    defunct9
    Feb 24, 2022
    23
    @zhoudaiyu 这个就不用我 ssh 了,因为提问的也是个运维高手。看 issue 就能看出来
    zhoudaiyu
    zhoudaiyu
    Feb 24, 2022 via iPhone
    24
    @defunct9 同行?你也是运维吗?
    CnpPt
    CnpPt
    Feb 24, 2022
    25
    我之前编译了 keepalived 单二进制随处用这算是静态编译吗
    defunct9
    defunct9
    Feb 24, 2022❤️1
    26
    @zhoudaiyu 握手,都是运维
    guanzhangzhang
    guanzhangzhang
    OP
    Feb 24, 2022
    27
    @corvofeng 老哥你起好早刷论坛,不使用 CCFLAG 和 LDFALGS 那俩变量动态编译是能成功的(这样就是跟随官方的教程编译安装的)。issue 里的步骤我今天试下
    guanzhangzhang
    guanzhangzhang
    OP
    Feb 24, 2022
    28
    @CnpPt 可以 ldd `which keepalived`看下是不是显示 not a dynamic link 就可以看出来是不是静态编译,我们客户是不同的政企,也就是客户是完全内网也可能,包管理用不了,所以安装 keepalived 很难,从 docker 挪出来就要考虑静态编译了
    Kinnice
    Kinnice
    Feb 24, 2022
    29
    @guanzhangzhang 如果静态编译如果实在不好解决的话,可以尝试把各个 os 的包以及可能用到的依赖下载下来,然后编写脚本判断安装 [keepalived.tar install.sh],这是能预期的解决方案。
    corvofeng
    corvofeng
    Feb 24, 2022
    30
    @guanzhangzhang 实在编译麻烦可以把.so 文件一起打包拷贝过去, 加个 LD_PRELOAD 环境变量到对应的目录就可以, 需要静态编译的场景用 go 会好一点
    guanzhangzhang
    guanzhangzhang
    OP
    Feb 24, 2022
    31
    @corvofeng 我是在纯服务进程,然后利用 iptables +ipset+ keepalived 的 lvs 把 k8s 的 ipvs-svc https://zhangguanzhang.github.io/2021/09/28/ipvs-svc/ 扣下来上生产的,不是所有环境都需要 k8s ,go 的话可以从 kube-proxy 扣代码实现个,但是后续还要评估和增加成本
    guanzhangzhang
    guanzhangzhang
    OP
    Feb 24, 2022
    32
    @Kinnice 开发者已经更新 keepalived 的 configure 了,我试了下能静态编译了,下午我找个实体的 os 测下我用的配置功能能正常工作不
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1081 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 23:34 · PVG 07:34 · LAX 15:34 · JFK 18:34
    ♥ Do have faith in what you're doing.