【问题标题】:RPM spec variable for (sub)package name?(子)包名称的RPM规范变量?
【发布时间】:2018-05-01 09:29:27
【问题描述】:

RPM 规范文件中有许多可用的特殊变量。这些变量中的任何一个都暴露了当前正在处理的包的名称吗?

对于单包 RPM,答案很明显,但一个规范也可以产生多个 RPM。是否存在 rpmbuild 自动更新以与当前 %files 或 %pre 或 %post 部分对齐的变量,例如 $RPM_PACKAGE_NAME?

【问题讨论】:

  • 据我所知不是...

标签: centos redhat rpm rpmbuild


【解决方案1】:

我在 RPM 源代码中看不到任何明显的内容。似乎无法使用 RPM 宏或正在构建的包头访问当前定义的子包列表,既不使用 RPM 宏也不使用 Lua。

我们使用的是使用built-in Lua interpreter 在 Lua 中生成整个包节。一个例子是glibc.spec;搜索“语言数组”和%package langpack-]]..lang..[[。请注意,Pagure 查看器中的语法突出显示有点偏离,它被这种跨语言嵌套混淆了。

【讨论】:

  • 这似乎是最干净的方式。我不知道 RPM 有一个嵌入式 Lua 解释器。您能否提供一个指向您拥有的关于该主题的最佳文档的链接?我发现了这个:rpm.org/user_doc/lua.html
  • 谢谢,我添加了一个链接。看到新的 RPM 文档仍然令人惊讶。
【解决方案2】:

你不能用这个名字来做这件事。包名%name 有一个宏,但它只包含主包的名称。但是,如果你真的需要这样做,并且你愿意做一些肮脏的 hack,你可以这样做:

%package base
Summary: Filesystem for %{name}
Group: foo

%post base
echo %group

这将打印foo%summary 类似,但 %group 是最安全的,因为组不用于任何有用的事情。

嗯,我有没有提到这是肮脏的黑客?弗洛里安建议的绝对是一种更清洁的方式。

【讨论】:

  • 对于主包和子包 foo 和 bar, %(summary) 或 %group 始终保存定义的最新摘要,无论您是安装其中一个子包还是主包 - 所以对区分它们。
猜你喜欢
  • 2015-09-03
  • 1970-01-01
  • 2012-05-01
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
相关资源
最近更新 更多