what does these two fields of package info really mean?

using CentOS 6.8, when I type yum install tcpdump, system outputs:

Package 14:tcpdump-4.0.0-11.20090921gitdf3cb4.2.el6.x86_64 already installed and latest version

This long piece of string didn't help, to get more information, I typed yum info tcpdump, which returned following:

Name        : tcpdump
Arch        : x86_64
Epoch       : 14
Version     : 4.0.0
Release     : 11.20090921gitdf3cb4.2.el6
Size        : 818 k
Repo        : installed
From repo   : base
... bla bla ...

it divided the original package name string to several fields, What I am interested in are these two fields: Epoch Release.

  • What is Epoch? some info here, but not very enlightening
  • How is Release field (11.20090921gitdf3cb4.2.el6) named? what is the convention?

Solution 1:

For quite long reading see: https://fedoraproject.org/wiki/Packaging:Versioning

Epoch is used very rarely. When not defined it is set to 0 and not printed. Epoch is used to bridge gaps in naming. E.g upstream has project foo and have version 2009 and suddenly they decide to change the version and next version will be 10. And now your upgrade path should be from foo-2009 to foo-10, but rpm treats foo-2009 > foo-10 and will not upgrade it. So maintainer has to bump epoch and rpm will compare foo-2009 == 0:foo-2009 < 1:foo-10.

Release should start with 1 and every time you release new package - but with the same tar.gz of the same version - you should increase release. This can be change in post install scriptlet. Change of run-time requirement. Rebuild because of change in ABI of required library. Or because maintaner add patch. Usually fixing some security reason. The format of release field is not standardizes so you can only guess why maintainer used this format. And in fact you do not need to guess as you can read the changelog of rpm, where the change should be described.