centos7|Linux操作系统|编译最新的OpenSSL-3.3,制作rpm安装包

一、

为什么需要编译rpm包

通常,我们需要安装某个软件,尤其是在centos7这样的操作系统,一般是通过yum包管理器来安装软件,yum的作用是管理rpm包的依赖关系,自动的处理rpm包的安装顺序,安装依赖等的相关问题

🆗,那么,这些rpm包都是怎么来的呢?其实很简单,这些软件都是有人自行制作然后上传到官方镜像网站的,当然,制作这些rpm的动力不尽相同,也还有可能是投毒,附加后门。

例如,前一阵子比较出名的那个zip压缩包

相关新闻见下面的链接:

百度安全验证

那么,有一些比较特殊的情况。例如OpenSSL这样的软件,该软件是Linux操作系统内一个非常重要的基础软件,很多命令都是依赖此软件的,因此,对于OpenSSL的升级就需要比较谨慎了,

该软件基本是无法卸载回退的,当然了 ,我在虚拟机上实验过了,卸载后的结果基本是让人无法接受的---重装系统,关键的一点是,epel源什么的里面并不包含Open SSL的高版本rpm包,或者某些情况下,我们需要特定版本的软件,但yum源里面根本没有

因此,OpenSSL的升级一般都是通过源码包编译安装,但此方式有一个比较大的缺点,那就是需要重复安装大量的编译环境,很多台服务器的重复操作非常累人

🆗,我们可以采用在一个服务器上编译OpenSSL,然后将编译后的成果打包成rpm文件,这样,在其它服务器上只需要安装编译产出的这个rpm包就完成了升级

二、

编译生成rpm包

需要三个前置条件,第一是编译环境,第二是源码安装包,第三是SPEC文件,这个SPEC文件是编译打包的规则文件,通常此文件是没有的,需要自己编写,但我们可能会遇到有src字样的rpm包,这样的rpm安装包是自带有SPEC文件的,我们只需要利用rpmbuild文件执行这个SPEC文件就可以了,例如pg的官方仓库:

Index of /pub/repos/yum/srpms/12/redhat/rhel-7.6-x86_64/

可以看到有非常多的src后缀的rpm包,这些rpm包是可以直接安装的,安装完毕后,会在当前目录生成一个rpmbuild目录,此目录里就包含有SPEC文件

安装好rpmbuild这个程序后,就可以执行编译生成rpm包了,根据报错不断的调整编译环境,最终编译成功后,就会得到一个整体架构通用的rpm包了

因此,编译rpm包的学习可以从这些官网内的src包内寻找,同时一些比较偏门的软件也可以找寻src,自己编译

例如,编译php7.2的rpm包,可以从https://repo.webtatic.com/yum/el7/SRPMS/RPMS/ 这个网站下载,找到SPEC文件后,就可以编译调试了:

