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

news2024/9/24 1:15:12

一、

为什么需要编译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_64
	curl-devel >= 7.9 is needed by php72w-7.2.27-1.el7.x86_64
	gmp-devel is needed by php72w-7.2.27-1.el7.x86_64
	httpd-devel >= 2.0.46-1 is needed by php72w-7.2.27-1.el7.x86_64
	pam-devel is needed by php72w-7.2.27-1.el7.x86_64
	sqlite-devel >= 3.6.0 is needed by php72w-7.2.27-1.el7.x86_64
	libedit-devel is needed by php72w-7.2.27-1.el7.x86_64
	libtool >= 1.4.3 is needed by php72w-7.2.27-1.el7.x86_64
	libtool-ltdl-devel is needed by php72w-7.2.27-1.el7.x86_64
	libargon2-devel is needed by php72w-7.2.27-1.el7.x86_64
	systemtap-sdt-devel is needed by php72w-7.2.27-1.el7.x86_64
	readline-devel is needed by php72w-7.2.27-1.el7.x86_64
	systemd-devel is needed by php72w-7.2.27-1.el7.x86_64
	libevent-devel >= 1.4.11 is needed by php72w-7.2.27-1.el7.x86_64
	libc-client-devel is needed by php72w-7.2.27-1.el7.x86_64
	cyrus-sasl-devel is needed by php72w-7.2.27-1.el7.x86_64
	openldap-devel is needed by php72w-7.2.27-1.el7.x86_64
	mysql-devel > 4.1.0 is needed by php72w-7.2.27-1.el7.x86_64
	postgresql-devel is needed by php72w-7.2.27-1.el7.x86_64
	unixODBC-devel is needed by php72w-7.2.27-1.el7.x86_64
	libxml2-devel is needed by php72w-7.2.27-1.el7.x86_64
	firebird-devel is needed by php72w-7.2.27-1.el7.x86_64
	net-snmp-devel is needed by php72w-7.2.27-1.el7.x86_64
	libxslt-devel >= 1.0.18-1 is needed by php72w-7.2.27-1.el7.x86_64
	libxml2-devel >= 2.4.14-1 is needed by php72w-7.2.27-1.el7.x86_64
	libjpeg-devel is needed by php72w-7.2.27-1.el7.x86_64
	libpng-devel is needed by php72w-7.2.27-1.el7.x86_64
	freetype-devel is needed by php72w-7.2.27-1.el7.x86_64
	libXpm-devel is needed by php72w-7.2.27-1.el7.x86_64
	t1lib-devel is needed by php72w-7.2.27-1.el7.x86_64
	libdb-devel is needed by php72w-7.2.27-1.el7.x86_64
	tokyocabinet-devel is needed by php72w-7.2.27-1.el7.x86_64
	libsodium-devel >= 1.0.9 is needed by php72w-7.2.27-1.el7.x86_64
	libtidy-devel is needed by php72w-7.2.27-1.el7.x86_64
	freetds-devel is needed by php72w-7.2.27-1.el7.x86_64
	aspell-devel >= 0.50.0 is needed by php72w-7.2.27-1.el7.x86_64
	recode-devel is needed by php72w-7.2.27-1.el7.x86_64
	libicu-devel >= 4.0 is needed by php72w-7.2.27-1.el7.x86_64
	enchant-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 RPM
 
License:        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.coloradmin.cn/o/1924620.html

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

相关文章

【数智化案例展】沃太能源——MES系统建设引领智能制造新篇章

‍ 联想集团案例 本项目案例由联想集团投递并参与数据猿与上海大数据联盟联合推出的《2024中国数智化转型升级创新服务企业》榜单/奖项评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 沃太能源股份有限公司&#xff0c;一家在储能产品及智慧能源管理方案领域享有盛誉的…

对B-树的理解

目录 前言-为什么要使用B-树&#xff1f;B-树概念 前言-为什么要使用B-树&#xff1f; 首先&#xff0c;我们正常的搜索都有一下方式&#xff1a; 搜索二叉树&#xff0c;极端场景下会退化&#xff0c;类似于单支&#xff0c;此时的效率变成了O(N)&#xff1b;为了解决1的问题…

基于微信小程序的音乐播放平台

基于微信小程序的音乐播放平台 音乐播放小程序项目简介技术栈功能模块项目流程系统E-R图项目页面 音乐播放小程序 项目简介 微信音乐小程序旨在提供一个简洁高效的音乐播放平台&#xff0c;用户可以方便地搜索、播放和收藏自己喜欢的音乐。整个项目采用前后端分离的架构&…

Rust 测试的组织结构

测试的组织结构 本章一开始就提到&#xff0c;测试是一个复杂的概念&#xff0c;而且不同的开发者也采用不同的技术和组织。Rust 社区倾向于根据测试的两个主要分类来考虑问题&#xff1a;单元测试&#xff08;unit tests&#xff09;与 集成测试&#xff08;integration test…

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

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

在word中删除endnote参考文献之间的空行

如图&#xff0c;在References中&#xff0c;每个文献之间都有空行。不建议手动删除。打开Endnote。 打开style manager 删除layout中的换行符。保存&#xff0c;在word中更新参考文献即可。

InjectFix 热更新解决方案

