V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
guanzhangzhang
V2EX  ›  Linux

有大佬试过静态编译 keepalived 吗

  •  
  •   guanzhangzhang ·
    zhangguanzhang · 340 天前 · 3166 次点击
    这是一个创建于 340 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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