diff --git a/Containerfile b/Containerfile index 87c027e..e15b817 100644 --- a/Containerfile +++ b/Containerfile @@ -1,19 +1,17 @@ FROM registry.fedoraproject.org/fedora-bootc:44 #Install copr command -RUN dnf5 install 'dnf5-command(copr)' -y \ - && dnf copr enable yannmasoch/nautilus-my-computer -y +RUN dnf5 install 'dnf5-command(copr)' -y #Ajout du dépot mullvad RUN curl -fsSL https://repository.mullvad.net/rpm/stable/mullvad.repo -o /etc/yum.repos.d/mullvad.repo -#Install de gnome avec support hardware + Podman + Cups + Vulkan driver + Plymouth + dev tools + divers utilitaires -RUN dnf install -y --refresh \ +#Install de KDE Plasma avec support hardware + Podman + Cups + Vulkan driver + Plymouth + dev tools + divers utilitaires +RUN dnf install -y --refresh --setopt=tsflags=nodocs \ @kde-desktop-environment \ @hardware-support \ @development-tools \ @multimedia \ - nautilus-my-computer \ vulkan-tools \ ffmpegthumbnailer \ mesa-vulkan-drivers \ @@ -52,14 +50,14 @@ RUN dnf install -y --refresh \ gstreamer1-plugins-base \ gstreamer1-vaapi \ ffmpeg \ - && dnf remove -y sddm snapshot PackageKit PackageKit-gstreamer-plugin PackageKit-command-not-found toolbox || true \ - && dnf install -y flatpak \ - && dnf clean all \ - && rm -rf /var/cache/dnf + flatpak \ + && (dnf remove -y sddm snapshot PackageKit PackageKit-gstreamer-plugin PackageKit-command-not-found toolbox || true) \ + && dnf clean all #Installation de Filen Desktop RUN wget https://cdn.filen.io/@filen/desktop/release/latest/Filen_linux_x86_64.rpm -O /tmp/filen.rpm \ - && dnf install -y /tmp/filen.rpm \ + && dnf install -y --setopt=tsflags=nodocs /tmp/filen.rpm \ + && dnf clean all \ && rm -f /tmp/filen.rpm @@ -87,18 +85,6 @@ RUN echo "LANG=fr_FR.UTF-8" > /etc/locale.conf \ && ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime \ && echo "user.max_user_namespaces=28633" > /etc/sysctl.d/userns.conf -# Installation du pack d'icones MoreWaita -RUN git clone https://github.com/somepaulo/MoreWaita.git && cd MoreWaita && ./install.sh && \ - rm -rf MoreWaita && \ - printf "[org/gnome/desktop/interface]\nicon-theme='MoreWaita'\n" > /etc/dconf/db/local.d/02-icon-theme && \ - dconf update 2>/dev/null || true - -#Configuration des fenêtres gnome pour avoir les btns style windows -RUN mkdir -p /etc/dconf/db/local.d /etc/dconf/profile && \ - printf "[org/gnome/desktop/wm/preferences]\nbutton-layout=':minimize,maximize,close'\n" > /etc/dconf/db/local.d/02-window-buttons && \ - printf "user-db:user\nsystem-db:local\n" > /etc/dconf/profile/user && \ - dconf update 2>/dev/null || true - #Activation du module xpad pour support manette xbox RUN echo "xpad" > /etc/modules-load.d/xpad.conf diff --git a/README.md b/README.md index f8c6b9d..c86567a 100644 --- a/README.md +++ b/README.md @@ -1,42 +1,44 @@ # My Fedora - Distribution Fedora Personnalisée -Distribution Fedora 43 personnalisée basée sur Fedora Bootc avec GNOME et un ensemble d'outils de développement préinstallés. +Distribution Fedora 44 personnalisée basée sur Fedora Bootc avec KDE Plasma et un ensemble d'outils de développement préinstallés. ## Caractéristiques ### Environnement de Bureau -- **GNOME Desktop** avec support matériel complet -- Configuration des boutons de fenêtre style Windows (minimize, maximize, close) -- Plymouth pour l'animation de démarrage -- Support Vulkan et pilotes AMD +- **KDE Plasma** (`@kde-desktop-environment`) avec support matériel complet +- **Plasma Login Manager** (`plasmalogin`) à la place de SDDM +- **Plymouth** pour l'animation de démarrage +- **Vulkan** et pilotes Mesa (x86_64 et i686) ### Outils de Développement -- **Visual Studio Code** (depuis le dépôt officiel Microsoft) - **Development Tools** complet -- **Podman** et **Buildah** pour la conteneurisation -- **Podman Compose** pour orchestration -- Support Docker via podman-docker +- **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é -- **Yaak** (dernière version) - Client API REST -- **Proton Drive** (non officiel, dernière version) - Client FUSE + CLI + app GTK4 + tray - **Filen** - Stockage cloud - **Bazaar** (Flatpak) - Gestionnaire d'applications -- **CUPS** - Support d'impression (avec cups-pdf) +- **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) -- **Fuseau horaire** : Europe/Paris +- **Locale** : Français (`fr_FR.UTF-8`) +- **Clavier** : AZERTY (`fr`) +- **Fuseau horaire** : `Europe/Paris` - **Système de fichiers root** : Btrfs - **Flatpak** : Flathub configuré par défaut +- **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 -- GNOME Software supprimé (gestion via Flatpak) +- PackageKit supprimé (gestion via Flatpak) +- `dnf` avec `--setopt=tsflags=nodocs` (pas de documentation dans l'image) +- Build avec cache de couches (`buildah bud --layers`) et pull de l'image de base (`--pull=always`) ## Prérequis @@ -52,37 +54,47 @@ Distribution Fedora 43 personnalisée basée sur Fedora Bootc avec GNOME et un e ./build.sh ``` -Construit l'image localement avec le tag `localhost/tintounn/my-fedora:latest` +Construit l'image localement avec le tag `localhost/tintounn/my-fedora:latest`. + +Le script utilise `buildah bud --layers --pull=always --isolation chroot`. Pour éviter de retélécharger l'image de base à chaque build local, tu peux utiliser : + +```bash +PULL_POLICY=missing ./build.sh +``` ### Générer une ISO bootable ```bash -./build-iso.sh +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` +Pousse l'image vers `docker.io/tintounn/my-fedora:latest`. ## Architecture -- **Base** : `registry.fedoraproject.org/fedora-bootc:42` +- **Base** : `registry.fedoraproject.org/fedora-bootc:44` - **Type** : Image conteneur bootable (Bootc) -- **Target** : Système graphique (graphical.target) +- **Target** : Système graphique (`graphical.target`) ## Services Activés -- GDM (GNOME Display Manager) -- NetworkManager -- Bluetooth -- Podman Socket -- CUPS (Impression) +- `plasmalogin.service` (Plasma Login Manager) +- `NetworkManager.service` +- `bluetooth.service` +- `podman.socket` +- `cups.service` +- `mullvad-daemon.service` +- `flatpak-first-boot.service` (installe Bazaar au premier démarrage) ## Intégration Continue @@ -97,19 +109,23 @@ Le pipeline CI construit et publie automatiquement l'image sur Docker Hub. ``` . ├── 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 +├── 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 +├── services/ +│ └── flatpak-first-boot.service ├── .woodpecker/ -│ └── ci.yaml # Configuration Woodpecker CI -└── output/ # Répertoire de sortie pour les ISO (généré) +│ └── 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 +- 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 ## Licence diff --git a/build.sh b/build.sh index b9f484a..0b46251 100755 --- a/build.sh +++ b/build.sh @@ -3,8 +3,8 @@ set -euo pipefail IMAGE_NAME="tintounn/my-fedora" IMAGE_TAG="latest" -OUTPUT_DIR="output/" - -echo "[INFO] Build de l'image avec sudo..." -buildah bud --isolation chroot -t localhost/${IMAGE_NAME}:${IMAGE_TAG} . +PULL_POLICY="${PULL_POLICY:-always}" + +echo "[INFO] Build de l'image (pull=${PULL_POLICY})..." +buildah bud --layers --pull="${PULL_POLICY}" --isolation chroot -t localhost/${IMAGE_NAME}:${IMAGE_TAG} .