doc/pages/02.contribute/04.packaging_apps/02.technical_intro/packaging_apps_fr.md

118 lines
6.6 KiB
Markdown
Raw Normal View History

# Packaging dapplications <img src="/images/yunohost_package.png" width=100/>
2013-11-27 13:19:13 +01:00
2015-06-18 19:12:22 +02:00
Ce document a pour but de vous apprendre à packager une application pour YunoHost.
### Prérequis
Pour packager une application, voici les prérequis :
2020-10-01 13:31:16 +02:00
* Un compte sur un serveur Git comme [GitHub](https://github.com/) pour pouvoir ensuite publier lapplication;
* Maîtriser un minimum [Git](/packaging_apps_git), le Shell et dautres notions de programmation;
2020-03-28 06:54:10 +01:00
* Une [machine virtuelle ou sur un serveur distant](/install) ou un environnement de développement, [ynh-dev](https://github.com/yunohost/ynh-dev) ou [VirtualBox](/packaging_apps_virtualbox), pour packager et tester son paquet.
2017-02-03 16:21:57 +01:00
2020-03-28 06:54:10 +01:00
Si vous ne comprenez pas ces prérequis, ou si vous ne savez pas comment écrire du code, consulter d'abord l'[introduction au packaging](/packaging_apps_start).
2016-12-07 13:26:25 +01:00
### Contenu
2016-03-30 14:32:52 +02:00
Un paquet YunoHost est composé :
2015-06-18 19:12:22 +02:00
* dun `manifest.json`
* dun dossier `scripts`, composé de six scripts Shell `install`, `remove`, `upgrade`, `backup`, `change_url` et `restore`
2015-06-18 19:59:22 +02:00
* de dossiers optionnels, contenant les `sources` ou de la `conf`
* dun fichier `LICENSE` contenant la licence du paquet
* dune page de présentation du paquet contenu dans un fichier `README.md`
2016-02-19 12:11:39 +01:00
<a class="btn btn-lg btn-default" href="https://github.com/YunoHost/example_ynh">Paquet de base</a> nhésitez pas à vous en servir comme base de travail.
2014-11-04 09:37:21 +01:00
2016-01-26 17:29:42 +01:00
## Manifeste
2020-03-28 06:54:10 +01:00
<a class="btn btn-lg btn-default" href="/packaging_apps_manifest">Manifeste</a>
## Les scripts
2020-03-28 06:54:10 +01:00
<a class="btn btn-lg btn-default" href="/packaging_apps_scripts">Scripts</a>
### Architecture et arguments
2016-01-30 22:00:44 +01:00
Comme les instances de YunoHost possèdent une architecture unifiée, vous serez capable de deviner la plupart des réglages nécessaires. Mais si vous avez besoin de réglages spécifiques, comme le nom de domaine ou un chemin web pour configurer lapplication, vous devrez les demander aux administrateurs lors de linstallation (voir la section `arguments` dans le § **Manifeste** ci-dessus).
2020-03-28 06:54:10 +01:00
<a class="btn btn-lg btn-default" href="/packaging_apps_arguments_management">Gestion des arguments</a>
2020-09-15 13:57:31 +02:00
### Configuration NGINX
<a class="btn btn-lg btn-default" href="/packaging_apps_nginx_conf">Configuration NGINX</a>
2016-01-30 19:09:53 +01:00
2016-02-24 23:07:50 +01:00
### Multi-instance
2020-03-28 06:54:10 +01:00
<a class="btn btn-lg btn-default" href="/packaging_apps_multiinstance">Multi-instance</a>
2016-02-24 23:07:50 +01:00
### Hooks
2020-03-28 06:54:10 +01:00
<a class="btn btn-lg btn-default" href="/packaging_apps_hooks">Hooks</a>
2013-12-01 15:20:40 +01:00
### Commandes pratiques
2020-03-28 06:54:10 +01:00
<a class="btn btn-lg btn-default" href="/packaging_apps_helpers">Commandes pratiques</a>
2015-08-10 01:11:35 +02:00
### Référencement des logs
2018-08-26 17:48:21 +02:00
Dans de nombreuses situations, vous pouvez vouloir indexer un fichier de log pour qu'il soit affiché dans la webadmin. Pour indexer un log, il faut créer un fichier d'indexation dans `/var/log/yunohost/categories/app/APPNAME.yml`.
2018-08-26 17:48:21 +02:00
Il est possible de spécifier la date de début en commençant le nom de fichier par la date `YYYYMMDD-HHMMSS`.
2020-09-15 13:57:31 +02:00
Exemple de fichier de log d'indexation :
2018-08-26 17:48:21 +02:00
```bash
log_path: /chemin/vers/le/fichier.log
```
Il est possible d'afficher des infos complémentaires, la variable env sera affichée dans la partie "Contexte" :
2018-08-26 17:48:21 +02:00
```bash
extra:
env:
args1: value1
args2: value2
args3: value3
```
Il est possible de rattacher le log à une application précise et/ou un service, un nom de domaine, une personne :
2018-08-26 17:48:21 +02:00
```bash
related_to:
- ['app', 'APPNAME']
- ['service', 'SERVICE1']
- ['service', 'SERVICE2']
- ['domain', 'DOMAIN.TLD']
```
2018-08-26 17:48:21 +02:00
Ces informations seront utilisées pour permettre de filtrer les logs en relation avec une de ces entités application, service, domaine, personne.
2015-08-10 17:57:03 +02:00
### Améliorer la qualité du paquet dinstallation
2016-03-30 14:32:52 +02:00
Vous trouverez ci-dessous une liste des points à vérifier concernant la qualité de vos scripts :
* Vos scripts utilisent bien `sudo cp -a ../sources/. $final_path` plutôt que `sudo cp -a ../sources/* $final_path`;
2020-03-28 06:54:10 +01:00
* Votre script dinstallation contient une gestion en cas derreurs du script pour supprimer les fichiers résiduels à laide de `set -e` et de [trap](/packaging_apps_trap);
2016-03-30 14:32:52 +02:00
* Votre script dinstallation utilise une méthode dinstallation en ligne de commande plutôt quun appel curl via un formulaire web dinstallation;
* Votre script dinstallation enregistre les réponses de lutilisateur;
* Vous avez vérifié les sources de lapplication avec une somme de contrôle (sha256, sha1 ou md5) ou une signature PGP;
2020-07-27 18:55:33 +02:00
* Vos scripts ont été testés sur Debian Buster 32 bits, 64 bits et ARM;
2015-08-10 17:57:03 +02:00
* Les scripts backup et restore sont présents et fonctionnels.
2015-08-10 01:11:35 +02:00
2020-03-28 06:54:10 +01:00
Pour mesurer la qualité d'un paquet, celui-ci obtiendra un [niveau](/packaging_apps_levels), déterminé en fonction de divers critères d'installation et selon le respect des [règles de packaging](/packaging_apps_guidelines).
2016-02-24 21:28:39 +01:00
### Script de vérification du paquet
<a class="btn btn-lg btn-default" href="https://github.com/YunoHost/package_checker">Vérificateur de paquets</a>
2016-03-30 14:32:52 +02:00
Il sagit dun script Python qui vérifie :
2016-02-24 21:28:39 +01:00
* que le paquet est à jour concernant les dernières spécifications
2016-02-24 21:30:11 +01:00
* que tous les fichiers sont présents
2016-02-24 21:28:39 +01:00
* que le manifeste ne comporte pas derreur de syntaxe
2016-02-24 21:30:11 +01:00
* que les scripts quittent bien avant de modifier le système lors de vérifications.
2016-02-24 21:28:39 +01:00
2019-03-10 00:37:25 +01:00
### Intégration continue
Un serveur d'intégration continue est a disposition des packagers désirant tester leurs applications.
<a class="btn btn-lg btn-default" href="packaging_apps_ci">Intégration continue</a>
2015-06-18 19:12:22 +02:00
### Publiez et demandez des tests de votre application
2015-10-06 00:24:18 +02:00
* Demandez des tests et des retours sur votre application en publiant un [post sur le Forum](https://forum.yunohost.org/) dans la [catégorie `App integration`](https://forum.yunohost.org/c/app-integration).
2015-06-18 19:12:22 +02:00
2020-03-28 06:54:10 +01:00
* Si votre paquet et l'application qu'il contient sont sous licence libre, faites une demande dajout de votre application dans le [dépôt des applications](https://github.com/YunoHost/apps) (voir aussi [la liste des apps](/apps)). Vous pouvez ajouter une application même si celle-ci n'est pour le moment pas fonctionelle : l'état d'avancement peut être `notworking`, `inprogress` ou `working`.
* Si votre application n'est *pas* sous licence libre, il se peut qu'une liste non-officielle soit créée pour gérer ces applications. Ce n'est pour l'instant pas le cas.
2016-03-09 16:14:23 +01:00
2015-06-18 19:59:22 +02:00
### Officialisation dune application
2019-03-08 15:51:42 +01:00
**!! Section obsolète au 08/03/19** - Le fonctionnement du projet est en cours d'évolution sur ce point.
2020-07-27 18:55:33 +02:00
Pour quune application devienne officielle, elle doit être suffisamment testée, stable et fonctionner sous Debian Buster 64 bits, 32 bits et ARM. Si ces conditions vous paraissent réunies, demandez l[intégration officielle](https://github.com/YunoHost/apps) de votre application.