Vollautomatisches Unattended-Install-Framework für Fedora Linux mit interaktivem CLI-Konfigurator.
Anaconda-Kickstart + Provisioning-RPM werden direkt in die Fedora-Netinstall-ISO eingebettet — einmal dd auf den USB-Stick, fertig.
Das mitgelieferte fedora-autoinstall CLI-Tool ermöglicht visuelle Konfiguration ohne XML-Kenntnisse.
Es durchsucht DNF-Repos, Flathub und COPR gleichzeitig und zeigt Kategorien, Beschreibungen und bereits hinzugefügte Pakete.
git clone https://github.com/sijadev/fedora-autoinstall.git
cd fedora-autoinstall
make install # Python venv + Abhängigkeiten
pip install -e cli/ # CLI installierenfedora-autoinstall search "obs studio"Suche 'obs studio'...
┌──┬─┬─────────┬──────────────┬─────────────────────────────────────┬────────────────────┐
│ │#│ Quelle │ Kategorie │ Name │ Beschreibung │
├──┼─┼─────────┼──────────────┼─────────────────────────────────────┼────────────────────┤
│ │1│ dnf │ Anwendung │ obs-studio │ Free, open source… │
│ │2│ flatpak │ Audio/Video │ com.obsproject.Studio │ Live streaming and…│
│ │3│ copr │ Community-P… │ nicholasstephan/obs-studio-stable │ OBS Studio stable │
└──┴─┴─────────┴──────────────┴─────────────────────────────────────┴────────────────────┘
Quellen: DNF (Fedora-Repos) · Flatpak (Flathub) · COPR (Community)
Kategorien: Anwendung · Bibliothek · Entwicklung · Plugin/Addon · System/Treiber · Audio/Video · Schriftart · Extension · Spiel · Werkzeug
fedora-autoinstall add "bitwig"Suche 'bitwig'...
┌──┬─┬─────────┬──────────────┬────────────────────────┬──────────────────────────────┐
│✓ │1│ copr │ Community-P… │ flacks/bitwig-studio │ Bitwig Studio (flacks) │
│ │2│ flatpak │ Audio/Video │ com.bitwig.BitwigStudio│ Professional DAW │
└──┴─┴─────────┴──────────────┴────────────────────────┴──────────────────────────────┘
Nummer auswählen (oder q zum Abbrechen) [1]:
- ✓ markiert bereits hinzugefügte Pakete
- Beim erneuten Auswählen eines ✓-Pakets: Entfernen-Bestätigung
- Unterstützt DNF-Pakete, Flatpak-Apps und COPR-Repos
fedora-autoinstall listKonfiguration: example.xml
Pakete (9)
DNF-Pakete (7)
• git
• curl
• python3 ...
GNOME Extensions (3)
• user-theme@gnome-shell-extensions.gcampax.github.com
• dash-to-dock@micxgx.gmail.com
• blur-my-shell@aunetx
Theme & Shell
WhiteSur aktiv
GTK: -c Dark
Icons: -dark
Wallpaper: —
Oh My Bash aktiv Theme: modern
fedora-autoinstall remove obs-studio
# oder via add (toggle): nochmals auswählen → Entfernen-Bestätigungfedora-autoinstall build # Kickstart generieren + ISO bauen
fedora-autoinstall write /dev/diskN # ISO auf USB schreibenfedora-autoinstall statusConfig: ✓ config/example.xml
Kickstart: ✓ kickstart/fedora-full.ks
ISO: ✓ fedora-autoinstall-x86_64-43-1.6.iso (1118 MB)
RPM: ✓ fedora-autoinstall-1.0-1.fc43.noarch.rpm
| Befehl | Beschreibung |
|---|---|
search <query> |
Pakete in DNF + Flathub + COPR suchen |
add <query> |
Suchen, auswählen und zur Config hinzufügen (Toggle) |
list |
Alle konfigurierten Pakete + Theme anzeigen |
remove <name> |
Paket aus der Config entfernen |
build |
Kickstart generieren + ISO bauen |
write <device> |
ISO auf USB schreiben |
status |
Projektstatus anzeigen |
make build-iso → ISO bauen (RPM + Kickstart eingebettet)
make write-iso DEVICE=… → auf USB-Stick schreiben
→ Stick einstecken → UEFI → Anaconda startet automatisch
| Was | Bedingung |
|---|---|
| Host-Betriebssystem | macOS oder Linux |
| Podman | für RPM- und ISO-Build im Container |
| Python 3.11+ | für CLI und Tests |
| UEFI-Zielsystem | erforderlich (Legacy-BIOS nicht unterstützt) |
| USB-Stick | ≥ 2 GB, wird komplett überschrieben |
Fedora-Netinstall-ISO (einmalig herunterladen und nach iso/ legen):
→ https://fedoraproject.org/everything/download
fedora-autoinstall/
│
├── cli/ # Python CLI-Paket
│ ├── fedora_autoinstall/
│ │ ├── main.py # CLI-Befehle (search, add, list, ...)
│ │ ├── search.py # Paketsuche: DNF + Flathub + COPR
│ │ ├── config.py # XML-Config lesen/schreiben
│ │ └── models.py # Datenmodelle + Kategorie-Erkennung
│ ├── tests/
│ │ └── test_search.py # 32 Unit-Tests
│ └── pyproject.toml
│
├── config/
│ ├── example.xml # Referenz-Konfiguration
│ └── schema.xsd # XML-Schema
│
├── kickstart/
│ ├── fedora-full.ks # Vollinstallation (aus XML generiert)
│ ├── fedora-headless-vllm.ks
│ ├── fedora-theme-bash.ks
│ └── fedora-vm.ks # VM Smoke-Test
│
├── lib/
│ └── xml2ks.py # XML → Kickstart Konverter
│
├── rpm/
│ ├── fedora-autoinstall.spec
│ └── repodata/
│
├── scripts/
│ ├── first-boot.sh # Systemweite Provisionierung (root)
│ ├── first-login.sh # User-Provisionierung
│ ├── welcome-dialog.sh # GNOME Profil-Auswahl-Dialog
│ ├── fedora-provision.sh # Profil nachträglich anwenden
│ └── music-analyzer.py # MIDI/MP3-Analyse mit Qwen3 + Qwen2.5-Omni
│
├── tools/
│ ├── build-rpm.sh # RPM bauen (Podman)
│ ├── build-iso.sh # ISO patchen (mkksiso + EFI-Fix)
│ └── patch_iso.py # EFI-FAT-Partition patchen
│
└── tests/
├── test_xml2ks.py
├── test_kickstart_validator.py
├── test_anaconda_vm.py # VM E2E Smoke-Test (QEMU)
└── test_systemd_units.py
make build-iso nutzt mkksiso um aus der Fedora-Netinstall-ISO eine angepasste ISO zu erzeugen:
Fedora-Everything-netinst-x86_64-43.iso
+ kickstart/fedora-full.ks → eingebettet (automatisch geladen beim Boot)
+ rpm/ → eingebettet als lokales DNF-Repo
+ GRUB: inst.ks=... inst.addrepo=... set default="0"
+ EFI-FAT-Partition gepatcht (inst.ks auch für UEFI-Boot)
= fedora-autoinstall-x86_64-43.iso
USB-Stick (ISO) → UEFI → GRUB → Anaconda
│
├─ inst.ks=hd:LABEL=...:/fedora-full.ks (Kickstart eingebettet)
├─ inst.addrepo=...,file:///run/install/repo/rpm
│
├─ %pre: Ziel-Disk automatisch erkennen (NVMe/SATA/BIOS+GPT)
├─ Btrfs: EFI + /boot + @ + @home Subvolumes
├─ %packages: fedora-autoinstall RPM aus lokalem Repo
└─ %post: provision.env + GNOME-Autostart schreiben
Nach der Installation: System bootet → fedora-first-boot.service läuft → GNOME startet.
fedora-first-boot.service führt scripts/first-boot.sh aus:
- DNF-Optimierungen + System-Update
- CachyOS-Kernel (BORE-Scheduler)
- NVIDIA Open Driver + CUDA
- Podman + NVIDIA Container Toolkit + vLLM Quadlet
- CPU-Tuning:
tuned,scx_bpfland,sysctl, Hugepages - WhiteSur GRUB-Theme
- Timeshift + btrfs-assistant
- zram, irqbalance, ananicy-cpp
- AMD Ryzen P-State
| Profil | Tuned | Governor | Aktivierung |
|---|---|---|---|
| Default | throughput-performance |
schedutil |
systemd-Service |
| Bitwig | latency-performance |
performance |
automatisch bei Start |
scripts/first-login.sh führt aus:
- Flathub + Extension Manager
- GNOME Extensions (Dash-to-Dock, Blur-my-Shell, Caffeine, AppIndicator)
- WhiteSur GTK/Icons/Wallpaper/Cursor
- Oh My Bash
- Bitwig Studio (Flatpak) + Audio-optimierter Launcher
Kickstart nicht manuell editieren — über CLI oder XML:
# Via CLI (empfohlen)
fedora-autoinstall add "neovim"
fedora-autoinstall add "com.obsproject.Studio"
# Via XML direkt
python3 lib/xml2ks.py --config config/example.xml --output kickstart/fedora-full.ksopenssl passwd -6 meinPasswort
# → in config/example.xml unter <user/password_hash> eintragenmake test # Unit-Tests (xml2ks, Kickstart, CLI-Suche, systemd)
make vm-gui-iso # VM Smoke-Test — vollständige Installation in QEMUUrsache: ISO nicht korrekt auf USB geschrieben (EFI-FAT nicht gepatcht).
Fix: make write-iso DEVICE=/dev/diskN erneut ausführen.
macOS: Terminal braucht Full Disk Access (Systemeinstellungen → Datenschutz).
Fix: make build-iso → RPM und Repodata werden aktualisiert.
Fix: Im GRUB-Menü e → linux-Zeile: inst.disk=nvme0n1 anhängen.
first-boot.sh fällt automatisch auf Fedora-Standardkernel zurück.
Manuell: sudo akmods --force && sudo dracut --regenerate-all --force
| Komponente | Details |
|---|---|
| CPU | AMD Ryzen (optimiert) oder Intel |
| GPU | NVIDIA Turing (RTX 20xx)+ inkl. Blackwell (RTX 50xx) |
| Boot | UEFI |
| Dateisystem | Btrfs mit @ / @home Subvolumes |