我这样构建我的 rpm:
rpmbuild -bb SPECS/python.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 需要 Python-2.6.4-1.x86_64 /usr/local/bin/python2.6 需要 Python-2.6.4-1 .x86_64
我真的没有任何构建自己的 RPM 的经验,但我正在尝试设置一个 puppet 服务器,它似乎更倾向于通过 RPM 安装。我需要使用尚未在 CentOS 上以 RPM 形式提供的软件版本。
RPM 文件是在 RPM 目录中创建的 - 但我不知道错误是什么意思。
有任何想法吗?提前致谢。
它有助于了解 RPM 在这里的工作原理。
RPM 将自动添加它所知道的特定文件分类的要求(例如 ELF 共享库、#! 脚本等):
http://www.rpm.org/max-rpm-snapshot/s1-rpm-depend-auto-depend.html
这里发生的情况是,有效载荷的一些内容已被提取,但具有未打包的需求:
我们可以通过运行
rpmbuild -bi Python.spec
构建到安装阶段来验证这一点。根据上面提供的信息,您可以搜索文件: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
对于具有引用完整 buildroot 的 shebang 和引用 /usr/local/bin/python2.6 的一堆脚本的文件RPM 在这里并没有做错任何事情,并且解决此问题的正确方法的详细信息通常会特定于您正在构建的包的构建。
解决此问题的一种方法是
AutoProvReq: no
在 SPEC 文件的序言中设置,例如直接在Group: Python
. 这应该为您提供一个可安装的 RPM,但您可能会争辩说它没有充分利用 RPM 的依赖模型,并且您的某些 Python 包文件中的路径不正确。让我们专门看一下 Python 构建,并尝试了解我们可以做些什么来以更全面的方式解决这个问题。
您的 %install 部分使用宏 %makeinstall 默认扩展为:
作为参考,我倾向于参考上游的 Fedora SPEC,它要复杂得多,但可以构建(通过一些修改和自动工具版本 IIRC 的补丁)并行 python26 包。我现在不打算详细介绍,但如果我们看看他们如何安装关键线是:
make install DESTDIR=%{buildroot}
我强烈建议这样做而不是禁用 AutoProvReq。由于 Python 是一个基于 libtool 的构建,它可能比 %makeinstall 宏更好,因为您已经配置了前缀。通过在这里进行检查,这似乎是正确的。请注意,如果您正在使用此更改进行重建,您还需要添加:
并希望在该部分的开头有一个类似的 rm 行
%install
。这一切似乎对我有用:使用其他地方提供的 python2.6 包可能很值得,我相信 IUSCommunity 提供了包,如此处所述 - http://agilesysadmin.net/recent-python-on-rhel-or-centos。这些可能更接近于 fedora 包。