Files
fluffy-pancake/build

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

# 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

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