Local RPM packaging for AlmaLinux/Fedora-family systems: one spec file per package, each built reproducibly from the pristine upstream source. This repo contains the packaging sources only — no binaries, no tarballs, no build output — so it clones fast and stays auditable.
Why it exists
- Packages that matter to the maintainer aren't (or aren't current) in the distro repos, or should be built exactly the same way every time.
- Each spec builds against the official upstream tarball (or crate/vendor archive it declares), so the resulting RPM is functionally what upstream releases — just packaged for this system.
- Built RPMs are installed on the local machine; the specs here are the record of how each one was produced.
What's inside
SPECS/ the .spec files — the heart of the repo
SOURCES/ files a spec ships as SourceN (helper scripts, patches).
Upstream tarballs are placed here before a build but ignored.
.fossil-settings/ignore-glob what fossil never commits: any *.tar.*,
plus BUILD/, BUILDROOT/, RPMS/, SRPMS/
Any file in SOURCES/ that IS tracked exists only because some spec
references it as SourceN and it cannot be re-fetched from upstream —
typically a helper script invoked during %build, or a patch. Everything
else (working dirs, tarballs) is re-creatable and deliberately not versioned.
To see which packages are currently packaged, check the specs:
ls SPECS/
rpm -q --qf '%{NAME} %{VERSION}\n' $(ls SPECS/ | sed 's/\.spec$//') 2>/dev/null
Reproducing a build
Requirements: rpm-build installed, plus whatever a spec's BuildRequires:
lines name (dnf will list anything missing on the first run — install it and
re-run; that's normal).
# 1. Fetch a spec's declared sources into SOURCES/. Read the SourceN URLs
# out of the spec itself — don't hardcode package names here.
grep -E '^Source[0-9]' SPECS/<name>.spec
# 2. Build binary + source RPM from this checkout
rpmbuild -ba \
--define '_topdir <path to this checkout>' \
SPECS/<name>.spec
_topdir must be passed explicitly on the rpmbuild command line; exporting
it as an environment variable does not work — environment variables do not
override ~/.rpmmacros.
- Verify before installing:
rpm -K RPMS/*/<name>-<version>-*.rpm # digest/signature check
rpm -qlp RPMS/*/<name>-<version>-*.rpm # confirm the file list
sudo dnf install RPMS/*/<name>-<version>-*.rpm
<name> --version # exercise the shipped binary
Changelog conventions
Each spec carries its own RPM %changelog — one entry per release bump
describing what changed in the packaging (not upstream). Signed entries
in the maintainer's standard format; match whatever existing specs use.