当前位置: 首页 > 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的逻辑控制和方法的使用介绍
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【刷算法】求1+2+3+...+n
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • Angular 2 DI - IoC DI - 1
  • docker-consul
  • javascript面向对象之创建对象
  • java正则表式的使用
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 阿里云Kubernetes容器服务上体验Knative
  • 浮现式设计
  • 近期前端发展计划
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 浅谈web中前端模板引擎的使用
  • 如何解决微信端直接跳WAP端
  • 如何进阶一名有竞争力的程序员?
  • 设计模式(12)迭代器模式(讲解+应用)
  • 微信小程序开发问题汇总
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 云大使推广中的常见热门问题
  • #stm32驱动外设模块总结w5500模块
  • #数学建模# 线性规划问题的Matlab求解
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (2)STM32单片机上位机
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (黑马C++)L06 重载与继承
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)JAVA中的堆栈
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • . Flume面试题
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET 分布式技术比较
  • .NET/C# 使用反射注册事件
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .sys文件乱码_python vscode输出乱码