[root@centos7 SPECS]# rpmbuild -ba php72.spec 
warning: bogus date in %changelog: Mon May 09 2019 Andy Thompson <andy@webtatic.com> - 7.2.18-1
error: Failed build dependencies:bzip2-devel is needed by php72w-7.2.27-1.el7.x86_64curl-devel >= 7.9 is needed by php72w-7.2.27-1.el7.x86_64gmp-devel is needed by php72w-7.2.27-1.el7.x86_64httpd-devel >= 2.0.46-1 is needed by php72w-7.2.27-1.el7.x86_64pam-devel is needed by php72w-7.2.27-1.el7.x86_64sqlite-devel >= 3.6.0 is needed by php72w-7.2.27-1.el7.x86_64libedit-devel is needed by php72w-7.2.27-1.el7.x86_64libtool >= 1.4.3 is needed by php72w-7.2.27-1.el7.x86_64libtool-ltdl-devel is needed by php72w-7.2.27-1.el7.x86_64libargon2-devel is needed by php72w-7.2.27-1.el7.x86_64systemtap-sdt-devel is needed by php72w-7.2.27-1.el7.x86_64readline-devel is needed by php72w-7.2.27-1.el7.x86_64systemd-devel is needed by php72w-7.2.27-1.el7.x86_64libevent-devel >= 1.4.11 is needed by php72w-7.2.27-1.el7.x86_64libc-client-devel is needed by php72w-7.2.27-1.el7.x86_64cyrus-sasl-devel is needed by php72w-7.2.27-1.el7.x86_64openldap-devel is needed by php72w-7.2.27-1.el7.x86_64mysql-devel > 4.1.0 is needed by php72w-7.2.27-1.el7.x86_64postgresql-devel is needed by php72w-7.2.27-1.el7.x86_64unixODBC-devel is needed by php72w-7.2.27-1.el7.x86_64libxml2-devel is needed by php72w-7.2.27-1.el7.x86_64firebird-devel is needed by php72w-7.2.27-1.el7.x86_64net-snmp-devel is needed by php72w-7.2.27-1.el7.x86_64libxslt-devel >= 1.0.18-1 is needed by php72w-7.2.27-1.el7.x86_64libxml2-devel >= 2.4.14-1 is needed by php72w-7.2.27-1.el7.x86_64libjpeg-devel is needed by php72w-7.2.27-1.el7.x86_64libpng-devel is needed by php72w-7.2.27-1.el7.x86_64freetype-devel is needed by php72w-7.2.27-1.el7.x86_64libXpm-devel is needed by php72w-7.2.27-1.el7.x86_64t1lib-devel is needed by php72w-7.2.27-1.el7.x86_64libdb-devel is needed by php72w-7.2.27-1.el7.x86_64tokyocabinet-devel is needed by php72w-7.2.27-1.el7.x86_64libsodium-devel >= 1.0.9 is needed by php72w-7.2.27-1.el7.x86_64libtidy-devel is needed by php72w-7.2.27-1.el7.x86_64freetds-devel is needed by php72w-7.2.27-1.el7.x86_64aspell-devel >= 0.50.0 is needed by php72w-7.2.27-1.el7.x86_64recode-devel is needed by php72w-7.2.27-1.el7.x86_64libicu-devel >= 4.0 is needed by php72w-7.2.27-1.el7.x86_64enchant-devel >= 1.2.4 is needed by php72w-7.2.27-1.el7.x86_64

上面这些依赖安装完毕后,基本就可以编译成功了,编译后的rpm产物在RPMS这个目录下

整理出来的编译php7.2w的环境依赖安装命令如下:

yum install bzip2-devel curl-devel httpd-devel pam-devel gmp-devel sqlite-devel libedit-devel libtool libtool-ltdl-devel libargon2-devel systemtap-sdt-devel readline-devel systemd-devel libevent-devel libc-client-devel  mysql-devel postgresql-devel unixODBC-devel libxml2-devel  firebird-devel net-snmp-devel libxslt-devel libjpeg-devel libpng-devel freetype-devel libXpm-devel t1lib-devel tokyocabinet-devel libsodium-devel libtidy-devel freetds-devel aspell-devel recode-devel libicu-devel enchant-devel -y

非常简单的,就可以编译出来php72w-fpm-7.2.27等等php环境的rpm安装包了,此时将这些rpm包拿到其它服务器上就不需要安装编译环境,直接就可以方便的安装php环境了

