🚀 Guide: Custom Aurora NVIDIA-Image bauen

mit BlueBuild, sysusers, tmpfiles, Root-Passwort & Schweizer Tastatur Wir verwenden das Aurora NVIDIA-Open-Image (Universal Blue), das KDE Plasma, NVIDIA-Treiber und immutable bootc/OStree-Technologie enthält.

✅ Voraussetzungen

  • Linux with podman

  • GitHub Account

  • sudo-Rechte

Schritt 0: Podman mit Github anmelden

echo "DEIN_GITHUB_TOKEN" | sudo podman login ghcr.io -u DEIN_GITHUB_USERNAME --password-stdin
## Schritt 1: BlueBuild CLI installieren
podman run --pull always --rm ghcr.io/blue-build/cli:latest-installer | bash

Schritt 2: Projektstruktur

mkdir -p os-base/files
cd os-base

Schritt 3: Starship-Prompt konfigurieren

cat <<EOF > files/starship.toml
# Starship prompt config (mit OS-Anzeige)
add_newline = true
 
format = '[$os$all] '
 
[os]
format = '[$symbol$name]($style)'
style = "bold blue"
 
[character]
success_symbol = "[➜](bold green) "
error_symbol   = "[✗](bold red) "
EOF

Schritt 4: systemd-sysusers – Fedora User

cat <<'EOF' > files/fedora-user.sysusers
# systemd-sysusers: Login-User "fedora"
u fedora 1000 "Fedora User" /var/home/fedora /bin/bash
m fedora wheel
EOF

Schritt 5: systemd-tmpfiles – Home-Struktur

cat <<'EOF' > files/fedora-home.tmpfiles
d /var/home                 0755 root   root   -
d /var/home/fedora          0700 fedora fedora -
d /var/home/fedora/.config  0700 fedora fedora -
d /var/home/fedora/.cache   0700 fedora fedora -
EOF

🟦 Schritt 6: Tastaturlayout SCHWEIZ (ch)

Wir setzen dauerhaft:

  • Konsole → CH

  • X11/Wayland (KDE) → CH

  • System-wide locale → de_CH.UTF-8

6.1 vconsole.conf (TTY)

cat <<'EOF' > files/vconsole.conf
KEYMAP=ch
FONT=latarcyrheb-sun32
EOF

Wird nach /etc/vconsole.conf deployed.

6.2 X11 Keyboard Layout (KDE & Wayland)

cat <<'EOF' > files/00-keyboard.conf
Section "InputClass"
    Identifier "system-keyboard"
    MatchIsKeyboard "on"
    Option "XkbLayout" "ch"
    Option "XkbModel" "pc105"
    Option "XkbVariant" ""
EndSection
EOF

Nach /etc/X11/xorg.conf.d/00-keyboard.conf.

6.3 Systemweite Locale (de_CH.UTF-8)

cat <<'EOF' > files/locale.conf
LANG=de_CH.UTF-8
LC_TIME=de_CH.UTF-8
LC_MONETARY=de_CH.UTF-8
LC_NUMERIC=de_CH.UTF-8
LC_PAPER=de_CH.UTF-8
EOF

Nach /etc/locale.conf.

🟥 Schritt 7: Benutzer & Passwörter (Root + Fedora)

✔ Root aktivieren

Wir setzen im Build:

echo "root:root" | chpasswd
passwd -u root

✔ Fedora Passwort setzen (richtiger Weg)

Wir setzen kein Passwort im Build (weil der User erst beim Boot entsteht).
Stattdessen setzen wir das Passwort nach der ersten initialisation korrekt:

passwd -d fedora     # entfernt Pflicht für "current password"
passwd fedora        # setzt neues Passwort

→ Im VM-Boot einfach eingeben: fedora

🟩 Schritt 8: Vollständige recipe.yml

Hier ist die fertige, korrekte Datei:

---
name: os-base
description: Custom Aurora NVIDIA System mit Extras, Flatpaks & CH Keyboard
base-image: ghcr.io/ublue-os/aurora-nvidia-open
image-version: latest
 
modules:
  - type: dnf
    install:
      packages:
        - passwd
        - xorg-x11-drv-vmware
        - qemu-guest-agent
 
  - type: files
    files:
      - source: starship.toml
        destination: /usr/etc/starship.toml
 
      # user + home definition
      - source: fedora-user.sysusers
        destination: /usr/lib/sysusers.d/50-fedora.conf
      - source: fedora-home.tmpfiles
        destination: /usr/lib/tmpfiles.d/50-fedora-home.conf
 
      # keyboard + locale
      - source: vconsole.conf
        destination: /etc/vconsole.conf
      - source: 00-keyboard.conf
        destination: /etc/X11/xorg.conf.d/00-keyboard.conf
      - source: locale.conf
        destination: /etc/locale.conf
 
  - type: script
    snippets:
      # root login aktivieren
      - echo "root:root" | chpasswd
      - passwd -u root
      - echo "Customizations applied."
 
  - type: default-flatpaks
    configurations:
      - scope: system
        install:
          - com.brave.Browser
          - com.visualstudio.code
          - md.obsidian.Obsidian

🟩 Schritt 9: Build

touch cosign.pub cosign.key
bluebuild template recipe.yml -o Containerfile
sudo podman build -t os-base:latest .

🟩 Schritt 10: QCOW2 erzeugen

sudo podman run --rm --privileged \
  -v .:/output \
  -v /var/lib/containers/storage:/var/lib/containers/storage \
  quay.io/centos-bootc/bootc-image-builder:latest \
  --type qcow2 \
  --rootfs btrfs \
  localhost/os-base:latest

🟩 Schritt 11: Boot in QEMU

sudo qemu-system-x86_64 \
  -machine q35,accel=kvm \
  -cpu host \
  -m 4096 \
  -smp 4 \
  -drive file=qcow2/disk.qcow2,if=virtio,format=qcow2 \
  -device virtio-vga \
  -display sdl \
  -netdev user,id=net0 -device virtio-net-pci,netdev=net0 \
  -bios /usr/share/ovmf/OVMF.fd

Login:

  • root / root

  • fedora / (nach erstem Login setzen)


🎉 FERTIG — dein Image ist jetzt:

✔ Mit CH-Tastatur
✔ Mit systemd-sysusers User
✔ Mit persistentem /var/home
✔ Mit systemweiten Flatpaks
✔ Mit Root-Login
✔ Mit funktionierendem Fedora-User
✔ Perfekt bootc/Silverblue-konform


🛠️ Manchmal installieren flatpaks nach dem start nicht automatisch

  • Status 🔎:
    systemctl status system-flatpak-setup.timer

  • Neustart 🚀:
    sudo systemctl restart system-flatpak-setup.timer

  • Oder Tool 🔧:
    ujust (oder just) ist ein Kommandozeilen-Runner, der in BlueBuild-Images verwendet wird. Er funktioniert wie ein vereinfachtes Makefile und bündelt komplexe, oft wiederkehrende Befehle in einfache, benutzerfreundliche Aliase (wie install-flatpaks). Es macht das Leben einfacher, indem man sich nicht die langen Systemd-Befehle merken muss.
    ujust install-flatpaks

  • Installed Flatpaks sudo flatpaks list

  • Danach 🔄:
    Abmelden/Neustart.