# Build Scripts This directory contains build scripts that run during image creation via bind mounts in the Containerfile. ## How It Works Scripts are named with a number prefix and run in ascending order during the container build process. Each script is bind-mounted into the build container and executed individually. ## Included Scripts - **`10-repos.sh`** - RPM Fusion (frei + nonfree) + Terra-Repo (fuer noctalia-greeter) - **`20-remove-packages.sh`** - Guard-Layer: entfernt unerwuenschte Pakete, falls vorhanden (auf fedora-bootc-Basis meist No-Op) - **`20-desktop-labwc.sh`** - labwc-Compositor, XWayland, kanshi, Portale, Pipewire, Docking-Tools (bolt), PolicyKit, Fonts - **`21-greetd.sh`** - greetd + tuigreet-Fallback + Noctalia-Greeter, SDDM/GDM aus, graphical.target - **`22-noctalia.sh`** - Noctalia Shell v5 aus den Fedora-Repos - **`30-virt.sh`** - Virtualisierungstools, Distrobox, Toolbox, Micro, etc. - **`40-multimedia.sh`** - Mesa Freeworld, Codecs, FFmpeg, GStreamer, Intel-Media-Treiber - **`50-prepare-flatpak-for-bazaar.sh`** - Laedt Flathub-Repo-Definition fuer Bazaar - **`99-cleanup.sh`** - Finale Bereinigung (autoremove, dnf clean, tmp/log-Caches) ## Hilfsscript - **`copr-helpers.sh`** - Funktionen fuer sichere COPR-Repo-Installation (enable, install, disable) ## Erstellung eigener Scripts ```bash # Neues Script mit nummeriertem Prefix erstellen # Die Number bestimmt die Ausfuehrungsreihenfolge #!/usr/bin/bash set -eoux pipefail echo "Installiere Pakete..." dnf5 install -y --allowerasing some-package ``` ### Best Practices - **Beschreibende Namen**: `25-nvidia.sh` statt `25-stuff.sh` - **Ein Script pro Zweck**: Einfacher zu debuggen und zu warten - **Aufraeumen**: Temporaere Dateien entfernen, temporaere Repos deaktivieren - **Inkrementell testen**: Ein Script nach dem anderen hinzufuegen - **Kommentare**: Das zukuenftige Ich wird es schaetzen ### Script deaktivieren Ohne Loeschen deaktivieren: - Umbenennen: `20-script.sh` → `20-script.sh.disabled` - Execute-Recht entfernen: `chmod -x build/20-script.sh` ## Ausfuehrung im Containerfile ```dockerfile RUN --mount=type=bind,from=ctx,source=/build/10-repos.sh,target=/tmp/10-repos.sh \ --mount=type=cache,dst=/var/cache \ --mount=type=tmpfs,dst=/tmp \ bash /tmp/10-repos.sh && dnf5 clean all ``` ## Hinweise - Scripts laufen als root waehrend des Builds - Build-Kontext ist ueber Bind-Mounts verfuegbar - Nutze `dnf5` fuer Paketverwaltung (nicht dnf oder yum) - Immer `-y` Flag fuer nicht-interaktive Installationen verwenden - Cache-Mounts (`--mount=type=cache`) verhindern Neudownload bei Aenderungen