我需要重建一个预构建的 RPM 包,更改其中
.service
文件的位置。
非常简单:
解压源码包:
rpm2cpio "$srcrpm" | ( cd "$src" ; cpio --no-absolute-filenames -idmv)
生成SPEC文件:
rpmrebuild -s "$spec" -p "$srcrpm"
对其进行更改:
sed -i 's/\/etc\/systemd\/system/\/usr\/lib\/systemd\/system/' "$spec"
并构建它:
rpmbuild -bb -vvv --define "_topdir $dstdir" --buildroot "$src" "$spec"
一切运行正常,但是:原始RPM没有任何
Requires
,而新生成的RPM确实有:
$ rpm -q --requires -p "$srcrpm"
$ rpm -q --requires -p "$dstrpm"
/bin/sh
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
这些依赖关系阻止在 RHEL7 系统上安装新的 RPM,而在 RHEL7 系统上安装原始 RPM 则没有任何问题。 (重建是在RHEL9系统上完成的)。
尝试了以下所有方法:
rpmbuild --nodeps
AutoReq: no
AutoProv: no
AutoReqProv: no
%global __requires_exclude ^.*$
%global __requires_exclude_from ^.*$
%define __requires ${nil}
/usr/lib/rpm/find-requires
,评论rpmdeps
运气不好,新 RPM 中仍然存在
Requires
。为什么?我还缺少什么?
yum install mock
mock -r centos-7-x86_64 foo.src.rpm
您可能希望将自己添加到模拟组中,以避免每次运行时都输入密码:https://rpm-software-management.github.io/mock/#setup