[root@centos7 SPECS]# ls ../RPMS/x86_64/
mod_php72w-7.2.27-1.el7.x86_64.rpm        php72w-debuginfo-7.2.27-1.el7.x86_64.rpm  php72w-gd-7.2.27-1.el7.x86_64.rpm         php72w-mbstring-7.2.27-1.el7.x86_64.rpm   php72w-pdo-7.2.27-1.el7.x86_64.rpm        php72w-pspell-7.2.27-1.el7.x86_64.rpm     php72w-tidy-7.2.27-1.el7.x86_64.rpm
php72w-bcmath-7.2.27-1.el7.x86_64.rpm     php72w-devel-7.2.27-1.el7.x86_64.rpm      php72w-imap-7.2.27-1.el7.x86_64.rpm       php72w-mysql-7.2.27-1.el7.x86_64.rpm      php72w-pdo_dblib-7.2.27-1.el7.x86_64.rpm  php72w-recode-7.2.27-1.el7.x86_64.rpm     php72w-xml-7.2.27-1.el7.x86_64.rpm
php72w-cli-7.2.27-1.el7.x86_64.rpm        php72w-embedded-7.2.27-1.el7.x86_64.rpm   php72w-interbase-7.2.27-1.el7.x86_64.rpm  php72w-mysqlnd-7.2.27-1.el7.x86_64.rpm    php72w-pgsql-7.2.27-1.el7.x86_64.rpm      php72w-snmp-7.2.27-1.el7.x86_64.rpm       php72w-xmlrpc-7.2.27-1.el7.x86_64.rpm
php72w-common-7.2.27-1.el7.x86_64.rpm     php72w-enchant-7.2.27-1.el7.x86_64.rpm    php72w-intl-7.2.27-1.el7.x86_64.rpm       php72w-odbc-7.2.27-1.el7.x86_64.rpm       php72w-phpdbg-7.2.27-1.el7.x86_64.rpm     php72w-soap-7.2.27-1.el7.x86_64.rpm       
php72w-dba-7.2.27-1.el7.x86_64.rpm        php72w-fpm-7.2.27-1.el7.x86_64.rpm        php72w-ldap-7.2.27-1.el7.x86_64.rpm       php72w-opcache-7.2.27-1.el7.x86_64.rpm    php72w-process-7.2.27-1.el7.x86_64.rpm    php72w-sodium-7.2.27-1.el7.x86_64.rpm     

🆗,言归正传,那么没有现成的SPEC文件,怎么办呢?当然是自己编写SPEC文件啦

下面就以Open SSL-3.3.0版本的编译rpm包为例,进行一个简单的说明

三、

自定义的SPEC文件编译Open SSL-3.3.0版本的x86_64架构的rpm包

