personal_rpm_repo
Not logged in

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

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.

  1. 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.