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
RUN dnf5 install 'dnf5-command(copr)' -y \
&& dnf copr enable yannmasoch/nautilus-my-computer -y
#Ajout du dépot vscode
RUN rpm --import https://packages.microsoft.com/keys/microsoft.asc \
&& 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
#Ajout du dépot Terra (Umbriel n'est pas dans les depots Fedora)
RUN dnf install -y --nogpgcheck --repofrompath 'terra,https://repos.fyralabs.com/terra$releasever' terra-release \
&& dnf clean all
#Install de gnome avec support hardware + Podman + Cups + Vulkan driver + Plymouth + dev tools + divers utilitaires
RUN dnf install -y --refresh \
#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 + 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 \
@hardware-support \
@development-tools \
@multimedia \
nautilus-my-computer \
noctalia \
umbriel-nightly \
xdg-desktop-portal-umbriel-nightly \
vulkan-tools \
ffmpegthumbnailer \
mesa-vulkan-drivers \
nautilus-my-computer \
mesa-vulkan-drivers.i686 \
vulkan-loader \
vulkan-loader.i686 \
@@ -29,15 +35,13 @@ RUN dnf install -y --refresh \
buildah \
podman \
rsync \
code \
niri \
noctalia \
podman-docker \
podman-compose \
fuse-overlayfs \
cups \
cups-pdf \
jq \
mullvad-vpn \
plymouth \
plymouth-system-theme \
plymouth-plugin-label \
@@ -53,20 +57,32 @@ RUN dnf install -y --refresh \
gstreamer1-plugins-base \
gstreamer1-vaapi \
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 install -y flatpak \
&& dnf downgrade -y xwayland-satellite-0.8.1-1.fc44 \
&& (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 clean all
#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 \
&& rm -rf /var/cache/dnf
#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
&& rm -f /tmp/filen.rpm
#Installation de starship
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 && \
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
RUN echo "LANG=fr_FR.UTF-8" > /etc/locale.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
RUN echo "xpad" > /etc/modules-load.d/xpad.conf
#Ajout de flathub
RUN flatpak remote-add --if-not-exists --system flathub https://dl.flathub.org/repo/flathub.flatpakrepo || true
#Activation du service flatpak-first-boot
#Activation du service flatpak-first-boot (active apres preset-all, plus bas)
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
RUN systemctl set-default graphical.target
#Activation des services + Desactivation de bootc-update automatique
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
+53 -29
View File
@@ -1,42 +1,47 @@
# 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
### 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
- **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
- **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)
- **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)
- **Fuseau horaire** : Europe/Paris
- **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 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
- `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 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
@@ -52,37 +57,48 @@ 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 --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
./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`)
- **Dépôts supplémentaires** : Mullvad, Copr `yannmasoch/nautilus-my-computer`
## Services Activés
- GDM (GNOME Display Manager)
- NetworkManager
- Bluetooth
- Podman Socket
- CUPS (Impression)
- `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
@@ -100,6 +116,11 @@ Le pipeline CI construit et publie automatiquement l'image sur Docker Hub.
├── 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é)
@@ -108,8 +129,11 @@ Le pipeline CI construit et publie automatiquement l'image sur Docker Hub.
## 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
- 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
-1
View File
@@ -25,7 +25,6 @@ sudo podman run --rm -it \
--type iso \
--local \
--rootfs btrfs \
--use-lib-repo=true \
localhost/${IMAGE_NAME}:${IMAGE_TAG}
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_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:-missing}"
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
Wants=network-online.target
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]
Type=oneshot
RemainAfterExit=yes
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 io.github.kolunmi.Bazaar && \
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
StandardError=journal
[Install]
WantedBy=multi-user.target