问题描述
我正在从 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
流程是:
%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:
部分。我已经尝试过:
一切都无济于事。
如何让 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 (将#修改为@)