Files
my-fedora/README.md
T
qpismont 0920b351b7
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/cron/ci Pipeline was successful
Drop --layers from the build to avoid slow layer commits, and default
PULL_POLICY to missing so the base image is only re-pulled when absent.
2026-11-02 20:17:09 +01:00

5.7 KiB

My Fedora - Distribution Fedora Personnalisée

Distribution Fedora 44 personnalisée basée sur Fedora Bootc avec GNOME, le compositeur Umbriel et le shell Noctalia, plus un ensemble d'outils de développement préinstallés.

Caractéristiques

Environnement de Bureau

  • GNOME (@gnome-desktop) avec support matériel complet
  • GDM comme gestionnaire de connexion (GNOME Initial Setup crée le premier compte au boot)
  • Umbriel (compositeur Wayland, build nightly) et Noctalia (shell) via le dépôt Terra
  • xdg-desktop-portal-umbriel-nightly pour les portails XDG
  • Nautilus avec l'extension nautilus-my-computer (dépôt Copr)
  • Plymouth pour l'animation de démarrage
  • Vulkan et pilotes Mesa (x86_64 et i686)
  • Pack d'icônes MoreWaita et boutons de fenêtre style Windows (:minimize,maximize,close)

Outils de Développement

  • Development Tools complet
  • Podman, Buildah, Podman Compose, distrobox
  • Support Docker via podman-docker
  • Starship (prompt) configuré pour tous les utilisateurs
  • FiraMono Nerd Font

Applications Préinstallées

  • Mullvad VPN - Client VPN sécurisé
  • Filen - Stockage cloud
  • Bazaar (Flatpak) - Gestionnaire d'applications, installé au premier démarrage
  • CUPS - Support d'impression (avec cups-pdf)
  • FFmpeg (ffmpeg-free), GStreamer et ffmpegthumbnailer

Configuration Système

  • Locale : Français (fr_FR.UTF-8)
  • Clavier : AZERTY (fr), via vconsole et xorg-keyboard.conf pour GDM
  • Fuseau horaire : Europe/Paris
  • Système de fichiers root : Btrfs
  • Flatpak : Flathub et Bazaar ajoutés au premier démarrage (service flatpak-first-boot)
  • Umbriel : configuration par défaut dans /etc/xdg/umbriel/config.toml (autostart Noctalia)
  • Module xpad chargé au démarrage (manettes Xbox)

Optimisations

  • user.max_user_namespaces augmenté pour Podman
  • Support FUSE pour overlayfs
  • Mise à jour automatique Bootc désactivée
  • PackageKit et GNOME Software supprimés (gestion via Flatpak)
  • dnf avec --setopt=tsflags=nodocs (pas de documentation dans l'image)
  • Build sans --layers (les commits de couches sont très lents sur stockage vfs/disque lent) ; PULL_POLICY=always pour forcer la mise à jour de l'image de base
  • Flatpak installé dans une transaction isolée, avec copie du store SELinux et vérification du label flatpak_helper_exec_t au build

Prérequis

  • Fedora avec Buildah et Podman installés
  • Accès root pour la génération d'ISO
  • Connexion Internet pour télécharger les dépendances

Utilisation

Construire l'image conteneur

./build.sh

Construit l'image localement avec le tag localhost/tintounn/my-fedora:latest.

Le script utilise buildah bud --pull=missing --isolation chroot (l'image de base n'est retéléchargée que si elle est absente). Pour forcer la récupération de la dernière image de base :

PULL_POLICY=always ./build.sh

Générer une ISO bootable

sudo ./build-iso.sh

Construit l'image puis génère une ISO Anaconda dans le répertoire output/. L'ISO utilise Btrfs comme système de fichiers root.

Le script utilise sudo podman et le storage root de Podman : lance-le avec sudo pour que l'image construite soit visible par bootc-image-builder.

Publier l'image sur Docker Hub

./push-image.sh

Pousse l'image vers docker.io/tintounn/my-fedora:latest.

Architecture

  • Base : registry.fedoraproject.org/fedora-bootc:44
  • Type : Image conteneur bootable (Bootc)
  • Target : Système graphique (graphical.target)
  • Dépôts supplémentaires : Terra (repos.fyralabs.com), Mullvad, Copr yannmasoch/nautilus-my-computer

Services Activés

  • gdm.service (GNOME Display Manager)
  • NetworkManager.service
  • bluetooth.service
  • podman.socket
  • cups.service
  • mullvad-daemon.service
  • flatpak-first-boot.service (ajoute Flathub et installe Bazaar au premier démarrage)

Intégration Continue

Le projet utilise Woodpecker CI avec déclenchement automatique :

  • Sur push vers la branche main
  • Nuit via un cron nommé "upgrade base image"

Le pipeline CI construit et publie automatiquement l'image sur Docker Hub.

Structure du Projet

.
├── Containerfile          # Définition de l'image
├── build.sh               # Script de construction d'image
├── build-iso.sh           # Script de génération d'ISO
├── push-image.sh          # Script de publication
├── iso.toml               # Configuration de l'installeur Anaconda
├── config/
│   ├── umbriel.toml       # Configuration Umbriel par défaut
│   └── xorg-keyboard.conf # Clavier FR pour GDM
├── services/
│   └── flatpak-first-boot.service
├── .woodpecker/
│   └── ci.yaml            # Configuration Woodpecker CI
└── output/                # Répertoire de sortie pour les ISO (généré)

Notes

  • Les mises à jour automatiques Bootc sont masquées pour un contrôle manuel
  • L'image utilise l'isolation chroot lors de la construction
  • Le builder d'ISO nécessite des privilèges élevés et l'accès au storage Podman
  • ffmpeg provient des dépôts Fedora (ffmpeg-free) : pour les codecs complets, activer RPM Fusion
  • Umbriel/Noctalia proviennent du dépôt tiers Terra (--nogpgcheck à l'ajout du dépôt)
  • Le dépôt Flathub est ajouté au premier démarrage, pas pendant le build (écrire dans /var est un anti-patron bootc)
  • Flatpak est installé dans une transaction isolée pour que le scriptlet flatpak-selinux enregistre correctement le module SELinux ; le build échoue si le label flatpak_helper_exec_t est absent de la politique compilée

Licence

Projet personnel