当前位置: 首页 > news >正文

keepalived交叉编译

前言

Keepalived可以实现对服务器的健康检查,当主服务器出现故障时,自动将服务切换到备份服务器上,确保服务的连续性,避免单点故障。它还可以管理一个虚拟 IP 地址,在主备服务器之间进行灵活切换,对外提供统一的访问入口,使得客户端无需感知服务器的具体切换操作。
当我们在嵌入式边缘设备上部署服务时,为了保障服务稳定性,使用keepalived时很有必要的。

准备工作

  • 根据芯片平台确定交叉编译工具链。
    此处以在飞腾E2000上移植keepalived命令为例,采用的工具链为:aarch64-linux-gnu-xxx
    安装命令:sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
  • 下载keepalived源码及其依赖的三方库源码。
    keepalived下载地址:keepalived-2.2.8.tar.gz
    openssl下载地址: openssl-1.1.1u.tar.gz

交叉编译openssl

解压文件

tar axvf  openssl-1.1.1u.tar.gz
cd openssl-1.1.1u

配置生成Makefile

./config no-asm shared no-async  --prefix=$(pwd)/install --cross-compile-prefix=aarch64-linux-gnu-

修改Makefile

输入如下命令。删除Makefile中的交叉编译工具链不支持的-m64参数。

sed -i '/-m64/d' Makefile

也可打开文件手动删除:
在这里插入图片描述

编译源码

make && make install

编译完成后,在当前openssl-1.1.1u目录下会生成一个install目录,目录下即可获取到所有的编译产物,主要检查生成的动态库文件.so是否正确,后续keepalived交叉编译时需要用到。
在这里插入图片描述

交叉编译keepalived

配置生成Makefile

./configure --host=aarch64-linux-gnu  --prefix=$(pwd)/install CC=aarch64-linux-gnu-gcc CFLAGS=-I/home/fangye/build_keepalived/openssl-1.1.1u/install/include LDFLAGS=-L/home/fangye/build_keepalived/openssl-1.1.1u/install/lib --disable-fwmark

参数含义:
--host= 表示目标平台的名称
--prefix= 表示编译产物安装目标路径
CFLAGS 表示gcc编译参数,用于指定openssl头文件搜索路径
LDFLAGS 表示gcc链接参数,用于指定openssl库文件搜索路径
--disable-fwmark 表示禁用iptables规则,可防止VIP无法访问

编译源码

make && make install

安装的时候会报错,是因为要将keepalived.service文件安装到/lib/systemd/system目录下没有权限。我们交叉编译时一般用不到,可以不用管。如果需要可自行在keepalived目录下找到相应文件。
在这里插入图片描述
编译生成的产物如下:
在这里插入图片描述
至此,交叉编译完成。将之前openssl的库文件、keepalived可执行文件及其keepalived配置文件拷贝至arm开发板相应目录下,即可完成keepalived移植。

相关文章:

  • yarn dev启动项目时遇到的问题
  • 【实战JVM】-基础篇-02-类的声明周期-加载器
  • 春秋CVE-2022-23906
  • ❤职场小心得❤
  • 上交提出TrustGAIN,提出6G网络中可信AIGC新模式!
  • php质量工具系列之paslm
  • 工博科技联手伯尼纳,共谋食品包装外贸行业新市场,助力全球市场拓展!
  • 质量源于设计:QbD培训引领企业产品质量飞跃!
  • 数据库编程
  • 周报 | 24.5.20-24.5.26文章汇总
  • Python函数式编程入门窥探
  • 高弹性架构的微服务设计模式
  • 什么样的跨网文件交换系统适合车企行业?
  • 【Javascript】Promise形象比喻
  • Java的逻辑控制和方法的使用介绍
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • hadoop集群管理系统搭建规划说明
  • input实现文字超出省略号功能
  • JavaScript的使用你知道几种?(上)
  • js如何打印object对象
  • k8s 面向应用开发者的基础命令
  • maya建模与骨骼动画快速实现人工鱼
  • PAT A1120
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • session共享问题解决方案
  • spark本地环境的搭建到运行第一个spark程序
  • 大主子表关联的性能优化方法
  • 分类模型——Logistics Regression
  • 力扣(LeetCode)21
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 七牛云假注销小指南
  • 世界上最简单的无等待算法(getAndIncrement)
  • 微信支付JSAPI,实测!终极方案
  • HanLP分词命名实体提取详解
  • NLPIR智能语义技术让大数据挖掘更简单
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • #ifdef 的技巧用法
  • #laravel 通过手动安装依赖PHPExcel#
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #QT(TCP网络编程-服务端)
  • #QT项目实战(天气预报)
  • $L^p$ 调和函数恒为零
  • (10)STL算法之搜索(二) 二分查找
  • (2015)JS ES6 必知的十个 特性
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (理论篇)httpmoudle和httphandler一览
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (三)终结任务
  • (十)c52学习之旅-定时器实验
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)ORM
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)我也是一只IT小小鸟
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网