AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 109867
Accepted
Jon Haddad
Jon Haddad
Asked: 2010-02-05 18:58:13 +0800 CST2010-02-05 18:58:13 +0800 CST 2010-02-05 18:58:13 +0800 CST

RPM 构建问题

  • 772

我这样构建我的 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
  • 1 1 个回答
  • 3979 Views

1 个回答

  • Voted
  1. Best Answer
    user9939
    2010-02-05T23:32:28+08:002010-02-05T23:32:28+08:00

    它有助于了解 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构建到安装阶段来验证这一点。根据上面提供的信息,您可以搜索文件:

    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 默认扩展为:

    [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,它要复杂得多,但可以构建(通过一些修改和自动工具版本 IIRC 的补丁)并行 python26 包。我现在不打算详细介绍,但如果我们看看他们如何安装关键线是:

    make install DESTDIR=%{buildroot}

    我强烈建议这样做而不是禁用 AutoProvReq。由于 Python 是一个基于 libtool 的构建,它可能比 %makeinstall 宏更好,因为您已经配置了前缀。通过在这里进行检查,这似乎是正确的。请注意,如果您正在使用此更改进行重建,您还需要添加:

    %clean
    rm -rf $RPM_BUILD_ROOT
    

    并希望在该部分的开头有一个类似的 rm 行%install。这一切似乎对我有用:

    [pnasrat@centos5 RPMS]$ rpm --test -ivh x86_64/Python-2.6.4-1.x86_64.rpm 
    Preparing...                ########################################### [100%]
    

    使用其他地方提供的 python2.6 包可能很值得,我相信 IUSCommunity 提供了包,如此处所述 - http://agilesysadmin.net/recent-python-on-rhel-or-centos。这些可能更接近于 fedora 包。

    • 2

相关问题

  • 将 rpm 命令转换为 dpkg

  • 通过 RPM 管理配置?

  • 用于维护 yum 存储库的工具

  • 用于 centos 的 Python 源 RPMS?

  • 可以使用 easy_install 和 bdist_rpm 安装吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve