Files
my-fedora/README.md
T
qpismont 90bb609881
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/cron/ci Pipeline was successful
Remove Umbriel/Noctalia and bump to Fedora 45
2026-11-03 18:02:53 +01:00

5.2 KiB

My Fedora - Distribution Fedora Personnalisée

Distribution Fedora 44 personnalisée basée sur Fedora Bootc avec GNOME, 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)
  • 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)
  • 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 : 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/
│   └── 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
  • 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