简介 今天来谈一谈&#xff0c;项目种的客户端热更新解决方案。InjectFix是腾讯xlua团队出品的一种用于Unity中C#代码热更新热修复的解决方案。支持Unity全系列&#xff0c;全平台。与xlua的思路类似&#xff0c;InjectFix解决的痛点主要在于Unity中C#代码写的逻辑在发包之后无…

复杂设备操作流程3D数字化全景展示好处多

传统的纸质说明书&#xff0c;尽管承载着产品的使用指南&#xff0c;但其图文平面的表现形式往往限制了表现力和说明力。对于简单产品&#xff0c;用户或许能摸索使用;但对于复杂产品&#xff0c;即使拥有详实的说明书&#xff0c;也可能因理解困难而导致使用障碍。现在&#x…

【工具使用】adb下载和配置

【工具使用】adb下载和配置 一&#xff0c;简介二&#xff0c;操作步骤2.1 Bing搜索adb2.2 下载adb工具2.3 添加路径到环境变量 三&#xff0c;效果验证 一&#xff0c;简介 本文主要介绍如何下载adb并安装使用&#xff0c;供参考。 此时打开cmd&#xff0c;输入adb 会提示&am…

<数据集>猫狗识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;3686张 标注数量(xml文件个数)&#xff1a;3686 标注数量(txt文件个数)&#xff1a;3686 标注类别数&#xff1a;2 标注类别名称&#xff1a;[cat, dog] 序号类别名称图片数框数1cat118811892dog24982498 使用标…

计算机网络复习笔记【面向考纲整理】

计算机网络复习笔记 一、计算机网络体系结构&#xff08;一&#xff09;计算机网络的概念、分类、组成与功能1.计算机网络的概念、组成与功能1.1计算机网络的概念1.2计算机网络的组成1.3计算机网络的功能 2.计算机网络的分类3.计算机网络的标准化工作及相关知识 &#xff08;二…

主机安全-进程、命令攻击与检测

目录 概述反弹shell原理nc/dev/xxx反弹shell下载不落地反弹Shell各种语言反弹shell linux提权sudosuid提权mysql提权 Dnslog参考 概述 本文更新通过在主机&#xff08;不含容器&#xff09;上直接执行命令或启动进程来攻击的场景。检测方面以字节跳动的开源HIDS elkeid举例。每…

E9.【C语言】练习:模拟用户登录界面,最多输入三次密码以及strcmp函数的讲解

思路&#xff1a;分两个环节 1.输入密码&#xff0c;存储在数组里 2.密码验证&#xff08;尝试次数不超过3次&#xff09; #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main() {char password[20] { 0 };int i 0;for ( i …

整洁架构SOLID-接口隔离原则(ISP)

文章目录 定义ISP与编程语言ISP与软件架构小结 定义 在上图中有多个用户需要操作OPS类。现在&#xff0c;我们假设这里的User1只需要使用op1,User2只需要使用op2,User3只需要使用op3。 在这种情况下&#xff0c;如果OPS类是用Java编程语言编写的&#xff0c;那么很明显&#x…

使用Gitee仓库镜像管理功能实现Gitee与Github 双向同步

进入你所需要同步的仓库&#xff0c;点击「管理」->「镜像仓库管理」&#xff0c;点击「添加镜像」选项&#xff1b; 如果你的Gitee账号还没有绑定过 GitHub 帐号&#xff0c;先根据弹窗的提示绑定 GitHub 帐号&#xff1b; 添加镜像时候&#xff0c;在「镜像方向」中选择…

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(三)-机上无线电接入节点无人机

引言 本文是3GPP TR 22.829 V17.1.0技术报告&#xff0c;专注于无人机&#xff08;UAV&#xff09;在3GPP系统中的增强支持。文章提出了多个无人机应用场景&#xff0c;分析了相应的能力要求&#xff0c;并建议了新的服务级别要求和关键性能指标&#xff08;KPIs&#xff09;。…

【微信小程序知识点】getApp()全局数据共享,页面间通信,组件间通信

getApp()-全局数据共享 在小程序中&#xff0c;可以通过getApp()方法获取到小程序全局唯一的App实例。因此在App()方法中添加全局共享的数据&#xff0c;方法&#xff0c;从而实现页面&#xff0c;组件的数据传值。 // app.js App({//全局共享的数据globalData: {token: &qu…

C语言——流程控制:if...else、switch...case

控制类语句&#xff1a; 逻辑运算符&#xff1a; 选择语句&#xff1a; if...else&#xff1a; if&#xff08;&#xff09;括号内的内容终究会被转换成0,1&#xff0c;满足的话即为1&#xff0c;不满足的话为0。因此要注意&#xff0c;&#xff08;&#xff09;括号内因为条件…

【数智化CIO展】沃太能源CIO陈丽:AI 浪潮下的中国企业数智化转型机遇与挑战...

陈丽 本文由沃太能源CIO陈丽投递并参与由数据猿联合上海大数据联盟共同推出的《2024中国数智化转型升级优秀CIO》榜单/奖项评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 在当今飞速发展的数字时代&#xff0c;中国企业正面临着前所未有的变革机遇和挑战。“中国企业数…

机器学习筑基篇,Jupyter Notebook 精简指南

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] 0x00 Jupyter Notebook 简明指南 描述&#xff1a;前面我们已经在机器学习工作站&#xff08;Ubuntu 24.04 Desktop Geforce RTX 4070Ti SUPER&#xff09;中安装 Anaconda 工具包&#xff0c;其…