Wo wird die VCS-Version in RPM gespeichert?

Wo wird die VCS-Version in RPM gespeichert?

Wir verwenden Git als unser VCS und RPMs zum Verpacken. Ich möchte den Git-Hash speichern, aus dem ein Paket erstellt wurde, bin mir aber nicht sicher, wo das am besten geeignet ist.

Es gibt eine Reihe vonStichwortefür ein RPM verfügbar, ich sehe jedoch keine für eine VCS-Version (vielleicht habe ich es überflogen?).

Ich bin ziemlich misstrauisch gegenüberHinzufügen eines benutzerdefinierten Tags, nur ein Blick auf die 50.000-Fuß-Ebene.

Eine Lösung, die sich ziemlich hackig anfühlt, wäre, den Git-Hash in dasBeschreibungFeld. Wir verwenden es derzeit für nichts anderes, aber wow, das sieht einfach hässlich aus.

Was ist also der am besten geeignete Ort zum Speichern einer VCS-Version in einem RPM?

Antwort1

Fedora (und sehr selten RHEL)Platzieren Sie diese Informationen im Release-Tag.

Zum Beispiel:

Name:           mypackage
Version:        0.0.1
Release:        20140114git0abcdef

Antwort2

RPM hat tatsächlich ein schlecht dokumentiertes VCSTag.

Es scheint keinerlei Richtlinien für die Verwendung zu geben, aber es existiert und wird unterstützt.

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

Es scheint auf ein einziges Parse-Token beschränkt zu sein. Trotzdem nützlich. Ich habe keine Dokumentation zu einem gut definierten Format oder einer gut definierten Struktur dafür gefunden und seine Verwendung ist begrenzt. Auf meinem Fedora 32-System habe ich zwei Pakete gefunden, die es verwenden, mit unterschiedlichen Formaten:

$ 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
$

Ehrlich gesagt ist es wirklich schade, dass RPM uns nicht die Möglichkeit gibt, benutzerdefinierte Tag-Informationen einzufügen. Ich möchte die Jenkins-Build-ID und den Jobnamen, den Git-Commit-Hash und den Git-Branch oder -Tag aufzeichnen, möchte sie aber nicht wirklich im Änderungsprotokoll haben.

Ich kann dies in Debs mit X-BS-fooTags tun.


Sie können eine Liste der zulässigen RPM-Tags mit anzeigen rpm --querytags.

Das DISTURLEtikett scheintfür andere Verwendung reserviertkönnte aber ein Kandidat sein.

Es gibt auch URL; Sie könnten dort SCM-Informationen einbetten und eine Weiterleitung einrichten, die die URL an einen sinnvollen Ort führt, wenn sie über einen Browser aufgerufen wird.


Möglicherweise sehen Sie Verweise auf „rpm5“, das benutzerdefinierte Tags unterstützt. Dies scheint ein toter Fork von rpm zu sein, nicht die rpm.org-Distribution, die bei den meisten großen Distributionen verwendet wird.

Antwort3

Ich glaube nicht, dass Sie daran gehindert werden, alle erforderlichen Informationen in einer VERSION-Datei im Docs-Verzeichnis zu speichern. Der Pfad zu dieser Datei könnte dem VCS-Tag hinzugefügt werden (obwohl ich das nicht getestet habe).

verwandte Informationen