Compare commits

..
18 Commits
Author SHA1 Message Date
qpismont 83c97aa13a Add Noctalia/Umbriel stack with default config
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/cron/ci Pipeline failed
2026-11-04 18:53:43 +01:00
qpismont 90bb609881 Remove Umbriel/Noctalia and bump to Fedora 45
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/cron/ci Pipeline was successful
2026-11-03 18:02:53 +01:00
qpismont 0920b351b7 Drop --layers from the build to avoid slow layer commits, and default
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/cron/ci Pipeline was successful
PULL_POLICY to missing so the base image is only re-pulled when absent.
2026-11-02 20:17:09 +01:00
qpismont 9275d2c4a4 Install Flatpak in an isolated transaction
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/cron/ci Pipeline was canceled
Copy the SELinux store before installing Flatpak to avoid overlayfs
rename failures, then verify the compiled policy includes its helper
label.
2026-11-01 22:46:33 +01:00
qpismont 1174a84b28 Verify flatpak SELinux label at build time
ci/woodpecker/push/ci Pipeline was successful
Replace the best-effort semodule/setfiles workarounds with a build-time
check that fails fast if flatpak-system-helper is not labeled
flatpak_helper_exec_t. Also reinstall flatpak-selinux to ensure the
policy is present.
2026-11-01 21:58:09 +01:00
qpismont d44912b967 Ensure flatpak SELinux module is installed during build
ci/woodpecker/push/ci Pipeline was canceled
2026-11-01 21:44:44 +01:00
qpismont 4f7d9d3114 Make SELinux policy rebuild non-fatal and relabel /usr
ci/woodpecker/push/ci Pipeline was canceled
2026-11-01 21:38:59 +01:00
qpismont 16e9294c9b Remove stale SELinux sandbox before rebuilding policy
ci/woodpecker/push/ci Pipeline failed
2026-11-01 21:15:46 +01:00
qpismont e073d18de6 Move flatpak remote setup to first boot
ci/woodpecker/push/ci Pipeline failed
2026-11-01 20:57:45 +01:00
qpismont 95ac8ebb2b Update Containerfile
ci/woodpecker/push/ci Pipeline was successful
2026-11-01 14:34:58 +01:00
qpismont 8f0d2e7d27 Switch desktop environment from KDE Plasma to GNOME with
ci/woodpecker/push/ci Pipeline was successful
Noctalia/Umbriel
2026-11-01 13:34:00 +01:00
qpismont 5b169a7ddb Switch to KDE Plasma and clean up Containerfile
ci/woodpecker/push/ci Pipeline was canceled
ci/woodpecker/cron/ci Pipeline was successful
2026-11-01 11:32:21 +01:00
qpismont 4d581a2acc Update Containerfile
ci/woodpecker/push/ci Pipeline was canceled
2026-11-01 11:16:44 +01:00
qpismont 3535daaa75 Update Containerfile
ci/woodpecker/push/ci Pipeline failed
2026-11-01 09:30:52 +01:00
qpismont ca5021435a Update Containerfile
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/cron/ci Pipeline was successful
2026-10-29 19:52:20 +01:00
qpismont 78a6dab5fc Update Containerfile
ci/woodpecker/push/ci Pipeline was successful
2026-10-29 19:33:19 +01:00
qpismont 485fd53f03 Update Containerfile
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/cron/ci Pipeline was successful
remove niri and noctalia (prepare f45 release)
2026-10-16 21:12:37 +02:00
qpismont 44d1c1daf2 remove kde deps from proton drive
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/cron/ci Pipeline was successful
2026-10-08 19:57:04 +02:00
7 changed files with 127 additions and 63 deletions

No files matched your search

