当前位置: 首页 > 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的逻辑控制和方法的使用介绍
  • JavaScript-如何实现克隆(clone)函数
  • Android开源项目规范总结
  • dva中组件的懒加载
  • eclipse(luna)创建web工程
  • Git的一些常用操作
  • idea + plantuml 画流程图
  • iOS 系统授权开发
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • IP路由与转发
  • Iterator 和 for...of 循环
  • nodejs:开发并发布一个nodejs包
  • NSTimer学习笔记
  • Promise面试题,控制异步流程
  • Python_网络编程
  • tensorflow学习笔记3——MNIST应用篇
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 分类模型——Logistics Regression
  • 计算机常识 - 收藏集 - 掘金
  • 入手阿里云新服务器的部署NODE
  • 使用Gradle第一次构建Java程序
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 怎么将电脑中的声音录制成WAV格式
  • k8s使用glusterfs实现动态持久化存储
  • 积累各种好的链接
  • ​linux启动进程的方式
  • ​卜东波研究员:高观点下的少儿计算思维
  • #07【面试问题整理】嵌入式软件工程师
  • #14vue3生成表单并跳转到外部地址的方式
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • #define用法
  • #每天一道面试题# 什么是MySQL的回表查询
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (07)Hive——窗口函数详解
  • (145)光线追踪距离场柔和阴影
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (Ruby)Ubuntu12.04安装Rails环境