【问题标题】:Building RPM from source, how to install packages required to build in spec file从源代码构建 RPM,如何在规范文件中安装构建所需的包
【发布时间】:2021-05-15 22:10:54
【问题描述】:

我不熟悉构建 RPM 包并为此编写 spec 文件。 我必须编写一个规范文件,用于从github 编写的源代码golang 构建一个包。 我没有安装golang,而是尝试下载tar并解压缩并使用它,因为生产系统中不允许安装它。 一切工作正常,除了当我尝试使用bin/go build 构建代码时失败并显示系统头文件:fatal error: systemd/sd-journal.h: No such file or directory。 当我在该系统上安装 system-devel 软件包时,这很有效。 但是如何通过在规范文件中提及而不是手动安装它。 当我在BuildRequiresRequires 部分中指定它时,它在启动时失败。 我不能yum install 因为这需要 sudo 访问权限并且 rpm 正在使用非 sudo 访问权限构建。 我还能如何安装它,任何建议都是可观的。

谢谢

【问题讨论】:

  • 如答案中所述,您需要安装这些东西。如果您的机器上没有 root,请考虑building the RPM within a container 或 VM。
  • @msuchy:感谢您的回复,它有帮助。我主要使用了这个页面的概念。但是我认为在构建之前安装依赖项是独立于 golang 概念的,所以我一直在寻找一个来安装 golang 包工作所需的那些包。

标签: linux centos package rpm rpm-spec


【解决方案1】:

在这里构建 RPM 分为两个不同的阶段:

  1. 所有的依赖都安装好了。

  2. RPM 已编译

第二阶段是实际的rpmbuild 命令。它只能使用RequireBuildRequire 进行依赖。如您所见,它以普通用户身份运行,因此无法安装依赖项。它只能检查它们并中止。这是正常的(也是意料之中的)。

第一阶段实际上是由构建服务器(例如,Fedora 的koji)或手动运行的,但它超出了rpmbuild 的范围。如果您必须在rpmbuild 起作用之前手动必须sudo yum install systemd-devel,那就太好了。但是构建服务器实际上是使用yum-builddep(或dnf build-dep)命令自动完成的。这些命令采用规范文件并安装所有列出的依赖项。

【讨论】:

  • 感谢@omajid 的解释。有没有办法构建服务器可以检测和下载这种依赖关系,在我的情况下,构建将由团队城市代理运行,所以考虑添加一些机制来安装这些包
  • yum-builddep /path/to/file.spec -y 应该使用yum 安装依赖项。需要 sudo,就像所有其他 yum 命令一样。
猜你喜欢
  • 1970-01-01
  • 2019-04-04
  • 2012-12-11
  • 1970-01-01
  • 2018-11-25
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
  • 2017-05-28
相关资源
最近更新 更多