[root@centos10 SPECS]# cat openssl.spec
Name:           openssl
Version:        3.3.0
Release:        1%{?dist}
Summary:        OpenSSL RPMLicense:        OpenSSL
URL:            https://www.openssl.org/
BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Source0:        %{name}-%{version}.tar.gz%description
OpenSSL RPM
Requires: openssl-libs >= 1.1.1%prep
%setup -q%build
./config --prefix=/usr --openssldir=/etc/pki/tls --libdir=lib64 no-shared enable-tls1_3  enable-zlib enable-ec enable-ssl-trace enable-tfo
make%install
make install DESTDIR=$RPM_BUILD_ROOT
#%check
# 如果测试依赖于特定条件或文件,请确保它们已就绪,或者根据情况决定是否跳过测试
#make test || :
# 或者,如果确定测试环境有问题,可以选择注释掉这一段
# %check%files
%defattr(-,root,root,-)
/usr/bin/openssl
/etc/pki/tls/ct_log_list.cnf
/etc/pki/tls/ct_log_list.cnf.dist
/etc/pki/tls/misc/*
/usr/lib64/*
/usr/share/doc/openssl/*
/usr/share/*
/usr/include/*
/etc/pki/tls/openssl.cnf
/etc/pki/tls/openssl.cnf.dist
/usr/bin/c_rehash%changelog
* Sat Sep 04 2021 zsk <zsk.com> - 3.3.0
- Initial build

将源码包放置到/root/rpmbuild/SOURCES目录下就可以了,SPEC放置到/root/rpmbuild/SPECS  然后在此目录下执行编译命令如下:

rpmbuild -ba openssl.spec

参数ba表示在生成rpm包的同时也生成src后缀的rpm包,该包在/root/rpmbuild/SRPMS目录下同时生成

源码包下载地址:链接:https://pan.baidu.com/s/1xBPsePk65MKKciXvYwhO2A?pwd=sshd 
提取码:sshd 

[ 3.3 ] - /source/old/3.3/index.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/45966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

交换机和路由器的工作流程

1、交换机工作流程&#xff1a; 将接口中的电流识别为二进制&#xff0c;并转换成数据帧&#xff0c;交换机会记录学习该数据帧的源MAC地址&#xff0c;并将其端口关联起来记录在MAC地址表中。然后查看MAC地址表来查找目标MAC地址&#xff0c;会有一下一些情况&#xff1a; MA…

通过Bugly上报的日志查找崩溃闪退原因

第一步&#xff0c;解析堆栈信息 在bugly上收集到的信息是这样的 0x000000010542e46c 0x0000000104db4000 6792300 OS应用发生崩溃时&#xff0c;系统会生成一份崩溃日志&#xff0c;这份日志中包含了崩溃时的堆栈信息&#xff0c;但这些堆栈信息并非直接指向源代码&#x…

【漏洞复现】某赛通 电子文档安全管理系统 多个接口存在远程命令执行漏洞

免责声明&#xff1a; 本文内容旨在提供有关特定漏洞或安全漏洞的信息&#xff0c;以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步&#xff0c;并非出于任何恶意目的。阅读者应该明白&#xff0c;在利用本文提到的漏洞信息或进行相关测…

【RAG 实践】LlamaIndex 快速实现一个基于 OpenAI 的 RAG

这是 LlamaIndex 官方 Starter Tutorial 中 demo&#xff0c;用很少的代码来使用 OpenAI 快速实现出一个 RAG。 Ref: Starter Tutorial | LlamaIndex 代码&#xff1a;llamindex-rag-demo | Kaggle 1&#xff09;设置 OpenAI Token 这里使用国内的 OpenAI 中转 API token&…

【Python】数据分析-Matplotlib绘图

数据分析 Jupyter Notebook Jupyter Notebook: 一款用于编程、文档、笔记和展示的软件。 启动命令&#xff1a; jupyter notebookMatplotlib 设置中文格式&#xff1a;plt.rcParams[font.sans-serif] [KaiTi] # 查看本地所有字体 import matplotlib.font_manager a sorted…

802.11ax RU - 传输的最小单元

子载波 无线信号是加载在某个固定频率上进行传输的&#xff0c;这个频率被称为载波。802.11标准中&#xff0c;对传输频率有更新的划分&#xff0c;而这些划分的频率被称为子载波。Wi-Fi 6中&#xff0c;以20Mhz信道为例&#xff0c;20Mhz信道被划分成256个子载波&#xff0c;…

QML 鼠标和键盘事件

学习目标&#xff1a;Qml 鼠标和键盘事件 学习内容 1、QML 鼠标事件处理QML 直接提供 MouseArea 来捕获鼠标事件&#xff0c;该操作必须配合Rectangle 获取指定区域内的鼠标事件, 2、QML 键盘事件处理&#xff0c;并且获取对OML直接通过键盘事件 Keys 监控键盘任意按键应的消…

基于3D感知的端到端具身操作论文导读

DexIL&#xff1a;面向双臂灵巧手柔性操作的端到端具身执行模型 模型架构 输入&#xff1a;   观测Ot&#xff1a; RGB点云&#xff0c;使用PointNet进行编码;   状态St&#xff1a; 双臂末端7x2Dof位姿16x2灵巧手关节位置&#xff0c;只进行归一化&#xff0c;无编码&am…

Linux Win 10 Windows上安装Ollama部署大模型qwen2 7b/15配置启动 LangChain-ChatChat 0.2.10进行对话

Win 10 Window安装Ollama部署qwen2 7b LangChain-ChatChat 环境说明 Win 10 Python 3.11.9 LangChain-ChatChat 0.20 Ollama 0.2.10 Qwen2 1.5b/7b Windows 安装Ollama 下载并安装Windows版Ollama https://ollama.com/download#/ 下载大模型qwen2:1.5b或者qwen2:7b 在命令…

从实时监控到风险智能预警:EasyCVR视频AI智能监控技术在工业制造中的应用

随着科技的不断进步和工业制造领域的持续发展&#xff0c;传统的生产管理方式正逐渐转型&#xff0c;迈向更加智能、高效和安全的新阶段。在这个变革过程中&#xff0c;视频智能监控技术凭借其独特的优势&#xff0c;成为工业制造领域的管理新引擎&#xff0c;推动着从“制造”…

【YOLOv8系列】(三)YOLOv8应用实践:从识别到分类再到分割的全方位视觉解决方案

随着深度学习技术的不断演进&#xff0c;目标检测领域的明星模型——YOLO系列&#xff0c;已经发展到了第八代&#xff0c;即YOLOv8。这一版本不仅继承了前辈们快速与准确的特点&#xff0c;还实现了功能上的巨大飞跃&#xff0c;成为了一个全能型的视觉AI工具箱&#xff0c;支…

maven的settings.xml无法正确配置本地仓库路径

因为以前使用过新版的maven&#xff0c;现在要换个版本使用。 在配置新的本地仓库路径的时候突然发现居然idea居然识别不了我settings.xml里面配置的路径。 我很是震惊&#xff0c;明明之前一直都是这样子配置的。怎么突然间不行了。当我冥思苦想&#xff0c;在网上搜寻资料无果…

WPF学习(5) -- WPF绑定

一、双向绑定 1.代码示例 <Window x:Class"学习.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expres…

[论文阅读]MaIL: Improving Imitation Learning with Mamba

Abstract 这项工作介绍了mamba模仿学习&#xff08;mail&#xff09;&#xff0c;这是一种新颖的模仿学习&#xff08;il&#xff09;架构&#xff0c;为最先进的&#xff08;sota&#xff09;变换器策略提供了一种计算高效的替代方案。基于变压器的策略由于能够处理具有固有非…

阿里云产品流转

本文主要记述如何使用阿里云对数据进行流转&#xff0c;这里只是以topic流转&#xff08;再发布&#xff09;为例进行说明&#xff0c;可能还会有其他类型的流转&#xff0c;不同服务器的流转也可能会不一样&#xff0c;但应该大致相同。 1 创建设备 具体细节可看&#xff1a;…

Spring源码中的模板方法模式

1. 什么是模板方法模式 模板方法模式&#xff08;Template Method Pattern&#xff09;是一种行为设计模式&#xff0c;它在操作中定义算法的框架&#xff0c;将一些步骤推迟到子类中。模板方法让子类在不改变算法结构的情况下重新定义算法的某些步骤。 模板方法模式的定义&…

驱动LSM6DS3TR-C实现高效运动检测与数据采集(8)----中断获取FIFO数据并应用MotionFX库解析空间坐标

驱动LSM6DS3TR-C实现高效运动检测与数据采集.8--中断获取FIFO数据并应用MotionFX库解析空间坐标 概述视频教学样品申请源码下载开启LED开启INT中断参考驱动程序中断读取传感器数据主程序演示 概述 本文将探讨如何使用中断机制获取FIFO数据并应用MotionFX库解析空间坐标。Motio…

在 PostgreSQL 里如何处理数据的索引碎片整理的自动化?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 PostgreSQL 中数据索引碎片整理的自动化处理 PostgreSQL 中数据索引碎片整理的自动化处理 在数据库管…

接口基础知识2:http通信的组成

课程大纲 一、http协议 HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;是互联网中被使用最广的一种网络协议&#xff0c;用于客户端与服务器之间的通信。 HTTP协议定义了一系列的请求方法&#xff0c;例如 GET、POST、PUT、DELETE 等&…

特惠电影票api安全性如何评测

评测特惠电影票API的安全性是确保用户数据安全和系统稳定运行的关键步骤。以下是评测特惠电影票API安全性的一些方法和步骤&#xff1a; ### 1. **认证和授权** - **JWT认证**&#xff1a;使用JSON Web Token (JWT) 进行用户身份验证和授权&#xff0c;确保只有合法用户可以访…