我build立我的RPM这样的:
rpmbuild -bb SPECS / python.spec
使用以下spec文件:
%define _topdir /home/rpmbuild/python %define name Python %define release 1 %define version 2.6.4 %define buildroot %{_topdir}/%{name}-%{version}-root BuildRoot: %{buildroot} Summary: python License: GPL Name: %{name} Version: %{version} Release: %{release} Source: %{name}-%{version}.tar.bz2 Group: Python %description Python, compiled by Jon Haddad for CentOS %prep %setup -q %build ./configure --prefix=/usr/local make %install %makeinstall %files %defattr(-,root,root) /usr
这是我尝试安装时遇到的错误:
[root @ puppet rpms]#rpm -ivh Python-2.6.4-1.x86_64.rpm错误:依赖关系失败:/home/rpmbuild/python/Python-2.6.4-root/usr/bin/python2.6 Python-2.6.4-1.x86_64需要/ usr / local / bin / python-2.6.4-1.x86_64 Python-2.6.4-1需要/usr/local/bin/python2.6 .x86_64
我真的没有任何build立我自己的RPM的经验,但我试图build立一个puppet服务器,似乎喜欢通过RPM安装。 我需要使用CentOS上尚未提供的RPM版本的软件。
RPM文件是在RPM目录中创build的 – 但我不知道错误的含义。
有任何想法吗? 提前致谢。
这有助于了解RPM如何在这里工作。
RPM会自动添加它所知道的特定文件分类的要求(例如,ELF共享库,#!脚本等):
http://www.rpm.org/max-rpm-snapshot/s1-rpm-depend-auto-depend.html
这里发生的情况是有效载荷的一些内容已经被挑选出来,而且没有包装的要求:
/home/rpmbuild/python/Python-2.6.4-root/usr/bin/python2.6 /usr/local/bin/python2.6
我们可以通过运行rpmbuild -bi Python.spec来运行构build到安装阶段来validation。 基于上面提供的信息,您可以search文件:
find /home/rpmbuild/python/Python-2.6.4-root/ -type f -exec grep \ /home/rpmbuild/python/Python-2.6.4-root/usr/bin/python2.6
我会说你在看:
/home/rpmbuild/Python-2.6.4-root/usr/bin/python2.6-config ,这个文件有一个shebang,指的是完整的buildroot和一堆引用/ usr / local / bin的脚本/python2.6
RPM在这里没有做任何错事,修复这个问题的正确方法的细节往往是特定于你正在构build的包的构build。
解决这个问题的方法之一是在SPEC文件的前导码中设置AutoProvReq: no ,例如在Group: Python 。 这应该给你一个可安装的RPM,但是你可能会认为它没有充分利用RPM的依赖模型,并且你的某些Python包文件中会有不正确的path。
让我们专门看看Python的构build,并尝试理解我们可以做什么来以更全面的方式解决这个问题。
你的%install部分使用macrosmake%默认扩展为:
[pnasrat@centos5 ~]$ rpm -E '%makeinstall' /usr/bin/make \ prefix=/usr \ exec_prefix=/usr \ bindir=/usr/bin \ sbindir=/usr/sbin \ sysconfdir=/etc \ datadir=/usr/share \ includedir=/usr/include \ libdir=/usr/lib64 \ libexecdir=/usr/libexec \ localstatedir=/var \ sharedstatedir=/usr/com \ mandir=/usr/share/man \ infodir=/usr/share/info \ install
作为参考,我倾向于咨询上游的Fedora SPEC ,它比较复杂,但是可以构build一个并行python26软件包(对于autotools版本IIRC进行一些修改和补丁)。 我现在不打算详细讨论这个问题,但是如果我们看看他们是如何安装这个关键线的话:
make install DESTDIR=%{buildroot}
我强烈build议这样做,而不是禁用AutoProvReq。 由于Python是一个基于libtool的构build,可能比%makeinstallmacros更好,因为您已经configuration了前缀。 这似乎是通过在这里检查来做正确的事情。 请注意,如果您正在使用此更改进行重build,则还需要添加:
%clean rm -rf $RPM_BUILD_ROOT
并且在%install部分的开始部分需要一个类似的rm行。 这一切似乎为我工作:
[pnasrat@centos5 RPMS]$ rpm --test -ivh x86_64/Python-2.6.4-1.x86_64.rpm Preparing... ########################################### [100%]
这可能是值得使用其他地方提供的python2.6软件包,我相信IUSCommunity提供的软件包,这里logging – http://agilesysadmin.net/recent-python-on-rhel-or-centos 。 这些可能更接近Fedora软件包。