diff --git a/install_iso.md b/install_iso.md
index a947f1af..059f45eb 100644
--- a/install_iso.md
+++ b/install_iso.md
@@ -13,13 +13,15 @@ You can use any computer with **256MB RAM or more**.
* Another computer to read this guide and access to your server.
* A [reasonable ISP](/isp), preferably with a good and unlimited upstream bandwidth
* A **USB stick** of at least 1GB capacity **OR** a standard **blank CD**
-* One of the latest **YunoHost ISO images**, available here (take the 32 Bits one if you don't know which one to choose):
- - https://build.yunohost.org
+* ***Particular case*** : If your server has no graphic card, [prepare iso for booting with serial port](https://github.com/luffah/debian-mkserialiso).
---
## Installation steps
+
+
@@ -32,6 +34,3 @@ To connect directly to your computer or with [SSH](/ssh) (only on local network:
* User: **root**
* Password: **yunohost**
----
-
-***Need help during one of these steps? [Get support!](/support)***
diff --git a/install_iso_fr.md b/install_iso_fr.md
index a493fd00..a118e589 100644
--- a/install_iso_fr.md
+++ b/install_iso_fr.md
@@ -12,13 +12,14 @@
* Un autre ordinateur pour parcourir ce guide et accéder à votre serveur
* Un [fournisseur d’accès correct](/isp_fr), de préférence avec une bonne vitesse d’upload
* Une **clé USB** d’une capacité minimum d’1Go **OU** un **CD vierge** standard
-* Une des dernières **images ISO YunoHost** (dans le doute prenez la version 32 bits) :
- - https://build.yunohost.org
+* ***Cas particulier*** : Si votre serveur n'a pas de carte graphique, il faut [préparer un iso qui démarre sur le port série](https://github.com/luffah/debian-mkserialiso).
---
## Étapes d’installation
+
@@ -31,5 +32,7 @@ Pour se connecter directement sur l’ordinateur (uniquement en local) :
* Utilisateur : **root**
* Mot de passe : **yunohost**
----
-***Si vous avez besoin d’aide lors de ces étapes, n’hésitez pas à utiliser les différents [moyens de support](/support_fr).***
+
+## Cas spécifiques / avancés
+
+Si l'ordinateur n'a pas de carte graphique mais a un port série : il faut modifier l'ISO pour démarrer avec la console série. Une solution est d'utiliser [un script qui modifie les options de démarrage](https://github.com/luffah/debian-mkserialiso).
diff --git a/install_manually.md b/install_manually.md
index 5b5e9a1a..7e143e76 100644
--- a/install_manually.md
+++ b/install_manually.md
@@ -1,43 +1,18 @@
-# Install YunoHost manually
+# Installing YunoHost manually
-Once you have access to your server, either directly or by SSH, you can install YunoHost using the install script.
+Once you have access to a command line on your server (either directly or through SSH), you can install yunohost by running command as root :
-
-
-1. Install git
```bash
-sudo apt-get install git dialog
+bash <(wget -q -O- https://install.yunohost.org/)
```
-2. Clone the Yunohost install script repository
-```bash
-git clone https://github.com/YunoHost/install_script /tmp/install_script
-```
+
-3. The root user must have a password set, if it isn't the case, set it (whithout the install script failed):
-```bash
-sudo passwd root
-```
-
-4. Execute the installation script
-```bash
-cd /tmp/install_script && sudo ./install_yunohost
-```
-
-
+Once the installation is finished, you may want to [**proceed to post-installation**](/postinstall)
---
-*Once the installation is finished, you may want to proceed to post-installation: **[yunohost.org/postinstall](/postinstall)** *
+**Note for advanced users concerned with the `curl|bash` approach**
+
+If you strongly object to the `curl|bash` way (and similar commands) of installing software, consider reading ["Is curl|bash insecure?"](https://sandstorm.io/news/2015-09-24-is-curl-bash-insecure-pgp-verified-install) on Sandstom's blog, and possibly [this discussion on Hacker News](https://news.ycombinator.com/item?id=12766350).
+
diff --git a/install_manually_fr.md b/install_manually_fr.md
index 8fc55610..35ff82ef 100644
--- a/install_manually_fr.md
+++ b/install_manually_fr.md
@@ -1,43 +1,18 @@
# Installer YunoHost manuellement
-Une fois que vous avez accès à votre serveur, directement ou par SSH, vous pouvez installer YunoHost avec le script d’installation.
+Une fois que vous avez accès à votre serveur (directement ou par SSH), vous pouvez installer YunoHost en executant cette commande en tant que root :
-
-
-1. Installez git
```bash
-sudo apt-get install git dialog
+bash <(wget -q -O- https://install.yunohost.org/)
```
-2. Clonez le dépôt du script d’installation de YunoHost
-```bash
-git clone https://github.com/YunoHost/install_script /tmp/install_script
-```
+
-3. L’utilisateur root doit avoir un mot de passe, si ce n’est pas le cas, créez-en un (sinon le script d’installation échoue) :
-```bash
-sudo passwd root
-```
-
-4. Lancez le script d’installation
-```bash
-cd /tmp/install_script && sudo ./install_yunohost
-```
-
-
+Une fois l'installation terminée, il vous faudra [**procéder à la post-installation**](/postinstall)
---
-*Une fois l’installation terminée, vous pouvez procéder à la post-installation : **[yunohost.org/postinstall](/postinstall_fr)** *
+**Note pour les utilisateurs avancés inquiets à propos de l'approche `curl|bash`**
+
+Si vous êtes suspicieux de la tendance à utiliser `curl|bash` (ou commandes similaires) pour déployer des logiciels, prenez le temps de lire ["Is curl|bash insecure?"](https://sandstorm.io/news/2015-09-24-is-curl-bash-insecure-pgp-verified-install) sur le blog de Sandstom, et possiblement [cette discussion sur Hacker News](https://news.ycombinator.com/item?id=12766350).
+
diff --git a/install_on_arm_board.md b/install_on_arm_board.md
index 8b56085a..9e12e380 100644
--- a/install_on_arm_board.md
+++ b/install_on_arm_board.md
@@ -2,40 +2,51 @@
*Find other ways to install YunoHost **[here](/install)**.*
-### Requirements
-
-
-* An ARM board with 500MHz CPU and 512MB RAM.
-* A micro SD card: **4GB** capacity (or more), **class10** speed rate is highly recommended.
-* A [reasonable ISP](/isp), preferably with a good and unlimited upload bandwidth.
+
+Before setting up a server at home, it is recommended that you know the [possible limitations imposed by your ISP](/isp). If they are too restrictive, you might consider using a VPN to bypass them.
+
+YunoHost doesn't yet support ARM64 boards. For more information, see [this issue](https://github.com/YunoHost/issues/issues/438).
+
+
+## Pre-requisites
+
+- An ARM board with 500MHz CPU and 512MB RAM ;
+- A power supply for your board ;
+- A microSD card: **8GB** capacity (at least) and **Class 10** speed rate are highly recommended (like the [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ;
+- An ethernet cable (RJ-45) to connect your board to your router ;
+- A [reasonable ISP](/isp), preferably with a good and unlimited upload bandwidth.
---
-## Installation
-* Download the latest **[image of ARMbian Jessie for the ARM board](http://www.armbian.com/download)**
+## Install with the pre-installed image (recommended)
-
-* Connect via [SSH](ssh): **root@exemple.tld/ip_address** with the password: **1234**.
+
---
-#### Recommended after running the post-installation
-* Use [SSH authentication via key](security)
+## Install on top or ARMbian
----
+
diff --git a/install_on_arm_board_fr.md b/install_on_arm_board_fr.md
index 0c8cc277..aca92685 100644
--- a/install_on_arm_board_fr.md
+++ b/install_on_arm_board_fr.md
@@ -1,38 +1,51 @@
# Installer YunoHost sur carte ARM
-## Prérequis
+*Toutes les autres façons d’installer YunoHost sont listées **[ici](/install_fr)**.*
-
-* Une carte ARM avec un processeur de 500 MHz et 512 Mo de mémoire vive.
-* Une carte micro SD de capacité minimale de **4 GB** et de vitesse **class10**.
-* Un [fournisseur d’accès correct](/isp_fr), de préférence avec une bonne vitesse d’upload.
+
+Avant d'héberger un serveur chez vous, il est recommandé de prendre connaissance des [possibles limitations liées à votre FAI](/isp). Si votre FAI est trop contraignant, vous pouvez envisager d'utiliser un VPN pour contourner ces limitations.
+
+YunoHost ne supporte pour le moment pas les cartes ARM64. Pour plus d'informations, voir [ce ticket](https://github.com/YunoHost/issues/issues/438).
+
-* Télécharger la dernière **[image d’ARMbian Jessie pour la carte ARM](http://www.armbian.com/download)**.
-
-
-
-* Se connecter en [SSH](ssh_fr) : **root@exemple.tld/adresse_ip** avec le mot de passe : **1234**.
-
-
+- Une carte ARM avec un processeur de 500 MHz et 512 Mo de mémoire vive ;
+- Un adaptateur secteur pour alimenter la carte ;
+- Une carte microSD : au moins **8 Go** et **Classe 10** (par exemple une [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ;
+- Un câble ethernet/RJ-45 pour brancher la carte à votre routeur/box internet. (Avec le Raspberry Pi 0, vous pouvez connecter votre carte avec un câble OTG et un adaptateur Wifi USB.)
+- Un [fournisseur d’accès correct](/isp_fr), de préférence avec une bonne vitesse d’upload.
---
-#### Recommandé après la post-installation
-* Utilisez l’[authentification SSH par clé](security_fr)
+## Installation avec l'image pré-installée (recommandée)
+
+
---
-#### Créer une image
-* [Créer une image pour la carte ARM](build_arm_image_en)
+## Installation par dessus ARMbian
----
+
-***Si vous avez besoin d’aide lors de ces étapes, n’hésitez pas à utiliser les différents [moyens de support](/support_fr).***
diff --git a/install_on_debian.md b/install_on_debian.md
index 599f8671..c1efaf14 100644
--- a/install_on_debian.md
+++ b/install_on_debian.md
@@ -8,7 +8,7 @@
An ARM box, a VPS, a dedicated server, a standard x86 computer, an old Macintosh, ...
-* with **Debian 8** (Jessie) installed
+* with **Debian 9** (Stretch) installed
* connected to the Internet
* with a direct **root access** or via SSH
@@ -22,6 +22,3 @@ An ARM box, a VPS, a dedicated server, a standard x86 computer, an old Macintosh
----
-
-***Need help during one of these steps? [Get support!](/support)***
diff --git a/install_on_debian_ar.md b/install_on_debian_ar.md
new file mode 100644
index 00000000..23afb487
--- /dev/null
+++ b/install_on_debian_ar.md
@@ -0,0 +1,25 @@
+
-The latest Rasbpian Jessie image requires a screen and a keyboard, as it is no longer possible to connect directly to the Raspberry through SSH. Nevertheless it is possible to re-enable SSH at boot : before starting your Raspberry, put in the boot partition of the SD card an empty file named `ssh` (without extension).
+The latest Rasbpian images requires a screen and a keyboard, as it is no longer possible to connect directly to the Raspberry through SSH. Nevertheless it is possible to re-enable SSH at boot : before starting your Raspberry, put in the boot partition of the SD card an empty file named `ssh` (without extension).
-0. Install Raspbian Jessie Lite on the SD card ([instructions](https://www.raspberrypi.org/downloads/raspbian/)).
+0. Install Raspbian Stretch Lite on the SD card ([instructions](https://www.raspberrypi.org/downloads/raspbian/)).
1. Connect to your Raspberry Pi with the user `pi`. Set the root password with
```bash
@@ -56,6 +58,3 @@ sudo passwd root
4. Then follow the
.
----
-
-***If you need help during one of these steps, do not hesitate to use [our support tools](/support).***
diff --git a/install_on_raspberry_fr.md b/install_on_raspberry_fr.md
index 5d453af4..8fbc42be 100644
--- a/install_on_raspberry_fr.md
+++ b/install_on_raspberry_fr.md
@@ -3,7 +3,8 @@
*Toutes les autres façons d’installer YunoHost sont listées **[ici](/install_fr)**.*
@@ -13,17 +14,18 @@ Avant d'héberger un serveur chez vous, il est recommandé de prendre connaissan
## Prérequis
- Un Raspberry Pi 0, 1, 2 ou 3 ;
-- Une carte SD : au moins **8 Go** et **Classe 10** (par exemple une [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ;
-- Un adaptateur secteur pour la alimenter la carte ;
-- Un câble ethernet/RJ-45 pour brancher la carte à votre routeur/box internet. Avec le Raspberry Pi Zero vous pouvez connecter votre carte avec un câble OTG et un adaptateur Wifi USB.
+- Un adaptateur secteur pour alimenter la carte ;
+- Une carte microSD : au moins **8 Go** et **Classe 10** (par exemple une [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ;
+- Un câble ethernet/RJ-45 pour brancher la carte à votre routeur/box internet. (Avec le Raspberry Pi 0, vous pouvez connecter votre carte avec un câble OTG et un adaptateur Wifi USB.)
+- Un [fournisseur d’accès correct](/isp_fr), de préférence avec une bonne vitesse d’upload.
---
-## Installation avec l'image (recommandée)
+## Installation avec l'image pré-installée (recommandée)
-
1. Télécharger l'image pour Raspberry Pi
+
1. Télécharger l'image pour Raspberry Pi
-
2. Copier l’image sur une carte SD
+
2. Flasher la carte SD avec l'image
3. Brancher & démarrer
@@ -36,26 +38,23 @@ Avant d'héberger un serveur chez vous, il est recommandé de prendre connaissan
## Installation manuelle (déconseillée)
-Nous déconseillons l'installation manuelle car elle plus technique et plus longue que l'installation via l'image pré-installée. Cette documentation est surtout destinée aux utilisateurs avancés.
+Nous déconseillons l'installation manuelle car elle est plus technique et plus longue que l'installation via l'image pré-installée. Cette documentation est surtout destinée aux utilisateurs avancés.
Les dernières versions de Raspbian nécessitent un écran et un clavier, car il n'est plus possible de se connecter directement en SSH au Raspberry par défaut. Néanmoins, il est possible de réactiver le lancement de SSH au boot : il suffit de placer dans la partition boot de la carte SD un fichier nommé `ssh`, vide et sans extension.
-0. Installez Raspbian Jessie Lite ([instructions](https://www.raspberrypi.org/downloads/raspbian/)) sur la carte SD.
+0. Installez Raspbian Stretch Lite ([instructions](https://www.raspberrypi.org/downloads/raspbian/)) sur la carte SD.
1. Connectez-vous en ssh au Raspberry Pi avec l'utilisateur pi. Définissez un mot de passe root avec
```bash
sudo passwd root
```
-2. Modifiez `/etc/ssh/sshd_config` pour autoriser root à se logger en ssh, en remplacant `PermitRootLogin without-password` par `PermitRootLogin yes`. Rechargez le daemon ssh avec `service ssh reload`, puis re-connectez-vous en root.
+2. Modifiez `/etc/ssh/sshd_config` pour autoriser root à se logger en ssh, en remplaçant `PermitRootLogin without-password` par `PermitRootLogin yes`. Rechargez le daemon ssh avec `service ssh reload`, puis re-connectez-vous en root.
3. Déconnectez-vous et reconnectez-vous avec l'utilisateur root cette fois.
4. Poursuivez avec la
procédure d'installation manuelle générique.
----
-
-***Si vous avez besoin d’aide lors de ces étapes, n’hésitez pas à utiliser les différents [outils de support](/support_fr).***
diff --git a/install_on_virtualbox.md b/install_on_virtualbox.md
index 23467526..196ec176 100644
--- a/install_on_virtualbox.md
+++ b/install_on_virtualbox.md
@@ -7,7 +7,7 @@
* A x86 computer with VirtualBox installed and enough RAM capacity to be able to run a small virtual machine.
-* The latest stable **YunoHost ISO image**, available [here](https://build.yunohost.org).
+* The latest stable **YunoHost ISO image**, available [here](/images).
---
@@ -48,7 +48,7 @@ Start the virtual machine
-You will have to select your ISO image `yunohostv2-latest-amd64.iso` here, then you should see the YunoHost's boot screen.
+You will have to select your ISO image here, then you should see the YunoHost's boot screen.
@@ -73,6 +73,3 @@ After the reboot, you will see this screen:
* You can get more information on the post-installation here: **[yunohost.org/postinstall](/postinstall)**
----
-
-***Need help during one of these steps? [Get support!](/support)***
diff --git a/install_on_virtualbox_fr.md b/install_on_virtualbox_fr.md
index 80732f28..c93d9901 100644
--- a/install_on_virtualbox_fr.md
+++ b/install_on_virtualbox_fr.md
@@ -1,4 +1,4 @@
-# Installer YunoHost sur VitualBox
+# Installer YunoHost sur VirtualBox
*Trouvez d’autres moyens d’installer YunoHost **[ici](/install_fr)**.*
@@ -7,7 +7,7 @@
* Un ordinateur x86 avec VirtualBox installé et assez de RAM disponible pour lancer une petite machine virtuelle.
-* La dernière **image ISO YunoHost** stable, disponible [ici](https://build.yunohost.org).
+* La dernière **image ISO YunoHost** stable, disponible [ici](/images_fr).
---
@@ -47,7 +47,7 @@ Démarrez votre machine virtuelle
-Vous devez sélectionner ici l’image ISO `yunohostv2-latest-amd64.iso`, puis vous devriez voir cet écran d’accueil YunoHost.
+Vous devez sélectionner ici l’image ISO, puis vous devriez voir cet écran d’accueil YunoHost.
@@ -70,8 +70,5 @@ Après le redémarrage, vous devriez voir cet écran :
* Vous pouvez obtenir plus d’information sur la post-installation ici : **[yunohost.org/postinstall_fr](/postinstall_fr)**
-* Le mode de passe root est "yunohost"
+* Le mot de passe root est "yunohost"
----
-
-***Si vous avez besoin d’aide lors de ces étapes, n’hésitez pas à utiliser les différents [moyens de support](/support_fr).***
diff --git a/install_on_vps.md b/install_on_vps.md
index d16c436e..671847ea 100644
--- a/install_on_vps.md
+++ b/install_on_vps.md
@@ -8,7 +8,7 @@
* A dedicated or virtual private server
* with at least **512MB** RAM
-* and **Debian 8.x (Jessie) 64bits** as operating system
+* and **Debian 9.x (Stretch) 64bits** as operating system
---
@@ -18,6 +18,3 @@
2. Post-install
----
-
-***If you need help during one of these steps, do not hesitate to use [our support tools](/support).***
diff --git a/install_on_vps_fr.md b/install_on_vps_fr.md
index 1bc25775..2453538f 100644
--- a/install_on_vps_fr.md
+++ b/install_on_vps_fr.md
@@ -8,7 +8,7 @@
* Un serveur dédié ou virtuel
* avec au moins **512MB** RAM
-* et **Debian 8.x (Jessie) 64bits** comme système d'exploitation
+* et **Debian 9.x (Stretch) 64bits** comme système d'exploitation
---
@@ -18,7 +18,3 @@
2. Post-installation
----
-
-
-***Si vous avez besoin d’aide lors de ces étapes, n’hésitez pas à utiliser les différents [moyens de support](/support_fr).***
diff --git a/installation_brique_fr.md b/installation_brique_fr.md
deleted file mode 100644
index 9483fc12..00000000
--- a/installation_brique_fr.md
+++ /dev/null
@@ -1,201 +0,0 @@
-# Installation d’une Brique Internet
-
-
-Cette documentation s’adresse à des personnes qui ont **quelques notions d’informatique** et qui souhaitent installer elles-mêmes leur Brique Internet.
-
-Pour obtenir une **Brique clé-en-main** et pouvoir l’utiliser directement sans avoir besoin de connaissances particulières, il faut se rapprocher d’une association locale qui fournit des Briques Internet à ses adhérents, comme celles référencées sur [le site de FFDN](http://db.ffdn.org).
-
-[Site du projet *La Brique Internet*](http://labriqueinter.net)
-
-
-
-Aujourd'hui nous n'installons plus de Brique à la main en suivant ces instructions, nous vous conseillons d'utiliser l'outil d'installation automatique trouvable à [cette adresse](https://install.labriqueinter.net/#welcome) ou de contacter un FAI associatif local.
-
-
-![brique](/images/thisisinternet.png)
-
-## Prérequis
-
-Une **Brique Internet complète**, soit :
-* Un mini-serveur Olimex :
- * [A20-OLinuXino-LIME](https://www.olimex.com/Products/OLinuXino/A20/A20-OLinuXino-LIME/open-source-hardware)
- * [A20-OLinuXino-LIME2](https://www.olimex.com/Products/OLinuXino/A20/A20-OLinuXino-LIME2/open-source-hardware)
-* Une carte micro-SD (des [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO) pour des raisons de performance/stabilité).
-* Un adaptateur secteur [européen](https://www.olimex.com/Products/Power/SY0605E/) pour alimenter la brique. L’alimentation via USB semble peu stable.
-* Un câble Ethernet/RJ-45 pour brancher la Brique à son routeur.
-* Une antenne WiFi :
- * [MOD-WIFI-R5370-ANT](https://www.olimex.com/Products/USB-Modules/MOD-WIFI-R5370-ANT/) (non-libre)
- * [AR9271](http://fr.aliexpress.com/item/Atheros-AR9271-Chip-150Mbps-Mini-USB-Wifi-Adapter-with-5dBi-Antenna/32344771975.html) (libre, mais limitée à sept connexions simultanées maximum)
-
-Et évidemment, **un ordinateur sous GNU/Linux ou BSD**.
-
----
-
-L’ordre des étapes est important.
-
-## Étapes préliminaires
-
-1. Télécharger l’image ([lime1](http://repo.labriqueinter.net/labriqueinternet_A20LIME_latest_jessie.img.tar.xz) ou [lime2](http://repo.labriqueinter.net/labriqueinternet_A20LIME2_latest_jessie.img.tar.xz)), valider son *checksum MD5*, puis la décompresser :
-```bash
-% cd /tmp/
-% wget http://repo.labriqueinter.net/labriqueinternet_A20LIME_latest_jessie.img.tar.xz
-% wget http://repo.labriqueinter.net/MD5SUMS
-% md5sum -c MD5SUMS
-% tar -xf labriqueinternet_*.img.tar.xz
-% mv labriqueinternet_*.img labriqueinternet.img
-```
-
-2. Identifier le nom de la carte micro-SD (SDNAME) en tapant la commande `ls -1 /sys/block/`, en insérant la carte micro-SD (éventuellement à l’aide d’un adaptateur) dans son ordinateur, puis en retapant la commande `ls -1 /sys/block/`. Le nom de la carte micro-SD (SDNAME) correspond à la ligne qui apparaît en plus après la seconde saisie (e.g. *sdb* ou *mmcblk0*).
-
-3. Copier l’image sur la carte (remplacer *SDNAME* par le nom trouvé lors de l’étape précédente) :
-```bash
-sudo dd if=/tmp/labriqueinternet.img of=/dev/SDNAME bs=1M
-sync
-```
-
-4. Mettre la carte micro-SD dans une Brique, connecter la brique à votre routeur avec le câble Ethernet, puis brancher l’alimentation. La brique démarre normalement toute seule, et les LEDs du port Ethernet se mettent à clignoter au bout de dix secondes maximum.
-
-Le premier démarrage peut prendre un peu plus d’une minute car la partition est redimensionnée et le serveur est redémarré automatiquement.
-
-
-5. Récupérer l’adresse IP locale de la Brique :
-
- * soit avec une commande comme `sudo arp-scan --local | grep -P '\t02'` ou bien avec la commande `sudo arp-scan --local -I wlan0 | grep -P '\t02'` si votre ordinateur est connecté en WiFi.
- * soit via l’interface du routeur listant les clients DHCP,
- * soit en branchant un écran en HDMI à la Brique, et en exécutant `ifconfig`.
-
-
-Pour les commandes suivantes, nous admettons que l’adresse IP locale de la Brique est **192.168.4.2**. Remplacer par l’adresse IP précédemment déterminée.
-
-
-6. Se connecter en SSH en root à la Brique, le mot de passe par défaut est **olinux** :
-```bash
-ssh root@192.168.4.2
-```
-À la première connexion, il sera demandé de changer le mot de passe : entrer à nouveau **olinux**, puis saisir deux fois le nouveau mot de passe.
-
-7. Mettre à jour le système (environ 15 minutes) :
-```bash
-apt-get update && apt-get dist-upgrade
-```
-
-8. (optionnel) **Si vous avez une antenne WiFi libre**, la débrancher/rebrancher pour être sûr qu’elle soit reconnue après la mise à jour.
-
-
-## Étapes de configuration
-
-
-Nous installons ici la Brique de **michu.nohost.me**. Remplacer ce nom par le nom de domaine choisi (et comme précédemment l’IP 192.168.4.2 par celle de la brique)
-
-
-1. Mettre à jour le fichier `/etc/hosts` de son ordinateur client pour pouvoir accéder à la Brique en local via **michu.nohost.me**, en ajoutant à la fin :
-```bash
-192.168.4.2 michu.nohost.me
-```
-
-2. Procéder à la [postinstallation](/postinstall_fr) en se connectant à la Brique sur https://michu.nohost.me (accepter l’exception de sécurité du certificat).
-
-**Note :** il est également possible de réaliser cette étape en ligne de commande via SSH en exécutant `yunohost tools postinstall`.
-
-
-3. **Créer le premier utilisateur** : se rendre dans l’interface d’administration YunoHost (ici https://michu.nohost.me/yunohost/admin), entrer le mot de passe d’administration puis se rendre dans **Utilisateurs** > **Nouvel utilisateur**.
-
-Il faudra entrer un **nom d’utilisateur** sans majuscule/espace/tiret, un **nom/prénom/pseudo** en deux parties (obligatoires, merci LDAP) qui correspondra au nom qui apparaîtra sur les futurs emails de l’utilisateur, ainsi qu’un **quota d’email** éventuel et un **mot de passe** (*à ne pas confondre avec le mot de passe d’administration dans ce cas*).
-
-
-4. **Installer l’application VPN Client** : se rendre dans **Applications** > **Installer**, et entrer `https://github.com/labriqueinternet/vpnclient_ynh` dans le champs **URL** du formulaire **Installer une application personnalisée** tout en bas de la page. L’adresse du serveur peut être configurée plus tard (utiliser par exemple `dummy.vpn`).
-
-5. **Restreindre l’accès à l’application VPN Client** (optionnel) : se rendre dans **Applications** > **VPN Client** > **Accès** et sélectionner l’utilisateur précédemment créé, de sorte que les futurs potentiels nouveaux utilisateurs ne puissent pas modifier les paramètres d’accès VPN.
-
-6. **Configurer l’application VPN Client** : se connecter à l’**interface utilisateur** (ici https://michu.nohost.me/yunohost/sso/) et entrer les identifiants de l’utilisateur précédemment créé. Vous devriez voir apparaître **VPN Client** dans votre liste d’application :
-
-De manière générale, il convient bien sûr d’éditer les paramètres en fonction de son fournisseur d’accès VPN. Ce dernier devra vous fournir des certificats et/ou des identifiants ainsi qu’un préfixe délégué IPv6.
-
-
-Pour Neutrinet, dans **Advanced**, il faudra également ajouter trois directives spécifiques :
-
resolv-retry infinite
-ns-cert-type server
-topology subnet
-
-
-
-**Attention** : le redémarrage du service, déclenché par le bouton **Save and reload**, peut prendre quelques minutes.
-
-
-7. **Installer l’application Hotspot** : s’assurer que l’antenne WiFi est bien branchée, et répéter les étapes **4**, **5** et **6** en installant à l’aide de l’URL `https://github.com/labriqueinternet/hotspot_ynh` :
-
-
-
-**Attention** : si vous n'installez *pas* DoctorCube votre brique ne fonctionnera pas au prochain redémarrage, en effet, il y a un bug avec le kernel 4.5 et les boards olimex qui empêche aux Briques de se connecter au réseau (et ce qui les rends donc inutilisable), DoctorCube résoud ce problème.
-
-
-8. **Installer DoctorCube** : de la même manière que pour les précédentes applications, installez l'application DoctorCube qui fournie des configurations et des fixs spécifiques à la brique, en utilisant l'URL suivante: `https://github.com/labriqueinternet/doctorcube_ynh` L'installation de DoctorCube peut prendre de nombreuses minutes.
-
-9. **TESTER** : la Brique devrait être accessible via l’IP publique que sa connexion VPN lui procure. Si l’utilisateur a opté pour un nom de domaine en **.nohost.me**, patienter quelques minutes que son IP se propage sur le serveur DNS de YunoHost. Si l’utilisateur a opté pour son propre nom de domaine, c’est le moment de [configurer ses enregistrements DNS](/dns_config_fr) correctement chez son registrar.
-Si tout se passe bien côté **hotspot**, un réseau WiFi du nom choisi par l’utilisateur à l’étape 7 devrait être visible, et devrait vous router tout bien vers l’Internet.
-Il est possible de regarder l’IP avec laquelle on sort sur Internet ([IPv4](http://ip.yunohost.org) / [IPv6](http://ip6.yunohost.org)) :
-```bash
-% host $(wget -qO- ip.yunohost.org)
-% host $(wget -qO- ip6.yunohost.org)
-```
-Si le retour des deux commandes précédentes contient le nom du fournisseur d’accès VPN, c’est que la Brique fait bien accéder à Internet via le VPN.
-
-# Étapes supplémentaires
(pour une Brique idéale)
-
-Ces étapes ne sont pas obligatoires mais peuvent améliorer considérablement l’**expérience de la Brique** (*fap fap fap*).
-
-* **Supprimer le CRON DynDNS** : si l’utilisateur a opté pour un nom de domaine en **.nohost.me**, YunoHost a configuré automatiquement un client DynDNS sur la Brique qui va avertir le serveur DNS d’un potentiel changement d’IP publique. Or, l’IP fournie par la connexion VPN **est fixe**. Il convient donc de supprimer ce client, qui pourrait malencontreusement mettre à jour l’IP dans les DNS si la connexion VPN venait à tomber :
-```bash
-rm /etc/cron.d/yunohost-dyndns
-```
-
-* **S’assurer du nom de l’interface WiFi** : lors du changement d’antenne WiFi (même si le modèle reste le même), il peut arriver que le nom de l’interface WiFi change, typiquement de `wlan0` à `wlan1`. Pour continuer à utiliser l’application **hotspot**, il faut se rendre sur l’interface web de configuration de l’application (étape 10) et mettre à jour le **Device**.
-
-* **Ajouter un CRON de restart du service VPN** : selon les paramètres VPN client et serveur, il peut arriver que la connexion soit instable, et que le client VPN tombe de temps en temps. Pour s’assurer qu’il redémarrera automatiquement, une bonne méthode *quick’n’dirty* et de tester que le service tourne et de le redémarrer dans le cas contraire :
-```bash
-echo "* * * * * root /sbin/ifconfig tun0 > /dev/null 2>&1 || systemctl restart ynh-vpnclient" > /etc/cron.d/restart-vpn
-```
-
-* **Arrêter le service Amavis** :
-Amavis est un antivirus qui s’occupe de regarder si les pièces jointes des emails ne sont pas vérolées. Il est très lourd et tombe souvent en panne sur des petites machines comme la Brique. Pour arrêter Amavis, éditer le fichier `/etc/postfix/main.cf` et commenter la ligne 90 (normalement) :
-```bash
-#content_filter = amavis:[127.0.0.1]:10024
-```
-Éditer également le fichier `/etc/postfix/master.cf` pour y commenter les lignes relatives à Amavis, vers les lignes 119-122 :
-```bash
-#amavis unix - - - - 2 smtp
-# -o smtp_data_done_timeout=1200
-# -o smtp_send_xforward_command=yes
-# -o smtp_tls_note_starttls_offer=no
-```
-Une fois ces éditions effectuées, redémarrer le service postfix et arrêter le service amavis :
-```bash
-systemctl restart postfix
-systemctl stop amavis
-systemctl disable amavis
-```
-
-* **Mettre à jour la configuration SSH** : par défaut, la connexion SSH en tant que **root** est possible sur la Brique ce qui est considéré comme une faille de sécurité. Quand vous voulez vous connecter en SSH, il est préférable de le faire en tant qu’**admin** : cet utilisateur (qui est sudoer) a été créé automatiquement avec le même mot de passe que **root**. Pour ne garder que la connexion en tant qu’**admin**, il convient d’éditer le `/etc/ssh/sshd_config` et de passer **PermitRootLogin** à **without-password**.
-
-
-D’autres conseils de sécurité sont décrits sur la page : [sécurité](/security_fr).
-
-
-* **Configurer le reverse DNS** : pour s’assurer du bon fonctionnement du serveur email, il est recommandé de configurer un reverse DNS pour son IP. Il faut s’adresser au fournisseur de VPN. En tant que FAI associatif, c’est un service faisable, autant le demander !
-
-* **Configurer le DKIM** : avec un SPF et un PTR bien configurés dans les DNS, les emails envoyés par la Brique ne devraient pas être considérés comme spam. Ceci dit, GMail et d’autres dégraderont considérablement le spamscore si le DKIM n’est pas configuré également.
-Cette opération est longue mais à considérer pour avoir un serveur email irréprochable en production. Plus de renseignement sur [la page de documentation appropriée](/dkim_fr).
-
-* **Installer Roundcube** via l’interface d’administration YunoHost et tester l’envoi et la réception d’email.
-
-* **Installer d’autres applications** et les découvrir.
-
----
-
-## Notes
-
-* **Attention à la RAM** : sur le modèle A20-OLinuXino-LIME, les **512 Mo** partent relativement vite. Les applications PHP ne sont pas très gourmandes, mais Searx et Etherpad Lite sont par exemple à installer avec des pincettes. Toutes les apps officielles fonctionnent sans problème de RAM avec le A20-OLinuXino-LIME2 (qui a 1 Go de RAM).
diff --git a/ipv6_fr.md b/ipv6_fr.md
index 84c5ec24..8e82c393 100644
--- a/ipv6_fr.md
+++ b/ipv6_fr.md
@@ -2,6 +2,6 @@
### Liens
-- [Conférence — (Introduction à) IPv6 — Stéphane Bortmeyer — Liens en bas](https://fr33tux.org/post/retour-conference-bortzmeyer/#Liens)
+- [Conférence — (Introduction à) IPv6 — Stéphane Bortzmeyer — Liens en bas](https://fr33tux.org/post/retour-conference-bortzmeyer/#Liens)
- [Conférence — Intranet IPv4 ou Internet IPv6 — Julien Vaubourg](http://julien.vaubourg.com/#videos)
- [Article de blog — Auto-hébergement IPv6, le soucis de NAT — Genma](http://genma.free.fr/?Autohebergement-IPV6-Le-soucis-du-NAT)
diff --git a/isp.md b/isp.md
index 02d84f78..8d8131e3 100644
--- a/isp.md
+++ b/isp.md
@@ -15,9 +15,24 @@ A list of French and Belgian ISPs is available on the [french page](/isp_fr).
| Charter | Multiple | Yes | No. Only for business class customer. | No | No | Yes, as a business class customer |
| DSLExtreme | Multiple | Yes | Yes | No | No | Yes, extra charge. |
+### UK
+| Service provider | Box (modem/router) | uPnP available | Port 25 openable | [Hairpinning](http://en.wikipedia.org/wiki/Hairpinning) | Customizable reverse DNS | Fix IP |
+| --- | --- | --- | --- | --- | --- | --- |
+| BT Internet | - | - | Yes| - | - | No |
+
### Brazil
| Service provider | Box (modem/router) | uPnP available | Port 25 openable | [Hairpinning](http://en.wikipedia.org/wiki/Hairpinning) | Customizable reverse DNS | Fix IP |
| --- | --- | --- | --- | --- | --- | --- |
| Global Village Telecom | Multiple | Yes | No. Only for Fix IP| No | No | Yes, extra charge. |
-If you want to add international ISPs information, please do consider [modifying this page](/write_documentation).
+### Ireland
+| Service provider | Box (modem/router) | uPnP available | Port 25 openable | [Hairpinning](http://en.wikipedia.org/wiki/Hairpinning) | Customizable reverse DNS | Fix IP |
+| --- | --- | --- | --- | --- | --- | --- |
+| Whizzy Internet | Multiple | Yes | Yes| Yes | Yes | Yes |
+
+### Canada
+| Service provider | Box (modem/router) | uPnP available | Port 25 openable | [Hairpinning](http://en.wikipedia.org/wiki/Hairpinning) | Customizable reverse DNS | Fix IP |
+| --- | --- | --- | --- | --- | --- | --- |
+| Telus | Multiple | - | No. Extra charge | - | - | No. Extra charge |
+
+If you want to add international ISPs information, please do consider [modifying this page](/write_documentation).
\ No newline at end of file
diff --git a/isp_box_config.md b/isp_box_config.md
index abad4e44..376836a6 100644
--- a/isp_box_config.md
+++ b/isp_box_config.md
@@ -1,35 +1,46 @@
-# Configuration box/router
+# Configure port-forwarding
-
Check ports are open
+If you are self-hosting at home and without a VPN, you need to forward ports on your home router ("Internet box"). If you want a short explanation on what is and why you need port forwarding, have a look in [this page](port_forwarding).
-#### Access to box/routeur administration
-In the URL bar of your web browser put:
-```bash
-192.168.0.1 or 192.168.1.1
-```
-Then you will need to authentificate.
+### 0. Diagnose ports opened
-#### Opening ports
-Opening following ports are necessary to make works differents services.
+After configuring port forwarding, you should be able to validate with this small tool that your ports are correctly forwarded :
+
+
Check which ports are forwarded
+
+### 1. Access your box/router administration interface
+
+Your box/router admin interface is usually reachable via http://192.168.0.1 or http://192.168.1.1. Then, you will probably need to authenticate yourself with your internet server provider's credentials.
+
+### 2. Find the local IP of your server
+
+Identify what is the local IP of your server, either :
+- from your box/router interface, which might list devices connected
+- from the YunoHost webadmin, in 'State of the server', 'Network'
+- from the command line in your server, by running `ip a | grep "scope global" | awk '{print $2}'`
+
+A local IP address typically looks like `192.168.xx.yy`, or `10.0.xx.yy`.
+
+### 3. Forwarding ports
+
+In your router admin interface, look for something like 'router configuration' or 'port forwarding'. The naming differs among the various kinds of boxes.
+
+Opening the ports listed below is necessary for the various services available in YunoHost to work. For each of them, the 'TCP' forwarding is needed. Some interfaces refer to 'external' and 'internal' ports : these are the same in our case.
-**TCP:**
* Web: 80
(HTTP), 443
(HTTPS)
* [SSH](/ssh_en): 22
* [XMPP](/XMPP_en): 5222
(clients), 5269
(servers)
-* [Email](/email_en): 25, 465
(SMTP), 587
(SMTP with SSL), 993
(IMAP)
-* [DNS](/dns_en): 53
+* [Email](/email_en): 25, 587
(SMTP), 993
(IMAP)
-##### UPnP
-UPnP permit automatically forward ports.
+
+ Some internet service providers block port 25 (mail SMTP) by default to fight spam. Some other ISP don't allow to use port 80/443 (web) freely, though it's less likely. Depending on the ISP, it might be possible to open them in the admin interface... Check [this page](isp_en) for more info.
+
-In some case, after changing your box configuration (ex: add IPv6, or unlock SMTP…) and a reboot. It happens that ports are no longer forwarded. So you have to reload your firewall configuration:
+## Automatic port forwarding / UPnP
+
+A technology called UPnP is available on some internet boxes / routers and allows to automatically forward ports by the machine who needs them. If UPnP is enabled in your local network, then running this command should automatically open the port for you :
```bash
sudo yunohost firewall reload
```
-##### Manual forward ports
-In the case that UPnP doesn’t works, manual ports forward are necessary.
-
-##### Email
-Internet service porviders blocks port 25 to avoid spam. To send mails, you’ll need to forward port 25.
diff --git a/isp_box_config_fr.md b/isp_box_config_fr.md
index ee0e7b5e..30e42fbb 100644
--- a/isp_box_config_fr.md
+++ b/isp_box_config_fr.md
@@ -1,44 +1,51 @@
-# Configuration box/routeur
+# Configurer la redirection des ports
-
Vérifier que les ports sont ouverts
+Si vous vous auto-hébergez à la maison et sans VPN, il vous faut rediriger les ports de votre routeur ("machin-box"). Si vous souhaitez une explication courte de ce qu'est et pourquoi vous avez besoin de rediriger les ports, vous pouvez jeter un oeil à [cette page](port_forwarding_fr). [Cette page](https://craym.eu/tutoriels/utilitaires/ouvrir_les_ports_de_sa_box.html) propose également des explications détaillées sur le fonctionnement des ports, et les étapes de configuration pour différents routeurs.
-### Accès à l’administration de la box/routeur
-Allez à l’adresse suivante : http://192.168.0.1 (ou celle-ci http://192.168.1.1). Puis authentifier-vous.
+### 0. Diagnostiquer les ports ouverts
-### Tutoriel
-* [Tutoriel pour les ouvrir les ports sur les boxs d’Orange, Free, SFR, Dartybox, Belgacom et sur les routeurs Netgear](https://craym.eu/tutoriels/utilitaires/ouvrir_les_ports_de_sa_box.html).
+Une fois que vous aurez configuré la redirection, vous devriez pouvoir valider avec ce petit outil que vos ports sont bien redirigés :
-### Redirection des ports
-La redirection des ports suivants est nécessaire au fonctionnement des différents services.
+
Vérifier la redirection des ports
-**TCP :**
- * Web : 80
(HTTP), 443
(HTTPS)
- * [SSH](ssh_fr) : 22
- * [XMPP](XMPP_fr) : 5222
(clients), 5269
(serveurs)
- * [Courriel](email_fr) : 25, 465
(SMTP), 587
(SMTP avec chiffrement), 993
(IMAP)
- * [DNS](dns_fr) : 53
+### 1. Accéder à l'interface d'administration de votre box/routeur
-**UDP:**
- * [DNS](dns_fr) : 53
+L'interface d'administration est généralement accessible via http://192.168.0.1 ou http://192.168.1.1.
+Ensuite, il vous faudra peut-être vous authentifier avec les identifiants
+fournis par votre fournisseur d'accès internet (FAI).
----
+### 2. Trouver l'IP locale de votre serveur
-#### UPnP
+Identifiez quelle est l'IP locale de votre serveur, soit :
+- depuis l'interface de votre routeur/box, qui liste peut-être les dispositifs
+ connectés.
+- depuis la webadmin de YunoHost, dans 'État du serveur', 'Réseau'
+- depuis la ligne de commande dans votre serveur, par exemple avec `ip a | grep "scope global" | awk '{print $2}'`
-L’UPnP permet d’ouvrir automatiquement les ports. Si ce n’est pas le cas par défaut, vous pouvez l’activer via l’interface d’administration de votre routeur.
+Une adresse IP locale ressemble généralement à `192.168.xx.yy`, ou `10.0.xx.yy`.
-Dans certains cas après avoir changé la configuration de votre box (ex : sur Freebox ajout d’IPv6, débloquer le SMTP…) et après l’avoir rebooté. Il se peut que vos ports ne soient plus redirigés. Il faut donc réautoriser ces ports par le firewall :
+### 3. Rediriger les ports
+
+Dans l'interface d'administration de votre box/routeur, il vous faut trouver
+une catégorie comme 'Configuration du routeur', ou 'Redirections de ports'. Le
+nom diffère suivant le type / marque de la box...
+
+Il vous faut ensuite rediriger chacun des ports listés ci-dessous vers l'IP locale de votre serveur pour que les différents services de YunoHost fonctionnent. Pour chacun d'eux, une redirection 'TCP' est nécessaire. Certains interfaces font références à un port 'externe' et un port 'interne' : dans notre cas il s'agit du même.
+
+* Web: 80
(HTTP), 443
(HTTPS)
+* [SSH](/ssh_fr): 22
+* [XMPP](/XMPP_fr): 5222
(clients), 5269
(servers)
+* [Email](/email_en): 25, 587
(SMTP), 993
(IMAP)
+
+
+ Certains fournisseurs d'accès internet bloquent le port 25 (mail SMTP) par défaut pour combattre le spam. D'autres (plus rares) ne permettent pas d'utiliser librement les ports 80/443. En fonction de votre FAI, il peut être possible d'ouvrir ces ports dans l'interface... Voir [cette page](isp_fr) pour plus d'informations.
+
+
+## Redirection automatique / UPnP
+
+Une technologie nommée UPnP est disponible sur certains routeurs/box et permet de rediriger automatiquement des ports vers une machine qui le demande. Si UPnP est activé chez vous, exécuter cette commande devrait automatiquement rediriger les bons ports :
```bash
sudo yunohost firewall reload
```
-#### Redirection manuelle des ports
-
-Dans le cas où l’UPnP ne fonctionne pas, la redirection manuelle des ports est nécessaire. Encore une fois, référez-vous à l’interface d’administration de votre routeur.
-
-ATTENTION (CPU ARM) : l’activation de l’UPnP est inefficace avec les serveurs équipés d’un processeur ARM (remarque valable pour YunoHost v2.2). Une redirection manuelle des ports du routeur est alors requise.
-
-#### Le courrier électronique
-
-Les fournisseurs d’accès à Internet bloquent souvent le port 25 pour éviter que les ordinateurs de votre réseau n’envoient des spams sur Internet à votre insu. Pour pouvoir envoyer des emails, il vous faut donc ouvrir le port 25, ou désactiver l’option « blocage SMTP sortant » dans l’administration de votre routeur.
diff --git a/isp_fr.md b/isp_fr.md
index e840aa5d..9cd648d1 100644
--- a/isp_fr.md
+++ b/isp_fr.md
@@ -12,16 +12,16 @@ Tous les fournisseurs d’accès à Internet [membres de la Fédération French
* ✔ : oui
* ✘ : non
-| Fournisseur d’accès | [Free](/isp_free_fr) | [SFR](/isp_sfr_fr) | [Orange](/isp_orange_fr) | Bouygues
Télécom | Darty |
-| :---: | :---: | :---: | :---: | :---: | :---: |
-| **Box/routeur** | Freebox | Neufbox | Livebox | Bbox | Dartybox |
-| **[UPnP](https://fr.wikipedia.org/wiki/Universal_Plug_and_Play)** | ✔ | ✔ | ✔ | ✔ | ✔ |
-| **[Port 25 ouvrable](email_fr)**
(fermé par défaut) | ✔ | ✔ | ✘ | ✔ | ✔ |
-| **[Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning)** | ✔ | ✔/✘ | ✘ | ✔ | ✔ |
-| **[Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup)
personnalisable ** | ✔ (sauf IPv6) | … | ✘ | ✘ | ✘ |
-| **[IP fixe](/dns_dynamicip_fr)** | ✔ | ✔/✘ | ✘ | ✔ | ✔ |
-| **[IPv6](https://fr.wikipedia.org/wiki/IPv6)** | ✔ | ✔ | ✔ | … | … |
-| **[Non listé sur le DUL](https://en.wikipedia.org/wiki/Dialup_Users_List)** | ✘ | … | … | … | … |
+| Fournisseur d’accès | OVH | [Free](/isp_free_fr) | [SFR](/isp_sfr_fr) | [Orange](/isp_orange_fr) | Bouygues
Télécom | Darty |
+| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
+| **Box/routeur** | Personnel/OVH Télécom | Freebox | Neufbox | Livebox | Bbox | Dartybox |
+| **[UPnP](https://fr.wikipedia.org/wiki/Universal_Plug_and_Play)** | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
+| **[Port 25 ouvrable](email_fr)**
(fermé par défaut) | ✔ | ✔ | ✔ | ✘ | ✔ | ✔ |
+| **[Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning)** | ✔ | ✔ | ✔/✘ | ✘ | ✔ | ✔ |
+| **[Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup)
personnalisable ** | ✔ | ✔ (sauf IPv6) | … | ✘ | ✘ | ✘ |
+| **[IP fixe](/dns_dynamicip_fr)** | ✔ | ✔ | ✔/✘ | ✘ | ✔ | ✔ |
+| **[IPv6](https://fr.wikipedia.org/wiki/IPv6)** | ✔ | ✔ | ✔ | ✔ | … | … |
+| **[Non listé sur le DUL](https://en.wikipedia.org/wiki/Dialup_Users_List)** | … | ✘ | … | … | … | … |
Pour une liste plus complète et précise, référez-vous à la très bonne documentation de [wiki.auto-hebergement.fr](http://wiki.auto-hebergement.fr/fournisseurs/fai#d%C3%A9tail_des_fai).
**Astuce** : [FDN](http://www.fdn.fr) fournit des [VPN](http://www.fdn.fr/-VPN-.html) permettant de rapatrier une (ou plusieurs sur demande) IPv4 fixe et un /48 en IPv6 et ainsi « nettoyer » votre connexion si vous êtes chez l’un des FAI *limitants* du tableau ci-dessus.
@@ -29,8 +29,17 @@ Pour une liste plus complète et précise, référez-vous à la très bonne docu
### Belgique
| Fournisseur d’accès | Box/ routeur | uPnP activable | [Port 25 ouvrable](email_fr)| [Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning) | [Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) | IP fixe |
-| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
+| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| **Proximus** | BBox2 | oui (activé) | oui | **non** | **non** | **non** |
| | BBox3 | oui (activé) | oui | **non** | **non** | **non** |
| **Scarlet** | BBox2 | oui (activé) | oui | **non** | **non** | **non** |
+
**Proximus** ne serait pas ouvert à l’auto-hébergement. L’ouverture des ports serait plus difficile afin d’éviter tout SPAM. Il serait préférable de passer par [Neutrinet](http://neutrinet.be), un des [membres de la Fédération French Data Network](http://www.ffdn.org/fr/membres).
+
+### Côte d'Ivoire
+
+| Fournisseur d’accès | Box/ routeur | uPnP activable | [Port 25 ouvrable](email_fr)| [Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning) | [Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) | IP fixe |
+| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
+| **Orange** | Livebox2 | oui (activé) | non | **non** | **non** | **non** |
+| **Moov** | | oui (activé) | | | | |
+| **MTN** | | oui (activé) | | | | |
\ No newline at end of file
diff --git a/isp_free_fr.md b/isp_free_fr.md
index 13e0a706..59242ee9 100644
--- a/isp_free_fr.md
+++ b/isp_free_fr.md
@@ -1,4 +1,4 @@
-#Free
+# Free
*Trouvez la liste d’autres fournisseurs d’accès Internet **[ici](/isp_fr)**.*
@@ -33,15 +33,15 @@ La présence conjointe de ces deux règles permettent d'accéder à votre serveu
Pour pouvoir envoyer des mails, le déblocage se fait dans la [partie client](https://subscribe.free.fr/login/).
-Depuis le menu Ma freebox aller sur « Blocage SMTP sortant ».
+Depuis le menu Ma freebox aller sur « Blocage SMTP sortant ».
-Pour pouvoir envoyer des mails, passer le blocage en « inactif ».
+Pour pouvoir envoyer des mails, passer le blocage en « inactif ».
#### Fonction NAS de la Freebox
Il faut installer le paquet `cifs-utils`
```bash
-$ sudo apt-get install cifs-utils
+$ sudo apt install cifs-utils
```
Il faut créer un point de montage (ici `/home/monlogin/freebox`)
@@ -57,13 +57,13 @@ $ sudo mount -t cifs //mafreebox.freebox.fr/Disque\ dur/ /home/monlogin/freebox
##### Automatiser le montage
Une ligne a ajouter à la fin du `/etc/fstab` :
-```
+```bash
//mafreebox.freebox.fr/Disque\040dur/ /home/monlogin/freebox cifs _netdev,guest,uid=monlogin,gid=users,iocharset=utf8 0 0
```
Le `_netdev` signale que c'est un périphérique réseau, afin que le système ne le monte que s'il a accès au réseau.
`guest` est le mode d'identification à la Freebox : pour une connexion authentifié, placer vos identifiants dans un fichier sous la forme
-```
+```bash
username=your_user
password=your_pass
domain=FREEBOX
diff --git a/isp_orange_fr.md b/isp_orange_fr.md
index 828eb0ba..ef6a532a 100644
--- a/isp_orange_fr.md
+++ b/isp_orange_fr.md
@@ -1,7 +1,7 @@
-#Orange
+# Orange
*Trouvez la liste d’autres fournisseurs d’accès Internet **[ici](/isp_fr)**.*
-####Le courrier électronique
+#### Le courrier électronique
La box d’Orange bloque le port 25 pour limiter l’envoi de spam.
@@ -13,10 +13,68 @@ Pour cela, il faut éditer le fichier de configuration de postfix avec la comman
sudo nano /etc/postfix/main.cf
```
-puis rajouter à la ligne le relai SMTP d’Orange :
+puis, rajouter à la ligne le relai SMTP d’Orange :
+
```bash
-relayhost = smtp.orange.fr```
+relayhost = smtp.orange.fr
+```
redémarrez Postfix :
+
```bash
-sudo service postfix restart```
+sudo service postfix restart
+```
+
+##### Problèmes
+
+Si vous avez une erreur "Authentification requise", la solution est la suivante : **[source](http://viruslocker.free.fr/?page_id=1749)**.
+
+Éditer le fichier de configuration de postfix
+
+```bash
+sudo nano /etc/postfix/main.cf
+```
+puis, rajouter à la ligne :
+
+```bash
+smtp_sasl_password_maps = hash:/etc/postfix/mdp_fai.conf
+smtp_sasl_auth_enable = yes
+smtp_sasl_security_options = noanonymous
+relayhost = [smtp.orange.fr]:25
+```
+
+créer le fichier `mdp_fai.conf` :
+
+```bash
+sudo nano /etc/postfix/sasl/mdp_fai.conf
+```
+
+ajouter
+
+```bash
+# mdp_fai.conf
+[smtp.orange.fr]:25 adresseemail@chez.orange:son-mot-de-passe
+```
+avec votre mot de passe du compte d'orange.
+
+Intégrer le mot de passe à Postfix :
+
+```bash
+sudo postmap /etc/postfix/sasl/mdp_fai.conf
+sudo postconf -e smtp_sasl_password_maps=hash:/etc/postfix/sasl/mdp_fai.conf
+```
+
+Si vous avez une erreur "(SASL authentication failed; cannot authenticate to server smtp-auth.nowhere.com[38.123.22.160]: no mechanism available)"
+
+Vérifier la présence de libsasl2-modules et de sasl2-bin :
+
+```bash
+apt search libsasl2-modules
+apt search sasl2-bin
+```
+
+Si ils ne sont pas présents, installez-les :
+
+```bash
+apt install libsasl2-modules sasl2-bin
+```
diff --git a/jessie_stretch_migration.md b/jessie_stretch_migration.md
new file mode 100644
index 00000000..7609f9df
--- /dev/null
+++ b/jessie_stretch_migration.md
@@ -0,0 +1,59 @@
+# Migrating an existing instance to Stretch
+
+This page is dedicated to help you migrating an instance from YunoHost 2.7.x (running on Debian Jessie/8.x) to YunoHost 3.0 (running on Debian Stretch/9.x).
+
+## Important notes
+
+- The YunoHost team did its best to make sure that the migration is as smooth as possible and was tested over the course of several months in several cases.
+
+- With that said, please be aware that this is a delicate operation. System administration is a complicated topic and covering every particular cases is quite hard. Therefore, if you host critical data and services, please [make backups](/backup). And in any case, be patient and attentive during the migration.
+
+- Yet, please don't rush into thinking that you should rush into reinstalling your system. A common "mistake" is to be willing to reinstall a server at the slightest complication. But turns out that reinstalling a system can also be complicated. Instead, if you happen to run into issues, we encourage you to try to investigate and understand what's going on and reach for help instead of just throwing away everything because it looks simpler.
+
+- About external email clients : if you or your users are using external email clients (typically Thunderbird, K9Mail, ...) be aware that the SMTP port changed from 465 (with SSL/TLS) to 587 (STARTTLS). See [this page of doc dedicated to email clients](/email_configure_client).
+
+- For advanced users : if you have some custom scripts for backups, be aware that we made some backward-incompatible changes in the backup command line. The deprecated `--hooks`/`--ignore-hooks` options were removed, as well as the options `--ignore-apps`, `--ignore-system`. To make things more intuitive, `yunohost backup create --apps wordpress` (for example) will only backup wordpress, i.e. you don't have to add `--ignore-system` to not backup the system.
+
+## Migration procedure
+
+#### From the webadmin
+
+After upgrading to 2.7.14, go to Tools > Migrations to access the migrations interface. You will have to read carefully and accept the disclaimer then launch the migration. The logs will be shown in the message bar (you can hover it to see the whole history).
+
+#### From the command line
+
+After upgrading to 2.7.14, run :
+
+```bash
+yunohost tools migrations migrate
+```
+
+then read carefully and accept the disclaimer.
+
+## During the migration
+
+Depending on your hardware and packages installed, the migration might take up to a few hours.
+
+Note that it is expected to see some errors (in particular about fail2ban) during the migration, so don't worry too much about them.
+
+#### If the migration crashed / failed at some point.
+
+If the migration failed at some point, it should be possible to relaunch it. If it still doesn't work, you can try to [get help](/help) (please provide the corresponding messages or whatever makes you tell that it's not working).
+
+## What to do after the upgrade
+
+#### Check that you actually are on Debian Stretch and YunoHost 3.0
+
+You should be able to see this from the webadmin Tools > Diagnosis, and also in the footer of the page. On the command line, you can use `lsb_release -a` and `yunohost --version`.
+
+#### Check that fail2ban and the firewall are active
+
+You should be able to see that fail2ban and the firewall are active. From the webadmin in Services (look for 'fail2ban' and 'yunohost-firewall'). From the command line, run `yunohost service status fail2ban yunohost-firewall`. They should both have `active: active`.
+
+#### Check that your applications are working
+
+Test that your applications are working. If they aren't, you should try to upgrade them (it is also a good idea to upgrade them even if they are working anyway).
+
+#### Mail users: check your mail score
+
+If you are using mails (especially sending them), check that your score is still good by using [mail-tester](https://www.mail-tester.com/) for example.
diff --git a/jessie_stretch_migration_fr.md b/jessie_stretch_migration_fr.md
new file mode 100644
index 00000000..0cb2e51c
--- /dev/null
+++ b/jessie_stretch_migration_fr.md
@@ -0,0 +1,59 @@
+# Migrer vers Stretch
+
+L'objectif cette page est de décrire le processus de migration d'une instance en YunoHost 2.7.x (tournant sous Debian Jessie/8.x) vers YunoHost 3.0 (tournant sous Debian Stretch/9.x)
+
+## Notes importantes
+
+- L'équipe de YunoHost a fait de son mieux pour que cette migration se passe autant en douceur que possible. Elle a été testée durant plusieurs mois et sur plusieurs types d'installations.
+
+- Néanmoins, vous devez être conscient qu'il s'agit d'une opération délicate. L'administration système est un sujet compliqué et couvrir tous les cas particuliers n'est pas chose aisée. En conséquence, si vous hébergez des données et des systèmes critiques, [faites des sauvegardes](/backup). Et dans tous les cas, soyez patients et attentifs durant la migration.
+
+- Cependant, ne vous précipitez pas non plus à vouloir faire une réinstallation de votre système. Une attitude qui revient régulièrement est de vouloir réinstaller son système à la moindre complication. Pourtant, réinstaller peut aussi s'avérer compliqué. À la place, si vous rencontrez des problèmes, nous vous encourageons à investiguer, chercher à comprendre et trouver de l'aide, plutôt que de se précipiter à vouloir réinstaller simplement parce que cela semble plus simple.
+
+- Si vous ou vos utilisateurs utilisez des clients emails externes (typiquement Thunderbird ou K9Mail) : le port SMTP a changé. Il s'agissait auparavant du port 465 (avec SSL/TLS) qui a été remplacé par 587 (STARTTLS). Voir [cette page de doc dédiée à la configuration des clients mails](/email_configure_client).
+
+- Pour les utilisateurs avancés : si vous avez des scripts personnels pour faire des backups, certains changements cassent (de façon mineure) la rétrocompatibilité de la ligne de commande. Les options dépréciées `--hooks`/`--ignore-hooks` ont été enlevées, ainsi que `--ignore-apps`, `--ignore-system`. Pour rendre les choses plus intuitives, `yunohost backup create --apps wordpress` (par exemple) créera uniquement un backup de wordpress, i.e. pas besoin d'ajouter `--ignore-system` pour ne pas backuper le système.
+
+## Procédure de migration
+
+#### Depuis la webadmin
+
+Après avoir mis à jour vers la version 2.7.14, allez dans Outils > Migrations pour accéder à l'interface de migration. Il vous faudra ensuite lire l'avertissement attentivement et l'accepter pour lancer la migration. Les logs seront affichés dans la barre de message en haut (vous pouvez approcher la souris dessus pour voir l'historique en entier).
+
+#### Depuis la ligne de commande
+
+Après avoir mis à jour vers la version 2.7.14, lancez :
+
+```bash
+yunohost tools migrations migrate
+```
+
+puis lisez attentivement l'avertissement et les instructions.
+
+## Pendant la migration
+
+En fonction de votre matériel et des paquets installés, la migration peut prendre jusqu'à quelques heures.
+
+Notez qu'il est attendu de voir certaines erreurs (en particulier à propos de fail2ban) pendant la migration - ne vous en inquiétez pas trop.
+
+#### Si la migration a crashé / échoué à un moment.
+
+Si la migration a échoué a un moment donné, la première chose à faire est de tenter de la relancer. Si cela ne fonctionne toujours pas, il vous faut [trouver de l'aide](/help) (prière de fournir le/les messages correspondants ou tout élément qui vous fait penser que ça n'a pas marché).
+
+## Choses à vérifier après la migration
+
+#### Vérifiez que vous êtes véritablement sous Debian Stretch / YunoHost 3.0
+
+Pour cela, allez dans Outils > Diagnostique. (Vous pouvez aussi regarder ce qui est affiché dans le pied de page). En ligne de commande, vous pouvez aussi utiliser `lsb_release -a` et `yunohost --version`.
+
+#### Vérifiez que fail2ban et le pare-feu sont actifs.
+
+Vous devriez voir que fail2ban et le firewall sont actifs. Depuis la webadmin, dans Services (chercher 'fail2ban' et 'yunohost-firewall'). Depuis la ligne de commande, faites `yunohost service status fail2ban yunohost-firewall` : les deux devraient être en `active: active`.
+
+#### Vérifiez que les applications fonctionnent
+
+Vérifiez que vos applications installées fonctionnent... Si elles ne fonctionnent pas, il est recommandé de tenter de les mettre à jour. (ou bien de manière générale, il est recommandé de les mettre à jour même si elles fonctionnent !).
+
+#### Si vous utilisez les mails : vérifiez votre score
+
+Si vous utilisez les emails (en particulier les envois), vérifiez que votre score est toujours bon via [mail-tester](https://www.mail-tester.com/) par exemple.
diff --git a/news.md b/news.md
deleted file mode 100644
index 354f67a6..00000000
--- a/news.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# News
-
-The news are now available on [our forum](https://forum.yunohost.org/), in the [announcement category](https://forum.yunohost.org/c/announcement).
\ No newline at end of file
diff --git a/news_fr.md b/news_fr.md
deleted file mode 100644
index 65dafbb5..00000000
--- a/news_fr.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Actualités
-
-Les actualités sont maintenant disponibles sur [notre forum](https://forum.yunohost.org/), dans la [catégorie "announcement"](https://forum.yunohost.org/c/announcement).
\ No newline at end of file
diff --git a/orga/yunohost_project_organization.md b/orga/yunohost_project_organization.md
index 4d27e2db..4fdfe208 100644
--- a/orga/yunohost_project_organization.md
+++ b/orga/yunohost_project_organization.md
@@ -168,13 +168,12 @@ Then a member of a group can announce their decision as effective (and proceed w
## Composition of groups
-- Distribution : Heyyounow
- Council : Bram, ju, ljf, Maniack, Moul, opi, theodore
-- Core Dev : AlexAubin, Bram, Ju, ljf, Moul, opi
-- Apps : Bram, frju365, JimboJoe, Ju, ljf, Maniack C, Maxime, Moul, Scith, Tostaki
+- Core Dev : AlexAubin, Bram, JimboJoe, Ju, ljf, Moul, opi
+- Apps : Bram, cyp, frju365, JimboJoe, Josue-T, Ju, ljf, Maniack C, Maxime, Moul, Scith, Tostaki
- Infra : Bram, Ju, Maniack C, Moul, opi
- Communication
- - Com : Bram, Moul, korbak, ljf, opi
+ - Com : Bram, Moul, korbak, ljf, opi, frju365
- Doc : Moul, Theodore
- Trans : Jean-Baptiste
- Distribution : Heyyounow
diff --git a/orga/yunohost_project_organization_fr.md b/orga/yunohost_project_organization_fr.md
index 6268a7e7..d9622c97 100644
--- a/orga/yunohost_project_organization_fr.md
+++ b/orga/yunohost_project_organization_fr.md
@@ -3,7 +3,7 @@
## Objectif du document
Ce document a pour objectif de permettre aux contributeurs de se sentir légitimes d’effectuer une contribution dans le projet YunoHost avec un avis collectif. Il vise également à renforcer le projet en le structurant autour de groupes de travail autonomes pouvant résister au départ ou à l'absence de certains contributeurs.
Le projet étant communautaire, les décisions prises hâtivement et discrètement par un groupe restreint de contributeurs peuvent entraîner des frustrations postérieures.
-Pour pallier à ce problème, la solution proposée ici est de faire en sorte que les décisions soient prises collectivement, qu’elles soient suffisamment réfléchies, et qu'elles soient documentées ou rendues publiques.
+Pour pallier ce problème, la solution proposée ici est de faire en sorte que les décisions soient prises collectivement, qu’elles soient suffisamment réfléchies, et qu'elles soient documentées ou rendues publiques.
Un conseil oriente l’évolution du projet YunoHost, et des groupes d’intérêts permettent de contribuer plus efficacement en fonction des domaines de prédilection de chacun.
## Définition de YunoHost
@@ -81,7 +81,7 @@ Le choix d'un outil de communication est laissé à chaque groupe en fonction de
#### Définition et constitution du Conseil
-YunoHost grandissant, il est important de maintenir une cohérence entre tous les groupes, néanmoins il est impossible d'imposer à chacun des membres des groupes de s'intéresser ou de s'impliquer sur tous les aspects du projet (pour des raisons de temps et de compétences). Pour pallier à cela, il est proposé de créer un meta-groupe, où chaque groupe sera représenté par au moins un de ses membres : le Conseil.
+YunoHost grandissant, il est important de maintenir une cohérence entre tous les groupes, néanmoins il est impossible d'imposer à chacun des membres des groupes de s'intéresser ou de s'impliquer sur tous les aspects du projet (pour des raisons de temps et de compétences). Pour pallier à cela, il est proposé de créer un méta-groupe, où chaque groupe sera représenté par au moins un de ses membres : le Conseil.
Le Conseil est indépendant des groupes et réunit les contributeurs souhaitant s'impliquer le plus dans le projet, son rôle est de :
- prendre les décisions importantes sur YunoHost qui ne dépendent pas d'un seul groupe (par exemple changer le moteur du wiki)
@@ -92,136 +92,111 @@ Le choix d'un outil de communication est laissé au Conseil, ses décisions doiv
Pour participer aux votes du Conseil, il faut avoir contribué au projet et avoir obtenu un droit de vote (ou d'entrée) au sein du Conseil. Ce droit est délivré par le Conseil (éventuellement sur demande). Le Conseil est libre à tout moment de modifier le processus de décision.
Être membre du Conseil n'implique pas forcément d'avoir l'ensemble des accès (infrastructure, dépôt etc...).
-### Un processus de prises de décision basé sur un consensus mou
+### Processus de validation des pull requests
-Les décisions à prendre peuvent être de deux ordres :
+Cette section détaille le processus de validation des pull requests dans les différents dépôts du projet. L'objectif de ce processus est de dégager un « consensus mou ». Il est important de préciser que ce processus est *recommandé* mais ne représente pas un impératif. En particulier, il ne couvre pas toutes les situations qui peuvent se présenter. Il est donc légitime de l'adapter (avec l'accord du groupe concerné) lorsqu'il n'est pas adapté au contexte.
-1. pour un groupe (par "exemple merger une PR" serait affecté au groupe Dev tandis que "poster un tweet" serait de la responsabilité du groupe Communication)
-2. pour l'ensemble du projet (par exemple décider d'une release avec des nouvelles fonctionnalités)
+Si un consensus ne peut être trouvé au sein d'un groupe en suivant le processus décrit, il est invité à se tourner vers le Conseil pour en débattre. Si aucun consensus n'est trouvé, la proposition sera soumise au vote de tous les contributeurs.
-Si un consensus sur une décision à prendre n'est pas trouvée au sein d'un groupe, ce dernier devra se tourner vers le Conseil pour en débattre. Si aucun consensus n'est trouvé, la proposition sera soumise au vote de tous les contributeurs.
+#### 1. Proposition
-#### Le processus de prise de décision en détail
+N'importe quel contributeur peut proposer une pull request (abrégée PR dans la suite) dans les divers dépôts liés au projet YunoHost (core, apps, infra, ...).
-##### 1) Initiation d'une décision à prendre
- - peut-être initiée par n'importe qui suivant les mediums définis au sein de chacun des groupes (exemple : ouvrir une PR déclenche automatiquement ce processus)
- - forcément publique à l'exception de situations bien définies (bug relatif à la sécurité critique ou vote sur les personnes)
- - une date de clôture est automatiquement définie par type de proposition. La définition de la date remplie plusieurs fonctions :
- - pouvoir laisser le temps à tout le monde de s'exprimer et ne pas prendre la décision trop vite
- - maintenir un rythme car si le quota des réponses est rempli avant le temps imparti, il n'y a pas besoin d'attendre l'avis de tout les membres du groupe
- - le quota est à évaluer en fonction des personnes inscrites au groupe (ou au Conseil selon la situation) qui ont manifesté leurs souhaits d'être considéré comme votant régulier => exemple kload peut vouloir donner son avis ponctuellement, mais à priori il ne souhaitera pas être considéré comme membre votant actif du Conseil
- - pouvoir être repoussable sur simple demande d'une des personnes du groupe. Et seulement du groupe, pas tous les contributeurs.
+L'auteur est vivement encouragé à décrire sa proposition en donnant le maximum des informations
+pertinentes. Le groupe peut, à cette fin, proposer un modèle des informations à
+inclure, comme par exemple :
+- status actuel de la PR (ex. : non terminé, en attente de revues, choix techniques à faire...)
+- problème auquel réponds la PR (et références liées, par ex. : ticket sur le bugtracker, post sur le forum...)
+- solution, stratégie, résumé des changements, et/ou choix techniques utilisés dans la PR
+- comment tester la PR
-##### 2) Ouverture de la discussion, plusieurs réponses possibles :
-Tout le monde peut changer de positions à n'importe quel moment, mais il est de bon ton de laisser au groupe le temps de réagir si cela est nécessaire (pas passer de positif à négatif puis rejeter la proposition 3 min après par exemple.)
+L'auteur est vivement encouragé à respecter les bonnes pratiques suivantes :
+- une PR doit concerner exclusivement un sujet précis. Par exemple, elle ne doit pas à la fois résoudre un bug et ajouter une fonctionnalité (à moins que l'un implique l'autre) ;
+- avant de débuter l'implémentation d'une fonctionnalité qui fait intervenir des choix de conception (nom et format de commande ou d'option, nouvelle API, interface utilisateur, ...), discuter en amont de manière informelle avec le groupe pour s'assurer que l'implémentation imaginée convienne au plus grand nombre et reste dans l'esprit du projet ;
+- nommer sa PR avec un titre explicite, et la branche associée avec un nom explicite ;
+- donner les références vers d'autres éléments liés à la PR (rapport de bug sur le bugtracker, message sur le forum, ...)
-- réponses dites "simple"
- - "je suis d'accord" -> vaut pour un avis positif
- - "ça me semble bon, mais je préfère m'en remettre aux autres" -> si jamais il n'y a que des avis comme cela (ou le suivant) et au moins un avis positif et que la date est passé, la proposition est acceptée
- - "pas d'avis" / "je ne suis pas en position de donner un avis pertinent (exemple: je sais pas coder en X)"
-- réponses délayantes/différées
- - demande de précisions, dans ce cas la décision est suspendue
-- refus: tout refus doit être argumenté et justifié
+Une PR peut être créée même si son auteur juge qu'elle n'est pas encore terminée. Dans ce cas, il doit déclarer explicitement dans le fil de discussion de la PR lorsqu'il juge la PR prête. Cela n'empêche pas les autres contributeurs d'émettre des avis sur la PR pendant ce temps.
-##### 3) Suspension/Repoussement
- - tant qu'il n'y a pas de réponse, la décision est suspendue, au moment de la réponse, la date de clôture est automatiquement repoussée (si besoin) (pour une durée, à définir, moins longue que la première fois)
- - situation où il y a des avis positifs et négatifs ou situation où il y a un choix à faire entre plusieurs propositions
+Il appartient aussi à l'auteur de la PR de juger de son importance. (Ce jugement pourra cependant être contesté par les autres membres du groupe concerné par la PR.) Les niveaux d'importance utilisés sont les suivants :
+- **micro** : concerne uniquement un détail de forme et/ou qui ne nécessite pas d'être débattue et testée. Elle doit être facilement réversible.
+- **mineure** : impacte de manière légère le projet (e.g. refactoring d'une petite partie de code, réparation d'un bug, ...)
+- **moyenne** : impacte de manière significative l'architecture d'une partie du code (e.g. refactoring de tout un aspect ou de tout un fichier, ajout d'une fonctionnalité importante, sortie d'une version testing, ...)
+- **majeure** : impacte lourdement l'ensemble du projet (e.g. migration d'une dépendance critique, changement de version de Debian, sortie d'une version stable, ...)
-##### 4) Demande de modifications
- - mais il se peut qu'il y ait discussion autour de ces modifications, si c'est le cas, cela devient une nouvelle décision à adjoindre à la liste des décisions à prendre et le processus s'y applique alors (et cela repousse la date)
- - dans le cas contraire, un membre du groupe peut demander à ce que l'on fasse un vote qui portera sur la liste des possibilités qui font conflits + "ce vote est mal formulé, reformulons le"
- - s'il n'y a pas assez de monde d'accord, la date est repoussée et un rappel doit être envoyé
- - si le résultat est vraiment serré, le groupe est invité à rediscuter de la question si elle est importante, car cela pourrait être source de division et de tension à l'avenir
-##### 5) Clôture
- - si le groupe est unanime dans sa décision
- - que des avis positifs
- - que des refus
- - sans avis (s'en remet aux autres)
- - Pour une décison mineure ou moyenne/standard, si le quota de réponse est atteint à la durée minimale et que le consensus est obtenu.
- - Le quota de réponse correspond aux avis nécessaires, détaillé ci-après dans les types de décisions. Le pourcentage est rapporté au nombre d'actifs dans le groupe concerné. La gestion des actif et inactif dans le groupe est à la charge du coordinateur et du suppléant qui doivent maintenir à jour la liste des membres au minimum à chaque décision du groupe. (Un inactif qui se manifeste lors d'une décision redevient automatiquement actif.)
- - s'il n'est pas possible d'avoir assez de monde (vacances, plus assez de membres du groupe pouvant avoir un avis) il est possible pour le groupe de demander la clôture même si le quota d'avis n'est pas atteint, il y a alors un nouveau décalage de la date et si cette nouvelle date est franchie, la proposition est clôturée selon les avis donnés.
+#### 2. Revue et validation collective
-###### Micro décision:
-- Décision prise et appliquée par un seul membre sans délai. Ce type de décision doit impérativement pouvoir être réversible, et peut être remise en question par n'importe quel membre du groupe.
+(Cette section ne s'applique pas aux PR "micro" qui peuvent être validées directement par leur auteur.)
-###### Décision Mineure:
-- Durée initiale: 1 semaine.
-- Durée minimale: 3 jours.
-- Décalage, si nécessaire: 3 jours.
-- Avis nécessaires: 2 membres du groupe (celui qui a initié cette prise de décision peux donner son avis). 3, dont 2 membres du groupe pour anticiper.
-- Validation par vote (le cas échéant): 66% de votes positifs.
+Une fois la PR déclarée comme terminée, les contributeurs sont invités à donner leurs avis, relire et tester les changements proposés pour les valider. Lorsque des bugs ou des implémentations mauvaises ou incomplètes sont trouvées, les relecteurs rapportent cordialement le problème à l'auteur de la PR sur le fil de discussion. Si le problème trouvé est simple à corriger (e.g. typo ou détail de forme), le relecteur est encouragé à amender la PR pour corriger le problème lui-même. Sinon, l'auteur fait de son mieux pour corriger les problèmes soulevés.
-###### Décision Standard/Moyenne:
-- Durée initiale: 2 semaines.
-- Durée minimale: 1 semaine.
-- Décalage, si nécessaire: 1 semaine.
-- Avis nécessaires: 50% des membres du groupe (celui qui a initié cette prise de décision peux donner son avis). 66% des membres du groupe pour anticiper.
-- Validation par vote (le cas échéant): 75% de votes positifs.
+Les relecteurs rapportent également le degré de relecture et de tests effectués (c.f. liste ci-dessous). Selon l'importance de la PR (mineure, moyenne ou majeure), différents quotas de tests et approbations sont à remplir pour que celle-ci soit validée. Les relecteurs peuvent valider une fois chaque type de relecture/test nécessaire (par exemple, un relecteur peut donner un point d'accord sur le principe, un autre point de relecture en diagonale, et un autre point de test dans des cas simples.). L'auteur de la PR ne compte pas dans ces quotas de validation. La proposition doit aussi passer les tests automatiques disponibles dans le groupe (CI, tests unitaires/fonctionnels, linter, ...).
-###### Décision Majeure :
-- Durée initiale: 1 mois.
-- Décalage, si nécessaire: 2 semaines.
-- Avis nécessaires: 75% des membres du groupe (celui qui a initié cette prise de décision peux donner son avis).
-- Validation par vote (le cas échéant): 90% de votes positifs.
+| | **Mineure** | **Moyenne** | **Majeure** |
+|-----------------------------------|-------------|--------------|-------------|
+| **Accord sur le principe** | 2 | 3 | 4 |
+| **Relecture en diagonale** | 1 | 2 | 3 |
+| **Testé dans les cas simples** | 1 | 2 | 3 |
+| **Relecture attentive** | 0 | 1 | 2 |
+| **Testé dans des cas compliqués** | 0 | 1 | 2 |
-##### 6) Application
-Alors un membre du groupe peut annoncer la décision comme effective (et procéder aux actions nécessaires comme releaser, merger, annonce, autre ...). Il est important que s'il y a besoin de certaines actions, des personnes se soient engagées à les faire, une décision sans désigner est moyennement utile
+Si l'auteur ne fait pas parti du groupe concerné par la PR, tous ces quotas sont augmentés de 1. Dans tous les cas, ces quotas doivent être remplis au moins à 50% par des relecteurs membres du groupe concerné par la PR. (Ainsi, par exemple, un non-membre peut donner son accord sur le principe pour une PR mineure. Mais deux avis de non-membres pour une PR moyenne comptent uniquement pour un seul avis).
+
+
+#### 3. Merge d'une pull request
+
+Une fois les quotas de relecture remplis, et si aucun refus n'a été prononcé et qu'aucune demande de changement n'est en attente, n'importe quel membre du groupe peut alors déclarer et marquer la PR comme "prête à être mergée".
+
+Pendant une durée de 3 jours suivant cette déclaration, les membres du groupe peuvent encore relire, demander des changements ou émettre un refus vis-à-vis de la PR. Dans ce cas, le merge est interrompu et le processus retourne à la partie 2). Pour les PRs moyennes et majeures, la durée est augmentée jusqu'à ce qu'il se soit écoulé au moins une semaine par rapport au moment où la PR a été déclarée comme prête par son auteur.
+
+À l'issue de cette durée, n'importe quel membre du groupe peut merger la PR. Lorsque celle-ci comporte plusieurs commits, il est recommandé d'utiliser la fonction "squash and merge" pour garder l'historique de commit propre.
+
+#### Cas particuliers
+
+Plusieurs cas particuliers peuvent se présenter et dont la résolution est décrite ci-après.
+
+##### Refus d'une PR
+
+Une PR peut être refusée et clôturée par n'importe quel membre du groupe concerné si :
+- la PR a été créée au moins depuis deux semaines
+- au moins deux membres du groupe ont manifesté un désaccord avec le principe de la PR
+- aucun autre membre du groupe n'a manifesté son accord avec le principe de la PR
+
+
+##### Co-création
+
+Une PR peut être développée par plusieurs personnes. Chacun est invité à y faire des commits en se concertant avec l'auteur initial ou le nouveau gestionnaire de PR si l'auteur est indisponible, manque de temps ou souhaite se consacrer à d'autres travaux.
+
+Si ces commits sont conséquents, dans ce cas on peut prendre **partiellement** en compte l'avis des auteurs dans les quotas de relectures et de tests.
+
+Exemple: si une PR est écrite par A et B (50/50), A et B pourront relire le code de l'autre. Dans ce cas, on pourra par exemple compter une relecture pour ces 2 relectures partielles.
+
+
+##### Validation "allégé" en cas de manque de relecteurs
+
+En cas de manque de relecteurs, l'auteur d'une PR peut déclencher une procédure de validation alternative si :
+- l'auteur est membre du groupe concerné par la PR
+- il s'agit d'une PR mineure ou moyenne
+- la PR a été déclarée comme prête
+- il n'y a pas de demande de changement en attente
+- les quotas de relecture "standards" n'ont pas été remplis
+- une semaine s'est écoulée depuis le dernier commentaire ou commit
+
+Dans ce cas, l'auteur annonce sur le fil de discussion de la PR qu'il souhaite engager cette prodécure ainsi que sur la liste de diffusion (ou lors d'une réunion du mardi). À partir de ce moment, les quotas d'accord, relecture et tests pour valider cette PR sont diminués de 1. Au minimum une semaine devra s'écouler avant que cette PR ne soit effectivement mergée. Un autre membre du groupe peut à tout moment mettre fin à cette procédure si il juge la PR trop critique pour être mergée de la sorte.
## Composition des groupes
- Conseil : Bram, ju, ljf, Maniack, Moul, opi, theodore.
-- Core Dev : AlexAubin, Bram, Ju, ljf, Moul, opi
-- Apps : Bram, frju365, JimboJoe, Ju, ljf, Maniack C, Maxime, Moul, Scith, Tostaki
+- Core Dev : AlexAubin, Bram, JimboJoe, Ju, ljf, Moul, opi
+- Apps : Bram, cyp, frju365, JimboJoe, Josue-T, Ju, ljf, Maniack C, Maxime, Moul, Scith, Tostaki
- Infra : Bram, Ju, Maniack C, Moul, opi
- Communication
- - Com : Bram, Moul, korbak, ljf, opi
+ - Com : Bram, Moul, korbak, ljf, opi, frju365
- Doc : Moul, Theodore
- Trad : Jean-Baptiste
- Distribution : Heyyounow
-## Tableau récapitulatif du nombre d'avis nécéssaire pour la prise de décision
-
-_Les valeurs sont arrondies (exemple: 5,4 => 5 et 5,5 => 6)._
-
-| | **Mineure** | **Standard** | **Majeure** |
-|----------------------|---------|----------|---------|
-| **Conseil** |
-| Clôture classique | 2 | 4 | 5 |
-| Clôture anticipée | 3* | 5 |
-| Clôture par vote | 5 | 5 | 6 |
-| **Core Dev** |
-| Clôture classique | 2 | 3 | 5 |
-| Clôture anticipée | 3* | 4 |
-| Clôture par vote | 4 | 5 | 5 |
-| **Apps** |
-| Clôture classique | 2 | 5 | 8 |
-| Clôture anticipée | 3* | 7 |
-| Clôture par vote | 7 | 8 | 9 |
-| **Infra** |
-| Clôture classique | 2 | 3 | 4 |
-| Clôture anticipée | 3* | 3 |
-| Clôture par vote | 3 | 4 | 5 |
-| **Communication -> Com** |
-| Clôture classique | 2 | 2 | 3 |
-| Clôture anticipée | 3* | 3 |
-| Clôture par vote | 3 | 3 | 4 |
-| **Communication -> Doc** |
-| Clôture classique | 1 | 1 | Conseil |
-| Clôture anticipée | 2* | 2* |
-| Clôture par vote | Conseil | Conseil | Conseil |
-| **Distribution** |
-| Clôture classique | 1 | Conseil | Conseil |
-| Clôture anticipée | 1 | Conseil |
-| Clôture par vote | 1 | Conseil | Conseil |
-
-\* dont 1 avis qui peut être externe au groupe
-
-Pour la traduction, le processus reste à adapter.
-
-Pour la doc, le nombre d'avis pour la cloture anticipée d'une décision mineure est pour le moment réduit (vu qu'il n'y a que 2 personnes dans le groupe). Les autres types de décisions sont prises par le conseil.
-
-Pour le groupe distribution, étant donné qu'il n'y a pour l'instant que Heyyounow, le Conseil sera sollicité pour les décisions Standard ou Majeure.
## Droits d’administration afférents aux groupes
Cette partie liste les kits de droits d’administration pour les différents groupes du projet YunoHost :
@@ -251,7 +226,7 @@ Cette partie liste les kits de droits d’administration pour les différents gr
- Redmine : membre du [projet `Apps`](https://dev.yunohost.org/projects/apps),
- GitHub : membre de l’[équipe `Apps` de l’organisation `YunoHost`](https://github.com/orgs/YunoHost/teams/apps),
- Intégration continue : accès à [CI-Apps](https://ci-apps.yunohost.org),
-- XMPP : admin et modérateur sur le [salon `Apps`](xmpp:apps@conference.yunohost.org?join),
+- XMPP : modérateur sur le [salon `Apps`](xmpp:apps@conference.yunohost.org?join),
- Forum : membre du [groupe `Apps`](https://forum.yunohost.org/groups/Apps).
### Communication
@@ -322,4 +297,4 @@ Cette partie liste les kits de droits d’administration pour les différents gr
- Listes de diffusion : [contrib](https://list.yunohost.org/cgi-bin/mailman/listinfo/contrib) et [apps](https://list.yunohost.org/cgi-bin/mailman/listinfo/apps)
- [Bugtracker Redmine](https://dev.yunohost.org).
- Forge git pour la review de code : [YunoHost](https://github.com/YunoHost) [YunoHost-Apps](https://github.com/YunoHost-Apps).
-- [Salons discussions XMPP](https://yunohost.org/#/chat_rooms_fr)
+- [Salons de discussions XMPP](https://yunohost.org/#/chat_rooms_fr)
diff --git a/package_list_fr.md b/package_list_fr.md
index e8997e6c..4c8d53ce 100644
--- a/package_list_fr.md
+++ b/package_list_fr.md
@@ -4,7 +4,7 @@
Afin de mettre en place un système automatisé de compilation des paquets Debian, le développement de YunoHost progresse désormais autour de trois branches principales :
- **stable** : il s’agit du code des paquets Debian utilisés en live par les utilisateurs de YunoHost.
- **testing** : il s’agit du code éligible pour la création d’une nouvelle version de YunoHost, il est supposé stable mais manque de test. La branche testing peut notamment servir pour corriger rapidement certains bugs.
-- **unstable** : il s’agit là des derniers codes ajoutés au dépôt mais qui sont connus pour être instables voir inachevés. C’est à destination de cette branche que vous devez faire vos pull request. Si votre travail est conséquent mais inachevé, il convient d’envisager de créer une branche à part thématique (exemple : backup).
+- **unstable** : il s’agit là des derniers codes ajoutés au dépôt mais qui sont connus pour être instables voir inachevés. C’est à destination de cette branche que vous devez faire vos pull request. Si votre travail est conséquent mais inachevé, il convient d’envisager de créer une branche à part, thématique (exemple : backup).
Les numéros de version des paquets stable sont pairs, les numéros de version des paquets testing sont impairs. Ainsi, la version 2.3 de YunoHost est une version de test qui sera transformée en version 2.4 si les tests sont concluants.
@@ -38,4 +38,4 @@ Le service yunohost-api doit donc être start pour utiliser l’administration w
### Conseils de développement
#### Traduction
Afin d’éviter des problèmes de fusion, lorsque vous ajoutez ou modifiez une clé de traduction dans les fichiers json situés dans les répertoires locales des dépôts git, il est demandé d’ajouter les clés uniquement dans le fichier en.json, même si vous savez faire la traduction pour d’autres langues.
-Les traductions se font ensuite sur
weblate. Donc si effectivement vous savez traduire dans une autre langue, n’hésitez pas à y faire un tour.
\ No newline at end of file
+Les traductions se font ensuite sur
weblate. Donc si effectivement vous savez traduire dans une autre langue, n’hésitez pas à y faire un tour.
diff --git a/packaging_apps.md b/packaging_apps.md
index cd2bfe32..a3bb6d21 100644
--- a/packaging_apps.md
+++ b/packaging_apps.md
@@ -38,7 +38,7 @@ Since YunoHost has a unified architecture, you will be able to guess most of the
Multi-instance
### Hooks
-YunoHost provides a hook system, which is accessible via the packager's script callbacks in moulinette (CLI).
+YunoHost provides a hook system, which is accessible via the packager's script callbacks in command line.
The scripts have to be placed in the `hooks` repository at the root of the YunoHost package, and must be named `priority-hook_name`, for example: `hooks/50-post_user_create` will be executed after each user creation.
**Note**: `priority` is optional, default is `50`.
@@ -48,13 +48,44 @@ Take a look at the [ownCloud package](https://github.com/Kloadut/owncloud_ynh) f
### Helpers
Helpers
+### Registering a log file
+
+In a lot of case, you might want to register a log file created by your app, to make it available in the webadmin. To register a log, you can create a reference file `/var/log/yunohost/categories/app/APPNAME.yml`.
+
+You can specify a start date by starting the file name with the date formatted as `YYYYMMDD-HHMMSS`.
+
+Example of yml metadata log file:
+```bash
+log_path: /path/to/your/log/file.log
+```
+
+If you want display some context info, you can add:
+```bash
+extra:
+ env:
+ args1: value1
+ args2: value2
+ args3: value3
+```
+
+You can attach the log to an app, domain, service or user like this :
+```bash
+related_to:
+ - ['app', 'APPNAME']
+ - ['service', 'SERVICE1']
+ - ['service', 'SERVICE2']
+ - ['domain', 'DOMAIN.TLD']
+```
+
+This will be used to filter logs and display all log related to an entity like a user, a domain, an app or a service.
+
### Test it!
In order to test your package, you can execute your script standalone as `admin` (do not forget to append required arguments):
```bash
su - admin -c "/bin/bash /path/to/my/script my_arg1 my_arg2"
```
-Or you can use [moulinette](/moulinette_en):
+Or you can use [command line](/commandline_en):
```bash
yunohost app install /path/to/my/app/package
```
@@ -70,7 +101,7 @@ Here is a list of best practices for application install scripts:
* install script should use the command-line method instead of calls to curl through web install form;
* install script should save install answers;
* application sources should be checked with a control sum (sha256, sha1 or md5) or a PGP signature;
-* scripts should be tested on Debian Jessie as well as 32 bits, 64 bits and ARM architectures;
+* scripts should be tested on Debian Stretch 32 bits, 64 bits and ARM architectures;
* backup and restore scripts should be present and functional.
To be define the quality of a package, it'll obtained a [level](packaging_apps_levels_fr), determined according to somes criteria of installation and according to respect to [package guidelines](packaging_apps_guidelines_fr).
@@ -87,9 +118,9 @@ This Python script checks:
### Publish and ask for testing your application
* Publishing a [post on the Forum](https://forum.yunohost.org/) with the [`App integration` category](https://forum.yunohost.org/c/app-integration), to ask for testing and feedback on your application.
-* Ask your application to be added to the [app repository](https://github.com/YunoHost/apps) to be displayed in the [non-official apps list](apps_in_progress_en). Specify its progress state: `notworking`, `inprogress`, or `working`.
+* Ask your application to be added to the [app repository](https://github.com/YunoHost/apps) to be displayed in the [non-official apps list](apps_en). Specify its progress state: `notworking`, `inprogress`, or `working`.
- Subscribe to the [Apps mailing list](https://list.yunohost.org/cgi-bin/mailman/listinfo/apps) to be informed about packaging evolution.
### Officalization of an application
-To become an official application, it must be tested well enough, be stable and should work on 64 bits, 32 bits et ARM processor architectures, and on Debian Jessie. If you think those conditions are met, ask for [official integration](https://github.com/YunoHost/apps) of your application.
+To become an official application, it must be tested well enough, be stable and should work on Debian Stretch 64 bits, 32 bits and ARM architectures. If you think those conditions are met, ask for [official integration](https://github.com/YunoHost/apps) of your application.
diff --git a/packaging_apps_arguments_management_fr.md b/packaging_apps_arguments_management_fr.md
index c7da4720..28471773 100644
--- a/packaging_apps_arguments_management_fr.md
+++ b/packaging_apps_arguments_management_fr.md
@@ -2,7 +2,7 @@
## Gestion des arguments
#### Récupérer les arguments du manifeste dans le script d’installation
-Les arguments sont passés au script d’installation dans l’ordre du manifeste. Par exemple pour Roundcube, les arguments `domain` et `path` seront respectivement récupérés avec via les variables d’environnement ou les paramètres `$1` et `$2` dans le script d’installation.
+Les arguments sont passés au script d’installation dans l’ordre du manifeste. Par exemple pour Roundcube, les arguments `domain` et `path` seront respectivement récupérés via les variables d’environnement ou les paramètres `$1` et `$2` dans le script d’installation.
```bash
# Retrieve arguments
@@ -16,7 +16,7 @@ Les scripts remove, upgrade, backup et restore peuvent avoir besoin de ces argum
Pour cela, YunoHost peut sauvegarder les arguments avec cette commande :
```bash
# Store config on YunoHost instance
-ynh_app_setting_set $app domain $domain
+ynh_app_setting_set "$app" domain "$domain"
```
Elle est généralement utilisée dans le script d’installation.
diff --git a/packaging_apps_fr.md b/packaging_apps_fr.md
index 872bd0d0..30a4be72 100644
--- a/packaging_apps_fr.md
+++ b/packaging_apps_fr.md
@@ -15,7 +15,7 @@ Si vous ne comprenez pas ces prérequis, ou si vous ne savez pas comment écrire
Un paquet YunoHost est composé :
* d’un `manifest.json`
-* d’un dossier `scripts`, composé de cinq scripts Shell `install`, `remove`, `upgrade`, `backup` et `restore`
+* d’un dossier `scripts`, composé de six scripts Shell `install`, `remove`, `upgrade`, `backup`, `change_url` et `restore`
* de dossiers optionnels, contenant les `sources` ou de la `conf`
* d’un fichier `LICENSE` contenant la licence du paquet
* d’une page de présentation du paquet contenu dans un fichier `README.md`
@@ -39,9 +39,43 @@ Comme les instances de YunoHost possèdent une architecture unifiée, vous serez
### Multi-instance
Multi-instance
+### Hooks
+
Hooks
+
### Commandes pratiques
Commandes pratiques
+### Référencement des logs
+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`.
+
+Il est possible de spécifier la date de début en commençant le nom de fichier par la date `YYYYMMDD-HHMMSS`.
+
+Exemple de fichier de log d'indexation:
+```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" :
+```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 :
+```bash
+related_to:
+ - ['app', 'APPNAME']
+ - ['service', 'SERVICE1']
+ - ['service', 'SERVICE2']
+ - ['domain', 'DOMAIN.TLD']
+```
+
+Ces informations seront utilisées pour permettre de filtrer les logs en relation avec une de ces entités application, service, domaine, personne.
+
+
### Améliorer la qualité du paquet d’installation
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` ;
@@ -49,7 +83,7 @@ Vous trouverez ci-dessous une liste des points à vérifier concernant la qualit
* Votre script d’installation utilise une méthode d’installation en ligne de commande plutôt qu’un appel curl via un formulaire web d’installation ;
* Votre script d’installation enregistre les réponses de l’utilisateur ;
* Vous avez vérifié les sources de l’application avec une somme de contrôle (sha256, sha1 ou md5) ou une signature PGP ;
-* Vos scripts ont été testés sur Debian Jessie ainsi que sur les architectures 32 bits, 64 bits et ARM ;
+* Vos scripts ont été testés sur Debian Stretch 32 bits, 64 bits et ARM ;
* Les scripts backup et restore sont présents et fonctionnels.
Pour mesurer la qualité d'un paquet, celui-ci obtiendra un [niveau](packaging_apps_levels_fr), déterminé en fonction de divers critères d'installation et selon le respect des [règles de packaging](packaging_apps_guidelines_fr).
@@ -66,9 +100,9 @@ Il s’agit d’un script Python qui vérifie :
### Publiez et demandez des tests de votre application
* 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).
-* Faire une demande d’ajout de votre application dans le [dépôt des applications](https://github.com/YunoHost/apps) afin qu’elle soit affichée dans [la liste des apps non officielles](apps_in_progress_fr). Préciser également son état d’avancement : `notworking`, `inprogress` ou `working`.
+* Faire une demande d’ajout de votre application dans le [dépôt des applications](https://github.com/YunoHost/apps) afin qu’elle soit affichée dans [la liste des apps non officielles](apps_fr). Préciser également son état d’avancement : `notworking`, `inprogress` ou `working`.
- Inscrivez-vous à la [mailing list Apps](https://list.yunohost.org/cgi-bin/mailman/listinfo/apps) pour être tenu au courant des évolutions du packaging.
### Officialisation d’une application
-Pour qu’une application devienne officielle, elle doit être suffisamment testée, stable et fonctionner sous les architectures 64 bits, 32 bits et ARM sur Debian Jessie. Si ces conditions vous paraissent réunies, demandez l’[intégration officielle](https://github.com/YunoHost/apps) de votre application.
+Pour qu’une application devienne officielle, elle doit être suffisamment testée, stable et fonctionner sous Debian Stretch 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.
diff --git a/packaging_apps_guidelines.md b/packaging_apps_guidelines.md
new file mode 100644
index 00000000..19ee3aa0
--- /dev/null
+++ b/packaging_apps_guidelines.md
@@ -0,0 +1,442 @@
+# Packing Applications : Good Practise Guidelines
+
+
+
+This page is under development. As long as this warning is not removed. Consider this information as potentially false.
+The name YEP is not a priori definitive, neither the levels nor the good practices in itself.
+
+
+
+### Introduction
+The purpose of this document is to list the various best practices concerning the creation of YunoHost application packages.
+
+Each good practice is numbered with a number suffixed by the letters YEP (YunoHost Enhancement Proposals), so that it can be easily referenced in the ([package checker](https://github.com/YunoHost/package_check) and [package linter](https://github.com/YunoHost/package_linter)) tools, but also during the reviews of code.
+
+Each YEP is associated with:
+* a status indicating whether the rule has been validated or is still under discussion (draft, validated, refused, obsolete);
+* an indication of the type of test to be carried out (manual or auto if an automatic tool can verify);
+* an indication of the app level from which the rule is required (NOTWORKING, INPROGRESS, WORKING, OFFICIAL), some rules are optional;
+
+### YEP Index
+| ID | Title | Status | Test | Level |
+| ---- | -------- | -------- | ------ | -------- |
+| ** YEP 1 ** | ** Communicate with the community ** | | | |
+| YEP 1.1 | App name and deposit | validated | manual | NOTWORKING (0) |
+| YEP 1.2 | Register the app on a known "directory" | validated | manual | NOTWORKING (0) |
+| YEP 1.3 | Indicate the license associated with the package | validated | AUTO | WORKING (5) |
+| YEP 1.4 | Inform about intention to maintain package | draft | manual | OFFICIAL (6) |
+| YEP 1.5 | Regularly update app status | draft | manual | WORKING (2) |
+| YEP 1.6 | Keeping up-to-date on the evolution of apps packaging | validated | manual | OFFICIAL (6) |
+| YEP 1.7 | Add the app to the [YunoHost-Apps Organization](https://github.com/YunoHost-Apps) | validated | manual | OFFICIAL (6) |
+| YEP 1.8 | Publish test requests | validated | manual | OFFICIAL (6) |
+| YEP 1.9 | Document the app | validated | AUTO | OFFICIAL (6) |
+| YEP 1.10 | Keep a clean version history | draft | manual | OFFICIAL (6) |
+| YEP 1.11 | Add app to [YunoHost bugtracker](https://github.com/YunoHost/issues/issues) | draft | manual | OFFICIAL (NA) |
+| | | | | |
+| ** YEP 2 ** | ** Stabilize an app ** | ** Status ** | ** Test ** | ** Level ** |
+| YEP 2.1 | Respect the manifest format | validated | Home | INPROGRESS (5) |
+| YEP 2.2 | Using bash for main scripts | validated | Home | WORKING (1) |
+| YEP 2.3 | Save replies during installation | validated | manual | WORKING (3) |
+| YEP 2.4 | Detect and manage errors | draft | manual | WORKING (8) |
+| YEP 2.5 | Copy files correctly | draft | manual | WORKING (1) |
+| YEP 2.6 | Cancel action if input values are incorrect | validated | manual | WORKING (7) |
+| YEP 2.7 | Give sufficient permissions to bash | validated | Home | WORKING (1) |
+| YEP 2.8 | Correctly Changing a System Configuration | draft | manual | WORKING (8) |
+| YEP 2.9 | Remove all traces of the app when deleting | draft | manual | WORKING (6) |
+| YEP 2.10 | Configure application logs | draft | manual | WORKING (9) |
+| YEP 2.11 | Use a variable rather than the id app directly | validated | manual | OFFICIAL (9) |
+| YEP 2.12 | Using Helpers | validated | Home | OFFICIAL (5) |
+| YEP 2.13 | Translate the package in English | draft | manual | OFFICIAL (9) |
+| YEP 2.14 | Fill a conf file correctly | draft | manual | OFFICIAL (9) |
+| YEP 2.15 | Follow the instructions for installing the application | validated | manual | OFFICIAL (1) |
+| YEP 2.16 | Check availability of dependencies on ARM, x86 and x64 | validated | manual | OFFICIAL (8) |
+| YEP 2.17 | Take the original version into account when updating | validated | manual | OFFICIAL (9) |
+| | | | | |
+| ** YEP 2.18 ** | ** Stabilize a webapp ** | ** Status ** | ** Test ** | ** Level ** |
+| YEP 2.18.1 | Launch the script to install a webapp correctly | validated | manual | WORKING (5) |
+| YEP 2.18.2 | Manage installation at the root of a domain name | validated | Home | WORKING (2) |
+| YEP 2.18.3 | Manage installation on a subdomain | validated | Home | WORKING (2) |
+| YEP 2.18.4 | Manage installation on a path `/path` | validated | Home | OFFICIAL (2) |
+| YEP 2.18.5 | Manage the YunoHost tile for easy navigation between applications | validated | manual | OFFICIAL (8) |
+| | | | | |
+| ** YEP 3 ** | ** Secure an app ** | ** Status ** | ** Test ** | ** Level ** |
+| YEP 3.1 | Do not ask or store LDAP password | draft | manual | NOTWORKING (?) |
+| YEP 3.2 | Open a port correctly | draft | manual | WORKING (7) |
+| YEP 3.3 | Facilitating Source Integrity Control | draft | manual | OFFICIAL (6) |
+| YEP 3.4 | Isolate app | draft | manual | OFFICIAL (8) |
+| YEP 3.5 | Follow the recommendations of the app's documentation | validated | manual | OFFICIAL (6) |
+| YEP 3.6 | Update versions containing CVE | draft | manual | OFFICIAL (6) |
+| | | | | |
+| ** YEP 4 ** | ** Integrate an app ** | ** Status ** | ** Test ** | ** Level ** |
+| 4.1 | Link to ldap | validated | manual | OFFICIAL (4) |
+| YEP 4.2 | Link authentication to sso | validated | manual | OFFICIAL (4) |
+| YEP 4.2.1 | Sign Out | validated | manual | OFFICIAL (9) |
+| YEP 4.3 | Provide YunoHost Backup Script Functional | validated | Home | OFFICIAL (6) |
+| YEP 4.4 | Provide a YunoHost Restore Functional script | validated | Home | OFFICIAL (6) |
+| YEP 4.5 | Using Hooks | validated | manual | OPTIONAL (8) |
+| YEP 4.6 | Manage multi-instance | validated | manual | OPTIONAL (2) |
+| YEP 4.7 | Add a module to the CLI | validated | manual | OPTIONAL |
+| YEP 4.8 | Add a module to the web admin | draft | manual | OPTIONAL |
+
+### YEP 1
+#### Communicating with the community
+The YEP 1 is a meta YEP, it explains what it takes to interact with the community around a YunoHost application package.
+
+#### YEP 1.1
+##### App name and deposit | validated | manual | NOTWORKING |
+Each YunoHost application has an id registered in the application manifest.
+This identifier must be unique between each application packet.
+It is therefore recommended to verify its availability by consulting the list of applications referenced in the known applications repositories (official, community, internetcube).
+
+In addition, the identifier must respect the regular expression `^[a-z1-9]((_|-)?[A-z1-9])+$`.
+In other words, it must respect the following rules:
+* be in lowercase
+* start with a letter or number
+* be alphanumeric (the underscore is allowed)
+* do not contain two underscores or dashes that follow one another
+* do not end with an underscore or dash
+
+For application names containing spaces, virtually all current packages simply remove them without replacing them with dashes or underscores.
+
+By convention, the YunoHost application repositories are always named their ID followed by the string "\ _ynh". Thus one can distinguish the upstream repository of the application, the deposit of the yunohost package. This notation also makes it possible to find applications not listed by the search engines of platforms offering version managers (GitHub for example).
+
+Example: ID: Example Filing Name: example_ynh
+
+#### YEP 1.2
+##### Register the app on a known "directory" | validated | manual | NOTWORKING |
+It is advised from the beginning of the packaging to register an app on one of the YunoHost application depots.
+
+These deposits have several functions:
+* communicate the existence of a package;
+* indicate the latest version associated with the package (to allow the update of the app by YunoHost);
+* indicate the state of operation of the packet;
+* indicate information about the support of a package.
+
+For the `official.json` and` community.json` lists, registration is on [the git apps repository](https://github.com/YunoHost/apps).
+
+#### YEP 1.3
+##### Indicate the license associated with the package | draft | AUTO | WORKING |
+The license of the packet must be specified in a `LICENSE` file at the root of the packet. Be careful not to confuse with the license of the application that will be installed whose acronym is to be entered in the `license` field of the manifest.
+
+The application lists official.json and community.json only accept packages with a free license, as well as the license for the contained application. Some free applications require non-free dependencies (example: mp3, drivers, etc.). In this case, you should add `&dep-non-free` to the acronym and if possible give details in the README.md of the package, in this case the integration will be accepted on a case-by-case basis.
+
+In the future, YunoHost will probably display details about the license of the application. To achieve this, the acronym must be the one from this [list of licenses listed in the SPDX](https://spdx.org/licenses/) (if there are 2 acronyms, the one containing the version number). For consistency, the case must be respected.
+
+If the license is not present in the list, in this case it is necessary to indicate `free` or `non-free` depending on whether it is free or not and give the user the opportunity to inquire in the README .md (link, explanations, ...).
+
+Example: for a GNU Lesser General Public License (LGPL), version 3 the acronym is `LGPL-3.0` if non-free dependencies are used in this case it will be necessary to put LGPL-3.0 & dep-non-free `in the manifesto.
+
+If an application has modules linked to another license (Example: Odoo 9 LGPL-3.0 + a module licensed AGPL-3.0), in this case we will indicate the two licenses separated by a `&`.
+
+If two separate applications are in the same installation package and have separate licenses, in this case we can use `,` to separate the licenses.
+
+In both cases, the maintainer is encouraged to consider creating two separate packages. The manifest of each application is used to ask app-type questions to refer to another application already installed.
+
+Reminder: a question of type `app` answers the identifier of one of the apps already installed.
+
+Some interesting links to help with the choice of license:
+* [Explanatory sheets on free licenses](https://www.inria.fr/content/download/5896/48452/version/2/file/INRIA_recueil_fiches_licences_libres_vf.pdf)
+* [GNU project licensing documentation](https://www.gnu.org/licenses/licenses.html)
+* [A Guide to the GNU Project to Help Choose a License](https://www.gnu.org/licenses/license-recommendations.en.html)
+
+#### YEP 1.4
+##### Inform about intention to maintain package | draft | manual | OFFICIAL |
+The maintainer of the application must undertake to maintain its app over time if he wishes it to join the list of official applications.
+This involves monitoring updates to the upstream application, adhering to the new packaging rules and responding to user requests.
+
+#### YEP 1.5
+##### Regularly update app status | draft | manual | WORKING |
+#### YEP 1.6
+##### Keeping up-to-date on the evolution of apps packaging | validated | manual | OFFICIAL |
+In order to keep up with the evolution of the packaging format and best practices, it is recommended to:
+* subscribe to the discussion list `apps @ list.yunohost.org`
+* follow [the forum's Apps category](https://forum.yunohost.org/c/apps-packaging)
+
+To follow the evolution of YunoHost more generally:
+* join XMPP dev@conference.yunohost.org ([three days of logs are available](https://im.yunohost.org/logs/dev/))
+* follow [Annoucement category of the forum](https://forum.yunohost.org/c/announcement)
+* follow discussions on contrib@list.yunohost.org
+
+#### YEP 1.7
+##### Add the app to the [YunoHost-Apps Organization](https://github.com/YunoHost-Apps) | validated | manual | OFFICIAL |
+Adding an app to the [YunoHost-Apps organization](https://github.com/YunoHost-Apps) lets you share apps with other contributors who might be tempted to package the targeted application .
+
+It is also a way to quickly deploy a security patch if necessary in the event that the maintainer is unavailable.
+
+Transfer Procedure: Ask the [chat room](chat_rooms_en) to be invited to the organization by providing the name of their GitHub account.
+Once the invitation is accepted, [transfer its deposit to the organization by following this tutorial](https://help.github.com/articles/transferring-a-repository-owned-by-your-personal-account/# Transferring-a-repository-to-another-user-account-or-to-an-organization).
+
+#### YEP 1.8
+##### Publish test requests | validated | manual | OFFICIAL |
+In order to ensure the proper functioning of a package, it is necessary to publish an announcement in order to open the tests on the package. This announcement can be done on the forum in [Forum Apps category](https://forum.yunohost.org/c/apps).
+
+It is recommended to indicate if some tests have not been conducted.
+
+* Check package with Package linter.
+* Installation in subfolder.
+* Installation at the root of a domain or subdomain.
+* Deletion, in the 2 cases of previous installations.
+* Access to the web interface of the application, with the / final in the address, and omitting it.
+* Upgrade on the same version of the package.
+* Upgrade from an older version of the package.
+* Private installation (secured by SSO).
+* Public installation.
+* Multi-instance installation.
+* User name error.
+* Domain name error.
+* Poorly written path (path / instead of / path for example).
+* Port already used by another application.
+* Source corrupted after download.
+* Error downloading source.
+* Folder already used by another application.
+* Backup and restore.
+
+#### YEP 1.9
+##### Document the app | validated | AUTO | OFFICIAL |
+Above all, it is appropriate to make a correct description of the app in the `description` field of the manifest. Keyword insertion in this description can be a good idea, as a user might be required to search (CTRL + F) among all applications.
+
+There is also README.md, which must and can contain:
+* the name of the app
+* a brief summary of what it does
+* any additional installation if the script is not sufficient
+* instructions to use it (for example to connect your smartphone or computer)
+* the location to report a malfunction / request
+* the roadmap / TODO
+* possibly prerequisites in terms of ram memories, processor etc. (some equipment has less than 512MB of ram)
+
+#### YEP 1.10
+##### Keep a clean version history | draft | manual | OFFICIAL |
+#### YEP 1.11
+##### Add app to [YunoHost bugtracker](https://github.com/YunoHost/issues/issues) | draft | manual | OFFICIAL |
+
+### YEP 2
+#### Stabilize an app
+#### YEP 2.1
+##### Respect the manifest format | validated | Home | INPROGRESS |
+The manifest allows to describe an app so that YunoHost can apply the good treatments. For more information see [dedicated documentation](https://yunohost.org/#/packaging_apps_manifest).
+
+#### YEP 2.2
+##### Using bash for main scripts | validated | Home | WORKING |
+Action scripts (install, upgrade, remove, backup and restore) must be in the bash so that the cli / api yunohost can call them correctly.
+
+That being said, there is nothing to prevent other scripts or function libraries from using these scripts. These are not obliged to be in bash.
+
+However, careful attention must be paid to the correct display of logs of information, warning, or errors. So that a user of the cli / api yunohost can understand the operation of the script just executed and if necessary repair its YunoHost instance.
+
+#### YEP 2.3
+##### Save the answers during the installation | validated | manual | WORKING |
+During installation, it is necessary to save each answer to the questions in the manifest. Indeed, even if at the beginning it is not necessary to write an update script, thereafter it will probably be the case. However, without the initial information, the update can be more tedious.
+
+#### YEP 2.4
+##### Detecting and Managing Errors | draft | manual | WORKING |
+The install, upgrade, backup, and restore scripts must detect errors to avoid further scripting in case of blocking error or empty variable usage.
+The use of trap and set -eu is recommended to detect and treat errors ([Discussion in progress](https://forum.yunohost.org/t/gestion-des-erreurs-set-e-and-or-trap/2249/5))
+It is also necessary to check the contents of the variables before removing the remove script. For example, an `rm -Rf /var/www/$app` with `$app` empty would have a disastrous result.
+
+At the beginning of the scripts, before any modifications, it is necessary to check the existence of the users mentioned at the installation, as well as the availability of the requested path, the availability of the final file of the application and the size of the passwords if necessary .
+
+ Do not forget that in case of installation error the removal script will be launched automatically by the yunohost cli.
+
+#### YEP 2.5
+##### Copy files correctly | draft | manual | WORKING |
+#### YEP 2.6
+##### Cancel action if input values are incorrect | validated | manual | WORKING |
+Each script should verify that the input values are correct.
+
+Here are some examples :
+* Check that the domain name exists
+* Check that the user exists
+* Check that the chosen path is available
+
+If one of the values is incorrect, it is necessary to cancel any modifications made previously to the instance. The best thing is to do all these checks before changing the system.
+
+#### YEP 2.7
+##### Give sufficient permissions to bash | validated | Home | WORKING |
+Some instructions require sudo rights. In this case, do not forget to prefix these instructions with `sudo`.
+
+In other cases it is necessary to give rights using chmod and chown.
+
+#### YEP 2.8
+##### Correctly changing a system configuration | draft | manual | WORKING |
+Changes to the system must be reversible so that the removal of the application is of no consequence to the system leaves no residue.
+For this purpose, the `.d` folders of the system configurations must be used as much as possible. Where it is not possible to do otherwise, clearly indicate the configuration as modified by an application and ensure that the changes will be removed when it is removed.
+
+#### YEP 2.9
+##### Remove all traces of the app when deleting | draft | manual | WORKING |
+Except for dependencies (eg, Debian packages) used by other services or applications.
+
+#### YEP 2.10
+##### Configure application logs | draft | manual | WORKING |
+If possible, the application should use a log file, which will preferably be in /var/log.
+If the log is set up by the install script and not by the application itself, a log-rotate configuration file will have to be added to handle the logs of the application.
+
+#### YEP 2.11
+##### Using a variable rather than the app id directly | validated | manual | OFFICIAL |
+It is advisable to make the scripts as generic as possible, a good way to do this is to use a variable for the app's name to avoid it being found everywhere in scripts. This will make it easier for another package builder to use the script for another app.
+
+#### YEP 2.12
+##### Using Helpers | validated | Home | OFFICIAL |
+In order to simplify packaging, standardize practices, avoid errors and increase the lifetime of a script vis-à-vis future versions of YunoHost. A set of helpers to do many actions is proposed.
+
+For more information :
+* consult [helpers documentation](https://yunohost.org/#/packaging_apps_helpers)
+* explore [helpers directory](https://github.com/YunoHost/yunohost/tree/unstable/data/helpers.d)
+
+#### YEP 2.13
+##### Translate the package in English | draft | manual | OFFICIAL |
+#### YEP 2.14
+##### Fill a conf file correctly | draft | manual | OFFICIAL |
+* Just to clear up a little this YEP, but it remains in draft form. *
+The goal is to find a more reliable method than sed to modify the configuration files. sed can possibly have edge effects by modifying unwanted parts of the configuration file, especially with the use of regex.
+
+#### YEP 2.15
+##### Follow the instructions for installing the application | validated | manual | OFFICIAL |
+
+#### YEP 2.16
+##### Check availability of dependencies on ARM, x86, and x64 | validated | manual | OFFICIAL |
+YunoHost installs on ARM, x86 and x64. A package should therefore be tested on these three processor architectures.
+
+Some packages are not available on ARM, in this case it is advisable to study other solutions or to indicate in the README.md that the application does not work on ARM and to block the installation by detection of type d 'architecture.
+
+#### YEP 2.17
+##### Take the original version into account when updating | validated | manual | OFFICIAL |
+The update script must be able to run even if the previous updates have not been performed.
+
+For example, it should be possible to perform update jumps from an N-x version to an N version. To do this, it is advisable to save the version numbers in the app settings.
+
+### YEP 2.18
+##### Stabilizing a webapp
+The majority of YunoHost applications are web apps, but some are not. The YEP 2.18.x develop certain specificities related to the web app.
+
+#### YEP 2.18.1
+##### Launch the script to install a webapp correctly | validated | manual | WORKING |
+Often a web app installs itself from forms displayed on a web page. This practice, while practical for a human, is less so for a program.
+
+It is therefore necessary to check if the application does not propose a solution of installation on command line.
+
+If this is not the case, the -H option of curl should be used. In some cases, DNS redirection may not be active at the time of installation.
+`` `Bash
+curl -kL -H "Host: $domain" --data "¶m1=Text1¶m2=text2" https: //localhost$path/install.php > /dev/null 2>&1
+`` `
+
+#### YEP 2.18.2
+##### Manage installation at the root of a domain name | validated | Home | WORKING |
+A web app should be able to install itself at the root of a domain name.
+
+#### YEP 2.18.3
+##### Manage installation on a subdomain | validated | Home | WORKING |
+A web app should be able to install itself on a subdomain directly without subfolders.
+
+#### YEP 2.18.4
+##### Manage installation on a path `/path` | validated | Home | OFFICIAL |
+A web app should be able to install on a path `/path`.
+
+#### YEP 2.18.5
+##### Manage the YunoHost tile to easily navigate between applications | validated | manual | OFFICIAL |
+Except in rare cases it is advisable to integrate the tile YunoHost which allows to return to the menu of the SSO. This integration is done in the nginx configuration.
+
+Some users have replaced this square with a script adding a menu at the top of each webapp.
+
+### YEP 3
+#### Securing an app
+#### YEP 3.1
+##### Do not ask or store LDAP password | draft | manual | NOTWORKING |
+#### YEP 3.2
+##### Open a port correctly | draft | manual | WORKING |
+If the application requires the opening of a port, it is necessary to check beforehand that this port is not already used by another application. If so, the install script must be able to find another available port.
+It should also be checked whether the port should be open on the router, beyond the local network. If this is not the case, the `--no-upnp` argument must be added to the` yunohost firewall allow` command in order to limit the port opening to the LAN only.
+
+#### YEP 3.3
+##### Facilitating Source Integrity Control | draft | manual | OFFICIAL |
+The upstream application should not be integrated into tarball in the source folder of the package, as this adds to the package and the git repository and does not allow verification of the integrity of the source.
+The source must be downloaded from the official website, then its integrity must be checked before installing it.
+
+#### YEP 3.4
+##### Isolate app | draft | manual | OFFICIAL |
+In order to avoid edges in case of possible compromise of the application, it must be insulated in order not to affect the other applications.
+To do this, it is necessary to isolate the application in its execution folder by restricting its environment by a chroot, either by a mechanism internal to the application where possible (for example for an ftp server), or by the use of phpfpm.
+Similarly, to restrict the scope of the user running the application, it is preferable to use a user dedicated to the application. Whose rights are restricted to the use of the application only.
+However, this should not exempt from a maximum restriction of rights on application files. As much as possible, the files must belong to root, and the dedicated user must have write rights only on files that specifically request it.
+
+#### YEP 3.5
+##### Follow the recommendations in the app's documentation | validated | manual | OFFICIAL |
+Typically, an application provides documentation to help system administrators perform the installation. It is advisable to follow the recommendations, including the permissions to be granted per file or directory.
+
+However, the package maintainer must remain vigilant, some documentation may be erroneous or insufficient.
+
+#### YEP 3.6
+##### Update versions with CVE | draft | manual | OFFICIAL |
+The [CVE](https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures), or Common Vulnerabilities and Exposures, identify security vulnerabilities common to applications. The corrections of these flaws may concern the application and it is important in this case to follow these updates as closely as possible.
+More generally, the application can propose a patch for a specific vulnerability to itself.
+Generally, this YEP involves tracking an information channel to track application security updates and reacting quickly by updating the package accordingly.
+
+As specified in YEP 1.7, if a security patch is to be deployed urgently, another YunoHost member may be required to commit to the package if necessary.
+
+### YEP 4
+#### Embedding an app
+This meta YEP deals with the integration of an app with the YunoHost environment. Good integration is generally a guarantee of quality and comfort for users.
+
+#### YEP 4.2
+##### Linking Authentication to sso | validated | manual | OFFICIAL |
+The Single Sign On makes it possible to avoid having to create the same users for each app. Thus, a YunoHost user can connect via the Single Sign On to all the apps.
+
+To do this, you must link your app to the LDAP and / or use hooks to duplicate the account credentials in the app's database.
+
+Once this is done, the maintainer can use the REMOTE_USER HTTP statement to check whether a user is logged on or not. In general, modules exist (whether at the level of the technology, the framework or even the app itself).
+
+If required, SSOwat can be used to secure access to one or more parts of the app. It may be relevant to secure access to an administration page with the SSO rather than a `.htaccess` and make the rest of the app accessible to all visitors.
+
+#### YEP 4.2.1
+##### Logout | validated | manual | OFFICIAL |
+When you click on a disconnect action within the app, it should disconnect the user from the SSO. Otherwise, there is a risk that the user will inadvertently leave an open session.
+
+#### YEP 4.3
+##### Provide YunoHost Backup Script Functional | validated | Home | OFFICIAL |
+The application must have a backup script to allow users to back up the application, its configuration, and its data.
+
+#### YEP 4.4
+##### Provide a functional YunoHost restoration script | validated | Home | OFFICIAL |
+The application must have a restore script to allow users to restore an application previously backed up with the backup script.
+
+#### YEP 4.5
+##### Using Hooks | validated | manual | OPTIONAL |
+YunoHost offers the possibility to launch actions with each processing carried out by the command line. This can be practical in many cases.
+
+Examples:
+* Add / delete a user in the app database when using `yunohost user create` or` yunohost user remove`
+* Manage the addition of a new domain name during the `yunohost domain add` action
+* Run a script after the firewall has been reloaded
+
+List of hooks:
+* post_domain_add
+* post_domain_remove
+* post_user_create
+* post_user_delete
+* post_backup_create
+* post_backup_restore
+* pre_backup_delete
+* post_backup_delete
+* post_app_addaccess
+* post_app_removeaccess
+* post_app_clearaccess
+* post_app_addaccess
+* post_iptable_rules
+
+These scripts are to be placed in a `hooks` directory as in this package: https://github.com/YunoHost-Apps/owncloud_ynh/tree/master/hooks.
+
+
+#### YEP 4.6
+##### Manage multi-instance | validated | manual | OPTIONAL |
+It is sometimes practical to be able to install the same app several times. For example, for several different domain names.
+
+However, be careful about how to handle file paths, dependencies, ports used, etc. so that there is no collision.
+
+#### YEP 4.7
+##### Add a module to the CLI | validated | manual | OPTIONAL |
+You can create a module to add commands to the yunohost command line.
+
+To do this, you need to add an actionmaps to `/usr/share/moulinette/actionsmap/`. This actionmaps must start with `ynh_`.
+
+The packages [menu_ynh](https://github.com/YunoHost-Apps/menu_ynh/) and [subscribe_ynh](https://github.com/YunoHost-Apps/subscribe_ynh/) are old (and not up to date) can be used as the basis for this type of module.
+#### YEP 4.8
+##### Add a module to the web admin | draft | manual | OPTIONAL |
diff --git a/packaging_apps_guidelines_fr.md b/packaging_apps_guidelines_fr.md
index ab4bc0e6..4874d410 100644
--- a/packaging_apps_guidelines_fr.md
+++ b/packaging_apps_guidelines_fr.md
@@ -31,7 +31,7 @@ Chaque YEP est associée à :
| YEP 1.8 | Publier des demandes de test | validé | manuel | OFFICIAL (6) |
| YEP 1.9 | Documenter l'app | validé | AUTO | OFFICIAL (6) |
| YEP 1.10 | Garder un historique de version propre | brouillon | manuel | OFFICIAL (6) |
-| YEP 1.11 | Ajouter l'app au [bugtracker YunoHost](https://dev.yunohost.org) | brouillon | manuel | OFFICIAL (NA) |
+| YEP 1.11 | Ajouter l'app au [bugtracker YunoHost](https://github.com/yunohost/issues/issues) | brouillon | manuel | OFFICIAL (NA) |
| | | | | |
| **YEP 2** | **Stabiliser une app** | **Statut** | **Test** | **Niveau** |
| YEP 2.1 | Respecter le format du manifeste | validé | auto | INPROGRESS (5) |
@@ -80,10 +80,12 @@ Chaque YEP est associée à :
| YEP 4.8 | Ajouter un module à l'admin web | brouillon | manuel | OPTIONAL |
-### YEP 1 - Communiquer avec la communauté
+### YEP 1
+#### Communiquer avec la communauté
La YEP 1 est une meta YEP, elle explique ce qu'il faut faire pour échanger avec la communauté autour d'un paquet d'application YunoHost.
-#### YEP 1.1 - Nommer son app et son dépôt | validé | manuel | NOTWORKING |
+#### YEP 1.1
+##### Nommer son app et son dépôt | validé | manuel | NOTWORKING |
Chaque application YunoHost possède un id inscrit dans le manifeste de l'application.
Cet identifiant doit être unique entre chaque paquet d'application.
Il est donc recommandé de vérifier sa disponibilité en consultant la liste des applications référencées dans les dépôts d'applications connus (official, community, internetcube).
@@ -101,18 +103,20 @@ Par convention, les dépôts d'applications YunoHost sont toujours nommés de le
Exemple : ID : exemple Nom de dépôt : exemple_ynh
-#### YEP 1.2 - Inscrire l'app sur un « répertoire » connu | validé | manuel | NOTWORKING |
+#### YEP 1.2
+##### Inscrire l'app sur un « répertoire » connu | validé | manuel | NOTWORKING |
Il est conseillé dès le début du packaging d'inscrire une app sur un des dépôts d'application YunoHost.
Ces dépôts ont plusieurs fonctions :
* communiquer l'existence d'un paquet ;
-* indiquer la dernière version associée au paquet (afin de permettre à la mise à jour de l'app par YunoHost) ;
+* indiquer la dernière version associée au paquet (afin de permettre la mise à jour de l'app par YunoHost) ;
* indiquer l'état de fonctionnement du paquet ;
* indiquer des informations sur le support d'un paquet.
Pour les listes `official.json` et `community.json`, l'inscription se fait sur [le dépôt git "apps"](https://github.com/YunoHost/apps).
-#### YEP 1.3 - Indiquer la licence associée au paquet | brouillon | AUTO | WORKING |
+#### YEP 1.3
+##### Indiquer la licence associée au paquet | brouillon | AUTO | WORKING |
La licence du paquet est à indiquer dans un fichier `LICENSE` à la racine du paquet. Attention à ne pas confondre avec la licence de l'application qui va être installée dont l'acronyme est à renseigner dans le champ `license` du manifeste.
Les listes d'applications official.json et community.json n'acceptent que les paquets dont la licence est libre, de même pour la licence de l'application contenue. Certaines applications libres nécessitent des dépendances non-libres (exemple: mp3, drivers, etc.). Dans ce cas, il faut ajouter `&dep-non-free` à l'acronyme et si possible donner des précisions dans le README.md du paquet, l'intégration sera dans ce cas acceptée au cas par cas.
@@ -136,12 +140,15 @@ Quelques liens intéressants pour aider au choix de licence:
* [La documentation sur les licences du projet GNU](https://www.gnu.org/licenses/licenses.fr.html)
* [Un guide du projet GNU pour aider au choix d'une licence](https://www.gnu.org/licenses/license-recommendations.fr.html)
-#### YEP 1.4 - Informer sur l'intention de maintenir un paquet | brouillon | manuel | OFFICIAL |
+#### YEP 1.4
+##### Informer sur l'intention de maintenir un paquet | brouillon | manuel | OFFICIAL |
Le mainteneur de l'application doit s'engager à maintenir son app sur la durée si il souhaite que celle-ci rejoigne la liste des applications officielles.
Cela implique de surveiller les mises à jour de l'application upstream, de respecter les nouvelles règles de packaging et de répondre aux demandes des utilisateurs.
-#### YEP 1.5 - Mettre à jour régulièrement le statut de l'app | brouillon | manuel | WORKING |
-#### YEP 1.6 - Se tenir informé sur l'évolution du packaging d'apps | validé | manuel | OFFICIAL |
+#### YEP 1.5
+##### Mettre à jour régulièrement le statut de l'app | brouillon | manuel | WORKING |
+#### YEP 1.6
+##### Se tenir informé sur l'évolution du packaging d'apps | validé | manuel | OFFICIAL |
Afin de suivre l'évolution du format de packaging ainsi que des bonnes pratiques, il est recommandé de:
* s'inscrire à la liste de discussion `apps@list.yunohost.org`
* suivre [la catégorie Apps packaging du forum](https://forum.yunohost.org/c/apps-packaging)
@@ -151,7 +158,8 @@ Pour suivre l'évolution de YunoHost de façon plus générale :
* suivre [la catégorie Annoucement du forum](https://forum.yunohost.org/c/announcement)
* suivre les discussions sur contrib@list.yunohost.org
-#### YEP 1.7 - Ajouter l'app à l'[organisation YunoHost-Apps](https://github.com/YunoHost-Apps) | validé | manuel | OFFICIAL |
+#### YEP 1.7
+##### Ajouter l'app à l'[organisation YunoHost-Apps](https://github.com/YunoHost-Apps) | validé | manuel | OFFICIAL |
L'ajout d'une app sur l'[organisation YunoHost-Apps](https://github.com/YunoHost-Apps) permet de faire connaitre l'apps auprès des autres contributeurs qui pourraient être tentés de packager l'application visée.
C'est aussi un moyen pour permettre de déployer rapidement un correctif de sécurité si nécessaire dans le cas où le mainteneur ne serait pas disponible.
@@ -159,7 +167,8 @@ C'est aussi un moyen pour permettre de déployer rapidement un correctif de séc
Procédure de transfert : demander sur le [salon de discussion `Apps`](chat_rooms_fr) à être invité à l’organisation en lui fournissant le nom de son compte GitHub.
Une fois l’invitation acceptée, [transférer son dépôt sur l’organisation en suivant ce tutoriel](https://help.github.com/articles/transferring-a-repository-owned-by-your-personal-account/#transferring-a-repository-to-another-user-account-or-to-an-organization).
-#### YEP 1.8 - Publier des demandes de test | validé | manuel | OFFICIAL |
+#### YEP 1.8
+##### Publier des demandes de test | validé | manuel | OFFICIAL |
Afin d'assurer le bon fonctionnement d'un paquet, il convient de publier une annonce afin d'ouvrir les tests sur le paquet. Cette annonce peut se faire sur le forum dans [la catégorie Apps du forum](https://forum.yunohost.org/c/apps).
Il est recommandé d'indiquer si certains tests n'ont pas été menés.
@@ -183,7 +192,8 @@ Il est recommandé d'indiquer si certains tests n'ont pas été menés.
* Dossier déjà utilisé par une autre application.
* Backup et restore.
-#### YEP 1.9 - Documenter l'app | validé | AUTO | OFFICIAL |
+#### YEP 1.9
+##### Documenter l'app | validé | AUTO | OFFICIAL |
Avant tout, il convient de faire une description correcte de l'app dans le champ `description` du manifest. L'insertion de mot clé dans cette description peut être une bonne idée, dans la mesure où un utilisateur pourrait être amené à faire une recherche (CTRL+F) parmi toutes les applications.
Il y a également le README.md, ce dernier doit et peut contenir :
@@ -195,24 +205,31 @@ Il y a également le README.md, ce dernier doit et peut contenir :
* la roadmap/TODO
* éventuellement les pré-requis en termes de mémoires ram, processeur etc. (certains équipements ont moins de 512Mo de ram)
-#### YEP 1.10 - Garder un historique de version propre | brouillon | manuel | OFFICIAL |
-#### YEP 1.11 - Ajouter l'app au [bugtracker YunoHost](https://dev.yunohost.org) | brouillon | manuel | OFFICIAL |
+#### YEP 1.10
+##### Garder un historique de version propre | brouillon | manuel | OFFICIAL |
+#### YEP 1.11
+##### Ajouter l'app au [bugtracker YunoHost](https://github.com/yunohost/issues/issues) | brouillon | manuel | OFFICIAL |
-### YEP 2 - Stabiliser une app
-#### YEP 2.1 - Respecter le format du manifeste | validé | auto | INPROGRESS |
+### YEP 2
+#### Stabiliser une app
+#### YEP 2.1
+##### Respecter le format du manifeste | validé | auto | INPROGRESS |
Le manifeste permet de décrire une app afin que YunoHost puisse lui appliquer les bons traitements. Pour plus d'information voir la [documentation dédiée](https://yunohost.org/#/packaging_apps_manifest).
-#### YEP 2.2 - Utiliser bash pour les scripts principaux | validé | auto | WORKING |
+#### YEP 2.2
+##### Utiliser bash pour les scripts principaux | validé | auto | WORKING |
Les scripts d'action (install, upgrade, remove, backup et restore) doivent être en bash afin que la cli/api yunohost puisse correctement les appeler.
Ceci étant, rien n'empêche à l'intérieur de ces scripts de faire appel à d'autres scripts ou bibliothèques de fonction. Ceux-ci ne sont pas obligés d'être en bash.
Cependant, il faudra porter une attention particulière à l'affichage correct des logs d'information, de warning, ou d'erreurs. Afin qu'un utilisateur de la cli/api yunohost puisse comprendre le fonctionnement du script venant d'être exécuté et au besoin réparer son instance YunoHost.
-#### YEP 2.3 - Sauvegarder les réponses lors de l'installation | validé | manuel | WORKING |
+#### YEP 2.3
+##### Sauvegarder les réponses lors de l'installation | validé | manuel | WORKING |
Lors de l'installation, il est nécessaire de sauvegarder chaque réponse aux questions du manifeste. En effet, même si au début il n'est pas nécessaire d'écrire un script de mise à jour, par la suite ce sera sans doute le cas. Or, sans les informations initiales, la mise à jour peut être plus fastidieuse.
-#### YEP 2.4 - Détecter et gérer les erreurs | brouillon | manuel | WORKING |
+#### YEP 2.4
+##### Détecter et gérer les erreurs | brouillon | manuel | WORKING |
Les scripts install, upgrade, backup et restore doivent détecter les erreurs pour éviter la poursuite des scripts en cas d'erreur bloquante ou d'usage de variable vide.
L'usage de trap et de set -eu est recommandé pour détecter et traiter les erreurs ([Discussion en cours à ce sujet](https://forum.yunohost.org/t/gestion-des-erreurs-set-e-et-ou-trap/2249/5))
Il est nécessaire également de vérifier le contenu des variables avant les suppressions du script remove. Par exemple un `rm -Rf /var/www/$app` avec `$app` vide aurait un résultat désastreux.
@@ -221,8 +238,10 @@ Au début des scripts, avant toutes modifications, il faut vérifier l'existence
N'oubliez pas qu'en cas d'erreur d'installation le script de suppression sera lancé automatiquement par la cli yunohost.
-#### YEP 2.5 - Copier correctement des fichiers | brouillon | manuel | WORKING |
-#### YEP 2.6 - Annuler l'action si les valeurs d'entrées sont incorrectes | validé | manuel | WORKING |
+#### YEP 2.5
+##### Copier correctement des fichiers | brouillon | manuel | WORKING |
+#### YEP 2.6
+##### Annuler l'action si les valeurs d'entrées sont incorrectes | validé | manuel | WORKING |
Chaque script devrait vérifier que les valeurs d'entrées sont correctes.
Voici quelques exemples :
@@ -233,53 +252,66 @@ Voici quelques exemples :
Dans le cas où l'une des valeurs est incorrecte, il est alors nécessaire d'annuler toutes modifications réalisées préalablement sur l'instance. Le mieux étant de faire tous ces contrôles avant de modifier le système.
-#### YEP 2.7 - Donner des permissions suffisantes aux instructions bash | validé | auto | WORKING |
+#### YEP 2.7
+##### Donner des permissions suffisantes aux instructions bash | validé | auto | WORKING |
Certaines instructions nécessitent les droits sudo. Il faut dans ce cas ne pas oublier de préfixer ces instructions par `sudo `.
Dans d'autres cas il est nécessaire de donner des droits à l'aide de chmod et de chown.
-#### YEP 2.8 - Modifier correctement une configuration système | brouillon | manuel | WORKING |
-Les modifications du système doivent être réversible pour que la suppression de l'application soit sans conséquences pour le système ne laisse pas de résidus.
+#### YEP 2.8
+##### Modifier correctement une configuration système | brouillon | manuel | WORKING |
+Les modifications du système doivent être réversible pour que la suppression de l'application soit sans conséquences pour le système, ne laisse pas de résidus.
Pour celà, il faut recourir autant que possible aux dossiers `.d` des configurations système. Où lorsqu'il n'est pas possible de faire autrement, d'indiquer clairement la configuration modifiée par une application et s'assurer que les modifications seront retirées lors de sa suppression.
-#### YEP 2.9 - Enlever toutes traces de l'app lors de la suppression | brouillon | manuel | WORKING |
+#### YEP 2.9
+##### Enlever toutes traces de l'app lors de la suppression | brouillon | manuel | WORKING |
À l’exception de dépendances (pax exemple : paquets Debian) utilisés par d’autres services ou applications.
-#### YEP 2.10 - Configurer les logs de l'application | brouillon | manuel | WORKING |
+#### YEP 2.10
+##### Configurer les logs de l'application | brouillon | manuel | WORKING |
Si possible, l'application doit utiliser un fichier de log, qui sera de préférence dans /var/log.
Si le log est mis en place par le script install et non par l'application elle-même, un fichier de configuration pour log-rotate devra être ajouté pour gérer les rotations des logs de l'application.
-#### YEP 2.11 - Utiliser une variable plutôt que l'app id directement | validé | manuel | OFFICIAL |
+#### YEP 2.11
+##### Utiliser une variable plutôt que l'app id directement | validé | manuel | OFFICIAL |
Il est conseillé de rendre les scripts le plus générique possible, un bon moyen d'y parvenir est d'utiliser une variable pour le nom de l'app afin d'éviter qu'il se retrouve partout dans les scripts. Ainsi, un autre packageur pourra plus facilement se servir du script pour une autre app.
-#### YEP 2.12 - Utiliser les commandes pratiques (helpers) | validé | auto | OFFICIAL |
+#### YEP 2.12
+##### Utiliser les commandes pratiques (helpers) | validé | auto | OFFICIAL |
Afin de simplifier le packaging, d'uniformiser les pratiques, d'éviter les erreurs et d'augmenter la durée de vie d'un script vis-à-vis des futures versions de YunoHost. Un ensemble de helpers permettant de faire de nombreuses actions est proposé.
Pour plus d'informations :
* consulter [la documentation des helpers](https://yunohost.org/#/packaging_apps_helpers_fr)
* explorer [le répertoire des helpers](https://github.com/YunoHost/yunohost/tree/unstable/data/helpers.d)
-#### YEP 2.13 - Traduire le paquet en anglais | brouillon | manuel | OFFICIAL |
-#### YEP 2.14 - Remplir correctement un fichier de conf | brouillon | manuel | OFFICIAL |
+#### YEP 2.13
+##### Traduire le paquet en anglais | brouillon | manuel | OFFICIAL |
+#### YEP 2.14
+##### Remplir correctement un fichier de conf | brouillon | manuel | OFFICIAL |
*Juste pour éclaircir un peu cette YEP, mais ça reste à l'état de brouillon.*
Le but est de trouver une méthode plus fiable que sed pour modifier les fichiers de configuration. sed pouvant éventuellement avoir des effets de bord en modifiant des parties non désirées du fichier de configuration, en particulier avec l'usage de regex.
-#### YEP 2.15 - Suivre les instructions d'installation de l'application | validé | manuel | OFFICIAL |
+#### YEP 2.15
+##### Suivre les instructions d'installation de l'application | validé | manuel | OFFICIAL |
-#### YEP 2.16 - Vérifier la disponibilité des dépendances sur ARM, x86 et x64 | validé | manuel | OFFICIAL |
+#### YEP 2.16
+##### Vérifier la disponibilité des dépendances sur ARM, x86 et x64 | validé | manuel | OFFICIAL |
YunoHost s'installe sur ARM, sur x86 et x64. Un paquet devrait donc être testé sur ces trois architectures processeur.
Certains paquets ne sont pas disponibles sur ARM, il convient dans ce cas d'étudier d'autres solutions ou d'indiquer dans le README.md que l'application ne fonctionne pas sur ARM et de bloquer l’installation par détection du type d’architecture.
-#### YEP 2.17 - Prendre en compte la version d'origine lors des mises à jour | validé | manuel | OFFICIAL |
+#### YEP 2.17
+##### Prendre en compte la version d'origine lors des mises à jour | validé | manuel | OFFICIAL |
Le script de mise à jour doit pouvoir fonctionner même si les mises à jour précédentes n'ont pas été effectuées.
Ainsi, il doit être possible de faire des sauts de mise à jour d'une version N-x vers une version N. Pour ce faire il est conseillé d'enregistrer les numéros de version dans les settings de l'app.
-### YEP 2.18 - Stabiliser une webapp
+### YEP 2.18
+##### Stabiliser une webapp
La majeure partie des applications YunoHost sont des web apps, mais certaines n'en sont pas. Les YEP 2.18.x développent certaines spécificités liées aux web app.
-#### YEP 2.18.1 - Lancer le script d'installation d'une webapp correctement | validé | manuel | WORKING |
+#### YEP 2.18.1
+##### Lancer le script d'installation d'une webapp correctement | validé | manuel | WORKING |
Bien souvent une web app s'installe à partir de formulaires affichés sur une page web. Cette façon de faire, bien que pratique pour un humain, l'est moins pour un programme.
Il convient donc de vérifier si l'application ne propose pas une solution d'installation en ligne de commande.
@@ -289,49 +321,61 @@ Si ce n'est pas le cas, il convient d'utiliser l'option -H de curl. En effet, da
curl -kL -H "Host: $domain" --data "¶m1=Text1¶m2=text2" https://localhost$path/install.php > /dev/null 2>&1
```
-#### YEP 2.18.2 - Gérer l'installation à la racine d’un nom de domaine | validé | auto | WORKING |
+#### YEP 2.18.2
+##### Gérer l'installation à la racine d’un nom de domaine | validé | auto | WORKING |
Une web app devrait pouvoir s'installer à la racine d’un nom de domaine.
-#### YEP 2.18.3 - Gérer l'installation sur un sous-domaine | validé | auto | WORKING |
+#### YEP 2.18.3
+##### Gérer l'installation sur un sous-domaine | validé | auto | WORKING |
Une web app devraient pouvoir s'installer sur un sous-domaine directement sans sous dossiers.
-#### YEP 2.18.4 - Gérer l'installation sur un chemin `/path` | validé | auto | OFFICIAL |
+#### YEP 2.18.4
+##### Gérer l'installation sur un chemin `/path` | validé | auto | OFFICIAL |
Une web app devraient pouvoir s'installer sur un chemin `/path`.
-#### YEP 2.18.5 - Gérer la tuile YunoHost pour naviguer facilement entre les applications | validé | manuel | OFFICIAL |
+#### YEP 2.18.5
+##### Gérer la tuile YunoHost pour naviguer facilement entre les applications | validé | manuel | OFFICIAL |
Sauf dans de rare cas il est conseillé d'intégrer la tuile YunoHost qui permet de retourner sur le menu du SSO. Cette intégration se fait dans la configuration nginx.
Certains utilisateurs ont remplacé ce carré par un script ajoutant un menu en haut de chaque webapp.
-### YEP 3 - Sécuriser une app
-#### YEP 3.1 - Ne pas demander ou stocker de mot de passe LDAP | brouillon | manuel | NOTWORKING |
-#### YEP 3.2 - Ouvrir un port correctement | brouillon | manuel | WORKING |
+### YEP 3
+#### Sécuriser une app
+#### YEP 3.1
+##### Ne pas demander ou stocker de mot de passe LDAP | brouillon | manuel | NOTWORKING |
+#### YEP 3.2
+##### Ouvrir un port correctement | brouillon | manuel | WORKING |
Si l'application nécessite l'ouverture d'un port, il est nécessaire de vérifier préalablement que ce port n'est pas déjà utilisé par une autre application. Le cas échéant, le script install doit être capable de trouver un autre port disponible.
Il convient également de vérifier si le port doit être ouvert sur le routeur, au delà du réseau local. Si ce n'est pas le cas, l'argument `--no-upnp` doit être ajouté à la commande `yunohost firewall allow` afin de limiter l'ouverture du port au réseau local uniquement.
-#### YEP 3.3 - Faciliter le contrôle de l'intégrité des sources | brouillon | manuel | OFFICIAL |
+#### YEP 3.3
+##### Faciliter le contrôle de l'intégrité des sources | brouillon | manuel | OFFICIAL |
L'application upstream ne doit pas être intégrée en tarball dans le dossier source du package, car cela alourdit le package et le dépôt git et ne permet pas la vérification de l'intégrité de la source.
La source doit donc être téléchargée depuis le site officiel, puis son intégritée doit être vérifiée avant de l'installer.
-#### YEP 3.4 - Isoler l'app | brouillon | manuel | OFFICIAL |
-Afin d'éviter des effets de bords en cas de compromission éventuelle de l'application, celle-ci doit être isolée pour de ne pas risquer d'impacter les autres applications.
+#### YEP 3.4
+##### Isoler l'app | brouillon | manuel | OFFICIAL |
+Afin d'éviter des effets de bords en cas de compromission éventuelle de l'application, celle-ci doit être isolée pour ne pas risquer d'impacter les autres applications.
Pour cela, il convient d'isoler l'application dans son dossier d'exécution en restreignant son environnement par un chroot, soit par un mécanisme interne à l'application lorsque c'est possible (par exemple pour un serveur ftp), soit par l'usage de phpfpm.
De même, pour restreindre la portée de l'utilisateur exécutant l'application, il est préférable d'utiliser un utilisateur dédiée à l'application. Dont les droits sont restreint à l'usage de l'application uniquement.
Toutefois, cela ne doit pas exempter d'une restriction maximale des droits sur les fichiers de l'application. Autant que possible, les fichiers doivent appartenir à root, et l'utilisateur dédié ne doit avoir de droits d'écriture que sur les fichiers le réclamant expressément.
-#### YEP 3.5 - Suivre les recommandations de la documentation de l'app | validé | manuel | OFFICIAL |
+#### YEP 3.5
+##### Suivre les recommandations de la documentation de l'app | validé | manuel | OFFICIAL |
En général, une application propose une documentation afin d'aider les administrateurs systèmes à réaliser l'installation. Il est conseiller d'en suivre les recommandations, notamment celles concernant les permissions à accorder par fichier ou répertoire.
Le mainteneur de paquet doit toutefois rester vigilant, certaines documentations pouvant être erronées ou insuffisante.
-#### YEP 3.6 - Mettre à jour les versions contenant des CVE | draft | manuel | OFFICIAL |
+#### YEP 3.6
+##### Mettre à jour les versions contenant des CVE | draft | manuel | OFFICIAL |
Les [CVE](https://fr.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures), ou Common Vulnerabilities and Exposures, recensent les failles de sécurités communes aux applications. Les corrections de ces failles peuvent concerner l'application et il est important dans ce cas de suivre au plus près ces mises à jour.
Plus généralement, l'application peut proposer un correctif pour une faille spécifique à elle-même.
De manière générale, cette YEP implique de suivre un canal d'information pour suivre les mises à jour de sécurité de l'application et réagir rapidement en mettant à jour le package en conséquence.
Comme précisé dans la YEP 1.7, si un correctif de sécurité doit être déployé en urgence, un autre membre de YunoHost peut être amené à faire un commit sur le package si nécessaire.
-#### YEP 3.7 - Modifier correctement les dépots sources | draft | manuel | OFFICIAL |
+#### YEP 3.7
+##### Modifier correctement les dépots sources | draft | manuel | OFFICIAL |
La modification ou l'ajout des dépôts sources dans /etc/apt/sources.list ou /etc/apt/sources.list.d/ ne doit se faire que si c'est absolument nécessaire. Dans un tel cas, merci d'utiliser le pinning, afin de s'assurer que le dépôt n'aura pas une priorité supérieur aux dépôts de debian et YunoHost.
Dans certains cas, il pourra être préférable de télécharger directement le .deb à partir du dépôt source (avec wget par exemple), ceci est à évaluer en fonction des dépendances, de la nature et du rythme des mises à jour.
@@ -342,10 +386,13 @@ Lorsque l'on désigne la distribution on doit toujours faire référence à son
Dans tous les cas, une app ne devrait pas modifier les dépôts sources pour les placer sur testing ou une version non supportée par YunoHost (à l'heure où cette yep est rédigé, YunoHost ne supporte pas la nouvelle stable: debian stretch).
-### YEP 4 - Intégrer une app
+### YEP 4
+#### Intégrer une app
+
Cette meta YEP traite de l'intégration d'une app avec l'environnement YunoHost. Une bonne intégration est en général un gage de qualité et de confort pour les utilisateurs.
-#### YEP 4.2 - Lier l'authentification au sso | validé | manuel | OFFICIAL |
+#### YEP 4.2
+##### Lier l'authentification au sso | validé | manuel | OFFICIAL |
Le Single Sign On permet d'éviter d'avoir à créer les mêmes utilisateurs pour chaque app. Ainsi, un utilisateur YunoHost pourra se connecter via le Single Sign On à l'ensemble des apps.
Pour se faire, il convient de lier son app au LDAP et/ou d'utiliser des hooks pour dupliquer les identifiants du compte dans la base de données de l'app.
@@ -354,16 +401,20 @@ Une fois cette opération appliquée, le mainteneur peut utiliser l'instruction
Au besoin, SSOwat permet de sécuriser l'accès à une ou plusieurs parties de l'app. Il peut ainsi être pertinent de sécuriser l'accès à une page d'administration avec le SSO plutôt qu'un `.htaccess` et de rendre le reste de l'app accessible à tous les visiteurs.
-#### YEP 4.2.1 - Déconnexion | validé | manuel | OFFICIAL |
+#### YEP 4.2.1
+##### Déconnexion | validé | manuel | OFFICIAL |
Lorsque l'on clique sur une action de déconnexion au sein de l'app, celle-ci devrait déconnecter l'utilisateur du SSO. Sinon, il y a un risque que l'utilisateur laisse par mégarde une session ouverte.
-#### YEP 4.3 - Fournir un script de sauvegarde YunoHost fonctionnel | validé | auto | OFFICIAL |
+#### YEP 4.3
+##### Fournir un script de sauvegarde YunoHost fonctionnel | validé | auto | OFFICIAL |
L'application doit disposer d'un script backup pour permettre aux utilisateurs de sauvegarder l'application, sa configuration et ses données.
-#### YEP 4.4 - Fournir un script de restauration YunoHost fonctionnel | validé | auto | OFFICIAL |
+#### YEP 4.4
+##### Fournir un script de restauration YunoHost fonctionnel | validé | auto | OFFICIAL |
L'application doit disposer d'un script restore pour permettre aux utilisateurs de restaurer une application sauvegardée préalablement avec le script backup.
-#### YEP 4.5 - Utiliser les hooks | validé | manuel | OPTIONAL |
+#### YEP 4.5
+##### Utiliser les hooks | validé | manuel | OPTIONAL |
YunoHost offre la possibilité de lancer des actions à chaque traitement effectué par la ligne de commande. Ceci peut être pratique dans de nombreux cas.
Exemples :
@@ -389,15 +440,18 @@ Liste des hooks :
Ces scripts sont à placer dans un répertoire `hooks` comme dans ce paquet : https://github.com/YunoHost-Apps/owncloud_ynh/tree/master/hooks .
-#### YEP 4.6 - Gèrer le multi-instance | validé | manuel | OPTIONAL |
+#### YEP 4.6
+##### Gèrer le multi-instance | validé | manuel | OPTIONAL |
Il est parfois pratique de pouvoir installer plusieurs fois une même app. Par exemple, pour plusieurs noms de domaine différents.
Il faut toutefois faire attention à la façon de gérer les chemins de fichier, les dépendances, les ports utilisés etc. de sorte qu'il n'y ait pas de collision.
-#### YEP 4.7 - Ajouter un module à la CLI | validé | manuel | OPTIONAL |
+#### YEP 4.7
+##### Ajouter un module à la CLI | validé | manuel | OPTIONAL |
Il est possible de créer un module afin d'ajouter des commandes à la ligne de commandes yunohost.
Pour ce faire, il faut ajouter un actionmaps dans `/usr/share/moulinette/actionsmap/`. Cet actionmaps doit commencer par `ynh_`.
Les paquets [menu_ynh](https://github.com/YunoHost-Apps/menu_ynh/) et [subscribe_ynh](https://github.com/YunoHost-Apps/subscribe_ynh/) bien qu’anciens (et non à jour) peuvent servir de base pour mettre en place ce genre de module.
-#### YEP 4.8 - Ajouter un module à l'admin web | brouillon | manuel | OPTIONAL |
+#### YEP 4.8
+##### Ajouter un module à l'admin web | brouillon | manuel | OPTIONAL |
diff --git a/packaging_apps_helpers.md b/packaging_apps_helpers.md
index f5cc0d21..3edf714c 100644
--- a/packaging_apps_helpers.md
+++ b/packaging_apps_helpers.md
@@ -247,16 +247,23 @@ sudo yunohost app checkurl DOMAINPATH -a APP
```bash
-sudo yunohost app addaccess [--users=USER] APP
+sudo yunohost app addaccess APP [--users=USER]
```
> Allow the `USER` user to access `APP`.
+> it's possible to add several users on several apps at once, for exemple:
+```bash
+sudo yunohost app addaccess app1 app2 -u user1 user2
+```
```bash
-sudo yunohost app removeaccess --users=USER APP
+sudo yunohost app removeaccess APP --users=USER
```
> Remove the access authorization to `APP` from `USER` user.
+> like for addaccess, it's possible to remove several users on several apps at once, for exemple:
+```bash
+sudo yunohost app removeaccess app1 app2 -u user1 user2
```bash
sudo yunohost service remove NAME
diff --git a/packaging_apps_helpers_fr.md b/packaging_apps_helpers_fr.md
index af0c6e05..06857b13 100644
--- a/packaging_apps_helpers_fr.md
+++ b/packaging_apps_helpers_fr.md
@@ -20,6 +20,32 @@ Le script helpers va exécuter tout les scripts présent dans helpers.d et donc
### Liste non exhaustive des helpers disponibles
#### Base de données
+```bash
+ynh_mysql_setup_db USER NAME [PWD]
+```
+> 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.
+Et renvoi ce nom corrigé.
+> ```bash
+> dbname=$(ynh_sanitize_dbid $app)
+> ```
+> **Nécessite YunoHost version 2.6.4**
+
+
```bash
ynh_mysql_execute_as_root SQL DB
```
@@ -81,29 +107,21 @@ ynh_package_update
> Met à jour la liste des paquets disponibles de manière silencieuse et non interactive.
> C'est un `apt-get update` avec les options -y -qq et noninteractive.
-
-
-**Attention, les commandes suivantes sont à éviter autant que possible. Il n'est pas sain d'installer et encore moins de supprimer un paquet sans en gérer les conflits et dépendances. Ceci sera bientôt facilité dans les prochaines versions de YunoHost...**
```bash
-ynh_package_install PACKAGE1 PACKAGE2
+ynh_install_app_dependencies DEPENDANCE1 DEPENDANCE2 ...
```
-> Installe les paquets `PACKAGE1`, `PACKAGE2`, etc de manière non interactive et silencieuse.
-> C'est un `apt-get install` avec les options -y -qq et noninteractive.
+> 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.
+**Nécessite YunoHost version 2.6.4**
```bash
-ynh_package_remove PACKAGE1 PACKAGE2
+ynh_remove_app_dependencies
```
-> Supprime les paquets `PACKAGE1`, `PACKAGE2`, etc de manière non interactive et silencieuse.
-> C'est un `apt-get remove` avec les options -y -qq et noninteractive.
-
-
-```bash
-ynh_package_autoremove PACKAGE1 PACKAGE2
-```
-> Supprime les paquets `PACKAGE1`, `PACKAGE2`, etc ainsi que tous les paquets qui ne semblent plus utilisé, de manière non interactive et silencieuse.
-> C'est un `apt-get autoremove` avec les options -y -qq et noninteractive.
+> Supprime les dépendances de l'application, précédemment installées avec ynh_install_app_dependencies.
+Les paquets ne seront supprimés que si aucune application ou paquet ne les utilisent encore, selon apt.
+**Nécessite YunoHost version 2.6.4**
#### Configuration des applications
@@ -160,7 +178,7 @@ Les patterns utilisant des regex, contrairement aux précédents, sont recherch
```bash
ynh_app_setting_get APP KEY
```
-> Récupère le paramètre `KEY` stocké précémment pour l'application `APP`.
+> Récupère le paramètre `KEY` stocké précédemment pour l'application `APP`.
> Par exemple :
> ```bash
> is_public=$(ynh_app_setting_get nom_app is_public)
@@ -242,6 +260,160 @@ ynh_find_port BEGIN_PORT
> **Nécessite YunoHost version 2.6**
+#### Configuration système
+```bash
+ynh_use_logrotate [LOGFILE] [--non-append]
+```
+> 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:
+> ```bash
+> ynh_backup_before_upgrade
+> ynh_clean_setup () {
+> ynh_restore_upgradebackup
+> }
+> ynh_abort_if_errors
+> ```
+
+
+#### Vérification du path
+```bash
+ynh_normalize_url_path PATH
+```
+> Corrige le path et renvoi le résultat.
+> ```bash
+> url_path=$(ynh_normalize_url_path $url_path)
+> ```
+> Le path est corrigé de la manière suivante
+> example -> /example
+> /example -> /example
+> /example/ -> /example
+> / -> /
+> **Nécessite YunoHost version 2.6.4**
+
+
+```bash
+ynh_webpath_available DOMAIN PATH
+```
+> Vérifie la disponibilité du path demandé.
+> **Nécessite YunoHost version 2.6.4**
+
+
+```bash
+ynh_webpath_register APP DOMAIN PATH
+```
+> Réserve le path demandé pour cette application.
+> **Nécessite YunoHost version 2.6.4**
+
+
#### Autres commandes
```bash
ynh_string_random LENGTH
@@ -254,6 +426,53 @@ ynh_die MSG RETCODE
```
> Affiche le message `MSG` (sur stderr) et termine le script avec le code `RETCODE` (par défaut 1).
+
+```bash
+ynh_store_file_checksum FILE
+```
+> Calcule la somme de contrôle du fichier FILE et la stocke dans la configuration de l'app.
+> **Nécessite YunoHost version 2.6.4**
+
+
+```bash
+ynh_backup_if_checksum_is_different FILE
+```
+> Compare la somme de contrôle du fichier FILE avec la somme de contrôle précédemment stockée par ynh_store_file_checksum.
+> Si la somme de contrôle est différente, un backup du fichier est fait.
+> **Nécessite YunoHost version 2.6.4**
+
+
+```bash
+ynh_secure_remove FILE
+```
+> Supprime le fichier ou dossier FILE en vérifiant que ce n'est pas un dossier système sensible.
+> **Nécessite YunoHost version 2.6.4**
+
+
+```bash
+ynh_replace_string MATCH_STRING REPLACE_STRING TARGET_FILE
+```
+> 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.
+> **Nécessite YunoHost version 2.6.4**
+
**Les commandes suivantes sont amenées à être remplacées (voir supprimées) dans les prochaines versions de YunoHost.**
@@ -280,17 +499,25 @@ sudo yunohost app checkurl DOMAINPATH -a APP
```bash
-sudo yunohost app addaccess [--users=USER] APP
+sudo yunohost app addaccess APP [--users=USER]
```
> Autorise l'utilisateur `USER` à accéder à l'application `APP`.
> Si l'option `--users` n'est pas spécifiée, l'accès à l'application `APP` est accordé à tout les utilisateurs.
+> il est aussi possible de rajouter plusieurs utilisateurs à plusieurs apps d'un coup, par exemple :
+```bash
+sudo yunohost app addaccess app1 app2 -u user1 user2
+```
```bash
-sudo yunohost app removeaccess --users=USER APP
+sudo yunohost app removeaccess APP --users=USER
```
> Retire l'autorisation d'accès de l'utilisateur `USER` à l'application `APP`.
+> de la même manière que pour addaccess, il est aussi possible de retirer plusieurs utilisateurs à plusieurs apps d'un coup, par exemple :
+```bash
+sudo yunohost app removeaccess app1 app2 -u user1 user2
+```
```bash
sudo yunohost service add NAME [-l LOG]
diff --git a/packaging_apps_hooks_fr.md b/packaging_apps_hooks_fr.md
new file mode 100644
index 00000000..accb4178
--- /dev/null
+++ b/packaging_apps_hooks_fr.md
@@ -0,0 +1,185 @@
+# Usage des hooks YunoHost
+
+Les hooks permettent de déclencher un script lorsqu'une action est effectuée par le système.
+Le cas le plus évident, est l'ajout d'un utilisateur. Si l'app dispose d'un hook `post_user_create`, ce hook sera déclenché dés qu'un utilisateur sera ajouté.
+Cela permet donc à une application d'exécuter des actions en fonction des évènements intervenant sur le système.
+
+### Liste des hooks disponibles
+
+- `post_domain_add`
+Après l'ajout d'un domaine.
+- `post_domain_remove`
+Après la suppression d'un domaine.
+- `post_user_create`
+Après l'ajout d'un utilisateur.
+- `post_user_delete`
+Après la suppression d'un utilisateur.
+- `post_iptable_rules`
+Après le rechargement du parefeu.
+- `pre_backup_delete`
+Avant la suppression d'un backup.
+- `post_backup_delete`
+Après la suppression d'un backup.
+- `post_app_addaccess`
+Après l'ajout d'un utilisateur autorisé sur une application.
+- `post_app_removeaccess`
+Après la suppression de l'autorisation d'un utilisateur sur une application.
+- `post_app_clearaccess`
+Après l'effacement de toute les règles d'accès sur une application.
+- `post_app_install`
+Après l'installation d'une application
+- `post_app_upgrade`
+Après l'upgrade d'une applications
+- `post_app_remove`
+Après la supression d'une applications
+- `post_app_change_url`
+Après avoir modifié le chemin et ou le nom de domaine d'une application
+- `conf_regen`
+Avant et après la régénération de la configuration d'un service.
+Services pris en charge par regen-conf:
+ - avahi-daemon
+ - dnsmasq
+ - dovecot
+ - fail2ban
+ - glances
+ - metronome
+ - mysql
+ - nginx
+ - nslcd
+ - nsswitch
+ - postfix
+ - rspamd
+ - slapd
+ - ssh
+ - ssl
+
+### Mise en place des hooks
+
+A l'exception du hook conf_regen, tout les hooks s'utilisent de la même manière.
+Tout d'abord, il faut comprendre qu'un hook est un simple script bash qui sera exécuté par YunoHost lorsque l'évènement indiqué se présentera.
+Pour ajouter un hook à YunoHost, il faut utiliser un dossier "hooks" à la racine du package de l'application. Puis dans celui-ci mettre votre script sous le nom du hooks correspondant.
+
+> Par exemple:
+Pour un hook `post_user_create`, le script qui devra être exécuté pour ce hook doit simplement être placé dans "hooks/post_user_create" dans le package.
+
+Lors de l'installation et de l'upgrade, les scripts dans le dossier hooks seront dupliqués dans le dossier "/etc/yunohost/hooks.d/" dans le dossier correspondant au hook, puis sous le nom "50-$app".
+Lors de la suppression de l'application, tout les hooks lui appartenant seront supprimés.
+
+### Construire un script de hook
+
+En tant que script bash, un script de hook doit commencer par le shebang bash
+
+```bash
+#!/bin/bash
+```
+
+Ensuite il convient de prendre les arguments donnés par YunoHost lors de l'appel du script.
+Chaque hook propose des arguments différents.
+
+##### `post_domain_add` et `post_domain_remove`
+
+```bash
+domain=$1
+```
+
+##### `post_user_create`
+
+```bash
+username=$1
+mail=$2
+password=$3 # Clear password
+firstname=$4
+lastname=$5
+```
+##### `post_user_delete`
+
+```bash
+username=$1
+purge=$2 # True/False Indique si le dossier utilisateur a été supprimé ou pas.
+```
+
+##### `post_iptable_rules`
+
+```bash
+upnp=$1 # True/False Indique si l'upnp est activé ou non.
+ipv6=$2 # True/False Indique si l'IPV6 est activé ou non.
+```
+
+##### `pre_backup_delete` et `post_backup_delete`
+
+```bash
+backup_name=$1
+```
+
+##### `post_app_install`, `post_app_upgrade`, `post_app_remove` et `post_app_change_url`
+
+Les variables utilisables dans ces scripts sont les mêmes que celles disponibles dans [les scripts d'actions associés](/packaging_apps_scripts_fr).
+
+
+Example: pour `post_app_install` les variables sont les mêmes que pour le script `install`
+
+##### `post_app_addaccess` et `post_app_removeaccess`
+
+```bash
+app_id=$1
+users=$2 # Tous les utilisateurs autorisés sur l'app. Séparés par des virgules.
+```
+
+##### `post_app_clearaccess`
+
+```bash
+app_id=$1
+```
+
+La suite du script dépend de ce que vous voulez effectuer dans celui-ci.
+
+### Cas particulier de `conf_regen`
+Le hook conf_regen est un hook plus délicat, que ce soit pour sa mise en place ou pour son contenu.
+
+##### Mise en place d'un hook `conf_regen`
+
+Un hook conf_regen ne doit pas être placé dans le dossier hooks de l'application. Il doit être mis en place manuellement.
+Le hook doit être copié en indiquant à quel service il est lié.
+```bash
+cp hook_regen_conf /usr/share/yunohost/hooks/conf_regen/50-SERVICE_$app
+```
+
+> Lors de la suppression de l'application, ce hook devra être supprimé manuellement.
+
+##### Construire un script de hook conf_regen
+
+Un hook conf_regen est appelé 2 fois, une première fois après analyse de la configuration et avant une éventuelle modification des fichiers, puis une seconde fois après application des modifications, si il y a eu des modifications.
+
+Un script de hook conf_regen devrait donc ressembler à ça:
+
+```bash
+#!/bin/bash
+
+force=${2:-0} # 0/1 --force argument
+dryrun=${3:-0} # 0/1 --dry-run argument
+pending_conf=$4 # Path of the pending conf file
+
+do_pre_regen() {
+ # Put your code here for pre regen conf.
+}
+
+do_post_regen() {
+ # Put your code here for post regen conf.
+ # Be careful, this part will be executed only if the configuration has been modified.
+}
+
+case "$1" in
+ pre)
+ do_pre_regen
+ ;;
+ post)
+ do_post_regen
+ ;;
+ *)
+ echo "Hook called with unknown argument \`$1'" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
+```
diff --git a/packaging_apps_levels_fr.md b/packaging_apps_levels_fr.md
index dfd3351c..42643c6b 100644
--- a/packaging_apps_levels_fr.md
+++ b/packaging_apps_levels_fr.md
@@ -1,21 +1,56 @@
# Niveaux de qualité des packages d'applications YunoHost
-Afin de faciliter le packaging d'applications par des étapes successives à atteindre, chaque package est affublée d'un niveau de qualité, de 0 à 10.
+Afin de faciliter le packaging d'applications par des étapes successives à atteindre, chaque package est affublé d'un niveau de qualité, de 0 à 10.
Un package doit satisfaire un certain nombre de critères pour atteindre chaque niveau. De plus pour atteindre un niveau, le package doit avoir préalablement atteint le niveau précédent.
Ce classement des applications par niveaux présente 3 avantages:
- Le packaging d'application est d'autant plus ludique, avec des objectifs clairs à atteindre et des étapes successives.
-- Une application correctement packagée est d'avantage mise en avant qu'une application ne respectant pas les règles de packaging.
+- Une application correctement packagée est davantage mise en avant qu'une application ne respectant pas les règles de packaging.
- Les utilisateurs peuvent rapidement voir le niveau d'une application et ainsi savoir si le package est de bonne qualité.
-## Les niveaux de qualité des packages d'applications en détails:
+## Résumé des niveaux
+
+**Niveau 0**
+L'application ne fonctionne pas.
+
+**Niveau 1**
+L'application s'installe et se désinstalle correctement dans certains cas.
+
+**Niveau 2**
+L'application s'installe et se désinstalle correctement dans toutes les configurations communes.
+
+**Niveau 3**
+L'application peut être mise à jour.
+
+**Niveau 4**
+L'application utilise directement les utilisateurs YunoHost et permet l'identification unique à partir du portail YunoHost.
+
+**Niveau 5**
+Le code du package d'application respecte certaines règles de syntaxe.
+
+**Niveau 6**
+L'application peut-être sauvegardée et restaurée.
+
+**Niveau 7**
+Le package d'application passe avec succès l'ensemble des tests d'intégrité.
+
+**Niveau 8**
+L'application respecte un ensemble de recommandations avancées améliorant sa qualité générale.
+
+**Niveau 9**
+L'application respecte toutes les recommandations. C'est un package d'excellente qualité.
+
+**Niveau 10**
+Le package d'application est jugé parfait !
+
+## Les niveaux de qualité en détails:
### Niveau 0
**L'application ne s'installe pas ou ne fonctionne pas après installation.**
C'est le niveau le plus bas, une application de niveau 0 est considérée comme non fonctionnelle.
YEP à respecter pour atteindre le niveau 0:
-- [YEP 1.1](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-11---nommer-son-app-et-son-d%C3%A9pot---valid%C3%A9--manuel--notworking-) : Nommer son app et son dépot
+- [YEP 1.1](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-11---nommer-son-app-et-son-d%C3%A9pot---valid%C3%A9--manuel--notworking-) : Nommer son app et son dépôt
- [YEP 1.2](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-12---inscrire-lapp-sur-un-r%C3%A9pertoire-connu---valid%C3%A9--manuel--notworking-) : Inscrire l'app sur un "répertoire" connu
### Niveau 1
@@ -36,9 +71,9 @@ YEP à respecter pour atteindre le niveau 1:
- Installation privée (sécurisée par le SSO).
- Installation publique.
- Installation multi-instance.
-- Désinstallation dans les mêmes circonstances
+- Désinstallation dans les mêmes circonstances.
-*Si une application ne permet pas certaines configurations d'installations, celles-ci doivent être indiqués clairement dans le readme du package. Toutefois, le niveau 2 ne peut pas être atteint si une configuration d'installation est volontairement écartée sans raison valable.*
+*Si une application ne permet pas certaines configurations d'installation, celles-ci doivent être indiquées clairement dans le readme du package. Toutefois, le niveau 2 ne peut pas être atteint si une configuration d'installation est volontairement écartée sans raison valable.*
*Cela n'empêche pas de restreindre volontairement les installations publiques, privées ou multi-instance si l'application le justifie.*
YEP à respecter pour atteindre le niveau 2:
@@ -59,7 +94,7 @@ YEP à respecter pour atteindre le niveau 3:
**L'application prend en charge ldap et HTTP AUTH**
L'application gère ses utilisateurs directement à partir de la [base ldap de YunoHost](https://github.com/YunoHost/SSOwat/blob/366dd6c4438e6550f7438c36893690b628340185/config.lua#L50-L53) et permet la connexion unifiée en utilisant l'[authentification HTTP](https://fr.wikipedia.org/wiki/Authentification_HTTP) depuis le SSO.
-*Si l'application n'est pas capable de prendre en charge un annuaire ldap ou l'authentification HTTP, ce niveau peux être ignoré.*
+*Si l'application n'est pas capable de prendre en charge un annuaire ldap ou l'authentification HTTP, ce niveau peut être ignoré.*
*Il faut toutefois être en mesure de justifier de cette impossibilité*
YEP à respecter pour atteindre le niveau 4:
@@ -77,7 +112,7 @@ YEP à respecter pour atteindre le niveau 5:
- [YEP 2.18.1](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-2181---lancer-le-script-dinstallation-dune-webapp-correctement----valid%C3%A9--manuel--working-) : Lancer le script d'installation d'une webapp correctement
### Niveau 6
-**L'application peut-être sauvegardée et restaurée sans erreurs sur la même machine ou une autre.**
+**L'application peut-être sauvegardée et restaurée sans erreur sur la même machine ou une autre.**
YEP à respecter pour atteindre le niveau 6:
- [YEP 1.4](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-14---informer-sur-lintention-de-maintenir-un-paquet----brouillon--manuel--working-) : Informer sur l'intention de maintenir un paquet
@@ -117,7 +152,7 @@ YEP à respecter pour atteindre le niveau 8:
*Si une application n'est pas disponible sur une architecture, et qu'il est impossible de contourner cette limitation raisonnablement, cette limitation doit être indiquée dans le readme et prise en compte dans le script d'installation. L'installation de l'application sur une architecture non supportée doit être stoppée avant de modifier les fichiers.*
### Niveau 9
-**L'application respecte toutes les [YEP optionnelles.**
+**L'application respecte toutes les YEP optionnelles.**
YEP à respecter pour atteindre le niveau 9:
- [YEP 2.10](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-210---configurer-les-logs-de-lapplication----brouillon--manuel--working-) : Configurer les logs de l'application
@@ -143,39 +178,4 @@ Si tout ces prérequis sont satisfaits, vous pouvez créer une pull request sur
Dés lors, le package sera vérifié par les membres du groupe Apps et la décision de l'inclure dans la liste des applications officielles sera débattue par le groupe.
Si tout va bien l'application rejoindra les applications officielles de YunoHost.
----
-## Description simple des niveaux de qualité des packages d'applications:
-
-**Niveau 0**
-L'application ne fonctionne pas.
-
-**Niveau 1**
-L'application s'installe et se désinstalle correctement dans certains cas.
-
-**Niveau 2**
-L'application s'installe et se désinstalle correctement dans toutes les configurations communes.
-
-**Niveau 3**
-L'application peux être mise à jour.
-
-**Niveau 4**
-L'application utilise directement les utilisateurs YunoHost et permet l'identification unique à partir du portail YunoHost.
-
-**Niveau 5**
-Le code du package d'application respecte certaines règles de syntaxe.
-
-**Niveau 6**
-L'application peut-être sauvegardée et restaurée.
-
-**Niveau 7**
-Le package d'application passe avec succès l'ensemble des tests d'intégrité.
-
-**Niveau 8**
-L'application respecte un ensemble de recommandations avancées améliorant sa qualité générale.
-
-**Niveau 9**
-L'application respecte toutes les recommandations. C'est un package d'excellente qualité.
-
-**Niveau 10**
-Le package d'application est jugé parfait !
diff --git a/packaging_apps_manifest.md b/packaging_apps_manifest.md
index 62376fea..8130b1e1 100644
--- a/packaging_apps_manifest.md
+++ b/packaging_apps_manifest.md
@@ -12,6 +12,7 @@ The `manifest.json` file defines the app's constants, a bunch of values that Yun
"fr": "Webmail Open Source"
},
"url": "http://roundcube.net/",
+ "version": "1.0.1~ynh7",
"license": "free",
"maintainer": {
"name": "kload",
@@ -62,6 +63,8 @@ The `manifest.json` file defines the app's constants, a bunch of values that Yun
* **url**: software website.
+* **version**: version of the package builded from the upstream version number and an incremental number for each change in the package without upstream change. Example "1.0.1~ynh7". Must be a string.
+
* **license**: application license: `free` or `non-free`. Be careful to not confuse with package license which must be put in `LICENSE` file.
* **maintainer**: informations about the app maintainer for contact.
diff --git a/packaging_apps_manifest_fr.md b/packaging_apps_manifest_fr.md
index 98b07abf..dbb9acb3 100644
--- a/packaging_apps_manifest_fr.md
+++ b/packaging_apps_manifest_fr.md
@@ -12,6 +12,7 @@ Le fichier `manifest.json` définit les constantes de l’application, un ensemb
"fr": "Webmail Open Source"
},
"url": "http://roundcube.net/",
+ "version": "1.0.1~ynh7",
"license": "free",
"maintainer": {
"name": "kload",
@@ -58,9 +59,11 @@ Le fichier `manifest.json` définit les constantes de l’application, un ensemb
- **packaging_format** : version de packaging du paquet. La version **1** est la version actuelle. Cette clé a été mise en place afin de faire évoluer les versions de packaging de manière décorrélée des versions de YunoHost.
-* **description** : description complète de l’application. Vous pouvez la détailler comme bon vous semble. Uniquement le champs `en` (english) est requis, vous pouvez également ajouter la traduction en français :)
+* **description** : description complète de l’application. Vous pouvez la détailler comme bon vous semble. Uniquement le champ `en` (english) est requis, vous pouvez également ajouter la traduction en français :)
-* **url**: site de l’application.
+* **url** : site web de l’application.
+
+* **version** : version du package construit à partir du numéro de version de l’application qui est installée et d'un incrément pour chaque changement du paquet sans changement de version de l'application. "Exemple: 1.0.1~ynh7". Le champ doit être une chaîne de caractères.
* **license** : licence avec laquelle l’application est distribuée : `free`, `non-free`. Attention à ne pas confondre avec la licence du paquet qui doit être mise dans le fichier `LICENSE`.
@@ -68,7 +71,7 @@ Le fichier `manifest.json` définit les constantes de l’application, un ensemb
- **requirements** : dépendance du paquet de l’application à la version d’un paquet Debian de YunoHost. Par exemple : "yunohost": ">> 2.3.12", le paquet `yunohost` doit être de version supérieur à `2.3.12`.
-* [**multi_instance**](packaging_apps_multiinstance_fr) : capacité d’une application d’être installée plusieurs fois.
+* [**multi_instance**](packaging_apps_multiinstance_fr) : capacité d’une application d’être installée plusieurs fois.
* **services** : liste des services nécessaires au fonctionnement de l’application. `nginx`, `php5-fpm`, `mysql`, `uwsgi`, `metronome`, `postfix`, `dovecot`…
@@ -77,7 +80,7 @@ Le fichier `manifest.json` définit les constantes de l’application, un ensemb
* **name** : identifiant du paramètre
* **type** : (optionnel) type de paramètre parmis `domain`, `path`, `user`, `app`, `boolean` et `password`. Le champ sera caché dans le cas d’un mot de passe.
* **choices** : (optionnel) restreint les réponses possibles à plusieurs choix.
- * **optional** : (optionnel) champs qui indique si ce paramètre est optionnel. Il peux avoir les valeurs `true` ou `false`.
+ * **optional** : (optionnel) champs qui indique si ce paramètre est optionnel. Il peut avoir les valeurs `true` ou `false`.
* **ask** : question posée (au minimum en anglais – `en`) que vous pouvez traduire dans plusieurs langues.
* **example** : (optionnel) valeur d’exemple pour aider l’administrateur à remplir le formulaire d’installation.
* **default** : (optionnel) valeur par défaut.
diff --git a/packaging_apps_nginx_conf_fr.md b/packaging_apps_nginx_conf_fr.md
index cb1f28f0..6e4b2702 100644
--- a/packaging_apps_nginx_conf_fr.md
+++ b/packaging_apps_nginx_conf_fr.md
@@ -44,7 +44,7 @@ sed -i "s@YNH_EXAMPLE_PATH@$path@g" ../conf/nginx.conf
sed -i "s@YNH_EXAMPLE_PORT@$port@g" ../conf/nginx.conf
sed -i "s@YNH_EXEMPLE_DOMAIN@$domain@g" ../conf/nginx.conf
```
-Il faut ensuite déplacer ce fichier de configuration dans la configuration de Nginx, puis de recharger la configuration de Nginx :
+Il faut ensuite déplacer ce fichier de configuration dans la configuration de Nginx, puis recharger la configuration de Nginx :
```bash
cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf
sudo service nginx reload
@@ -56,4 +56,4 @@ Il s’agit de supprimer la configuration Nginx pour cette application, puis de
```bash
rm -f /etc/nginx/conf.d/$domain.d/$app.conf
sudo service nginx reload
-```
\ No newline at end of file
+```
diff --git a/packaging_apps_scripts.md b/packaging_apps_scripts.md
index 17ee5194..0aac6741 100644
--- a/packaging_apps_scripts.md
+++ b/packaging_apps_scripts.md
@@ -2,60 +2,65 @@
## Scripts
-For now, a YunoHost package must contain five Shell scripts: `install`, `remove`, `upgrade`, `backup` and `restore`.
-These scripts will be executed as `admin` on the YunoHost instances.
+For now, a YunoHost package must contain five Shell scripts: `install`, `remove`, `upgrade`, `backup` and `restore`. A 6th script `change_url` can also be added optionally.
+These scripts will be executed as `root` on the YunoHost instances.
-Here is an example:
-```bash
-# Retrieve arguments
-domain=$1
-path=$2
-
-# Check domain/path availability
-sudo yunohost app checkurl $domain$path -a roundcube
-if [[ ! $? -eq 0 ]]; then
- exit 1
-fi
-
-# Generate random DES key & password
-deskey=$(dd if=/dev/urandom bs=1 count=200 2> /dev/null | tr -c -d '[A-Za-z0-9]' | sed -n 's/\(.\{24\}\).*/\1/p')
-db_pwd=$(dd if=/dev/urandom bs=1 count=200 2> /dev/null | tr -c -d '[A-Za-z0-9]' | sed -n 's/\(.\{24\}\).*/\1/p')
-
-# Use 'roundcube' as database name and user
-db_user=roundcube
-
-# Initialize database and store mysql password for upgrade
-sudo yunohost app initdb $db_user -p $db_pwd -s $(readlink -e ../sources/SQL/mysql.initial.sql)
-sudo yunohost app setting roundcube mysqlpwd -v $db_pwd
-
-# Copy files to the right place
-final_path=/var/www/roundcube
-sudo mkdir -p $final_path
-sudo cp -a ../sources/* $final_path
-sudo cp ../conf/main.inc.php $final_path/config/
-sudo cp ../conf/db.inc.php $final_path/config/
-sudo mv $final_path/plugins/managesieve/config.inc.php.dist $final_path/plugins/managesieve/config.inc.php
-
-# Change variables in Roundcube configuration
-sudo sed -i "s/rcmail-ynhDESkeyTOchange/$deskey/g" $final_path/config/main.inc.php
-sudo sed -i "s/yunouser/$db_user/g" $final_path/config/db.inc.php
-sudo sed -i "s/yunopass/$db_pwd/g" $final_path/config/db.inc.php
-sudo sed -i "s/yunobase/$db_user/g" $final_path/config/db.inc.php
-
-# Set permissions to roundcube directory
-sudo chown -R www-data: $final_path
-
-# Modify Nginx configuration file and copy it to Nginx conf directory
-sed -i "s@PATHTOCHANGE@$path@g" ../conf/nginx.conf
-sed -i "s@ALIASTOCHANGE@$final_path/@g" ../conf/nginx.conf
-sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/roundcube.conf
-
-# Reload nginx and regenerate SSOwat conf
-sudo service nginx reload
-sudo yunohost app ssowatconf
-```
+Examples scripts are available in the [example app](https://github.com/YunoHost/example_ynh/tree/master/scripts)
### Usage
You have to put everything in the `install` script in order to get the app to install without issue. It means that you have to install dependencies, create required repositories, initialize potential databases, copy sources and configure everything in the single `install` script (and of course do the reverse process in the `remove` script).
-**Be careful**: for security reasons, the script is executed as the **admin** user in YunoHost. Be sure to test it as **admin** and prepend `sudo` to commands that require it.
\ No newline at end of file
+It's possible to use helpers and import function library by example from a `_common.sh` file.
+
+### Available variables for these scripts
+#### YNH_CWD
+This var contains the current working directory path of the executed script. It can be useful for find out the initial path if we have move of directory during the script execution. It is used by some helpers to be sure to use the good directory.
+
+#### YNH_APP_ID
+It contains the application's identifier without the instance's number.
+
+Example: strut
+
+#### YNH_APP_INSTANCE_NAME
+It contains the instance name which will is used in a lot of situation to manage multiple setup of the same app.
+
+Example: strut__3
+#### YNH_APP_INSTANCE_NUMBER
+It contains the instance's number. Warning, it's not the number of running instances because an old app might be deleted.
+
+Example: 3
+
+### Specific variables to use in `install`
+#### YNH_APP_ARG_XXXXXXX
+An environment variable is available for each question asked in the installation.
+
+For example, if in the manifest we have a question like this
+```json
+{
+ "name": "domain",
+ "type": "domain",
+ "ask": {
+ "en": "Choose a domain for OpenSondage",
+ "fr": "Choisissez un nom de domaine pour OpenSondage",
+ "de": "Wählen Sie bitte einen Domain für OpenSondage"
+ },
+ "example": "domain.org"
+},
+```
+
+The name of the question is `domain` so in the script we can access it with YNH_APP_ARG_DOMAIN. The usage is to create a shorter name in the script like this:
+
+```bash
+domain=$YNH_APP_ARG_DOMAIN
+```
+
+### Variables spécifiques pour `change_url`
+#### YNH_APP_OLD_DOMAIN
+The old domain where the app was installed.
+#### YNH_APP_OLD_PATH
+The old path where the app was installed.
+#### YNH_APP_NEW_DOMAIN
+The new domain where move the app.
+#### YNH_APP_NEW_PATH
+The new path where move the app.
+
diff --git a/packaging_apps_scripts_fr.md b/packaging_apps_scripts_fr.md
index 5cb174e0..5ac23acc 100644
--- a/packaging_apps_scripts_fr.md
+++ b/packaging_apps_scripts_fr.md
@@ -2,60 +2,66 @@
## Les scripts
-Un paquet YunoHost doit contenir cinq scripts Shell : `install`, `remove`, `upgrade`, `backup` et `restore`.
-Ces scripts seront exécutés en tant qu’`admin` sur les serveurs YunoHost.
+Un paquet YunoHost doit contenir cinq scripts Shell : `install`, `remove`, `upgrade`, `backup` et `restore`. Un 6ème script `change_url` peut aussi être ajouté de façon optionnelle
+Ces scripts seront exécutés en tant que `root` sur les serveurs YunoHost.
-Voici un exemple de script d’`install` :
-```bash
-# Retrieve arguments
-domain=$1
-path=$2
-
-# Check domain/path availability
-sudo yunohost app checkurl $domain$path -a roundcube
-if [[ ! $? -eq 0 ]]; then
- exit 1
-fi
-
-# Generate random DES key & password
-deskey=$(dd if=/dev/urandom bs=1 count=200 2> /dev/null | tr -c -d '[A-Za-z0-9]' | sed -n 's/\(.\{24\}\).*/\1/p')
-db_pwd=$(dd if=/dev/urandom bs=1 count=200 2> /dev/null | tr -c -d '[A-Za-z0-9]' | sed -n 's/\(.\{24\}\).*/\1/p')
-
-# Use 'roundcube' as database name and user
-db_user=roundcube
-
-# Initialize database and store mysql password for upgrade
-sudo yunohost app initdb $db_user -p $db_pwd -s $(readlink -e ../sources/SQL/mysql.initial.sql)
-sudo yunohost app setting roundcube mysqlpwd -v $db_pwd
-
-# Copy files to the right place
-final_path=/var/www/roundcube
-sudo mkdir -p $final_path
-sudo cp -a ../sources/* $final_path
-sudo cp ../conf/main.inc.php $final_path/config/
-sudo cp ../conf/db.inc.php $final_path/config/
-sudo mv $final_path/plugins/managesieve/config.inc.php.dist $final_path/plugins/managesieve/config.inc.php
-
-# Change variables in Roundcube configuration
-sudo sed -i "s/rcmail-ynhDESkeyTOchange/$deskey/g" $final_path/config/main.inc.php
-sudo sed -i "s/yunouser/$db_user/g" $final_path/config/db.inc.php
-sudo sed -i "s/yunopass/$db_pwd/g" $final_path/config/db.inc.php
-sudo sed -i "s/yunobase/$db_user/g" $final_path/config/db.inc.php
-
-# Set permissions to roundcube directory
-sudo chown -R www-data: $final_path
-
-# Modify Nginx configuration file and copy it to Nginx conf directory
-sed -i "s@PATHTOCHANGE@$path@g" ../conf/nginx.conf
-sed -i "s@ALIASTOCHANGE@$final_path/@g" ../conf/nginx.conf
-sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/roundcube.conf
-
-# Reload Nginx and regenerate SSOwat conf
-sudo service nginx reload
-sudo yunohost app ssowatconf
-```
+Des exemples de ces scripts sont disponibles dans l'[application d'exemple](https://github.com/YunoHost/example_ynh/tree/master/scripts)
### Utilisation
Vous devez tout mettre dans le script d’`install` pour que votre application soit entièrement installée. Cela signifie que vous devez installer les dépendances, créer les répertoires requis, initialiser les bases de données nécessaires, copier les sources et configurer tout dans l’unique script `install` (et bien sûr faire la procédure inverse dans le script `remove`).
-**Attention** : pour des raisons de sécurité, le script est exécuté en tant qu’**admin** dans YunoHost. Assurez-vous de l’essayer en tant qu’**admin** et de préfixer `sudo` aux commandes requises.
\ No newline at end of file
+Il est possible d'utiliser des helpers et d'importer une librairie de fonction par exemple depuis un fichier `_common.sh`.
+
+### Variables disponibles pour tous ces scripts
+#### YNH_CWD
+Cette variable contient le chemin du répertoire de travail courant du contexte d'exécution du script. Elle peut être utile pour retrouver le chemin initial si on s'est déplacé pendant l'exécution du script. Elle est utilisée par certains helpers pour être sûr d'utiliser le bon.
+
+#### YNH_APP_ID
+Contient l'identifiant de l'application sans le numéro d'instance
+
+Exemple: strut
+#### YNH_APP_INSTANCE_NAME
+Contient le nom d'instance qui sera utilisé dans de nombreuses situation pour pouvoir gérer l'installation multiple d'une même app.
+
+Exemple: strut__3
+#### YNH_APP_INSTANCE_NUMBER
+Contient le numéro de l'instance. Attention il ne s'agit pas forcément du nombre d'instance toujours installée, car une ancienne application peut avoir été désinstallée.
+
+Exemple: 3
+
+### Variables spécifiques pour `install`
+#### YNH_APP_ARG_XXXXXXX
+Pour chaque question posée lors de l'installation, une variable d'environnement est disponible.
+
+Par exemple, si dans le manifest nous avons une question de cette forme
+```json
+{
+ "name": "domain",
+ "type": "domain",
+ "ask": {
+ "en": "Choose a domain for OpenSondage",
+ "fr": "Choisissez un nom de domaine pour OpenSondage",
+ "de": "Wählen Sie bitte einen Domain für OpenSondage"
+ },
+ "example": "domain.org"
+}
+```
+
+Le nom de la question `domain` donc dans le script on peut accéder à cette variable via $YNH_APP_ARG_DOMAIN. L'usage est de créer une variable plus courte comme ceci:
+
+```bash
+domain=$YNH_APP_ARG_DOMAIN
+```
+
+### Variables spécifiques pour `change_url`
+#### YNH_APP_OLD_DOMAIN
+L'ancien domaine où était installée l'app.
+
+#### YNH_APP_OLD_PATH
+L'ancien chemin où était installée l'app.
+
+#### YNH_APP_NEW_DOMAIN
+Le nouveau domaine où doit être installée l'app.
+
+#### YNH_APP_NEW_PATH
+Le nouveau chemin où doit être installée l'app.
diff --git a/packaging_apps_start.md b/packaging_apps_start.md
new file mode 100644
index 00000000..2b1257f0
--- /dev/null
+++ b/packaging_apps_start.md
@@ -0,0 +1,65 @@
+# Introduction to packaging
+
+This documentation is here is to provide all the basic concepts and vocabulary needed to understand app packaging. eg: shell, parsing, system administration...
+
+We will detail what is a Yunohost application package, how it works, how to make your own package and how to find help if you need it.
+
+## What is a Yunohost application package
+
+Before we continue, we need to define what is exactly an application package.
+
+To be able to do that, we need to remember that Yunohost at its core is a server operating system whose mission is to simplify selfhosting of internet services. To accomplish that, Yunohost provides, among other things, an administration panel allowing application installation in a few clicks.
+
+If you have ever installed a web application manually, you already know that the process is in reality far more complex, usually involving a lot of steps and discipline.
+
+This is what application packaging is, a serie of scripts that automate the installation of a web application and its configuration in order to provide the final user with a few clicks installation process.
+
+### How it works
+
+From the final user perspective, it is as simple as it can be:
+1) Pick an application
+1) Fill a form
+1) Wait
+1) Application is ready to use
+
+There is more to see backstage:
+First, when the application is selected, Yunohost will retrieve the corresponding package from github. eg: [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh).
+Then, Yunohost will read the manifest.json file to know what questions to ask the user through the form.
+
+These seamingly trivial questions are very important. Usually you would need to ask for the domain on which to install, the path to access, the user that will be designated administrator and the default language for the application.
+
+These are critical to configure appropriately the web application during the installation process. To do so, Yunohost will retrieve the answers given by the user and send them to the installation script located in the package "*scripts*" folder.
+
+The install script will handle the user answers to complete the process as you would have done manually.
+
+If the user wants to delete the application, Yunohost will use the remove script from the "*scripts*" folder. It will handle the cleaning process for the user and delete all folders and configuration files that was previsouly installed by the application.
+
+### What is a script
+
+Scripts used during application packaging are simply a serie of bash commands.
+
+### ... bash command?
+
+A [bash](https://en.wikipedia.org/wiki/Bash_(Unix_shell)) command is a line of text that will be interpreted by the computer and will produce a result. This is commonly refered to a command line.
+
+You only can interact with your server through command line as it does not provide a graphical interface. Usual access is through [ssh](/ssh_en).
+
+Package scripts are therefore a serie of bash commands as if you had typed them directly in the ssh console.
+
+To know what you can write in a bash script, you should start reading this [simple tuto](https://debian-facile.org/doc:programmation:shells:debuter-avec-les-scripts-shell-bash) or this [more advanced one](http://aral.iut-rodez.fr/fr/sanchis/enseignement/bash/index.html).
+
+### Ok, I'm good ! Where do I start?
+
+Before starting the packaging process, you need to successfully install the application. The script will only perform what you instruct him to do.
+
+Once completed, you need to read a little bit more documentation about application packaging. [This one is more technical](/packaging_apps_en) but now you should understand all the wizardry.
+
+### HELP! NEED BACKUP!
+
+Fortunately, you are not alone in this!
+
+There is other packagers like you and you can meet them on the [forum](https://forum.yunohost.org/c/apps-packaging) or the [chat](xmpp:apps@conference.yunohost.org?join).
+
+Feel free to join in and ask your questions, there always will be someone to help.
+
+Soon enough you'll see for yourself that packaging applications is not that hard after all.
diff --git a/packaging_apps_start_fr.md b/packaging_apps_start_fr.md
index 673fa008..cb64df10 100644
--- a/packaging_apps_start_fr.md
+++ b/packaging_apps_start_fr.md
@@ -30,7 +30,7 @@ Le script install va se charger d'installer l'application, en prenant en compte
Si par la suite l'utilisateur souhaite supprimer l'application, YunoHost utilisera le script remove du dossier script, qui se chargera à la place de l'utilisateur de supprimer l'application, ses dossiers et tout ses fichiers de configuration.
-### Qu'il y a-t-il dans ces scripts pour que tout soit si simple pour l'utilisateur ?
+### Qu'y a-t-il dans ces scripts pour que tout soit si simple pour l'utilisateur ?
Les scripts d'un package d'application sont simplement des commandes bash les unes à la suite des autres.
diff --git a/packaging_apps_virtualbox_fr.md b/packaging_apps_virtualbox_fr.md
index 85f01ff5..823fdace 100644
--- a/packaging_apps_virtualbox_fr.md
+++ b/packaging_apps_virtualbox_fr.md
@@ -1,6 +1,6 @@
# Créer un environnement de développement avec VirtualBox
-Ce page de documentation va vous expliquer comment mettre en place un serveur YunoHost virtuel, avec VirtualBox, pour travailler sur le packaging d'application.
+Cette page de documentation va vous expliquer comment mettre en place un serveur YunoHost virtuel, avec VirtualBox, pour travailler sur le packaging d'application.
## Pourquoi utiliser VirtualBox plutôt qu’un serveur YunoHost de production pour packager une application ?
@@ -42,7 +42,7 @@ Arrêtez la machine virtuelle avant tout.
La gestion des instantanés se fait dans l'onglet "Instantanés"
-Et on créer un premier instantané
+Et on crée un premier instantané
À présent on peut commencer à travailler sur la machine virtuelle et créer autant d'instantanés que souhaité pour jalonner le travail.
diff --git a/port_forwarding.md b/port_forwarding.md
new file mode 100644
index 00000000..c24f5542
--- /dev/null
+++ b/port_forwarding.md
@@ -0,0 +1,6 @@
+# Port forwarding
+
+The sketch below tries to briefly summarize the role and necessity of port
+forwarding when setting up a server at home.
+
+
diff --git a/port_forwarding_fr.md b/port_forwarding_fr.md
new file mode 100644
index 00000000..1793b27b
--- /dev/null
+++ b/port_forwarding_fr.md
@@ -0,0 +1,6 @@
+# Redirection de ports
+
+Le schéma ci-dessous tente d'expliquer brièvement le rôle de la redirection des
+ports lors de la mise en place d'un serveur à la maison.
+
+
diff --git a/postinstall.md b/postinstall.md
index ca60982b..35246f63 100644
--- a/postinstall.md
+++ b/postinstall.md
@@ -4,7 +4,7 @@ The step called "**post-installation**" is actually the initial configuration of
## Access
-You can access it graphically by entering your **server's local IP** address in a **web browser** (e.g. `http://192.168.1.7`).
+You can access it graphically by entering your **server's local IP** address in a **web browser** (e.g. `http://192.168.1.7`; you'll get this from the client table on your router's admin page).
@@ -14,7 +14,7 @@ You can access it graphically by entering your **server's local IP** address in
Or by running `yunohost tools postinstall` in command-line.
-
+
Preview of the command-line post-installation
@@ -26,7 +26,7 @@ Or by running `yunohost tools postinstall` in command-line.
This is the first domain name linked to your YunoHost server, but also the one which will be used by your server's users to access the **authentication portal**. It will thus be **visible by everyone**, choose it wisely.
-* If you do not have a domain name, or if you want to use the YunoHost's DynDNS service, choose a sub-domain of **.nohost.me** or **.noho.st** (i.e. `homersimpson.nohost.me`). The domain will be configured automatically and you won't need any further configuration step.
+* If you do not have a domain name, or if you want to use the YunoHost's DynDNS service, choose a sub-domain of **.nohost.me** or **.noho.st** (e.g. `homersimpson.nohost.me`). The domain will be configured automatically and you won't need any further configuration step.
* If you do know what **DNS** is, you probably want to configure your own domain name here. In this case, please refer to the [DNS page](/dns) page for more informations.
@@ -40,16 +40,22 @@ This password will be used to access to your server's [administration interface]
---
-## Troubleshooting
+## Congratz!
-### Secured connection fails after **post-installation**
+If you got so far and saw 'YunoHost has been successfully installed' (web
+postinstall) or 'YunoHost has been correctly configured', then congratulations!
-If you're using your own domain and depending on your browser, you might be stuck out of your Yunohost installation until you deploy an appropriate certificate. Thanks to Yunohost and [Let's Encrypt](https://letsencrypt.org/), this proves to be quite easy: just run `yunohost domain cert-install` in command-line to issue and install your certificate and _Voilà_. Refresh your browser and you're good to go.
+### What now ?
----
+- If you're self-hosting at home and without a VPN, you need to [make sure to
+ correctly forward ports on your router/Internet box](isp_box_config) ;
+- If you're using your own domain name (i.e. not a .nohost.me / .noho.st), you
+ need to [configure it according to the recommended DNS
+ configuration](dns_config) ;
+- If you cannot configure your domain name yet (because you didn't register it
+ yet, or because this is a test domain), see last paragraph
+ [here](dns_local_network) for a workaround ;
+- Don't be too afraid of the [certificate warning](certificate), you'll probably
+ be able to install a Let's Encrypt certificate :).
+- Have a look at [the available apps](apps) !
-## And after ?
-
-Once the post-installation finished, check if you can access to your server with your web-browser. If it is not the case, a few more configuration steps may be required.
-
-Do not hesitate to come on our [support chatroom](/support) if you need help.
diff --git a/postinstall_fr.md b/postinstall_fr.md
index b6a5d88f..f2beebcc 100644
--- a/postinstall_fr.md
+++ b/postinstall_fr.md
@@ -17,7 +17,7 @@ Vous pouvez accéder à la post-installation graphique en entrant dans un naviga
Vous pouvez aussi y accéder en entrant la commande `yunohost tools postinstall` directement sur le serveur ou en SSH.
-
+
*
Aperçu de la post-installation en ligne de commande
*
@@ -46,16 +46,24 @@ De manière générale, c’est la **clé d’entrée à votre système**, pense
---
-## En cas de problème
+## Félicitations !
-### Échec de la connection sécurisée après la **post-installation**
+Si vous arrivez ici après avoir vu "YunoHost a été installé avec succès" depuis
+votre navigateur ou la ligne de commande, alors félicitations !
-Si vous utilisez votre propre domaine et selon votre navigateur, vous pourriez vous retrouver bloqué à l'entrée de votre Yunohost tant que vous n'avez pas déployé un certificat valide. Grâce à Yunohost et [Let's Encrypt](https://letsencrypt.org/), c'est plutôt simple : exécutez simplement `yunohost domain cert-install` en ligne de commande pour émettre et installer votre certificat et _Voilà_. Rafraichissez votre navigateur et vous êtes paré.
+### Et maintenant ?
----
+- Si vous vous auto-hébergez à la maison et sans VPN, il faut vous assurer
+ de bien [rediriger les ports de votre box internet](isp_box_config_fr) ;
+- Si vous utilisez votre propre nom de domaine (i.e. pas un nohost.me /
+ noho.st), il vous faut [configurer le nom de domaine d'après la configuration
+ recommandée](dns_config_fr) ;
+- Si vous ne pouvez pas configurer le nom de domaine pour le moment (parce qu'il
+ n'est pas encore acheté, ou parce que c'est un domaine de test), vous pouvez
+ contourner temporairement le problème avec les instructions du dernier
+ paragraphe [ici](dns_local_network_fr) ;
+- Ne soyez pas trop effrayé par [l'avertissement à propos du
+ certificat](certificate_fr), vous aurez probablement la possibilité
+ d'installer un certificat Let's Encrypt :).
+- Jetez un oeil aux [applications disponibles](apps_fr) !
-## Et après ?
-
-Une fois l’étape de post-installation exécutée, vérifiez que votre serveur est accessible en tapant le nom de domaine choisi précédemment dans votre navigateur web. Si celui-ci n’est pas accessible, quelques étapes de configurations supplémentaires sont sûrement nécessaires.
-
-Rendez-nous visite sur le [salon de support](/support_fr) si vous avez besoin d’aide.
diff --git a/regenerate_certificate.md b/regenerate_certificate.md
deleted file mode 100644
index 44577685..00000000
--- a/regenerate_certificate.md
+++ /dev/null
@@ -1,47 +0,0 @@
-# Regenerate certificate
-
-If you want to generate again -- not renewing -- a certificate for a domain, you can follow those steps:
-
-(replace **example.org** with your domain)
-
-```bash
-# Save YunoHost's SSL directory location for readability
-ssldir=/usr/share/yunohost/yunohost-config/ssl/yunoCA
-
-# Save the final SSL path (do not forget to change your domain)
-finalpath=/etc/yunohost/certs/example.org
-
-# Save the serial number of the new certificate
-serial=$(cat "$ssldir/serial")
-
-# Backup current certificates for your domain
-cp -a $finalpath $finalpath.back
-
-# Remove certs and configuration file in it
-rm $finalpath/{crt.pem,key.pem,openssl.cnf}
-
-# Copy openSSL's configuration file
-cp $ssldir/openssl.cnf $finalpath/
-
-# Change yunohost.org with your domain in the configuration
-# DO NOT FORGET TO REPLACE example.org !
-sed -i "s/yunohost.org/example.org/g" $finalpath/openssl.cnf
-
-# Generate certificate and key
-openssl req -new -config $finalpath/openssl.cnf -days 3650 -out $ssldir/certs/yunohost_csr.pem -keyout $ssldir/certs/yunohost_key.pem -nodes -batch
-
-# Sign certificate with your server's CA
-openssl ca -config $finalpath/openssl.cnf -days 3650 -in $ssldir/certs/yunohost_csr.pem -out $ssldir/certs/yunohost_crt.pem -batch
-
-# Copy certificate and key to the right place
-cp $ssldir/newcerts/$serial.pem $finalpath/crt.pem
-cp $ssldir/certs/yunohost_key.pem $finalpath/key.pem
-
-# Fix permissions
-chmod 755 $finalpath
-chmod 640 $finalpath/key.pem $finalpath/crt.pem
-chmod 600 $finalpath/openssl.cnf
-
-# Allow metronome to access those certificates
-chown root:metronome $finalpath/key.pem $finalpath/crt.pem
-```
\ No newline at end of file
diff --git a/regenerate_certificate_fr.md b/regenerate_certificate_fr.md
deleted file mode 100644
index 7243dec7..00000000
--- a/regenerate_certificate_fr.md
+++ /dev/null
@@ -1,47 +0,0 @@
-#Régénérer un certificat
-
-Si vous désirez générer à nouveau — et non renouveler — un certificat pour un domain, suivre les étapes suivantes :
-
-(remplacer **example.org** avec votre domaine)
-
-```bash
-# Sauvegarde du répertoire SSL de YunoHost, pour la lisibilité
-ssldir=/usr/share/yunohost/yunohost-config/ssl/yunoCA
-
-# Sauvegarde du chemin final SSL (ne pas oublier de modifier avec votre domaine)
-finalpath=/etc/yunohost/certs/example.org
-
-# Sauvegarde du numéro de série du nouveau certificat
-serial=$(cat "$ssldir/serial")
-
-# Sauvegarde du certificat actuel du domaine
-cp -a $finalpath $finalpath.back
-
-# Suppression des certificats et des fichiers de configuration
-rm $finalpath/{crt.pem,key.pem,openssl.cnf}
-
-# Copie du fichier de configuration d’openSSL
-cp $ssldir/openssl.cnf $finalpath/
-
-# Changement de la configuration yunohost.org avec votre domaine
-# NE PAS OUBLIER DE REMPLACER example.org !
-sed -i "s/yunohost.org/example.org/g" $finalpath/openssl.cnf
-
-# Generation du certificat et de la clé
-openssl req -new -config $finalpath/openssl.cnf -days 3650 -out $ssldir/certs/yunohost_csr.pem -keyout $ssldir/certs/yunohost_key.pem -nodes -batch
-
-# Signature du certificat avec le CA du serveur
-openssl ca -config $finalpath/openssl.cnf -days 3650 -in $ssldir/certs/yunohost_csr.pem -out $ssldir/certs/yunohost_crt.pem -batch
-
-# Copie du certificat et de la clé au bon endroit
-cp $ssldir/newcerts/$serial.pem $finalpath/crt.pem
-cp $ssldir/certs/yunohost_key.pem $finalpath/key.pem
-
-# Réparation des permissions
-chmod 755 $finalpath
-chmod 640 $finalpath/key.pem $finalpath/crt.pem
-chmod 600 $finalpath/openssl.cnf
-
-# Autoriser metronome à accéder aux certificats
-chown root:metronome $finalpath/key.pem $finalpath/crt.pem
-```
\ No newline at end of file
diff --git a/roadmap.md b/roadmap.md
deleted file mode 100644
index ec5f92df..00000000
--- a/roadmap.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# Roadmap
-
-
2.0 2.2 Roadmap
-
-## v2.4
-Core:
-* ✔ Helpers for app maintainer *(ju, opi, jerome)*
-* ✔ Install script refactored *(ju)*
-* ✔ Use templates to (re)generate configurations instead of packages *(kload, beudbeud, jerome)*
-* ✔ Complete and improve backup and restore system *(jerome, ljf)*
-* Logging bug on SSOwat when no HTTP referer is sent
-* Add tools in moulinette to manage certificate (add, remove, update), Let’s Encrypt *(ljf, Moul)*
-* Run automatic tests on moulinette *(kload)*
-* Add proper upgrade/remove scripts and comment Debian scripts in packages *(beudbeud)*
-* Replace amavis by rspamd *(jerome)*
-
-Web interface:
-* ✔ Use Gulp for administration and user web interfaces *(opi)*
-* User avatar *(opi)*
-* Plugin system for the admin panel *(ljf)*
-
-Applications:
-* ✔ New way to [manage apps list](http://github.com/YunoHost/apps)
-
-Other:
-* ✔ Add licenses on YunoHost repositories *(Moul)*
\ No newline at end of file
diff --git a/security.md b/security.md
index f571914f..5ba71f0f 100644
--- a/security.md
+++ b/security.md
@@ -8,7 +8,7 @@ Two things remain important to note:
* The fact that YunoHost is a well-spread software increase chances to face an attack. If a flaw is discovered, it could potentially affect all the YunoHost instances at once. Keep your system **up-to-date** to remain safe.
-*If you need some advises, do not hesitate to [ask us](/support).*
+*If you need some advices, do not hesitate to [ask us](/help).*
*To talk about security flaws, contact the [YunoHost security team](/security_team).*
@@ -41,7 +41,9 @@ PasswordAuthentication no
```
Save and restart SSH daemon.
-
+```bash
+systemctl restart ssh
+```
---
### Modify SSH port
@@ -52,19 +54,27 @@ To prevent SSH connection attempts by robots that scan the Internet for any atte
```bash
nano /etc/ssh/sshd_config
-
-# Search line "Port" and remplace port number (by default 22) by another not used number
+```
+**Search line "Port" and replace** port number (by default 22) by another not used number
+```bash
+# What ports, IPs and protocols we listen for
Port 22 # to replace by 9777 for example
```
-Save and restart SSH daemon.
+**Open the port** in firewall (you can use -6 option to limit forbid ipv4 connexion)
+```bash
+yunohost firewall allow TCP 9777
+```
+Save and restart SSH daemon. Switch over to the new port by restarting SSH.
+```bash
+systemctl restart ssh
+```
Then restart the iptables firewall and close the old port in iptables.
```bash
yunohost firewall reload
yunohost firewall disallow
# port by default 22
-yunohost firewall disallow --ipv6 TCP # for ipv6
```
**For the next SSH connections ** you need to add the `-p` option followed by the SSH port number.
@@ -92,7 +102,7 @@ sudo adduser user_name
Choose a strong password, since it is the user who will be responsible to obtain root privileges.
Add the user to sudo group so just to allow him to perform maintenance tasks that require root privileges.
```bash
-sudo adduser user_namesudo
+sudo adduser user_name sudo
```
Now, change the SSH configuration to allow the new user to connect.
@@ -106,11 +116,13 @@ AllowUsers user_name
Only users listed in the AllowUsers directive will then be allowed to connect via SSH, which excludes the admin user.
Save and restart SSH daemon.
-
+```bash
+systemctl restart ssh
+```
---
### Disable YunoHost API
-YunoHost administration is accessible through an **HTTP API**, served on the 6787 port by default. It can be used to administrate a lot of things on your server, thus to break many things between malicious hands. The best thing to do, if you know how to use the [command-line interface](/moulinette), is to deactivate the `yunohost-api` service.
+YunoHost administration is accessible through an **HTTP API**, served on the 6787 port by default. It can be used to administrate a lot of things on your server, thus to break many things between malicious hands. The best thing to do, if you know how to use the [command-line interface](/commandline), is to deactivate the `yunohost-api` service.
```bash
sudo service yunohost-api stop
diff --git a/security_fr.md b/security_fr.md
index bc0d00da..5c07a744 100644
--- a/security_fr.md
+++ b/security_fr.md
@@ -1,19 +1,19 @@
-# Securité
+# Sécurité
YunoHost a été développé dans l’optique de fournir une sécurité maximale tout en restant accessible et facilement installable.
Tous les protocoles que YunoHost utilise sont **chiffrés**, les mots de passe ne sont pas stockés en clair, et par défaut chaque utilisateur n’accède qu’à son répertoire personnel.
-Deux points sont néanmoins importants à noter :
+Deux points sont néanmoins importants à noter :
* L’installation d’applications supplémentaires **augmente le nombre de failles** potentielles. Il est donc conseillé de se renseigner sur chacune d’elle **avant l’installation**, d’en comprendre le fonctionnement et juger ainsi l’impact que provoquerait une potentielle attaque. N’installez **que** les applications qui semblent importantes pour votre usage.
* Le fait que YunoHost soit un logiciel répandu augmente les chances de subir une attaque. Si une faille est découverte, elle peut potentiellement **toucher toutes les instances YunoHost** à un temps donné. Nous nous efforçons de corriger ces failles le plus rapidement possible, pensez donc à **mettre à jour régulièrement** votre système.
-*Si vous avez besoin de conseil, n’hésitez pas à [nous demander](/support_fr).*
+*Si vous avez besoin de conseil, n’hésitez pas à [nous demander](/help_fr).*
-*Pour discuter d'une faille de securité, contactez l'[équipe securité de YunoHost](/security_team_fr).*
+*Pour discuter d'une faille de sécurité, contactez l'[équipe sécurité de YunoHost](/security_team_fr).*
---
@@ -21,7 +21,7 @@ Deux points sont néanmoins importants à noter :
Si votre serveur YunoHost est dans un environnement de production critique ou que vous souhaitez améliorer sa sécurité, il est bon de suivre quelques bonnes pratiques.
-**Attention :** *l’application des conseils suivants nécessite une connaissance avancée du fonctionnement et de l’administration d’un serveur. Pensez à vous renseigner avant de procéder à cette mise en place.*
+**Attention :** *l’application des conseils suivants nécessite une connaissance avancée du fonctionnement et de l’administration d’un serveur. Pensez à vous renseigner avant de procéder à cette mise en place.*
### Authentification SSH par clé
@@ -29,17 +29,19 @@ Voici un [tutoriel plus détaillé](http://doc.ubuntu-fr.org/ssh#authentificatio
Par défaut, l’authentification SSH se fait avec le mot de passe d’administration. Il est conseillé de désactiver ce type d’authentification et de le remplacer par un mécanisme de clé de chiffrement.
-**Sur votre ordinateur de bureau :**
+**Sur votre ordinateur de bureau :**
```bash
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub
```
+
+Si vous êtes sur Ubuntu 16.04 vous devez faire `ssh-add` pour initialiser l'agent ssh
+
Entrez le mot de passe d’administration et votre clé publique devrait être copiée sur votre serveur.
**Sur votre serveur**, éditez le fichier de configuration SSH, pour désactiver l’authentification par mot de passe.
-
```bash
nano /etc/ssh/sshd_config
@@ -48,6 +50,9 @@ PasswordAuthentication no
```
Sauvegardez et relancez le démon SSH.
+```bash
+systemctl restart ssh
+```
---
@@ -59,24 +64,36 @@ Pour éviter des tentatives de connexion SSH par des robots qui scannent tout In
```bash
nano /etc/ssh/sshd_config
+```
-# Recherchez la ligne « Port » et remplacez le numéro du port (par défaut 22) par un autre numéro non utilisé
+**Recherchez la ligne « Port »** et remplacez le numéro du port (par défaut 22) par un autre numéro non utilisé
+
+```bash
Port 22 # à remplacer par exemple par 9777
```
+**Ouvrez le port** choisi dans le parefeu (vous pouvez utiliser l'option -6 pour interdire la connexion via ipv4)
+
+```bash
+yunohost firewall allow TCP
+```
+
Sauvegardez et relancez le démon SSH.
+```bash
+systemctl restart ssh
+```
+
Ensuite redémarrez le firewall iptables et fermez l’ancien port dans iptables.
```bash
yunohost firewall reload
-yunohost firewall disallow # port par défaut 22
-yunohost firewall disallow --ipv6 TCP # pour ipv6
+yunohost firewall disallow TCP # port par défaut 22
```
**Pour les prochaines connexions SSH** il faudra ajouter l’option -p suivie du numéro de port SSH.
-**Exemple** :
+**Exemple** :
```bash
ssh -p admin@
@@ -107,18 +124,21 @@ sudo adduser nom_utilisateur sudo
```bash
sudo nano /etc/ssh/sshd_config
-# Recherchez le paragraphe « Authentication » et ajoutez à la fin de celui-ci :
+# Recherchez le paragraphe « Authentication » et ajoutez à la fin de celui-ci :
AllowUsers nom_utilisateur
```
Seuls les utilisateurs mentionnés dans la directive AllowUsers seront alors autorisés à se connecter via SSH, ce qui exclut donc l’utilisateur admin.
Sauvegardez et relancez le démon SSH.
+```bash
+systemctl restart ssh
+```
---
### Désactivation de l’API YunoHost
-YunoHost est administrable via une **API HTTP**, servie sur le port 6787 par défaut. Elle permet d’administrer une grande partie de votre serveur, et peut donc être utilisée à des **fins malveillantes**. La meilleure chose à faire si vous êtes habitués aux lignes de commande est de désactiver le service `yunohost-api`, et **utiliser la [moulinette](/moulinette_fr)** en SSH.
+YunoHost est administrable via une **API HTTP**, servie sur le port 6787 par défaut. Elle permet d’administrer une grande partie de votre serveur, et peut donc être utilisée à des **fins malveillantes**. La meilleure chose à faire si vous êtes habitués aux lignes de commande est de désactiver le service `yunohost-api`, et **utiliser la [ligne de commande](/commandline_fr)** en SSH.
```bash
sudo service yunohost-api stop
@@ -126,7 +146,7 @@ sudo service yunohost-api stop
### Tests d’intrusion de YunoHost
-Des [pentests](https://fr.wikipedia.org/wiki/pentest) ont été effectués sur une instance de YunoHost 2.4 :
+Des [pentests](https://fr.wikipedia.org/wiki/pentest) ont été effectués sur une instance de YunoHost 2.4 :
- [1) Préparation](https://exadot.fr/2016/07/03/pentest-dune-instance-yunohost-1-preparation)
- [2) Le fonctionnement](https://exadot.fr/2016/07/12/pentest-dune-instance-yunohost-2-le-fonctionnement)
diff --git a/security_team_fr.md b/security_team_fr.md
index 7340fc2e..a3ae1720 100644
--- a/security_team_fr.md
+++ b/security_team_fr.md
@@ -1,6 +1,6 @@
-# Équipe securité
+# Équipe sécurité
-Contactez l'équipe securité par email : `security@yunohost.org`.
+Contactez l'équipe sécurité par email : `security@yunohost.org`.
Nous vous recommandons fortement de chiffrer votre mail avec GPG. Notre clé
publique est disponible sur les serveurs de clés. L'empreinte est ci-dessous :
@@ -13,4 +13,4 @@ uid YunoHost Security
sub 4096R/446838AF 2016-07-01
```
-Voyez https://gist.github.com/opi/4496024dc3ff29ab2e068fd57092ab7c et https://twitter.com/yunohost/status/748975105393459200 pour d'autres empreintes de confiance
\ No newline at end of file
+Voyez https://gist.github.com/opi/4496024dc3ff29ab2e068fd57092ab7c et https://twitter.com/yunohost/status/748975105393459200 pour d'autres empreintes de confiance
diff --git a/selfhosting.md b/selfhosting.md
index 4a7aa084..83441b95 100644
--- a/selfhosting.md
+++ b/selfhosting.md
@@ -23,17 +23,21 @@ If you use the [email system](email_en) and your server becomes unavailable, ema
#### Others Self-hosting projects
-- [ArkOS](https://arkos.io)
+##### Under active development
- [Cloudron](https://cloudron.io)
- [Cozy](https://cozy.io)
- [FreedomBox](https://wiki.debian.org/FreedomBox)
-- [Host@home](http://yeuxdelibad.net/Programmation/Hostathome.html)
- [Libre.sh](https://github.com/indiehosters/libre.sh)
- [Puffin](http://puffin.rocks)
- [Sandstorm](https://sandstorm.io/)
- [Sovereign](https://github.com/al3x/sovereign)
- [UBOS](http://ubos.net)
+##### Unmaintained
+- [ArkOS](http://web.archive.org/web/20170603213149/https://arkos.io/)
+- [Host@home](http://web.archive.org/web/20160206150730/http://yeuxdelibad.net/Programmation/Hostathome.html)
+
+
#### Learn more
* [Decentralized Web Summit](http://www.decentralizedweb.net/)
* [Feudal Security](https://www.schneier.com/blog/archives/2012/12/feudal_sec.html) Bruce Schneier, famous security expert exposes the risks of a centralized web and the importance of civic action.
diff --git a/selfhosting_fr.md b/selfhosting_fr.md
index bae9ff39..1d3af99b 100644
--- a/selfhosting_fr.md
+++ b/selfhosting_fr.md
@@ -1,4 +1,4 @@
-#L’auto-hébergement
+# L’auto-hébergement
#### Définition
L’**auto-hébergement** consiste à héberger chez soi son serveur, ses données et ses services.
@@ -25,17 +25,21 @@ Si vous vous servez du système de [courrier électronique](/email_fr), et que v
#### Autres projets d’auto-hébergement
-- [ArkOS](https://arkos.io)
+##### En développement
- [Cloudron](https://cloudron.io)
- [Cozy](https://cozy.io)
- [FreedomBox](https://wiki.debian.org/FreedomBox)
-- [Host@home](http://yeuxdelibad.net/Programmation/Hostathome.html)
- [Libre.sh](https://github.com/indiehosters/libre.sh)
- [Puffin](http://puffin.rocks)
- [Sandstorm](https://sandstorm.io/)
- [Sovereign](https://github.com/al3x/sovereign)
- [UBOS](http://ubos.net)
+##### Non maintenu
+- [ArkOS](http://web.archive.org/web/20170603213149/https://arkos.io/)
+- [Host@home](http://web.archive.org/web/20160206150730/http://yeuxdelibad.net/Programmation/Hostathome.html)
+
+
#### Pour aller plus loin
* [Auto-hebergement.fr](http://www.auto-hebergement.fr/)
* [Conférence de Benjamin Bayart - Internet libre, ou Minitel 2.0 ?](http://www.fdn.fr/internet-libre-ou-minitel-2.html)
diff --git a/selfhosting_ru.md b/selfhosting_ru.md
new file mode 100644
index 00000000..07881197
--- /dev/null
+++ b/selfhosting_ru.md
@@ -0,0 +1,43 @@
+#Самостоятельное развертывание (свой хостинг)
+
+#### Значение
+**Свой хостинг** - это сервер, расположенный у вас дома и предназначенный для размещения информации для личных нужд.
+
+#### Обязанности администратора
+Свой хостинг создает для вас определенные обязанности, если вы хотите разместить на нём сайт, [e-mail](email_en), а также запустить [систему мгновенных сообщений](XMPP), ваш сервер должен работать и оставаться онлайн 24/7.
+
+Распространенные проблемы, по причине которых сервер может быть недоступен включают в себя: отсутствие электроэнергии, потеря доступа к Интернету, итд.
+
+К примеру, если вы используете [e-mail](email_en) и ваш сервер по какой-то причине становится недоступен, отправленные на него сообщения будут отправлены снова только по прошествии от 3 до 7 дней.
+
+#### Минусы своего хостинга
+* Медленная передача данных. При использовании ADSL, скорость загрузки составляет 1/10 от скорости закачки. К примеру при скорости загрузки 1Мб/с скорость загрузки будет около 100Кб/с;
+* Сервер должен быть доступен 24/7;
+* Перенос данных;
+
+#### Плюсы своего хостинга
+* Анонимность, приватность;
+* Вы - единственный хозяин ваших данных и сервисов;
+* Возможность децентрализации и использования распределенных сетей;
+
+
+
+#### Другие проекты, предназначенные для самостоятельного развертывания
+##### В активной разработке
+- [Cloudron](https://cloudron.io)
+- [Cozy](https://cozy.io)
+- [FreedomBox](https://wiki.debian.org/FreedomBox)
+- [Libre.sh](https://github.com/indiehosters/libre.sh)
+- [Puffin](http://puffin.rocks)
+- [Sandstorm](https://sandstorm.io/)
+- [Sovereign](https://github.com/al3x/sovereign)
+- [UBOS](http://ubos.net)
+
+##### Неподдерживаемые
+- [ArkOS](http://web.archive.org/web/20170603213149/https://arkos.io/)
+- [Host@home](http://web.archive.org/web/20160206150730/http://yeuxdelibad.net/Programmation/Hostathome.html)
+
+
+#### Узнать больше
+* [Decentralized Web Summit](http://www.decentralizedweb.net/)
+* [Feudal Security](https://www.schneier.com/blog/archives/2012/12/feudal_sec.html) Bruce Schneier, famous security expert exposes the risks of a centralized web and the importance of civic action.
diff --git a/shell_variables_scope.md b/shell_variables_scope.md
new file mode 100644
index 00000000..aba9d163
--- /dev/null
+++ b/shell_variables_scope.md
@@ -0,0 +1,219 @@
+### General scope of variables
+
+Variables exists for the current shell and its children only.
+Another script executed from the script is not a child, it's another shell which herited only the environment variables from its caller script, not its globals or locals variables.
+
+When a script is called, it isn't started in the current shell, but in a new instance of bash which herite environment variables from its parent.
+```bash
+var1=value1
+export var2=value2
+
+echo "$var1"
+echo "$var2"
+# var1 and var2 exist
+
+echo "-"
+
+echo "
+echo \"\$var1\"
+echo \"\$var2\"" > other_script.sh
+chmod +x other_script.sh
+./other_script.sh
+# Here, var1 doesn't exist, only var2 still exists.
+# Because it's an environment variable.
+```
+In your current shell, where you launch this script, try
+```bash
+echo $var1 - $var2
+```
+None of this 2 variables exists, because their scope is limited to the script itself. Never its parent.
+
+
+### Functions inside a script
+
+Use a function would not change the scope of variables.
+```bash
+var1=value1
+export var2=value2
+
+set_variable () {
+ var3=value3
+ export var4=value4
+
+ echo "$var1"
+ echo "$var2"
+ echo "$var3"
+ echo "$var4"
+ # All variables exists here
+ # Because the function inherite its variables from the script.
+}
+
+set_variable
+
+echo "$var1"
+echo "$var2"
+echo "$var3"
+echo "$var4"
+# var1 var2, var3 and var4 exist
+# var3 exist because the function is executed in the same shell than the script itself.
+
+echo "-"
+
+echo "
+echo \"\$var1\"
+echo \"\$var2\"
+echo \"\$var3\"
+echo \"\$var4\"" > other_script.sh
+chmod +x other_script.sh
+./other_script.sh
+# Here, var1 and var3 don't exist, only var2 and var4 still exist.
+# Because they're environment variables.
+```
+
+### The usage of locales variables
+
+Locales variables are limited to the function and its children.
+```bash
+var1=value1
+export var2=value2
+
+set_variable () {
+ var3=value3
+ export var4=value4
+ local var5=value5
+
+ echo "$var1"
+ echo "$var2"
+ echo "$var3"
+ echo "$var4"
+ echo "$var5"
+ # All variables exists here
+ # Because the function inherite its variables from the script.
+}
+
+set_variable
+
+echo "-"
+
+echo "$var1"
+echo "$var2"
+echo "$var3"
+echo "$var4"
+echo "$var5"
+# var1 var2, var3 and var4 exist
+# var3 exist because the function is executed in the same shell than the script itself.
+# var5 doesn't exist, because its scope is limited to the function which declare it.
+
+echo "-"
+
+echo "
+echo \"\$var1\"
+echo \"\$var2\"
+echo \"\$var3\"
+echo \"\$var4\"
+echo \"\$var5\"" > other_script.sh
+chmod +x other_script.sh
+./other_script.sh
+# Here, var1, var3 and var5 don't exist, only var2 and var4 still exist.
+# Because they're environment variables.
+```
+
+Using a local variable is usefull for limit it scope to the function only. And not bother the script in its globality with useless variables.
+But there's also another advantage with local variable, do not modify the content of a global variable.
+```bash
+var1=value1
+var2=value2
+var3=value3
+
+set_variable () {
+ echo "$var1"
+ echo "$var2"
+ echo "$var3"
+
+ echo "-"
+
+ var2=new_value2
+ local var3=new_value3
+
+ echo "$var1"
+ echo "$var2"
+ echo "$var3"
+ # Values of var2 and var3 are modified in the function.
+}
+
+set_variable
+
+echo "-"
+
+echo "$var1"
+echo "$var2"
+echo "$var3"
+# var3 retake is original value,
+# because in the function, var3 was declared as a new locale variable.
+# But var2 was directly modified, so its value still changed.
+# Because, var2 in the function is still a global variable.
+```
+
+As seen previously, modified or created variables in a function can affect the main script because the function is executed in the same shell.
+But, the things are different if the function is executed in a sub shell, the function become a child which only inherite from its parent.
+```bash
+var1=value1
+var2=value2
+var3=value3
+
+fonction2 () {
+ echo "-"
+ echo "var1=$var1"
+ echo "var2=$var2"
+ echo "var3=$var3"
+ echo "var4=$var4"
+ echo "var5=$var5"
+ # Even var3, which is local, is inherited from the parent function.
+}
+
+set_variable () {
+ echo "var1=$var1"
+ echo "var2=$var2"
+ echo "var3=$var3"
+ # Variables are inherited from the parent.
+
+ echo "-"
+
+ var2=new_value2
+ local var3=new_value3
+ var4=new_value4
+ export var5=new_value5
+
+ echo "var1=$var1"
+ echo "var2=$var2"
+ echo "var3=$var3"
+ echo "var4=$var4"
+ echo "var5=$var5"
+ # Values of var2 and var3 are modified in the function.
+
+ (fonction2)
+}
+
+(set_variable)
+# Start the function in a sub shell.
+
+echo "-"
+
+echo "var1=$var1"
+echo "var2=$var2"
+echo "var3=$var3"
+echo "var4=$var4"
+echo "var5=$var5"
+# var2 and var3 retake their original values.
+# Because the function is in a child shell which never affect its parent.
+# Likewise, var4 and var5 don't exist, because they're been declared in child shell.
+# The parent never inherite from its children shell.
+```
+
+### Conclusion
+
+- The scope of a variable is always the current shell and its children, never its parent shell.
+- An environment variable may be exported to a new shell, detached from the first one. If the last one executed the second one. But, it can't affect the parents.
+- A locale variable in a function, executed in the current shell, can't affect the environment outside of the function. End allow also to not affect a global variable with the same name.
+- A function executed in a sub shell will never affect its parent, with global or local variables.
+- A parent can NEVER be affected by variables defined or modified in its children shell.
diff --git a/shell_variables_scope_fr.md b/shell_variables_scope_fr.md
new file mode 100644
index 00000000..179f3252
--- /dev/null
+++ b/shell_variables_scope_fr.md
@@ -0,0 +1,219 @@
+### Portée générales des variables
+
+Les variables existent pour le shell courant et ses enfants uniquement.
+Un script exécuté depuis le script n'est pas un enfant, c'est un autre shell qui n'héritera que des variables d'environnement du script appelant, pas des variables globales ou locales.
+
+Lors de l'appel d'un script, il n'est pas démarré dans le shell courant, mais dans une nouvelle instance de bash qui hérite des variables d'environnements de son parent.
+```bash
+var1=value1
+export var2=value2
+
+echo "$var1"
+echo "$var2"
+# var1 et var2 existent
+
+echo "-"
+
+echo "
+echo \"\$var1\"
+echo \"\$var2\"" > other_script.sh
+chmod +x other_script.sh
+./other_script.sh
+# Ici, var1 n'existe pas, seul var2 existe encore.
+# Car c'est une variable d'environnement.
+```
+Dans le shell courant, d'où le script est appelé, faite
+```bash
+echo $var1 - $var2
+```
+Aucune des 2 variables n'existent, car leur portée se limite au script appelé. Jamais au parent.
+
+
+### Les fonctions dans un script
+
+Utiliser une fonction ne change pas la portée des variables.
+```bash
+var1=value1
+export var2=value2
+
+set_variable () {
+ var3=value3
+ export var4=value4
+
+ echo "$var1"
+ echo "$var2"
+ echo "$var3"
+ echo "$var4"
+ # Toutes les variables existent ici
+ # car la fonction hérite des variables du script.
+}
+
+set_variable
+
+echo "$var1"
+echo "$var2"
+echo "$var3"
+echo "$var4"
+# var1 var2, var3 et var4 existent
+# var3 existe car la fonction est exécutée dans le même shell que le script lui-même.
+
+echo "-"
+
+echo "
+echo \"\$var1\"
+echo \"\$var2\"
+echo \"\$var3\"
+echo \"\$var4\"" > other_script.sh
+chmod +x other_script.sh
+./other_script.sh
+# Ici, var1 et var3 n'existent pas, seul var2 et var4 existe encore.
+# Car ce sont des variables d'environnements.
+```
+
+### L'usage des variables locales
+
+Les variables locales sont limitées à une fonction et ses enfants
+```bash
+var1=value1
+export var2=value2
+
+set_variable () {
+ var3=value3
+ export var4=value4
+ local var5=value5
+
+ echo "$var1"
+ echo "$var2"
+ echo "$var3"
+ echo "$var4"
+ echo "$var5"
+ # Toutes les variables existent ici
+ # car la fonction hérite des variables du script.
+}
+
+set_variable
+
+echo "-"
+
+echo "$var1"
+echo "$var2"
+echo "$var3"
+echo "$var4"
+echo "$var5"
+# var1 var2, var3 et var4 existent
+# var3 existe car la fonction est exécutée dans le même shell que le script lui-même.
+# var5 n'existe pas, car sa portée se limite à la fonction qui l'a déclaré
+
+echo "-"
+
+echo "
+echo \"\$var1\"
+echo \"\$var2\"
+echo \"\$var3\"
+echo \"\$var4\"
+echo \"\$var5\"" > other_script.sh
+chmod +x other_script.sh
+./other_script.sh
+# Ici, var1, var3 et var5 n'existent pas, seul var2 et var4 existe encore.
+# Car ce sont des variables d'environnements.
+```
+
+L'intérêt d'utiliser une variable locale est donc de limiter cette variable à la seule fonction qui l'a déclaré. Et donc ne pas polluer le script dans sa globalité avec des variables inutile pour ce dernier.
+Il existe également un second avantage à l'usage d'une variable locale, c'est de ne pas modifier le contenu d'une variable globale.
+```bash
+var1=value1
+var2=value2
+var3=value3
+
+set_variable () {
+ echo "$var1"
+ echo "$var2"
+ echo "$var3"
+
+ echo "-"
+
+ var2=new_value2
+ local var3=new_value3
+
+ echo "$var1"
+ echo "$var2"
+ echo "$var3"
+ # La valeurs de var2 et var3 sont modifiées dans la fonction
+}
+
+set_variable
+
+echo "-"
+
+echo "$var1"
+echo "$var2"
+echo "$var3"
+# var3 a repris sa valeur initiale,
+# car dans la fonction var3 a été déclaré comme une nouvelle variable locale.
+# Mais var2 a été modifiée directement, donc sa valeur reste modifiée.
+# Car var2 dans la fonction est resté une variable globale.
+```
+
+Comme vu précédemment, les variables modifiée ou créée dans la fonction affecte le script car la fonction est exécutée dans le même shell que celui-ci.
+Cela change si on exécute la fonction dans un sous-shell, la fonction devient un enfant qui hérite de son parent uniquement.
+```bash
+var1=value1
+var2=value2
+var3=value3
+
+fonction2 () {
+ echo "-"
+ echo "var1=$var1"
+ echo "var2=$var2"
+ echo "var3=$var3"
+ echo "var4=$var4"
+ echo "var5=$var5"
+ # Même var3, qui est locale, est héritée par la fonction enfant.
+}
+
+set_variable () {
+ echo "var1=$var1"
+ echo "var2=$var2"
+ echo "var3=$var3"
+ # Les variables sont héritées du parent.
+
+ echo "-"
+
+ var2=new_value2
+ local var3=new_value3
+ var4=new_value4
+ export var5=new_value5
+
+ echo "var1=$var1"
+ echo "var2=$var2"
+ echo "var3=$var3"
+ echo "var4=$var4"
+ echo "var5=$var5"
+ # La valeurs de var2 et var3 sont modifiées dans la fonction
+
+ (fonction2)
+}
+
+(set_variable)
+# Démarre la fonction dans un shell fils.
+
+echo "-"
+
+echo "var1=$var1"
+echo "var2=$var2"
+echo "var3=$var3"
+echo "var4=$var4"
+echo "var5=$var5"
+# var2 et var3 ont repris leur valeurs initiales,
+# Car la fonction est dans un shell enfant qui n'affecte pas son parent.
+# De même, var4 et var5 n'existent pas, car elle sont déclarées dans un shell enfant.
+# Le parent n'hérite pas des shells enfants.
+```
+
+### Conclusion
+
+- La portée d'une variable est toujours le shell courant et ses enfants, jamais son shell parent.
+- Une variable d'environnement peut être exportée sur un nouveau shell, indépendant du premier. À condition que ce dernier exécute le second. Mais ne peut pas affecter les parents.
+- Une variable locale dans une fonction, exécutée dans le shell courant, n'affecte pas son environnement en dehors de la fonction. Et permet également de ne pas affecter le contenu d'une variable globale de même nom.
+- Une fonction exécutée dans un sous-shell n'affecte jamais le parent, que ses variables soient globales ou locales.
+- Le parent n'est JAMAIS affecté par les variables définies ou modifiées par ses shells enfants.
diff --git a/sitemap.md b/sitemap.md
deleted file mode 100644
index 3f55f39c..00000000
--- a/sitemap.md
+++ /dev/null
@@ -1,123 +0,0 @@
-# Sitemap
-
-* [Homepage](/index)
-
-* [What's YunoHost](/whatsyunohost)
-
-* [Documentation](/docs)
-
- * Try YunoHost
- * [With the demo](/try)
-
- * [Administrator guide](/admindoc)
- * [Self-hosting](/selfhosting_en)
- * [Hardware compatible](/hardware)
- * [Installation guide](/install)
- * [On an OLinuXino board](/install_on_olinuxino)
- * [On an ARM board](/install_on_arm_board)
- - [On an Olimex board](/install_on_olinuxino)
- * [On a Raspberry Pi](/install_on_raspberry)
- * [From an ISO](/install_iso)
- * [On Debian](/install_on_debian)
- * [On VirtualBox](/install_on_virtualbox)
- * [On Vagrant](/vagrant)
- * [On a dedicated or a virtual private server](/install_on_vps)
- * Installation steps
- * [Burn or copy iso](/burn_or_copy_iso)
- * [Boot and graphical install](/boot_and_graphical_install)
- * [Copy YunoHost image on SD card](/copy_image)
- * [Manual instalation](/install_manually)
- * [Plug and boot your server](/plug_and_boot)
- * [Post-instalation](/postinstall)
- * Access to YunoHost server: DNS, domain name, `hosts` file
- * [Diagnostic the access to YunoHost server](/diagnostic)
- * [DNS Settings](/dns)
- * [Registrar](registrar)
- * [DNS Configuration](/dns_config)
- * [Use the YunoHost DNS resolver](/dns_resolver_en)
- * [Dynamic IP address: configure DynDNS](dns_dynamicip_en)
- * [Access his server on his local network](/dns_local_network_en)
- - [IPv6](ipv6_fr)
- - [VPN](vpn_advantage)
- * [Internet service provider](/isp)
- * [Generic configuration of the ISP router](/isp_box_config)
- * Applications
- * [Official applications](/apps_en)
- * [Non-official applications](/apps_in_progress_en)
- * [Update applications](app_update_en)
- * Administration
- * Command-line
- * [Connect to your server with SSH](/ssh)
- * [Command line administration](/moulinette)
- * [Web administration](/admin)
- * [Change administration password](/change_admin_password)
- * [Email](email_en)
- * [Configure email client](email_configure_client_en)
- * [Migrate emails](email_migration_en)
- * [Forms to remove blacklisting of your IP address](blacklist_forms_en)
- * [Use DKIM](dkim)
- * Certificates
- - [Certificates manager](certmanager_en)
- * [Add a certificate certified by an authority](/certificate)
- * [Regenerate self-signed certificate](/regenerate_certificate_en)
- * [Security](/security)
- - [Contact security team](security_team)
- * [Troubleshooting guide](/troubleshooting_guide_en)
- * [YunoHost Tor Hidden Servicer](/torhiddenservice)
- * [Unblock an IP address with Fail2ban](/fail2ban_en)
-
- * [User guide](/userdoc)
- * [User interface](user_interface)
- * [Configure email client](email_configure_client_en)
- * [Instant messaging usage](/XMPP)
- * [Official applications](/apps)
- * [Baikal](/app_baikal_en)
- * [Firefox Sync](/app_ffsync_en)
- * [Tiny Tiny RSS](/app_ttrss_en)
- * [Transmission](/app_transmission_en)
- * [Radicale](/app_radicale)
- * [RoundCube](/app_roundcube_en)
- * [Minidlna](app_minidlna_en)
- * [Community applications](/apps_in_progress_en)
- * [LimeSurvey](/app_limesurvey_en)
-
- * [Contributor guide](/contribute)
- * Developement
- * Applications
- * [Package new application](/packaging_apps)
- * [VirtualBox for apps' packaging](packaging_apps_virtualbox_fr)
- * [Manifest](packaging_apps_manifest_en)
- * [Scripts](packaging_apps_scripts_en)
- * [Arguments management](packaging_apps_arguments_management_en)
- * [Nginx configuration](packaging_apps_nginx_conf_en)
- * [Multi-instance](packaging_apps_multiinstance_en)
- * [Helpers](packaging_apps_helpers_en)
- * [Trap usage](packaging_apps_trap_fr)
- * [Applications levels](packaging_apps_levels_fr)
- * [YEP - YunoHost Enhancement Proposals](packaging_apps_guidelines_fr)
- * [Applications in progress](/apps_in_progress_en)
- * [Wishlist of applications](/apps_wishlist_en)
- * [Contributing to the YunoHost core](/dev)
- * [Creation of system packages](/build_system_en)
- * [Creation of Debian packages](/build_packages_en)
- * [Create an ARM board image](/build_arm_image_en)
- * [Create a live USB image](/create_live_usb)
- * Documentation
- * [Write documentation](/write_documentation)
- * [Accounting to edit documentation](/accounting)
- * [Contribution](/contributordoc)
-
-* Project's life:
- * [Changelog v.2.0](/changelog_2_0_en)
- * [Changelog v.2.2](/changelog_2_2_en)
- * [Roadmap](/roadmap)
- * [Frequently asked questions](/faq_en)
- * [Contributors](contribs)
- - [Project organization](project_organization)
- * [Support](/support_en)
- * [Art Works](artworks_en)
- * [Blog](https://forum.yunohost.org/c/announcement)
- - [Forum](https://forum.yunohost.org)
- - [Chat rooms](chat_rooms_en)
- * [Communication](communication_en)
- * [Help](/help)
diff --git a/sitemap_fr.md b/sitemap_fr.md
deleted file mode 100644
index 68116cec..00000000
--- a/sitemap_fr.md
+++ /dev/null
@@ -1,137 +0,0 @@
-# Plan du site
-
-* [Page d’accueil](/index_fr)
-
-* [En savoir plus](/whatsyunohost_fr)
-
-* [Documentation](/docs_fr)
-
- * Essayer YunoHost
- * [Avec la démo](/try_fr)
-
- * [Guide de l’administrateur](/admindoc_fr)
- * [L’auto-hébergement](/selfhosting_fr)
- * [Matériel compatible](/hardware_fr)
- * [Guide d’installation](/install_fr)
- * [Sur une carte OLinuXino](/install_on_olinuxino_fr)
- * [Sur carte ARM](/install_on_arm_board_fr)
- - [Sur carte Olimex](/install_on_olinuxino_fr)
- * [Sur Raspberry Pi](/install_on_raspberry_fr)
- * [À partir de l’ISO](/install_iso_fr)
- * [Sur Debian](/install_on_debian_fr)
- * [Sur VirtualBox](/install_on_virtualbox_fr)
- * [Sur Vagrant](/vagrant_fr)
- * [Sur un serveur dédié](/install_on_vps_fr)
- * Étapes d’installation
- * [Graver ou copier l’ISO](/burn_or_copy_iso_fr)
- * [Démarrage et installation graphique](/boot_and_graphical_install_fr)
- * [Copier l’image YunoHost sur une carte SD](/copy_image_fr)
- * [Installation manuelle](/install_manually_fr)
- * [Brancher et démarrer votre serveur](/plug_and_boot_fr)
- * [Post-installation](/postinstall_fr)
- * Accès au serveur YunoHost : DNS, nom de domaine, fichier `hosts`
- * [Diagnostic d’un bon accès au serveur YunoHost](/diagnostic_fr)
- * [DNS - Système de nom de domaine](/dns_fr)
- * [Configuration du DNS chez son registrar](/dns_config_fr)
- * [Chez OVH](/OVH_fr)
- * [DNS et installation d’une application sur un sous-domaine](/dns_subdomains_fr)
- * [Bureaux d’enregistrements de nom de domaine — Registrar](registrar_fr)
- * [Utiliser le résolveur DNS de YunoHost](/dns_resolver_fr)
- * [Adresse IP dynamique : configuration d’un DynDNS](dns_dynamicip_fr)
- * [Accéder à son serveur dans son réseau local](/dns_local_network_fr)
- * [Nom de domaine en Nohost.me](/dns_nohost_me_fr)
- - [IPv6](ipv6_fr)
- - [VPN](vpn_advantage_fr)
- * [Fournisseurs d’accès à Internet](/isp_fr)
- * [Configuration générique de la box ou du routeur](/isp_box_config_fr)
- * [Free](/isp_free_fr)
- * [SFR](/isp_sfr_fr)
- * [Orange](/isp_orange_fr)
- * Applications
- * [Applications officielles](/apps_fr)
- * [Applications non officielles](/apps_in_progress_en)
- * [Mise à jour des applications](app_update_fr)
- * Administration
- * En ligne de commande
- * [Connexion à son serveur avec SSH](/ssh_fr)
- * [Administration avec la Moulinette](/moulinette_fr)
- * [Administration web](/admin_fr)
- * [Administration via l'API](/admin_api_fr)
- * [Changer le mot de passe d’administration](/change_admin_password_fr)
- * [Courrier électronique](email_fr)
- * [Configuration d’un client email](email_configure_client_fr)
- * [Migration emails](email_migration_fr)
- * [Formulaires pour enlever son adresse IP des listes noires](blacklist_forms_fr)
- * [Mettre en place DKIM](dkim_fr)
- * Certificats
- - [Gestionnaire de certificats](certmanager_en)
- * [Ajouter un certificat d’une autorité](/certificate_fr)
- * [Régénérer le certificat auto-signé](/regenerate_certificate_fr)
- * [Sécurité](/security_fr)
- - [Contacter l’équipe de sécurité](security_team_fr)
- * [Consulter les fichiers de log du système](/check_logfile_fr)
- * [Guide de dépannage](/troubleshooting_guide_fr)
- * [YunoHost service caché Tor](/torhiddenservice_fr)
- * [Débloquer une IP avec Fail2ban](/fail2ban_fr)
-
- * [Guide de l’utilisateur](/userdoc_fr)
- * [Interface utilisateur](user_interface)
- * [Configurer un client email](email_configure_client_fr)
- * [Utiliser la messagerie instantanée XMPP](/XMPP_fr)
- * [Applications officielles](/apps_fr)
- * [Baïkal](/app_baikal_fr)
- * [Firefox Sync](/app_ffsync_fr)
- * [Jappix](/app_jappix_fr)
- * [Nextcloud](app_nextcloud_fr)
- * [Tiny Tiny RSS](/app_ttrss_fr)
- * [Transmission](/app_transmission_fr)
- * [Radicale](/app_radicale_fr)
- * [RoundCube](/app_roundcube_fr)
- * [Minidlna](app_minidlna_fr)
- * [Applications communautaires](/apps_in_progress_fr)
- * [LimeSurvey](/app_limesurvey_fr)
-
- * [Guide du contributeur](/contribute_fr)
- * Développement
- * [Créer un environnement de développement](ynh_dev_fr)
- * [Présentation du fonctionnement de YunoHost](/package_list_fr)
- * Applications :
- * [Packager des applications](/packaging_apps_fr)
- * [VirtualBox pour le packaging](packaging_apps_virtualbox_fr)
- * [Introduction](packaging_apps_start_fr.md)
- * [Manifeste](packaging_apps_manifest_fr)
- * [Scripts](packaging_apps_scripts_fr)
- * [Gestion des arguments](packaging_apps_arguments_management_fr)
- * [Configuration Nginx](packaging_apps_nginx_conf_fr)
- * [Multi-instance](packaging_apps_multiinstance_fr)
- * [Commandes pratiques](packaging_apps_helpers_fr)
- * [Usage de trap](packaging_apps_trap_fr)
- * [Niveaux des applications](packaging_apps_levels_fr)
- * [YEP - YunoHost Enhancement Proposals](packaging_apps_guidelines_fr)
- * [Packages d’applications en cours de développement](/apps_in_progress_fr)
- * [Liste de proposition d’applications](/apps_wishlist_fr)
- * [Contribuer au cœur de YunoHost](/dev_fr)
- * [Création de paquets système](/build_system_fr)
- * [Création de paquets Debian](/build_packages_fr)
- * [Créer une image pour carte ARM](/build_arm_image_en)
- * [Créer une image live USB](/create_live_usb_fr)
- * Documentation
- * [Création d’un compte pour l’édition de la documentation](/accounting_fr)
- * [Écrire de la documentation](/write_documentation_fr)
- * [Contribution](/contributordoc_fr)
-
-* Vie du projet :
- * [Journal des modifications v.2.0](/changelog_2_0_en)
- * [Journal des modifications v.2.2](/changelog_2_2_en)
- * [Feuille de route](/roadmap_en)
- * [Foire aux questions](/faq_fr)
- - [Organisation du projet](project_organization_fr)
- * [Contributeurs](contribs_fr)
- * [Entraide - support](/support_fr)
- * [Blog](https://forum.yunohost.org/c/announcement)
- - [Forum](https://forum.yunohost.org)
- - [Salons de discussions](chat_rooms_fr)
- * [Conférences](/conf_fr)
- * [Communication extérieure](communication_fr)
- * [Travail artistique](artworks_fr)
- * [Aide](/help_fr)
diff --git a/ssh.md b/ssh.md
index 741e9e1c..95dc819f 100644
--- a/ssh.md
+++ b/ssh.md
@@ -24,7 +24,7 @@ Assuming your IP address is `111.222.333.444`, open a terminal and enter :
ssh root@111.222.333.444
```
-A password will be asked. If this is a VPS, your VPS provided should have communicated you the password. On a fresh Raspberry Pi, the password should be `yunohost`. For an OLinuXino, this should be `olinux`.
+A password will be asked. If this is a VPS, your VPS provided should have communicated you the password. If you used a pre-installed image (for x86 computer or ARM board), the password should be `yunohost`.
#### Change the password!
@@ -58,7 +58,25 @@ ssh -p 2244 admin@your.domain.tld
By default, only the admin and root users can log in to YunoHost ssh server.
-YunoHost's users created via the administration interface are managed by the LDAP directory. By default, they can't connect via SSH for security reasons. See [here](https://forum.yunohost.org/t/ssh-disconnects-after-successful-login/256/10) if you absolutely want some users to have SSH access enabled.
+YunoHost's users created via the administration interface are managed by the LDAP directory. By default, they can't connect via SSH for security reasons. If you want some users to have SSH access enabled, use the command:
+
+```bash
+yunohost user ssh allow
+```
+
+It is also possible to remove ssh access using the following:
+
+```bash
+yunohost user ssh disallow
+```
+
+Finally, it is possible to add, delete and list ssh keys, to improve ssh access security, using the commands:
+
+```bash
+yunohost user ssh add-key
+yunohost user ssh remove-key
+yunohost user ssh list-keys
+```
## Security and SSH
diff --git a/ssh_fr.md b/ssh_fr.md
index 122ec553..7a8e97e3 100644
--- a/ssh_fr.md
+++ b/ssh_fr.md
@@ -2,7 +2,7 @@
## Qu’est-ce que SSH ?
-**SSH** est un accronyme pour Secure Shell, et désigne un protocole qui permet de contrôler à distance une machine via la ligne de commande (CLI). C'est aussi une commande disponible de base sur Linux et Mac OS / OSX. Sous Windows, maleureusement il vous faudra utiliser le logiciel [PuTTy](http://www.fastcomet.com/tutorials/getting-started/putty).
+**SSH** est un accronyme pour Secure Shell, et désigne un protocole qui permet de contrôler à distance une machine via la ligne de commande (CLI). C'est aussi une commande disponible de base sur Linux et Mac OS / OSX. Sous Windows, malheureusement il vous faudra utiliser le logiciel [PuTTy](http://www.fastcomet.com/tutorials/getting-started/putty).
## Pendant l’installation de YunoHost
@@ -24,7 +24,7 @@ En supposant que votre adresse IP est `111.222.333.444`, ouvrez un terminal et t
ssh root@111.222.333.444
```
-Un mot de passe sera demandé. Si c'est un VPS, votre fournisseur devrait également vous avoir communiqué un mot de passe. Sur un Raspberry Pi, le password devrait être `yunohost`. Sur un OLinuXino, cela devrait être `olinux`.
+Un mot de passe sera demandé. Si c'est un VPS, votre fournisseur devrait également vous avoir communiqué un mot de passe. Si vous avez utilisé une image pré-installée (pour x86 ou cartes ARM), le password devrait être `yunohost`.
#### Changer le mot de passe root !
@@ -42,7 +42,7 @@ ssh admin@111.222.333.444
Ensuite, entrez le mot de passe administrateur défini pendant la [post-installation](postinstall).
-Si vous avez configuré vos DNS (or tweaked your `/etc/hosts`), you can simply use your domain name :
+Si vous avez configuré vos DNS (ou modifié votre `/etc/hosts`), vous pouvez utiliser votre nom de domaine :
```bash
ssh admin@votre.domaine.tld
@@ -58,7 +58,24 @@ ssh -p 2244 admin@votre.domaine.tld
Par défaut, seulement les utilisateurs admin et root peuvent se logger en SSH sur une instance Yunohost.
-Les utilisateurs YunoHost créé via l'interface d'administration sont géré par la base de donnée LDAP. Par défaut, ils ne peuvent pas se connecter en SSH pour des raisons de sécurité. Si vous avez absolument besoin qu'un utilisateur dispose d'un accès SSH, vous pouvez utiliser [cette manipulation](https://forum.yunohost.org/t/ssh-disconnects-after-successful-login/256/10).
+Les utilisateurs YunoHost créés via l'interface d'administration sont géré par la base de donnée LDAP. Par défaut, ils ne peuvent pas se connecter en SSH pour des raisons de sécurité. Si vous avez absolument besoin qu'un utilisateur dispose d'un accès SSH, vous pouvez utiliser la commande :
+```bash
+yunohost user ssh allow
+```
+
+De même, il est possible de supprimer l'accès ssh à un utilisateur avec la commande :
+```bash
+yunohost user ssh disallow
+```
+
+Enfin, il est possible d'ajouter, de supprimer et de lister des clés ssh, pour améliorer la sécurité de l'accès ssh, avec les commandes :
+```bash
+yunohost user ssh add-key
+yunohost user ssh remove-key
+yunohost user ssh list-keys
+```
+
+
## SSH et sécurité
diff --git a/support.md b/support.md
deleted file mode 100644
index 57a7003d..00000000
--- a/support.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Support
-
-The YunoHost support is provided by the community members.
-
-* The **best and fastest** way to get answers remains the community chatroom, accessible on the bottom-right corner of this page, or via an XMPP compatible instant messaging client (like [Pidgin](https://pidgin.im)), at the following address:
-
- **[support@conference.yunohost.org](xmpp:support@conference.yunohost.org?join)**
-
----
-
-* You may also want to visit the **discussion forum**:
-
- **[forum.yunohost.org](https://forum.yunohost.org/)**
-
----
-
-* However, if you want to write specificaly to the YunoHost team, do not hesitate to send us an email. Please note that **we do not provide any support by email**.
-
- **[yunohost@yunohost.org](mailto:yunohost@yunohost.org)**
diff --git a/support_fr.md b/support_fr.md
deleted file mode 100644
index ea1b6003..00000000
--- a/support_fr.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Support - Entraide
-
-L’entraide autour de YunoHost est assurée par la communauté.
-
-* Le moyen le plus **efficace et rapide** d’obtenir des réponses reste le salon de discussion instantané, accessible en bas à droite de cette page, ou via n’importe quel client de messagerie **compatible XMPP** (tel que [Pidgin](https://pidgin.im)) à l’adresse suivante :
-
- **[support@conference.yunohost.org](xmpp:support@conference.yunohost.org?join)**
-
----
-
-* Vous pouvez également vous renseigner et poser vos questions sur **le forum** (en anglais de préférence) :
-
- **[forum.yunohost.org](https://forum.yunohost.org/)**
-
----
-
-* Enfin, si vous souhaitez vous adresser spécifiquement à l’équipe YunoHost, n’hésitez pas à nous envoyer un mail. **Attention, nous n’assurons aucun support par email**.
-
- **[yunohost@yunohost.org](mailto:yunohost@yunohost.org)**
diff --git a/torhiddenservice.md b/torhiddenservice.md
index 55c45abb..594b5a25 100644
--- a/torhiddenservice.md
+++ b/torhiddenservice.md
@@ -4,7 +4,7 @@ See https://www.torproject.org/docs/tor-hidden-service.html.en
### Installing Tor
```bash
-sudo apt-get install tor
+apt install tor
```
### Configuring our hidden service
@@ -43,4 +43,4 @@ If you want to avoid being redirected to the SSO portal at login, you can deacti
### Restart nginx
```bash
service nginx restart
-```
\ No newline at end of file
+```
diff --git a/torhiddenservice_fr.md b/torhiddenservice_fr.md
index 7b700af6..115907ce 100644
--- a/torhiddenservice_fr.md
+++ b/torhiddenservice_fr.md
@@ -4,7 +4,7 @@ Voir https://www.torproject.org/docs/tor-hidden-service.html.en (anglais)
### Installer Tor
```bash
-sudo apt-get install tor
+apt install tor
```
### Configurer notre service caché
@@ -40,7 +40,7 @@ Si vous voulez éviter d’être redirigé vers le portail à la connexion pour
#access_by_lua_file /usr/share/ssowat/access.lua;
```
-### Rédémarrer nginx
+### Redémarrer nginx
```bash
service nginx restart
-```
\ No newline at end of file
+```
diff --git a/troubleshooting_guide.md b/troubleshooting_guide.md
index c6ada8fc..190ec734 100644
--- a/troubleshooting_guide.md
+++ b/troubleshooting_guide.md
@@ -15,25 +15,25 @@ Keep in mind that when you install an app, you execute code on your server with
From my experience, some packaging are excellent and others can break some part of your YunoHost instance. Some packages are unmaintained. So before install check package issues, the [Forum](http://forum.yunohost.org/) and the [YunoHost support room](support_en) to see if other have problem with the app.
### Check the official documentation
-Answer to your question may be already in [the documentatioon](https://yunohost.org/#/sitemap_en).
+Answer to your question may be already in [the documentation](https://yunohost.org/#/docs_en).
### Check the command line help
-Learn how to use the [YunoHost commands](https://yunohost.org/#/moulinette_en) like a pro.
+Learn how to use the [YunoHost commands](https://yunohost.org/#/commandline) like a pro.
## Upgrade
-Problems oftenly occurs after an upgrade. After a YunoHost upgrade you may want to [update your apps](https://yunohost.org/#/app_update_en).
+Problems often occur after an upgrade. After a YunoHost upgrade you may want to [update your apps](https://yunohost.org/#/app_update_en).
-**Check if some processes are using old librairies**
+**Check if some processes are using old libraries**
You are probably familiar with:
```bash
-sudo apt-get update && sudo apt-get dist-upgrade
+$ apt update && apt dist-upgrade
```
Most of the time it's enough. But in some cases it's possible that some process are still using old versions of upgraded files (such as libraries), that can cause bug. In rare cases that can lead to security concern (ex: upgrade OpenSSL because of a security bug, Nginx will continue to use the version it has in memory). The utility Checkrestart will help you to find and restart them.
```bash
-sudo apt-get install debian-goodies
-sudo checkrestart
+$ apt install debian-goodies
+$ checkrestart
Found 0 processes using old versions of upgraded files
```
If some process are running with old librairies versions checkrestart will tell you and propose you a way to restart them. In some cases checkrestart can't find a way to restart them.
@@ -48,10 +48,10 @@ You can also use [this script](https://github.com/octopuce/octopuce-goodies/blob
/!\ Always check if there is a upgrade script and read it if you can /!\
```bash
-sudo yunohost app upgrade
+$ yunohost app upgrade
Warning: You must provide an URL to upgrade your custom app app_name
Error: No app to upgrade
-sudo yunohost app upgrade -u https://github.com/user/someapp_ynh app_name
+$ yunohost app upgrade -u https://github.com/user/someapp_ynh app_name
```
## Services
@@ -61,7 +61,7 @@ YunoHost uses a bunch of software to accomplish its purpose. Most of theses soft
When something doesn't work on your YunoHost, one of the first things to do is to check that all services used by YunoHost are running.
YunoHost include a helper to see the status of all services used by YunoHost:
```bash
-sudo yunohost service status
+$ yunohost service status
```
Sample result:
@@ -89,24 +89,22 @@ All services should be enabled and running. Except glances (optional). If some a
Others services installed by applications can also be present. For instance, `seafile-serve` which serves Seafile app and `uwsgi` which serve Python apps such as Searx.
##### Start or stop a service which is registered with YunoHost:
+
```bash
-sudo yunohost service start
-sudo yunohost service stop
+$ yunohost service start
+$ yunohost service stop
```
You can also use the generic Debian command:
```bash
-sudo service start/stop/restart/reload
+$ systemctl start/stop/restart/reload
```
After a launch attempt, always check that the service is running.
-**Note**: Debian Jessie now uses `systemd` instead of `upstart`, but, for now it's fully compatible with Debian Wheezy way to handle services. [Useful resource on systemd](https://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet).
-
### Logs
-If a service won't start you have to check the logs to see what's wrong. There is no generic way for services to store their logs, but there are mainly stocked in:
-```bash
-/var/log/
-```
+If a service won't start you have to check the logs to see what's wrong. There is no generic way for services to store their logs, but there are mainly stocked in: `/var/log/`
+
Here are the some useful logs files for YunoHost:
+
##### auth.log
Contains connections or attempt of connection to your server. It includes every web, ssh, cron job connection. It also stockes all the failed (hopefully) attempts to connect by a potential intruders connections.
@@ -122,7 +120,7 @@ XMPP chat server logs.
##### mysql.err, mysql.log, mysql/error.log
MySQL database logs, these should be empty unless you have trouble with MySQL.
-##### php5-fpm.log
+##### php7.0-fpm.log
Generic logs for PHP apps.
##### yunohost.log
@@ -228,7 +226,7 @@ You can view (don't edit it, it is oftently overwritten) your current SSOwat con
```
Which is generated with the command:
```bash
-sudo yunohost app ssowatconf
+yunohost app ssowatconf
```
Protip: if you want to add a personalized rule for SSOwat, do it in this file:
```bash
@@ -265,7 +263,7 @@ In each app packages you will find:
* **config/**: config directory
* **settings.yml**: config of the app, also accessible with:
```bash
-sudo yunohost app setting appname settingname
+yunohost app setting appname settingname
```
### Logs
diff --git a/troubleshooting_guide_fr.md b/troubleshooting_guide_fr.md
index def18ea2..31e516b7 100644
--- a/troubleshooting_guide_fr.md
+++ b/troubleshooting_guide_fr.md
@@ -1,6 +1,6 @@
# Guide de dépannage de YunoHost
-Vous pouvez considérer ce guide comme une sorte de guide de dépannage permettant de voir ce qu’il faut regarder quand vous rencontrer un problème avec votre serveur YunoHost. Ce n’est pas un guide pour remettre en état votre instance YunoHost mais plutôt une liste de choses à vérifier pour aider à diagnostiquer les problèmes rencontrés.
+Vous pouvez considérer ce guide comme une sorte de guide de dépannage permettant de voir ce qu’il faut regarder quand vous rencontrez un problème avec votre serveur YunoHost. Ce n’est pas un guide pour remettre en état votre instance YunoHost mais plutôt une liste de choses à vérifier pour aider à diagnostiquer les problèmes rencontrés.
Ce guide peut trouver son intérêt lors du débuggage d’une nouvelle application ou pour comprendre l’architecture de Yunohost.
## Notes générales
@@ -16,10 +16,10 @@ Garder à l’esprit que quand vous installez une application, vous exécutez du
et [le salon de discussion Yunohost](support_fr) pour voir si d’autres ont eu des problèmes avec l’application.
### Vérifier la documentation officielle
-Les réponses à vos questions existent peut être déjà dans [la documentation](sitemap_fr).
+Les réponses à vos questions existent peut être déjà dans [la documentation](docs_fr).
### Vérifier l’aide dans les commandes en ligne
-Vous pouvez apprendre à utiliser les [commandes YunoHost](moulinette_fr)
+Vous pouvez apprendre à utiliser les [commandes YunoHost](/commandline_fr)
## Mise à jour
Les problèmes ont souvent lieu après une mise à jour. Après une mise à jour, vous pouvez avoir envie de [mettre à jour votre application](app_update_fr).
@@ -28,17 +28,17 @@ Les problèmes ont souvent lieu après une mise à jour. Après une mise à jour
**Vérifier si un processus utilise une ancienne librairie**
vous avez sûrement l’habitude d’utiliser :
```bash
-sudo apt-get update && sudo apt-get dist-upgrade
+$ apt update && apt dist-upgrade
```
La plupart du temps, cela suffit. Mais dans certaines situations, il est possible que certains processus utilisent toujours d’anciennes bibliothèques non mises à jour.
Cela peut entraîner des bugs et, dans certains rares cas, des problèmes de sécurité (ex : lors d’une mise à jour de OpenSSL à cause d’une faille de sécurité, Nginx va continuer à utiliser la version dont il dispose en mémoire). L’utilitaire Checkrestart va vous aider à identifier ces processus et les redémarrer.
```bash
-sudo apt-get install debian-goodies
-sudo checkrestart
-Found 0 processes using old versions of upgraded files
+$ apt install debian-goodies
+checkrestart
+# Found 0 processes using old versions of upgraded files
```
-Si des processus fonctionnent avec des vielles versions de bibliothèques, checkrestart va vous dire et vous proposer une manière de les redémarrer. Il est possible que checkrestart ne trouve pas de manière de les redémarrer. Attention, il faut opérer l’opération manuellement.
+Si des processus fonctionnent avec des vieilles versions de bibliothèques, checkrestart va vous le dire et vous proposer une manière de les redémarrer. Il est possible que checkrestart ne trouve pas de manière de les redémarrer. Attention, il faut opérer l’opération manuellement.
@@ -52,10 +52,11 @@ Vous pouvez aussi utiliser [ce script](https://github.com/octopuce/octopuce-good
```bash
-sudo yunohost app upgrade
+$ yunohost app upgrade
Warning: You must provide an URL to upgrade your custom app app_name
Error: No app to upgrade
-sudo yunohost app upgrade -u https://github.com/user/someapp_ynh app_name
+
+$ yunohost app upgrade -u https://github.com/user/someapp_ynh app_name
```
## Les services
@@ -65,7 +66,7 @@ YunoHost utilise toute une série de logiciels pour fonctionner. La plupart de c
Quand quelque chose ne fonctionne pas, une des premières choses à faire est de vérifier que tous les services utilisés par YunoHost sont lancés.
YunoHost inclus un outil qui permet de visualiser tous les services utilisés par YunoHost :
```bash
-sudo yunohost service status
+yunohost service status
```
Exemple de résultat :
@@ -74,7 +75,7 @@ Exemple de résultat :
Tous les services doivent être activés (enabled) et en fonctionnement (running) sauf Glances (optionnel). Si certains ne le sont pas, essayez de les redémarrer.
Voici une petite description de leurs fonctions respectives :
-- **Amavis** : anti-spam/virus/malwares, utilisé quand lors de l’échange de mails.
+- **Amavis** : anti-spam/virus/malwares, utilisé lors de l’échange de mails.
- **Avahi-daemon** : système qui facilite la découverte d’ordinateurs sur le réseau local en leur attribuant des noms.
- **DNSmasq** : serveur DNS, vous n’êtes pas obligé de l’utiliser (Non installé par défaut)
- **Dovecot** : serveur IMAP, utilisé pour la réception de mails.
@@ -94,16 +95,14 @@ Voici une petite description de leurs fonctions respectives :
Les autres services installés par des applications vont aussi apparaître. Par exemple `seafile-serve` utilisé par l’application Seafile et `uwsgi` qui est utilisé par des applications python comme Searx.
##### démarrer ou arrêter un service identifié avec YunoHost :
```bash
-sudo yunohost service start
-sudo yunohost service stop
+yunohost service start
+yunohost service stop
```
Vous pouvez aussi utiliser la commande Debian :
```bash
-sudo service start/stop/restart/reload
+systemctl start/stop/restart/reload
```
Après une tentative de lancement, vérifiez toujours que le service est lancé.
-**Note** : Debian Jessie utilise désormais `systemd` à la place de `upstart`. Cela est pour l’instant toujours compatible avec la manière dont Debian Wheezy gère les services.
-[Ressources utiles sur systemd](https://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet).
### Logs
Si un service ne démarre pas, vous devez vérifier les logs pour voir ce qui ne pose problème. Il n’y a pas de règles définies où les services doivent stocker leurs logs. Cependant, ceux-ci se trouvent pour la plupart dans :
@@ -126,7 +125,7 @@ Logs du serveur de chat XMPP
##### mysql.err, mysql.log, mysql/error.log
Logs de la base de données MySQL. Ils doivent être vides sauf si vous avez des problèmes avec MySQL.
-##### php5-fpm.log
+##### php7.0-fpm.log
Lieu générique d’emplacement des logs pour les applications PHP.
##### yunohost.log
@@ -142,7 +141,7 @@ free -m
```
-5 à 10 % de mémoire libre est acceptable, mais il est bien de disposer d’une marge (en particulier pour les mises à jour). Comme la plupart du temps, vous ne pouvez pas augmenter votre quantitité de RAM, vous avez la possibilité d’utiliser une partition de SWAP (mémoire du disque dur attribuée à la RAM).
+5 à 10 % de mémoire libre est acceptable, mais il est bien de disposer d’une marge (en particulier pour les mises à jour). Comme la plupart du temps, vous ne pouvez pas augmenter votre quantité de RAM, vous avez la possibilité d’utiliser une partition de SWAP (mémoire du disque dur attribuée à la RAM).
Gardez à l’esprit que le SWAP est une mémoire 100 000 fois plus lente, vous devriez donc l’utiliser uniquement si vous n’avez pas d’autre choix.
##### créer un fichier de swap :
@@ -162,7 +161,7 @@ Changez 512 avec la quantité de mémoire SWAP que vous voulez.
[Source avec plus d’explication](https://meta.discourse.org/t/create-a-swapfile-for-your-linux-server/13880).
## Espace disque
-Un des autres problèmes communs des serveurs est le manque d’espace d’espace disque.
+Un des autres problèmes communs des serveurs est le manque d’espace disque.
Vous pouvez vérifier que votre disque n’est pas plein avec la commande :
```bash
df -h
@@ -203,7 +202,7 @@ alias YNH_WWW_ALIAS ; # chemin pour accéder aux sources des fichiers aux fichie
# Configuration particulière pour une application selon son langage de programmation et ses options de déploiement.
-# Inclure le logo SSOwat en bas à droit de la fenêtre
+# Inclure le logo SSOwat en bas à droite de la fenêtre
include conf.d/yunohost_panel.conf.inc;
}
```
@@ -227,12 +226,12 @@ Ce fichier devrait être vide avec une configuration correcte de Nginx. Si Nginx
Tous les accès à ce domaine (en prenant en comptes toutes les applications).
##### example.com-error.log
-Toutes les erreurs liées aux applications installées sur ce domaine, il se peut que certaines applications aient tous leurs logs surs dans ce fichier.
+Toutes les erreurs liées aux applications installées sur ce domaine, il se peut que certaines applications aient tous leurs logs soit dans ce fichier.
## SSOwat
[SSowat](https://github.com/Kloadut/SSOwat)
-est le logiciel qui connecte le serveur web nginx au serveur LDAP. Son but est d’authentifier les utilisateurs au portail YunHost pour pouvoir simplement changer entre les applications.
+est le logiciel qui connecte le serveur web nginx au serveur LDAP. Son but est d’authentifier les utilisateurs au portail YunoHost pour pouvoir simplement se déplaçer entre les applications.
### Configuration
Vous pouvez regarder le fichier de configuration SSOwat dans le fichier :
@@ -285,7 +284,7 @@ sudo yunohost app setting appname settingname
```
### Logs
-Il n’y a pas de fichier de log créé lors que vous installez une application. Essayez de conserver les logs. Vous pouvez trouver cependant certains logs peuvent se trouver dans :
+Il n’y a pas de fichier de log créé lorsque vous installez une application. Essayez de conserver les logs. Vous pouvez trouver cependant certains logs peuvent se trouver dans :
```bash
/var/log/yunohost/
```
@@ -366,4 +365,4 @@ Ne jamais installer le serveur web Apache ou un paquet avec Apache comme dépend
##### Note sur https
Parfois, le serveur web intégré avec l’application est capable de servir du https lui-même.
-C’est une bonne chose de l’utiliser quand vous disposez d’une application sans Nginx devant. Dans le cadre de YunoHost, le fait que Nginx serve du https simplifie la configuration. Donc, quand vous passez par proxy_pass, utilisez http et Nginx mettra a disposition en https pour le reste de l’internet.
+C’est une bonne chose de l’utiliser quand vous disposez d’une application sans Nginx devant. Dans le cadre de YunoHost, le fait que Nginx serve du https simplifie la configuration. Donc, quand vous passez par proxy_pass, utilisez http et Nginx le mettra a disposition en https pour le reste de l’internet.
diff --git a/try_ar.md b/try_ar.md
new file mode 100644
index 00000000..4ab216e4
--- /dev/null
+++ b/try_ar.md
@@ -0,0 +1,29 @@
+#تجريب YunoHost
+
+
+**ملاحظة :** يمكن لهذا السيرفر التجريبي أن يتوقف من وقت إلى آخر.
+
+
+
+
+
+
+
+
+
+
+
+***تم توفير الخادم التجريبي بفضل
+Gitoyen***
+
+
+
diff --git a/user_interface_fr.md b/user_interface_fr.md
index e9662533..0bdef82e 100644
--- a/user_interface_fr.md
+++ b/user_interface_fr.md
@@ -1,8 +1,8 @@
-#Interface utilisateur
+# Interface utilisateur
### Problème d’accès
-L’accès à la partie utilisateur peut se faire uniquement avec un nom de domaine. Vous ne pouvez pas y accéder en utilisant l’adresse IP locale de votre serveur comme suivi : https://adresse.ip.du.server/yunohost/sso
+L’accès à la partie utilisateur peut se faire uniquement avec un nom de domaine. Vous ne pouvez pas y accéder en utilisant l’adresse IP locale de votre serveur comme suit : https://adresse.ip.du.server/yunohost/sso
Vous pouvez créer une redirection d’un nom de domaine vers l’adresse IP du serveur en modifiant `/etc/hosts` et en ajoutant cette ligne :
@@ -10,8 +10,8 @@ Vous pouvez créer une redirection d’un nom de domaine vers l’adresse IP du
adresse.ip.du.server domaine.tld
```
-En remplaçant `adresse.ip.du.server` par exemple par `192.168.1.05` et `domaine.tld` par votre nom de domaine ou par un nom de domaine que vous pouvez choisir si vous n’en avez pas.
+En remplaçant `adresse.ip.du.server` par exemple par `192.168.1.5` et `domaine.tld` par votre nom de domaine ou par un nom de domaine que vous pouvez choisir si vous n’en avez pas.
### Logiciel
-L’interface utilisateur est basé sur le logiciel suivant : https://github.com/Kloadut/ssowat
\ No newline at end of file
+L’interface utilisateur est basé sur le logiciel suivant : https://github.com/Kloadut/ssowat
diff --git a/userdoc.md b/userdoc.md
index 53b92bd8..06e3826b 100644
--- a/userdoc.md
+++ b/userdoc.md
@@ -4,12 +4,4 @@
* [User interface](user_interface)
* [Configure an email client](/email)
* [Instant messaging usage](/XMPP)
-* [Official applications](/apps)
- * [Baikal](/app_baikal_en)
- * [Firefox Sync](/app_ffsync_en)
- * [Tiny Tiny RSS](/app_ttrss_en)
- * [Transmission](/app_transmission_en)
- * [Radicale](/app_radicale)
- * [RoundCube](/app_roundcube_en)
-* [Community applications](/apps_in_progress_en)
- * [LimeSurvey](/app_limesurvey_en)
+* [Applications](/apps)
diff --git a/userdoc_ar.md b/userdoc_ar.md
new file mode 100644
index 00000000..4eac43e3
--- /dev/null
+++ b/userdoc_ar.md
@@ -0,0 +1,7 @@
+
+# دليل مستخدمي واي يونوهوست YunoHost
+
+* [واجهة المستخدم](user_interface)
+* [البريد الإلكتروني](/email_fr)
+* [المحادثة الفورية و شبكات التواصل الإجتماعي XMPP](/XMPP_fr)
+* [التطبيقات](/apps_ar)
\ No newline at end of file
diff --git a/userdoc_fr.md b/userdoc_fr.md
index 766aa65e..469504c9 100644
--- a/userdoc_fr.md
+++ b/userdoc_fr.md
@@ -3,12 +3,4 @@
* [L’interface utilisateur](user_interface)
* [La messagerie électronique (email)](/email_fr)
* [La messagerie instantanée et les réseaux sociaux XMPP](/XMPP_fr)
-* [Les applications officielles](/apps_fr)
- * [Firefox Sync](/app_ffsync_fr)
- * [Jappix](/app_jappix_fr)
- * [Tiny Tiny RSS](/app_ttrss_fr)
- * [Transmission](/app_transmission_fr)
- * [Radicale](/app_radicale_fr)
- * [RoundCube](/app_roundcube_fr)
-* [Applications communautaires](/apps_in_progress_fr)
- * [LimeSurvey](/app_limesurvey_fr)
+* [Les applications](/apps_fr)
diff --git a/vagrant.md b/vagrant.md
index 4d85d128..fa165cdf 100644
--- a/vagrant.md
+++ b/vagrant.md
@@ -18,14 +18,11 @@ mkdir YunoHost
cd YunoHost
```
-The following command will initialize the project with a Yunohost image based on Debian Jessie
+The following command will initialize the project with a Yunohost image
```bash
-vagrant box add yunohost/jessie-stable https://build.yunohost.org/yunohost-jessie-stable.box --provider virtualbox
-vagrant init yunohost/jessie-stable
+vagrant box add yunohost/stretch-unstable https://build.yunohost.org/yunohost-stretch-unstable.box --provider virtualbox
+vagrant init yunohost/stretch-unstable
```
-
-/!\ If you prefer use the beta version : https://build.yunohost.org/yunohost-jessie-testing.box
-
You need to activate the network for the YunoHost instance.
```bash
@@ -47,7 +44,7 @@ vagrant ssh
Upgrade the system
```bash
-sudo apt-get update && sudo apt-get upgrade
+sudo apt update && sudo apt dist-upgrade
```
You can access to your vm with the ip 192.168.33.10
diff --git a/vagrant_fr.md b/vagrant_fr.md
index 2878e347..ebb0da31 100644
--- a/vagrant_fr.md
+++ b/vagrant_fr.md
@@ -20,13 +20,9 @@ cd YunoHost
La commande suivante va initialiser le projet avec une image YunoHost de base
```bash
-vagrant box add yunohost/jessie-stable https://build.yunohost.org/yunohost-jessie-stable.box --provider virtualbox
-vagrant init yunohost/jessie-stable
+vagrant box add yunohost/stretch-unstable https://build.yunohost.org/yunohost-stretch-unstable.box --provider virtualbox
+vagrant init yunohost/stretch-unstable
```
-
-/!\Si vous préférez utiliser la version beta https://build.yunohost.org/yunohost-jessie-testing.box
-
-
Puis, il faut activer le réseau pour l'instance YunoHost:
```bash
sed -i 's/# config\.vm\.network "private_network"/config.vm.network "private_network"/' Vagrantfile
@@ -48,7 +44,7 @@ vagrant ssh
Mettre à jour le système.
```bash
-sudo apt-get update && sudo apt-get upgrade
+apt update && apt dist-upgrade
```
Vous pouvez accéder à votre vm via l’ip 192.168.33.10.
diff --git a/vpn_advantage_fr.md b/vpn_advantage_fr.md
index 009e2560..67545d6e 100644
--- a/vpn_advantage_fr.md
+++ b/vpn_advantage_fr.md
@@ -9,9 +9,9 @@ L'installation d'un serveur chez soi étant une pratique peu courante, la plupar
## Avantages
### Plug & Play
-En configurant un VPN sur votre serveur, vous serez en mesure de le rendre accessible au reste d'Internet sans avoir à modifier la configuration du routeur auxquel vous le branchez. Ce point peut être vraiment pratique si vous partez en vacances, que vous déménagez ou que vous ayez une coupure d'Internet car vous serez en mesure de le brancher facilement chez une personne de confiance sans avoir besoin de configurer le routeur de la personne qui vous aide.
+En configurant un VPN sur votre serveur, vous serez en mesure de le rendre accessible au reste d'Internet sans avoir à modifier la configuration du routeur auxquel vous le branchez. Ce point peut être vraiment pratique si vous partez en vacances, que vous déménagez ou si vous avez une coupure d'Internet, car vous serez en mesure de le brancher facilement chez une personne de confiance sans avoir besoin de configurer le routeur de la personne qui vous aide.
-De la même façon, vous vous économisez l'ouverture des ports de votre routeur ainsi que le coutournement du hairpinning.
+De la même façon, vous vous économisez l'ouverture des ports de votre routeur ainsi que le contournement du hairpinning.
### Pas de micro-coupure DNS
Si votre connexion Internet n'a pas d'IP publique fixe, vous serez obligé de mettre en place un nom de domaine dynamique (Dynamique DNS). Cette solution peut être acceptable, mais la mise à jour du DNS ne se fera qu'à intervalle régulier (Toutes les deux minutes si c'est un nom de domaine en `noho.st` ou `nohost.me`). Il y a donc une chance que cela provoque de temps en temps des erreurs d'affichage dans le navigateur, voir même qu'un autre site s'affiche (les risques sont toutefois réduit car la pratique de l'auto-hébergement n'est pas répandue).
@@ -43,4 +43,4 @@ Lorsque l'on met en place un VPN sur son serveur, si on ne met pas en place de c
Pour pallier à ce point, il y a deux solutions :
- transformer son serveur en routeur et connecter les équipements de la maison à ce dernier, ces équipements bénéficieront alors de la confidentialité du VPN également.
-- utiliser le serveur YunoHost comme solveur DNS lorsque l'on est chez soi, de façon à rediriger les noms de domaines du serveur l'ip locale plutôt que l'ip publique. Cette opération peut se faire soit sur chaque équipements, soit sur le routeur (si ce dernier le permet).
+- utiliser le serveur YunoHost comme résolveur DNS lorsque l'on est chez soi, de façon à rediriger les noms de domaines du serveur l'ip locale plutôt que l'ip publique. Cette opération peut se faire soit sur chaque équipements, soit sur le routeur (si ce dernier le permet).
diff --git a/whatsyunohost.md b/whatsyunohost.md
index d56a1c9d..c8242f55 100644
--- a/whatsyunohost.md
+++ b/whatsyunohost.md
@@ -38,7 +38,7 @@ It can thus be considered as a distribution, including the following software:
* [Postfix](http://www.postfix.org/): an SMTP e-mail server
* [Dovecot](http://www.dovecot.org/): an IMAP and a POP3 e-mail server
* [Rspamd](https://rspamd.com/): an e-mail spam filtering
-* [Metronome](http://www.lightwitch.org/metronome): an XMPP server
+* [Metronome](https://metronome.im/): an XMPP server
* [OpenLDAP](http://www.openldap.org/): an LDAP server
* [Dnsmasq](http://www.thekelleys.org.uk/dnsmasq/doc.html): a DNS server
* [SSOwat](https://github.com/Kloadut/SSOwat): a Single Sign On (SSO) web authentication system
@@ -118,4 +118,16 @@ First, the software is too young, not tested at large scale and thus probably no
You can host your friends, your family and your company safely and with ease, but you have to **trust your users**, and they have to trust you above all. If you do want to provide YunoHost services for unknown persons anyway, a full VPS per user will be just fine, and we believe is a better way to go.
+---
+### Art Works
+
+Black and white YunoHost png logo done by ToZz (400 × 400 px):
+
+
+
+
+
+Click to download.
+
+Licence: CC-BY-SA 4.0
diff --git a/whatsyunohost_ar.md b/whatsyunohost_ar.md
new file mode 100644
index 00000000..f32b896b
--- /dev/null
+++ b/whatsyunohost_ar.md
@@ -0,0 +1,139 @@
+#
ماذا نعني بـ واي يونوهوست YunoHost ؟
+
+
+واي يونوهوست YunoHost هو **نظام لتشغيل الخوادم** صُمِّم لتسهيل الإستضافة الذاتية لخدمات الإنترنت.
+هو مُرتكز و منسجم كافة الإنسجام مع توزيعة [غنو/لينكس ديبيان](https://debian.org).
+
+
+
+
+---
+
+###
خصائصه
+
+
+- متعدد المستعملين مع تكامُل LDAP
+- متعدد النطاقات
+- خدمة البريد الإلكتروني
+- خادم المراسلة الفورية
+- نظام للمصادقة الموحَّدة (SSO)
+- نظام للتطبيقات
+- نظام للنسخ الإحتياطي
+- نظام لإعادة توليد الإعدادات و الخدمات
+
+
+
+
+---
+
+###
البرمجيات
+
+عمليًا، يقوم واي يونوهوست YunoHost **بالتنصيب و الإعداد الآلي** لبعض الخدمات التي تشتغل حول نظام LDAP، و كذا **بتوفير الأدوات اللازمة** لإدارتها.
+
+لذا يمكن اعتباره كتوزيعة بحد ذاتها تضم كل مِن البرمجيات التالية :
+
+
+
+
+
+
+
+
+
+
+
+* [Nginx](http://nginx.org/) : خادم صفحات الويب
+* [Postfix](http://www.postfix.org/) : خادم للبريد الإلكتروني الصادر عبر بروتوكول SMTP
+* [Dovecot](http://www.dovecot.org/) : خادم للبريد الإلكتروني عبر بروتوكولي IMAP و POP3
+* [Rspamd](https://rspamd.com/) : مُضاد للبريد المُزعج
+* [Metronome](http://www.lightwitch.org/metronome) : خادم للمحادثة الفورية عبر بروتوكول XMPP
+* [OpenLDAP](http://www.openldap.org/) : un système d’annuaire
+* [Dnsmasq](http://www.thekelleys.org.uk/dnsmasq/doc.html) : خادم أسماء النطاقات دي آن أس DNS
+* [SSOwat](https://github.com/Kloadut/SSOwat) : (SSO) نظام للمصادقة عبر الويب
+- [Let's Encrypt](https://letsencrypt.org): مدير للشهادات الإلكترونية الآمنة
+
+
+---
+
+###
نظام للتطبيقات
+
+
+بالإضافة إلى ما سبق، يُوَفِّرُ YunoHost نظامًا "للتطبيقات" على شكل **مُستودَع مُجتمعاتيّ** من السكريبتات التي تساعد المستخدِم على تثبيت خدمات و تطبيقات ويب إضافية.
+
+La chose la plus intéressante avec ce système est que **les applications web profitent de la base LDAP** via le SSO (Single Sign On), qui authentifie les utilisateurs du serveur avec un unique nom d’utilisateur/mot de passe.
+
+
+
+قد تهمكم قراءة صفحة [الدليل حول التحزيم](/packaging_apps_fr) وصفحة جيت هب الخاصة بـ[SSOwat](https://github.com/YunoHost/SSOwat/) لمعرفة المزيد.
+
+
+
+
+
+
+
+
+
+
+
+---
+
+###
أصل فكرة المشروع
+
+
+تعود نشأة فكرة مشروع واي يونوهوست YunoHost إلى شهر فيفري مِن عام 2012 بعد محادثة بدأت على هذا الشكل تقريبًا :
+
+
« تبًا، لقد سئِمتُ مِن إعادة إعداد خادم البريد الإلكتروني ... Beudbeud، كيف قُمتَ بإعداد خادومك الجميل حول LDAP ؟ »
+Kload، فيفري 2012
+
+
+Il ne manquait en fait qu’une interface d’administration au serveur de Beudbeud pour en faire quelque chose d’exploitable, alors Kload a décidé de la développer. Finalement, après l’automatisation de quelques configurations et le packaging de quelques applications web, la première version de YunoHost était sortie.
+
+Constatant l’engouement croissant autour de YunoHost et de l’auto-hébergement en général, les développeurs et les nouveaux contributeurs ont alors décidé de prendre le cap d’une version 2, plus accessible, plus extensible, plus puissante, et qui prépare du bon café commerce équitable pour les lutins de Laponie.
+
+
+---
+
+###
الهدف
+
+يهدف واي يونوهوست YunoHost إلى تسهيل عملية تنصيب و تثبيت و إدارة أي خادمٍ لأكبر عدد ممكن مِن الناس و ذلك دون المساس بجودة و موثوقية البرمجيات.
+
+لم يُدَّخر أي جهد لتسهيل عملية التنصيب و الإنبساط وذلك على أكبر عدد ممكن مِن الأجهزة مهما اختلفت مميزات كل جهاز (في المنزل أو على خادوم إستضافة أو على خادوم شخصي إفتراضي)
+
+
+---
+
+###
التسمية
+
+
+**YunoHost** مُستمَدٌّ مِن لُغة الإنترنت العاميّة « Y U NO Host » و بالمعنى التقريبي « لماذا لا تستضيف نفسك بنفسك ». [ميم الإنترنت](https://ar.m.wikipedia.org/wiki/%D9%85%D9%8A%D9%85_%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA) الذي يصف المعنى بالتقريب هو :
+
+
+
+---
+
+###
التطوير
+
+YunoHost est développé pour être le plus **simple** et le moins intrusif possible pour garder la compatibilité avec Debian. Il propose uniquement un ensemble de configurations automatiques et opère via des interfaces accessibles.
+
+Le tout est bien entendu **entièrement libre**. La philosophie de l’[الإستضافة الذاتية](selfhosting_fr) étant à nos yeux incompatible avec tout autre modèle de développement logiciel.
+
+لا تتردّدوا في زيارة صفحة « [ساهموا](/contribute_ar) ».
+
+
+---
+
+### الأمان
+
+لقد بُذِلت كل المجهودات مِن أجل تأمين واي يونوهوست YunoHost و **تعمية و تشفير البروتوكولات** . بإمكانكم الإطلاع على الشرح بتفاصيليه [هنا](/security_fr).
+ واي يونوهوست YunoHost ليس
+
+Même si YunoHost est multi-domaine et multi-utilisateur, il reste **inapproprié pour un usage mutualisé**.
+
+Premièrement parce que le logiciel est trop jeune, donc non-testé et non-optimisé pour être mis en production pour des centaines d’utilisateurs en même temps. Et quand bien même, ce n’est pas le chemin que l’on souhaite faire suivre à YunoHost. La virtualisation se démocratise, et c’est une façon bien plus étanche et sécurisée de faire de la mutualisation.
+
+Vous pouvez héberger vos amis, votre famille ou votre entreprise sans problème, mais vous devez **avoir confiance** en vos utilisateurs, et ils doivent de la même façon avoir confiance en vous. Si vous souhaitez tout de même fournir des services YunoHost à des inconnus, **un VPS entier par utilisateur** sera la meilleure solution.
+
\ No newline at end of file
diff --git a/whatsyunohost_fr.md b/whatsyunohost_fr.md
index 89dee539..52b474ec 100644
--- a/whatsyunohost_fr.md
+++ b/whatsyunohost_fr.md
@@ -13,7 +13,7 @@ Il est basé et reste totalement compatible avec [Debian GNU/Linux](https://debi
- multi-domaines
- un système d’emails
- un serveur de messagerie instantanée
-- un système d’authentifaction unique (SSO)
+- un système d’authentification unique (SSO)
- un système d’applications
- un système de backup
- un système de régénération de configuration des services
@@ -54,7 +54,7 @@ En complément, YunoHost fournit un système d’« app » qui n’est autre q
La chose la plus intéressante avec ce système est que **les applications web profitent de la base LDAP** via le SSO (Single Sign On), qui authentifie les utilisateurs du serveur avec un unique nom d’utilisateur/mot de passe.
-Vous serez peut-être intéressé à la lecture de la [documentation sur le packaging](/packaging_apps_fr) et la page GitHub d’[SSOwat](https://github.com/Kloadut/SSOwat) pour aller plus loin.
+Vous serez peut-être intéressé à la lecture de la [documentation sur le packaging](/packaging_apps_fr) et la page GitHub d’[SSOwat](https://github.com/YunoHost/SSOwat/) pour aller plus loin.
@@ -74,7 +74,7 @@ YunoHost est un projet né en février 2012 à la suite d’à peu près ça :
-Il ne manquait en fait qu’une interface d’administration au serveur de Beudbeud pour en faire quelque chose d’exploitable, alors Kload a décidé de la développer. Finalement, après l’automatisation de quelques configurations et le packaging de quelques applications web, YunoHost version 1 était sorti.
+Il ne manquait en fait qu’une interface d’administration au serveur de Beudbeud pour en faire quelque chose d’exploitable, alors Kload a décidé de la développer. Finalement, après l’automatisation de quelques configurations et le packaging de quelques applications web, la première version de YunoHost était sortie.
Constatant l’engouement croissant autour de YunoHost et de l’auto-hébergement en général, les développeurs et les nouveaux contributeurs ont alors décidé de prendre le cap d’une version 2, plus accessible, plus extensible, plus puissante, et qui prépare du bon café commerce équitable pour les lutins de Laponie.
@@ -118,3 +118,17 @@ Même si YunoHost est multi-domaine et multi-utilisateur, il reste **inappropri
Premièrement parce que le logiciel est trop jeune, donc non-testé et non-optimisé pour être mis en production pour des centaines d’utilisateurs en même temps. Et quand bien même, ce n’est pas le chemin que l’on souhaite faire suivre à YunoHost. La virtualisation se démocratise, et c’est une façon bien plus étanche et sécurisée de faire de la mutualisation.
Vous pouvez héberger vos amis, votre famille ou votre entreprise sans problème, mais vous devez **avoir confiance** en vos utilisateurs, et ils doivent de la même façon avoir confiance en vous. Si vous souhaitez tout de même fournir des services YunoHost à des inconnus, **un VPS entier par utilisateur** sera la meilleure solution.
+
+---
+
+# Logo
+
+Logo Yunohost noir et blanc réalisé par ToZz (400 × 400 px) :
+
+
+
+Cliquer pour télécharger.
+
+Licence: CC-BY-SA 4.0
diff --git a/write_documentation.md b/write_documentation.md
index 3c2d9a8d..2a748942 100644
--- a/write_documentation.md
+++ b/write_documentation.md
@@ -2,9 +2,11 @@
## Online
-This site allows to edit content directly online. You can edit any page by pressing `ESC` on your keyboard or by clicking the "Edit" button on the bottom-right side of your screen. You will be able to preview your changes by pressing `ESC` again or by clicking the "preview" button.
+This site allows to edit content directly online.
-** Note: ** If you don't have any account you will have to send the modifications manually.
+You can edit any page by pressing `ESC` on your keyboard or by clicking the "Edit" button on the bottom-right side of your screen. You will be able to preview your changes by pressing `ESC` again or by clicking the "preview" button.
+
+Once edited, you are able to submit your change by filling an email address.
## Via GitHub
@@ -12,4 +14,4 @@ The YunoHost documentation is managed through a [git repository](https://github.
## Syntax
-This page use the markdown syntax, please refer to the [documentation](http://daringfireball.net/projects/markdown/syntax) for further information.
\ No newline at end of file
+This page use the markdown syntax, please refer to the [documentation](https://guides.github.com/features/mastering-markdown/) for further information.
diff --git a/write_documentation_fr.md b/write_documentation_fr.md
index 6641c42e..2c280f83 100644
--- a/write_documentation_fr.md
+++ b/write_documentation_fr.md
@@ -1,19 +1,17 @@
# Rédaction de la documentation
-## Sur le site
+## Sur le site
Ce site permet d’éditer le contenu directement en ligne.
-
-Pour éditer une page, appuyez pour la touche `Échap` ou cliquez sur le bouton « Éditer » en bas à droite de la page. Vous pourrez visualiser vos modifications en appuyant de nouveau sur `Échap`, ou en cliquant sur le bouton « Aperçu » en bas à droite de la page.
-Une fois l’édition effectuée, vous pouvez soumettre vos modifications par mail, ou via un [compte](/accounting_fr).
+Pour éditer une page, appuyez sur la touche `Échap` ou cliquez sur le bouton « Éditer » en bas à droite de la page. Vous pourrez visualiser vos modifications en appuyant de nouveau sur `Échap`, ou en cliquant sur le bouton « Aperçu » en bas à droite de la page.
-** Note :** Si vous n’avez pas de compte, vous devrez envoyer vos modifications manuellement.
+Une fois l’édition effectuée, vous pouvez soumettre vos modifications en renseignant un mail.
-## Via GitHub
+## Via GitHub
-La documentation de YunoHost est gérée par un [dépot Git](https://github.com/YunoHost/doc). Vous pouvez envoyer des pull-requests.
+La documentation de YunoHost est gérée par un [dépot Git](https://github.com/YunoHost/doc). Vous pouvez envoyer des pull-requests.
## Syntaxe
-La documentation utilise la syntaxe Markdown. Veuillez vous référer à la [documentation](http://daringfireball.net/projects/markdown/syntax) pour plus d’informations.
+La documentation utilise la syntaxe Markdown. Veuillez vous référer à la [documentation](https://guides.github.com/features/mastering-markdown/) (en) pour plus d’informations.
diff --git a/ynh_dev_fr.md b/ynh_dev_fr.md
deleted file mode 100644
index fe8f99a9..00000000
--- a/ynh_dev_fr.md
+++ /dev/null
@@ -1,91 +0,0 @@
-## Créer un environnement de développement
-
-
-
-Ce document a pour but de donner les clés pour créer un environnement de développement correct afin de développer sur le cœur de YunoHost. Il peut également vous permettre de tester vos applications que ce soit avec les versions `stable`, `testing`, `unstable` ou même des versions customisées issues des branches des dépôts.
-
-### Installation de l’environnement de développement
-#### Installation du système de virtualisation
-Installer, avec le gestionnaire de paquet de votre système d’exploitation, Vagrant.
-
-```bash
-# Debian, Ubuntu, Mint
-sudo apt-get install vagrant
-# Fedora
-sudo dnf install vagrant
-```
-
-#### Télécharger `ynh-dev`
-
-
-Une ligne de commande `ynh-dev` a été créée afin de simplifier la gestion de votre environnement de développement.
-
-```bash
-wget https://raw.githubusercontent.com/yunohost/ynh-dev/master/ynh-dev
-chmod u+x ynh-dev
-```
-Pour créer votre environnement, commencez par faire un `create-env`
-```bash
-./ynh-dev create-env ~/project/my/yunohost/env
-```
-Cette sous commande va cloner les dépôts principaux au fonctionnement de YunoHost et les positionner en `unstable`. Si vous avez vos propres fork, vous pouvez ensuite faire ce qu’il faut pour changer l’origine et le remote repository.
-
-#### Usage
-##### Lancer un container
-Positionner vous dans votre environnement, puis créer et entrer dans une vm à l’aide de `ynh-dev run`
-```bash
-cd ~/project/my/yunohost/env
-./ynh-dev run exemple.local stable8
-root@yunohost:/# cd yunohost
-root@yunohost:/yunohost/# ls
-Dockerfile LICENSE README.md SSOwat apps backup moulinette ynh-dev yunohost yunohost-admin yunohost-vagrant
-```
-
-##### Mettre à jour un container
-Si la vm n’est pas à jour lancez un `ynh-dev upgrade` :
-```bash
-root@yunohost:/yunohost/# ./ynh-dev upgrade
-```
-
-##### Déployer les sources présentes dans votre environnement
-Pour déployer les sources se trouvant dans votre environnement de développement faites :
-```bash
-root@yunohost:/yunohost/# ./ynh-dev deploy
-```
-
-
-
-##### Lancer la postinstall
-Avec VirtualBox/Vagrant
-```bash
-root@yunohost:/yunohost/# yunohost tools postinstall
-```
-
-##### Récupérer l’IP de la vm et paramétrer son `/etc/hosts`
-si vous ne connaissez pas l’IP de votre vm :
-```bash
-root@yunohost:/yunohost/# ./ynh-dev ip
-172.17.0.1
-```
-
-Pour tester dans votre navigateur vous pouvez modifier votre fichier `/etc/hosts` afin de faire pointer votre domaine sur la bonne adresse IP. Par exemple en y ajoutant une ligne semblable à celle-ci :
-```bash
-172.17.0.1 exemple.local
-```
-
-##### Déployer les sources au fur et à mesure des modifications
-```bash
-root@yunohost:/yunohost/# ./ynh-dev watch
-```
-
-Astuce : dans le cas de modification sur yunohost-admin, cette commande est très pratique couplée avec un `gulp watch` sur la machine hôte.