Compare commits
18
Commits
1869a0f069
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
83c97aa13a | ||
|
|
90bb609881 | ||
|
|
0920b351b7 | ||
|
|
9275d2c4a4 | ||
|
|
1174a84b28 | ||
|
|
d44912b967 | ||
|
|
4f7d9d3114 | ||
|
|
16e9294c9b | ||
|
|
e073d18de6 | ||
|
|
95ac8ebb2b | ||
|
|
8f0d2e7d27 | ||
|
|
5b169a7ddb | ||
|
|
4d581a2acc | ||
|
|
3535daaa75 | ||
|
|
ca5021435a | ||
|
|
78a6dab5fc | ||
|
|
485fd53f03 | ||
|
|
44d1c1daf2 |
No files matched your search
+47
-31
@@ -1,26 +1,32 @@
|
||||
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 \
|
||||
mesa-vulkan-drivers.i686 \
|
||||
vulkan-loader \
|
||||
vulkan-loader.i686 \
|
||||
nautilus-my-computer \
|
||||
mesa-vulkan-drivers.i686 \
|
||||
vulkan-loader \
|
||||
vulkan-loader.i686 \
|
||||
vulkan-tools \
|
||||
glibc-langpack-fr \
|
||||
langpacks-core-fr \
|
||||
@@ -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 clean all \
|
||||
&& rm -rf /var/cache/dnf
|
||||
&& (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
|
||||
|
||||
#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
|
||||
#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 -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
|
||||
@@ -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
|
||||
|
||||
@@ -97,19 +113,27 @@ 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
|
||||
├── 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é)
|
||||
│ └── 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
|
||||
- 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
|
||||
|
||||
|
||||
@@ -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,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} .
|
||||
@@ -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"]
|
||||
@@ -0,0 +1,6 @@
|
||||
Section "InputClass"
|
||||
Identifier "system-keyboard"
|
||||
MatchIsKeyboard "on"
|
||||
Option "XkbModel" "pc105"
|
||||
Option "XkbLayout" "fr"
|
||||
EndSection
|
||||
@@ -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
|
||||
Reference in new issue
Block a user