OpenSSL-1.1.1W rpm包制作与更新
环境介绍
一、 制作 OpenSSL RPM 包
1.1 安装依赖
~]# yum install rpm-build rpmlint rpmdevtools
~]# yum install -y gcc gcc-c++ make perl perl-WWW-Curl
1.2 配置 rpmbuild 工作目录
注意:
下面两个操作请不要使用 root
用户操作
创建所需目录
~]$ 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 |
代码附件
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 ~]# |
一些说明
上述 SPEC
文件只构建了 openssl
,openssl-devel
和openssl-debuginfo
三个包, 而且 更新之后 man openssl
会提示找不到手册
对比网上其他的SPEC文件少了很多内容, 后续会继续补充
下面是某个openssl的SPEC文件
二、 更新 OpenSSL
- 卸载旧版本openssl
rpm -e openssl --nodeps
- 安装新版openssl
rpm -ivh openss-1.1.1w-1.el7.rpm