Files
mabibli_ynh/A_FAIRE.md
T
mathieuandClaude Opus 5 54a22b1579 Écrire la marche à suivre : mise en production et montée de version
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>
2026-08-18 21:05:56 +02:00

3.6 KiB

É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 — 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.