使用 yum 下载 SRPM 并 重建 RPM


使用 yum/dnf 下载 SRPM 并 rpmbuild 重建 RPM(以 compat-openssl10 为例)

1. 目的

在无法直接安装目标 RPM(或需要适配架构/系统)的情况下,通过下载 SRPM(源码包),使用 rpmbuild 在本机重建二进制 RPM,然后本地安装。

本文示例包:compat-openssl10-1.0.2o-3.el8(aarch64)

2. 适用环境

  • CentOS/RHEL 8.x / Rocky / Alma 等(带 dnf)
  • 需要具备 rpmbuild 编译环境
  • 需要能访问对应的源(示例使用 CentOS Vault)

如果你是 CentOS 7(yum),整体思路相同,命令会略有差异(例如 dnf builddep 用 yum-builddep)。

3. 前置准备

3.1 安装 rpmbuild 工具链

# CentOS/RHEL 8+
sudo dnf install -y rpm-build rpmdevtools gcc make redhat-rpm-config

3.2 初始化 rpmbuild 目录

# 会创建 ~/rpmbuild/…
rpmdev-setuptree

4. 操作步骤

4.1 下载 SRPM

# 下载 compat-openssl10 源码(SRPM)
wget http://vault.centos.org/8.5.2111/AppStream/Source/SPackages/compat-openssl10-1.0.2o-3.el8.src.rpm

4.2 生成二进制 RPM

# 重建:会解包 SRPM -> 安装到 rpmbuild 结构 -> 编译 -> 输出 RPM
rpmbuild --rebuild --clean compat-openssl10-1.0.2o-3.el8.src.rpm

# 编译

Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Recommends: compat-openssl10-debugsource(aarch-64) = 1:1.0.2o-3.ky10.ky10
处理文件:compat-openssl10-debugsource-1.0.2o-3.ky10.ky10.aarch64
Provides: compat-openssl10-debugsource = 1:1.0.2o-3.ky10.ky10 compat-openssl10-debugsource(aarch-64) = 1:1.0.2o-3.ky10.ky10
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
检查未打包文件:/usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/compat-openssl10-1.0.2o-3.ky10.ky10.aarch64
已写至:/root/rpmbuild/RPMS/aarch64/compat-openssl10-1.0.2o-3.ky10.ky10.aarch64.rpm
已写至:/root/rpmbuild/RPMS/aarch64/compat-openssl10-debuginfo-1.0.2o-3.ky10.ky10.aarch64.rpm
已写至:/root/rpmbuild/RPMS/aarch64/compat-openssl10-debugsource-1.0.2o-3.ky10.ky10.aarch64.rpm
正在执行(%clean):/bin/sh -e /var/tmp/rpm-tmp.68Bwes
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd openssl-1.0.2o
+ /usr/bin/rm -rf /root/rpmbuild/BUILDROOT/compat-openssl10-1.0.2o-3.ky10.ky10.aarch64
+ RPM_EC=0
++ jobs -p
+ exit 0
正在执行(--clean):/bin/sh -e /var/tmp/rpm-tmp.q3tzLR
+ umask 022
+ cd /root/rpmbuild/BUILD
+ rm -rf openssl-1.0.2o
+ RPM_EC=0
++ jobs -p
+ exit 0

4.3 常见问题:

构建依赖失败(BuildRequires 缺失), 如果你在 rebuild 时看到类似:

错误:构建依赖失败:xxx is needed by compat-openssl10…

说明 spec 文件声明的编译依赖包没装齐

4.3.1 用 builddep 自动安装依赖

# 先安装 dnf builddep 支持(部分系统已自带)
sudo dnf install -y dnf-plugins-core

# 方式1:先安装 SRPM,再对 spec 做 builddep
rpm -ivh compat-openssl10-1.0.2o-3.el8.src.rpm
sudo dnf builddep -y ~/rpmbuild/SPECS/compat-openssl10.spec

然后再重新 rebuild:

rpmbuild --rebuild --clean compat-openssl10-1.0.2o-3.el8.src.rpm

4.3.2 按报错提示逐个安装依赖

# 例:根据报错提示补装依赖
sudo dnf install -y <缺失依赖包1> <缺失依赖包2> ...

注意:有些依赖需要开启额外仓库(如 PowerTools/CRB 等),不同发行版仓库名不一样;如果你依赖包“找不到”,通常就是仓库没开或源不匹配。

4.4 找到生成的 RPM 并本地安装

rebuild 成功后,RPM 通常在:

  • ~/rpmbuild/RPMS//
  • 或 ~/rpmbuild/RPMS/noarch/

你可以这样查:

find ~/rpmbuild/RPMS -type f -name "*.rpm"

然后本地安装:

# 方式1:用 rpm 安装
sudo rpm -ivh ~/rpmbuild/RPMS/aarch64/compat-openssl10-*.rpm

# 方式2:用 yum/dnf localinstall(会自动处理依赖更友好)
sudo dnf localinstall -y ~/rpmbuild/RPMS/aarch64/compat-openssl10-*.rpm

5. 验证是否安装成功

rpm -qa | grep compat-openssl10
rpm -qi compat-openssl10

如果是库文件类包,你也可以验证文件是否在系统中:

rpm -ql compat-openssl10 | head

6. 备注与建议

  • rpmbuild –rebuild 会自动处理 SRPM 的解包、spec 执行、产物输出;但依赖必须先满足
  • 生产环境建议用 dnf localinstall 而不是 rpm localinstall(rpm 不会自动解决依赖)。
  • 如果是跨发行版(比如用 CentOS Vault 的 SRPM 在其他系统上编),可能出现依赖版本不匹配,需要调整源或替换依赖。

文章作者: hnbian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hnbian !
评论
  目录