在构建RPM包时运送* .so和二进制文件

时间:2014-01-22 16:22:48

标签: python rpm rpm-spec

我创建了一个python应用程序,我希望在最终的RPM包中发送.so和一些二进制文件。经过长时间的阅读,我发现了一种在setup.py中添加二进制文件/图像和其他数据文件的方法。现在,当我使用python setup.py bdist_rpm命令构建RPM时,它抱怨架构依赖:

    Arch dependent binaries in noarch package
error: command 'rpmbuild' failed with exit status 1

谷歌搜索后我发现我们可以添加:

#%define _binaries_in_noarch_packages_terminate_build 0

或删除BuildArch: noarch文件中的行packagename.spec以克服rpmbuild失败。但是,每次我从build/bdist.linux-i686/rpm/SPECS/packagename.spec添加或删除行时,命令python setup.py bdist_rpm都会覆盖.spe文件。

有没有办法避免Arch dependent binaries并以rpm格式发送* .so和其他二进制文件?

2 个答案:

答案 0 :(得分:5)

据我所知,

.so个文件总是依赖于arch。

在您的情况下,为了避免必须一直编辑规范文件,您可以--force-arch=<your_arch>添加setup.py bdist_rpm

e.g。

python setup.py bdist_rpm --force-arch=x86_64

答案 1 :(得分:2)

bdist_rpm的行为由以下一系列设置定义:

  • /usr/lib/rpm/macros
  • /etc/rpm/macros
  • $HOME/.rpmmacros

我愿意打赌你的系统只存在/usr/lib/rpm/macros。这很正常。

因此,为了防止“noarch package中的Arch依赖二进制文件”错误,您需要创建/etc/rpm/macros~/.rpmmacros并添加以下内容:

%_unpackaged_files_terminate_build      0
%_binaries_in_noarch_packages_terminate_build   0

请勿修改/usr/lib/rpm/macros,因为每当rpm-build软件包升级,降级或重新安装时,系统都会覆盖该文件。

如果要覆盖系统中每个人的行为,请将设置放在/etc/rpm/macros中。如果要覆盖特定用户的行为,请将设置添加到$HOME/.rpmmacros

.rpmmacros胜过/etc/rpm/macros,胜过/usr/lib/rpm/macros

注意:检查/usr/lib/rpm/macros以查看可用的设置和语法示例非常有用。

作为旁注,%_unpackaged_files_terminate_build 0设置可防止error: Installed (but unpackaged) file(s) found:错误。