# 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 ```bash ./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 : ```bash PULL_POLICY=always ./build.sh ``` ### Générer une ISO bootable ```bash 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 ```bash ./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