如何解决停止 rpmbuild 重写 Requires MVCE
我正在从 Python 包构建二进制 RPM。该软件包使用自定义 .spec
文件,这是一项硬性要求。 (python setup.py bdist_rpm
不够灵活。)
例如,.spec
文件的片段如下所示:
%else
%if 0%{?rhel} >= 7
BuildRequires: python2-devel
BuildRequires: python-setuptools
Requires: python(abi) = 2.7
Requires: python2-boto >= 2.5.0
Requires: python2-cryptography < 3
流程是:
- 创建一个 sdist 并将其放在 SOURCES (
%{_sourcedir}
) 下 - 致电
rpmbuild -bb <path-to.spec>
规范文件的内容如下:
%prep
%setup -q -n %{name}-%{unmangled_version}
%build
%if %{with_python2}
%py2_build
%endif
%if %{with_python3}
%py3_build
%endif
%install
%if %{with_python2}
%{__python2} setup.py install --single-version-externally-managed -O1 --root=%{buildroot} --record=INSTALLED_FILES
%endif
%if %{with_python3}
%{__python3} setup.py install --single-version-externally-managed -O1 --root=%{buildroot} --record=INSTALLED_FILES
%endif
为了简单起见,我们可以忘记条件检查,只指定一个无条件要求:
Requires: PyYAML
问题是 rpmbuild
某处将 Requires:
破坏为一组完全不同的要求。
$ rpm -qp --requires /root/rpmbuild/RPMS/noarch/path-to-project3.0.0-1.noarch.rpm
/bin/bash
/usr/bin/env
/usr/bin/python
/usr/bin/python2
python(abi) = 2.7
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PartialHardlinkSets) <= 4.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(PayloadIsXz) <= 5.2-1
明显缺少 PyYAML
要求。
构建发生在 CentOS 7 Docker 容器上,无论我尝试什么,我都无法让 rpmbuild
单独留下 Requires:
部分。我已经尝试过:
%undefine __pythondist_requires
setup.py --quiet egg_info --egg-base /tmp sdist
一切都无济于事。
如何让 rpmbuild
忠实于实际的 .spec
文件?
MVCE
我在 https://github.com/bsolomon1124/test-so-7954504 构建了一个 MVCE 项目。那里的自述文件包含完整的重现说明,也显示在此处:
克隆项目。
运行容器:
docker container run -it --rm --volume "$(pwd)":/io --workdir /io --entrypoint bash centos:7
设置并构建将放入 dist/
的 RPM:
$ yum update -y
$ yum install -y make
$ make setup_build
$ make rpm
检查需要,看到来自 .spec
文件的那些被忽略了:
[root@xxxxxx io]# rpm -qp --requires dist/myproj-0.1-1.noarch.rpm
python(abi) = 2.7
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PartialHardlinkSets) <= 4.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(PayloadIsXz) <= 5.2-1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。