Skip to content

upload-nexus: flat apt/yum repositories cannot hold packages for more than one distribution release #600

Description

@shiptux

Problem

The shared upload-nexus.yml publishes every deb into a single flagos-apt-hosted (one anonymous suite, Codename: flagos-apt-hosted, Architectures: amd64) and every rpm into the root of flagos-yum-hosted. That works while the only content is one package built on one base image, but FEP-0019 Wave 1 (flagos-ai/community#59) is about to publish packages for several distributions into it, and two of them are already incompatible with each other:

package built on binary-compatible with
libtriton-jit 0.1.0-1 (on Nexus today) ubuntu 24.04 / CUDA 12.6 / py3.12 24.04 only (glibc 2.38, libpython3.12)
libtriton_jit#61 output ubuntu 22.04 / CUDA 12.8 / py3.12 (FEP DEB matrix) 22.04 and 24.04
FlagTree deb (#607/#794) ubuntu 24.04 24.04 only — 22.04 fails on GLIBC_2.38 (FlagTree#798)
FlagCX / FlagSparse / FlagAttention rpm fedora 43 and openEuler 24.03 (.fc43 / .oe2403) one repodata would list both; dnf on openEuler sees fc43 packages with unsatisfiable deps
python3-flag-* (Architecture: all) any any deb-based distro

Native packages carry five ABI dimensions at once (glibc, libstdc++ CXX11 ABI, libpython3.X minor, CUDA major, torch version), so a flat repository cannot stay installable once more than one build target is published. For rpm the problem shows up as a single mixed repodata; for deb as one suite that silently mixes glibc floors.

How the same problem is handled elsewhere

Every vendor that ships packages linking distro libraries splits by distribution release: Docker CE (linux/ubuntu/dists/<codename>, linux/<centos|fedora|rocky>/<ver>/<arch>), NVIDIA CUDA (repos/ubuntu2204, debian13, rhel9, fedora43, kylin10, …), Microsoft (ubuntu/22.04/prod, rhel/9/prod), ROCm, PGDG. Only self-contained /opt stacks (Intel oneAPI, Chrome) use one repo for all.

What I'd like to discuss (needs a Nexus administrator — I only have upload rights)

  1. apt: one hosted repository per target distribution release, since a Nexus apt-hosted repo has exactly one distribution and apt has no group repos. Something like flagos-apt-ubuntu2204, flagos-apt-ubuntu2404, flagos-apt-debian13, later openKylin / deepin codenames. Architecture: all Python packages would be uploaded to each of them (one line in sources.list per user, no cross-repo pinning).
  2. yum: keep one flagos-yum-hosted but set Repodata Depth so that <distro>/<ver>/<arch>/ (e.g. openeuler/24.03/x86_64, fedora/43/x86_64, rocky/9/x86_64) each get their own repodata.
  3. How this composes with the existing per-vendor repositories (flagos-apt-nvidia, flagos-apt-mthreads, flagos-pypi-<vendor>): vendor × distro (flagos-apt-nvidia-ubuntu2204), or vendor as a component inside a per-distro repo, or keep vendor repos for SDK mirrors only and put FlagOS packages under the distro axis. I don't have a strong preference; whichever matches how the vendor repos are meant to be used.
  4. Once the repositories exist, I'll update upload-nexus.yml to route by build target — the build workflows already encode it in the artifact name / rpm %{?dist} (e.g. rpm-packages-rocky9-cuda1260, ubuntu2204-cuda1280, .oe2403) — and add a per-caller input for the deb suite. Until then, publishing into the flat repos is fine for Architecture: all packages and for one agreed native target, and wrong for anything else.

Related: artifacts in the component repositories expire after 7 days, so a tag whose upload failed cannot be re-published without rebuilding; worth aligning retention-days or uploading straight from the build job.

cc @tengqm — happy to write up whichever option you prefer and prepare the workflow change; the four repositories that will start publishing are wired in FlagAttention#53, FlagSparse#49, FlagTree#1063, FlagCX#561.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions