因为我必须在通过kickstart进程构建的多个Oracle Linux服务器上安装多个版本的Python,所以我想为yum存储库构建一个python rpm。我能够使用'make altinstall'手动构建Python,它不会安装在你的默认系统Python安装上,所以我认为这将是最佳选择。
经过多次试验和错误,我设法用.bz2 python 2.7软件包开始构建一个rpm - 但是现在当我尝试安装它时,我收到一个错误:
error: Failed dependencies:
/usr/local/bin/python is needed by Python-2.7.2-1.i386
什么...... ??? Python是我正在尝试安装的!系统默认的Python(2.4)在/ usr / bin / python中!我的python目录的原型位置是/tmp/python2.7(可执行文件是/tmp/python2.7/bin/python2.7)。那为什么要查看/ usr / local / bin?
以下是我的RPM SPEC的核心:
%prep
%setup -q
%build
./configure --prefix=/tmp/python2.7
make
%install
make altinstall
我仔细看看rpm构建日志,我看到了:
Requires: /bin/sh /tmp/python2.7/bin/python2.7 /usr/bin/env /usr/local/bin/python libc.so.6 libc.so.6(GLIBC_2.0)...[a lot more...]
好的,那么/ usr / local / bin就在哪里......现在,问题是,它是如何确定这些要求的呢?我说错了吗?我需要覆盖一些东西吗?
像许多rpm新手一样,我得到了构建部分,但我并没有真正“理解”在rpmbuild结束时发生的事情以及实际放入rpm文件的内容(除了在%files中指定的文件)然后在进行rpm安装时会发生什么。
任何人都可以建议为什么我的安装失败或者我可能会读到什么来理解为什么我的rpm版本需要我正在构建的内容?
答案 0 :(得分:19)
您应该可以通过在规范文件中添加以下行来解决此问题:
AutoReq: no
以下是我对为什么这是必要的理解。当rpmbuild使用#运行.py文件时! (shebang)它会自动添加shebang指定的二进制文件作为要求。不仅如此,如果shebang是#!/usr/bin/env python
,它将为解决的任何内容添加依赖关系($PATH
上的第一个python)。
您需要关闭自动需求处理或查找会导致问题的所有shebang并将其更改为其他内容。
答案 1 :(得分:7)
rpmbuild可以变得非常聪明,这就是其中一种情况。它可能会从包含以下内容的脚本文件中提取/usr/local/bin/python
:
#!/usr/local/bin/python
在顶部。尝试在bz2文件中的文件中为此路径进行grep'ing。