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

基于CentOS7制作OpenSSL 1.1的RPM包

        背景:CentOS7 已经不再维护了,有时候需要升级某些组件,网上却没有相关的资源了。尤其是制作OpenSSH 9.6+ 的RPM包,就会要求OpenSSL为1.1的版本。基于此,还是自己制作吧,以下是踩坑过程。

        1、官网提供的源码包中没有包含spec文件,所以通过rpmbuild命令打包时,需要先自己构建一个openssl.rpm的文件,以下是具体内容:

Name: openssl
Version: 1.1.1w
Release: 1%{?dist}
Summary: Utilities from the general purpose cryptography library with TLS implementationGroup: System Environment/Libraries
License: OpenSSL
URL: http://www.openssl.org/
Source0: openssl-%{version}.tar.gzBuildRequires: make, gcc, coreutils, krb5-devel, perl, sed, zlib-devel, perl-WWW-Curl
Requires: coreutils, make
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
%global openssldir /usr/openssl%description
The OpenSSL toolkit provides support for secure communications between
machines. OpenSSL includes a certificate management tool and shared
libraries which provide various cryptographic algorithms and protocols.%package libs
Summary: Shared libraries for OpenSSL
Group: System Environment/Libraries
Requires: coreutils%description libs
Shared libraries (libcrypto and libssl) for OpenSSL.%package devel
Summary: Development files for programs which will use the openssl library
Group: Development/Libraries
Requires: %{name}-libs = %{version}-%{release}%description devel
OpenSSL RPM for version 1.1.1w on Centos (development package)%prep
%setup -q%build
./config --prefix=%{openssldir} --openssldir=%{openssldir} shared zlib -fPIC
make%install
[ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot}
%make_install# Create standard directories
mkdir -p %{buildroot}%{_bindir}
mkdir -p %{buildroot}%{_libdir}
mkdir -p %{buildroot}%{_includedir}# Create symlinks for libraries in /usr/lib64
ln -sf %{openssldir}/lib/libssl.so.1.1 %{buildroot}%{_libdir}/libssl.so.1.1
ln -sf %{openssldir}/lib/libcrypto.so.1.1 %{buildroot}%{_libdir}/libcrypto.so.1.1
# Create development symlinks
ln -sf %{openssldir}/lib/libssl.so.1.1 %{buildroot}%{_libdir}/libssl.so
ln -sf %{openssldir}/lib/libcrypto.so.1.1 %{buildroot}%{_libdir}/libcrypto.so# Create symlink for binary
ln -sf %{openssldir}/bin/openssl %{buildroot}%{_bindir}/openssl# Ensure pkgconfig files are included
mkdir -p %{buildroot}%{_libdir}/pkgconfig
cp -p %{buildroot}%{openssldir}/lib/pkgconfig/*.pc %{buildroot}%{_libdir}/pkgconfig/%clean
[ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot}%files
%defattr(-,root,root)
%{_bindir}/openssl
%{openssldir}/bin/*
# Configuration files
%{openssldir}/ct_log_list.cnf
%{openssldir}/ct_log_list.cnf.dist
%{openssldir}/openssl.cnf
%{openssldir}/openssl.cnf.dist
# Misc scripts
%{openssldir}/misc/*
# Documentation
%{openssldir}/share/*%files libs
%defattr(-,root,root)
%{_libdir}/libcrypto.so.1.1
%{_libdir}/libssl.so.1.1
%{openssldir}/lib/engines-1.1/*.so
%{openssldir}/lib/pkgconfig/*.pc
# Libraries in openssldir
%{openssldir}/lib/libcrypto.so.1.1
%{openssldir}/lib/libssl.so.1.1%files devel
%defattr(-,root,root)
%{openssldir}/include/*
%{_libdir}/libcrypto.so
%{_libdir}/libssl.so
%{_libdir}/pkgconfig/*.pc
# Development libraries
%{openssldir}/lib/libcrypto.a
%{openssldir}/lib/libcrypto.so
%{openssldir}/lib/libssl.a
%{openssldir}/lib/libssl.so%post libs -p /sbin/ldconfig
%postun libs -p /sbin/ldconfig

将openssl.spec文件放在/root/rpmbuild/SPECS目录下,然后执行如下命令:

rpmbuild -bb openssl.spec

3.如果出现如下错误:

[root@~ SPECS]# rpmbuild -bb openssl.spec
error: Failed build dependencies:perl-WWW-Curl is needed by openssl-1.1.1w-1.el7.centos.x86_64
[root@~ SPECS]#

则需要安装perl-WWW-Curl :

[root@~ SPECS]# yum install -y  perl-WWW-Curl

4. 重新执行命令:

rpmbuild -bb openssl.spec

如果不出意外,应该就能制作成功了。

        下面介绍下升级OpenSSL 1.1版本,以及制作OpenSSH 9.6+版本的RPM包时需要注意的问题 。

        之前的博客有介绍,如果OpenSSH 9.6+版本需要兼容老的客户端时,需要进行配置,同时,打包时,需要将with-ssl的开关打开,然后再进行编译,OpenSSH的spec文件,默认是不带openssl进行打包的。

        先升级OpenSSL到1.1.1的版本,因为机器上已经安装了OpenSSL 1.0,升级可能导致某些依赖组件不匹配。所以,只能采取强制升级的操作:

rpm -Uvh openssl* --nodeps --force

升级成功之后,如果打包OpenSSH时,遇到如下错误:

checking if getpgrp accepts zero args... yes
checking for openssl... /usr/bin/openssl
checking for openssl/opensslv.h... no
configure: error: *** OpenSSL headers missing - please install first or check config.log ***
error: Bad exit status from /var/tmp/rpm-tmp.t8CMn3 (%build)

则需要修改下OpenSSH.spec文件,使其打包时,读取的是1.1的OpenSSL,找到%build的位置,加入如下内容:

%build
export PKG_CONFIG_PATH=/usr/lib64/pkgconfig
export LDFLAGS="-L/usr/lib64"
export CPPFLAGS="-I/usr/openssl/include"

然后再执行打包OpenSSH的命令:

rpmbuild -bb openssh.spec

如果没有其他错误,则会打包成功,且是携带OpenSSL的版本。 

 

 

 


 

 

http://www.xdnf.cn/news/7003.html

相关文章:

  • Webpack DefinePlugin插件介绍(允许在编译时创建JS全局常量,常量可以在源代码中直接使用)JS环境变量
  • HarmonyOS:重构万物互联时代的操作系统范式
  • 6.1.1图的基本概念
  • 在宝塔中使用.NET环境管理部署 .NET Core项目
  • GO语言语法---if语句
  • VSCode launch.json 配置参数详解
  • 软件调试纵横谈-17-win32堆的调试支持
  • Android开发——轮播图引入
  • Redis设计与实现——Redis命令参考与高级特性
  • impala
  • 基于KAN+Transformer的专业领域建模方法论
  • 【滑动窗口】LeetCode 1658题解 | 将 x 减到 0 的最小操作数
  • day28 python 类与继承
  • EXO 可以将 Mac M4 和 Mac Air 连接起来,并通过 Ollama 运行 DeepSeek 模型
  • Ansible模块——服务管理和设置定时任务
  • 中药药效成分群的合成生物学研究进展-文献精读130
  • json schema校验json字符串(networknt/json-schema-validator)
  • PySide6 GUI 学习笔记——常用类及控件使用方法(常用类颜色QColor)
  • Java-反射(Reflection)
  • Power BI Desktop开发——矩阵相关操作
  • 智慧校园(含实验室)智能化专项汇报方案
  • 精益数据分析(64/126):移情阶段的用户触达策略——从社交平台到精准访谈
  • 在Solana上使用 Scaled UI Amount 扩展
  • 机器学习回归预测中预处理的特征工程
  • 如何根据竞价数据判断竞价强度,是否抢筹等
  • 从零开始:使用 PyTorch 构建深度学习网络
  • WebXR教学 09 项目7 使用python从0搭建一个简易个人博客
  • BiliTools v1.3.7 哔哩哔哩工具箱
  • chrome 浏览器插件 myTools, 日常小工具。
  • FreeCAD源码分析: Transaction实现原理