278 lines
12 KiB
Markdown
278 lines
12 KiB
Markdown
# Release et distribution
|
|
|
|
Cette page explique **comment fonctionne une release de Pena** : ce que produit réellement la
|
|
compilation, **si un binaire compilé sur une distribution Linux est utilisable sur n'importe
|
|
quelle autre**, et les différentes façons de **distribuer** l'application — avec un focus sur le
|
|
**paquet Flatpak** et ses avantages/inconvénients.
|
|
|
|
- Pour les commandes de compilation pures, voir [Build et compilation](3.3-Build.md).
|
|
- Pour la procédure pas-à-pas d'installation Flatpak sur système immuable, voir
|
|
[Installation sur Bazzite OS](3.2-Installation-Bazzite.md).
|
|
|
|
---
|
|
|
|
## 1. Que produit une release ?
|
|
|
|
`cargo tauri build` (depuis `Pena-tauri/`) produit un **exécutable natif** :
|
|
|
|
```
|
|
src-tauri/target/release/pena-taury
|
|
```
|
|
|
|
C'est un binaire ELF compilé pour l'architecture de la machine de build (typiquement
|
|
`x86_64-linux-gnu`). Le frontend (HTML/CSS/JS de `src/`) y est **embarqué** dans le binaire :
|
|
il n'y a pas de fichiers web à distribuer à côté.
|
|
|
|
> Dans `tauri.conf.json`, `bundle.active` vaut `false` : `cargo tauri build` ne génère donc
|
|
> **pas** de `.deb`/`.rpm`/`.AppImage` automatiquement. Il produit l'exécutable seul. La
|
|
> génération de paquets est traitée plus bas (section 4).
|
|
|
|
### Ce que le binaire contient — et ce qu'il ne contient pas
|
|
|
|
| Embarqué dans le binaire | **Pas** embarqué (fourni par le système) |
|
|
|---|---|
|
|
| Code Rust de Pena (commandes Tauri) | **glibc** (bibliothèque C) |
|
|
| Frontend (HTML/CSS/JS) | **WebKitGTK** (le moteur de rendu de la fenêtre) |
|
|
| `comrak` + `syntect` (rendu Markdown) | **GTK 3/4**, GLib, Cairo, Pango… |
|
|
| Plugins Tauri liés statiquement | Pilotes graphiques, serveur d'affichage (X11/Wayland) |
|
|
|
|
C'est ce tableau qui répond à la question de la portabilité.
|
|
|
|
---
|
|
|
|
## 2. Un binaire compilé sur Linux marche-t-il sur **n'importe quelle** distribution ?
|
|
|
|
**Réponse courte : non, pas de façon fiable.** Un binaire « brut » (le `pena-taury` produit
|
|
ci-dessus) n'est **pas universel**. Il dépend de bibliothèques présentes sur le système cible,
|
|
et il ne tournera ailleurs que si ces bibliothèques sont **présentes et compatibles**.
|
|
|
|
Trois raisons concrètes :
|
|
|
|
### 2.1 — Le lien dynamique avec WebKitGTK
|
|
|
|
C'est la contrainte la plus dure pour une app Tauri. Le binaire est lié à
|
|
**`libwebkit2gtk-4.1`**. Sur la machine cible, il faut :
|
|
|
|
- que WebKitGTK soit **installé** ;
|
|
- que ce soit la **bonne version d'ABI** : `webkit2gtk-4.0` et `webkit2gtk-4.1` ont des
|
|
*sonames* différents et **ne sont pas interchangeables**. Un binaire lié à `4.1` ne démarrera
|
|
pas sur une machine qui n'a que `4.0`, et inversement.
|
|
|
|
Sur une distribution récente, WebKitGTK 4.1 est généralement disponible ; sur une
|
|
distribution plus ancienne ou minimaliste, il peut manquer.
|
|
|
|
### 2.2 — La version de la glibc
|
|
|
|
Les binaires liés à la glibc sont **compatibles vers l'avant, pas vers l'arrière** :
|
|
|
|
- un binaire compilé sur une **vieille** glibc tourne sur une machine ayant une glibc **plus
|
|
récente** ✅ ;
|
|
- un binaire compilé sur une glibc **récente** échoue sur une machine ayant une glibc **plus
|
|
ancienne** ❌, avec une erreur du type `version 'GLIBC_2.38' not found`.
|
|
|
|
**Conséquence pratique :** pour maximiser la portabilité d'un binaire brut, compilez-le sur la
|
|
distribution la **plus ancienne** que vous comptez supporter (par ex. dans un container
|
|
Ubuntu 22.04), pas sur la plus récente.
|
|
|
|
### 2.3 — Les autres bibliothèques système
|
|
|
|
GTK, GLib, Cairo, Pango, librsvg, libappindicator… doivent aussi être présentes. Sur un poste
|
|
de bureau classique elles le sont presque toujours (ce sont des dépendances de l'environnement
|
|
de bureau), mais sur un serveur, un système minimal ou immuable, ce n'est pas garanti.
|
|
|
|
### Récapitulatif portabilité
|
|
|
|
| Cible | Le binaire brut marche-t-il ? |
|
|
|---|---|
|
|
| Même distribution / version que la machine de build | ✅ Oui |
|
|
| Distribution différente mais récente, avec `webkit2gtk-4.1` et glibc ≥ celle du build | ✅ Généralement |
|
|
| Distribution avec une glibc **plus ancienne** que le build | ❌ Non (`GLIBC_x.y not found`) |
|
|
| Distribution qui n'a que `webkit2gtk-4.0` | ❌ Non (soname incompatible) |
|
|
| Système immuable (Bazzite, Silverblue…) | ❌ Pas directement — voir Flatpak |
|
|
| Architecture différente (ARM vs x86_64) | ❌ Non — il faut recompiler pour l'archi |
|
|
|
|
**Conclusion :** « compilé sur Linux » ne veut pas dire « marche sur tout Linux ». Pour une
|
|
distribution **réellement universelle**, il faut un format qui **embarque ses dépendances** :
|
|
c'est le rôle du **Flatpak** (recommandé ici) ou de l'**AppImage**.
|
|
|
|
---
|
|
|
|
## 3. Les formats de distribution possibles
|
|
|
|
| Format | Dépendances | Portabilité | Intégration bureau | Mise à jour |
|
|
|---|---|---|---|---|
|
|
| **Binaire brut** | Fournies par l'hôte | Faible (voir §2) | Manuelle (`.desktop`) | Manuelle |
|
|
| **`.deb` / `.rpm`** | Déclarées, résolues par le gestionnaire de paquets | Bonne **sur la famille visée** (Debian *ou* Fedora) | Automatique | Via le gestionnaire |
|
|
| **AppImage** | **Embarquées** dans un fichier exécutable | Bonne (un seul fichier portable) | Partielle | Manuelle (re-télécharger) |
|
|
| **Flatpak** | **Embarquées** via un *runtime* partagé (Flathub) | **Excellente** (toute distro avec `flatpak`) | Complète (menu, icône) | `flatpak update` |
|
|
|
|
Pour Pena, le format **recommandé est le Flatpak** : il résout d'un coup les trois problèmes du
|
|
§2 (WebKitGTK, glibc, libs système) en fournissant un **runtime** complet et identique partout.
|
|
|
|
---
|
|
|
|
## 4. Créer un paquet Flatpak
|
|
|
|
Le Flatpak rend l'application **vraiment portable** : le moteur WebKitGTK et toutes les
|
|
bibliothèques système viennent du **runtime `org.gnome.Platform`** (téléchargé depuis Flathub),
|
|
pas de l'hôte. Le même `pena.flatpak` s'installe alors sur n'importe quelle distribution dotée
|
|
de `flatpak`, immuable ou non.
|
|
|
|
> La procédure complète (installation côté machine cible, hébergement sur Gitea, alternative
|
|
> développeur) est détaillée dans [Installation sur Bazzite OS](3.2-Installation-Bazzite.md).
|
|
> On résume ici les étapes de **production** du paquet.
|
|
|
|
### 4.1 — Principe en trois temps
|
|
|
|
```
|
|
[ cargo tauri build ] → binaire natif pena-taury
|
|
│
|
|
▼
|
|
[ manifeste Flatpak ] → build dans un dépôt OSTree local "repo/"
|
|
│
|
|
▼
|
|
[ flatpak build-bundle ] → fichier unique pena.flatpak
|
|
```
|
|
|
|
### 4.2 — Outillage (une fois)
|
|
|
|
```bash
|
|
flatpak install -y flathub org.gnome.Platform//47 org.gnome.Sdk//47 org.flatpak.Builder
|
|
```
|
|
|
|
### 4.3 — Le manifeste
|
|
|
|
Le manifeste décrit l'identifiant de l'app, le runtime qui fournit les dépendances, et comment
|
|
installer le binaire dans le sandbox. Depuis `Pena-tauri/`, créer **`com.pena.app.yml`** :
|
|
|
|
```yaml
|
|
id: com.pena.app # = identifier de tauri.conf.json
|
|
runtime: org.gnome.Platform # fournit WebKitGTK + GTK + glibc du runtime
|
|
runtime-version: '47'
|
|
sdk: org.gnome.Sdk
|
|
command: pena
|
|
|
|
finish-args:
|
|
- --share=ipc
|
|
- --socket=wayland
|
|
- --socket=fallback-x11
|
|
- --device=dri
|
|
- --filesystem=home:ro # lecture des fichiers Markdown de l'utilisateur
|
|
|
|
modules:
|
|
- name: pena
|
|
buildsystem: simple
|
|
build-commands:
|
|
- install -Dm755 pena-taury /app/bin/pena
|
|
- install -Dm644 com.pena.app.desktop /app/share/applications/com.pena.app.desktop
|
|
- install -Dm644 icon.png /app/share/icons/hicolor/512x512/apps/com.pena.app.png
|
|
sources:
|
|
- type: file
|
|
path: src-tauri/target/release/pena-taury
|
|
- type: file
|
|
path: com.pena.app.desktop
|
|
- type: file
|
|
path: src-tauri/icons/icon.png
|
|
```
|
|
|
|
Et le fichier d'intégration au menu **`com.pena.app.desktop`** :
|
|
|
|
```ini
|
|
[Desktop Entry]
|
|
Type=Application
|
|
Name=Pena
|
|
Comment=Lecteur Markdown
|
|
Exec=pena
|
|
Icon=com.pena.app
|
|
Terminal=false
|
|
Categories=Utility;Office;
|
|
```
|
|
|
|
> Point clé sur la portabilité : `finish-args` définit le **sandbox**. Pena n'a besoin que de
|
|
> l'affichage (Wayland/X11), du GPU (`dri`) et d'un **accès en lecture seule** au `home`
|
|
> (`--filesystem=home:ro`) pour ouvrir les fichiers `.md`. C'est volontairement minimal.
|
|
|
|
### 4.4 — Construire le bundle
|
|
|
|
Depuis `Pena-tauri/`, après un `cargo tauri build` réussi :
|
|
|
|
```bash
|
|
# 1. Construire dans un dépôt OSTree local "repo/"
|
|
flatpak run org.flatpak.Builder --force-clean --repo=repo \
|
|
--install-deps-from=flathub build-dir com.pena.app.yml
|
|
|
|
# 2. Exporter en UN SEUL fichier .flatpak autoportant
|
|
flatpak build-bundle repo pena.flatpak com.pena.app \
|
|
--runtime-repo=https://flathub.org/repo/flathub.flatpakrepo
|
|
```
|
|
|
|
On obtient **`pena.flatpak`** : un fichier unique, installable partout par
|
|
`flatpak install --user pena.flatpak`. L'option `--runtime-repo` y inscrit la référence
|
|
Flathub, pour que le runtime soit récupéré automatiquement à l'installation s'il manque.
|
|
|
|
---
|
|
|
|
## 5. Flatpak : avantages et inconvénients
|
|
|
|
### Avantages
|
|
|
|
- **Portabilité réelle.** Le runtime fournit WebKitGTK, GTK et une glibc cohérente : les trois
|
|
blocages du §2 disparaissent. Le même fichier marche sur Fedora, Ubuntu, Arch, Bazzite,
|
|
Silverblue… sans recompiler.
|
|
- **Aucune dépendance à installer sur l'hôte.** Idéal pour les systèmes **immuables** (Bazzite,
|
|
Silverblue) où l'on ne peut pas faire `dnf install webkit2gtk-devel`.
|
|
- **Installation sans root** (`--user`).
|
|
- **Sandbox.** L'app n'a accès qu'à ce que `finish-args` autorise (ici : affichage + `home` en
|
|
lecture seule). Surface d'attaque réduite.
|
|
- **Intégration de bureau** automatique (entrée de menu, icône) et **mises à jour** par
|
|
`flatpak update`.
|
|
- **Reproductible.** Le runtime versionné (`//47`) garantit le même socle partout.
|
|
|
|
### Inconvénients
|
|
|
|
- **Taille.** Le **runtime** `org.gnome.Platform` pèse plusieurs centaines de Mo. Il n'est
|
|
téléchargé qu'une fois et partagé entre toutes les apps Flatpak, mais c'est lourd pour une app
|
|
aussi simple que Pena si c'est le seul Flatpak de la machine.
|
|
- **Premier lancement / première install** plus longs (téléchargement du runtime).
|
|
- **Le sandbox demande de la réflexion.** Tout accès fichier hors `home:ro` doit être déclaré
|
|
explicitement ; un oubli se traduit par une fonctionnalité qui « ne voit pas » les fichiers.
|
|
- **Dépendance à Flathub** pour récupérer le runtime (réseau requis à l'installation).
|
|
- **Outillage de build** supplémentaire (`flatpak-builder`, SDK) par rapport à un simple
|
|
`cargo tauri build`.
|
|
|
|
### Quand préférer une autre option
|
|
|
|
| Situation | Format conseillé |
|
|
|---|---|
|
|
| Diffusion large, multi-distributions, systèmes immuables | **Flatpak** |
|
|
| Un seul fichier à exécuter sans rien installer | **AppImage** (`bundle.active: true`, cible `appimage`) |
|
|
| Cible une seule famille (que Debian, ou que Fedora) avec gestion par paquets | **`.deb`** / **`.rpm`** |
|
|
| Usage perso sur sa propre machine, ou itération de dev | **Binaire brut** / `cargo tauri dev` |
|
|
|
|
> **AppImage** est l'autre format « un seul fichier ». Tauri sait en produire (activer le
|
|
> bundler dans `tauri.conf.json`), mais le **Flatpak** est privilégié ici pour son intégration
|
|
> au menu, ses mises à jour propres et la gestion automatique des dépendances via Flathub.
|
|
|
|
---
|
|
|
|
## 6. Liste de contrôle d'une release
|
|
|
|
1. Vérifier la version dans `src-tauri/tauri.conf.json` (`"version"`).
|
|
2. Compiler dans un environnement à **glibc ancienne** si l'on distribue un binaire brut
|
|
(container Ubuntu 22.04), sinon directement.
|
|
3. `cargo tauri build` → vérifier `src-tauri/target/release/pena-taury`.
|
|
4. Construire le `pena.flatpak` (section 4).
|
|
5. Tester l'install sur une machine **vierge** : `flatpak install --user pena.flatpak` puis
|
|
`flatpak run com.pena.app`.
|
|
6. Héberger le `.flatpak` sur **une release Gitea** (URL stable, n'alourdit pas le dépôt) —
|
|
voir [3.2 §3.4](3.2-Installation-Bazzite.md).
|
|
|
|
---
|
|
|
|
## Voir aussi
|
|
|
|
- [Build et compilation](3.3-Build.md)
|
|
- [Installation sur Bazzite OS](3.2-Installation-Bazzite.md) — installation et hébergement du Flatpak
|
|
- [Installation (Linux générique / Fedora)](3.1-Installation.md)
|
|
- [Architecture](../2-technique/2.1-Architecture.md)
|