PUBLICATION.md donne les gestes pas à pas, avec le contrôle attendu à chaque étape : première mise en production, montée de version (0.1.0 → 0.1.1), retour arrière si la mise à jour échoue, désinstallation. Deux points qui se paient cher s'ils sont oubliés y sont explicites : `--version` est obligatoire pour une nouvelle version applicative (sans lui le script reproduit celle du manifeste), et la sauvegarde de sécurité pré-upgrade ne contient PAS le répertoire de données. README et A_FAIRE renvoient au fichier plutôt que de tripler la procédure. Dernière URL fictive éliminée : gitea.exemple.org subsistait dans l'exemple CI de publier-release.sh. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
85 lines
3.6 KiB
Markdown
85 lines
3.6 KiB
Markdown
# État du paquet
|
|
|
|
Mis à jour le 2026-08-18, après une installation, une sauvegarde et une mise à jour
|
|
réussies sur le serveur réel.
|
|
|
|
**Aucune tâche bloquante.** Ce fichier garde les contraintes permanentes et le
|
|
journal de ce qui a été réglé — le *pourquoi* resservira à la prochaine version.
|
|
|
|
---
|
|
|
|
## Publier une nouvelle version
|
|
|
|
📖 La marche à suivre est dans [`PUBLICATION.md`](PUBLICATION.md) — première mise en
|
|
production, montée de version, retour arrière, désinstallation.
|
|
|
|
En résumé : `./build/publier-release.sh --version X.Y.Z`, tag et release sur le dépôt
|
|
du code, téléversement de l'archive, puis commit **et push** du manifeste.
|
|
|
|
Le suffixe `~ynhN` se bump à la main quand seul le paquet change (conf, scripts) sans
|
|
nouvelle archive — c'est ce qui a été fait pour `~ynh2` et `~ynh3`.
|
|
|
|
---
|
|
|
|
# Contraintes permanentes — ce ne sont pas des tâches
|
|
|
|
## Le dépôt du code doit rester public
|
|
|
|
`ynh_setup_source` télécharge **sans jeton**. Sur un dépôt privé, Gitea répond
|
|
**404 et non 403** à un anonyme : le symptôme est identique à « la release n'existe
|
|
pas », ce qui envoie chercher au mauvais endroit. Ne pas mettre de jeton dans l'URL
|
|
du manifeste — il serait lisible sur le serveur.
|
|
|
|
## L'application exige un domaine entier, pas un sous-chemin
|
|
|
|
MaBibli s'installe sur `mabibli.mondomaine.tld`, **pas** sur `mondomaine.tld/mabibli`.
|
|
|
|
Deux éléments sont figés **à la compilation** du client Blazor WebAssembly : la balise
|
|
`<base href="/">` de `index.html`, et les empreintes d'intégrité de
|
|
`service-worker-assets.js`. Les réécrire sur le serveur casserait le service worker,
|
|
donc le mode hors-ligne — et rien n'est recompilé sur le serveur, c'est tout l'intérêt
|
|
du self-contained. Le paquet déclare donc l'application en `full_domain`.
|
|
|
|
Lever cette contrainte demanderait une archive **par chemin d'installation**, ou une
|
|
compilation sur le serveur. Les deux annulent le bénéfice du self-contained.
|
|
|
|
## `install_dir` finit par appartenir à l'application, pas à root
|
|
|
|
Le manifeste demande `owner = "root:rwx"` pour que le service ne puisse pas réécrire
|
|
ses binaires, mais le helper `_ynh_apply_default_permissions` repasse derrière avec un
|
|
`chown -R mabibli:mabibli`. L'intention tient quand même, portée par
|
|
`ProtectSystem=strict` dans l'unité systemd : tout est en lecture seule sauf
|
|
`ReadWritePaths=`, qui ne liste que le `data_dir`.
|
|
|
|
⚠️ Ne pas retirer `ProtectSystem=strict` en croyant que la propriété des fichiers
|
|
protège encore.
|
|
|
|
---
|
|
|
|
# Fait
|
|
|
|
## Les deux pièges systemd — 2026-08-18
|
|
|
|
Découverts à la première installation réelle, chacun a coûté un cycle complet. Ni
|
|
l'un ni l'autre ne peut sortir d'un lancement du binaire à la main : ils tiennent au
|
|
gestionnaire de services.
|
|
|
|
| Piège | Symptôme | Correction |
|
|
|---|---|---|
|
|
| `Environment=` découpe sur les espaces | `ArgumentException … at index 0` | guillemeter toute la ligne |
|
|
| `ProtectHome=yes` masque `/home` | `SQLite Error 14: unable to open database file` | `ProtectHome=tmpfs` + `BindPaths=` |
|
|
|
|
Détail et mesures dans les commentaires de `conf/systemd.service`, à ne pas retirer.
|
|
|
|
## L'URL de démonstration a été remplacée — 2026-08-18
|
|
|
|
`manifest.toml` portait `gitea.example.org` : l'installation s'arrêtait net au
|
|
`Prefetching asset main`. Corrigé partout (`manifest.toml`, `README.md`,
|
|
`conf/systemd.service`, et la valeur par défaut de `--base-url`). Contrôle :
|
|
`grep -rn "gitea.example.org" .` ne doit plus rien remonter que ce fichier-ci.
|
|
|
|
## L'archive ne va plus dans git — 2026-08-18
|
|
|
|
`build/dist/` est ignoré. L'archive vit dans la release Gitea ; committée, elle
|
|
ajouterait 69 Mo d'historique **par version**, définitivement.
|