179 lines
5.4 KiB
Markdown
179 lines
5.4 KiB
Markdown
# 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.
|
|
|
|
Ziel ist ein Paket, das auf `Debian 13+` sowie `Ubuntu 24.04` bis `26.x`
|
|
installierbar bleibt.
|
|
|
|
## Was gebaut wird
|
|
|
|
- Paketname: `mesa-git`
|
|
- Installationspfad: `/opt/mesa-git`
|
|
- Wrapper: `/usr/bin/mesa-git-env`
|
|
- Ausgabe: `mesa-git_<version>_amd64.deb`
|
|
- Versionsschema: `<mesa-version>+r<mesa-commit-count>.<mesa-sha>-<debian-revision>`
|
|
|
|
## 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.
|
|
|
|
Gebaut wird absichtlich gegen `Ubuntu 24.04` als älteste unterstützte
|
|
Ubuntu-Basis. Zusätzlich bündelt das Paket ausgewählte Laufzeitbibliotheken
|
|
unterhalb von `/opt/mesa-git`, damit neuere Mesa-Builds auch auf leicht
|
|
abweichenden Debian-/Ubuntu-Systemständen starten können.
|
|
|
|
## 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.
|
|
|
|
Wichtig: Prüfungen für die isolierte Installation sollten ebenfalls über
|
|
`mesa-git-env` laufen. Ein rohes `ldd` direkt auf Bibliotheken unter
|
|
`/opt/mesa-git` kann sonst fälschlich fehlende Abhängigkeiten zeigen, obwohl
|
|
der Wrapper die Laufzeitpfade korrekt setzt.
|
|
|
|
## Lokaler Test
|
|
|
|
Mit installierten Build-Abhängigkeiten:
|
|
|
|
```bash
|
|
./scripts/build-mesa-opt.sh
|
|
```
|
|
|
|
Für einen sauberen Kompatibilitätstest lohnt sich ein isolierter Container oder
|
|
eine `distrobox` mit eigenem temporären `HOME`, damit Build-Artefakte,
|
|
Paketquellen und Caches danach vollständig wieder entfernt werden können.
|
|
|
|
## Anpassen
|
|
|
|
Die wichtigsten Schalter liegen in `config/mesa-opt.conf`:
|
|
|
|
- `UPSTREAM_GIT_REF`
|
|
- `INSTALL_PREFIX`
|
|
- `PLATFORMS`
|
|
- `GALLIUM_DRIVERS`
|
|
- `VULKAN_DRIVERS`
|
|
- `VULKAN_LAYERS`
|