因为我必须在通过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规范的核心:
%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新手一样,我得到了构建部分,但我并没有真正“搞懂”在rpm build的末尾发生了什么,以及实际放入rpm文件的内容(除了您在%files中指定的文件)以及在进行rpm安装时实际发生了什么。
有谁能告诉我为什么我的安装失败了,或者我可能读到了什么来理解为什么我的rpm构建需要我尝试构建的东西吗?
您应该可以通过将以下行添加到规范文件中来解决此问题:
这是我对为什么这是必要的理解。当rpmbuild在.py文件中运行一个#!(shebang)它将自动添加shebang指定为需求的二进制文件。不仅如此,如果shebang是
#!/usr/bin/env python
,它还将为解析为的对象(第一个python在$PATH
)添加一个依赖项。您要么需要关闭自动需求处理,要么找到所有会导致问题的shebang并将其更改为其他内容。
rpmbuild可以变得非常聪明,这就是其中之一。它可能从包含以下内容的脚本文件中提取了
/usr/local/bin/python
:在上面。在bz2文件中的文件中尝试grep'ing以获取此路径。
相关问题 更多 >
编程相关推荐