环境介绍 一、 制作 OpenSSL RPM 包 1.1 安装依赖 ~]# yum install rpm-build rpmlint rpmdevtools
~]# yum install -y gcc gcc-c++ make perl perl-WWW-Curl
1.2 配置 rpmbuild 工作目录
创建所需目录 ~]$ mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
BUILD
: 用于存放编译过程中生成的文件
BUILDROOT
:用于存放编译后的根文件系统
RPMS
:用于存放编译后的 RPM 包
SOURCES
:用于存放源代码包
SPECS
:用于存放 RPM 规范文件
SRPMS
:用于存放源 RPM 包
RPM包构建的顶层目录配置 ~]$ echo "%_topdir %{getenv:HOME}/rpmbuild" > ~/.rpmmacros
%_topdir
:RPM 构建的顶层目录宏
%{getenv:HOME}
:获取用户主目录的环境变量
~/.rpmmacros
:用户 RPM 配置文件
该命令将 %_topdir
宏设置为用户主目录下的 rpmbuild
目录,并将其写入用户 RPM 配置文件~/.rpmmacros
中, 其目的如下两条
简化 RPM 包的构建过程
无需在每个 RPM 规范文件中指定 %_topdir
宏的值
1.3 将压缩包放至 ~/rpmbuild/SOURCES
目录 ~]$ curl -o ~/rpmbuild/SOURCES/openssl-1.1.1w.tar.gz https://www.openssl.org/source/openssl-1.1.1w.tar.gz
1.4 编写 SPEC 文件 ~]$ vim ~/rpmbuild/SPECS/openssl.spec
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: GPLv2+ URL: https://www.openssl.org/ Source0: https://www.openssl.org/source/%{name}-%{version}.tar.gz BuildRequires: make gcc perl perl-WWW-Curl Requires: %{name} = %{version}-%{release} BuildRoot: %_topdir/BUILDROOT % global openssldir /usr/openssl % description The OpenSSL toolkit provides support for secure communications between machines. % package devel Summary: Secure Sockets Layer and cryptography static libraries and headers Group: Development/Libraries Requires: %{name} = %{version}-%{release} % description devel The OpenSSL devel tool % prep % setup -q % build ./config --prefix=%{openssldir} --openssldir=%{openssldir} make %{?_smp_mflags} % install [ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot} % make_install mkdir -p %{buildroot}%{_bindir} mkdir -p %{buildroot}%{_libdir} ln -sf %{openssldir}/lib/libssl.so.1.1 %{buildroot}%{_libdir} ln -sf %{openssldir}/lib/libcrypto.so.1.1 %{buildroot}%{_libdir} ln -sf %{openssldir}/bin/openssl %{buildroot}%{_bindir} % clean [ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot} % files % {openssldir} % defattr(-,root,root) % {_bindir}/openssl % {_libdir}/libcrypto.so.1.1 % {_libdir}/libssl.so.1.1 % files devel % {openssldir}/include/* % defattr(-,root,root) % post -p /sbin/ldconfig % postun -p /sbin/ldconfig % changelog * Fri Mar 08 2024 wanghuaizhuang <wangjingming@live.cn> - Build for CentOS7.9
代码附件 openssl-1.1.1w.spec
1.5 验证 SPEC 文件 没有 error 即可 ~]$ rpmlint ~/rpmbuild/SPECS/openssl.spec
1.6 构建 ~] $ rpmbuild -D "version 1.1.1w" -ba ~/rpmbuild/SPECS/openssl.spec
参数解释:
ba
构建源代码rpm包和二进制rpm包
bb
只构建二进制rpm包
bs
只构建源代码rpm包
bp
执行至%prep阶段(解压源并应用补丁)
bc
执行至%build阶段(%prep,然后编译)
bi
执行至%install阶段(%prep,%build,然后安装)
bl
验证%files部分,查看文件是否存在
查看构建完成的rpm包 [dev@pve-centos7 ~]$ tree ~/rpmbuild/RPMS/ /home/dev/rpmbuild/RPMS/ └── x86_64 ├── openssl-1.1.1w-1.el7.x86_64.rpm ├── openssl-debuginfo-1.1.1w-1.el7.x86_64.rpm └── openssl-devel-1.1.1w-1.el7.x86_64.rpm 1 directory, 3 files [dev@pve-centos7 ~]$
1.7 使用上述生成的rpm包更新本地openssl 卸载和安装都要指定 --nodeps
这里让我郁闷 (>_<) , 指定了 requires
, 然后安装的时候 --nodeps
[root@pve-centos7 ~]# [root@pve-centos7 ~]# rpm -aq | grep openssl openssl-1.0.2k-26.el7_9.x86_64 openssl-libs-1.0.2k-26.el7_9.x86_64 openssl-devel-1.0.2k-26.el7_9.x86_64 [root@pve-centos7 ~]# rpm -e openssl-1.0.2k-26.el7_9.x86_64 --nodeps [root@pve-centos7 ~]# [root@pve-centos7 ~]# rpm -ivh /home/dev/rpmbuild/RPMS/x86_64/openssl-1.1.1w-1.el7.x86_64.rpm --nodeps Preparing... ################################# [100%] Updating / installing... 1:openssl-1.1.1w-1.el7 ################################# [100%] [root@pve-centos7 ~]# [root@pve-centos7 ~]# openssl version OpenSSL 1.1.1w 11 Sep 2023 [root@pve-centos7 ~]#
一些说明 上述 SPEC
文件只构建了 openssl
,openssl-devel
和openssl-debuginfo
三个包, 而且 更新之后 man openssl
会提示找不到手册 对比网上其他的SPEC文件少了很多内容, 后续会继续补充
下面是某个openssl的SPEC文件
二、 更新 OpenSSL
卸载旧版本opensslrpm -e openssl --nodeps
安装新版opensslrpm -ivh openss-1.1.1w-1.el7.rpm