基于CentOS7制作OpenSSL 1.1的RPM包

发布于:2025-05-18 ⋅ 阅读:(19) ⋅ 点赞:(0)

        背景: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 implementation

Group: System Environment/Libraries
License: OpenSSL
URL: http://www.openssl.org/
Source0: openssl-%{version}.tar.gz

BuildRequires: 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的版本。 

 

 

 


 

 


网站公告

今日签到

点亮在社区的每一天
去签到