# mesa-repo Dieses Repo baut per Gitea Actions ein eigenständiges `mesa-git`-Paket als `.deb`. Das Paket installiert Mesa separat unter `/opt/mesa-git`, damit es parallel zur System-Mesa genutzt werden kann. ## Was gebaut wird - Paketname: `mesa-git` - Installationspfad: `/opt/mesa-git` - Wrapper: `/usr/bin/mesa-git-env` - Ausgabe: `mesa-git__amd64.deb` - Versionsschema: `+r.-` ## Build-Profil Standardmäßig baut das Repo Mesa für: - `x11` - `wayland` Und mit diesem Treiberprofil: - AMD: `radeonsi`, `r300`, `r600` - Intel: `iris`, `crocus` - NVIDIA nouveau: `nouveau` - Fallback: `zink`, `llvmpipe`, `softpipe` - Vulkan: `amd`, `intel`, `intel_hasvk`, `nouveau`, `swrast` Das Profil ist damit besser für Steam, Proton und Xwayland geeignet als ein hartes Wayland-only-Build. Zusammen mit einem aktuellen `libdrm`-Snapshot, damit neue Mesa-Stände nicht an zu alten Distributionspaketen scheitern. ## Ablauf 1. Gitea Actions startet auf dem `act_runner`. 2. `scripts/build-mesa-opt.sh` klont `libdrm` und Mesa direkt von Upstream. 3. `libdrm` wird zuerst gebaut und in das spätere Prefix vorbereitet. 4. Mesa wird danach mit Meson/Ninja gebaut. 5. Das Ergebnis wird als `.deb` paketiert. 6. Ein Gitea Release wird erstellt oder aktualisiert. 7. Das `.deb` wird als Release-Asset hochgeladen. 8. Die Release-Notes werden automatisch aus der Mesa-Upstream-History erzeugt. 9. Ein apt-kompatibler Repo-Baum wird auf den Branch `apt` veröffentlicht. ## Release-Notes Die Release-Notes werden automatisch erzeugt und enthalten: - eigene Repo-Commits für dieses Release - den verwendeten Mesa-Upstream-Commit - das gebaute Paket - die Mesa-Commits seit dem vorherigen `mesa-git`-Release Die beiden Bereiche werden getrennt dargestellt: - `Repo Changes` - `Mesa Upstream` Wenn kein vorheriger passender Release-Vergleich gefunden wird, nutzt der Workflow als Fallback die jüngsten Upstream-Commits. ## Trigger Der Workflow läuft bei: - manuellem Start per `workflow_dispatch` - automatischem Zeitplan alle 3 Tage Releases werden als normale Releases angelegt, nicht als Pre-Releases. ## APT-Einbindung Der Workflow veröffentlicht zusätzlich einen einfachen Debian-Repo-Baum auf dem Branch `apt`. Wichtig: APT braucht anonym erreichbare HTTP-Dateien wie `dists/stable/Release` und `pool/...deb`. Ein funktionierendes `git ls-remote` reicht dafür nicht aus. Auf dieser Gitea-Instanz war die bisher dokumentierte Raw-URL für anonyme HTTP-Clients nicht erreichbar und lieferte `404`. Genau daran scheitert dann `apt update` auf Ubuntu, obwohl der `apt`-Branch in Git existiert. Deshalb gilt: - nutze für Clients nur eine wirklich öffentlich erreichbare statische HTTP-URL - setze diese Basis-URL in `config/mesa-opt.conf` als `APT_PUBLIC_BASE_URL` - der Workflow prüft dann nach dem Publish, ob `Release`, `Packages` und das referenzierte `.deb` anonym abrufbar sind Beispiel für die Konfiguration: ```bash APT_SUITE="stable" APT_COMPONENT="main" APT_PUBLIC_BASE_URL="https://packages.example.tld/mesa-repo" ``` Die Einbindung auf dem Client sieht dann so aus: ```text deb [trusted=yes] https://packages.example.tld/mesa-repo stable main ``` Danach: ```bash sudo apt update sudo apt install mesa-git ``` Hinweis: - das Repo ist aktuell unsigniert - für APT wird deshalb hier `trusted=yes` verwendet - `scripts/verify-apt-repo.sh --remote` prüft, ob die öffentliche URL wirklich APT-tauglich ist - wenn du willst, kann ich als nächsten Schritt auch noch Release-Signierung mit GPG einbauen ## Wichtige Dateien - `config/mesa-opt.conf`: Paketname, Prefix, Plattformen und Treiberprofil - `scripts/build-mesa-opt.sh`: Build und Paketierung - `scripts/generate-release-notes.sh`: automatische Release-Notes aus Mesa-Commits - `scripts/generate-apt-repo.sh`: erzeugt den APT-Repo-Baum - `scripts/verify-apt-repo.sh`: prüft Repo-Struktur und optional den öffentlichen APT-Endpunkt - `.gitea/workflows/build.yml`: Gitea-Workflow ## Benutzung Nach der Installation kann das Paket über den Wrapper genutzt werden: ```bash mesa-git-env glxinfo mesa-git-env vkcube ``` Der Wrapper setzt die nötigen Mesa-Pfade für `LD_LIBRARY_PATH`, `LIBGL_DRIVERS_PATH`, `VK_LAYER_PATH` und `VK_ICD_FILENAMES`. Vorhandene Vulkan-ICDs aus dem Paket werden dabei automatisch eingesammelt. ## Lokaler Test Mit installierten Build-Abhängigkeiten: ```bash ./scripts/build-mesa-opt.sh ``` ## Anpassen Die wichtigsten Schalter liegen in `config/mesa-opt.conf`: - `UPSTREAM_GIT_REF` - `INSTALL_PREFIX` - `PLATFORMS` - `GALLIUM_DRIVERS` - `VULKAN_DRIVERS` - `VULKAN_LAYERS`