À partir de YunoHost 2.4, de **nouvelles commandes pratiques *(helpers)* en shell** sont disponible pour faciliter le *packaging*, particulièrement pour des tâches répétitives comme la génération de mot de passe, la création de base de données MySQL…
Des exemples sont disponibles dans l’[application d’exemple](https://github.com/YunoHost/example_ynh/blob/master/scripts/install). Il est conseillé d’utiliser les commandes pratiques.
Le script helpers va exécuter tout les scripts présent dans helpers.d et donc charger les fonctions des helpers. Afin qu'elles puissent être appelées simplement.
> Créer l'utilisateur sql `USER` et lui octroie tout les droits sur une nouvelle base de donnée `NAME`.
Si aucun mot de passe n'est indiqué, un nouveau est généré et stocké dans la variable $db_pwd ainsi que dans la configuration de l'application sous le nom "mysqlpwd"
**Nécessite YunoHost version 2.6.4**
```bash
ynh_mysql_remove_db USER NAME
```
> Supprime l'utilisateur sql `USER` et sa base de donnée `NAME`.
**Nécessite YunoHost version 2.6.4**
```bash
ynh_sanitize_dbid NAME
```
> Corrige le nom d'une base de donnée pour s'assurer qu'il ne contient pas de caractères interdits.
> Exécute les commandes SQL contenues dans le fichier `FILE` en tant que l'utilisateur root sur la base de données `DB` (ce dernier argument est optionnel).
> Crée la base de données `DB` et donne tous les droits sur celle-ci à l'utilisateur `USER` (automatiquement créé) identifié par le mot de passe `PWD`.
> Installe les paquets requis par une app sous forme de dépendance. De cette manière les paquets supplémentaires installés sont gérés en tant que dépendances par apt.
Il est préférable d'installer les paquets nécessaire par ce helper plutôt que par apt directement.
> Stocke le réglage nommé `KEY` dont la valeur est `VALUE` pour l'application `APP `, afin de le réutiliser plus tard (typiquement dans le script `upgrade`) ou pour que YunoHost puisse se configurer automatiquement (par exemple pour le SSO).
> Les réglages sont stockés dans le fichier /etc/yunohost/apps/${APP}/settings.yml.
Une url ajoutée avec la clé *skipped_uris* sera totalement ignorée par le SSO, donc l'accès sera public et ne prendra pas en compte un utilisateur déjà connecté.
Une url ajoutée avec la clé *unprotected_uris* sera accessible publiquement, mais un utilisateur connecté au SSO pourra se connecter en utilisant le header HTTP.
> Il est important de noter que ce ne sont pas véritablement des expressions régulières qui seront interprétés, mais des patterns lua, dont la syntaxe différe légèrement.
> [Plus d'infos sur la syntaxe des patterns lua.](http://wxlua.free.fr/Tutoriel_Lua/Tuto/Strings/strings6.php) [Ainsi que quelques exemples.](http://wxlua.free.fr/Tutoriel_Lua/Tuto/Strings/strings7.php)
Les patterns utilisant des regex, contrairement aux précédents, sont recherchés sur la totalité de l'URL, et non uniquement sur la partie spécifique à l'application. Il convient donc d'écrire des patterns qui englobent l'URL entière (incluant *domaine* et *chemin*).
> Cela pose toutefois un éventuel problème, si les variables $domain ou $path contiennent un tiret (-), celui-ci sera interprété comme étant un caractère magique du pattern. Il faut donc échapper les éventuels tirets avec un %.
> Créer un fichier de configuration logrotate pour cette application.
Si `LOGFILE` est renseigné, ce fichier de log sera utilisé. Sinon, la configuration concernera le dossier de log /var/log/${app}.
Si `--non-append` est ajouté, le fichier de configuration logrotate sera effacé puis recréé.
> **Nécessite YunoHost version 2.6.4**
```bash
ynh_remove_logrotate
```
> Supprime la configuration logrotate pour cette application.
> **Nécessite YunoHost version 2.6.4**
```bash
ynh_add_systemd_config
```
> Utilise la configuration systemd présente dans conf/systemd.service pour configurer un service.
Les termes `__APP__` et `__FINALPATH__` sont remplacés respectivement par $app et $final_path.
Le fichier de configuration est copié dans /etc/systemd/system/$app.service et le service est activé.
> **Nécessite YunoHost version 2.6.4**
```bash
ynh_remove_systemd_config
```
> Supprime la configuration systemd pour cette application.
> **Nécessite YunoHost version 2.6.4**
```bash
ynh_add_nginx_config
```
> Utilise la configuration nginx présente dans conf/nginx.conf.
Les termes suivant sont remplacés `__PATH__` par $path_url, `__DOMAIN__` par $domain, `__PORT__` par $port, `__NAME__` par $app et `__FINALPATH__` par $final_path.
Le fichier de configuration est copié dans /etc/nginx/conf.d/$domain.d/$app.conf et nginx est rechargé.
> **Nécessite YunoHost version 2.6.4**
```bash
ynh_remove_nginx_config
```
> Supprime la configuration nginx pour cette application.
> **Nécessite YunoHost version 2.6.4**
```bash
ynh_add_fpm_config
```
> Utilise la configuration phpfpm présente dans conf/php-fpm.conf.
Les termes suivant sont remplacés `__NAMETOCHANGE__` par $app, `__FINALPATH__` par $final_path et `__USER__` par $app.
Le fichier de configuration est copié dans /etc/php5/fpm/pool.d/$app.conf.
Le fichier conf/php-fpm.ini est copié dans /etc/php5/fpm/conf.d/20-$app.ini et php-fpm est rechargé.
> **Nécessite YunoHost version 2.6.4**
```bash
ynh_remove_fpm_config
```
> Supprime la configuration php-fpm pour cette application.
> **Nécessite YunoHost version 2.6.4**
#### Backup/restore
```bash
ynh_backup DEST
```
> Ajoute le fichier ou dossier `DEST` à la liste des fichiers à ajouter au backup de l'application.
`DEST` doit être un chemin absolu.
> **Nécessite YunoHost version 2.6.4**
```bash
ynh_restore_file DEST
```
> Restaure le fichier ou dossier `DEST`.
`DEST` doit être un chemin absolu.
> **Nécessite YunoHost version 2.6.4**
```bash
ynh_restore
```
> Restaure tous les fichiers archivés par le script backup.
> **Nécessite YunoHost version 2.6.4**
#### Gestion des erreurs
```bash
ynh_abort_if_errors
```
> Stop immédiatement l'exécution du script si une commande échoue ou si une variable non initialisée est utilisée.
> **Nécessite YunoHost version 2.6.4**
> Si le script risque de laisser des résidus lors de son arrêt, il est possible d'utiliser la fonction `ynh_clean_setup` pour exécuter des commandes avant l'arrêt effectif du script.
> ```bash
> ynh_clean_setup () {
> instructions...
> }
> ```
```bash
ynh_backup_before_upgrade
```
> Créer un backup de l'application avant de démarrer l'upgrade.
> **Nécessite YunoHost version 2.6.4**
```bash
ynh_restore_upgradebackup
```
> Restaure le backup créé par ynh_backup_before_upgrade en cas d'échec de l'upgrade.
> **Nécessite YunoHost version 2.6.4**
> Ces 2 helpers s'utilisent de la manière suivante:
> Remplace toute les occurences de la chaine `MATCH_STRING` par `REPLACE_STRING` dans le fichier `TARGET_FILE`.
> **Nécessite YunoHost version 2.6.4**
```bash
ynh_local_curl URL KEY1=VALUE1 KEY2=VALUE2 ...
```
> Effectue une requête curl sur la page `URL` et renseigne les champs POST `KEY1`, `KEY2`, etc par `VALUE1`, `VALUE2`, etc.
> Ce helper est surtout utilisé pour remplir les formulaires d'installation des applications.
> `URL` ne doit pas contenir le domaine et le path.
> **Nécessite YunoHost version 2.6.4**
```bash
ynh_setup_source DEST_DIR [SOURCE_ID]
```
> Télécharge la source de l'application, vérifie la somme de contrôle, la décompresse et la copie dans le dossier `DEST_DIR`.
> Si SOURCE_ID n'est pas renseigné, il prend la valeur `app`.
> Ce helper nécessite un fichier [conf/SOURCE_ID.src](https://github.com/YunoHost/example_ynh/blob/master/conf/app.src) indiquant les informations sur la source à télécharger.
> Vérifie la disponibilité du chemin DOMAIN/PATH. Il est utile pour les applications web et vous permet d’être sûr que le chemin n’est pas utilisé par une autre application. Si le chemin est inutilisé, elle le « réserve » pour l'application APP.