What is the ecosystem around rpm?

two types of rpm: source and binary

src.rpm: tarball, build instruction, etc

rpm packages are signed; one can take signature from one rpm to another, as long as other part is the same

also, for comparing one can strip signature

package itself is reproducible already, patches already included upstream:

  • %_hostname macro
  • $SOURCE_DATE_EPOCH as build date
  • use topmost changelog entry as $SOURCE_DATE_EPOCH (%source_date_epoch_from_changelog macro)
  • clamp file timestamps to $SOURCE_DATE_EPOCH (%source_date_epoch_from_changelog macro)
  • size of directories included in cpio inside of rpm -> zero
  • ghost files (files owned by package, but not included in actual archive),

rpm include hash of such file (from build environment) -> fixed; file size is still included (it is a feature)

rpm include compiled python files, which contains timestamp of source files;

clamping mtime (of source files) may in some cases break this - if mtime does

not match here, python recompile the file each run

PEP 552 - use source hash instead of mtime

openSUSE: open build service, produce “buildenv file”, including hashes of build inputs

osc - client tool to build package locally; this tool is also packaged for Debian

build path doesn’t matter, it is constant (chroot env)

interesting topic: use reprotest for rpm packages

reproducibility testing in openSUSE: not automatically, but there are manual results

further tasks:

  • document current status, environment

Follow us on Twitter @ReproBuilds, Mastodon @reproducible_builds@fosstodon.org & Reddit and please consider making a donation. • Content licensed under CC BY-SA 4.0, style licensed under MIT. Templates and styles based on the Tor Styleguide. Logos and trademarks belong to their respective owners. • Patches for this website welcome via our Git repository (instructions) or via our mailing list. • Full contact info