+45 -29
View File
@@ -1,23 +1,29 @@
FROM registry.fedoraproject.org/fedora-bootc:44 FROM registry.fedoraproject.org/fedora-bootc:45
#Install copr command #Install copr command
RUN dnf5 install 'dnf5-command(copr)' -y \ RUN dnf5 install 'dnf5-command(copr)' -y \
&& dnf copr enable yannmasoch/nautilus-my-computer -y && dnf copr enable yannmasoch/nautilus-my-computer -y
#Ajout du dépot vscode #Ajout du dépot Terra (Umbriel n'est pas dans les depots Fedora)
RUN rpm --import https://packages.microsoft.com/keys/microsoft.asc \ RUN dnf install -y --nogpgcheck --repofrompath 'terra,https://repos.fyralabs.com/terra$releasever' terra-release \
&& echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\nautorefresh=1\ntype=rpm-md\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" | tee /etc/yum.repos.d/vscode.repo > /dev/null && dnf clean all
#Install de gnome avec support hardware + Podman + Cups + Vulkan driver + Plymouth + dev tools + divers utilitaires #Ajout du dépot mullvad
RUN dnf install -y --refresh \ RUN curl -fsSL https://repository.mullvad.net/rpm/stable/mullvad.repo -o /etc/yum.repos.d/mullvad.repo
#Install de GNOME + stack Noctalia/Umbriel avec support hardware + Podman + Cups + Vulkan driver + Plymouth + dev tools + divers utilitaires
RUN dnf install -y --refresh --setopt=tsflags=nodocs \
@gnome-desktop \ @gnome-desktop \
@hardware-support \ @hardware-support \
@development-tools \ @development-tools \
@multimedia \ @multimedia \
nautilus-my-computer \ noctalia \
umbriel-nightly \
xdg-desktop-portal-umbriel-nightly \
vulkan-tools \ vulkan-tools \
ffmpegthumbnailer \ ffmpegthumbnailer \
mesa-vulkan-drivers \ mesa-vulkan-drivers \
nautilus-my-computer \
mesa-vulkan-drivers.i686 \ mesa-vulkan-drivers.i686 \
vulkan-loader \ vulkan-loader \
vulkan-loader.i686 \ vulkan-loader.i686 \
@@ -29,15 +35,13 @@ RUN dnf install -y --refresh \
buildah \ buildah \
podman \ podman \
rsync \ rsync \
code \
niri \
noctalia \
podman-docker \ podman-docker \
podman-compose \ podman-compose \
fuse-overlayfs \ fuse-overlayfs \
cups \ cups \
cups-pdf \ cups-pdf \
jq \ jq \
mullvad-vpn \
plymouth \ plymouth \
plymouth-system-theme \ plymouth-system-theme \
plymouth-plugin-label \ plymouth-plugin-label \
@@ -53,20 +57,32 @@ RUN dnf install -y --refresh \
gstreamer1-plugins-base \ gstreamer1-plugins-base \
gstreamer1-vaapi \ gstreamer1-vaapi \
ffmpeg \ ffmpeg \
&& dnf remove -y alacritty waybar gnome-software gnome-software-rpm-ostree gnome-system-monitor showtime decibels snapshot PackageKit PackageKit-gstreamer-plugin PackageKit-command-not-found toolbox || true \ && (dnf remove -y alacritty waybar gnome-software gnome-software-rpm-ostree gnome-system-monitor showtime decibels snapshot PackageKit PackageKit-gstreamer-plugin PackageKit-command-not-found toolbox || true) \
&& dnf install -y flatpak \ && dnf clean all
&& dnf downgrade -y xwayland-satellite-0.8.1-1.fc44 \
#Flatpak : installe seul, dans sa propre couche (comme avant le passage a GNOME), pour
#que le scriptlet de flatpak-selinux (qui enregistre le module SELinux) tourne dans une
#petite transaction isolee. Le store SELinux est d'abord recopie dans la couche courante :
#sur overlayfs, libsemanage renomme des repertoires de la couche d'origine, ce qui peut
#echouer ("Directory not empty") et faire annuler la transaction sans erreur bloquante.
RUN cp -a /etc/selinux/targeted /tmp/selinux-store \
&& rm -rf /etc/selinux/targeted \
&& mv /tmp/selinux-store /etc/selinux/targeted
RUN dnf install -y flatpak && dnf clean all
#Garde-fou : /usr est en lecture seule sur le systeme deploye, un helper flatpak mal
#etiquete (unlabeled_t) ne peut donc pas etre repare apres coup. On verifie que la
#politique COMPILEE connait bien le type, sinon le build echoue.
RUN grep -qa flatpak_helper_exec_t /etc/selinux/targeted/policy/policy.*
#Configuration de GDM : clavier FR (GNOME Initial Setup cree le premier compte au boot)
COPY config/xorg-keyboard.conf /etc/X11/xorg.conf.d/00-keyboard.conf
#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 --setopt=tsflags=nodocs /tmp/filen.rpm \
&& dnf clean all \ && dnf clean all \
&& rm -rf /var/cache/dnf && rm -f /tmp/filen.rpm
#Installation de proton drive sync (dernière version stable depuis GitHub)
RUN curl -sS https://api.github.com/repos/narrrl/proton-drive-linux/releases/latest -o /tmp/proton-drive-release.json \
&& RPM_URL=$(jq -r '.assets[] | select(.name | endswith(".rpm")) | .browser_download_url' /tmp/proton-drive-release.json | head -n 1) \
&& echo "Installation de proton-drive-linux $(jq -r '.tag_name' /tmp/proton-drive-release.json) depuis ${RPM_URL}" \
&& curl -L -o /tmp/proton-drive-linux.rpm "${RPM_URL}" \
&& dnf install -y /tmp/proton-drive-linux.rpm \
&& rm -f /tmp/proton-drive-linux.rpm /tmp/proton-drive-release.json
#Installation de starship #Installation de starship
RUN curl -sS https://starship.rs/install.sh | sh -s -- -y RUN curl -sS https://starship.rs/install.sh | sh -s -- -y
@@ -86,6 +102,9 @@ RUN echo 'eval "$(starship init bash)"' >> /etc/bashrc
RUN mkdir -p /etc/skel/.config && \ RUN mkdir -p /etc/skel/.config && \
starship preset nerd-font-symbols -o /etc/skel/.config/starship.toml starship preset nerd-font-symbols -o /etc/skel/.config/starship.toml
#Configuration Umbriel par défaut : config de départ du paquet + autostart Noctalia
COPY config/umbriel.toml /etc/xdg/umbriel/config.toml
#Langue FR par défaut + Fuse userns + Timezone Paris #Langue FR par défaut + Fuse userns + Timezone Paris
RUN echo "LANG=fr_FR.UTF-8" > /etc/locale.conf \ RUN echo "LANG=fr_FR.UTF-8" > /etc/locale.conf \
&& echo "KEYMAP=fr" > /etc/vconsole.conf \ && echo "KEYMAP=fr" > /etc/vconsole.conf \
@@ -107,17 +126,14 @@ RUN mkdir -p /etc/dconf/db/local.d /etc/dconf/profile && \
#Activation du module xpad pour support manette xbox #Activation du module xpad pour support manette xbox
RUN echo "xpad" > /etc/modules-load.d/xpad.conf RUN echo "xpad" > /etc/modules-load.d/xpad.conf
#Ajout de flathub #Activation du service flatpak-first-boot (active apres preset-all, plus bas)
RUN flatpak remote-add --if-not-exists --system flathub https://dl.flathub.org/repo/flathub.flatpakrepo || true
#Activation du service flatpak-first-boot
COPY services/flatpak-first-boot.service /etc/systemd/system/flatpak-first-boot.service COPY services/flatpak-first-boot.service /etc/systemd/system/flatpak-first-boot.service
RUN systemctl enable flatpak-first-boot.service RUN chmod 0644 /etc/systemd/system/flatpak-first-boot.service
#Définir le target graphique par défaut #Définir le target graphique par défaut
RUN systemctl set-default graphical.target RUN systemctl set-default graphical.target
#Activation des services + Desactivation de bootc-update automatique #Activation des services + Desactivation de bootc-update automatique
RUN systemctl preset-all && \ RUN systemctl preset-all && \
systemctl enable gdm.service NetworkManager.service bluetooth.service podman.socket cups.service && \ systemctl enable --force gdm.service NetworkManager.service bluetooth.service podman.socket cups.service mullvad-daemon.service flatpak-first-boot.service && \
systemctl mask bootc-fetch-apply-updates.timer systemd-remount-fs.service systemctl mask bootc-fetch-apply-updates.timer systemd-remount-fs.service
+53 -29
View File
@@ -1,42 +1,47 @@
# My Fedora - Distribution Fedora Personnalisée # 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 GNOME, plus un ensemble d'outils de développement préinstallés.
## Caractéristiques ## Caractéristiques
### Environnement de Bureau ### Environnement de Bureau
- **GNOME Desktop** avec support matériel complet - **GNOME** (`@gnome-desktop`) avec support matériel complet
- Configuration des boutons de fenêtre style Windows (minimize, maximize, close) - **GDM** comme gestionnaire de connexion (GNOME Initial Setup crée le premier compte au boot)
- Plymouth pour l'animation de démarrage - **Nautilus** avec l'extension `nautilus-my-computer` (dépôt Copr)
- Support Vulkan et pilotes AMD - **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 ### Outils de Développement
- **Visual Studio Code** (depuis le dépôt officiel Microsoft)
- **Development Tools** complet - **Development Tools** complet
- **Podman** et **Buildah** pour la conteneurisation - **Podman**, **Buildah**, **Podman Compose**, **distrobox**
- **Podman Compose** pour orchestration - Support Docker via `podman-docker`
- Support Docker via podman-docker - **Starship** (prompt) configuré pour tous les utilisateurs
- **FiraMono Nerd Font**
### Applications Préinstallées ### Applications Préinstallées
- **Mullvad VPN** - Client VPN sécurisé - **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 - **Filen** - Stockage cloud
- **Bazaar** (Flatpak) - Gestionnaire d'applications - **Bazaar** (Flatpak) - Gestionnaire d'applications, installé au premier démarrage
- **CUPS** - Support d'impression (avec cups-pdf) - **CUPS** - Support d'impression (avec `cups-pdf`)
- **FFmpeg** (`ffmpeg-free`), GStreamer et `ffmpegthumbnailer`
### Configuration Système ### Configuration Système
- **Locale** : Français (fr_FR.UTF-8) - **Locale** : Français (`fr_FR.UTF-8`)
- **Clavier** : AZERTY (fr) - **Clavier** : AZERTY (`fr`), via `vconsole` et `xorg-keyboard.conf` pour GDM
- **Fuseau horaire** : Europe/Paris - **Fuseau horaire** : `Europe/Paris`
- **Système de fichiers root** : Btrfs - **Système de fichiers root** : Btrfs
- **Flatpak** : Flathub configuré par défaut - **Flatpak** : Flathub et Bazaar ajoutés au premier démarrage (service `flatpak-first-boot`)
- **Module `xpad`** chargé au démarrage (manettes Xbox)
### Optimisations ### Optimisations
- `user.max_user_namespaces` augmenté pour Podman - `user.max_user_namespaces` augmenté pour Podman
- Support FUSE pour overlayfs - Support FUSE pour overlayfs
- Mise à jour automatique Bootc désactivée - Mise à jour automatique Bootc désactivée
- GNOME Software supprimé (gestion via Flatpak) - 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 ## Prérequis
@@ -52,37 +57,48 @@ Distribution Fedora 43 personnalisée basée sur Fedora Bootc avec GNOME et un e
./build.sh ./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 --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 ### Générer une ISO bootable
```bash ```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. 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 ### Publier l'image sur Docker Hub
```bash ```bash
./push-image.sh ./push-image.sh
``` ```
Pousse l'image vers `docker.io/tintounn/my-fedora:latest` Pousse l'image vers `docker.io/tintounn/my-fedora:latest`.
## Architecture ## Architecture
- **Base** : `registry.fedoraproject.org/fedora-bootc:42` - **Base** : `registry.fedoraproject.org/fedora-bootc:44`
- **Type** : Image conteneur bootable (Bootc) - **Type** : Image conteneur bootable (Bootc)
- **Target** : Système graphique (graphical.target) - **Target** : Système graphique (`graphical.target`)
- **Dépôts supplémentaires** : Mullvad, Copr `yannmasoch/nautilus-my-computer`
## Services Activés ## Services Activés
- GDM (GNOME Display Manager) - `gdm.service` (GNOME Display Manager)
- NetworkManager - `NetworkManager.service`
- Bluetooth - `bluetooth.service`
- Podman Socket - `podman.socket`
- CUPS (Impression) - `cups.service`
- `mullvad-daemon.service`
- `flatpak-first-boot.service` (ajoute Flathub et installe Bazaar au premier démarrage)
## Intégration Continue ## Intégration Continue
@@ -100,6 +116,11 @@ Le pipeline CI construit et publie automatiquement l'image sur Docker Hub.
├── build.sh # Script de construction d'image ├── build.sh # Script de construction d'image
├── build-iso.sh # Script de génération d'ISO ├── build-iso.sh # Script de génération d'ISO
├── push-image.sh # Script de publication ├── 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/ ├── .woodpecker/
│ └── ci.yaml # Configuration Woodpecker CI │ └── ci.yaml # Configuration Woodpecker CI
└── output/ # Répertoire de sortie pour les ISO (généré) └── output/ # Répertoire de sortie pour les ISO (généré)
@@ -108,8 +129,11 @@ Le pipeline CI construit et publie automatiquement l'image sur Docker Hub.
## Notes ## Notes
- Les mises à jour automatiques Bootc sont masquées pour un contrôle manuel - 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 - 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 ## Licence
-1
View File
@@ -25,7 +25,6 @@ sudo podman run --rm -it \
--type iso \ --type iso \
--local \ --local \
--rootfs btrfs \ --rootfs btrfs \
--use-lib-repo=true \
localhost/${IMAGE_NAME}:${IMAGE_TAG} localhost/${IMAGE_NAME}:${IMAGE_TAG}
echo "[SUCCÈS] ISO généré dans $OUTPUT_DIR" echo "[SUCCÈS] ISO généré dans $OUTPUT_DIR"
+3 -4
View File
@@ -3,8 +3,7 @@ set -euo pipefail
IMAGE_NAME="tintounn/my-fedora" IMAGE_NAME="tintounn/my-fedora"
IMAGE_TAG="latest" IMAGE_TAG="latest"
OUTPUT_DIR="output/" PULL_POLICY="${PULL_POLICY:-missing}"
echo "[INFO] Build de l'image avec sudo..."
buildah bud --isolation chroot -t localhost/${IMAGE_NAME}:${IMAGE_TAG} .
echo "[INFO] Build de l'image (pull=${PULL_POLICY})..."
buildah bud --pull="${PULL_POLICY}" --isolation chroot -t localhost/${IMAGE_NAME}:${IMAGE_TAG} .
+10
View File
@@ -0,0 +1,10 @@
# Configuration Umbriel par défaut, commune à tous les utilisateurs
# (XDG_CONFIG_DIRS). Un fichier ~/.config/umbriel/config.toml la remplace.
#
# On charge la configuration de départ fournie par le paquet (keybinds,
# layout, effets, window/layer rules) puis on démarre Noctalia avec la session.
[include]
files = ["/usr/share/umbriel/config.toml"]
[general]
autostart = ["noctalia"]
+6
View File
@@ -0,0 +1,6 @@
Section "InputClass"
Identifier "system-keyboard"
MatchIsKeyboard "on"
Option "XkbModel" "pc105"
Option "XkbLayout" "fr"
EndSection
+10
View File
@@ -3,15 +3,25 @@ Description=Installation des Flatpaks au premier démarrage
After=network-online.target flatpak-system-helper.service After=network-online.target flatpak-system-helper.service
Wants=network-online.target Wants=network-online.target
ConditionPathExists=!/var/lib/flatpak/.firstboot-done ConditionPathExists=!/var/lib/flatpak/.firstboot-done
# network-online.target ne garantit pas que la resolution DNS soit deja
# operationnelle (NetworkManager atteint CONNECTED_GLOBAL avant que le
# resolver ne reponde). On autorise donc plusieurs tentatives avant d'abandonner.
StartLimitIntervalSec=600
StartLimitBurst=30
[Service] [Service]
Type=oneshot Type=oneshot
RemainAfterExit=yes RemainAfterExit=yes
ExecStart=/bin/bash -c '\ ExecStart=/bin/bash -c '\
flatpak remote-add --if-not-exists --system flathub https://dl.flathub.org/repo/flathub.flatpakrepo && \
flatpak install -y --system flathub runtime/org.gnome.Platform/x86_64/49 && \ flatpak install -y --system flathub runtime/org.gnome.Platform/x86_64/49 && \
flatpak install -y --system flathub io.github.kolunmi.Bazaar && \ flatpak install -y --system flathub io.github.kolunmi.Bazaar && \
touch /var/lib/flatpak/.firstboot-done' touch /var/lib/flatpak/.firstboot-done'
# Relance la sequence si le reseau/DNS n'est pas encore pret au premier essai.
Restart=on-failure
RestartSec=15s
StandardOutput=journal StandardOutput=journal
StandardError=journal
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target