Skip to content

feat: add linuxfabrik-release, the repository setup package - #36

Merged
markuslf merged 1 commit into
mainfrom
feat/linuxfabrik-release
Oct 25, 2026
Merged

markuslf merged 1 commit into
mainfrom
feat/linuxfabrik-release

Conversation

@markuslf

Copy link
Copy Markdown
Member

Adds linuxfabrik-release, the counterpart to epel-release for repo.linuxfabrik.ch (GitLab 001/project-big-picture #1257, #650 step 2.2).

What it does

  • Installs the repository configuration (release channel enabled, testing configured but disabled) and the Linuxfabrik signing key (1017377FDD935D369CCD0C59F27988EC39D17A78).
  • RPM: /etc/yum.repos.d/linuxfabrik.repo (EL, Fedora) or /etc/zypp/repos.d/linuxfabrik.repo (SLES/Leap), key in /etc/pki/rpm-gpg/, gpgcheck=1 and repo_gpgcheck=1. EL gets the major version at build time (EL 8 has no $releasever_major) and an epel-release style Requires on redhat-release of that major.
  • DEB: deb822 /etc/apt/sources.list.d/linuxfabrik.sources with Signed-By: /usr/share/keyrings/linuxfabrik.gpg, testing stanza Enabled: no.
  • Targets: RHEL 8-10, Fedora 44, SLES/Leap 15 and 16, Debian 12/13, Ubuntu 22.04-26.04. Debian 11 is out: its security pool returns 404.
  • publish.sh keeps bootstrap links linuxfabrik-release-latest-<distro>.<ext> in the webroot (EPEL's epel-release-latest-10.noarch.rpm model) and replays releases oldest first. Usage is documented in the README.

The SUSE repository path is sle/<version>/ instead of sles/ from #1252: one path for SLES, SLED and openSUSE Leap, as the monitoring-plugins repository does today.

Fixes found on the way

  • create-rpm.sh: pin %_topdir, SLES builds in /usr/src/packages otherwise; give SLES builds .sle15 / .sle16, since SLES has no %{dist} and both releases would share a file name.
  • create-package.sh: PKG_SOURCE_DIR for packages without an upstream.
  • publish.sh: gzip repository metadata; libdnf on Rocky 8 aborts on the zstd default of createrepo_c 1.x.

Tested

On fresh VMs cloned from the templates of all 11 targets (Leap 15.5/16.0 standing in for SLES) against a Rocky 10 test server set up like 001-p-repo51 (freight, Apache with TLS for repo.linuxfabrik.ch):

  • bootstrap through the -latest- link, metadata refresh with signature checks, reinstall from the repository; glances from testing on Rocky 10, Fedora 44, Debian 13 and Ubuntu 24.04
  • publish.sh against the real GitHub release glances-4.5.8-1 with real gh attestation verify
  • negative: dnf rejects metadata signed with another key ("Bad GPG signature"), zypper skips a repository whose repomd.xml.asc does not match

Merging this changes packages/linuxfabrik-release/ and creates the prerelease linuxfabrik-release-1-1.

Like epel-release: the repository configuration for repo.linuxfabrik.ch
(release enabled, testing disabled) and the signing key, built per
distro for RHEL 8-10, Fedora 44, SLES/Leap 15 and 16, Debian 12/13 and
Ubuntu 22.04-26.04. publish.sh keeps linuxfabrik-release-latest-<distro>
links in the webroot for the first install, and replays releases oldest
first.

The SUSE path is sle/<version>/ instead of sles/ from GitLab
001/project-big-picture#1252: one path serves SLES, SLED and openSUSE
Leap, as repo.linuxfabrik.ch/monitoring-plugins/sle/ does today.

Build fixes found on the way: SLES builds in /usr/src/packages unless
%_topdir is pinned; SLES has no %{dist}, so its builds get .sle15 and
.sle16; packages without an upstream take their source from
PKG_SOURCE_DIR. publish.sh writes gzip metadata, because libdnf on
Rocky 8 aborts on the zstd default of createrepo_c 1.x.

Tested on fresh VMs of all 11 targets (Leap 15.5/16.0 for SLE) against
a Rocky 10 test server with real GitHub attestations; zypper and dnf
reject bad signatures.
@markuslf
markuslf merged commit aa6b6e9 into main Oct 25, 2026
26 checks passed
@markuslf
markuslf deleted the feat/linuxfabrik-release branch October 25, 2026 11:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant