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

基于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.lryc.cn/news/2378327.html

相关文章:

  • 数据分析_Python
  • TCP/UDP协议原理和区别 笔记
  • 深入浅出:C++数据处理类与计算机网络的巧妙类比
  • 【滑动窗口】LeetCode 209题解 | 长度最小的子数组
  • 在RK3588上使用NCNN和Vulkan加速ResNet50推理全流程
  • 【ant design】ant-design-vue 4.0实现主题色切换
  • Android 图片自动拉伸不变形,点九
  • 电子电路:什么是色环电阻器,怎么识别和计算阻值?
  • LeetCode Hot100刷题——轮转数组
  • Python绘制南丁格尔玫瑰图:从入门到实战
  • 概率与期望总结
  • 炼丹学习笔记3---ubuntu2004部署运行openpcdet记录
  • 深入解析BGP路由反射器与联邦:突破IBGP全连接限制的两种方案
  • QT设置MySQL驱动
  • String的一些固定程序函数
  • 3.2/Q2,Charls最新文章解读
  • 大麦(Hordeum vulgare)中 BAHD 超家族酰基转移酶-文献精读129
  • docker迅雷自定义端口号、登录用户名密码
  • 中国30米年度土地覆盖数据集及其动态变化(1985-2022年)
  • 3D个人简历网站 5.天空、鸟、飞机
  • STM32IIC实战-OLED模板
  • Sparse4D运行笔记
  • Redis设计与实现——分布式Redis
  • 多指标组合策略
  • c#车检车构客户管理系统软件车辆年审短信提醒软件
  • Java爬虫能处理京东商品数据吗?
  • 通俗版解释CPU、核心、进程、线程、协程的定义及关系
  • 大语言模型 11 - 从0开始训练GPT 0.25B参数量 MiniMind2 准备数据与训练模型 DPO直接偏好优化
  • USRP 射频信号 采集 回放 系统
  • 【skywalking】index“:“skywalking_metrics-all“},“status“:404}