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

基于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的版本。 

 

 

 


 

 

相关文章:

  • DeepSeek超大模型的高效训练策略
  • PowerBI企业运营分析——RFM模型分析
  • 山东大学计算机图形学期末复习9——CG12上
  • Zephyr OS 中的 FIFO 接口应用介绍
  • deepin v23.1 音量自动静音问题解决
  • 【汇总】影视仓接口地址,影视仓最新配置接口【2025.5】
  • 全栈项目搭建指南:Nuxt.js + Node.js + MongoDB
  • 【深度学习-Day 12】从零认识神经网络:感知器原理、实现与局限性深度剖析
  • 第三章 流程控制
  • Linux面试题集合(4)
  • C++文件操作--2 二进制文件操作
  • 第9讲、深入理解Scaled Dot-Product Attention
  • 重庆 ICPC 比赛游记
  • 信贷域——互联网金融业务
  • 哈希的原理、实现
  • 【OpenGL学习】(二)OpenGL渲染简单图形
  • 系统架构设计(八):三层架构
  • SVN 版本控制入门指南
  • Qt与Hid设备通信
  • Python多进程编程执行任务
  • 以军称已开始在加沙的新一轮大规模攻势
  • 多个“首次”!上市公司重大资产重组新规落地
  • 刘小涛任江苏省委副书记
  • 六省会共建交通枢纽集群,中部六省离经济“第五极”有多远?
  • 中拉互联网发展与合作论坛在西安开幕
  • 秦洪看盘|缩量回踩,积蓄叩关能量