RPM 中的 VCS 版本存储在哪里?

qui*_*tin 5 vcs rpm git

我们使用 Git 作为我们的 VCS 和 RPM 进行打包。我想存储构建包的 Git 哈希,但我不确定最合适的位置。

RPM有许多可用的标签,但我没有看到 VCS 版本的任何标签(也许浏览过它?)。

我对添加自定义标签持怀疑态度,仅查看 50,000 英尺的高度。

一种感觉相当 hacky 的解决方案是将 Git 哈希值放在描述字段中。目前我们还没有将它用于其他任何用途,但是哇,这感觉很丑陋。

那么,在 RPM 中存储 VCS 版本的最合适位置是哪里?

Cra*_*ger 5

RPM 实际上有一个记录很少的VCS标签。

它似乎没有任何关于其使用的指南,但它存在并且受到支持。

cat > test.spec <<'__END__'
Name: foo
Version: 1
Summary: foo
License: None
Release: 1
VCS: git:repo=my-repo:branch=my-branch:sha=1234deadbeef

%description
foo
__END__


$ rpmspec -q test.spec --qf "%{VCS}\n"
git:repo=my-repo:branch=my-branch:sha=1234deadbeef
Run Code Online (Sandbox Code Playgroud)

它似乎仅限于单个解析令牌。还是有用的。我没有找到任何关于它的明确定义的格式或结构的文档,并且它的采用是有限的。在我的 Fedora 32 系统上,我发现两个使用它的软件包,具有不同的格式:

$ rpm -qa --qf '%{Name} %{VCS}\n' |grep -v '(none)'
bcache-tools https://github.com/g2p/bcache-tools.git
libcue scm:git:https://github.com/lipnitsk/libcue.git
$
Run Code Online (Sandbox Code Playgroud)

坦率地说,rpm 不让我们能够注入自定义标签信息,这真是太遗憾了。我想记录 Jenkins 构建 ID 和作业名称、git 提交哈希以及 git 分支或标签,但并不真正希望它们出现在变更日志中。

我可以在带有X-BS-foo标签的 debs 中执行此操作。


您可以查看允许的 rpm 标签列表rpm --querytags

DISTURL标签似乎被保留用于其他用途,但可能是一个候选者。

还有URL;您可以选择在其中嵌入 SCM 信息,并进行重定向,以便在浏览器访问时将 URL 带到合理的位置。


您可能会看到对支持自定义标签的“rpm5”的引用。这似乎是 rpm 的死叉,而不是大多数主要发行版上使用的 rpm.org 发行版。


Mic*_*ton 4

Fedora(很少有 RHEL)将此信息放在 Release 标签中

例如:

Name:           mypackage
Version:        0.0.1
Release:        20140114git0abcdef
Run Code Online (Sandbox Code Playgroud)