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

有大佬试过静态编译 keepalived 吗

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