From 5293df5c33a51c912511f041066045b1d22ee968 Mon Sep 17 00:00:00 2001 From: Jaxom99 <30865395+Jaxom99@users.noreply.github.com> Date: Mon, 20 May 2019 10:57:49 +0200 Subject: [PATCH 001/360] Update domains.md add costs and limitation of dynDNS --- domains.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domains.md b/domains.md index 382b6833..31f724a5 100644 --- a/domains.md +++ b/domains.md @@ -3,7 +3,7 @@ Domains, DNS conf and certificate YunoHost allows you to manage and serve several domains on the same server. For instance, you can host a blog and Nextcloud on a first domain `yolo.com`, and a web mail client on a second domain `swag.nohost.me`. Each domain is automatically configured to handle web services, mail services and XMPP services. -Domains can be managed in the 'Domain' section of the webadmin, or through the `yunohost domain` category of the command line. Each time you add a domain, it is expected that you bought it (or own it) on a domain registrar, so you can manage the [DNS configuration](dns). The exception is the [domains `.nohost.me`, `.noho.st` and `ynh.fr`](/dns_nohost_me) which are free and can be directly integrated with YunoHost. +Domains can be managed in the 'Domain' section of the webadmin, or through the `yunohost domain` category of the command line. Each time you add a domain, it is expected that you bought it (or own it) on a domain registrar, so you can manage the [DNS configuration](dns). The exception is the [`.nohost.me`, `.noho.st` and `ynh.fr` domains](/dns_nohost_me) which are paid for by the YunoHost Project, and can be directly integrated with YunoHost thanks to an automated dynDNS setup. (To limit costs and abuses, each instance may only have one of these domains setup at any given time). The domain chosen during the postinstall is defined as the main domain of the server : this is where the SSO and the web admin interface will be available. The main domain can later be changed through the web admin in Domains > (the domain) > Set default, or with the command line `yunohost tools maindomain`. From 3f4af686c3f77a92f4396e373f4a53ffdf808310 Mon Sep 17 00:00:00 2001 From: Jaxom99 <30865395+Jaxom99@users.noreply.github.com> Date: Mon, 20 May 2019 10:59:11 +0200 Subject: [PATCH 002/360] ajout couts et limites dynDNS --- domains_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domains_fr.md b/domains_fr.md index bd9d1a91..d58fcd35 100644 --- a/domains_fr.md +++ b/domains_fr.md @@ -3,7 +3,7 @@ Domaines, configuration DNS et certificats YunoHost permet de gérer et de servir plusieurs domaines sur un même serveur. Vous pouvez donc héberger, par exemple, un blog et un Nextcloud sur un premier domaine `yolo.com`, et un client de messagerie web sur un second domaine `swag.nohost.me`. Chaque domaine est automatiquement configuré pour pouvoir gérer des services web, des courriels et une messagerie instantannée XMPP. -Les domaines peuvent être gérés dans la section 'Domaine' de la webadmin, ou via la catégorie `yunohost domain` de la ligne de commande. Chaque fois que vous ajoutez un domaine, il est supposé que vous avez acheté (ou en tout cas que vous contrôliez) le domaine, de sorte que vous puissiez gérer la [configuration DNS](dns) ce celui-ci. Une exception concerne les domaines en [`.nohost.me`, `.noho.st` et `ynh.fr`](/dns_nohost_me_fr) qui sont gratuits et peuvent être directement intégrés avec YunoHost. +Les domaines peuvent être gérés dans la section 'Domaine' de la webadmin, ou via la catégorie `yunohost domain` de la ligne de commande. Chaque fois que vous ajoutez un domaine, il est supposé que vous avez acheté (ou en tout cas que vous contrôliez) le domaine, de sorte que vous puissiez gérer la [configuration DNS](dns) ce celui-ci. Une exception concerne les [domaines en `.nohost.me`, `.noho.st` et `ynh.fr`](/dns_nohost_me_fr) qui sont offerts par le Projet YunoHost, et peuvent être directement intégrés avec YunoHost grâce à une configuration dynDNS automatique. (Pour limiter les abus et les coûts, une instance ne peut avoir qu'un seul domaine offert à la fois). Le domaine choisi lors de la postinstall est défini comme le domaine principal du serveur : c'est là que le SSO et l'interface d'administration web seront disponibles. Le domaine principal peut être modifié ultérieurement via la webadmin dans Domaines > (le domaine) > Définir par défaut, ou avec la ligne de commande `yunohost tools maindomain`. From c773b37967a3cd64bfb3056a35cc24dfd12d103e Mon Sep 17 00:00:00 2001 From: Jaxom99 <30865395+Jaxom99@users.noreply.github.com> Date: Mon, 20 May 2019 11:12:21 +0200 Subject: [PATCH 003/360] add how to change dynDNS subscription --- dns_nohost_me.md | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/dns_nohost_me.md b/dns_nohost_me.md index a40ccde3..112d87a0 100644 --- a/dns_nohost_me.md +++ b/dns_nohost_me.md @@ -1,6 +1,6 @@ -# Nohost.me domains +# DynDNS domains -In order to make self-hosting as accessible as possible, YunoHost offers a *free* +In order to make self-hosting as accessible as possible, the YunoHost Project offers a *free* and *automatically configured* domain name service. By using this service, you won't have to [configure DNS records](/dns_config) yourself, which can be tedious and technical. @@ -13,15 +13,12 @@ The following (sub)domains are proposed: To use this service, you simply have to choose such a domain during the post-installation. It will then be automatically configured by YunoHost ! -#### Retrieve a nohost.me or noho.st domain - -If you reinstall your server and want to use a domain already used previously, -you must request a domain reset on the forum -[in the dedicated thread](https://forum.yunohost.org/t/nohost-domain-recovery/442). +N.B.: As a fairness measure, each instance may only +have **one such domain** setup at any given time. #### Subdomains -The `nohost.me` and `noho.st` domain service does not allow the creation of +The `nohost.me`, `noho.st` and `ynh.fr` domain service does not allow the creation of subdomains. Even if YunoHost allows the installation of applications on subdomains (for @@ -33,14 +30,12 @@ application.mydomain.nohost.me`. To be able to enjoy applications that can only be installed at the root of a domain name, you must have your own domain name. -### Adding a nohost.me / noho.st / ynh.fr domain after the post-installation +### Adding a nohost.me, noho.st or ynh.fr domain after the post-installation If you already did the postinstall and want to add a nohost.me domain, you should run the following command (this can only be done from command line currently). -N.B. : you can only have *one* nohost.me domain per YunoHost installation. - ```bash # Add the domain yunohost domain add whateveryouwant.nohost.me @@ -53,3 +48,22 @@ yunohost dyndns subscribe -d whateveryouwant.nohost.me # Update the DNS conf yunohost dyndns update ``` + +#### Retrieve a nohost.me, noho.st or ynh.fr domain + +If you reinstall your server and want to use a domain already used previously, +you must request a domain reset on the forum +[in the dedicated thread](https://forum.yunohost.org/t/nohost-domain-recovery/442). + + +#### Change a nohost.me, noho.st or ynh.fr domain + +If you wish to use a different domain of this kind, you first have to remove +your present domain registration. This is done in 3 steps: + +1. Remove the domain from your instance (via webadmin or the `yunohost doamin remove` CLI). +**/!\ Caution: this will remove any app installed on this domain, along with its data.** +2. Ask for registration removal [in the dedicated forum thread](https://forum.yunohost.org/t/nohost-domain-recovery/442). +3. Remove automatic domain configuration files on your server, via CLI only : `sudo rm /etc/cron.d/yunohost-dyndns && sudo rm -r /etc/yunohost/dyndns` + +You may then add a new domain. From 73dcd29ffa4d407583e4bc13a25ef3f09932c983 Mon Sep 17 00:00:00 2001 From: Jaxom99 <30865395+Jaxom99@users.noreply.github.com> Date: Mon, 20 May 2019 11:24:42 +0200 Subject: [PATCH 004/360] update adding automatic domain after postinstall --- dns_nohost_me.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/dns_nohost_me.md b/dns_nohost_me.md index 112d87a0..3f0a0b71 100644 --- a/dns_nohost_me.md +++ b/dns_nohost_me.md @@ -1,6 +1,6 @@ -# DynDNS domains +# Nohost.me domains -In order to make self-hosting as accessible as possible, the YunoHost Project offers a *free* +In order to make self-hosting as accessible as possible, the YunoHost Project provides a *free* and *automatically configured* domain name service. By using this service, you won't have to [configure DNS records](/dns_config) yourself, which can be tedious and technical. @@ -32,9 +32,10 @@ domain name, you must have your own domain name. ### Adding a nohost.me, noho.st or ynh.fr domain after the post-installation -If you already did the postinstall and want to add a nohost.me domain, you -should run the following command (this can only be done from command line -currently). +If you already did the postinstall and want to add an automatic domain, you +may do so from the "Domains" web interface, selecting the option "I don't have a domain name..." + +Alternatively, the following commands can be used. ```bash # Add the domain @@ -58,7 +59,7 @@ you must request a domain reset on the forum #### Change a nohost.me, noho.st or ynh.fr domain -If you wish to use a different domain of this kind, you first have to remove +If you wish to use a different automatic domain, you first have to remove your present domain registration. This is done in 3 steps: 1. Remove the domain from your instance (via webadmin or the `yunohost doamin remove` CLI). From c47d076205a67a4621f79fe984287884f95dde1c Mon Sep 17 00:00:00 2001 From: Jaxom99 <30865395+Jaxom99@users.noreply.github.com> Date: Mon, 20 May 2019 11:26:29 +0200 Subject: [PATCH 005/360] ajout changement de domaine MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit et MàJ ajout de domaine après postinstall --- dns_nohost_me_fr.md | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/dns_nohost_me_fr.md b/dns_nohost_me_fr.md index 433d7e8f..8183af16 100644 --- a/dns_nohost_me_fr.md +++ b/dns_nohost_me_fr.md @@ -1,6 +1,6 @@ -# Noms de domaines nohost.me +# Noms de domaines automatiques -Afin de rendre l'auto-hébergement le plus accessible possible, YunoHost propose un service de noms de domaine *gratuits* et *automatiquement configurés*. En utilisant ce service, vous n'avez donc pas à réaliser vous-même la [configuration des enregistrements DNS](/dns_config) qui est assez technique. +Afin de rendre l'auto-hébergement le plus accessible possible, le Projet YunoHost fournit un service de noms de domaine *offerts* et *automatiquement configurés*. En utilisant ce service, vous n'avez donc pas à réaliser vous-même la [configuration des enregistrements DNS](/dns_config) qui est assez technique. Les (sous-)domaines suivants sont proposés : - `cequevousvoulez.nohost.me` ; @@ -9,26 +9,24 @@ Les (sous-)domaines suivants sont proposés : Pour profiter de ce service, il vous suffit de choisir un tel domaine lors de la post-installation. Il sera ensuite automatiquement configuré par YunoHost ! -### Récupérer un domaine nohost.me ou noho.st - -Si vous réinstallez votre serveur et voulez utiliser un domaine déjà utilisé précédemment, il vous faut demander une réinitialisation du domaine sur le forum [dans le fil de discussion dédié](https://forum.yunohost.org/t/nohost-domain-recovery/442). +N.B. : Pour des raisons d'équité, vous ne pouvez avoir qu'*un seul domaine* nohost.me par installation de +YunoHost. ### Sous-domaines -Le service de domaines `nohost.me` et `noho.st` n'autorise pas la création de sous-domaines. +Le service de domaines `nohost.me`, `noho.st` et `ynh.fr` n'autorise pas la création de sous-domaines. Même si YunoHost permet l'installation d'applications sur des sous-domaines (par exemple avoir l'application Owncloud accessible depuis l'adresse `cloud.mondomaine.org`), cette fonctionnalité n'est pas permise avec les domaines `nohost.me` et `noho.st` et il n’est pas possible d’avoir un sous-sous-domaine tel `monapplication.mondomaine.nohost.me`. Pour pouvoir profiter des applications installables uniquement à la racine d’un nom de domaine, il faut avoir son propre nom de domaine. -### Ajouter un domaine nohost.me / noho.st / ynh.fr après la post-installation +### Ajouter un domaine nohost.me, noho.st ou ynh.fr après la post-installation -Si vous avez déjà effectué la postinstallation est souhaitez ajouter un domaine -de type nohost.me, vous pouvez utiliser les commandes suivantes (uniquement -faisable depuis la ligne de commande pour le moment). +Si vous avez déjà effectué la postinstallation et souhaitez ajouter un domaine +de type nohost.me, vous pouvez utiliser la catégorie "Domaines" de l'interface web, +en choisissant l'option "je n'ai pas de nom de domaine..." -N.B. : vous ne pouvez avoir qu'*un* seul domaine nohost.me par installation de -YunoHost. +Vous pouvez également utiliser les commandes suivantes depuis la ligne de commande. ```bash # Ajouter le domaine @@ -37,9 +35,22 @@ yunohost domain add cequevousvoulez.nohost.me # Enregister le domaine dans le service dyndns yunohost dyndns subscribe -d cequevousvoulez.nohost.me -# [ attendre ~ 30 seconds ] +# [ attendre ~ 30 secondes ] # Mettre à jour la configuration DNS yunohost dyndns update ``` +### Récupérer un domaine nohost.me, noho.st ou ynh.fr + +Si vous réinstallez votre serveur et voulez utiliser un domaine automatique déjà utilisé précédemment, il vous faut demander une réinitialisation du domaine au Projet YunoHost, [dans le fil de discussion dédié du forum](https://forum.yunohost.org/t/nohost-domain-recovery/442). + +### Changer un domaine nohost.me, noho.st ou ynh.fr +Si vous voulez utiliser un autre domaine automatique sur votre serveur, vous devez d'abord supprimer celui qui est déjà configuré, selon les instructions suivantes : +1. Supprimer le domaine de votre instance (par webadmin ou `yunohost domain remove`). **Attention : cela supprimera +toute application installée sur ce domaine, ainsi que ses données**. +2. Demander la suppression de votre souscription [dans le fil de discussion dédié du forum](https://forum.yunohost.org/t/nohost-domain-recovery/442). +3. Enlever les fichiers de configuration automatique sur votre instance (uniquement depuis la ligne de commande pour le moment) : `sudo rm /etc/cron.d/yunohost-dyndns && sudo rm -r /etc/yunohost/dyndns` + + +Vous pourrez ensuite enregistrer un nouveau domaine automatique. From 07e13c60ac83b6ca20d1d15f718c4e4598961d12 Mon Sep 17 00:00:00 2001 From: Jaxom99 <30865395+Jaxom99@users.noreply.github.com> Date: Mon, 20 May 2019 11:29:38 +0200 Subject: [PATCH 006/360] add dyndns link --- dns_config.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dns_config.md b/dns_config.md index d9e08da9..c19c9f3b 100644 --- a/dns_config.md +++ b/dns_config.md @@ -5,7 +5,7 @@ DNS (domain name system) is a system that converts human-readable addresses easily accessible by human beings, and for some services like mail to work properly, DNS must be configured. -If you're using a nohost.me / noho.st domain, the configuration should be +If you're using an [automatic domain](/dns_nohost_me) provided by the YunoHost Project, the configuration should be performed automatically. If you're using your own domain name (e.g. bought via a registrar), you should manually configure your domain on your registrar's interface. From ed62be133fa34105a4fe3adf0e0c2592536b1150 Mon Sep 17 00:00:00 2001 From: Jaxom99 <30865395+Jaxom99@users.noreply.github.com> Date: Mon, 20 May 2019 11:31:27 +0200 Subject: [PATCH 007/360] ajout lien dynDNS --- dns_config_fr.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dns_config_fr.md b/dns_config_fr.md index b1024946..85038f10 100644 --- a/dns_config_fr.md +++ b/dns_config_fr.md @@ -7,8 +7,8 @@ votre serveur soit facilement accessible par d'autres êtres humains, et pour que certains services comme le mail fonctionnent correctement, il est nécessaire de configurer la zone DNS de votre domaine. -Si vous utilisez un domaine en nohost.me / noho.st domain, la configuration -devrait être faite automatiquement. Si vous utilisez votre propre nom de domaine +Si vous utilisez un [domaine automatique](/dns_nohost_me_fr) fourni par le Projet Yunohost, +la configuration devrait être faite automatiquement. Si vous utilisez votre propre nom de domaine (e.g. acheté chez un registrar), il vous faut configurer manuellement votre domaine via l'interface de votre registrar. From ea3b9dc715deace8b8191b3f213f1d4431a6f242 Mon Sep 17 00:00:00 2001 From: yalh76 <yalh@yahoo.com> Date: Sat, 25 May 2019 22:59:19 +0200 Subject: [PATCH 008/360] removing already existing applications --- apps_wishlist.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index b6059c6c..dbbf2bf4 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -23,12 +23,10 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Bookstack](https://www.bookstackapp.com/) - [Browsepass](http://techualization.blogspot.de/2013/09/introducing-browsepass-keepass-on-web.html) - [btcpayserver](https://github.com/btcpayserver/btcpayserver) -- [Caliopen](https://www.caliopen.org) - [Candy](https://candy-chat.github.io/candy) - [CardDavMate](https://www.inf-it.com/open-source/clients/carddavmate) - [cgit](http://git.zx2c4.com/cgit/about) - [CheckUp](https://sourcegraph.github.io/checkup) -- [CiviCRM](https://civicrm.org) - [Cloud torrent](https://github.com/jpillora/cloud-torrent) - [Cockpit](http://cockpit-project.org/) - [Commafeed](https://github.com/Athou/commafeed) @@ -42,7 +40,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Deluge](http://deluge-torrent.org) (with WebUI) - [DirectoryLister](https://github.com/DirectoryLister/DirectoryLister) - [DNSchain](https://github.com/okTurtles/dnschain) -- [Drupal](https://www.drupal.org/) - [eLabFTW](https://www.elabftw.net/) electronic lab notebook - [Emoncms](https://github.com/emoncms/emoncms) - [ERPnext](https://erpnext.com/download) From 1a2b100e6bda0a0d305d95fdc9c069d88afa2233 Mon Sep 17 00:00:00 2001 From: yalh76 <yalh@yahoo.com> Date: Sat, 25 May 2019 23:10:34 +0200 Subject: [PATCH 009/360] removing onlyoffice --- apps_wishlist.md | 1 - 1 file changed, 1 deletion(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index dbbf2bf4..fb297d1a 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -109,7 +109,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Museek+](https://github.com/eLvErDe/museek-plus) - [Nibbleblog](http://www.nibbleblog.com) - [Nuage](https://nuage.kerjean.me/login) -- [ONLYOFFICE Document Server](http://helpcenter.onlyoffice.com/server/linux/document/linux-installation.aspx) (to be able to use ONLYOFFICE inside Nextcloud) - [OpenBazaar](https://openbazaar.org) - [openHAB](https://www.openhab.org/) - Smart home platform. - [OpenJabNab](https://github.com/OpenJabNab/OpenJabNab) (/!\ last update: Apr 30, 2016) From 9e9fe183cbd70ba85a46e751900f2df36a58f6ac Mon Sep 17 00:00:00 2001 From: Luke Murphy <lukewm@riseup.net> Date: Mon, 3 Jun 2019 00:45:43 +0200 Subject: [PATCH 010/360] Filter against any match on /app searching Closes https://github.com/YunoHost/issues/issues/1347. --- apps.md | 2 +- apps_ar.md | 2 +- apps_fr.md | 2 +- apps_it.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps.md b/apps.md index 088b178a..535eace8 100644 --- a/apps.md +++ b/apps.md @@ -169,7 +169,7 @@ $(document).ready(function () { var valThis = $('#filter-app-cards').val().toLowerCase(); $('.app-card').each(function(){ var text = $(this).find('h3').text().toLowerCase(); - (text.indexOf(valThis) == 0 && $(this).find(filters_text).length > 0) ? $(this).show() : $(this).hide(); + (text.indexOf(valThis) >= 0 && $(this).find(filters_text).length > 0) ? $(this).show() : $(this).hide(); }); (filters.indexOf("working") == -1) ?$('#community-app-list-warrant').hide():$('#community-app-list-warrant').show(); } diff --git a/apps_ar.md b/apps_ar.md index 8ca360a5..d3b929bd 100644 --- a/apps_ar.md +++ b/apps_ar.md @@ -166,7 +166,7 @@ $(document).ready(function () { var valThis = $('#filter-app-cards').val().toLowerCase(); $('.app-card').each(function(){ var text = $(this).find('h3').text().toLowerCase(); - (text.indexOf(valThis) == 0 && $(this).find(filters_text).length > 0) ? $(this).show() : $(this).hide(); + (text.indexOf(valThis) >= 0 && $(this).find(filters_text).length > 0) ? $(this).show() : $(this).hide(); }); (filters.indexOf("working") == -1) ?$('#community-app-list-warrant').hide():$('#community-app-list-warrant').show(); } diff --git a/apps_fr.md b/apps_fr.md index 84aa2c1b..ea2df5b7 100644 --- a/apps_fr.md +++ b/apps_fr.md @@ -166,7 +166,7 @@ $(document).ready(function () { var valThis = $('#filter-app-cards').val().toLowerCase(); $('.app-card').each(function(){ var text = $(this).find('h3').text().toLowerCase(); - (text.indexOf(valThis) == 0 && $(this).find(filters_text).length > 0) ? $(this).show() : $(this).hide(); + (text.indexOf(valThis) >= 0 && $(this).find(filters_text).length > 0) ? $(this).show() : $(this).hide(); }); (filters.indexOf("working") == -1) ?$('#community-app-list-warrant').hide():$('#community-app-list-warrant').show(); } diff --git a/apps_it.md b/apps_it.md index 274acec3..236439c3 100644 --- a/apps_it.md +++ b/apps_it.md @@ -169,7 +169,7 @@ $(document).ready(function () { var valThis = $('#filter-app-cards').val().toLowerCase(); $('.app-card').each(function(){ var text = $(this).find('h3').text().toLowerCase(); - (text.indexOf(valThis) == 0 && $(this).find(filters_text).length > 0) ? $(this).show() : $(this).hide(); + (text.indexOf(valThis) >= 0 && $(this).find(filters_text).length > 0) ? $(this).show() : $(this).hide(); }); (filters.indexOf("working") == -1) ?$('#community-app-list-warrant').hide():$('#community-app-list-warrant').show(); } From 74a00e054c664256cf833e27763880c6381e419b Mon Sep 17 00:00:00 2001 From: Luke Murphy <lukewm@riseup.net> Date: Mon, 3 Jun 2019 01:02:21 +0200 Subject: [PATCH 011/360] Add note about how to live test --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bbdcfc2b..ed5d3ad2 100644 --- a/README.md +++ b/README.md @@ -3,4 +3,8 @@ * [Web Site](https://yunohost.org) * Based on [Simone](https://github.com/YunoHost/Simone) -Please report [issues on YunoHost bugtracker](https://github.com/YunoHost/issues/issues). \ No newline at end of file +Please report [issues on YunoHost bugtracker](https://github.com/YunoHost/issues/issues). + +You can live test any changes by adding `/edit` to the URL on +[yunohost.org](https://yunohost.org). For example, if you make changes to +[apps.md](./apps.md), you can test them on [yunohost.org/#/apps/edit](https://yunohost.org/#/apps/edit). From 129321d927c1551aed4c98559ca3c705838d3b6e Mon Sep 17 00:00:00 2001 From: yalh76 <yalh@yahoo.com> Date: Tue, 4 Jun 2019 22:59:41 +0200 Subject: [PATCH 012/360] Adding use case YunoHost for non-profits organisations --- docs.md | 3 + docs_ar.md | 3 + docs_de.md | 3 + docs_fr.md | 3 + docs_it.md | 3 + use_case_non-profit_organisations.md | 205 +++++++++++++++++++++++++++ 6 files changed, 220 insertions(+) create mode 100644 use_case_non-profit_organisations.md diff --git a/docs.md b/docs.md index 8998d56c..3c74ab2e 100644 --- a/docs.md +++ b/docs.md @@ -31,3 +31,6 @@ YunoHost's documentation has 3 different sections: * [Chat rooms](/chat_rooms_en) * [Communication](/communication_en) * [Support / Help](/help) + +* Use example: + * [YunoHost for non-profit organisations](/use_case_non-profit_organisations) diff --git a/docs_ar.md b/docs_ar.md index d4a85215..a2108021 100644 --- a/docs_ar.md +++ b/docs_ar.md @@ -31,3 +31,6 @@ * [Chat rooms](/chat_rooms_en) * [Communication](/communication_en) * [Support / Help](/help) + +* استخدم مثال: + * [YunoHost للمنظمات غير الهادفة للربح] (/ use_case_non-profit_organisations_en) diff --git a/docs_de.md b/docs_de.md index 81462e37..470c9945 100644 --- a/docs_de.md +++ b/docs_de.md @@ -31,3 +31,6 @@ Die YunoHost Dokumentation ist in 3 Bereiche aufgeteilt: * [Chaträume](/chat_rooms_en) * [Kommunikation](/communication_en) * [Support / Hilfe](/help) + +* Verwenden Sie ein Beispiel: + * [YunoHost für gemeinnützige Organisationen](/use_case_non-profit_organisations_en) diff --git a/docs_fr.md b/docs_fr.md index a7167a6d..6cfe292f 100644 --- a/docs_fr.md +++ b/docs_fr.md @@ -31,3 +31,6 @@ La documentation de YunoHost s’articule autour de trois sections : - [Salons de discussions](/chat_rooms_fr) * [Communication extérieure](/communication) * [Support / Aide](/help_fr) + +* Exemple d'utilisation: + * [YunoHost pour les organisations à but non lucratif](/use_case_non-profit_organisations_en) diff --git a/docs_it.md b/docs_it.md index 35a4077b..85afd4ba 100644 --- a/docs_it.md +++ b/docs_it.md @@ -31,3 +31,6 @@ La documentazione di YunoHost ha 3 differenti sezioni: * [Chat rooms](/chat_rooms_en) * [Communication](/communication_en) * [Supporto / Aiuto](/help_it) + +* Usa l'esempio: + * [YunoHost per le organizzazioni senza scopo di lucro](/use_case_non-profit_organisations_en) diff --git a/use_case_non-profit_organisations.md b/use_case_non-profit_organisations.md new file mode 100644 index 00000000..c85bf0ad --- /dev/null +++ b/use_case_non-profit_organisations.md @@ -0,0 +1,205 @@ +# YunoHost for non-profit + +## Table of Contents +* [Introduction](#introduction) +* [Who](#who) +* [What](#what) +* [When](#when) +* [Where](#where) +* [Why](#why) +* [How](#how) +* [Conclusion](#conclusion) +* [Authors](#authors) + +## Introduction <a id="introduction"></a> + +The object of this document is to present a specific use of [YunoHost](https://yunohost.org/) for non-profit organizations. + +## Who <a id="who"></a> + +Non-profit organizations, NGO or any kind of association. + +## What <a id="what"></a> + +Usually non-profit organizations need to provide several services to several publics: + +* Board of Directors / Steering Committee / Volunteers with: + * [Mails](#mail) + * [Calendar](#calendar) + * [Contact](#contact) + * [Shared files / Drive](#drive) + * [Instant communication](#im) + * [Intranet / knowledge database](#intranet) + * [ERP / Accounting](#erp) +* Members with: + * [Public website with private and individual access](#www) + * [Membership](#membership) + * [Events registrations](#events) + * [Mailings](#mailing) + * [Forum](#forum) +* Public with: + * [Public website](#www) + * [Newsletter](#mailing) + +## When <a id="when"></a> + +When ready to move forward. + +## Where <a id="where"></a> + +You YunoHost for non profit can be hosted in several places: +* Own hosting on a server, computer or Raspberry behind ASDL, SDSL or Fiber +* [Chatons](https://chatons.org), [librehosters](https://framagit.org/librehosters/awesome-librehosters) hosting services +* Commercial hosting services providing Debian virtual machine + +## Why <a id="why"></a> + +YunoHost can provide mostly all needs of a non-profit organization. +Keeping their data on their own. + +## How <a id="how"></a> + +### YunoHost <a id="yunohost"></a> + +YunoHost is a Debian GNU/Linux based distribution packaged with free software that automates the installation of a personal web server. The purpose of YunoHost is to allow users to easily host their own web services by enabling a simple point-and-click web interface for installing various web apps. + + + +Out of the box YunoHost provide: +* A system of application +* A web interface +* A command-line interface (CLI): Moulinette +* A web server: Nginx +* A DNS server: Dnsmasq +* A database: MariaDB +* A backup system +* An SSO : SSOwat +* OpenLDAP +* Email: + * SMTP: Postfix + * IMAP & POP3: Dovecot + * An antispam: rspamd,rmilter +* Instant messaging XMPP server: Metronome IM + +### Domain Name <a id="domain"></a> + +The first thing you will need to implement a YunoHost server is a domain name. The domain name can usually be provided with your hosting service. + +### Mails <a id="mail"></a> + +From scratch, YunoHost provide mail system available using POP/IMAP/SMTP. +Mails accounts will be managed using the web interface or the command line. Created accounts are stored in openldap. + +Additional package can be installed to provide more functionality to the YunoHost mail system: +* Webmail using [Roundcube](https://github.com/YunoHost-Apps/roundcube_ynh), [Rainloop](https://github.com/YunoHost-Apps/rainloop_ynh) +* ActiveSync using [Z-Push](https://github.com/YunoHost-Apps/z-push_ynh) +* Internal distribution group using [Mailman](https://github.com/YunoHost-Apps/mailman_ynh) + +### Calendar <a id="calendar"></a> + +To provide personal or shared calendars you will need to install: +* [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) +* [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) + +### Contact <a id="contact"></a> + +To provide personal contact system you will need to install: +* [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) +* [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) + +### Shared files <a id="drive"></a> + +To provide shared files system: personal and shared drive, you can install [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh). +Files will be available from a web interface or using a synchronization client + +### Instant communication <a id="im"></a> + +Out of the box, YunoHost provide an XMPP server, for which you can install a web client: [Jappix](https://github.com/YunoHost-Apps/jappix_ynh) + +You can also install a matrix server: +* The server: [Synapse](https://github.com/YunoHost-Apps/synapse_ynh) +* A web client: [Riot](https://github.com/YunoHost-Apps/_ynh) + +### Intranet <a id="intranet"></a> + +For an non-profit organization a good way to implement an intranet is to provide a wiki to let internal users read, edit and add content. Here are some packages to implement a wiki: +* [DokuWiki](https://github.com/YunoHost-Apps/docuwiki_ynh) using wiki syntax +* [Wiki.js](https://github.com/YunoHost-Apps/wikijs_ynh) using markdown syntax + +### ERP / Accounting <a id="erp"></a> + +At some time a non-profit organization could need an accounting/erp system, here are two propositions: +* [OpenERP/Odoo](https://github.com/YunoHost-Apps/libreerp_ynh) +* [Dolibarr](https://github.com/YunoHost-Apps/dolibarr_ynh) + +### Public Web Site <a id="www"></a> + +There are several way to implement a Public Web Site: +* Simple html, css, etc... Website using: [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) +* Using a CMS (Content Management System) like [Wordpress](https://github.com/YunoHost-Apps/_ynh), [Drupal](https://github.com/YunoHost-Apps/drupal_ynh) , [Grav](https://github.com/YunoHost-Apps/grav_ynh), [PluXml](https://github.com/YunoHost-Apps/pluxml_ynh) + +But we will propose something more powerful: [CiviCRM on Drupal 7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh): +* Drupal that is a powerful open source content management framework +* with CiviCRM that is an open source constituent relationship management for non-profits + +#### Membership <a id="membership"></a> + +With CiviCRM you can provide online membership and payment. + +#### Events Registrations <a id="events"></a> + +With CiviCRM, you can provide an online diary to let members or public register for free or with a payment + +#### Newsletter/Mailing <a id="mailing"></a> + +Best way to manage that is using CiviCRM and its mailing module + +### Forum <a id="forum"></a> + +You have several choices, or having an integrated forum in Drupal or using a dedicated forum system like [Flarum](https://github.com/YunoHost-Apps/flarum_ynh) + +### Backup <a id="backup"></a> + +YunoHost provide is own backup system. Before any package upgrade, YunoHost backup the current version of the package and automaticaly restore it if the upgrade fails. +Yunohost backup are stored localy in `/home/yunohost.backup/archives` + +But for production, localy stored backup are not enough, so you will need to implement aditional backup strategies: +* Backup of the the Virtual Machine if provided by the hosting system. +* [Archivist](https://github.com/YunoHost-Apps/archivist_ynh) is an automatic backup system for your server. Your backups can be send to many other places, local or distant. +* [Borg](https://github.com/YunoHost-Apps/borg_ynh) and [Borg Server](https://github.com/YunoHost-Apps/borgserver_ynh) allow to externalize backups +* [Fallback](https://github.com/YunoHost-Apps/fallback_ynh), if you have two yunohost servers, provide a way to have a secondary server which you can used if your main server goes down. This secondary server will allow you to deploy a copy of your server to bring back your YunoHost during your break down. + +### Go further <a id="further"></a> + +#### Federated Photo Gallery <a id="photo"></a> + +* [Pixelfed](https://github.com/YunoHost-Apps/pixelfed_ynh) + +#### Federated Audio Gallery <a id="audio"></a> + +* [Reel2Bits](https://github.com/YunoHost-Apps/reel2bits_ynh) + +#### Federated Video Gallery <a id="video"></a> + +* [PeerTube](https://github.com/YunoHost-Apps/peertube_ynh) + +#### Federated Social Networking <a id="sn"></a> + +* [Mastodon](https://github.com/YunoHost-Apps/mastodon_ynh) +* [Pleroma](https://github.com/YunoHost-Apps/pleroma_ynh) +* [Mobilizon](https://github.com/YunoHost-Apps/mobilizon_ynh) + +#### Federated Blog <a id="sn"></a> + +* [Plume](https://github.com/YunoHost-Apps/plume_ynh) +* [Writefreely](https://github.com/YunoHost-Apps/writefreely_ynh) + +#### Chat <a id="sn"></a> + +* [Mattermost](https://github.com/YunoHost-Apps/mattermost_ynh) + + +## Conclusion <a id="conclusion"></a> + +YunoHost can cover 99% of the needs of non-profit organizations, allowing them to own and protect their data, choose applications they want to use. +And if one is not available, they can [package it for YunoHost](https://yunohost.org/#/contributordoc), it's very simple. \ No newline at end of file From 08edaefd19c319aba476bd7df586d98f16f708c9 Mon Sep 17 00:00:00 2001 From: Luke Murphy <lukewm@riseup.net> Date: Wed, 5 Jun 2019 12:56:58 +0200 Subject: [PATCH 013/360] Add more links --- communication.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/communication.md b/communication.md index c2b68260..62768cfd 100644 --- a/communication.md +++ b/communication.md @@ -30,9 +30,29 @@ - (FR) [Linux Pratique n°96 – YunoHost, l’auto-hébergement à portée de main – juillet 2016](http://connect.ed-diamond.com/Linux-Pratique/LP-096/YunoHost-l-auto-hebergement-a-portee-de-main) - (EN) [Linux Magazine n°208 – YunoHost, Personal server for a private cloud – Mars 2018](http://www.linux-magazine.com/Issues/2018/208/YunoHost) - (FR) [Linux Pratique HS n° 044 février 2019 - Le choix de l’auto-hébergement avec YunoHost : rencontre avec l’équipe du projet](https://connect.ed-diamond.com/Linux-Pratique/LPHS-044/Le-choix-de-l-auto-hebergement-avec-YunoHost-rencontre-avec-l-equipe-du-projet) +- (FR) [Duhaz.fr: Devenir votre propre hébergeur](https://www.duhaz.fr/blog/devenir-votre-propre-h%C3%A9bergeur/) +- (FR) [Faimaison.net: au revoir Google, bonjour liberté!](https://www.faimaison.net/actualites/chatons-leprette-mai2019.html) +- (FR) [Tineternet.net: Reprendre la main sur ses données avec l'auto-hébergement](https://www.tinternet.net/article/2019/05/dossier-reprendre-la-main-sur-ses-donnees-avec-lauto-hebergement) +- (DE) [Yunohost Serverinstallation auf Laptop](https://www.giammi.com/2019/04/19/yunohost-serverinstallation-auf-laptop/) +- (FR) [Cenabumix: Retour d’expérience Yunohost sur Raspberry](https://wiki.cenabumix.org/wordpress/2018/03/17/retour-dexperience-yunohost-sur-raspberry/) +- (FR) [Geber.ga: Yunohost, ou l'auto-hébergement à portée de main...](https://www.geber.ga/yunohost-ou-l-auto-hebergement-a-portee-de-main/) +- (EN) [Nequalsonelifestyle.com: Self Hosting Without Self Owning](https://www.nequalsonelifestyle.com/2019/05/04/self-hosting-without-self-owning/) +- (EN) [Skysilk.com: How to Install YunoHost On a Debian VPS](https://www.skysilk.com/blog/2019/how-to-install-yunohost-on-a-debian-vps/) +- (FR) [Alternativelibertaire.org: Auto-hébergement](https://www.alternativelibertaire.org/?Auto-hebergement-1-Un-serveur-a-mon-seul-service) +- (ES) [Sololinux.es: Instalar YunoHost en Debian 9 Stretch](https://www.sololinux.es/instalar-yunohost-en-debian-9-stretch/) +- (FR) [Bog.hugopoi.net: Le cloud maison](https://blog.hugopoi.net/2019/03/30/le-cloud-maison/) + +## Past Events / Workshops + +- (FR) [INFOTHEMA: Présentation de l’avancée du projet YunoHost INFOTHEMA + Présentation du collectif CHATONS](https://www.infothema.fr/begard-samedi-22-juin-2019-seance-infothema/) +- (FR) [Normandie-libre.fr: Héberger ses sites web à la maison](https://normandie-libre.fr/heberger-ses-sites-web-a-la-maison/) +- (FR) [Viregul.fr: Auto-hébergement, pour un Internet décentralisé](https://viregul.fr/auto-hebergement-pour-un-internet-decentralise-le-samedi-25-mai-2019/) +- (EN) [35C3: Hands-on introduction to self-Hosting with YunoHos](https://events.ccc.de/congress/2018/wiki/index.php/Session:Hands-on_introduction_to_self-Hosting_with_YunoHost) +- (FR) [Journées du Logiciel Libre 2019: l'auto-hébergement avec YunoHost](https://pretalx.jdll.org/jdll2019/talk/88GSPH/) ## YunoHost was cited in : * [EXPERIMENTA 2018](https://livestream.com/accounts/26482307/events/8034656/player?width=960&height=540&enableInfoAndActivity=true&defaultDrawer=&autoPlay=true&mute=false) at 57.47 (depuis https://www.experimenta.fr/direct/) * [Capitole du libre 2017 - « Contributopia », Dégoogliser ne suffit pas](https://www.youtube.com/watch?v=ip6_VMkWpr8&feature=youtu.be&t=4793) * [Contributopia - Essaimage (Framasoft)](https://contributopia.org/fr/essaimage/) +- (FR) [Triple A: Émission Underscore #144 du 19 mai 2019](https://www.triplea.fr/blog/podcast/emission-underscore-144-du-19-mai-2019/) From 09528ca77b474980729ec31cee38d1ae0185cc72 Mon Sep 17 00:00:00 2001 From: yalh76 <yalh@yahoo.com> Date: Thu, 6 Jun 2019 22:37:35 +0200 Subject: [PATCH 014/360] Adding informations on yunohost operations logs --- troubleshooting_guide.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/troubleshooting_guide.md b/troubleshooting_guide.md index 190ec734..e779a2ef 100644 --- a/troubleshooting_guide.md +++ b/troubleshooting_guide.md @@ -126,6 +126,9 @@ Generic logs for PHP apps. ##### yunohost.log This is the log created at the YunoHost install. If you have issue installing YunoHost, check this file. +##### yunohost operations logs +This is the logs created when you install, remove, backup, etc... an apps, they can be found in `/var/log/yunohost/categories/operation`. + This list is not exhaustive. Furthermore, some app may put their logs in `/var/log` too. Slapd logs are unfortunately in `/var/log/syslog`. ## RAM usage From b3866d88d5c4d262a2952bb1c3e7fca351621ae4 Mon Sep 17 00:00:00 2001 From: Moul <moul@moul.re> Date: Thu, 6 Jun 2019 23:06:03 +0200 Subject: [PATCH 015/360] [fix] packaging_apps_manifest: built --- packaging_apps_manifest.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging_apps_manifest.md b/packaging_apps_manifest.md index f966fa15..8446c289 100644 --- a/packaging_apps_manifest.md +++ b/packaging_apps_manifest.md @@ -63,7 +63,7 @@ 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. +* **version**: version of the package built 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`, `non-free` or a value from the Identifier column from https://spdx.org/licenses/. Be careful to not confuse with package license which must be put in `LICENSE` file. From 02e995a464f33ff0e6269341ad35c23a7ca805e0 Mon Sep 17 00:00:00 2001 From: yalh76 <yalh@yahoo.com> Date: Tue, 11 Jun 2019 00:10:43 +0200 Subject: [PATCH 016/360] changing to webmin and command line instructions --- troubleshooting_guide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/troubleshooting_guide.md b/troubleshooting_guide.md index e779a2ef..fec52ddb 100644 --- a/troubleshooting_guide.md +++ b/troubleshooting_guide.md @@ -126,8 +126,8 @@ Generic logs for PHP apps. ##### yunohost.log This is the log created at the YunoHost install. If you have issue installing YunoHost, check this file. -##### yunohost operations logs -This is the logs created when you install, remove, backup, etc... an apps, they can be found in `/var/log/yunohost/categories/operation`. +##### YunoHost operations logs +This is the logs created when you install, remove, backup, etc... an apps, they can be found using the Webadmin in Tools > Logs or using the command line: `yunohost log list` and `yunohost log display`. This list is not exhaustive. Furthermore, some app may put their logs in `/var/log` too. Slapd logs are unfortunately in `/var/log/syslog`. From d7ae3cdad9de2607f920fd2e3003703a6372b032 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sun, 16 Jun 2019 01:50:09 +0000 Subject: [PATCH 017/360] added Wireguard --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index fb297d1a..8e4f55f2 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -171,6 +171,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [webSync](http://furier.github.io/websync) - [WebTorrent](https://github.com/feross/webtorrent) - [Wisemapping](http://www.wisemapping.com) +- [Wireguard](https://www.wireguard.com/) - [Xonotic](http://xonotic.org) - [YesWiki](https://yeswiki.net) - [ZeroTier](https://github.com/zerotier/ZeroTierOne) From 4ed5ef3f4c723a8e29ddbb4ef7456aad072439ff Mon Sep 17 00:00:00 2001 From: gusttt <41129432+gusttt@users.noreply.github.com> Date: Sun, 16 Jun 2019 03:57:44 +0200 Subject: [PATCH 018/360] dns.md: Fix link --- dns.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dns.md b/dns.md index f864b0cc..6d2bc471 100644 --- a/dns.md +++ b/dns.md @@ -10,7 +10,7 @@ DNS stands for "Domain Name Server", and is often used for the configuration of **For example**: `yunohost.org` points to the server at `88.191.153.110`. -This system was created to more easily keep track of server addresses. There are DNS registries for Internet names that you must register with. They are called "registrars", which will let you rent certain domain names for a price (between $5 or a few hundred, depending on the root domain and the chosen name). These [registrars](registrar) are private entities authorised by [ICANN](http://en.wikipedia.org/wiki/ICANN), such as [OVH](https://www.ovh.co.uk/index.xml), [Gandi](http://gandi.net), [NameCheap](http://namecheap.com) or [BookMyName](http://bookmyname.com). A privacy respecting registrar is [Njalla](https://njal.la/) or [Njalla Onion Site](njalladnspotetti.onion). With Njalla, you can register a domain name with just an email or XMPP address (N.B. : you won't have full control and ownership of the domain though). +This system was created to more easily keep track of server addresses. There are DNS registries for Internet names that you must register with. They are called "registrars", which will let you rent certain domain names for a price (between $5 or a few hundred, depending on the root domain and the chosen name). These [registrars](registrar) are private entities authorised by [ICANN](http://en.wikipedia.org/wiki/ICANN), such as [OVH](https://www.ovh.co.uk/index.xml), [Gandi](http://gandi.net), [NameCheap](http://namecheap.com) or [BookMyName](http://bookmyname.com). A privacy respecting registrar is [Njalla](https://njal.la/) or [Njalla Onion Site](http://njalladnspotetti.onion). With Njalla, you can register a domain name with just an email or XMPP address (N.B. : you won't have full control and ownership of the domain though). It is important to note that subdomains do not necessarily have to send you to wherever the principal domain is pointing. If `yunohost.org` sends to `88.191.153.110`, that doesn't mean that `backup.yunohost.org` has to point at the same IP. You must therefore configure **all** of the domains and subdomains that you want to use. From 571bf72e5509659c60259f79ee8f0d327c757db0 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Tue, 18 Jun 2019 19:21:08 +0000 Subject: [PATCH 019/360] Adding bludit to wishlist --- apps_wishlist.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index 8e4f55f2..f08ed7d7 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -19,6 +19,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) - [Bitwarden](https://bitwarden.com/) - [Beehive](https://github.com/muesli/beehive) +- [Bludit](https://www.bludit.com) - [Blynk](https://github.com/blynkkk/blynk-library) - [Bookstack](https://www.bookstackapp.com/) - [Browsepass](http://techualization.blogspot.de/2013/09/introducing-browsepass-keepass-on-web.html) @@ -178,4 +179,4 @@ The following list is a compiled wishlist of applications that would be nice-to- - [ZNC](http://wiki.znc.in/ZNC) - [Zone-project](https://github.com/descl/ZONE) - [Zoneminder](https://github.com/ZoneMinder/zoneminder) -- [Zulip](https://zulipchat.com/) +- [Zulip](https://zulipchat.com/) \ No newline at end of file From 93f0e1bd5be4fe98c8bc7de203bd69d1d43903b1 Mon Sep 17 00:00:00 2001 From: yalh76 <yalh@yahoo.com> Date: Wed, 19 Jun 2019 01:41:14 +0200 Subject: [PATCH 020/360] Fix links and spacing --- docs.md | 2 +- docs_ar.md | 2 +- use_case_non-profit_organisations.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs.md b/docs.md index 3c74ab2e..b11d3779 100644 --- a/docs.md +++ b/docs.md @@ -33,4 +33,4 @@ YunoHost's documentation has 3 different sections: * [Support / Help](/help) * Use example: - * [YunoHost for non-profit organisations](/use_case_non-profit_organisations) + * [YunoHost for non-profit organisations](/use_case_non-profit_organisations_en) diff --git a/docs_ar.md b/docs_ar.md index a2108021..5179b6b8 100644 --- a/docs_ar.md +++ b/docs_ar.md @@ -33,4 +33,4 @@ * [Support / Help](/help) * استخدم مثال: - * [YunoHost للمنظمات غير الهادفة للربح] (/ use_case_non-profit_organisations_en) + * [YunoHost للمنظمات غير الهادفة للربح]](/use_case_non-profit_organisations_en) diff --git a/use_case_non-profit_organisations.md b/use_case_non-profit_organisations.md index c85bf0ad..73b3c2f4 100644 --- a/use_case_non-profit_organisations.md +++ b/use_case_non-profit_organisations.md @@ -202,4 +202,4 @@ But for production, localy stored backup are not enough, so you will need to imp ## Conclusion <a id="conclusion"></a> YunoHost can cover 99% of the needs of non-profit organizations, allowing them to own and protect their data, choose applications they want to use. -And if one is not available, they can [package it for YunoHost](https://yunohost.org/#/contributordoc), it's very simple. \ No newline at end of file +And if one is not available, they can [package it for YunoHost](https://yunohost.org/#/contributordoc), it's very simple. From 05eef00a9c3544c45b96dbc2e70bd81d7d5fa8bd Mon Sep 17 00:00:00 2001 From: yalh76 <yalh@yahoo.com> Date: Wed, 19 Jun 2019 01:42:32 +0200 Subject: [PATCH 021/360] Fix link --- docs_ar.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs_ar.md b/docs_ar.md index 5179b6b8..df44211b 100644 --- a/docs_ar.md +++ b/docs_ar.md @@ -33,4 +33,4 @@ * [Support / Help](/help) * استخدم مثال: - * [YunoHost للمنظمات غير الهادفة للربح]](/use_case_non-profit_organisations_en) + * [YunoHost للمنظمات غير الهادفة للربح](/use_case_non-profit_organisations_en) From 396a5a5e32f7a3d68f01dc057831d7e3f7fadf62 Mon Sep 17 00:00:00 2001 From: yalh76 <yalh@yahoo.com> Date: Wed, 19 Jun 2019 01:53:37 +0200 Subject: [PATCH 022/360] Remove authors --- use_case_non-profit_organisations.md | 1 - 1 file changed, 1 deletion(-) diff --git a/use_case_non-profit_organisations.md b/use_case_non-profit_organisations.md index 73b3c2f4..a08d19b8 100644 --- a/use_case_non-profit_organisations.md +++ b/use_case_non-profit_organisations.md @@ -9,7 +9,6 @@ * [Why](#why) * [How](#how) * [Conclusion](#conclusion) -* [Authors](#authors) ## Introduction <a id="introduction"></a> From f8a85315069acce04c2fcc4ec37d05a8b14a4b1f Mon Sep 17 00:00:00 2001 From: yalh76 <yalh@yahoo.com> Date: Wed, 19 Jun 2019 20:13:52 +0200 Subject: [PATCH 023/360] fix internal links --- use_case_non-profit_organisations.md | 44 ++++++++++++++-------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/use_case_non-profit_organisations.md b/use_case_non-profit_organisations.md index a08d19b8..a647801b 100644 --- a/use_case_non-profit_organisations.md +++ b/use_case_non-profit_organisations.md @@ -1,14 +1,14 @@ # YunoHost for non-profit ## Table of Contents -* [Introduction](#introduction) -* [Who](#who) -* [What](#what) -* [When](#when) -* [Where](#where) -* [Why](#why) -* [How](#how) -* [Conclusion](#conclusion) +* [Introduction](/use_case_non-profit_organisations_en?id=introduction) +* [Who](/use_case_non-profit_organisations_en?id=who) +* [What](/use_case_non-profit_organisations_en?id=what) +* [When](/use_case_non-profit_organisations_en?id=when) +* [Where](/use_case_non-profit_organisations_en?id=where) +* [Why](/use_case_non-profit_organisations_en?id=why) +* [How](/use_case_non-profit_organisations_en?id=how) +* [Conclusion](/use_case_non-profit_organisations_en?id=conclusion) ## Introduction <a id="introduction"></a> @@ -23,22 +23,22 @@ Non-profit organizations, NGO or any kind of association. Usually non-profit organizations need to provide several services to several publics: * Board of Directors / Steering Committee / Volunteers with: - * [Mails](#mail) - * [Calendar](#calendar) - * [Contact](#contact) - * [Shared files / Drive](#drive) - * [Instant communication](#im) - * [Intranet / knowledge database](#intranet) - * [ERP / Accounting](#erp) + * [Mails](/use_case_non-profit_organisations_en?id=mail) + * [Calendar](/use_case_non-profit_organisations_en?id=calendar) + * [Contact](/use_case_non-profit_organisations_en?id=contact) + * [Shared files / Drive](/use_case_non-profit_organisations_en?id=drive) + * [Instant communication](/use_case_non-profit_organisations_en?id=im) + * [Intranet / knowledge database](/use_case_non-profit_organisations_en?id=intranet) + * [ERP / Accounting](/use_case_non-profit_organisations_en?id=erp) * Members with: - * [Public website with private and individual access](#www) - * [Membership](#membership) - * [Events registrations](#events) - * [Mailings](#mailing) - * [Forum](#forum) + * [Public website with private and individual access](/use_case_non-profit_organisations_en?id=www) + * [Membership](/use_case_non-profit_organisations_en?id=membership) + * [Events registrations](/use_case_non-profit_organisations_en?id=events) + * [Mailings](/use_case_non-profit_organisations_en?id=mailing) + * [Forum](/use_case_non-profit_organisations_en?id=forum) * Public with: - * [Public website](#www) - * [Newsletter](#mailing) + * [Public website](/use_case_non-profit_organisations_en?id=www) + * [Newsletter](/use_case_non-profit_organisations_en?id=mailing) ## When <a id="when"></a> From 4c637d179d242a51e4f08c5ef46bd4b47637f376 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 22 Jun 2019 15:45:28 +0000 Subject: [PATCH 024/360] English grammar. --- postinstall.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/postinstall.md b/postinstall.md index 7702aa8d..bc4078da 100644 --- a/postinstall.md +++ b/postinstall.md @@ -6,7 +6,7 @@ The step called "**post-installation**" is actually the initial configuration of You can perform the post-installation with the web interface by entering in your browser : * **the local IP address of your server** if it is on your local network (e.g. at home !). The address typically looks like `192.168.x.y` (see 'Find your IP' on [the page about SSH](/ssh)) -* **the public IP address of your server** if your server is not on your local network. Typically, if you own a VPS, your VPS provider should have gave you the IP of the server. +* **the public IP address of your server** if your server is not on your local network. Typically, if you own a VPS, your VPS provider should have given you the IP of the server. During the first visit, you will very likely encounter a security warning related to the certificate used by the server. For now, your server uses a self-signed certificate. You will later be able to add a certificate automatically recognized by web browsers as described in the [certificate documentation](/certificate). For now, you should add a security exception to accept the current certificate. From 9a56b97a663f90630c3651d9dd207d1b3e8f96aa Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 22 Jun 2019 15:52:53 +0000 Subject: [PATCH 025/360] There was an error on the text, :) --- selfhosting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/selfhosting.md b/selfhosting.md index d614c5ec..8a6de915 100644 --- a/selfhosting.md +++ b/selfhosting.md @@ -16,7 +16,7 @@ Why should you host yourself ? - **You want to learn about how computers and the Internet work.** Operating your own server is a pretty good context to understand the basic mechanisms at the heart of operating systems and the Internet. You might have to deal with command line interface, network architecture, DNS configuration, SSH, and so on. -- **You want to explore new possibilities and customize things.** Ever dreamed of running a Minecraft server for you friends, or a persistent IRC or XMPP client? With you very own server, you can manually install and run virtually any program you want, and customize every bit. +- **You want to explore new possibilities and customize things.** Ever dreamed of running a Minecraft server for you friends, or a persistent IRC or XMPP client? With your very own server, you can manually install and run virtually any program you want, and customize every bit. Why should you *not* host yourself ? ------------------------------------ From d3317bc110637d25d41e8c7f835a40454db9d2a2 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 24 Jun 2019 11:13:40 +0000 Subject: [PATCH 026/360] Ajout du bridge irc-matrix du channel dev : #freenode_#yunohost-dev:matrix.org --- help_fr.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/help_fr.md b/help_fr.md index 794a2fc8..debf9a6a 100644 --- a/help_fr.md +++ b/help_fr.md @@ -39,7 +39,9 @@ </br> </br> <em>Note : vous pouvez aussi vous connecter aux salons de dev, via votre client XMPP favori, à</br> -dev@conference.yunohost.org et apps@conference.yunohost.org</em> +dev@conference.yunohost.org et apps@conference.yunohost.org</br> +ou bien via votre client matrix préféré, à</br> +#freenode_#yunohost-dev:matrix.org</em> </center> <script> From 21cbaa64a5d76b5c0855addd6435b1be08244876 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 24 Jun 2019 11:32:44 +0000 Subject: [PATCH 027/360] added Ombi and Radarr --- apps_wishlist.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index f08ed7d7..6f2facd8 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -110,6 +110,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Museek+](https://github.com/eLvErDe/museek-plus) - [Nibbleblog](http://www.nibbleblog.com) - [Nuage](https://nuage.kerjean.me/login) +- [Ombi](https://github.com/tidusjar/Ombi) - [OpenBazaar](https://openbazaar.org) - [openHAB](https://www.openhab.org/) - Smart home platform. - [OpenJabNab](https://github.com/OpenJabNab/OpenJabNab) (/!\ last update: Apr 30, 2016) @@ -134,6 +135,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Pump.io](http://pump.io) - [qBittorrent](https://github.com/qbittorrent/qBittorrent) - [racktables](http://racktables.org) +- [Radarr](https://github.com/Radarr/Radarr) - [Redmine](https://www.redmine.org) - [Request Tracker](https://bestpractical.com) - [Respawn 2.0](https://github.com/broncowdd/respawn) ( /!\ last update: 2015) From cff534771feb406a849696974c865f0c0d97c04c Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Mon, 24 Jun 2019 16:57:37 +0200 Subject: [PATCH 028/360] Propagate to english page --- help.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/help.md b/help.md index b4bb9fbe..58f7c453 100644 --- a/help.md +++ b/help.md @@ -39,7 +39,9 @@ </br> </br> <em>Note : you can also connect to the devrooms, using your favorite XMPP client, to </br> -dev@conference.yunohost.org and apps@conference.yunohost.org</em> +dev@conference.yunohost.org and apps@conference.yunohost.org</br> +or with a Matrix client to</br> +#freenode_#yunohost-dev:matrix.org</em> </center> <script> From 654f1c5057785f400c55a425ffc619b569ba9663 Mon Sep 17 00:00:00 2001 From: yalh76 <yalh@yahoo.com> Date: Tue, 25 Jun 2019 23:33:35 +0200 Subject: [PATCH 029/360] Fixing anchors --- use_case_non-profit_organisations.md | 105 +++++++++++++-------------- 1 file changed, 52 insertions(+), 53 deletions(-) diff --git a/use_case_non-profit_organisations.md b/use_case_non-profit_organisations.md index a647801b..9e4f8ac2 100644 --- a/use_case_non-profit_organisations.md +++ b/use_case_non-profit_organisations.md @@ -1,64 +1,64 @@ # YunoHost for non-profit ## Table of Contents -* [Introduction](/use_case_non-profit_organisations_en?id=introduction) -* [Who](/use_case_non-profit_organisations_en?id=who) -* [What](/use_case_non-profit_organisations_en?id=what) -* [When](/use_case_non-profit_organisations_en?id=when) -* [Where](/use_case_non-profit_organisations_en?id=where) -* [Why](/use_case_non-profit_organisations_en?id=why) -* [How](/use_case_non-profit_organisations_en?id=how) -* [Conclusion](/use_case_non-profit_organisations_en?id=conclusion) +* [Introduction](#introduction) +* [Who](#who) +* [What](#what) +* [When](#when) +* [Where](#where) +* [Why](#why) +* [How](#how) +* [Conclusion](#conclusion) -## Introduction <a id="introduction"></a> +## Introduction The object of this document is to present a specific use of [YunoHost](https://yunohost.org/) for non-profit organizations. -## Who <a id="who"></a> +## Who Non-profit organizations, NGO or any kind of association. -## What <a id="what"></a> +## What Usually non-profit organizations need to provide several services to several publics: * Board of Directors / Steering Committee / Volunteers with: - * [Mails](/use_case_non-profit_organisations_en?id=mail) - * [Calendar](/use_case_non-profit_organisations_en?id=calendar) - * [Contact](/use_case_non-profit_organisations_en?id=contact) - * [Shared files / Drive](/use_case_non-profit_organisations_en?id=drive) - * [Instant communication](/use_case_non-profit_organisations_en?id=im) - * [Intranet / knowledge database](/use_case_non-profit_organisations_en?id=intranet) - * [ERP / Accounting](/use_case_non-profit_organisations_en?id=erp) + * [Mails](#mails) + * [Calendar](#calendar) + * [Contact](#contact) + * [Shared files / Drive](#shared-files) + * [Instant communication](#instant-communication) + * [Intranet / knowledge database](#intranet) + * [ERP / Accounting](#erp-accounting) * Members with: - * [Public website with private and individual access](/use_case_non-profit_organisations_en?id=www) - * [Membership](/use_case_non-profit_organisations_en?id=membership) - * [Events registrations](/use_case_non-profit_organisations_en?id=events) - * [Mailings](/use_case_non-profit_organisations_en?id=mailing) - * [Forum](/use_case_non-profit_organisations_en?id=forum) + * [Public website with private and individual access](#public-web-site) + * [Membership](#membership) + * [Events registrations](#events-registrations) + * [Mailings](#newsletter-mailing) + * [Forum](#forum) * Public with: - * [Public website](/use_case_non-profit_organisations_en?id=www) - * [Newsletter](/use_case_non-profit_organisations_en?id=mailing) + * [Public website](#public-web-site) + * [Newsletter](#newsletter-mailing) -## When <a id="when"></a> +## When When ready to move forward. -## Where <a id="where"></a> +## Where You YunoHost for non profit can be hosted in several places: * Own hosting on a server, computer or Raspberry behind ASDL, SDSL or Fiber * [Chatons](https://chatons.org), [librehosters](https://framagit.org/librehosters/awesome-librehosters) hosting services * Commercial hosting services providing Debian virtual machine -## Why <a id="why"></a> +## Why YunoHost can provide mostly all needs of a non-profit organization. Keeping their data on their own. -## How <a id="how"></a> +## How -### YunoHost <a id="yunohost"></a> +### YunoHost YunoHost is a Debian GNU/Linux based distribution packaged with free software that automates the installation of a personal web server. The purpose of YunoHost is to allow users to easily host their own web services by enabling a simple point-and-click web interface for installing various web apps. @@ -80,11 +80,11 @@ Out of the box YunoHost provide: * An antispam: rspamd,rmilter * Instant messaging XMPP server: Metronome IM -### Domain Name <a id="domain"></a> +### Domain Name The first thing you will need to implement a YunoHost server is a domain name. The domain name can usually be provided with your hosting service. -### Mails <a id="mail"></a> +### Mails From scratch, YunoHost provide mail system available using POP/IMAP/SMTP. Mails accounts will be managed using the web interface or the command line. Created accounts are stored in openldap. @@ -94,24 +94,24 @@ Additional package can be installed to provide more functionality to the YunoHos * ActiveSync using [Z-Push](https://github.com/YunoHost-Apps/z-push_ynh) * Internal distribution group using [Mailman](https://github.com/YunoHost-Apps/mailman_ynh) -### Calendar <a id="calendar"></a> +### Calendar To provide personal or shared calendars you will need to install: * [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) * [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) -### Contact <a id="contact"></a> +### Contact To provide personal contact system you will need to install: * [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) * [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) -### Shared files <a id="drive"></a> +### Shared files To provide shared files system: personal and shared drive, you can install [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh). Files will be available from a web interface or using a synchronization client -### Instant communication <a id="im"></a> +### Instant communication Out of the box, YunoHost provide an XMPP server, for which you can install a web client: [Jappix](https://github.com/YunoHost-Apps/jappix_ynh) @@ -119,19 +119,19 @@ You can also install a matrix server: * The server: [Synapse](https://github.com/YunoHost-Apps/synapse_ynh) * A web client: [Riot](https://github.com/YunoHost-Apps/_ynh) -### Intranet <a id="intranet"></a> +### Intranet For an non-profit organization a good way to implement an intranet is to provide a wiki to let internal users read, edit and add content. Here are some packages to implement a wiki: * [DokuWiki](https://github.com/YunoHost-Apps/docuwiki_ynh) using wiki syntax * [Wiki.js](https://github.com/YunoHost-Apps/wikijs_ynh) using markdown syntax -### ERP / Accounting <a id="erp"></a> +### ERP / Accounting At some time a non-profit organization could need an accounting/erp system, here are two propositions: * [OpenERP/Odoo](https://github.com/YunoHost-Apps/libreerp_ynh) * [Dolibarr](https://github.com/YunoHost-Apps/dolibarr_ynh) -### Public Web Site <a id="www"></a> +### Public Web Site There are several way to implement a Public Web Site: * Simple html, css, etc... Website using: [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) @@ -141,23 +141,23 @@ But we will propose something more powerful: [CiviCRM on Drupal 7](https://githu * Drupal that is a powerful open source content management framework * with CiviCRM that is an open source constituent relationship management for non-profits -#### Membership <a id="membership"></a> +#### Membership With CiviCRM you can provide online membership and payment. -#### Events Registrations <a id="events"></a> +#### Events Registrations With CiviCRM, you can provide an online diary to let members or public register for free or with a payment -#### Newsletter/Mailing <a id="mailing"></a> +#### Newsletter/Mailing Best way to manage that is using CiviCRM and its mailing module -### Forum <a id="forum"></a> +### Forum You have several choices, or having an integrated forum in Drupal or using a dedicated forum system like [Flarum](https://github.com/YunoHost-Apps/flarum_ynh) -### Backup <a id="backup"></a> +### Backup YunoHost provide is own backup system. Before any package upgrade, YunoHost backup the current version of the package and automaticaly restore it if the upgrade fails. Yunohost backup are stored localy in `/home/yunohost.backup/archives` @@ -168,37 +168,36 @@ But for production, localy stored backup are not enough, so you will need to imp * [Borg](https://github.com/YunoHost-Apps/borg_ynh) and [Borg Server](https://github.com/YunoHost-Apps/borgserver_ynh) allow to externalize backups * [Fallback](https://github.com/YunoHost-Apps/fallback_ynh), if you have two yunohost servers, provide a way to have a secondary server which you can used if your main server goes down. This secondary server will allow you to deploy a copy of your server to bring back your YunoHost during your break down. -### Go further <a id="further"></a> +### Go further -#### Federated Photo Gallery <a id="photo"></a> +#### Federated Photo Gallery * [Pixelfed](https://github.com/YunoHost-Apps/pixelfed_ynh) -#### Federated Audio Gallery <a id="audio"></a> +#### Federated Audio Gallery * [Reel2Bits](https://github.com/YunoHost-Apps/reel2bits_ynh) -#### Federated Video Gallery <a id="video"></a> +#### Federated Video Gallery * [PeerTube](https://github.com/YunoHost-Apps/peertube_ynh) -#### Federated Social Networking <a id="sn"></a> +#### Federated Social Networking * [Mastodon](https://github.com/YunoHost-Apps/mastodon_ynh) * [Pleroma](https://github.com/YunoHost-Apps/pleroma_ynh) * [Mobilizon](https://github.com/YunoHost-Apps/mobilizon_ynh) -#### Federated Blog <a id="sn"></a> +#### Federated Blog * [Plume](https://github.com/YunoHost-Apps/plume_ynh) * [Writefreely](https://github.com/YunoHost-Apps/writefreely_ynh) -#### Chat <a id="sn"></a> +#### Chat * [Mattermost](https://github.com/YunoHost-Apps/mattermost_ynh) - -## Conclusion <a id="conclusion"></a> +## Conclusion YunoHost can cover 99% of the needs of non-profit organizations, allowing them to own and protect their data, choose applications they want to use. And if one is not available, they can [package it for YunoHost](https://yunohost.org/#/contributordoc), it's very simple. From 322a0ae89db0c615da45f2c368f4c85e90d15ffc Mon Sep 17 00:00:00 2001 From: Luke Murphy <lukewm@riseup.net> Date: Wed, 26 Jun 2019 00:23:22 +0200 Subject: [PATCH 030/360] Add BattleMeshV12 talk --- communication.md | 1 + 1 file changed, 1 insertion(+) diff --git a/communication.md b/communication.md index 62768cfd..168ac856 100644 --- a/communication.md +++ b/communication.md @@ -2,6 +2,7 @@ ## Talks / conf +- (EN) [BattleMeshV12 - YunoHost and the Internet Cube (Brique Internet)](https://www.battlemesh.org/BattleMeshV12/Events#YunoHost_and_the_Internet_Cube_.28Brique_Internet.29) * (EN) [FOSDEM 2019 - The operating system to build the decentralized Internet](https://cinema.yunohost.support/videos/watch/1eb49594-0283-4a01-8691-3817a3cb31e6) ([slides](https://github.com/YunoHost/yunohost-fosdem-2019)) * (FR) [Capitole du libre 2018 - YunoHost: un des chemins vers la décentralisation - Bram](https://www.youtube.com/watch?v=OEXEStoOYpw) ([slides](https://psycojoker.github.io/yunohost-cdl-2018/)) * (FR) [Journées du logiciel libre 2018 - YunoHost : vers l’auto-hébergement et au-delà - Bram](https://www.videos-libr.es/videos/watch/45b48b1e-1b10-4e09-b29a-a404bd42c5d0) ([slides](https://psycojoker.github.io/yunohost-jdll-2018/)) From 2ccd09bdd3144e34f9184ca84360549261757d91 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Tue, 2 Jul 2019 11:07:46 +0200 Subject: [PATCH 031/360] Add L'atelier, Netrunner and RFTG to wishlist --- apps_wishlist.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index 6f2facd8..fb8f290f 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -92,6 +92,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [KrISS feed](https://github.com/tontof/kriss_feed) - [Koken](http://koken.me) - [Kune](https://en.wikipedia.org/wiki/Kune_%28software%29) +- [L'atelier](https://github.com/jbl2024/latelier) - [Lessy](https://lessy.io) - [LibreNews-Server](https://librenews.io) - [LibreOffice Online](https://wiki.documentfoundation.org/ReleaseNotes/5.3/fr#LibreOffice_Online) @@ -108,6 +109,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [MotionEye](https://github.com/ccrisan/motioneye) - [MPD](http://www.musicpd.org) - [Museek+](https://github.com/eLvErDe/museek-plus) +- [Netrunner](https://github.com/mtgred/netrunner) - [Nibbleblog](http://www.nibbleblog.com) - [Nuage](https://nuage.kerjean.me/login) - [Ombi](https://github.com/tidusjar/Ombi) @@ -135,6 +137,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Pump.io](http://pump.io) - [qBittorrent](https://github.com/qbittorrent/qBittorrent) - [racktables](http://racktables.org) +- [Race for the Galaxy](https://github.com/bnordli/rftg) - [Radarr](https://github.com/Radarr/Radarr) - [Redmine](https://www.redmine.org) - [Request Tracker](https://bestpractical.com) @@ -181,4 +184,4 @@ The following list is a compiled wishlist of applications that would be nice-to- - [ZNC](http://wiki.znc.in/ZNC) - [Zone-project](https://github.com/descl/ZONE) - [Zoneminder](https://github.com/ZoneMinder/zoneminder) -- [Zulip](https://zulipchat.com/) \ No newline at end of file +- [Zulip](https://zulipchat.com/) From becb1c8523a37e7b1e9a1872caee67fc9411b9f3 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Thu, 4 Jul 2019 20:36:34 +0200 Subject: [PATCH 032/360] It doesn't make so much sense having this picture here in terms of UX ... --- images/debian_install.png | Bin 22046 -> 0 bytes images/images.list | 1 - install_on_debian.md | 2 -- install_on_debian_ar.md | 2 -- install_on_debian_fr.md | 2 -- 5 files changed, 7 deletions(-) delete mode 100644 images/debian_install.png diff --git a/images/debian_install.png b/images/debian_install.png deleted file mode 100644 index 005a98b4647c2c3954de35bf7c06a72aafe6a7ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22046 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 diff --git a/images/images.list b/images/images.list index 4289c16b..4e785728 100644 --- a/images/images.list +++ b/images/images.list @@ -2,7 +2,6 @@ boot_screen.png cd.jpg checkstart.png cubieboard2.png -debian_install.png debian-logo.png desktop.jpg df_h.png diff --git a/install_on_debian.md b/install_on_debian.md index 1d6e82e6..4c6b175a 100644 --- a/install_on_debian.md +++ b/install_on_debian.md @@ -12,8 +12,6 @@ An ARM box, a VPS, a dedicated server, a standard x86 computer, an old Macintosh * connected to the Internet * with a direct **root access** or via SSH -<img width=650 src="/images/debian_install.png"> - --- ## Installation steps diff --git a/install_on_debian_ar.md b/install_on_debian_ar.md index 23afb487..455830f8 100644 --- a/install_on_debian_ar.md +++ b/install_on_debian_ar.md @@ -13,8 +13,6 @@ * مُتصل بالإنترنت عبر كابل إيثرنت * مباشرة عبر **النفاذ بالمستخدم الجذري root** أو عبر الـ SSH -<img width=650 src="/images/debian_install.png"> - --- ## خطوات التنصيب diff --git a/install_on_debian_fr.md b/install_on_debian_fr.md index 3f5ab9ad..a1b85b3a 100644 --- a/install_on_debian_fr.md +++ b/install_on_debian_fr.md @@ -12,8 +12,6 @@ Sur une plateforme ARM, un VPS, un serveur dédié, un ordinateur x86 standard, * connecté à Internet * avec un **accès root** directement ou par SSH -<img width=650 src="/images/debian_install.png"> - --- ## Étapes d’installation From 152f3d74d7177fc47baeb57f286d71c2fb111438 Mon Sep 17 00:00:00 2001 From: ljf <ljf+git@grimaud.me> Date: Sat, 6 Jul 2019 12:44:50 +0200 Subject: [PATCH 033/360] [enh] Update version number --- index.md | 2 +- index_ar.md | 2 +- index_de.md | 2 +- index_es.md | 2 +- index_fr.md | 2 +- index_it.md | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/index.md b/index.md index 390713e3..17ca1a20 100644 --- a/index.md +++ b/index.md @@ -43,7 +43,7 @@ <div class="call-to-action"> <a class="btn btn-primary btn-lg" href="/try">Try it</a> <a class="btn btn-success btn-lg" href="/install">Get started</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-5-release-sortie-de-yunohost-3-5/7619">YunoHost v3.5</a></small></p> + <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-5-release-sortie-de-yunohost-3-5/7619">YunoHost v3.6</a></small></p> </div> <div class="row cf"> diff --git a/index_ar.md b/index_ar.md index ee88fae8..1836c6cc 100644 --- a/index_ar.md +++ b/index_ar.md @@ -40,7 +40,7 @@ <div dir="auto" class="call-to-action"> <a class="btn btn-primary btn-lg" href="/try">تجريب</a> <a class="btn btn-success btn-lg" href="/install">تنصيب</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-5-release-sortie-de-yunohost-3-5/7619">YunoHost v3.5</a></small></p> + <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-5-release-sortie-de-yunohost-3-5/7619">YunoHost v3.6</a></small></p> </div> <hr /> diff --git a/index_de.md b/index_de.md index 4936cc27..f5350f11 100644 --- a/index_de.md +++ b/index_de.md @@ -44,7 +44,7 @@ Self-Hosting für alle möglich macht.</small></h1> <div class="call-to-action"> <a class="btn btn-primary btn-lg" href="/try">Ausprobieren</a> <a class="btn btn-success btn-lg" href="/install">Loslegen</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-5-release-sortie-de-yunohost-3-5/7619">YunoHost v3.5</a></small></p> + <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-5-release-sortie-de-yunohost-3-5/7619">YunoHost v3.6</a></small></p> </div> <div class="row cf"> diff --git a/index_es.md b/index_es.md index 989cce1a..ea7f490a 100644 --- a/index_es.md +++ b/index_es.md @@ -41,7 +41,7 @@ <div class="call-to-action"> <!-- <a class="btn btn-primary btn-lg" href="/try">Try it</a> --> <a class="btn btn-success btn-lg" href="/install">Get started</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-5-release-sortie-de-yunohost-3-5/7619">YunoHost v3.5</a></small></p> + <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-5-release-sortie-de-yunohost-3-5/7619">YunoHost v3.6</a></small></p> </div> <div class="row cf"> diff --git a/index_fr.md b/index_fr.md index 93d21c5e..367ef276 100644 --- a/index_fr.md +++ b/index_fr.md @@ -39,7 +39,7 @@ <div class="call-to-action"> <a class="btn btn-primary btn-lg" href="/try_fr">Essayer</a> <a class="btn btn-success btn-lg" href="/install_fr">Installer</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-5-release-sortie-de-yunohost-3-5/7619">YunoHost v3.5</a></small></p> + <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-5-release-sortie-de-yunohost-3-5/7619">YunoHost v3.6</a></small></p> </div> <hr /> diff --git a/index_it.md b/index_it.md index febabad4..c45c4709 100644 --- a/index_it.md +++ b/index_it.md @@ -44,7 +44,7 @@ <div class="call-to-action"> <a class="btn btn-primary btn-lg" href="/try">Provalo</a> <a class="btn btn-success btn-lg" href="/install">Per cominciare</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-5-release-sortie-de-yunohost-3-5/7619">YunoHost v3.5</a></small></p> + <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-5-release-sortie-de-yunohost-3-5/7619">YunoHost v3.6</a></small></p> </div> <div class="row cf"> From be22d9807407c05a2e878bb3c2057f5c7ee1c3f9 Mon Sep 17 00:00:00 2001 From: ljf <ljf+git@grimaud.me> Date: Sat, 6 Jul 2019 12:49:05 +0200 Subject: [PATCH 034/360] [fix] Update link to 3.6 announcement --- index.md | 2 +- index_ar.md | 2 +- index_de.md | 2 +- index_es.md | 2 +- index_fr.md | 2 +- index_it.md | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/index.md b/index.md index 17ca1a20..2d757617 100644 --- a/index.md +++ b/index.md @@ -43,7 +43,7 @@ <div class="call-to-action"> <a class="btn btn-primary btn-lg" href="/try">Try it</a> <a class="btn btn-success btn-lg" href="/install">Get started</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-5-release-sortie-de-yunohost-3-5/7619">YunoHost v3.6</a></small></p> + <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-6-release-sortie-de-yunohost-3-6/8359">YunoHost v3.6</a></small></p> </div> <div class="row cf"> diff --git a/index_ar.md b/index_ar.md index 1836c6cc..1df4a89c 100644 --- a/index_ar.md +++ b/index_ar.md @@ -40,7 +40,7 @@ <div dir="auto" class="call-to-action"> <a class="btn btn-primary btn-lg" href="/try">تجريب</a> <a class="btn btn-success btn-lg" href="/install">تنصيب</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-5-release-sortie-de-yunohost-3-5/7619">YunoHost v3.6</a></small></p> + <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-6-release-sortie-de-yunohost-3-6/8359">YunoHost v3.6</a></small></p> </div> <hr /> diff --git a/index_de.md b/index_de.md index f5350f11..3e86b308 100644 --- a/index_de.md +++ b/index_de.md @@ -44,7 +44,7 @@ Self-Hosting für alle möglich macht.</small></h1> <div class="call-to-action"> <a class="btn btn-primary btn-lg" href="/try">Ausprobieren</a> <a class="btn btn-success btn-lg" href="/install">Loslegen</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-5-release-sortie-de-yunohost-3-5/7619">YunoHost v3.6</a></small></p> + <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-6-release-sortie-de-yunohost-3-6/8359">YunoHost v3.6</a></small></p> </div> <div class="row cf"> diff --git a/index_es.md b/index_es.md index ea7f490a..3bc6ceed 100644 --- a/index_es.md +++ b/index_es.md @@ -41,7 +41,7 @@ <div class="call-to-action"> <!-- <a class="btn btn-primary btn-lg" href="/try">Try it</a> --> <a class="btn btn-success btn-lg" href="/install">Get started</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-5-release-sortie-de-yunohost-3-5/7619">YunoHost v3.6</a></small></p> + <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-6-release-sortie-de-yunohost-3-6/8359">YunoHost v3.6</a></small></p> </div> <div class="row cf"> diff --git a/index_fr.md b/index_fr.md index 367ef276..c6e5c82c 100644 --- a/index_fr.md +++ b/index_fr.md @@ -39,7 +39,7 @@ <div class="call-to-action"> <a class="btn btn-primary btn-lg" href="/try_fr">Essayer</a> <a class="btn btn-success btn-lg" href="/install_fr">Installer</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-5-release-sortie-de-yunohost-3-5/7619">YunoHost v3.6</a></small></p> + <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-6-release-sortie-de-yunohost-3-6/8359">YunoHost v3.6</a></small></p> </div> <hr /> diff --git a/index_it.md b/index_it.md index c45c4709..de3db000 100644 --- a/index_it.md +++ b/index_it.md @@ -44,7 +44,7 @@ <div class="call-to-action"> <a class="btn btn-primary btn-lg" href="/try">Provalo</a> <a class="btn btn-success btn-lg" href="/install">Per cominciare</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-5-release-sortie-de-yunohost-3-5/7619">YunoHost v3.6</a></small></p> + <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-6-release-sortie-de-yunohost-3-6/8359">YunoHost v3.6</a></small></p> </div> <div class="row cf"> From b0c68239482402146abac03d98035cbdd25a4471 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Mon, 8 Jul 2019 18:00:24 +0200 Subject: [PATCH 035/360] Add link to Debian ISO --- install_on_debian.md | 2 ++ install_on_debian_fr.md | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/install_on_debian.md b/install_on_debian.md index 4c6b175a..45e1016c 100644 --- a/install_on_debian.md +++ b/install_on_debian.md @@ -9,6 +9,8 @@ An ARM box, a VPS, a dedicated server, a standard x86 computer, an old Macintosh, ... * with **Debian 9** (Stretch) installed <small>(with kernel >= 3.12)</small> + * the Debian 9 ISO can be downloaded from [here](https://www.debian.org/releases/stretch/debian-installer/). Take the 'netinst CD image' for your architecture. + * N.B. : having a graphical environment is *not* recommended! Servers are meant to be administrated remotely! * connected to the Internet * with a direct **root access** or via SSH diff --git a/install_on_debian_fr.md b/install_on_debian_fr.md index a1b85b3a..4b05905e 100644 --- a/install_on_debian_fr.md +++ b/install_on_debian_fr.md @@ -8,7 +8,9 @@ Sur une plateforme ARM, un VPS, un serveur dédié, un ordinateur x86 standard, un vieux Macintosh,... -* avec **Debian 9** (Stretch) installé +* avec **Debian 9** (Stretch) installé <small>(avec un kernel >= 3.12)</small> + * l'ISO Debian 9 ISO peut être téléchargée depuis [cette page](https://www.debian.org/releases/stretch/debian-installer/). Prenez la 'netinst CD image' pour votre architecture + * N.B. : Avoir un environnement graphique n'est *pas* recommandé ! Les serveurs sont généralement administrés à distance ! * connecté à Internet * avec un **accès root** directement ou par SSH From 9f25aa44671591dc9ede7bc79bf7fc922262d0c0 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Tue, 9 Jul 2019 12:14:28 +0200 Subject: [PATCH 036/360] Add a note about images being okay even though they are not the latest version --- images.md | 2 ++ images_fr.md | 1 + 2 files changed, 3 insertions(+) diff --git a/images.md b/images.md index a2798e07..be1840bb 100644 --- a/images.md +++ b/images.md @@ -6,6 +6,8 @@ This page requires Javascript enabled to display properly :s. <br/> </span> +N.B. : Even if the image does not corresponds to the latest version of YunoHost, you can still use it and do a regular system upgrade after setting up! + <div id="cards-list"> </div> diff --git a/images_fr.md b/images_fr.md index 5b049d6d..4b03c4f9 100644 --- a/images_fr.md +++ b/images_fr.md @@ -6,6 +6,7 @@ Cette page requiert que Javascript soit activé pour s'afficher correctement :s. <br/> </span> +N.B. : Même si l'image de corresponds pas à la dernière version de YunoHost, vous pouvez tout de même l'utiliser puis faire une mise à jour du système après l'installation ! <div id="cards-list"> </div> From 578c47ce1da6ad292c69cacf6b628b1e07aa5d44 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Thu, 11 Jul 2019 09:17:37 +0000 Subject: [PATCH 037/360] Correct spelling mistake --- packaging_apps_manifest.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging_apps_manifest.md b/packaging_apps_manifest.md index 8446c289..e8c713af 100644 --- a/packaging_apps_manifest.md +++ b/packaging_apps_manifest.md @@ -78,7 +78,7 @@ The `manifest.json` file defines the app's constants, a bunch of values that Yun * **arguments**: * **install**: argument for the YunoHost's administrator to enter at installation. * **name**: argument identification. - * **type**: (optional) argument type among `domain`, `path`, `user`, `app`, `boolean`, `string` and `password`. The field will be hiden in the password case. + * **type**: (optional) argument type among `domain`, `path`, `user`, `app`, `boolean`, `string` and `password`. The field will be hidden in the password case. * **choices** : (optional) restrict value to several choices. * **optional** : (optional) field which indicate if this argument is optional. It can have `true` and `false` value. * **ask**: question (at least in `en`) that you can translate. From bfa410c4e8a984a854f3db7f9b4d25b07db7f887 Mon Sep 17 00:00:00 2001 From: yalh76 <yalh@yahoo.com> Date: Thu, 11 Jul 2019 21:34:57 +0200 Subject: [PATCH 038/360] Update packaging_apps_helpers.md --- packaging_apps_helpers.md | 142 +++++++++++++++++++------------------- 1 file changed, 71 insertions(+), 71 deletions(-) diff --git a/packaging_apps_helpers.md b/packaging_apps_helpers.md index 9c67f777..ce923f41 100644 --- a/packaging_apps_helpers.md +++ b/packaging_apps_helpers.md @@ -27,7 +27,7 @@ </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backend#L19">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logrotate#L19">Dude, show me the code !</a> </p> </div> </div> @@ -50,7 +50,7 @@ </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backend#L99">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logrotate#L99">Dude, show me the code !</a> </p> </div> </div> @@ -80,7 +80,7 @@ </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backend#L120">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/systemd#L18">Dude, show me the code !</a> </p> </div> </div> @@ -109,7 +109,7 @@ </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backend#L156">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/systemd#L54">Dude, show me the code !</a> </p> </div> </div> @@ -138,7 +138,7 @@ </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backend#L192">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nginx#L21">Dude, show me the code !</a> </p> </div> </div> @@ -161,7 +161,7 @@ </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backend#L244">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nginx#L73">Dude, show me the code !</a> </p> </div> </div> @@ -190,7 +190,7 @@ </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backend#L255">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/php#L9">Dude, show me the code !</a> </p> </div> </div> @@ -213,7 +213,7 @@ </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backend#L302">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/php#L56">Dude, show me the code !</a> </p> </div> </div> @@ -249,7 +249,7 @@ </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backend#L377">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/fail2ban#L65">Dude, show me the code !</a> </p> </div> </div> @@ -272,7 +272,7 @@ </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backend#L459">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/fail2ban#L147">Dude, show me the code !</a> </p> </div> </div> @@ -303,7 +303,7 @@ </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/debug#L10">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L305">Dude, show me the code !</a> </p> </div> </div> @@ -334,7 +334,7 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/debug#L65">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L360">Dude, show me the code !</a> </p> </div> </div> @@ -368,7 +368,7 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/filesystem#L47">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L45">Dude, show me the code !</a> </p> </div> </div> @@ -391,7 +391,7 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/filesystem#L160">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L162">Dude, show me the code !</a> </p> </div> </div> @@ -432,7 +432,7 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/filesystem#L219">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L221">Dude, show me the code !</a> </p> </div> </div> @@ -461,7 +461,7 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/filesystem#L315">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L297">Dude, show me the code !</a> </p> </div> </div> @@ -495,7 +495,7 @@ modified config files.</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/filesystem#L348">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L330">Dude, show me the code !</a> </p> </div> </div> @@ -524,7 +524,7 @@ modified config files.</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/filesystem#L381">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L363">Dude, show me the code !</a> </p> </div> </div> @@ -553,7 +553,7 @@ modified config files.</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/filesystem#L399">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L335">Dude, show me the code !</a> </p> </div> </div> @@ -584,7 +584,7 @@ modified config files.</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/ip#L11">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/network#L35">Dude, show me the code !</a> </p> </div> </div> @@ -613,7 +613,7 @@ modified config files.</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/ip#L45">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/network#L69">Dude, show me the code !</a> </p> </div> </div> @@ -642,7 +642,7 @@ modified config files.</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/ip#L66">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/network#L90">Dude, show me the code !</a> </p> </div> </div> @@ -898,7 +898,7 @@ modified config files.</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/mysql#L250">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/string#L97">Dude, show me the code !</a> </p> </div> </div> @@ -942,7 +942,7 @@ modified config files.</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/network#L19">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/string#L125">Dude, show me the code !</a> </p> </div> </div> @@ -974,7 +974,7 @@ modified config files.</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/network#L45">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/network#L11">Dude, show me the code !</a> </p> </div> </div> @@ -1007,7 +1007,7 @@ modified config files.</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/network#L70">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L196">Dude, show me the code !</a> </p> </div> </div> @@ -1041,7 +1041,7 @@ modified config files.</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/network#L92">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L218">Dude, show me the code !</a> </p> </div> </div> @@ -1169,7 +1169,7 @@ modified config files.</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/package#L51">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L51">Dude, show me the code !</a> </p> </div> </div> @@ -1204,7 +1204,7 @@ modified config files.</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/package#L73">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L73">Dude, show me the code !</a> </p> </div> </div> @@ -1227,7 +1227,7 @@ modified config files.</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/package#L105">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L105">Dude, show me the code !</a> </p> </div> </div> @@ -1256,7 +1256,7 @@ modified config files.</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/package#L115">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L115">Dude, show me the code !</a> </p> </div> </div> @@ -1285,7 +1285,7 @@ modified config files.</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/package#L126">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L126">Dude, show me the code !</a> </p> </div> </div> @@ -1314,7 +1314,7 @@ modified config files.</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/package#L136">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L136">Dude, show me the code !</a> </p> </div> </div> @@ -1343,7 +1343,7 @@ modified config files.</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/package#L146">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L146">Dude, show me the code !</a> </p> </div> </div> @@ -1376,7 +1376,7 @@ This helper can/should only be called once per app</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/package#L206">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L206">Dude, show me the code !</a> </p> </div> </div> @@ -1399,7 +1399,7 @@ This helper can/should only be called once per app</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/package#L244">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L244">Dude, show me the code !</a> </p> </div> </div> @@ -1424,7 +1424,7 @@ usage: ynh_die --message=MSG [--ret_code=RETCODE]</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/print#L7">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L7">Dude, show me the code !</a> </p> </div> </div> @@ -1447,7 +1447,7 @@ usage: ynh_die --message=MSG [--ret_code=RETCODE]</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/print#L25">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L25">Dude, show me the code !</a> </p> </div> </div> @@ -1476,7 +1476,7 @@ usage: ynh_die --message=MSG [--ret_code=RETCODE]</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/print#L70">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L70">Dude, show me the code !</a> </p> </div> </div> @@ -1505,7 +1505,7 @@ usage: ynh_die --message=MSG [--ret_code=RETCODE]</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/print#L87">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L87">Dude, show me the code !</a> </p> </div> </div> @@ -1537,7 +1537,7 @@ If the command to execute uses double quotes, they have to be escaped or they wi </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/print#L108">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L108">Dude, show me the code !</a> </p> </div> </div> @@ -1569,7 +1569,7 @@ If the command to execute uses double quotes, they have to be escaped or they wi </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/print#L122">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L122">Dude, show me the code !</a> </p> </div> </div> @@ -1601,7 +1601,7 @@ If the command to execute uses double quotes, they have to be escaped or they wi </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/print#L136">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L136">Dude, show me the code !</a> </p> </div> </div> @@ -1633,7 +1633,7 @@ If the command to execute uses double quotes, they have to be escaped or they wi </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/print#L150">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L150">Dude, show me the code !</a> </p> </div> </div> @@ -1665,7 +1665,7 @@ If the command to execute uses double quotes, they have to be escaped or they wi </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/print#L164">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L164">Dude, show me the code !</a> </p> </div> </div> @@ -1689,7 +1689,7 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/print#L174">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L174">Dude, show me the code !</a> </p> </div> </div> @@ -1712,7 +1712,7 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/print#L183">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L183">Dude, show me the code !</a> </p> </div> </div> @@ -1744,7 +1744,7 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/print#L198">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L198">Dude, show me the code !</a> </p> </div> </div> @@ -1779,7 +1779,7 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/psql#L16">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L16">Dude, show me the code !</a> </p> </div> </div> @@ -1809,7 +1809,7 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/psql#L37">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L37">Dude, show me the code !</a> </p> </div> </div> @@ -1839,7 +1839,7 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/psql#L58">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L58">Dude, show me the code !</a> </p> </div> </div> @@ -1874,7 +1874,7 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/psql#L120">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L124">Dude, show me the code !</a> </p> </div> </div> @@ -1897,7 +1897,7 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri </ul> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/psql#L150">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L154">Dude, show me the code !</a> </p> </div> </div> @@ -1920,7 +1920,7 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri </ul> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/psql#L169">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L173">Dude, show me the code !</a> </p> </div> </div> @@ -1951,7 +1951,7 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/psql#L205">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L209">Dude, show me the code !</a> </p> </div> </div> @@ -1975,7 +1975,7 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri </ul> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/psql#L232">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L236">Dude, show me the code !</a> </p> </div> </div> @@ -1993,7 +1993,7 @@ Please always call this script in install and restore scripts</h6> <strong>Usage</strong>: <code class="helper-code">ynh_psql_test_if_first_run</code> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/psql#L262">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L264">Dude, show me the code !</a> </p> </div> </div> @@ -2204,7 +2204,7 @@ Please always call this script in install and restore scripts</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/system#L48">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L85">Dude, show me the code !</a> </p> </div> </div> @@ -2230,7 +2230,7 @@ Please always call this script in install and restore scripts</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/system#L59">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L305">Dude, show me the code !</a> </p> </div> </div> @@ -2262,7 +2262,7 @@ Please always call this script in install and restore scripts</h6> </ul> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/system#L76">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/systemd#L85">Dude, show me the code !</a> </p> </div> </div> @@ -2280,7 +2280,7 @@ Please always call this script in install and restore scripts</h6> <strong>Usage</strong>: <code class="helper-code">ynh_clean_check_starting</code> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/system#L164">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/systemd#L171">Dude, show me the code !</a> </p> </div> </div> @@ -2310,7 +2310,7 @@ Please always call this script in install and restore scripts</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/system#L177">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L406">Dude, show me the code !</a> </p> </div> </div> @@ -2343,7 +2343,7 @@ In the last example it return 4.3-2</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/system#L204">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L433">Dude, show me the code !</a> </p> </div> </div> @@ -2376,7 +2376,7 @@ In the last example it return 3</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/system#L227">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L456">Dude, show me the code !</a> </p> </div> </div> @@ -2401,7 +2401,7 @@ In the last example it return 3</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/system#L256">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L485">Dude, show me the code !</a> </p> </div> </div> @@ -2653,7 +2653,7 @@ In the last example it return 3</h6> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L11">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L378">Dude, show me the code !</a> </p> </div> </div> @@ -2680,7 +2680,7 @@ ynh_abort_if_errors</code> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L42">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L434">Dude, show me the code !</a> </p> </div> </div> @@ -2707,7 +2707,7 @@ ynh_abort_if_errors</code> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L74">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L385">Dude, show me the code !</a> </p> </div> </div> @@ -2737,7 +2737,7 @@ ynh_abort_if_errors</code> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L159">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L136">Dude, show me the code !</a> </p> </div> </div> @@ -2772,7 +2772,7 @@ ynh_abort_if_errors</code> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L266">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L250">Dude, show me the code !</a> </p> </div> </div> @@ -2802,7 +2802,7 @@ ynh_abort_if_errors</code> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L305">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L289">Dude, show me the code !</a> </p> </div> </div> From 7907936ad36555c2568fa5949550a778617cf70d Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Thu, 11 Jul 2019 22:04:06 +0200 Subject: [PATCH 039/360] Update helper doc with file generated from genererate_helper_doc.py --- packaging_apps_helpers.md | 5173 ++++++++++++++++++++++++++----------- 1 file changed, 3634 insertions(+), 1539 deletions(-) diff --git a/packaging_apps_helpers.md b/packaging_apps_helpers.md index ce923f41..1f97ff1b 100644 --- a/packaging_apps_helpers.md +++ b/packaging_apps_helpers.md @@ -1,345 +1,435 @@ <!-- NO_MARKDOWN_PARSING --> + <h1>App helpers</h1> -<h3 style="text-transform: uppercase; font-weight: bold">backend</h3> + + + +<h3 style="text-transform: uppercase; font-weight: bold">apt</h3> + + + <div class="helper-card"> <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_use_logrotate" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_use_logrotate</tt></h5> - <h6 class="helper-card-subtitle text-muted">Use logrotate to manage the logfile</h6> + <div data-toggle="collapse" href="#collapse-ynh_package_is_installed" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_package_is_installed</tt></h5> + <h6 class="helper-card-subtitle text-muted">Check either a package is installed or not</h6> </div> - <div id="collapse-ynh_use_logrotate" class="collapse" role="tabpanel"> + <div id="collapse-ynh_package_is_installed" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> - <strong>Usage</strong>: <code class="helper-code">ynh_use_logrotate [--logfile=/log/file] [--nonappend] [--specific_user=user/group]</code> + + <strong>Usage</strong>: <code class="helper-code">ynh_package_is_installed --package=name</code> + </p> + <p> <strong>Arguments</strong>: <ul> - <li><code>-l</code>, <code>--logfile</code> : absolute path of logfile</li> - <li><code>-n</code>, <code>--nonappend</code> : (optional) Replace the config file instead of appending this new config.</li> - <li><code>-u</code>, <code>--specific_user</code> : run logrotate as the specified user and group. If not specified logrotate is runned as root.</li> + + + <li><code>-p</code>, <code>--package</code> : the package name to check</li> + + </ul> </p> + + + + <p> + <strong>Example</strong>: <code class="helper-code">ynh_package_is_installed --package=yunohost && echo "ok"</code> + </p> + + + <p> <strong>Details</strong>: <p> - If no --logfile is provided, /var/log/${app} will be used as default.</br>logfile can be just a directory, or a full path to a logfile :</br>/parentdir/logdir</br>/parentdir/logdir/logfile.log</br></br>It's possible to use this helper multiple times, each config will be added to</br>the same logrotate config file. Unless you use the option --non-append</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> + Requires YunoHost version 2.2.4 or higher.</br></br> </p> </p> + <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logrotate#L19">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L51">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_remove_logrotate" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_remove_logrotate</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove the app's logrotate config.</h6> + <div data-toggle="collapse" href="#collapse-ynh_package_version" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_package_version</tt></h5> + <h6 class="helper-card-subtitle text-muted">Get the version of an installed package</h6> </div> - <div id="collapse-ynh_remove_logrotate" class="collapse" role="tabpanel"> + <div id="collapse-ynh_package_version" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> - <strong>Usage</strong>: <code class="helper-code">ynh_remove_logrotate</code> + + <strong>Usage</strong>: <code class="helper-code">ynh_package_version --package=name</code> + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-p</code>, <code>--package</code> : the package name to get version</li> + + + </ul> + </p> + + + <p> + <strong>Returns</strong>: the version or an empty string + </p> + + + <p> + <strong>Example</strong>: <code class="helper-code">version=$(ynh_package_version --package=yunohost)</code> + </p> + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.2.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L73">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_package_update" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_package_update</tt></h5> + <h6 class="helper-card-subtitle text-muted">Update package index files</h6> + </div> + <div id="collapse-ynh_package_update" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_package_update</code> + + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.2.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L105">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_package_install" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_package_install</tt></h5> + <h6 class="helper-card-subtitle text-muted">Install package(s)</h6> + </div> + <div id="collapse-ynh_package_install" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_package_install name [name [...]]</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>name</code> : the package name to install</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.2.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L115">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_package_remove" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_package_remove</tt></h5> + <h6 class="helper-card-subtitle text-muted">Remove package(s)</h6> + </div> + <div id="collapse-ynh_package_remove" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_package_remove name [name [...]]</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>name</code> : the package name to remove</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.2.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L126">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_package_autoremove" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_package_autoremove</tt></h5> + <h6 class="helper-card-subtitle text-muted">Remove package(s) and their uneeded dependencies</h6> + </div> + <div id="collapse-ynh_package_autoremove" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_package_autoremove name [name [...]]</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>name</code> : the package name to remove</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.2.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L136">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_package_autopurge" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_package_autopurge</tt></h5> + <h6 class="helper-card-subtitle text-muted">Purge package(s) and their uneeded dependencies</h6> + </div> + <div id="collapse-ynh_package_autopurge" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_package_autopurge name [name [...]]</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>name</code> : the package name to autoremove and purge</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.7.2 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L146">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_install_app_dependencies" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_install_app_dependencies</tt></h5> + <h6 class="helper-card-subtitle text-muted">Define and install dependencies with a equivs control file +This helper can/should only be called once per app</h6> + </div> + <div id="collapse-ynh_install_app_dependencies" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_install_app_dependencies dep [dep [...]] + You can give a choice between some package with this syntax : "dep1|dep2" + Example : ynh_install_app_dependencies dep1 dep2 "dep3|dep4|dep5" + This mean in the dependence tree : dep1 & dep2 & (dep3 | dep4 | dep5)</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>dep</code> : the package name to install in dependence</li> + + + </ul> + </p> + + + + + <p> <strong>Details</strong>: <p> Requires YunoHost version 2.6.4 or higher.</br></br> </p> </p> + <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logrotate#L99">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L206">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_add_systemd_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_add_systemd_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Create a dedicated systemd config</h6> + <div data-toggle="collapse" href="#collapse-ynh_remove_app_dependencies" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_remove_app_dependencies</tt></h5> + <h6 class="helper-card-subtitle text-muted">Remove fake package and its dependencies</h6> </div> - <div id="collapse-ynh_add_systemd_config" class="collapse" role="tabpanel"> + <div id="collapse-ynh_remove_app_dependencies" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> - <strong>Usage</strong>: <code class="helper-code">ynh_add_systemd_config [--service=service] [--template=template]</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-s</code>, <code>--service</code> : Service name (optionnal, $app by default)</li> - <li><code>-t</code>, <code>--template</code> : Name of template file (optionnal, this is 'systemd' by default, meaning ./conf/systemd.service will be used as template)</li> - </ul> + + <strong>Usage</strong>: <code class="helper-code">ynh_remove_app_dependencies</code> + </p> + + + + + <p> <strong>Details</strong>: <p> - This will use the template ../conf/<templatename>.service</br>to generate a systemd config, by replacing the following keywords</br>with global variables that should be defined before calling</br>this helper :</br></br>__APP__ by $app</br> __FINALPATH__ by $final_path</br></br>Requires YunoHost version 2.7.2 or higher.</br></br> + Dependencies will removed only if no other package need them.</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> </p> </p> + <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/systemd#L18">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L244">Dude, show me the code !</a> </p> + </div> </div> + </div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_remove_systemd_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_remove_systemd_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove the dedicated systemd config</h6> - </div> - <div id="collapse-ynh_remove_systemd_config" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_remove_systemd_config [--service=service]</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-s</code>, <code>--service</code> : Service name (optionnal, $app by default)</li> - </ul> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.7.2 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/systemd#L54">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_add_nginx_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_add_nginx_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Create a dedicated nginx config</h6> - </div> - <div id="collapse-ynh_add_nginx_config" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_add_nginx_config "list of others variables to replace"</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>list</code> : (Optional) list of others variables to replace separated by spaces. For example : 'path_2 port_2 ...'</li> - </ul> - </p> - <p> - <strong>Details</strong>: - <p> - This will use a template in ../conf/nginx.conf</br> __PATH__ by $path_url</br> __DOMAIN__ by $domain</br> __PORT__ by $port</br> __NAME__ by $app</br> __FINALPATH__ by $final_path</br></br>And dynamic variables (from the last example) :</br> __PATH_2__ by $path_2</br> __PORT_2__ by $port_2</br></br>Requires YunoHost version 2.7.2 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nginx#L21">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_remove_nginx_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_remove_nginx_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove the dedicated nginx config</h6> - </div> - <div id="collapse-ynh_remove_nginx_config" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_remove_nginx_config</code> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.7.2 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nginx#L73">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_add_fpm_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_add_fpm_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Create a dedicated php-fpm config</h6> - </div> - <div id="collapse-ynh_add_fpm_config" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_add_fpm_config [--phpversion=7.X]</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-v</code>, <code>--phpversion</code> : Version of php to use.</li> - </ul> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.7.2 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/php#L9">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_remove_fpm_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_remove_fpm_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove the dedicated php-fpm config</h6> - </div> - <div id="collapse-ynh_remove_fpm_config" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_remove_fpm_config</code> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.7.2 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/php#L56">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_add_fail2ban_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_add_fail2ban_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Create a dedicated fail2ban config (jail and filter conf files)</h6> - </div> - <div id="collapse-ynh_add_fail2ban_config" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code helper-usage">1: ynh_add_fail2ban_config --logpath=log_file --failregex=filter [--max_retry=max_retry] [--ports=ports] -2: ynh_add_fail2ban_config --use_template [--others_var="list of others variables to replace"] -| for example : 'var_1 var_2 ...'</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-l</code>, <code>--logpath=</code> : Log file to be checked by fail2ban</li> - <li><code>-r</code>, <code>--failregex=</code> : Failregex to be looked for by fail2ban</li> - <li><code>-m</code>, <code>--max_retry=</code> : Maximum number of retries allowed before banning IP address - default: 3</li> - <li><code>-p</code>, <code>--ports=</code> : Ports blocked for a banned IP address - default: http,https</li> - <li><code>-t</code>, <code>--use_template</code> : Use this helper in template mode</li> - <li><code>-v</code>, <code>--others_var=</code> : List of others variables to replace separeted by a space</li> - </ul> - </p> - <p> - <strong>Details</strong>: - <p> - -----------------------------------------------------------------------------</br></br>This will use a template in ../conf/f2b_jail.conf and ../conf/f2b_filter.conf</br> __APP__ by $app</br></br>You can dynamically replace others variables by example :</br> __VAR_1__ by $var_1</br> __VAR_2__ by $var_2</br></br>Generally your template will look like that by example (for synapse):</br></br>f2b_jail.conf:</br> [__APP__]</br> enabled = true</br> port = http,https</br> filter = __APP__</br> logpath = /var/log/__APP__/logfile.log</br> maxretry = 3</br></br>f2b_filter.conf:</br> [INCLUDES]</br> before = common.conf</br> [Definition]</br></br># Part of regex definition (just used to make more easy to make the global regex)</br> __synapse_start_line = .? \- synapse\..+ \-</br></br># Regex definition.</br> failregex = ^%(__synapse_start_line)s INFO \- POST\-(\d+)\- <HOST> \- \d+ \- Received request\: POST /_matrix/client/r0/login\??<SKIPLINES>%(__synapse_start_line)s INFO \- POST\-\1\- Got login request with identifier: \{u'type': u'm.id.user', u'user'\: u'(.+?)'\}, medium\: None, address: None, user\: u'\5'<SKIPLINES>%(__synapse_start_line)s WARNING \- \- (Attempted to login as @\5\:.+ but they do not exist|Failed password login for user @\5\:.+)$</br></br>ignoreregex =</br></br>-----------------------------------------------------------------------------</br></br>Note about the "failregex" option:</br> regex to match the password failure messages in the logfile. The</br> host must be matched by a group named "host". The tag "<HOST>" can</br> be used for standard IP/hostname matching and is only an alias for</br> (?:::f{4,6}:)?(?P<host>[\w\-.^_]+)</br></br>You can find some more explainations about how to make a regex here :</br> https://www.fail2ban.org/wiki/index.php/MANUAL_0_8#Filters</br></br>Note that the logfile need to exist before to call this helper !!</br></br>To validate your regex you can test with this command:</br>fail2ban-regex /var/log/YOUR_LOG_FILE_PATH /etc/fail2ban/filter.d/YOUR_APP.conf</br></br>Requires YunoHost version 3.?.? or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/fail2ban#L65">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_remove_fail2ban_config" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_remove_fail2ban_config</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove the dedicated fail2ban config (jail and filter conf files)</h6> - </div> - <div id="collapse-ynh_remove_fail2ban_config" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_remove_fail2ban_config</code> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.?.? or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/fail2ban#L147">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<h3 style="text-transform: uppercase; font-weight: bold">debug</h3> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_debug" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_debug</tt></h5> - <h6 class="helper-card-subtitle text-muted">Debugger for app packagers</h6> - </div> - <div id="collapse-ynh_debug" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_debug [--message=message] [--trace=1/0]</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-m</code>, <code>--message=</code> : The text to print</li> - <li><code>-t</code>, <code>--trace=</code> : Turn on or off the trace of the script. Usefull to trace nonly a small part of a script.</li> - </ul> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.?.? or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L305">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_debug_exec" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_debug_exec</tt></h5> - <h6 class="helper-card-subtitle text-muted">Execute a command and print the result as debug</h6> - </div> - <div id="collapse-ynh_debug_exec" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_debug_exec command to execute -ynh_debug_exec "command to execute | following command" -In case of use of pipes, you have to use double quotes. Otherwise, this helper will be executed with the first command, then be sent to the next pipe.</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>command</code> : command to execute</li> - </ul> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 3.?.? or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L360">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<h3 style="text-transform: uppercase; font-weight: bold">filesystem</h3> + + + + +<h3 style="text-transform: uppercase; font-weight: bold">backup</h3> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_backup" style="cursor:pointer"> @@ -349,30 +439,60 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w <div id="collapse-ynh_backup" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_backup --src_path=src_path [--dest_path=dest_path] [--is_big] [--not_mandatory]</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-s</code>, <code>--src_path</code> : file or directory to bind or symlink or copy. it shouldn't be in the backup dir.</li> + + + <li><code>-d</code>, <code>--dest_path</code> : destination file or directory inside the backup dir</li> + + + <li><code>-b</code>, <code>--is_big</code> : Indicate data are big (mail, video, image ...)</li> + + + <li><code>-m</code>, <code>--not_mandatory</code> : Indicate that if the file is missing, the backup can ignore it.</li> + + + <li><code>arg</code> : Deprecated arg</li> + + </ul> </p> + + + + + <p> <strong>Details</strong>: <p> Note: this helper could be used in backup hook or in backup script inside an</br>app package</br></br>Details: ynh_backup writes SRC and the relative DEST into a CSV file. And it</br>creates the parent destination directory</br></br>If DEST is ended by a slash it complete this path with the basename of SRC.</br></br>Example in the context of a wordpress app</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf"</br># => This line will be added into CSV file</br># "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/etc/nginx/conf.d/$domain.d/$app.conf"</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf/nginx.conf"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/nginx.conf"</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf/"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/$app.conf"</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf"</br></br>#Deprecated usages (maintained for retro-compatibility)</br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "${backup_dir}/conf/nginx.conf"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/nginx.conf"</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "/conf/"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/$app.conf"</br></br>Requires YunoHost version 2.4.0 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L45">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_restore" style="cursor:pointer"> @@ -382,20 +502,33 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w <div id="collapse-ynh_restore" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_restore</code> + </p> + + + + + <p> <strong>Details</strong>: <p> Requires YunoHost version 2.6.4 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L162">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_restore_file" style="cursor:pointer"> @@ -405,38 +538,73 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w <div id="collapse-ynh_restore_file" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_restore_file --origin_path=origin_path [--dest_path=dest_path] [--not_mandatory]</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-o</code>, <code>--origin_path</code> : Path where was located the file or the directory before to be backuped or relative path to $YNH_CWD where it is located in the backup archive</li> + + + <li><code>-d</code>, <code>--dest_path</code> : Path where restore the file or the dir, if unspecified, the destination will be ORIGIN_PATH or if the ORIGIN_PATH doesn't exist in the archive, the destination will be searched into backup.csv</li> + + + <li><code>-m</code>, <code>--not_mandatory</code> : Indicate that if the file is missing, the restore process can ignore it.</li> + + </ul> </p> + + + + <p> <strong>Examples</strong>:<ul> + + <code class="helper-code"> ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf"</code> + <br> + + You can also use relative paths: + <br> + + <code class="helper-code"> ynh_restore_file "conf/nginx.conf"</code> + <br> + </ul> </p> + + <p> <strong>Details</strong>: <p> Use the registered path in backup_list by ynh_backup to restore the file at</br>the right place.</br></br>If DEST_PATH already exists and is lighter than 500 Mo, a backup will be made in</br>/home/yunohost.conf/backup/. Otherwise, the existing file is removed.</br></br>if apps/wordpress/etc/nginx/conf.d/$domain.d/$app.conf exists, restore it into</br>/etc/nginx/conf.d/$domain.d/$app.conf</br>if no, search for a match in the csv (eg: conf/nginx.conf) and restore it into</br>/etc/nginx/conf.d/$domain.d/$app.conf</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L221">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_store_file_checksum" style="cursor:pointer"> @@ -446,26 +614,44 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w <div id="collapse-ynh_store_file_checksum" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_store_file_checksum --file=file</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-f</code>, <code>--file</code> : The file on which the checksum will performed, then stored.</li> + + </ul> </p> + + + + + <p> <strong>Details</strong>: <p> $app should be defined when calling this helper</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L297">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_backup_if_checksum_is_different" style="cursor:pointer"> @@ -477,29 +663,48 @@ modified config files.</h6> <div id="collapse-ynh_backup_if_checksum_is_different" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_backup_if_checksum_is_different --file=file</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-f</code>, <code>--file</code> : The file on which the checksum test will be perfomed.</li> + + </ul> </p> + + <p> <strong>Returns</strong>: the name of a backup file, or nothing </p> + + + + <p> <strong>Details</strong>: <p> $app should be defined when calling this helper</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L330">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_delete_file_checksum" style="cursor:pointer"> @@ -509,902 +714,244 @@ modified config files.</h6> <div id="collapse-ynh_delete_file_checksum" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_remove_file_checksum file</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-f</code>, <code>--file=</code> : The file for which the checksum will be deleted</li> + + </ul> </p> + + + + + <p> <strong>Details</strong>: <p> $app should be defined when calling this helper</br></br>Requires YunoHost version 3.3.1 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L363">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_secure_remove" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_secure_remove</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove a file or a directory securely</h6> + <div data-toggle="collapse" href="#collapse-ynh_backup_before_upgrade" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_backup_before_upgrade</tt></h5> + <h6 class="helper-card-subtitle text-muted">Make a backup in case of failed upgrade</h6> </div> - <div id="collapse-ynh_secure_remove" class="collapse" role="tabpanel"> + <div id="collapse-ynh_backup_before_upgrade" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> - <strong>Usage</strong>: <code class="helper-code">ynh_secure_remove --file=path_to_remove</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-f</code>, <code>--file</code> : File or directory to remove</li> - </ul> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L335">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<h3 style="text-transform: uppercase; font-weight: bold">getopts</h3> -<h3 style="text-transform: uppercase; font-weight: bold">ip</h3> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_validate_ip" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_validate_ip</tt></h5> - <h6 class="helper-card-subtitle text-muted">Validate an IP address</h6> - </div> - <div id="collapse-ynh_validate_ip" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_validate_ip --family=family --ip_address=ip_address</code> - </p> - <p> - <strong>Returns</strong>: 0 for valid ip addresses, 1 otherwise - </p> - <p> - <strong>Example</strong>: <code class="helper-code">ynh_validate_ip 4 111.222.333.444</code> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/network#L35">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_validate_ip4" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_validate_ip4</tt></h5> - <h6 class="helper-card-subtitle text-muted">Validate an IPv4 address</h6> - </div> - <div id="collapse-ynh_validate_ip4" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_validate_ip4 --ip_address=ip_address</code> - </p> - <p> - <strong>Returns</strong>: 0 for valid ipv4 addresses, 1 otherwise - </p> - <p> - <strong>Example</strong>: <code class="helper-code">ynh_validate_ip4 111.222.333.444</code> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/network#L69">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_validate_ip6" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_validate_ip6</tt></h5> - <h6 class="helper-card-subtitle text-muted">Validate an IPv6 address</h6> - </div> - <div id="collapse-ynh_validate_ip6" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_validate_ip6 --ip_address=ip_address</code> - </p> - <p> - <strong>Returns</strong>: 0 for valid ipv6 addresses, 1 otherwise - </p> - <p> - <strong>Example</strong>: <code class="helper-code">ynh_validate_ip6 2000:dead:beef::1</code> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/network#L90">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<h3 style="text-transform: uppercase; font-weight: bold">mysql</h3> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_mysql_connect_as" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_mysql_connect_as</tt></h5> - <h6 class="helper-card-subtitle text-muted">Open a connection as a user</h6> - </div> - <div id="collapse-ynh_mysql_connect_as" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_mysql_connect_as --user=user --password=password [--database=database]</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-u</code>, <code>--user</code> : the user name to connect as</li> - <li><code>-p</code>, <code>--password</code> : the user password</li> - <li><code>-d</code>, <code>--database</code> : the database to connect to</li> - </ul> - </p> - <p> - <strong>Example</strong>: <code class="helper-code">ynh_mysql_connect_as 'user' 'pass' <<< "UPDATE ...;" example: ynh_mysql_connect_as 'user' 'pass' < /path/to/file.sql</code> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/mysql#L16">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_mysql_execute_as_root" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_mysql_execute_as_root</tt></h5> - <h6 class="helper-card-subtitle text-muted">Execute a command as root user</h6> - </div> - <div id="collapse-ynh_mysql_execute_as_root" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_mysql_execute_as_root --sql=sql [--database=database]</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-s</code>, <code>--sql</code> : the SQL command to execute</li> - <li><code>-d</code>, <code>--database</code> : the database to connect to</li> - </ul> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/mysql#L37">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_mysql_execute_file_as_root" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_mysql_execute_file_as_root</tt></h5> - <h6 class="helper-card-subtitle text-muted">Execute a command from a file as root user</h6> - </div> - <div id="collapse-ynh_mysql_execute_file_as_root" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_mysql_execute_file_as_root --file=file [--database=database]</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-f</code>, <code>--file</code> : the file containing SQL commands</li> - <li><code>-d</code>, <code>--database</code> : the database to connect to</li> - </ul> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/mysql#L58">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_mysql_dump_db" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_mysql_dump_db</tt></h5> - <h6 class="helper-card-subtitle text-muted">Dump a database</h6> - </div> - <div id="collapse-ynh_mysql_dump_db" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_mysql_dump_db --database=database</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-d</code>, <code>--database</code> : the database name to dump</li> - </ul> - </p> - <p> - <strong>Returns</strong>: the mysqldump output - </p> - <p> - <strong>Example</strong>: <code class="helper-code">ynh_mysql_dump_db 'roundcube' > ./dump.sql</code> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/mysql#L121">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_mysql_user_exists" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_mysql_user_exists</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check if a mysql user exists</h6> - </div> - <div id="collapse-ynh_mysql_user_exists" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_mysql_user_exists --user=user</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-u</code>, <code>--user</code> : the user for which to check existence</li> - </ul> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/mysql#L152">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_mysql_setup_db" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_mysql_setup_db</tt></h5> - <h6 class="helper-card-subtitle text-muted">Create a database, an user and its password. Then store the password in the app's config</h6> - </div> - <div id="collapse-ynh_mysql_setup_db" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_mysql_setup_db --db_user=user --db_name=name [--db_pwd=pwd]</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-u</code>, <code>--db_user</code> : Owner of the database</li> - <li><code>-n</code>, <code>--db_name</code> : Name of the database</li> - <li><code>-p</code>, <code>--db_pwd</code> : Password of the database. If not provided, a password will be generated</li> - </ul> - </p> - <p> - <strong>Details</strong>: - <p> - After executing this helper, the password of the created database will be available in $db_pwd</br>It will also be stored as "mysqlpwd" into the app settings.</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/mysql#L192">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_mysql_remove_db" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_mysql_remove_db</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove a database if it exists, and the associated user</h6> - </div> - <div id="collapse-ynh_mysql_remove_db" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_mysql_remove_db --db_user=user --db_name=name</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-u</code>, <code>--db_user</code> : Owner of the database</li> - <li><code>-n</code>, <code>--db_name</code> : Name of the database</li> - </ul> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/mysql#L217">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_sanitize_dbid" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_sanitize_dbid</tt></h5> - <h6 class="helper-card-subtitle text-muted">Sanitize a string intended to be the name of a database -(More specifically : replace - and . by _)</h6> - </div> - <div id="collapse-ynh_sanitize_dbid" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_sanitize_dbid --db_name=name</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-n</code>, <code>--db_name</code> : name to correct/sanitize</li> - </ul> - </p> - <p> - <strong>Returns</strong>: the corrected name - </p> - <p> - <strong>Example</strong>: <code class="helper-code">dbname=$(ynh_sanitize_dbid $app)</code> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/string#L97">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<h3 style="text-transform: uppercase; font-weight: bold">network</h3> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_normalize_url_path" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_normalize_url_path</tt></h5> - <h6 class="helper-card-subtitle text-muted">Normalize the url path syntax</h6> - </div> - <div id="collapse-ynh_normalize_url_path" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_normalize_url_path --path_url=path_to_normalize</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-p</code>, <code>--path_url</code> : URL path to normalize before using it</li> - </ul> - </p> - <p> - <strong>Examples</strong>:<ul> - <code class="helper-code"> url_path=$(ynh_normalize_url_path $url_path)</code> - <br> - <code class="helper-code"> ynh_normalize_url_path example # -> /example</code> - <br> - <code class="helper-code"> ynh_normalize_url_path /example # -> /example</code> - <br> - <code class="helper-code"> ynh_normalize_url_path /example/ # -> /example</code> - <br> - <code class="helper-code"> ynh_normalize_url_path / # -> /</code> - <br> - </ul> - </p> - <p> - <strong>Details</strong>: - <p> - Handle the slash at the beginning of path and its absence at ending</br>Return a normalized url path</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/string#L125">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_find_port" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_find_port</tt></h5> - <h6 class="helper-card-subtitle text-muted">Find a free port and return it</h6> - </div> - <div id="collapse-ynh_find_port" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_find_port --port=begin_port</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-p</code>, <code>--port</code> : port to start to search</li> - </ul> - </p> - <p> - <strong>Example</strong>: <code class="helper-code">port=$(ynh_find_port --port=8080)</code> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/network#L11">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_webpath_available" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_webpath_available</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check availability of a web path</h6> - </div> - <div id="collapse-ynh_webpath_available" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_webpath_available --domain=domain --path_url=path</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-d</code>, <code>--domain</code> : the domain/host of the url</li> - <li><code>-p</code>, <code>--path_url</code> : the web path to check the availability of</li> - </ul> - </p> - <p> - <strong>Example</strong>: <code class="helper-code">ynh_webpath_available --domain=some.domain.tld --path_url=/coffee</code> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L196">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_webpath_register" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_webpath_register</tt></h5> - <h6 class="helper-card-subtitle text-muted">Register/book a web path for an app</h6> - </div> - <div id="collapse-ynh_webpath_register" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_webpath_register --app=app --domain=domain --path_url=path</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-a</code>, <code>--app</code> : the app for which the domain should be registered</li> - <li><code>-d</code>, <code>--domain</code> : the domain/host of the web path</li> - <li><code>-p</code>, <code>--path_url</code> : the web path to be registered</li> - </ul> - </p> - <p> - <strong>Example</strong>: <code class="helper-code">ynh_webpath_register --app=wordpress --domain=some.domain.tld --path_url=/coffee</code> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L218">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<h3 style="text-transform: uppercase; font-weight: bold">nodejs</h3> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-export" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>export</tt></h5> - <h6 class="helper-card-subtitle text-muted">N_PREFIX is the directory of n, it needs to be loaded as a environment variable.</h6> - </div> - <div id="collapse-export" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code"></code> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nodejs#L6">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_use_nodejs" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_use_nodejs</tt></h5> - <h6 class="helper-card-subtitle text-muted">Load the version of node for an app, and set variables.</h6> - </div> - <div id="collapse-ynh_use_nodejs" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_use_nodejs</code> - </p> - <p> - <strong>Details</strong>: - <p> - ynh_use_nodejs has to be used in any app scripts before using node for the first time.</br></br>2 variables are available:</br> - $nodejs_path: The absolute path of node for the chosen version.</br> - $nodejs_version: Just the version number of node for this app. Stored as 'nodejs_version' in settings.yml.</br>And 2 alias stored in variables:</br> - $nodejs_use_version: An old variable, not used anymore. Keep here to not break old apps</br> NB: $PATH will contain the path to node, it has to be propagated to any other shell which needs to use it.</br> That's means it has to be added to any systemd script.</br></br>Requires YunoHost version 2.7.12 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nodejs#L43">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_install_nodejs" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_install_nodejs</tt></h5> - <h6 class="helper-card-subtitle text-muted">Install a specific version of nodejs</h6> - </div> - <div id="collapse-ynh_install_nodejs" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_install_nodejs --nodejs_version=nodejs_version - If possible, prefer to use major version number (e.g. 8 instead of 8.10.0). - The crontab will handle the update of minor versions when needed.</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-n</code>, <code>--nodejs_version</code> : Version of node to install.</li> - </ul> - </p> - <p> - <strong>Details</strong>: - <p> - n (Node version management) uses the PATH variable to store the path of the version of node it is going to use.</br>That's how it changes the version</br></br>ynh_install_nodejs will install the version of node provided as argument by using n.</br></br>Requires YunoHost version 2.7.12 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nodejs#L68">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_remove_nodejs" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_remove_nodejs</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove the version of node used by the app.</h6> - </div> - <div id="collapse-ynh_remove_nodejs" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_remove_nodejs</code> - </p> - <p> - <strong>Details</strong>: - <p> - This helper will check if another app uses the same version of node,</br>if not, this version of node will be removed.</br>If no other app uses node, n will be also removed.</br></br>Requires YunoHost version 2.7.12 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nodejs#L146">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<h3 style="text-transform: uppercase; font-weight: bold">package</h3> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_package_is_installed" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_package_is_installed</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check either a package is installed or not</h6> - </div> - <div id="collapse-ynh_package_is_installed" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_package_is_installed --package=name</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-p</code>, <code>--package</code> : the package name to check</li> - </ul> - </p> - <p> - <strong>Example</strong>: <code class="helper-code">ynh_package_is_installed --package=yunohost && echo "ok"</code> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L51">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_package_version" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_package_version</tt></h5> - <h6 class="helper-card-subtitle text-muted">Get the version of an installed package</h6> - </div> - <div id="collapse-ynh_package_version" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_package_version --package=name</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-p</code>, <code>--package</code> : the package name to get version</li> - </ul> - </p> - <p> - <strong>Returns</strong>: the version or an empty string - </p> - <p> - <strong>Example</strong>: <code class="helper-code">version=$(ynh_package_version --package=yunohost)</code> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L73">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_package_update" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_package_update</tt></h5> - <h6 class="helper-card-subtitle text-muted">Update package index files</h6> - </div> - <div id="collapse-ynh_package_update" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_package_update</code> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L105">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_package_install" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_package_install</tt></h5> - <h6 class="helper-card-subtitle text-muted">Install package(s)</h6> - </div> - <div id="collapse-ynh_package_install" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_package_install name [name [...]]</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>name</code> : the package name to install</li> - </ul> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L115">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_package_remove" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_package_remove</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove package(s)</h6> - </div> - <div id="collapse-ynh_package_remove" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_package_remove name [name [...]]</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>name</code> : the package name to remove</li> - </ul> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L126">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_package_autoremove" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_package_autoremove</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove package(s) and their uneeded dependencies</h6> - </div> - <div id="collapse-ynh_package_autoremove" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_package_autoremove name [name [...]]</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>name</code> : the package name to remove</li> - </ul> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L136">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_package_autopurge" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_package_autopurge</tt></h5> - <h6 class="helper-card-subtitle text-muted">Purge package(s) and their uneeded dependencies</h6> - </div> - <div id="collapse-ynh_package_autopurge" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_package_autopurge name [name [...]]</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>name</code> : the package name to autoremove and purge</li> - </ul> - </p> + + <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_backup_before_upgrade +ynh_clean_setup () { + ynh_restore_upgradebackup +} +ynh_abort_if_errors</code> + + </p> + + + + + <p> <strong>Details</strong>: <p> Requires YunoHost version 2.7.2 or higher.</br></br> </p> </p> + <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L146">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L385">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_install_app_dependencies" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_install_app_dependencies</tt></h5> - <h6 class="helper-card-subtitle text-muted">Define and install dependencies with a equivs control file -This helper can/should only be called once per app</h6> + <div data-toggle="collapse" href="#collapse-ynh_restore_upgradebackup" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_restore_upgradebackup</tt></h5> + <h6 class="helper-card-subtitle text-muted">Restore a previous backup if the upgrade process failed</h6> </div> - <div id="collapse-ynh_install_app_dependencies" class="collapse" role="tabpanel"> + <div id="collapse-ynh_restore_upgradebackup" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_install_app_dependencies dep [dep [...]] - You can give a choice between some package with this syntax : "dep1|dep2" - Example : ynh_install_app_dependencies dep1 dep2 "dep3|dep4|dep5" - This mean in the dependence tree : dep1 & dep2 & (dep3 | dep4 | dep5)</code> + + <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_backup_before_upgrade +ynh_clean_setup () { + ynh_restore_upgradebackup +} +ynh_abort_if_errors</code> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.7.2 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L434">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + + +<h3 style="text-transform: uppercase; font-weight: bold">fail2ban</h3> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_add_fail2ban_config" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_add_fail2ban_config</tt></h5> + <h6 class="helper-card-subtitle text-muted">Create a dedicated fail2ban config (jail and filter conf files)</h6> + </div> + <div id="collapse-ynh_add_fail2ban_config" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code helper-usage">1: ynh_add_fail2ban_config --logpath=log_file --failregex=filter [--max_retry=max_retry] [--ports=ports] +2: ynh_add_fail2ban_config --use_template [--others_var="list of others variables to replace"] +| for example : 'var_1 var_2 ...'</code> + + </p> + <p> <strong>Arguments</strong>: <ul> - <li><code>dep</code> : the package name to install in dependence</li> + + + <li><code>-l</code>, <code>--logpath=</code> : Log file to be checked by fail2ban</li> + + + + <li><code>-r</code>, <code>--failregex=</code> : Failregex to be looked for by fail2ban</li> + + + + <li><code>-m</code>, <code>--max_retry=</code> : Maximum number of retries allowed before banning IP address - default: 3</li> + + + + <li><code>-p</code>, <code>--ports=</code> : Ports blocked for a banned IP address - default: http,https</li> + + + + <li><code>-t</code>, <code>--use_template</code> : Use this helper in template mode</li> + + + + <li><code>-v</code>, <code>--others_var=</code> : List of others variables to replace separeted by a space</li> + + </ul> </p> + + + + + <p> <strong>Details</strong>: <p> - Requires YunoHost version 2.6.4 or higher.</br></br> + -----------------------------------------------------------------------------</br></br>This will use a template in ../conf/f2b_jail.conf and ../conf/f2b_filter.conf</br> __APP__ by $app</br></br>You can dynamically replace others variables by example :</br> __VAR_1__ by $var_1</br> __VAR_2__ by $var_2</br></br>Generally your template will look like that by example (for synapse):</br></br>f2b_jail.conf:</br> [__APP__]</br> enabled = true</br> port = http,https</br> filter = __APP__</br> logpath = /var/log/__APP__/logfile.log</br> maxretry = 3</br></br>f2b_filter.conf:</br> [INCLUDES]</br> before = common.conf</br> [Definition]</br></br># Part of regex definition (just used to make more easy to make the global regex)</br> __synapse_start_line = .? \- synapse\..+ \-</br></br># Regex definition.</br> failregex = ^%(__synapse_start_line)s INFO \- POST\-(\d+)\- <HOST> \- \d+ \- Received request\: POST /_matrix/client/r0/login\??<SKIPLINES>%(__synapse_start_line)s INFO \- POST\-\1\- Got login request with identifier: \{u'type': u'm.id.user', u'user'\: u'(.+?)'\}, medium\: None, address: None, user\: u'\5'<SKIPLINES>%(__synapse_start_line)s WARNING \- \- (Attempted to login as @\5\:.+ but they do not exist|Failed password login for user @\5\:.+)$</br></br>ignoreregex =</br></br>-----------------------------------------------------------------------------</br></br>Note about the "failregex" option:</br> regex to match the password failure messages in the logfile. The</br> host must be matched by a group named "host". The tag "<HOST>" can</br> be used for standard IP/hostname matching and is only an alias for</br> (?:::f{4,6}:)?(?P<host>[\w\-.^_]+)</br></br>You can find some more explainations about how to make a regex here :</br> https://www.fail2ban.org/wiki/index.php/MANUAL_0_8#Filters</br></br>Note that the logfile need to exist before to call this helper !!</br></br>To validate your regex you can test with this command:</br>fail2ban-regex /var/log/YOUR_LOG_FILE_PATH /etc/fail2ban/filter.d/YOUR_APP.conf</br></br>Requires YunoHost version 3.5.0 or higher.</br></br> </p> </p> + <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L206">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/fail2ban#L65">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_remove_app_dependencies" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_remove_app_dependencies</tt></h5> - <h6 class="helper-card-subtitle text-muted">Remove fake package and its dependencies</h6> + <div data-toggle="collapse" href="#collapse-ynh_remove_fail2ban_config" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_remove_fail2ban_config</tt></h5> + <h6 class="helper-card-subtitle text-muted">Remove the dedicated fail2ban config (jail and filter conf files)</h6> </div> - <div id="collapse-ynh_remove_app_dependencies" class="collapse" role="tabpanel"> + <div id="collapse-ynh_remove_fail2ban_config" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> - <strong>Usage</strong>: <code class="helper-code">ynh_remove_app_dependencies</code> + + <strong>Usage</strong>: <code class="helper-code">ynh_remove_fail2ban_config</code> + </p> + + + + + <p> <strong>Details</strong>: <p> - Dependencies will removed only if no other package need them.</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> + Requires YunoHost version 3.5.0 or higher.</br></br> </p> </p> + <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L244">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/fail2ban#L147">Dude, show me the code !</a> </p> + </div> </div> + </div> -<h3 style="text-transform: uppercase; font-weight: bold">print</h3> + + + + +<h3 style="text-transform: uppercase; font-weight: bold">getopts</h3> + + + + +<h3 style="text-transform: uppercase; font-weight: bold">logging</h3> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_die" style="cursor:pointer"> @@ -1415,20 +962,33 @@ usage: ynh_die --message=MSG [--ret_code=RETCODE]</h6> <div id="collapse-ynh_die" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code"></code> + </p> + + + + + <p> <strong>Details</strong>: <p> Requires YunoHost version 2.4.0 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L7">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_print_info" style="cursor:pointer"> @@ -1438,20 +998,33 @@ usage: ynh_die --message=MSG [--ret_code=RETCODE]</h6> <div id="collapse-ynh_print_info" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_print_info --message="Some message"</code> + </p> + + + + + <p> <strong>Details</strong>: <p> Requires YunoHost version 3.2.0 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L25">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_print_warn" style="cursor:pointer"> @@ -1461,26 +1034,44 @@ usage: ynh_die --message=MSG [--ret_code=RETCODE]</h6> <div id="collapse-ynh_print_warn" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_print_warn --message="Text to print"</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-m</code>, <code>--message</code> : The text to print</li> + + </ul> </p> + + + + + <p> <strong>Details</strong>: <p> Requires YunoHost version 3.2.0 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L70">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_print_err" style="cursor:pointer"> @@ -1490,26 +1081,44 @@ usage: ynh_die --message=MSG [--ret_code=RETCODE]</h6> <div id="collapse-ynh_print_err" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_print_err --message="Text to print"</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-m</code>, <code>--message</code> : The text to print</li> + + </ul> </p> + + + + + <p> <strong>Details</strong>: <p> Requires YunoHost version 3.2.0 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L87">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_exec_err" style="cursor:pointer"> @@ -1519,29 +1128,47 @@ usage: ynh_die --message=MSG [--ret_code=RETCODE]</h6> <div id="collapse-ynh_exec_err" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_err command to execute ynh_exec_err "command to execute | following command" In case of use of pipes, you have to use double quotes. Otherwise, this helper will be executed with the first command, then be sent to the next pipe. If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>command</code> : command to execute</li> + + </ul> </p> + + + + + <p> <strong>Details</strong>: <p> Requires YunoHost version 3.2.0 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L108">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_exec_warn" style="cursor:pointer"> @@ -1551,29 +1178,47 @@ If the command to execute uses double quotes, they have to be escaped or they wi <div id="collapse-ynh_exec_warn" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_warn command to execute ynh_exec_warn "command to execute | following command" In case of use of pipes, you have to use double quotes. Otherwise, this helper will be executed with the first command, then be sent to the next pipe. If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>command</code> : command to execute</li> + + </ul> </p> + + + + + <p> <strong>Details</strong>: <p> Requires YunoHost version 3.2.0 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L122">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_exec_warn_less" style="cursor:pointer"> @@ -1583,29 +1228,47 @@ If the command to execute uses double quotes, they have to be escaped or they wi <div id="collapse-ynh_exec_warn_less" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_warn_less command to execute ynh_exec_warn_less "command to execute | following command" In case of use of pipes, you have to use double quotes. Otherwise, this helper will be executed with the first command, then be sent to the next pipe. If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>command</code> : command to execute</li> + + </ul> </p> + + + + + <p> <strong>Details</strong>: <p> Requires YunoHost version 3.2.0 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L136">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_exec_quiet" style="cursor:pointer"> @@ -1615,29 +1278,47 @@ If the command to execute uses double quotes, they have to be escaped or they wi <div id="collapse-ynh_exec_quiet" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_quiet command to execute ynh_exec_quiet "command to execute | following command" In case of use of pipes, you have to use double quotes. Otherwise, this helper will be executed with the first command, then be sent to the next pipe. If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>command</code> : command to execute</li> + + </ul> </p> + + + + + <p> <strong>Details</strong>: <p> Requires YunoHost version 3.2.0 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L150">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_exec_fully_quiet" style="cursor:pointer"> @@ -1647,29 +1328,47 @@ If the command to execute uses double quotes, they have to be escaped or they wi <div id="collapse-ynh_exec_fully_quiet" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_fully_quiet command to execute ynh_exec_fully_quiet "command to execute | following command" In case of use of pipes, you have to use double quotes. Otherwise, this helper will be executed with the first command, then be sent to the next pipe. If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>command</code> : command to execute</li> + + </ul> </p> + + + + + <p> <strong>Details</strong>: <p> Requires YunoHost version 3.2.0 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L164">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_print_OFF" style="cursor:pointer"> @@ -1679,21 +1378,34 @@ If the command to execute uses double quotes, they have to be escaped or they wi <div id="collapse-ynh_print_OFF" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_print_OFF WARNING: You should be careful with this helper, and never forget to use ynh_print_ON as soon as possible to restore the logging.</code> + </p> + + + + + <p> <strong>Details</strong>: <p> Requires YunoHost version 3.2.0 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L174">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_print_ON" style="cursor:pointer"> @@ -1703,20 +1415,33 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri <div id="collapse-ynh_print_ON" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_print_ON</code> + </p> + + + + + <p> <strong>Details</strong>: <p> Requires YunoHost version 3.2.0 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L183">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-increment_progression=0" style="cursor:pointer"> @@ -1726,30 +1451,1188 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri <div id="collapse-increment_progression=0" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> - <strong>Usage</strong>: <code class="helper-code">ynh_script_progression --message=message [--weight=weight] [--time]</code> + + <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_script_progression --message=message [--weight=weight] [--time] +The execution time is given for the duration since the previous call. So the weight should be applied to this previous call.</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-m</code>, <code>--message=</code> : The text to print</li> + + + <li><code>-w</code>, <code>--weight=</code> : The weight for this progression. This value is 1 by default. Use a bigger value for a longer part of the script.</li> + + + <li><code>-t</code>, <code>--time=</code> : Print the execution time since the last call to this helper. Especially usefull to define weights.</li> + + + <li><code>-l</code>, <code>--last=</code> : Use for the last call of the helper, to fill te progression bar.</li> + + </ul> </p> + + + + + <p> <strong>Details</strong>: <p> - Requires YunoHost version 3.?.? or higher.</br></br> + Requires YunoHost version 3.5.0 or higher.</br></br> </p> </p> + <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L198">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L199">Dude, show me the code !</a> </p> + </div> </div> + </div> -<h3 style="text-transform: uppercase; font-weight: bold">psql</h3> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_return" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_return</tt></h5> + <h6 class="helper-card-subtitle text-muted">Return data to the Yunohost core for later processing +(to be used by special hooks like app config panel and core diagnosis)</h6> + </div> + <div id="collapse-ynh_return" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_return somedata</code> + + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 3.6.0 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L294">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_debug" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_debug</tt></h5> + <h6 class="helper-card-subtitle text-muted">Debugger for app packagers</h6> + </div> + <div id="collapse-ynh_debug" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_debug [--message=message] [--trace=1/0]</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-m</code>, <code>--message=</code> : The text to print</li> + + + + <li><code>-t</code>, <code>--trace=</code> : Turn on or off the trace of the script. Usefull to trace nonly a small part of a script.</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 3.5.0 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L305">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_debug_exec" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_debug_exec</tt></h5> + <h6 class="helper-card-subtitle text-muted">Execute a command and print the result as debug</h6> + </div> + <div id="collapse-ynh_debug_exec" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_debug_exec command to execute +ynh_debug_exec "command to execute | following command" +In case of use of pipes, you have to use double quotes. Otherwise, this helper will be executed with the first command, then be sent to the next pipe.</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>command</code> : command to execute</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 3.5.0 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L360">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + + +<h3 style="text-transform: uppercase; font-weight: bold">logrotate</h3> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_use_logrotate" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_use_logrotate</tt></h5> + <h6 class="helper-card-subtitle text-muted">Use logrotate to manage the logfile</h6> + </div> + <div id="collapse-ynh_use_logrotate" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_use_logrotate [--logfile=/log/file] [--nonappend] [--specific_user=user/group]</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-l</code>, <code>--logfile</code> : absolute path of logfile</li> + + + + <li><code>-n</code>, <code>--nonappend</code> : (optional) Replace the config file instead of appending this new config.</li> + + + + <li><code>-u</code>, <code>--specific_user</code> : run logrotate as the specified user and group. If not specified logrotate is runned as root.</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + If no --logfile is provided, /var/log/${app} will be used as default.</br>logfile can be just a directory, or a full path to a logfile :</br>/parentdir/logdir</br>/parentdir/logdir/logfile.log</br></br>It's possible to use this helper multiple times, each config will be added to</br>the same logrotate config file. Unless you use the option --non-append</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logrotate#L19">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_remove_logrotate" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_remove_logrotate</tt></h5> + <h6 class="helper-card-subtitle text-muted">Remove the app's logrotate config.</h6> + </div> + <div id="collapse-ynh_remove_logrotate" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_remove_logrotate</code> + + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.6.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logrotate#L99">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + + +<h3 style="text-transform: uppercase; font-weight: bold">mysql</h3> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_mysql_connect_as" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_mysql_connect_as</tt></h5> + <h6 class="helper-card-subtitle text-muted">Open a connection as a user</h6> + </div> + <div id="collapse-ynh_mysql_connect_as" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_mysql_connect_as --user=user --password=password [--database=database]</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-u</code>, <code>--user</code> : the user name to connect as</li> + + + + <li><code>-p</code>, <code>--password</code> : the user password</li> + + + + <li><code>-d</code>, <code>--database</code> : the database to connect to</li> + + + </ul> + </p> + + + + <p> + <strong>Example</strong>: <code class="helper-code">ynh_mysql_connect_as 'user' 'pass' <<< "UPDATE ...;" example: ynh_mysql_connect_as 'user' 'pass' < /path/to/file.sql</code> + </p> + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.2.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/mysql#L16">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_mysql_execute_as_root" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_mysql_execute_as_root</tt></h5> + <h6 class="helper-card-subtitle text-muted">Execute a command as root user</h6> + </div> + <div id="collapse-ynh_mysql_execute_as_root" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_mysql_execute_as_root --sql=sql [--database=database]</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-s</code>, <code>--sql</code> : the SQL command to execute</li> + + + + <li><code>-d</code>, <code>--database</code> : the database to connect to</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.2.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/mysql#L37">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_mysql_execute_file_as_root" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_mysql_execute_file_as_root</tt></h5> + <h6 class="helper-card-subtitle text-muted">Execute a command from a file as root user</h6> + </div> + <div id="collapse-ynh_mysql_execute_file_as_root" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_mysql_execute_file_as_root --file=file [--database=database]</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-f</code>, <code>--file</code> : the file containing SQL commands</li> + + + + <li><code>-d</code>, <code>--database</code> : the database to connect to</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.2.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/mysql#L58">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_mysql_dump_db" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_mysql_dump_db</tt></h5> + <h6 class="helper-card-subtitle text-muted">Dump a database</h6> + </div> + <div id="collapse-ynh_mysql_dump_db" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_mysql_dump_db --database=database</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-d</code>, <code>--database</code> : the database name to dump</li> + + + </ul> + </p> + + + <p> + <strong>Returns</strong>: the mysqldump output + </p> + + + <p> + <strong>Example</strong>: <code class="helper-code">ynh_mysql_dump_db 'roundcube' > ./dump.sql</code> + </p> + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.2.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/mysql#L121">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_mysql_user_exists" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_mysql_user_exists</tt></h5> + <h6 class="helper-card-subtitle text-muted">Check if a mysql user exists</h6> + </div> + <div id="collapse-ynh_mysql_user_exists" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_mysql_user_exists --user=user</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-u</code>, <code>--user</code> : the user for which to check existence</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.2.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/mysql#L152">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_mysql_setup_db" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_mysql_setup_db</tt></h5> + <h6 class="helper-card-subtitle text-muted">Create a database, an user and its password. Then store the password in the app's config</h6> + </div> + <div id="collapse-ynh_mysql_setup_db" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_mysql_setup_db --db_user=user --db_name=name [--db_pwd=pwd]</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-u</code>, <code>--db_user</code> : Owner of the database</li> + + + + <li><code>-n</code>, <code>--db_name</code> : Name of the database</li> + + + + <li><code>-p</code>, <code>--db_pwd</code> : Password of the database. If not provided, a password will be generated</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + After executing this helper, the password of the created database will be available in $db_pwd</br>It will also be stored as "mysqlpwd" into the app settings.</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/mysql#L192">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_mysql_remove_db" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_mysql_remove_db</tt></h5> + <h6 class="helper-card-subtitle text-muted">Remove a database if it exists, and the associated user</h6> + </div> + <div id="collapse-ynh_mysql_remove_db" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_mysql_remove_db --db_user=user --db_name=name</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-u</code>, <code>--db_user</code> : Owner of the database</li> + + + + <li><code>-n</code>, <code>--db_name</code> : Name of the database</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.6.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/mysql#L217">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + + +<h3 style="text-transform: uppercase; font-weight: bold">network</h3> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_find_port" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_find_port</tt></h5> + <h6 class="helper-card-subtitle text-muted">Find a free port and return it</h6> + </div> + <div id="collapse-ynh_find_port" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_find_port --port=begin_port</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-p</code>, <code>--port</code> : port to start to search</li> + + + </ul> + </p> + + + + <p> + <strong>Example</strong>: <code class="helper-code">port=$(ynh_find_port --port=8080)</code> + </p> + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.6.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/network#L11">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_validate_ip" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_validate_ip</tt></h5> + <h6 class="helper-card-subtitle text-muted">Validate an IP address</h6> + </div> + <div id="collapse-ynh_validate_ip" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_validate_ip --family=family --ip_address=ip_address</code> + + </p> + + + <p> + <strong>Returns</strong>: 0 for valid ip addresses, 1 otherwise + </p> + + + <p> + <strong>Example</strong>: <code class="helper-code">ynh_validate_ip 4 111.222.333.444</code> + </p> + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.2.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/network#L35">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_validate_ip4" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_validate_ip4</tt></h5> + <h6 class="helper-card-subtitle text-muted">Validate an IPv4 address</h6> + </div> + <div id="collapse-ynh_validate_ip4" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_validate_ip4 --ip_address=ip_address</code> + + </p> + + + <p> + <strong>Returns</strong>: 0 for valid ipv4 addresses, 1 otherwise + </p> + + + <p> + <strong>Example</strong>: <code class="helper-code">ynh_validate_ip4 111.222.333.444</code> + </p> + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.2.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/network#L69">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_validate_ip6" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_validate_ip6</tt></h5> + <h6 class="helper-card-subtitle text-muted">Validate an IPv6 address</h6> + </div> + <div id="collapse-ynh_validate_ip6" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_validate_ip6 --ip_address=ip_address</code> + + </p> + + + <p> + <strong>Returns</strong>: 0 for valid ipv6 addresses, 1 otherwise + </p> + + + <p> + <strong>Example</strong>: <code class="helper-code">ynh_validate_ip6 2000:dead:beef::1</code> + </p> + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.2.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/network#L90">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + + +<h3 style="text-transform: uppercase; font-weight: bold">nginx</h3> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_add_nginx_config" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_add_nginx_config</tt></h5> + <h6 class="helper-card-subtitle text-muted">Create a dedicated nginx config</h6> + </div> + <div id="collapse-ynh_add_nginx_config" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_add_nginx_config "list of others variables to replace"</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>list</code> : (Optional) list of others variables to replace separated by spaces. For example : 'path_2 port_2 ...'</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + This will use a template in ../conf/nginx.conf</br> __PATH__ by $path_url</br> __DOMAIN__ by $domain</br> __PORT__ by $port</br> __NAME__ by $app</br> __FINALPATH__ by $final_path</br></br>And dynamic variables (from the last example) :</br> __PATH_2__ by $path_2</br> __PORT_2__ by $port_2</br></br>Requires YunoHost version 2.7.2 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nginx#L21">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_remove_nginx_config" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_remove_nginx_config</tt></h5> + <h6 class="helper-card-subtitle text-muted">Remove the dedicated nginx config</h6> + </div> + <div id="collapse-ynh_remove_nginx_config" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_remove_nginx_config</code> + + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.7.2 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nginx#L73">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + + +<h3 style="text-transform: uppercase; font-weight: bold">nodejs</h3> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-export" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>export</tt></h5> + <h6 class="helper-card-subtitle text-muted">N_PREFIX is the directory of n, it needs to be loaded as a environment variable.</h6> + </div> + <div id="collapse-export" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code"></code> + + </p> + + + + + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nodejs#L6">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_use_nodejs" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_use_nodejs</tt></h5> + <h6 class="helper-card-subtitle text-muted">Load the version of node for an app, and set variables.</h6> + </div> + <div id="collapse-ynh_use_nodejs" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_use_nodejs</code> + + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + ynh_use_nodejs has to be used in any app scripts before using node for the first time.</br></br>2 variables are available:</br> - $nodejs_path: The absolute path of node for the chosen version.</br> - $nodejs_version: Just the version number of node for this app. Stored as 'nodejs_version' in settings.yml.</br>And 2 alias stored in variables:</br> - $nodejs_use_version: An old variable, not used anymore. Keep here to not break old apps</br> NB: $PATH will contain the path to node, it has to be propagated to any other shell which needs to use it.</br> That's means it has to be added to any systemd script.</br></br>Requires YunoHost version 2.7.12 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nodejs#L43">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_install_nodejs" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_install_nodejs</tt></h5> + <h6 class="helper-card-subtitle text-muted">Install a specific version of nodejs</h6> + </div> + <div id="collapse-ynh_install_nodejs" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_install_nodejs --nodejs_version=nodejs_version + If possible, prefer to use major version number (e.g. 8 instead of 8.10.0). + The crontab will handle the update of minor versions when needed.</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-n</code>, <code>--nodejs_version</code> : Version of node to install.</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + n (Node version management) uses the PATH variable to store the path of the version of node it is going to use.</br>That's how it changes the version</br></br>ynh_install_nodejs will install the version of node provided as argument by using n.</br></br>Requires YunoHost version 2.7.12 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nodejs#L68">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_remove_nodejs" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_remove_nodejs</tt></h5> + <h6 class="helper-card-subtitle text-muted">Remove the version of node used by the app.</h6> + </div> + <div id="collapse-ynh_remove_nodejs" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_remove_nodejs</code> + + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + This helper will check if another app uses the same version of node,</br>if not, this version of node will be removed.</br>If no other app uses node, n will be also removed.</br></br>Requires YunoHost version 2.7.12 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nodejs#L146">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + + +<h3 style="text-transform: uppercase; font-weight: bold">php</h3> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_add_fpm_config" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_add_fpm_config</tt></h5> + <h6 class="helper-card-subtitle text-muted">Create a dedicated php-fpm config</h6> + </div> + <div id="collapse-ynh_add_fpm_config" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_add_fpm_config [--phpversion=7.X]</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-v</code>, <code>--phpversion</code> : Version of php to use.</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.7.2 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/php#L9">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_remove_fpm_config" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_remove_fpm_config</tt></h5> + <h6 class="helper-card-subtitle text-muted">Remove the dedicated php-fpm config</h6> + </div> + <div id="collapse-ynh_remove_fpm_config" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_remove_fpm_config</code> + + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.7.2 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/php#L56">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + + +<h3 style="text-transform: uppercase; font-weight: bold">postgresql</h3> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_psql_connect_as" style="cursor:pointer"> @@ -1759,31 +2642,56 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri <div id="collapse-ynh_psql_connect_as" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_psql_connect_as --user=user --password=password [--database=database]</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-u</code>, <code>--user</code> : the user name to connect as</li> + + + <li><code>-p</code>, <code>--password</code> : the user password</li> + + + <li><code>-d</code>, <code>--database</code> : the database to connect to</li> + + </ul> </p> + + + <p> <strong>Example</strong>: <code class="helper-code">ynh_psql_connect_as 'user' 'pass' <<< "UPDATE ...;" example: ynh_psql_connect_as 'user' 'pass' < /path/to/file.sql</code> </p> + + + <p> <strong>Details</strong>: <p> - Requires YunoHost version 3.?.? or higher.</br></br> + Requires YunoHost version 3.5.0 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L16">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_psql_execute_as_root" style="cursor:pointer"> @@ -1793,27 +2701,48 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri <div id="collapse-ynh_psql_execute_as_root" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_psql_execute_as_root --sql=sql [--database=database]</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-s</code>, <code>--sql</code> : the SQL command to execute</li> + + + <li><code>-d</code>, <code>--database</code> : the database to connect to</li> + + </ul> </p> + + + + + <p> <strong>Details</strong>: <p> - Requires YunoHost version 3.?.? or higher.</br></br> + Requires YunoHost version 3.5.0 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L37">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_psql_execute_file_as_root" style="cursor:pointer"> @@ -1823,27 +2752,48 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri <div id="collapse-ynh_psql_execute_file_as_root" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_psql_execute_file_as_root --file=file [--database=database]</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-f</code>, <code>--file</code> : the file containing SQL commands</li> + + + <li><code>-d</code>, <code>--database</code> : the database to connect to</li> + + </ul> </p> + + + + + <p> <strong>Details</strong>: <p> - Requires YunoHost version 3.?.? or higher.</br></br> + Requires YunoHost version 3.5.0 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L58">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_psql_dump_db" style="cursor:pointer"> @@ -1853,32 +2803,52 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri <div id="collapse-ynh_psql_dump_db" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_psql_dump_db --database=database</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-d</code>, <code>--database</code> : the database name to dump</li> + + </ul> </p> + + <p> <strong>Returns</strong>: the psqldump output </p> + + <p> <strong>Example</strong>: <code class="helper-code">ynh_psql_dump_db 'roundcube' > ./dump.sql</code> </p> + + + <p> <strong>Details</strong>: <p> - Requires YunoHost version 3.?.? or higher.</br></br> + Requires YunoHost version 3.5.0 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L124">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_psql_user_exists" style="cursor:pointer"> @@ -1888,20 +2858,37 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri <div id="collapse-ynh_psql_user_exists" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_psql_user_exists --user=user</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-u</code>, <code>--user</code> : the user for which to check existence</li> + + </ul> </p> + + + + + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L154">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_psql_database_exists" style="cursor:pointer"> @@ -1911,20 +2898,37 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri <div id="collapse-ynh_psql_database_exists" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_psql_database_exists --database=database</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-d</code>, <code>--database</code> : the database for which to check existence</li> + + </ul> </p> + + + + + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L173">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_psql_setup_db" style="cursor:pointer"> @@ -1934,28 +2938,52 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri <div id="collapse-ynh_psql_setup_db" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_psql_setup_db --db_user=user --db_name=name [--db_pwd=pwd]</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-u</code>, <code>--db_user</code> : Owner of the database</li> + + + <li><code>-n</code>, <code>--db_name</code> : Name of the database</li> + + + <li><code>-p</code>, <code>--db_pwd</code> : Password of the database. If not given, a password will be generated</li> + + </ul> </p> + + + + + <p> <strong>Details</strong>: <p> After executing this helper, the password of the created database will be available in $db_pwd</br>It will also be stored as "psqlpwd" into the app settings.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L209">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_psql_remove_db" style="cursor:pointer"> @@ -1965,21 +2993,41 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri <div id="collapse-ynh_psql_remove_db" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_psql_remove_db --db_user=user --db_name=name</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-u</code>, <code>--db_user</code> : Owner of the database</li> + + + <li><code>-n</code>, <code>--db_name</code> : Name of the database</li> + + </ul> </p> + + + + + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L236">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_psql_test_if_first_run" style="cursor:pointer"> @@ -1990,15 +3038,31 @@ Please always call this script in install and restore scripts</h6> <div id="collapse-ynh_psql_test_if_first_run" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_psql_test_if_first_run</code> + </p> + + + + + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L264">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + + <h3 style="text-transform: uppercase; font-weight: bold">setting</h3> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_app_setting_get" style="cursor:pointer"> @@ -2008,27 +3072,48 @@ Please always call this script in install and restore scripts</h6> <div id="collapse-ynh_app_setting_get" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_app_setting_get --app=app --key=key</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-a</code>, <code>--app</code> : the application id</li> + + + <li><code>-k</code>, <code>--key</code> : the setting to get</li> + + </ul> </p> + + + + + <p> <strong>Details</strong>: <p> Requires YunoHost version 2.2.4 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L10">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_app_setting_set" style="cursor:pointer"> @@ -2038,28 +3123,52 @@ Please always call this script in install and restore scripts</h6> <div id="collapse-ynh_app_setting_set" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_app_setting_set --app=app --key=key --value=value</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-a</code>, <code>--app</code> : the application id</li> + + + <li><code>-k</code>, <code>--key</code> : the setting name to set</li> + + + <li><code>-v</code>, <code>--value</code> : the setting value to set</li> + + </ul> </p> + + + + + <p> <strong>Details</strong>: <p> Requires YunoHost version 2.2.4 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L30">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_app_setting_delete" style="cursor:pointer"> @@ -2069,28 +3178,332 @@ Please always call this script in install and restore scripts</h6> <div id="collapse-ynh_app_setting_delete" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_app_setting_delete --app=app --key=key</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-a</code>, <code>--app</code> : the application id</li> + + + <li><code>-k</code>, <code>--key</code> : the setting to delete</li> + + </ul> </p> + + + + + <p> <strong>Details</strong>: <p> Requires YunoHost version 2.2.4 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L50">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_add_skipped_uris" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_add_skipped_uris</tt></h5> + <h6 class="helper-card-subtitle text-muted">Add skipped_uris urls into the config</h6> + </div> + <div id="collapse-ynh_add_skipped_uris" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_add_skipped_uris [--appid=app] --url=url1,url2 [--regex]</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-a</code>, <code>--appid</code> : the application id</li> + + + + <li><code>-u</code>, <code>--url</code> : the urls to add to the sso for this app</li> + + + + <li><code>-r</code>, <code>--regex</code> : Use the key 'skipped_regex' instead of 'skipped_uris'</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + An URL set with 'skipped_uris' key will be totally ignored by the SSO,</br>which means that the access will be public and the logged-in user information will not be passed to the app.</br></br>Requires YunoHost version 3.6.0 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L73">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_add_unprotected_uris" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_add_unprotected_uris</tt></h5> + <h6 class="helper-card-subtitle text-muted">Add unprotected_uris urls into the config</h6> + </div> + <div id="collapse-ynh_add_unprotected_uris" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_add_unprotected_uris [--appid=app] --url=url1,url2 [--regex]</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-a</code>, <code>--appid</code> : the application id</li> + + + + <li><code>-u</code>, <code>--url</code> : the urls to add to the sso for this app</li> + + + + <li><code>-r</code>, <code>--regex</code> : Use the key 'unprotected_regex' instead of 'unprotected_uris'</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + An URL set with unprotected_uris key will be accessible publicly, but if an user is logged in,</br>his information will be accessible (through HTTP headers) to the app.</br></br>Requires YunoHost version 3.6.0 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L104">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_add_protected_uris" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_add_protected_uris</tt></h5> + <h6 class="helper-card-subtitle text-muted">Add protected_uris urls into the config</h6> + </div> + <div id="collapse-ynh_add_protected_uris" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_add_protected_uris [--appid=app] --url=url1,url2 [--regex]</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-a</code>, <code>--appid</code> : the application id</li> + + + + <li><code>-u</code>, <code>--url</code> : the urls to add to the sso for this app</li> + + + + <li><code>-r</code>, <code>--regex</code> : Use the key 'protected_regex' instead of 'protected_uris'</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + An URL set with protected_uris will be blocked by the SSO and accessible only to authenticated and authorized users.</br></br>Requires YunoHost version 3.6.0 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L134">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_webpath_available" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_webpath_available</tt></h5> + <h6 class="helper-card-subtitle text-muted">Check availability of a web path</h6> + </div> + <div id="collapse-ynh_webpath_available" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_webpath_available --domain=domain --path_url=path</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-d</code>, <code>--domain</code> : the domain/host of the url</li> + + + + <li><code>-p</code>, <code>--path_url</code> : the web path to check the availability of</li> + + + </ul> + </p> + + + + <p> + <strong>Example</strong>: <code class="helper-code">ynh_webpath_available --domain=some.domain.tld --path_url=/coffee</code> + </p> + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.6.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L196">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_webpath_register" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_webpath_register</tt></h5> + <h6 class="helper-card-subtitle text-muted">Register/book a web path for an app</h6> + </div> + <div id="collapse-ynh_webpath_register" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_webpath_register --app=app --domain=domain --path_url=path</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-a</code>, <code>--app</code> : the app for which the domain should be registered</li> + + + + <li><code>-d</code>, <code>--domain</code> : the domain/host of the web path</li> + + + + <li><code>-p</code>, <code>--path_url</code> : the web path to be registered</li> + + + </ul> + </p> + + + + <p> + <strong>Example</strong>: <code class="helper-code">ynh_webpath_register --app=wordpress --domain=some.domain.tld --path_url=/coffee</code> + </p> + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.6.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L218">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + + <h3 style="text-transform: uppercase; font-weight: bold">string</h3> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_string_random" style="cursor:pointer"> @@ -2100,29 +3513,48 @@ Please always call this script in install and restore scripts</h6> <div id="collapse-ynh_string_random" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_string_random [--length=string_length]</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-l</code>, <code>--length</code> : the string length to generate (default: 24)</li> + + </ul> </p> + + + <p> <strong>Example</strong>: <code class="helper-code">pwd=$(ynh_string_random --length=8)</code> </p> + + + <p> <strong>Details</strong>: <p> Requires YunoHost version 2.2.4 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/string#L11">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_replace_string" style="cursor:pointer"> @@ -2132,28 +3564,52 @@ Please always call this script in install and restore scripts</h6> <div id="collapse-ynh_replace_string" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_replace_string --match_string=match_string --replace_string=replace_string --target_file=target_file</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-m</code>, <code>--match_string</code> : String to be searched and replaced in the file</li> + + + <li><code>-r</code>, <code>--replace_string</code> : String that will replace matches</li> + + + <li><code>-f</code>, <code>--target_file</code> : File in which the string will be replaced.</li> + + </ul> </p> + + + + + <p> <strong>Details</strong>: <p> As this helper is based on sed command, regular expressions and</br>references to sub-expressions can be used</br>(see sed manual page for more information)</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/string#L37">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_replace_special_string" style="cursor:pointer"> @@ -2163,78 +3619,289 @@ Please always call this script in install and restore scripts</h6> <div id="collapse-ynh_replace_special_string" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_replace_special_string --match_string=match_string --replace_string=replace_string --target_file=target_file</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-m</code>, <code>--match_string</code> : String to be searched and replaced in the file</li> + + + <li><code>-r</code>, <code>--replace_string</code> : String that will replace matches</li> + + + <li><code>-t</code>, <code>--target_file</code> : File in which the string will be replaced.</li> + + </ul> </p> + + + + + <p> <strong>Details</strong>: <p> This helper will use ynh_replace_string, but as you can use special</br>characters, you can't use some regular expressions and sub-expressions.</br></br>Requires YunoHost version 2.7.7 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/string#L66">Dude, show me the code !</a> </p> + </div> </div> + </div> -<h3 style="text-transform: uppercase; font-weight: bold">system</h3> + + + <div class="helper-card"> <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_abort_if_errors" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_abort_if_errors</tt></h5> - <h6 class="helper-card-subtitle text-muted">Exits if an error occurs during the execution of the script.</h6> + <div data-toggle="collapse" href="#collapse-ynh_sanitize_dbid" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_sanitize_dbid</tt></h5> + <h6 class="helper-card-subtitle text-muted">Sanitize a string intended to be the name of a database +(More specifically : replace - and . by _)</h6> </div> - <div id="collapse-ynh_abort_if_errors" class="collapse" role="tabpanel"> + <div id="collapse-ynh_sanitize_dbid" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> - <strong>Usage</strong>: <code class="helper-code">ynh_abort_if_errors</code> + + <strong>Usage</strong>: <code class="helper-code">ynh_sanitize_dbid --db_name=name</code> + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-n</code>, <code>--db_name</code> : name to correct/sanitize</li> + + + </ul> + </p> + + + <p> + <strong>Returns</strong>: the corrected name + </p> + + + <p> + <strong>Example</strong>: <code class="helper-code">dbname=$(ynh_sanitize_dbid $app)</code> + </p> + + + <p> <strong>Details</strong>: <p> - This configure the rest of the script execution such that, if an error occurs</br>or if an empty variable is used, the execution of the script stops</br>immediately and a call to `ynh_clean_setup` is triggered if it has been</br>defined by your script.</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> + Requires YunoHost version 2.2.4 or higher.</br></br> </p> </p> + <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L85">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/string#L97">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_get_debian_release" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_get_debian_release</tt></h5> - <h6 class="helper-card-subtitle text-muted">Fetch the Debian release codename</h6> + <div data-toggle="collapse" href="#collapse-ynh_normalize_url_path" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_normalize_url_path</tt></h5> + <h6 class="helper-card-subtitle text-muted">Normalize the url path syntax</h6> </div> - <div id="collapse-ynh_get_debian_release" class="collapse" role="tabpanel"> + <div id="collapse-ynh_normalize_url_path" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> - <strong>Usage</strong>: <code class="helper-code">ynh_get_debian_release</code> + + <strong>Usage</strong>: <code class="helper-code">ynh_normalize_url_path --path_url=path_to_normalize</code> + </p> + <p> - <strong>Returns</strong>: The Debian release codename (i.e. jessie, stretch, ...) + <strong>Arguments</strong>: + <ul> + + + <li><code>-p</code>, <code>--path_url</code> : URL path to normalize before using it</li> + + + </ul> </p> + + + + + <p> + <strong>Examples</strong>:<ul> + + + <code class="helper-code"> url_path=$(ynh_normalize_url_path $url_path)</code> + + <br> + + + <code class="helper-code"> ynh_normalize_url_path example # -> /example</code> + + <br> + + + <code class="helper-code"> ynh_normalize_url_path /example # -> /example</code> + + <br> + + + <code class="helper-code"> ynh_normalize_url_path /example/ # -> /example</code> + + <br> + + + <code class="helper-code"> ynh_normalize_url_path / # -> /</code> + + <br> + + </ul> + </p> + + <p> <strong>Details</strong>: <p> - Requires YunoHost version 2.7.12 or higher.</br></br> + Handle the slash at the beginning of path and its absence at ending</br>Return a normalized url path</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> </p> </p> + <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L305">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/string#L125">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + + +<h3 style="text-transform: uppercase; font-weight: bold">systemd</h3> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_add_systemd_config" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_add_systemd_config</tt></h5> + <h6 class="helper-card-subtitle text-muted">Create a dedicated systemd config</h6> + </div> + <div id="collapse-ynh_add_systemd_config" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_add_systemd_config [--service=service] [--template=template]</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-s</code>, <code>--service</code> : Service name (optionnal, $app by default)</li> + + + + <li><code>-t</code>, <code>--template</code> : Name of template file (optionnal, this is 'systemd' by default, meaning ./conf/systemd.service will be used as template)</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + This will use the template ../conf/<templatename>.service</br>to generate a systemd config, by replacing the following keywords</br>with global variables that should be defined before calling</br>this helper :</br></br>__APP__ by $app</br> __FINALPATH__ by $final_path</br></br>Requires YunoHost version 2.7.2 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/systemd#L18">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_remove_systemd_config" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_remove_systemd_config</tt></h5> + <h6 class="helper-card-subtitle text-muted">Remove the dedicated systemd config</h6> + </div> + <div id="collapse-ynh_remove_systemd_config" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_remove_systemd_config [--service=service]</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-s</code>, <code>--service</code> : Service name (optionnal, $app by default)</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.7.2 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/systemd#L54">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_systemd_action" style="cursor:pointer"> @@ -2244,29 +3911,61 @@ Please always call this script in install and restore scripts</h6> <div id="collapse-ynh_systemd_action" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_systemd_action [-n service_name] [-a action] [ [-l "line to match"] [-p log_path] [-t timeout] [-e length] ] If not defined it don't wait until the service is completely started. WARNING: When using --line_match, you should always add `ynh_clean_check_starting` into your `ynh_clean_setup` at the beginning of the script. Otherwise, tail will not stop in case of failure of the script. The script will then hang forever.</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-n</code>, <code>--service_name=</code> : Name of the service to start. Default : $app</li> + + + <li><code>-a</code>, <code>--action=</code> : Action to perform with systemctl. Default: start</li> + + + <li><code>-l</code>, <code>--line_match=</code> : Line to match - The line to find in the log to attest the service have finished to boot.</li> + + + <li><code>-p</code>, <code>--log_path=</code> : Log file - Path to the log file. Default : /var/log/$app/$app.log</li> + + + <li><code>-t</code>, <code>--timeout=</code> : Timeout - The maximum time to wait before ending the watching. Default : 300 seconds.</li> + + + <li><code>-e</code>, <code>--length=</code> : Length of the error log : Default : 20</li> + + </ul> </p> + + + + + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/systemd#L85">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_clean_check_starting" style="cursor:pointer"> @@ -2277,14 +3976,737 @@ Please always call this script in install and restore scripts</h6> <div id="collapse-ynh_clean_check_starting" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_clean_check_starting</code> + </p> + + + + + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/systemd#L171">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + + +<h3 style="text-transform: uppercase; font-weight: bold">user</h3> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_user_exists" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_user_exists</tt></h5> + <h6 class="helper-card-subtitle text-muted">Check if a YunoHost user exists</h6> + </div> + <div id="collapse-ynh_user_exists" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_user_exists --username=username</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-u</code>, <code>--username</code> : the username to check</li> + + + </ul> + </p> + + + + <p> + <strong>Example</strong>: <code class="helper-code">ynh_user_exists 'toto' || exit 1</code> + </p> + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.2.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/user#L11">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_user_get_info" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_user_get_info</tt></h5> + <h6 class="helper-card-subtitle text-muted">Retrieve a YunoHost user information</h6> + </div> + <div id="collapse-ynh_user_get_info" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_user_get_info --username=username --key=key</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-u</code>, <code>--username</code> : the username to retrieve info from</li> + + + + <li><code>-k</code>, <code>--key</code> : the key to retrieve</li> + + + </ul> + </p> + + + <p> + <strong>Returns</strong>: string - the key's value + </p> + + + <p> + <strong>Example</strong>: <code class="helper-code">mail=$(ynh_user_get_info 'toto' 'mail')</code> + </p> + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.2.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/user#L32">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_user_list" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_user_list</tt></h5> + <h6 class="helper-card-subtitle text-muted">Get the list of YunoHost users</h6> + </div> + <div id="collapse-ynh_user_list" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_user_list</code> + + </p> + + + <p> + <strong>Returns</strong>: string - one username per line + </p> + + + <p> + <strong>Example</strong>: <code class="helper-code">for u in $(ynh_user_list); do ...</code> + </p> + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.4.0 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/user#L52">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_system_user_exists" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_system_user_exists</tt></h5> + <h6 class="helper-card-subtitle text-muted">Check if a user exists on the system</h6> + </div> + <div id="collapse-ynh_system_user_exists" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_system_user_exists --username=username</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-u</code>, <code>--username</code> : the username to check</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.2.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/user#L63">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_system_group_exists" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_system_group_exists</tt></h5> + <h6 class="helper-card-subtitle text-muted">Check if a group exists on the system</h6> + </div> + <div id="collapse-ynh_system_group_exists" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_system_group_exists --group=group</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-g</code>, <code>--group</code> : the group to check</li> + + + </ul> + </p> + + + + + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/user#L78">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_system_user_create" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_system_user_create</tt></h5> + <h6 class="helper-card-subtitle text-muted">Create a system user</h6> + </div> + <div id="collapse-ynh_system_user_create" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_system_user_create --username=user_name [--home_dir=home_dir] [--use_shell]</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-u</code>, <code>--username</code> : Name of the system user that will be create</li> + + + + <li><code>-h</code>, <code>--home_dir</code> : Path of the home dir for the user. Usually the final path of the app. If this argument is omitted, the user will be created without home</li> + + + + <li><code>-s</code>, <code>--use_shell</code> : Create a user using the default login shell if present. If this argument is omitted, the user will be created with /usr/sbin/nologin shell</li> + + + </ul> + </p> + + + + + <p> + <strong>Examples</strong>:<ul> + + + Create a nextcloud user with no home directory and /usr/sbin/nologin login shell (hence no login capability) + + <br> + + + <code class="helper-code"> ynh_system_user_create --username=nextcloud</code> + + <br> + + + Create a discourse user using /var/www/discourse as home directory and the default login shell + + <br> + + + <code class="helper-code"> ynh_system_user_create --username=discourse --home_dir=/var/www/discourse --use_shell</code> + + <br> + + </ul> + </p> + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.6.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/user#L103">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_system_user_delete" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_system_user_delete</tt></h5> + <h6 class="helper-card-subtitle text-muted">Delete a system user</h6> + </div> + <div id="collapse-ynh_system_user_delete" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_system_user_delete --username=user_name</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-u</code>, <code>--username</code> : Name of the system user that will be create</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.6.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/user#L137">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + + +<h3 style="text-transform: uppercase; font-weight: bold">utils</h3> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_abort_if_errors" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_abort_if_errors</tt></h5> + <h6 class="helper-card-subtitle text-muted">Exits if an error occurs during the execution of the script.</h6> + </div> + <div id="collapse-ynh_abort_if_errors" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_abort_if_errors</code> + + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + This configure the rest of the script execution such that, if an error occurs</br>or if an empty variable is used, the execution of the script stops</br>immediately and a call to `ynh_clean_setup` is triggered if it has been</br>defined by your script.</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L85">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_setup_source" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_setup_source</tt></h5> + <h6 class="helper-card-subtitle text-muted">Download, check integrity, uncompress and patch the source from app.src</h6> + </div> + <div id="collapse-ynh_setup_source" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_setup_source --dest_dir=dest_dir [--source_id=source_id]</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-d</code>, <code>--dest_dir</code> : Directory where to setup sources</li> + + + + <li><code>-s</code>, <code>--source_id</code> : Name of the app, if the package contains more than one app</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + The file conf/app.src need to contains:</br></br>SOURCE_URL=Address to download the app archive</br>SOURCE_SUM=Control sum</br># (Optional) Program to check the integrity (sha256sum, md5sum...)</br># default: sha256</br>SOURCE_SUM_PRG=sha256</br># (Optional) Archive format</br># default: tar.gz</br>SOURCE_FORMAT=tar.gz</br># (Optional) Put false if sources are directly in the archive root</br># default: true</br># Instead of true, SOURCE_IN_SUBDIR could be the number of sub directories</br># to remove.</br>SOURCE_IN_SUBDIR=false</br># (Optionnal) Name of the local archive (offline setup support)</br># default: ${src_id}.${src_format}</br>SOURCE_FILENAME=example.tar.gz</br># (Optional) If it set as false don't extract the source.</br># (Useful to get a debian package or a python wheel.)</br># default: true</br>SOURCE_EXTRACT=(true|false)</br></br>Details:</br>This helper downloads sources from SOURCE_URL if there is no local source</br>archive in /opt/yunohost-apps-src/APP_ID/SOURCE_FILENAME</br></br>Next, it checks the integrity with "SOURCE_SUM_PRG -c --status" command.</br></br>If it's ok, the source archive will be uncompressed in $dest_dir. If the</br>SOURCE_IN_SUBDIR is true, the first level directory of the archive will be</br>removed.</br>If SOURCE_IN_SUBDIR is a numeric value, 2 for example, the 2 first level</br>directories will be removed</br></br>Finally, patches named sources/patches/${src_id}-*.patch and extra files in</br>sources/extra_files/$src_id will be applied to dest_dir</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L136">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_local_curl" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_local_curl</tt></h5> + <h6 class="helper-card-subtitle text-muted">Curl abstraction to help with POST requests to local pages (such as installation forms)</h6> + </div> + <div id="collapse-ynh_local_curl" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_local_curl "page_uri" "key1=value1" "key2=value2" ...</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>page_uri</code> : Path (relative to $path_url) of the page where POST data will be sent</li> + + + + <li><code>key1=value1</code> : (Optionnal) POST key and corresponding value</li> + + + + <li><code>key2=value2</code> : (Optionnal) Another POST key and corresponding value</li> + + + + <li><code>...</code> : (Optionnal) More POST keys and values</li> + + + </ul> + </p> + + + + <p> + <strong>Example</strong>: <code class="helper-code">ynh_local_curl "/install.php?installButton" "foo=$var1" "bar=$var2"</code> + </p> + + + + <p> + <strong>Details</strong>: + <p> + $domain and $path_url should be defined externally (and correspond to the domain.tld and the /path (of the app?))</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L250">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_render_template" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_render_template</tt></h5> + <h6 class="helper-card-subtitle text-muted">Render templates with Jinja2</h6> + </div> + <div id="collapse-ynh_render_template" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_render_template some_template output_path</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>some_template</code> : Template file to be rendered</li> + + + + <li><code>output_path</code> : The path where the output will be redirected to</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Attention : Variables should be exported before calling this helper to be</br>accessible inside templates.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L289">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_get_debian_release" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_get_debian_release</tt></h5> + <h6 class="helper-card-subtitle text-muted">Fetch the Debian release codename</h6> + </div> + <div id="collapse-ynh_get_debian_release" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_get_debian_release</code> + + </p> + + + <p> + <strong>Returns</strong>: The Debian release codename (i.e. jessie, stretch, ...) + </p> + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.7.12 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L305">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_secure_remove" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_secure_remove</tt></h5> + <h6 class="helper-card-subtitle text-muted">Remove a file or a directory securely</h6> + </div> + <div id="collapse-ynh_secure_remove" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_secure_remove --file=path_to_remove</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-f</code>, <code>--file</code> : File or directory to remove</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.6.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L335">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_get_plain_key" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_get_plain_key</tt></h5> + <h6 class="helper-card-subtitle text-muted">Extract a key from a plain command output</h6> + </div> + <div id="collapse-ynh_get_plain_key" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_get_plain_key key [subkey [subsubkey ...]]</code> + + </p> + + + <p> + <strong>Returns</strong>: string - the key's value + </p> + + + <p> + <strong>Example</strong>: <code class="helper-code">yunohost user info tata --output-as plain | ynh_get_plain_key mail</code> + </p> + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 2.2.4 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L378">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_read_manifest" style="cursor:pointer"> @@ -2294,27 +4716,48 @@ Please always call this script in install and restore scripts</h6> <div id="collapse-ynh_read_manifest" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_read_manifest manifest key</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-m</code>, <code>--manifest=</code> : Path of the manifest to read</li> + + + <li><code>-k</code>, <code>--key=</code> : Name of the key to find</li> + + </ul> </p> + + + + + <p> <strong>Details</strong>: <p> - Requires YunoHost version 3.?.? or higher.</br></br> + Requires YunoHost version 3.5.0 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L406">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_app_upstream_version" style="cursor:pointer"> @@ -2328,26 +4771,44 @@ In the last example it return 4.3-2</h6> <div id="collapse-ynh_app_upstream_version" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_app_upstream_version [-m manifest]</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-m</code>, <code>--manifest=</code> : Path of the manifest to read</li> + + </ul> </p> + + + + + <p> <strong>Details</strong>: <p> - Requires YunoHost version 3.?.? or higher.</br></br> + Requires YunoHost version 3.5.0 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L433">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_app_package_version" style="cursor:pointer"> @@ -2361,26 +4822,44 @@ In the last example it return 3</h6> <div id="collapse-ynh_app_package_version" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_app_package_version [-m manifest]</code> + </p> + <p> <strong>Arguments</strong>: <ul> + + <li><code>-m</code>, <code>--manifest=</code> : Path of the manifest to read</li> + + </ul> </p> + + + + + <p> <strong>Details</strong>: <p> - Requires YunoHost version 3.?.? or higher.</br></br> + Requires YunoHost version 3.5.0 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L456">Dude, show me the code !</a> </p> + </div> </div> + </div> + + + <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_check_app_version_changed" style="cursor:pointer"> @@ -2392,422 +4871,37 @@ In the last example it return 3</h6> <div id="collapse-ynh_check_app_version_changed" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> + <strong>Usage</strong>: <code class="helper-code">ynh_check_app_version_changed</code> + </p> + + + + + <p> <strong>Details</strong>: <p> - It stops the current script without error if the package is up-to-date</br></br>This helper should be used to avoid an upgrade of an app, or the upstream part</br>of it, when it's not needed</br></br>To force an upgrade, even if the package is up to date,</br>you have to set the variable YNH_FORCE_UPGRADE before.</br>example: sudo YNH_FORCE_UPGRADE=1 yunohost app upgrade MyApp</br></br>Requires YunoHost version 3.?.? or higher.</br></br> + It stops the current script without error if the package is up-to-date</br></br>This helper should be used to avoid an upgrade of an app, or the upstream part</br>of it, when it's not needed</br></br>To force an upgrade, even if the package is up to date,</br>you have to set the variable YNH_FORCE_UPGRADE before.</br>example: sudo YNH_FORCE_UPGRADE=1 yunohost app upgrade MyApp</br></br>Requires YunoHost version 3.5.0 or higher.</br></br> </p> </p> + <p> <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L485">Dude, show me the code !</a> </p> + </div> </div> + </div> -<h3 style="text-transform: uppercase; font-weight: bold">user</h3> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_user_exists" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_user_exists</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check if a YunoHost user exists</h6> - </div> - <div id="collapse-ynh_user_exists" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_user_exists --username=username</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-u</code>, <code>--username</code> : the username to check</li> - </ul> - </p> - <p> - <strong>Example</strong>: <code class="helper-code">ynh_user_exists 'toto' || exit 1</code> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/user#L11">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_user_get_info" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_user_get_info</tt></h5> - <h6 class="helper-card-subtitle text-muted">Retrieve a YunoHost user information</h6> - </div> - <div id="collapse-ynh_user_get_info" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_user_get_info --username=username --key=key</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-u</code>, <code>--username</code> : the username to retrieve info from</li> - <li><code>-k</code>, <code>--key</code> : the key to retrieve</li> - </ul> - </p> - <p> - <strong>Returns</strong>: string - the key's value - </p> - <p> - <strong>Example</strong>: <code class="helper-code">mail=$(ynh_user_get_info 'toto' 'mail')</code> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/user#L32">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_user_list" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_user_list</tt></h5> - <h6 class="helper-card-subtitle text-muted">Get the list of YunoHost users</h6> - </div> - <div id="collapse-ynh_user_list" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_user_list</code> - </p> - <p> - <strong>Returns</strong>: string - one username per line - </p> - <p> - <strong>Example</strong>: <code class="helper-code">for u in $(ynh_user_list); do ...</code> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.4.0 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/user#L52">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_system_user_exists" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_system_user_exists</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check if a user exists on the system</h6> - </div> - <div id="collapse-ynh_system_user_exists" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_system_user_exists --username=username</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-u</code>, <code>--username</code> : the username to check</li> - </ul> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/user#L63">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_system_group_exists" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_system_group_exists</tt></h5> - <h6 class="helper-card-subtitle text-muted">Check if a group exists on the system</h6> - </div> - <div id="collapse-ynh_system_group_exists" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_system_group_exists --group=group</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-g</code>, <code>--group</code> : the group to check</li> - </ul> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/user#L78">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_system_user_create" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_system_user_create</tt></h5> - <h6 class="helper-card-subtitle text-muted">Create a system user</h6> - </div> - <div id="collapse-ynh_system_user_create" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_system_user_create --username=user_name [--home_dir=home_dir] [--use_shell]</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-u</code>, <code>--username</code> : Name of the system user that will be create</li> - <li><code>-h</code>, <code>--home_dir</code> : Path of the home dir for the user. Usually the final path of the app. If this argument is omitted, the user will be created without home</li> - <li><code>-s</code>, <code>--use_shell</code> : Create a user using the default login shell if present. If this argument is omitted, the user will be created with /usr/sbin/nologin shell</li> - </ul> - </p> - <p> - <strong>Examples</strong>:<ul> - Create a nextcloud user with no home directory and /usr/sbin/nologin login shell (hence no login capability) - <br> - <code class="helper-code"> ynh_system_user_create --username=nextcloud</code> - <br> - Create a discourse user using /var/www/discourse as home directory and the default login shell - <br> - <code class="helper-code"> ynh_system_user_create --username=discourse --home_dir=/var/www/discourse --use_shell</code> - <br> - </ul> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/user#L103">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_system_user_delete" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_system_user_delete</tt></h5> - <h6 class="helper-card-subtitle text-muted">Delete a system user</h6> - </div> - <div id="collapse-ynh_system_user_delete" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_system_user_delete --username=user_name</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-u</code>, <code>--username</code> : Name of the system user that will be create</li> - </ul> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/user#L137">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<h3 style="text-transform: uppercase; font-weight: bold">utils</h3> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_get_plain_key" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_get_plain_key</tt></h5> - <h6 class="helper-card-subtitle text-muted">Extract a key from a plain command output</h6> - </div> - <div id="collapse-ynh_get_plain_key" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_get_plain_key key [subkey [subsubkey ...]]</code> - </p> - <p> - <strong>Returns</strong>: string - the key's value - </p> - <p> - <strong>Example</strong>: <code class="helper-code">yunohost user info tata --output-as plain | ynh_get_plain_key mail</code> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.2.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L378">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_restore_upgradebackup" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_restore_upgradebackup</tt></h5> - <h6 class="helper-card-subtitle text-muted">Restore a previous backup if the upgrade process failed</h6> - </div> - <div id="collapse-ynh_restore_upgradebackup" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_backup_before_upgrade -ynh_clean_setup () { - ynh_restore_upgradebackup -} -ynh_abort_if_errors</code> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.7.2 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L434">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_backup_before_upgrade" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_backup_before_upgrade</tt></h5> - <h6 class="helper-card-subtitle text-muted">Make a backup in case of failed upgrade</h6> - </div> - <div id="collapse-ynh_backup_before_upgrade" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_backup_before_upgrade -ynh_clean_setup () { - ynh_restore_upgradebackup -} -ynh_abort_if_errors</code> - </p> - <p> - <strong>Details</strong>: - <p> - Requires YunoHost version 2.7.2 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L385">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_setup_source" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_setup_source</tt></h5> - <h6 class="helper-card-subtitle text-muted">Download, check integrity, uncompress and patch the source from app.src</h6> - </div> - <div id="collapse-ynh_setup_source" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_setup_source --dest_dir=dest_dir [--source_id=source_id]</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>-d</code>, <code>--dest_dir</code> : Directory where to setup sources</li> - <li><code>-s</code>, <code>--source_id</code> : Name of the app, if the package contains more than one app</li> - </ul> - </p> - <p> - <strong>Details</strong>: - <p> - The file conf/app.src need to contains:</br></br>SOURCE_URL=Address to download the app archive</br>SOURCE_SUM=Control sum</br># (Optional) Program to check the integrity (sha256sum, md5sum...)</br># default: sha256</br>SOURCE_SUM_PRG=sha256</br># (Optional) Archive format</br># default: tar.gz</br>SOURCE_FORMAT=tar.gz</br># (Optional) Put false if sources are directly in the archive root</br># default: true</br># Instead of true, SOURCE_IN_SUBDIR could be the number of sub directories</br># to remove.</br>SOURCE_IN_SUBDIR=false</br># (Optionnal) Name of the local archive (offline setup support)</br># default: ${src_id}.${src_format}</br>SOURCE_FILENAME=example.tar.gz</br># (Optional) If it set as false don't extract the source.</br># (Useful to get a debian package or a python wheel.)</br># default: true</br>SOURCE_EXTRACT=(true|false)</br></br>Details:</br>This helper downloads sources from SOURCE_URL if there is no local source</br>archive in /opt/yunohost-apps-src/APP_ID/SOURCE_FILENAME</br></br>Next, it checks the integrity with "SOURCE_SUM_PRG -c --status" command.</br></br>If it's ok, the source archive will be uncompressed in $dest_dir. If the</br>SOURCE_IN_SUBDIR is true, the first level directory of the archive will be</br>removed.</br>If SOURCE_IN_SUBDIR is a numeric value, 2 for example, the 2 first level</br>directories will be removed</br></br>Finally, patches named sources/patches/${src_id}-*.patch and extra files in</br>sources/extra_files/$src_id will be applied to dest_dir</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L136">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_local_curl" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_local_curl</tt></h5> - <h6 class="helper-card-subtitle text-muted">Curl abstraction to help with POST requests to local pages (such as installation forms)</h6> - </div> - <div id="collapse-ynh_local_curl" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_local_curl "page_uri" "key1=value1" "key2=value2" ...</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>page_uri</code> : Path (relative to $path_url) of the page where POST data will be sent</li> - <li><code>key1=value1</code> : (Optionnal) POST key and corresponding value</li> - <li><code>key2=value2</code> : (Optionnal) Another POST key and corresponding value</li> - <li><code>...</code> : (Optionnal) More POST keys and values</li> - </ul> - </p> - <p> - <strong>Example</strong>: <code class="helper-code">ynh_local_curl "/install.php?installButton" "foo=$var1" "bar=$var2"</code> - </p> - <p> - <strong>Details</strong>: - <p> - $domain and $path_url should be defined externally (and correspond to the domain.tld and the /path (of the app?))</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L250">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-ynh_render_template" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>ynh_render_template</tt></h5> - <h6 class="helper-card-subtitle text-muted">Render templates with Jinja2</h6> - </div> - <div id="collapse-ynh_render_template" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - <strong>Usage</strong>: <code class="helper-code">ynh_render_template some_template output_path</code> - </p> - <p> - <strong>Arguments</strong>: - <ul> - <li><code>some_template</code> : Template file to be rendered</li> - <li><code>output_path</code> : The path where the output will be redirected to</li> - </ul> - </p> - <p> - <strong>Details</strong>: - <p> - Attention : Variables should be exported before calling this helper to be</br>accessible inside templates.</br></br> - </p> - </p> - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L289">Dude, show me the code !</a> - </p> - </div> - </div> -</div> -<p>Generated by <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/doc/generate_helper_doc.py">this script</a> on 2019-04-08 18:53:09.449596 (version 3.5.1.1)</p> + + + + +<p>Generated by <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/doc/generate_helper_doc.py">this script</a> on 07/11/2019 (Yunohost version 3.6.4.3)</p> + + <style> /*================================================= Helper card @@ -2833,4 +4927,5 @@ ynh_abort_if_errors</code> white-space: normal; } /*===============================================*/ + </style> From 7bd5c0781aa50b7673a0a598f4997584d0f1d4f8 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Thu, 11 Jul 2019 22:50:20 +0200 Subject: [PATCH 040/360] Misc fixes for helper page --- packaging_apps_helpers.md | 246 +++++++++++++++----------------------- 1 file changed, 97 insertions(+), 149 deletions(-) diff --git a/packaging_apps_helpers.md b/packaging_apps_helpers.md index 1f97ff1b..71cb32f7 100644 --- a/packaging_apps_helpers.md +++ b/packaging_apps_helpers.md @@ -342,17 +342,13 @@ <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_install_app_dependencies" style="cursor:pointer"> <h5 class="helper-card-title"><tt>ynh_install_app_dependencies</tt></h5> - <h6 class="helper-card-subtitle text-muted">Define and install dependencies with a equivs control file -This helper can/should only be called once per app</h6> + <h6 class="helper-card-subtitle text-muted">Define and install dependencies with a equivs control file</h6> </div> <div id="collapse-ynh_install_app_dependencies" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_install_app_dependencies dep [dep [...]] - You can give a choice between some package with this syntax : "dep1|dep2" - Example : ynh_install_app_dependencies dep1 dep2 "dep3|dep4|dep5" - This mean in the dependence tree : dep1 & dep2 & (dep3 | dep4 | dep5)</code> + <strong>Usage</strong>: <code class="helper-code">ynh_install_app_dependencies dep [dep [...]]</code> </p> @@ -361,7 +357,7 @@ This helper can/should only be called once per app</h6> <ul> - <li><code>dep</code> : the package name to install in dependence</li> + <li><code>dep</code> : the package name to install in dependence. Writing "dep3|dep4|dep5" can be used to specify alternatives. For example : dep1 dep2 "dep3|dep4|dep5" will require to install dep1 and dep 2 and (dep3 or dep4 or dep5).</li> </ul> @@ -374,7 +370,7 @@ This helper can/should only be called once per app</h6> <p> <strong>Details</strong>: <p> - Requires YunoHost version 2.6.4 or higher.</br></br> + This helper can/should only be called once per app</br></br>example : ynh_install_app_dependencies dep1 dep2 "dep3|dep4|dep5"</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> </p> </p> @@ -478,12 +474,12 @@ This helper can/should only be called once per app</h6> <p> <strong>Details</strong>: <p> - Note: this helper could be used in backup hook or in backup script inside an</br>app package</br></br>Details: ynh_backup writes SRC and the relative DEST into a CSV file. And it</br>creates the parent destination directory</br></br>If DEST is ended by a slash it complete this path with the basename of SRC.</br></br>Example in the context of a wordpress app</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf"</br># => This line will be added into CSV file</br># "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/etc/nginx/conf.d/$domain.d/$app.conf"</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf/nginx.conf"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/nginx.conf"</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf/"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/$app.conf"</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf"</br></br>#Deprecated usages (maintained for retro-compatibility)</br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "${backup_dir}/conf/nginx.conf"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/nginx.conf"</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "/conf/"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/$app.conf"</br></br>Requires YunoHost version 2.4.0 or higher.</br></br> + This helper can be used both in a system backup hook, and in an app backup script</br></br>Details: ynh_backup writes SRC and the relative DEST into a CSV file. And it</br>creates the parent destination directory</br></br>If DEST is ended by a slash it complete this path with the basename of SRC.</br></br>Example in the context of a wordpress app</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf"</br># => This line will be added into CSV file</br># "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/etc/nginx/conf.d/$domain.d/$app.conf"</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf/nginx.conf"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/nginx.conf"</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf/"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/$app.conf"</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf"</br></br>#Deprecated usages (maintained for retro-compatibility)</br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "${backup_dir}/conf/nginx.conf"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/nginx.conf"</br></br>ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "/conf/"</br># => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/$app.conf"</br></br>Requires YunoHost version 2.4.0 or higher.</br></br> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L45">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L44">Dude, show me the code !</a> </p> </div> @@ -497,7 +493,7 @@ This helper can/should only be called once per app</h6> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_restore" style="cursor:pointer"> <h5 class="helper-card-title"><tt>ynh_restore</tt></h5> - <h6 class="helper-card-subtitle text-muted">Restore all files linked to the restore hook or to the restore app script</h6> + <h6 class="helper-card-subtitle text-muted">Restore all files that were previously backuped in a core backup script or app backup script</h6> </div> <div id="collapse-ynh_restore" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> @@ -519,7 +515,7 @@ This helper can/should only be called once per app</h6> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L162">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L161">Dude, show me the code !</a> </p> </div> @@ -595,7 +591,7 @@ This helper can/should only be called once per app</h6> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L221">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L220">Dude, show me the code !</a> </p> </div> @@ -642,7 +638,7 @@ This helper can/should only be called once per app</h6> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L297">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L296">Dude, show me the code !</a> </p> </div> @@ -656,9 +652,7 @@ This helper can/should only be called once per app</h6> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_backup_if_checksum_is_different" style="cursor:pointer"> <h5 class="helper-card-title"><tt>ynh_backup_if_checksum_is_different</tt></h5> - <h6 class="helper-card-subtitle text-muted">Verify the checksum and backup the file if it's different -This helper is primarily meant to allow to easily backup personalised/manually -modified config files.</h6> + <h6 class="helper-card-subtitle text-muted">Verify the checksum and backup the file if it's different</h6> </div> <div id="collapse-ynh_backup_if_checksum_is_different" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> @@ -690,12 +684,12 @@ modified config files.</h6> <p> <strong>Details</strong>: <p> - $app should be defined when calling this helper</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> + This helper is primarily meant to allow to easily backup personalised/manually</br>modified config files.</br></br>Requires YunoHost version 2.6.4 or higher.</br></br> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L330">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L328">Dude, show me the code !</a> </p> </div> @@ -742,7 +736,7 @@ modified config files.</h6> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L363">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L361">Dude, show me the code !</a> </p> </div> @@ -782,7 +776,7 @@ ynh_abort_if_errors</code> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L385">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L383">Dude, show me the code !</a> </p> </div> @@ -822,7 +816,7 @@ ynh_abort_if_errors</code> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L434">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/backup#L432">Dude, show me the code !</a> </p> </div> @@ -956,14 +950,13 @@ ynh_abort_if_errors</code> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_die" style="cursor:pointer"> <h5 class="helper-card-title"><tt>ynh_die</tt></h5> - <h6 class="helper-card-subtitle text-muted">Print a message to stderr and exit -usage: ynh_die --message=MSG [--ret_code=RETCODE]</h6> + <h6 class="helper-card-subtitle text-muted">Print a message to stderr and exit</h6> </div> <div id="collapse-ynh_die" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> - <strong>Usage</strong>: <code class="helper-code"></code> + <strong>Usage</strong>: <code class="helper-code">ynh_die --message=MSG [--ret_code=RETCODE]</code> </p> @@ -979,7 +972,7 @@ usage: ynh_die --message=MSG [--ret_code=RETCODE]</h6> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L7">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L8">Dude, show me the code !</a> </p> </div> @@ -1015,7 +1008,7 @@ usage: ynh_die --message=MSG [--ret_code=RETCODE]</h6> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L25">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L26">Dude, show me the code !</a> </p> </div> @@ -1062,7 +1055,7 @@ usage: ynh_die --message=MSG [--ret_code=RETCODE]</h6> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L70">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L71">Dude, show me the code !</a> </p> </div> @@ -1109,7 +1102,7 @@ usage: ynh_die --message=MSG [--ret_code=RETCODE]</h6> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L87">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L88">Dude, show me the code !</a> </p> </div> @@ -1129,10 +1122,8 @@ usage: ynh_die --message=MSG [--ret_code=RETCODE]</h6> <hr style="margin-top:25px; margin-bottom:25px;"> <p> - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_err command to execute -ynh_exec_err "command to execute | following command" -In case of use of pipes, you have to use double quotes. Otherwise, this helper will be executed with the first command, then be sent to the next pipe. -If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</code> + <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_err your_command +ynh_exec_err "your_command | other_command"</code> </p> @@ -1154,12 +1145,12 @@ If the command to execute uses double quotes, they have to be escaped or they wi <p> <strong>Details</strong>: <p> - Requires YunoHost version 3.2.0 or higher.</br></br> + When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L108">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L111">Dude, show me the code !</a> </p> </div> @@ -1179,10 +1170,8 @@ If the command to execute uses double quotes, they have to be escaped or they wi <hr style="margin-top:25px; margin-bottom:25px;"> <p> - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_warn command to execute -ynh_exec_warn "command to execute | following command" -In case of use of pipes, you have to use double quotes. Otherwise, this helper will be executed with the first command, then be sent to the next pipe. -If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</code> + <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_warn your_command +ynh_exec_warn "your_command | other_command"</code> </p> @@ -1204,12 +1193,12 @@ If the command to execute uses double quotes, they have to be escaped or they wi <p> <strong>Details</strong>: <p> - Requires YunoHost version 3.2.0 or higher.</br></br> + When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L122">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L127">Dude, show me the code !</a> </p> </div> @@ -1229,10 +1218,8 @@ If the command to execute uses double quotes, they have to be escaped or they wi <hr style="margin-top:25px; margin-bottom:25px;"> <p> - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_warn_less command to execute -ynh_exec_warn_less "command to execute | following command" -In case of use of pipes, you have to use double quotes. Otherwise, this helper will be executed with the first command, then be sent to the next pipe. -If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</code> + <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_warn_less your_command +ynh_exec_warn_less "your_command | other_command"</code> </p> @@ -1254,12 +1241,12 @@ If the command to execute uses double quotes, they have to be escaped or they wi <p> <strong>Details</strong>: <p> - Requires YunoHost version 3.2.0 or higher.</br></br> + When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L136">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L143">Dude, show me the code !</a> </p> </div> @@ -1279,10 +1266,8 @@ If the command to execute uses double quotes, they have to be escaped or they wi <hr style="margin-top:25px; margin-bottom:25px;"> <p> - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_quiet command to execute -ynh_exec_quiet "command to execute | following command" -In case of use of pipes, you have to use double quotes. Otherwise, this helper will be executed with the first command, then be sent to the next pipe. -If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</code> + <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_quiet your_command +ynh_exec_quiet "your_command | other_command"</code> </p> @@ -1304,12 +1289,12 @@ If the command to execute uses double quotes, they have to be escaped or they wi <p> <strong>Details</strong>: <p> - Requires YunoHost version 3.2.0 or higher.</br></br> + When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L150">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L159">Dude, show me the code !</a> </p> </div> @@ -1329,10 +1314,8 @@ If the command to execute uses double quotes, they have to be escaped or they wi <hr style="margin-top:25px; margin-bottom:25px;"> <p> - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_fully_quiet command to execute -ynh_exec_fully_quiet "command to execute | following command" -In case of use of pipes, you have to use double quotes. Otherwise, this helper will be executed with the first command, then be sent to the next pipe. -If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</code> + <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_exec_fully_quiet your_command +ynh_exec_fully_quiet "your_command | other_command"</code> </p> @@ -1354,12 +1337,12 @@ If the command to execute uses double quotes, they have to be escaped or they wi <p> <strong>Details</strong>: <p> - Requires YunoHost version 3.2.0 or higher.</br></br> + When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L164">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L175">Dude, show me the code !</a> </p> </div> @@ -1379,8 +1362,7 @@ If the command to execute uses double quotes, they have to be escaped or they wi <hr style="margin-top:25px; margin-bottom:25px;"> <p> - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_print_OFF -WARNING: You should be careful with this helper, and never forget to use ynh_print_ON as soon as possible to restore the logging.</code> + <strong>Usage</strong>: <code class="helper-code">ynh_print_OFF</code> </p> @@ -1391,12 +1373,12 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri <p> <strong>Details</strong>: <p> - Requires YunoHost version 3.2.0 or higher.</br></br> + WARNING: You should be careful with this helper, and never forget to use ynh_print_ON as soon as possible to restore the logging.</br></br>Requires YunoHost version 3.2.0 or higher.</br></br> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L174">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L186">Dude, show me the code !</a> </p> </div> @@ -1432,7 +1414,7 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L183">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L195">Dude, show me the code !</a> </p> </div> @@ -1444,11 +1426,11 @@ WARNING: You should be careful with this helper, and never forget to use ynh_pri <div class="helper-card"> <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-increment_progression=0" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>increment_progression=0</tt></h5> + <div data-toggle="collapse" href="#collapse-ynh_script_progression" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_script_progression</tt></h5> <h6 class="helper-card-subtitle text-muted">Print a message as INFO and show progression during an app script</h6> </div> - <div id="collapse-increment_progression=0" class="collapse" role="tabpanel"> + <div id="collapse-ynh_script_progression" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> @@ -1492,7 +1474,7 @@ The execution time is given for the duration since the previous call. So the wei </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L199">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L224">Dude, show me the code !</a> </p> </div> @@ -1529,7 +1511,7 @@ The execution time is given for the duration since the previous call. So the wei </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L294">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L308">Dude, show me the code !</a> </p> </div> @@ -1580,7 +1562,7 @@ The execution time is given for the duration since the previous call. So the wei </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L305">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L319">Dude, show me the code !</a> </p> </div> @@ -1600,9 +1582,8 @@ The execution time is given for the duration since the previous call. So the wei <hr style="margin-top:25px; margin-bottom:25px;"> <p> - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_debug_exec command to execute -ynh_debug_exec "command to execute | following command" -In case of use of pipes, you have to use double quotes. Otherwise, this helper will be executed with the first command, then be sent to the next pipe.</code> + <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_debug_exec your_command +ynh_debug_exec "your_command | other_command"</code> </p> @@ -1624,12 +1605,12 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w <p> <strong>Details</strong>: <p> - Requires YunoHost version 3.5.0 or higher.</br></br> + When using pipes, double quotes are required - otherwise, this helper will run the first command, and the whole output will be sent through the next pipe.</br></br>If the command to execute uses double quotes, they have to be escaped or they will be interpreted and removed.</br></br>Requires YunoHost version 3.5.0 or higher.</br></br> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L360">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L377">Dude, show me the code !</a> </p> </div> @@ -2390,35 +2371,6 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w -<div class="helper-card"> - <div class="helper-card-body"> - <div data-toggle="collapse" href="#collapse-export" style="cursor:pointer"> - <h5 class="helper-card-title"><tt>export</tt></h5> - <h6 class="helper-card-subtitle text-muted">N_PREFIX is the directory of n, it needs to be loaded as a environment variable.</h6> - </div> - <div id="collapse-export" class="collapse" role="tabpanel"> - <hr style="margin-top:25px; margin-bottom:25px;"> - <p> - - <strong>Usage</strong>: <code class="helper-code"></code> - - </p> - - - - - - <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nodejs#L6">Dude, show me the code !</a> - </p> - - </div> - </div> - -</div> - - - <div class="helper-card"> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_use_nodejs" style="cursor:pointer"> @@ -2465,9 +2417,7 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w <hr style="margin-top:25px; margin-bottom:25px;"> <p> - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_install_nodejs --nodejs_version=nodejs_version - If possible, prefer to use major version number (e.g. 8 instead of 8.10.0). - The crontab will handle the update of minor versions when needed.</code> + <strong>Usage</strong>: <code class="helper-code">ynh_install_nodejs --nodejs_version=nodejs_version</code> </p> @@ -2476,7 +2426,7 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w <ul> - <li><code>-n</code>, <code>--nodejs_version</code> : Version of node to install.</li> + <li><code>-n</code>, <code>--nodejs_version</code> : Version of node to install. When possible, your should prefer to use major version number (e.g. 8 instead of 8.10.0). The crontab will then handle the update of minor versions when needed.</li> </ul> @@ -2494,7 +2444,7 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nodejs#L68">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nodejs#L66">Dude, show me the code !</a> </p> </div> @@ -2530,7 +2480,7 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nodejs#L146">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/nodejs#L144">Dude, show me the code !</a> </p> </div> @@ -2668,10 +2618,22 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w - <p> - <strong>Example</strong>: <code class="helper-code">ynh_psql_connect_as 'user' 'pass' <<< "UPDATE ...;" example: ynh_psql_connect_as 'user' 'pass' < /path/to/file.sql</code> - </p> + <p> + <strong>Examples</strong>:<ul> + + + <code class="helper-code"> ynh_psql_connect_as 'user' 'pass' <<< "UPDATE ...;"</code> + + <br> + + + <code class="helper-code"> ynh_psql_connect_as 'user' 'pass' < /path/to/file.sql</code> + + <br> + + </ul> + </p> <p> @@ -2682,7 +2644,7 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L16">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L17">Dude, show me the code !</a> </p> </div> @@ -2733,7 +2695,7 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L37">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L38">Dude, show me the code !</a> </p> </div> @@ -2784,7 +2746,7 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L58">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L59">Dude, show me the code !</a> </p> </div> @@ -2839,7 +2801,7 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L124">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L125">Dude, show me the code !</a> </p> </div> @@ -2879,7 +2841,7 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L154">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L155">Dude, show me the code !</a> </p> </div> @@ -2919,7 +2881,7 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L173">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L174">Dude, show me the code !</a> </p> </div> @@ -2974,7 +2936,7 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L209">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L210">Dude, show me the code !</a> </p> </div> @@ -3018,7 +2980,7 @@ In case of use of pipes, you have to use double quotes. Otherwise, this helper w <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L236">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L237">Dude, show me the code !</a> </p> </div> @@ -3048,7 +3010,7 @@ Please always call this script in install and restore scripts</h6> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L264">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/postgresql#L265">Dude, show me the code !</a> </p> </div> @@ -3912,11 +3874,7 @@ Please always call this script in install and restore scripts</h6> <hr style="margin-top:25px; margin-bottom:25px;"> <p> - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_systemd_action [-n service_name] [-a action] [ [-l "line to match"] [-p log_path] [-t timeout] [-e length] ] - If not defined it don't wait until the service is completely started. - WARNING: When using --line_match, you should always add `ynh_clean_check_starting` into your - `ynh_clean_setup` at the beginning of the script. Otherwise, tail will not stop in case of failure - of the script. The script will then hang forever.</code> + <strong>Usage</strong>: <code class="helper-code">ynh_systemd_action [-n service_name] [-a action] [ [-l "line to match"] [-p log_path] [-t timeout] [-e length] ]</code> </p> @@ -3933,7 +3891,7 @@ Please always call this script in install and restore scripts</h6> - <li><code>-l</code>, <code>--line_match=</code> : Line to match - The line to find in the log to attest the service have finished to boot.</li> + <li><code>-l</code>, <code>--line_match=</code> : Line to match - The line to find in the log to attest the service have finished to boot. If not defined it don't wait until the service is completely started. WARNING: When using --line_match, you should always add `ynh_clean_check_starting` into your `ynh_clean_setup` at the beginning of the script. Otherwise, tail will not stop in case of failure of the script. The script will then hang forever.</li> @@ -3956,7 +3914,7 @@ Please always call this script in install and restore scripts</h6> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/systemd#L85">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/systemd#L81">Dude, show me the code !</a> </p> </div> @@ -3986,7 +3944,7 @@ Please always call this script in install and restore scripts</h6> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/systemd#L171">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/systemd#L167">Dude, show me the code !</a> </p> </div> @@ -4762,11 +4720,7 @@ Please always call this script in install and restore scripts</h6> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_app_upstream_version" style="cursor:pointer"> <h5 class="helper-card-title"><tt>ynh_app_upstream_version</tt></h5> - <h6 class="helper-card-subtitle text-muted">Read the upstream version from the manifest -The version number in the manifest is defined by <upstreamversion>~ynh<packageversion> -For example : 4.3-2~ynh3 -This include the number before ~ynh -In the last example it return 4.3-2</h6> + <h6 class="helper-card-subtitle text-muted">Read the upstream version from the manifest</h6> </div> <div id="collapse-ynh_app_upstream_version" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> @@ -4794,12 +4748,12 @@ In the last example it return 4.3-2</h6> <p> <strong>Details</strong>: <p> - Requires YunoHost version 3.5.0 or higher.</br></br> + The version number in the manifest is defined by <upstreamversion>~ynh<packageversion></br>For example : 4.3-2~ynh3</br>This include the number before ~ynh</br>In the last example it return 4.3-2</br></br>Requires YunoHost version 3.5.0 or higher.</br></br> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L433">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L434">Dude, show me the code !</a> </p> </div> @@ -4813,11 +4767,7 @@ In the last example it return 4.3-2</h6> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_app_package_version" style="cursor:pointer"> <h5 class="helper-card-title"><tt>ynh_app_package_version</tt></h5> - <h6 class="helper-card-subtitle text-muted">Read package version from the manifest -The version number in the manifest is defined by <upstreamversion>~ynh<packageversion> -For example : 4.3-2~ynh3 -This include the number after ~ynh -In the last example it return 3</h6> + <h6 class="helper-card-subtitle text-muted">Read package version from the manifest</h6> </div> <div id="collapse-ynh_app_package_version" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> @@ -4845,12 +4795,12 @@ In the last example it return 3</h6> <p> <strong>Details</strong>: <p> - Requires YunoHost version 3.5.0 or higher.</br></br> + The version number in the manifest is defined by <upstreamversion>~ynh<packageversion></br>For example : 4.3-2~ynh3</br>This include the number after ~ynh</br>In the last example it return 3</br></br>Requires YunoHost version 3.5.0 or higher.</br></br> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L456">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L458">Dude, show me the code !</a> </p> </div> @@ -4864,9 +4814,7 @@ In the last example it return 3</h6> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_check_app_version_changed" style="cursor:pointer"> <h5 class="helper-card-title"><tt>ynh_check_app_version_changed</tt></h5> - <h6 class="helper-card-subtitle text-muted">Checks the app version to upgrade with the existing app version and returns: -- UPGRADE_APP if the upstream app version has changed -- UPGRADE_PACKAGE if only the YunoHost package has changed</h6> + <h6 class="helper-card-subtitle text-muted">Checks the app version to upgrade with the existing app version and returns:</h6> </div> <div id="collapse-ynh_check_app_version_changed" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> @@ -4883,12 +4831,12 @@ In the last example it return 3</h6> <p> <strong>Details</strong>: <p> - It stops the current script without error if the package is up-to-date</br></br>This helper should be used to avoid an upgrade of an app, or the upstream part</br>of it, when it's not needed</br></br>To force an upgrade, even if the package is up to date,</br>you have to set the variable YNH_FORCE_UPGRADE before.</br>example: sudo YNH_FORCE_UPGRADE=1 yunohost app upgrade MyApp</br></br>Requires YunoHost version 3.5.0 or higher.</br></br> + - UPGRADE_APP if the upstream app version has changed</br>- UPGRADE_PACKAGE if only the YunoHost package has changed</br></br>It stops the current script without error if the package is up-to-date</br></br>This helper should be used to avoid an upgrade of an app, or the upstream part</br>of it, when it's not needed</br></br>To force an upgrade, even if the package is up to date,</br>you have to set the variable YNH_FORCE_UPGRADE before.</br>example: sudo YNH_FORCE_UPGRADE=1 yunohost app upgrade MyApp</br></br>Requires YunoHost version 3.5.0 or higher.</br></br> </p> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L485">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L488">Dude, show me the code !</a> </p> </div> From 73b8ffbc9beb8d45eec1a38c653e714564545aa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anton=20Str=C3=B6mkvist?= <anton@stromkvist.com> Date: Fri, 12 Jul 2019 00:11:29 +0200 Subject: [PATCH 041/360] Translate line to English --- packaging_apps_scripts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging_apps_scripts.md b/packaging_apps_scripts.md index 0aac6741..e6cbf4c0 100644 --- a/packaging_apps_scripts.md +++ b/packaging_apps_scripts.md @@ -54,7 +54,7 @@ The name of the question is `domain` so in the script we can access it with YNH_ domain=$YNH_APP_ARG_DOMAIN ``` -### Variables spécifiques pour `change_url` +### Variables specific to `change_url` #### YNH_APP_OLD_DOMAIN The old domain where the app was installed. #### YNH_APP_OLD_PATH From c72e642218b7bb4865a9228d3b9d6d911a5ffed0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anton=20Str=C3=B6mkvist?= <anton@stromkvist.com> Date: Fri, 12 Jul 2019 00:11:39 +0200 Subject: [PATCH 042/360] Make headers uniform --- packaging_apps_scripts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging_apps_scripts.md b/packaging_apps_scripts.md index e6cbf4c0..78592f57 100644 --- a/packaging_apps_scripts.md +++ b/packaging_apps_scripts.md @@ -30,7 +30,7 @@ It contains the instance's number. Warning, it's not the number of running insta Example: 3 -### Specific variables to use in `install` +### Variables specific to `install` #### YNH_APP_ARG_XXXXXXX An environment variable is available for each question asked in the installation. From 029bb4cde7389f7f31a0f1054fd2082339998643 Mon Sep 17 00:00:00 2001 From: lapineige <lapineige@users.noreply.github.com> Date: Sat, 13 Jul 2019 14:55:04 +0200 Subject: [PATCH 043/360] Add funkwhale --- use_case_non-profit_organisations.md | 1 + 1 file changed, 1 insertion(+) diff --git a/use_case_non-profit_organisations.md b/use_case_non-profit_organisations.md index 9e4f8ac2..270eddd6 100644 --- a/use_case_non-profit_organisations.md +++ b/use_case_non-profit_organisations.md @@ -177,6 +177,7 @@ But for production, localy stored backup are not enough, so you will need to imp #### Federated Audio Gallery * [Reel2Bits](https://github.com/YunoHost-Apps/reel2bits_ynh) +* [Funkwhale](https://github.com/YunoHost-Apps/funkwhale_ynh) #### Federated Video Gallery From 67d19f34093e1c75d6d06de743479afaccd56c15 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sun, 14 Jul 2019 10:47:24 +0000 Subject: [PATCH 044/360] Italian translation for backup --- backup_it.md | 169 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 backup_it.md diff --git a/backup_it.md b/backup_it.md new file mode 100644 index 00000000..6a157779 --- /dev/null +++ b/backup_it.md @@ -0,0 +1,169 @@ +# Eseguire il backup del vostro server e delle app + +Eseguire il backup del vostro server, delle app e dei dati è un compito importante nell'amministrazione di un server poiché vi protegge da eventi inaspettati ma sempre possibili (come server distrutto da un incendio, corruzione del database, perdita delle credenziali di accesso, compromissione del server e altro). La policy di backup che adotterete dipende dall'importanza dei dati che state gestendo: ad esempio non sarà tanto importante avere il backup di un server di prova mentre lo sarà per un server contenente dati importanti per un'associazione o una ditta e sarà altrettanto importante tenere questo backup *in un luogo fisico diverso dal server stesso*. + +## I backup di YunoHost + +YunoHost fornisce un sistema di backup che vi permette di fare il backup (e il suo ripristino) della configurazione e dei dati (come ad esempio le email) e delle app che lo supportano. + +Si possono gestire i backup sia da riga di comando (`yunohost backup --help`) sia dalla pagina web di amministrazione (nella sezione Backup) anche se alcune possibilità non sono disponibili in questo modo. + +Il metodo di default attuale crea degli archivi `.tar.gz` contenenti tutti i file del backup stesso. Nel futuro YunoHost ha in progetto di usare [Borg](https://www.borgbackup.org/) che è una soluzione più flessibile, efficiente e potente. + +## Creare i backup + +### Dalla pagina web di amministrazione + +Potete creare gli archivi di backup dalla pagina web di amministrazione andando in Backup > Archivi locali e cliccare su "Nuovo backup". Vi verrà chiesto di selezionare quale configurazione, dati e di quale app volete fare il backup. + + + +### Dalla riga di comando + +Potete fare un nuovo archivio di backup dalla riga di comando. Questi sono alcuni esempi di comandi e i relativi risultati: + + +- Esecuzione di un backup completo (tutti i componenti del sistema e delle app): + + ```bash + yunohost backup create + ``` + +- Backup delle sole app + + ```bash + yunohost backup create --apps + ``` + +- Backup di sole due app (wordpress e shaarli) + + ```bash + yunohost backup create --apps wordpress shaarli + ``` + +- Backup solo delle email + + ```bash + yunohost backup create --system data_mail + ``` + +- Backup delle email e wordpress + + ```bash + yunohost backup create --system data_mail --apps wordpress + ``` + +Per maggiori informazioni e opzioni sulla creazione di backup leggete `yunohost backup create --help`. Potrete anche elencare le parti del sistema delle quali si può farne il backup con `yunohost hook list backup`. + + +### Configurazioni specifiche per le app + +Alcune app come ad esempio Nextcloud possono contenere grandi quantità di dati. È possibile in questi casi eseguire il backup dell'app senza i dati degli utenti, modalità che viene indicata come "backing up only the core" (delle app). +Eseguendo un aggiornamento, delle app con grandi quantità di dati normalmente verrà eseguito un backup senza questi dati. + +Per disabilitare esplicitamente il backup di grandi quantità di dati, per le applicazioni che implementano questa possibilità, dovete impostare la variabile `BACKUP_CORE_ONLY` prima di eseguire il comando di backup: `sudo BACKUP_CORE_ONLY=1 yunohost backup create --apps nextcloud`. Fate attenzione però perché dovrete fare il backup di questi dati autonomamente: è possibile eseguire questi backup, di tipo incrementale o differenziale, opzione che però non è ancora provvista da YunoHost. + + +## Download e upload dei backup + +Dopo aver creato gli archivi di backup è possibile elencarli e ispezionarli sia dalla pagina web di amministrazione relativa sia dalla riga di comando con i comandi `yunohost backup list` e `yunohost backup info <archivename>`. Di default i backup sono copiati nella directory `/home/yunohost.backup/archives/`. + +Attualmente il modo più semplice per scaricare gli archivi è usando il programma FileZilla (vedi [questa pagina](/filezilla)). + +Una soluzione alternativa è quella di installare Netxcloud o un'applicazione simile e configurarle per accedere ai file contenuti in `/home/yunohost.backup/archives/` da un browser. + + +Un'altra soluzione è quella di usare `scp` (un programma che si basa su [`ssh`](/ssh)) per copiare i file fra due computer usando la riga di comando. In questo modo usando un computer con Linux potete copiare uno specifico backup con questo comando: + +```bash +scp admin@your.domain.tld:/home/yunohost.backup/archives/<archivename>.tar.gz ./ +``` + +Allo stesso modo potete copiare da un computer al vostro server con questo comando: + +```bash +scp /path/to/your/<archivename>.tar.gz admin@your.domain.tld:/home/yunohost.backup/archives/ +``` + +## Ripristinare i backup + +### Dalla pagina web di amministrazione + +Dovete andare in Backup > Archivi locali e selezionare il vostro archivio. È possibile selezionare ciò che volete ripristinare e poi cliccare su 'Ripristina'. + + + + +### Dalla riga di comando + +Dalla riga di comando date il comando `yunohost backup restore <archivename>` (senza il `.tar.gz`) per ripristinare un archivio. Così come `yunohost backup create`, questo comando ripristinerà di default tutto il contenuto dell'archivio; se invece volete ripristinare solo alcuni file potete usare ad esempio il comando `yunohost backup restore --apps wordpress` per ripristinare esclusivamente wordpress. + + +### Limiti + +Per ripristinare una app, il dominio sul quale era stata installata dovrà essere già stato configurato oppure dovrete avere già ripristinato la configurazione di sistema relativa. Inoltre non è possibile ripristinare una app che è già installata ... il che comporta che se volete ripristinare una versione passata della app dovrete prima disinstallarla. + + +### Ripristino durante il postinstall + +È possibile ripristinare un archivio completo *invece* di eseguire il passaggio di postinstall. Questo è utile se volete reinstallare un sistema interamente da un backup preesistente. Per fare questo dovrete copiare l'archivio sul server nella directory `/home/yunohost.backup/archives` e poi, **invece di dare il comando** `yunohost tools postinstall` darete il comando: + + +```bash +yunohost backup restore <archivename> +``` + +Nota: se il vostro archivio non si trova in `/home/yunohost.backup/archives` potete specificare il path giusto con: + + +```bash +yunohost backup restore /path/to/<archivename> +``` + +## Ulteriori possibilità + +### Tenere i backup su un disco diverso + +Potete connettere e montare un disco esterno per tenerci gli archivi di backup (oltre a tutto il resto): per fare questo prima spostate gli archivi e poi aggiungete un link simbolico. + + +```bash +PATH_TO_DRIVE="/media/my_external_drive" # Come esempio, dipende da dove monterete il vostro disco +mv /home/yunohost.backup/archives $PATH_TO_DRIVE/yunohost_backup_archives +ln -s $PATH_TO_DRIVE/yunohost_backup_archives /home/yunohost.backup/archives +``` + +### Backup automatici + +È possibile aggiungere un semplice job di cron per creare i backup automaticamente. Ad esempio per fare il backup di wordpress su base settimanale create il file `/etc/cron.weekly/backup-wordpress` con queste righe: + +```bash +#!/bin/bash +yunohost backup create --apps wordpress +``` + +e poi rendetelo eseguibile: + +```bash +chmod +x /etc/cron.weekly/backup-wordpress +``` + +Prestate attenzione a ciò di cui fate il backup e quando perché altrimenti è possibile esaurire lo spazio del vostro disco eseguendo, ad esempio, 30 Gb di backup ogni giorno. + + +#### Backup del server su un server remoto + +Potete seguire questo tutorial sul forum per impostare Borg fra due server: <https://forum.yunohost.org/t/how-to-backup-your-yunohost-server-on-another-server/3153> + +Alternativamente, la app Archivist permette di impostare un sistema simile: <https://forum.yunohost.org/t/new-app-archivist/3747> + +#### Backup completo con `dd` + +Se state usando una board ARM un altro metodo per eseguire un backup completo è quello di creare un'immagine della card SD. Per fare questo innanzitutto spegnete la vostra board ARM, prendete la card SD e createne un'immagine completa con un comando come il seguente: + + +```bash +dd if=/dev/mmcblk0 of=./backup.img status=progress +``` + +(modificate `/dev/mmcblk0` con il device reale della vostra card) \ No newline at end of file From 8acbbb0a4c4bfe9add55e309ab284153b175b42a Mon Sep 17 00:00:00 2001 From: yalh76 <yalh@yahoo.com> Date: Sun, 14 Jul 2019 16:41:59 +0200 Subject: [PATCH 045/360] Typo --- use_case_non-profit_organisations.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/use_case_non-profit_organisations.md b/use_case_non-profit_organisations.md index 270eddd6..146494b0 100644 --- a/use_case_non-profit_organisations.md +++ b/use_case_non-profit_organisations.md @@ -87,7 +87,7 @@ The first thing you will need to implement a YunoHost server is a domain name. T ### Mails From scratch, YunoHost provide mail system available using POP/IMAP/SMTP. -Mails accounts will be managed using the web interface or the command line. Created accounts are stored in openldap. +Mails accounts will be managed using the web interface or the command line. Created accounts are stored in OpenLDAP. Additional package can be installed to provide more functionality to the YunoHost mail system: * Webmail using [Roundcube](https://github.com/YunoHost-Apps/roundcube_ynh), [Rainloop](https://github.com/YunoHost-Apps/rainloop_ynh) @@ -109,11 +109,11 @@ To provide personal contact system you will need to install: ### Shared files To provide shared files system: personal and shared drive, you can install [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh). -Files will be available from a web interface or using a synchronization client +Files will be available from a web interface or using a synchronization client. ### Instant communication -Out of the box, YunoHost provide an XMPP server, for which you can install a web client: [Jappix](https://github.com/YunoHost-Apps/jappix_ynh) +Out of the box, YunoHost provide an XMPP server, for which you can install a web client: [Jappix](https://github.com/YunoHost-Apps/jappix_ynh). You can also install a matrix server: * The server: [Synapse](https://github.com/YunoHost-Apps/synapse_ynh) @@ -147,25 +147,25 @@ With CiviCRM you can provide online membership and payment. #### Events Registrations -With CiviCRM, you can provide an online diary to let members or public register for free or with a payment +With CiviCRM, you can provide an online diary to let members or public register for free or with a payment. #### Newsletter/Mailing -Best way to manage that is using CiviCRM and its mailing module +Best way to manage that is using CiviCRM and its mailing module. ### Forum -You have several choices, or having an integrated forum in Drupal or using a dedicated forum system like [Flarum](https://github.com/YunoHost-Apps/flarum_ynh) +You have several choices, or having an integrated forum in Drupal or using a dedicated forum system like [Flarum](https://github.com/YunoHost-Apps/flarum_ynh). ### Backup YunoHost provide is own backup system. Before any package upgrade, YunoHost backup the current version of the package and automaticaly restore it if the upgrade fails. -Yunohost backup are stored localy in `/home/yunohost.backup/archives` +Yunohost backup are stored localy in `/home/yunohost.backup/archives`. But for production, localy stored backup are not enough, so you will need to implement aditional backup strategies: * Backup of the the Virtual Machine if provided by the hosting system. * [Archivist](https://github.com/YunoHost-Apps/archivist_ynh) is an automatic backup system for your server. Your backups can be send to many other places, local or distant. -* [Borg](https://github.com/YunoHost-Apps/borg_ynh) and [Borg Server](https://github.com/YunoHost-Apps/borgserver_ynh) allow to externalize backups +* [Borg](https://github.com/YunoHost-Apps/borg_ynh) and [Borg Server](https://github.com/YunoHost-Apps/borgserver_ynh) allow to externalize backups. * [Fallback](https://github.com/YunoHost-Apps/fallback_ynh), if you have two yunohost servers, provide a way to have a secondary server which you can used if your main server goes down. This secondary server will allow you to deploy a copy of your server to bring back your YunoHost during your break down. ### Go further From f7bd723f32337f8eb9452b6a0d2f69f3d34e3b45 Mon Sep 17 00:00:00 2001 From: yalh76 <yalh@yahoo.com> Date: Sun, 14 Jul 2019 16:49:33 +0200 Subject: [PATCH 046/360] French translation --- docs_fr.md | 2 +- use_case_non-profit_organisations_fr.md | 203 ++++++++++++++++++++++++ 2 files changed, 204 insertions(+), 1 deletion(-) create mode 100644 use_case_non-profit_organisations_fr.md diff --git a/docs_fr.md b/docs_fr.md index 6cfe292f..18864ed5 100644 --- a/docs_fr.md +++ b/docs_fr.md @@ -33,4 +33,4 @@ La documentation de YunoHost s’articule autour de trois sections : * [Support / Aide](/help_fr) * Exemple d'utilisation: - * [YunoHost pour les organisations à but non lucratif](/use_case_non-profit_organisations_en) + * [YunoHost pour les organisations à but non lucratif](/use_case_non-profit_organisations_fr) diff --git a/use_case_non-profit_organisations_fr.md b/use_case_non-profit_organisations_fr.md new file mode 100644 index 00000000..1b1ab8e3 --- /dev/null +++ b/use_case_non-profit_organisations_fr.md @@ -0,0 +1,203 @@ +# YunoHost for non-profit + +## Table of Contents +* [Introduction](#introduction) +* [Qui ](#qui) +* [Quoi](#quoi) +* [Quand](#quand) +* [Où](#o-) +* [Pourquoi](#pourquoi) +* [Comment](#comment) +* [Conclusion](#conclusion) + +## Introduction + +L'objet de ce document est de présenter une utilisation spécifique de [YunoHost](https://yunohost.org/) pour des organisations à but non lucratif. + +## Qui + +Organisations à but non lucratif, ONG ou tout type d'association. + +## Quoi + +Les organisations à but non lucratif doivent généralement fournir différents services à différents publics: + +* Conseil d'administration / Comité directeur / Bénévoles avec: + * [Mails](#mails) + * [Calendrier](#calendrier) + * [Contact](#contact) + * [Fichiers partagés / Drive](#fichiers-partag-s) + * [Communication instantanée](#communication-instantan-e) + * [Intranet / Base de connaissances](#intranet) + * [ERP / Comptabilité](#erp-comptabilit-) +* Membres avec: + * [Site Web public avec accès privé et individuel](#site-web-public) + * [Adhésion](#adh-sion) + * [Inscriptions aux événements](#inscriptions-aux-v-nements) + * [Mailings](#newsletter-mailing) + * [Forum](#forum) +* Public avec: + * [Site Web public](#site-web-public) + * [Newsletter](#newsletter-mailing) + +## Quand + +Lorsque l'organisation à but non lucratif êtes prêt à franchier le pas. + +## Où + +Le serveur YunoHost peut être hébergé à différents endroits: +* Hébergement en propre sur un serveur, un ordinateur ou Raspberry derrière ASDL, SDSL ou Fibre +* [Chatons](https://chatons.org), [librehosters](https://framagit.org/librehosters/awesome-librehosters) +* Services d'hébergement commercial fournissant une machine virtuelle Debian + +## Pourquoi + +YunoHost peut répondre à tous les besoins d'une organisation à but non lucratif et lui permettre de conserver la maitrise de ses données. + +## Comment + +### YunoHost + +YunoHost est une distribution basée sur Debian GNU/Linux qui automatise l’installation d’un serveur Web personnel. Le but de YunoHost est de permettre aux utilisateurs d’héberger facilement leurs propres services Web en proposant une interface Web simple, pointer-cliquer, pour installer diverses applications Web. + + + +YunoHost fournit immédiatement: +* Un système d'application +* Une interface web +* Une interface de ligne de commande (CLI): Moulinette +* Un serveur Web: Nginx +* Un serveur DNS: Dnsmasq +* Une base de données: MariaDB +* Un système de sauvegarde +* Un SSO: SSOwat +* OpenLDAP +* Email: + * SMTP: Postfix + * IMAP & POP3: Dovecot + * Un antispam: rspamd,rmilter +* Serveur XMPP de messagerie instantanée: Metronome IM + +### Nom de domaine + +La première chose dont vous aurez besoin pour implémenter un serveur YunoHost est un nom de domaine. Le nom de domaine peut généralement être fourni avec votre service d'hébergement. + +### Mails + +De base, YunoHost fournit un système de messagerie disponible en utilisant POP / IMAP / SMTP. +Les comptes de messagerie seront gérés à l'aide de l'interface Web ou de la ligne de commande. Les comptes créés sont stockés dans OpenLDAP. + +Des packages supplémentaires peuvent être installés pour fournir davantage de fonctionnalités au système de messagerie YunoHost: +* un webmail en utilisant [Roundcube](https://github.com/YunoHost-Apps/roundcube_ynh), [Rainloop](https://github.com/YunoHost-Apps/rainloop_ynh) +* ActiveSync utilisant [Z-Push](https://github.com/YunoHost-Apps/z-push_ynh) +* Groupe de distribution interne en utilisant [Mailman](https://github.com/YunoHost-Apps/mailman_ynh) + +### Calendrier + +Pour fournir des calendriers personnels ou partagés, vous devrez installer: +* [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) +* [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) + +### Contact + +Pour fournir un système de contact personnel, vous devrez installer: +* [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) +* [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) + +### Fichiers partagés + +Pour fournir un système de fichiers partagés: dossiers personnels et dossiers partagés, vous pouvez installer [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh). +Les fichiers seront disponibles à partir d'une interface Web ou à l'aide d'un client de synchronisation. + +### Communication instantanée + +De base, YunoHost fournit immédiatement un serveur XMPP pour lequel vous pouvez installer un client Web: [Jappix](https://github.com/YunoHost-Apps/jappix_ynh) + +Vous pouvez également installer un serveur Matrix: +* Le serveur: [Synapse](https://github.com/YunoHost-Apps/synapse_ynh) +* Un client web: [Riot](https://github.com/YunoHost-Apps/_ynh) + +### Intranet + +Pour une organisation à but non lucratif, un bon moyen de mettre en œuvre un intranet est de fournir un wiki permettant aux utilisateurs internes de lire, éditer et ajouter du contenu. Voici quelques paquets pour implémenter un wiki: +* [DokuWiki](https://github.com/YunoHost-Apps/docuwiki_ynh) using wiki syntax +* [Wiki.js](https://github.com/YunoHost-Apps/wikijs_ynh) using markdown syntax + +### ERP / Comptabilité + +À un moment donné, une organisation à but non lucratif pourrait avoir besoin d’un système de Comptabilité / ERP, voici deux propositions: +* [OpenERP/Odoo](https://github.com/YunoHost-Apps/libreerp_ynh) +* [Dolibarr](https://github.com/YunoHost-Apps/dolibarr_ynh) + +### Site Web Public + +Il existe plusieurs façons d'implémenter un site Web public: +* Un simple site HTML, css, etc... en utilisant using: [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) +* Utiliser un CMS (système de gestion de contenu) comme [Wordpress](https://github.com/YunoHost-Apps/_ynh), [Drupal](https://github.com/YunoHost-Apps/drupal_ynh) , [Grav](https://github.com/YunoHost-Apps/grav_ynh), [PluXml](https://github.com/YunoHost-Apps/pluxml_ynh) + +Mais nous proposerons quelque chose de plus puissant: [CiviCRM on Drupal 7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh): +* Drupal qui est un fraùmework puissent de gestion de contenu +* avec CiviCRM qui est un CRM OpenSource à destination des organisations à but non lucratif + +#### Adhésion + +Avec CiviCRM, vous pourrez mettre en place des adhésions en ligne avec paiement. + +#### Inscriptions aux événements + +Avec CiviCRM, vous pourrez mettr eà disposition un agenda en ligne avec la possibilité pour les memebres ou le public de s'inscrire gratuitement ou en payant. + +#### Newsletter/Mailing + +Le meilleur moyen de gérer cela consiste à utiliser CiviCRM et son module de mailing. + +### Forum + +Vous avez plusieurs choix, avoir un forum intégré dans Drupal ou utiliser un système de forum dédié tel que [Flarum](https://github.com/YunoHost-Apps/flarum_ynh). + +### Sauvegarde + +YunoHost fournit son propre système de sauvegarde. Avant toute mise à niveau de paquet, YunoHost sauvegarde la version actuelle du paquet et la restaure automatiquement si la mise à niveau échoue. +Les sauvegardes Yunohost sont stockées localement dans`/home/yunohost.backup/archives` + +Mais pour la production, la sauvegarde stockée localement ne suffit pas, vous devez donc mettre en œuvre des stratégies de sauvegarde supplémentaires: +* Sauvegarde de la machine virtuelle si fournie par le système d'hébergement. +* [Archivist](https://github.com/YunoHost-Apps/archivist_ynh) est un système de sauvegarde automatique de votre serveur. Vos sauvegardes peuvent être envoyées à de nombreux autres endroits, locaux ou distants. +* [Borg](https://github.com/YunoHost-Apps/borg_ynh) and [Borg Server](https://github.com/YunoHost-Apps/borgserver_ynh) permettent d'externaliser les sauvegardes. +* [Fallback](https://github.com/YunoHost-Apps/fallback_ynh), si vous avez deux serveurs yunohost, fournissez un moyen d'avoir un serveur secondaire que vous pourrez utiliser si votre serveur principal tombe en panne. Ce serveur secondaire vous permettra de déployer une copie de votre serveur pour ramener votre YunoHost lors de votre panne. + +### Aller plus loin + +#### Galerie de photos fédérées + +* [Pixelfed](https://github.com/YunoHost-Apps/pixelfed_ynh) + +#### Galerie audio fédérée + +* [Reel2Bits](https://github.com/YunoHost-Apps/reel2bits_ynh) +* [Funkwhale](https://github.com/YunoHost-Apps/funkwhale_ynh) + +#### Galerie vidéo fédérée + +* [PeerTube](https://github.com/YunoHost-Apps/peertube_ynh) + +#### Réseaux sociaux fédérés + +* [Mastodon](https://github.com/YunoHost-Apps/mastodon_ynh) +* [Pleroma](https://github.com/YunoHost-Apps/pleroma_ynh) +* [Mobilizon](https://github.com/YunoHost-Apps/mobilizon_ynh) + +#### Blog fédéré + +* [Plume](https://github.com/YunoHost-Apps/plume_ynh) +* [Writefreely](https://github.com/YunoHost-Apps/writefreely_ynh) + +#### Chat + +* [Mattermost](https://github.com/YunoHost-Apps/mattermost_ynh) + +## Conclusion + +YunoHost peut couvrir 99% des besoins des organisations à but non lucratif, leur permettant de posséder et de protéger leurs données, de choisir les applications qu'elles souhaitent utiliser. +Et s’ils ne sont pas disponibles, ils peuvent [les packager pour YunoHost](https://yunohost.org/#/contributordoc), c’est très simple. From 66fdf25966925fa4993536f7759679704be2f8e8 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Tue, 16 Jul 2019 16:49:28 +0000 Subject: [PATCH 047/360] I added "Akaunting" to the app wish list --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index fb8f290f..8937d1bd 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -13,6 +13,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [10er10](https://github.com/dready92/10er10) - [Airtime](https://www.sourcefabric.org/en/airtime/) - [Ajenti](http://ajenti.org) +- [Akaunting](https://akaunting.com/) - [aMule](https://github.com/amule-project/amule) - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) - [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) From a01da05811772173088514c8ffccc94ab1802cde Mon Sep 17 00:00:00 2001 From: Gofannon <17145502+Gofannon@users.noreply.github.com> Date: Wed, 17 Jul 2019 12:57:54 +0200 Subject: [PATCH 048/360] Add app description --- apps_wishlist.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index 8937d1bd..4604797d 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -13,7 +13,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [10er10](https://github.com/dready92/10er10) - [Airtime](https://www.sourcefabric.org/en/airtime/) - [Ajenti](http://ajenti.org) -- [Akaunting](https://akaunting.com/) +- [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. - [aMule](https://github.com/amule-project/amule) - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) - [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) From 979a2c07e291131381b38eba22a4a3c28bc8e1c0 Mon Sep 17 00:00:00 2001 From: Nicolas Frandeboeuf <mail@nicofrand.eu> Date: Thu, 18 Jul 2019 09:42:54 +0200 Subject: [PATCH 049/360] Fix typos BTW the https://yunohost.org/#/use_case_non-profit_organisations_fr/edit does not work it says "Invalid page name" upon submission. --- use_case_non-profit_organisations_fr.md | 52 ++++++++++++------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/use_case_non-profit_organisations_fr.md b/use_case_non-profit_organisations_fr.md index 1b1ab8e3..d5a9d1dc 100644 --- a/use_case_non-profit_organisations_fr.md +++ b/use_case_non-profit_organisations_fr.md @@ -42,18 +42,18 @@ Les organisations à but non lucratif doivent généralement fournir différents ## Quand -Lorsque l'organisation à but non lucratif êtes prêt à franchier le pas. +Lorsque l'organisation à but non lucratif est prête à franchir le pas. ## Où -Le serveur YunoHost peut être hébergé à différents endroits: -* Hébergement en propre sur un serveur, un ordinateur ou Raspberry derrière ASDL, SDSL ou Fibre +Le serveur YunoHost peut être hébergé à différents endroits : +* Hébergement en propre sur un serveur, un ordinateur ou Raspberry derrière ADSL, SDSL ou Fibre * [Chatons](https://chatons.org), [librehosters](https://framagit.org/librehosters/awesome-librehosters) * Services d'hébergement commercial fournissant une machine virtuelle Debian ## Pourquoi -YunoHost peut répondre à tous les besoins d'une organisation à but non lucratif et lui permettre de conserver la maitrise de ses données. +YunoHost peut répondre à tous les besoins d'une organisation à but non lucratif et lui permettre de conserver la maîtrise de ses données. ## Comment @@ -67,17 +67,17 @@ YunoHost fournit immédiatement: * Un système d'application * Une interface web * Une interface de ligne de commande (CLI): Moulinette -* Un serveur Web: Nginx -* Un serveur DNS: Dnsmasq +* Un serveur Web : Nginx +* Un serveur DNS : Dnsmasq * Une base de données: MariaDB * Un système de sauvegarde * Un SSO: SSOwat * OpenLDAP -* Email: +* Email : * SMTP: Postfix - * IMAP & POP3: Dovecot - * Un antispam: rspamd,rmilter -* Serveur XMPP de messagerie instantanée: Metronome IM + * IMAP & POP3 : Dovecot + * Un antispam : rspamd, rmilter +* Serveur XMPP de messagerie instantanée : Metronome IM ### Nom de domaine @@ -88,56 +88,56 @@ La première chose dont vous aurez besoin pour implémenter un serveur YunoHost De base, YunoHost fournit un système de messagerie disponible en utilisant POP / IMAP / SMTP. Les comptes de messagerie seront gérés à l'aide de l'interface Web ou de la ligne de commande. Les comptes créés sont stockés dans OpenLDAP. -Des packages supplémentaires peuvent être installés pour fournir davantage de fonctionnalités au système de messagerie YunoHost: +Des packages supplémentaires peuvent être installés pour fournir davantage de fonctionnalités au système de messagerie YunoHost : * un webmail en utilisant [Roundcube](https://github.com/YunoHost-Apps/roundcube_ynh), [Rainloop](https://github.com/YunoHost-Apps/rainloop_ynh) * ActiveSync utilisant [Z-Push](https://github.com/YunoHost-Apps/z-push_ynh) -* Groupe de distribution interne en utilisant [Mailman](https://github.com/YunoHost-Apps/mailman_ynh) +* Groupe de distribution interne en utilisant [Mailman](https://github.com/YunoHost-Apps/mailman_ynh) ### Calendrier -Pour fournir des calendriers personnels ou partagés, vous devrez installer: +Pour fournir des calendriers personnels ou partagés, vous devrez installer : * [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) * [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) ### Contact -Pour fournir un système de contact personnel, vous devrez installer: +Pour fournir un système de contact personnel, vous devrez installer : * [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) * [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) ### Fichiers partagés -Pour fournir un système de fichiers partagés: dossiers personnels et dossiers partagés, vous pouvez installer [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh). +Pour fournir un système de fichiers partagés : dossiers personnels et dossiers partagés, vous pouvez installer [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh). Les fichiers seront disponibles à partir d'une interface Web ou à l'aide d'un client de synchronisation. ### Communication instantanée De base, YunoHost fournit immédiatement un serveur XMPP pour lequel vous pouvez installer un client Web: [Jappix](https://github.com/YunoHost-Apps/jappix_ynh) -Vous pouvez également installer un serveur Matrix: +Vous pouvez également installer un serveur Matrix : * Le serveur: [Synapse](https://github.com/YunoHost-Apps/synapse_ynh) * Un client web: [Riot](https://github.com/YunoHost-Apps/_ynh) ### Intranet -Pour une organisation à but non lucratif, un bon moyen de mettre en œuvre un intranet est de fournir un wiki permettant aux utilisateurs internes de lire, éditer et ajouter du contenu. Voici quelques paquets pour implémenter un wiki: +Pour une organisation à but non lucratif, un bon moyen de mettre en œuvre un intranet est de fournir un wiki permettant aux utilisateurs internes de lire, éditer et ajouter du contenu. Voici quelques paquets pour implémenter un wiki : * [DokuWiki](https://github.com/YunoHost-Apps/docuwiki_ynh) using wiki syntax * [Wiki.js](https://github.com/YunoHost-Apps/wikijs_ynh) using markdown syntax ### ERP / Comptabilité -À un moment donné, une organisation à but non lucratif pourrait avoir besoin d’un système de Comptabilité / ERP, voici deux propositions: +À un moment donné, une organisation à but non lucratif pourrait avoir besoin d’un système de Comptabilité / ERP, voici deux propositions : * [OpenERP/Odoo](https://github.com/YunoHost-Apps/libreerp_ynh) * [Dolibarr](https://github.com/YunoHost-Apps/dolibarr_ynh) ### Site Web Public -Il existe plusieurs façons d'implémenter un site Web public: -* Un simple site HTML, css, etc... en utilisant using: [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) +Il existe plusieurs façons d'implémenter un site Web public : +* Un simple site HTML, CSS, etc... en utilisant : [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) * Utiliser un CMS (système de gestion de contenu) comme [Wordpress](https://github.com/YunoHost-Apps/_ynh), [Drupal](https://github.com/YunoHost-Apps/drupal_ynh) , [Grav](https://github.com/YunoHost-Apps/grav_ynh), [PluXml](https://github.com/YunoHost-Apps/pluxml_ynh) -Mais nous proposerons quelque chose de plus puissant: [CiviCRM on Drupal 7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh): -* Drupal qui est un fraùmework puissent de gestion de contenu +Mais nous proposerons quelque chose de plus puissant : [CiviCRM on Drupal 7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh): +* Drupal qui est un puissant framework de gestion de contenu * avec CiviCRM qui est un CRM OpenSource à destination des organisations à but non lucratif #### Adhésion @@ -146,7 +146,7 @@ Avec CiviCRM, vous pourrez mettre en place des adhésions en ligne avec paiement #### Inscriptions aux événements -Avec CiviCRM, vous pourrez mettr eà disposition un agenda en ligne avec la possibilité pour les memebres ou le public de s'inscrire gratuitement ou en payant. +Avec CiviCRM, vous pourrez mettre à disposition un agenda en ligne avec la possibilité pour les membres ou le public de s'inscrire gratuitement ou en payant. #### Newsletter/Mailing @@ -159,13 +159,13 @@ Vous avez plusieurs choix, avoir un forum intégré dans Drupal ou utiliser un s ### Sauvegarde YunoHost fournit son propre système de sauvegarde. Avant toute mise à niveau de paquet, YunoHost sauvegarde la version actuelle du paquet et la restaure automatiquement si la mise à niveau échoue. -Les sauvegardes Yunohost sont stockées localement dans`/home/yunohost.backup/archives` +Les sauvegardes Yunohost sont stockées localement dans `/home/yunohost.backup/archives`. -Mais pour la production, la sauvegarde stockée localement ne suffit pas, vous devez donc mettre en œuvre des stratégies de sauvegarde supplémentaires: +Mais pour la production, la sauvegarde stockée localement ne suffit pas, vous devez donc mettre en œuvre des stratégies de sauvegarde supplémentaires : * Sauvegarde de la machine virtuelle si fournie par le système d'hébergement. * [Archivist](https://github.com/YunoHost-Apps/archivist_ynh) est un système de sauvegarde automatique de votre serveur. Vos sauvegardes peuvent être envoyées à de nombreux autres endroits, locaux ou distants. * [Borg](https://github.com/YunoHost-Apps/borg_ynh) and [Borg Server](https://github.com/YunoHost-Apps/borgserver_ynh) permettent d'externaliser les sauvegardes. -* [Fallback](https://github.com/YunoHost-Apps/fallback_ynh), si vous avez deux serveurs yunohost, fournissez un moyen d'avoir un serveur secondaire que vous pourrez utiliser si votre serveur principal tombe en panne. Ce serveur secondaire vous permettra de déployer une copie de votre serveur pour ramener votre YunoHost lors de votre panne. +* [Fallback](https://github.com/YunoHost-Apps/fallback_ynh), si vous avez deux serveurs YunoHst, fournissez un moyen d'avoir un serveur secondaire que vous pourrez utiliser si votre serveur principal tombe en panne. Ce serveur secondaire vous permettra de déployer une copie de votre serveur pour ramener votre YunoHost lors de votre panne. ### Aller plus loin From dd3453eb8562054e70ba56bcb760f1831b81f5ef Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Thu, 18 Jul 2019 11:19:36 +0200 Subject: [PATCH 050/360] Typo --- use_case_non-profit_organisations_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/use_case_non-profit_organisations_fr.md b/use_case_non-profit_organisations_fr.md index d5a9d1dc..2409f3e8 100644 --- a/use_case_non-profit_organisations_fr.md +++ b/use_case_non-profit_organisations_fr.md @@ -165,7 +165,7 @@ Mais pour la production, la sauvegarde stockée localement ne suffit pas, vous d * Sauvegarde de la machine virtuelle si fournie par le système d'hébergement. * [Archivist](https://github.com/YunoHost-Apps/archivist_ynh) est un système de sauvegarde automatique de votre serveur. Vos sauvegardes peuvent être envoyées à de nombreux autres endroits, locaux ou distants. * [Borg](https://github.com/YunoHost-Apps/borg_ynh) and [Borg Server](https://github.com/YunoHost-Apps/borgserver_ynh) permettent d'externaliser les sauvegardes. -* [Fallback](https://github.com/YunoHost-Apps/fallback_ynh), si vous avez deux serveurs YunoHst, fournissez un moyen d'avoir un serveur secondaire que vous pourrez utiliser si votre serveur principal tombe en panne. Ce serveur secondaire vous permettra de déployer une copie de votre serveur pour ramener votre YunoHost lors de votre panne. +* [Fallback](https://github.com/YunoHost-Apps/fallback_ynh), si vous avez deux serveurs YunoHost, fournissez un moyen d'avoir un serveur secondaire que vous pourrez utiliser si votre serveur principal tombe en panne. Ce serveur secondaire vous permettra de déployer une copie de votre serveur pour ramener votre YunoHost lors de votre panne. ### Aller plus loin From cfb85ae69370b75672e4ecdb96ec13e2af0a4640 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Thu, 18 Jul 2019 09:20:23 +0000 Subject: [PATCH 051/360] =?UTF-8?q?Cr=C3=A9ation=20de=20l'image=20d?= =?UTF-8?q?9;une=20carte=20SD=20compress=C3=A9e=20avec=20Gzip.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backup_fr.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/backup_fr.md b/backup_fr.md index ec0c1d93..1b3e0bc2 100644 --- a/backup_fr.md +++ b/backup_fr.md @@ -159,3 +159,9 @@ dd if=/dev/mmcblk0 of=./backup.img status=progress ``` (remplacez `/dev/mmcblk0` par le vrai nom de votre carte SD) + +Vous pouvez aussi compresser l'image à l'aide de gzip : + +```bash +dd if=/dev/mmcblk0 | gzip > ./image.gz +``` From a4c6acc54fc9f6e84245c85fc5510d893062045f Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Thu, 18 Jul 2019 09:20:35 +0000 Subject: [PATCH 052/360] =?UTF-8?q?l'argument=20pour=20la=20commande?= =?UTF-8?q?=20de=20mise=20=C3=A0=20jour=20syst=C3=A8me=20n'est=20plus?= =?UTF-8?q?=20--ignore-apps=20mais=20--system=20(Source:=20manpage=20yunoh?= =?UTF-8?q?ost)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- update_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/update_fr.md b/update_fr.md index be0b9718..64577aff 100644 --- a/update_fr.md +++ b/update_fr.md @@ -16,5 +16,5 @@ Depuis la ligne de commande, vous pouvez utiliser : ``` bash yunohost tools update -yunohost tools upgrade --ignore-apps +yunohost tools upgrade --system ``` From d7be959c69d6ebb54aa3f6babdb5d047980ce06e Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Thu, 18 Jul 2019 09:20:59 +0000 Subject: [PATCH 053/360] New adopter. --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index 4604797d..4160d3a7 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -102,6 +102,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Loomio](https://www.loomio.org) - [MaidSafe](http://maidsafe.net) - [Mailpile](https://www.mailpile.is) +- [Mautic](https://github.com/mautic/mautic) - [MediaCrush](https://github.com/MediaCrush/MediaCrush) (/!\ last update: Jan 23, 2015) - [microblog.pub](https://microblog.pub) - [MinigalNano](https://github.com/sebsauvage/MinigalNano) (/!\ last update: Jun 24, 2016) From 02b3c1b3300b8387f01a725d5de9836998b5d3c7 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Thu, 18 Jul 2019 09:22:01 +0000 Subject: [PATCH 054/360] Helpy, OpenSourceBilling, OpenProject, Zammad, LocomotiveCMS --- apps_wishlist.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index 4604797d..91212ea6 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -13,7 +13,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [10er10](https://github.com/dready92/10er10) - [Airtime](https://www.sourcefabric.org/en/airtime/) - [Ajenti](http://ajenti.org) -- [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. - [aMule](https://github.com/amule-project/amule) - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) - [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) @@ -67,6 +66,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Habitica](https://habitica.com/) - [HackMD CE](https://github.com/hackmdio/hackmd) - [Hackpad](https://github.com/dropbox/hackpad) +- [Helpy](https://github.com/helpyio/helpy) - [Hexo](https://hexo.io/) - [Hi Buddy](https://github.com/tOkeshu/hibuddy) (/!\ last update: 17 Feb 2015) - [Huginn](https://github.com/cantino/huginn) @@ -98,6 +98,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [LibreNews-Server](https://librenews.io) - [LibreOffice Online](https://wiki.documentfoundation.org/ReleaseNotes/5.3/fr#LibreOffice_Online) - [LiquidSoap](http://savonet.sourceforge.net/) +- [LocomotiveCMS](https://github.com/locomotivecms/engine) - [Logstalgia](http://logstalgia.io) - [Loomio](https://www.loomio.org) - [MaidSafe](http://maidsafe.net) @@ -117,6 +118,8 @@ The following list is a compiled wishlist of applications that would be nice-to- - [OpenBazaar](https://openbazaar.org) - [openHAB](https://www.openhab.org/) - Smart home platform. - [OpenJabNab](https://github.com/OpenJabNab/OpenJabNab) (/!\ last update: Apr 30, 2016) +- [OpenProject](https://github.com/opf/openproject) +- [OpenSourceBilling](https://github.com/vteams/open-source-billing) - [OX Open-Xchange](https://www.open-xchange.com) Linux groupware solution - [Paperless](https://github.com/danielquinn/paperless) - [Paperwork](http://paperwork.rocks) @@ -181,6 +184,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Wireguard](https://www.wireguard.com/) - [Xonotic](http://xonotic.org) - [YesWiki](https://yeswiki.net) +- [Zammad](https://github.com/zammad/zammad) - [ZeroTier](https://github.com/zerotier/ZeroTierOne) - [ZNC](http://wiki.znc.in/ZNC) - [Zone-project](https://github.com/descl/ZONE) From 81cca26b7995063230ee4293bdd2361d83d7d1db Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Thu, 18 Jul 2019 11:22:50 +0200 Subject: [PATCH 055/360] Fix issue from simone patch --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index 91212ea6..ee0d0299 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -13,6 +13,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [10er10](https://github.com/dready92/10er10) - [Airtime](https://www.sourcefabric.org/en/airtime/) - [Ajenti](http://ajenti.org) +- [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. - [aMule](https://github.com/amule-project/amule) - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) - [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) From 21a5f1d9b9ad900ce5f5721ec16b8c0cb5d79363 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Thu, 18 Jul 2019 11:24:35 +0200 Subject: [PATCH 056/360] Propagate fix on english version --- update.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/update.md b/update.md index a4982ee2..0a6005a9 100644 --- a/update.md +++ b/update.md @@ -15,5 +15,5 @@ From the command line, you can run: ``` bash yunohost tools update -yunohost tools upgrade --ignore-apps +yunohost tools upgrade --system ``` From 83f6ca5de994d5124d917e4628a3d4487c78bb4c Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Thu, 18 Jul 2019 09:56:44 +0000 Subject: [PATCH 057/360] Add Tracim to the wishlist. --- apps_wishlist.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index ee0d0299..21c68233 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -67,7 +67,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Habitica](https://habitica.com/) - [HackMD CE](https://github.com/hackmdio/hackmd) - [Hackpad](https://github.com/dropbox/hackpad) -- [Helpy](https://github.com/helpyio/helpy) - [Hexo](https://hexo.io/) - [Hi Buddy](https://github.com/tOkeshu/hibuddy) (/!\ last update: 17 Feb 2015) - [Huginn](https://github.com/cantino/huginn) @@ -99,7 +98,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [LibreNews-Server](https://librenews.io) - [LibreOffice Online](https://wiki.documentfoundation.org/ReleaseNotes/5.3/fr#LibreOffice_Online) - [LiquidSoap](http://savonet.sourceforge.net/) -- [LocomotiveCMS](https://github.com/locomotivecms/engine) - [Logstalgia](http://logstalgia.io) - [Loomio](https://www.loomio.org) - [MaidSafe](http://maidsafe.net) @@ -119,8 +117,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [OpenBazaar](https://openbazaar.org) - [openHAB](https://www.openhab.org/) - Smart home platform. - [OpenJabNab](https://github.com/OpenJabNab/OpenJabNab) (/!\ last update: Apr 30, 2016) -- [OpenProject](https://github.com/opf/openproject) -- [OpenSourceBilling](https://github.com/vteams/open-source-billing) - [OX Open-Xchange](https://www.open-xchange.com) Linux groupware solution - [Paperless](https://github.com/danielquinn/paperless) - [Paperwork](http://paperwork.rocks) @@ -172,6 +168,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [TorChat](https://github.com/prof7bit/TorChat) - [Torrent Tunes](https://github.com/tchoulihan/torrenttunes-client) - [Total Respawn](https://github.com/broncowdd/TotalRespawn) +- [Tracim](https://github.com/tracim/tracim) - [Twister](http://twister.net.co) - [TwitRSS.me](http://twitrss.me/) ([Github](https://github.com/ciderpunx/twitrssme)) Scrapes Twitter to create RSS feeds. - [Unvis](https://unv.is/) ([Github](https://github.com/lodjuret/unvis.it)) @@ -185,7 +182,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Wireguard](https://www.wireguard.com/) - [Xonotic](http://xonotic.org) - [YesWiki](https://yeswiki.net) -- [Zammad](https://github.com/zammad/zammad) - [ZeroTier](https://github.com/zerotier/ZeroTierOne) - [ZNC](http://wiki.znc.in/ZNC) - [Zone-project](https://github.com/descl/ZONE) From 129802145cfd9a82ffd44347322ac8f71eadec88 Mon Sep 17 00:00:00 2001 From: ljf <ljf+git@grimaud.me> Date: Fri, 19 Jul 2019 15:19:46 +0200 Subject: [PATCH 058/360] [enh] Remove github ads --- index.md | 4 ---- index_ar.md | 4 ---- index_de.md | 4 ---- index_fr.md | 4 ---- index_it.md | 4 ---- 5 files changed, 20 deletions(-) diff --git a/index.md b/index.md index 2d757617..21576d77 100644 --- a/index.md +++ b/index.md @@ -30,10 +30,6 @@ <div class="boring-part" markdown="1"> - <a href="https://github.com/YunoHost" target="_blank" class="github-ribbon hidden-xs"> - <img src="/images/github_ribbon_grey.png" alt="Fork me on GitHub"> - </a> - <h1>YunoHost <small>is a server operating system aiming to make self-hosting accessible to everyone.</small></h1> <div class="home-panel"> diff --git a/index_ar.md b/index_ar.md index 1df4a89c..1e6f7574 100644 --- a/index_ar.md +++ b/index_ar.md @@ -27,10 +27,6 @@ <div class="boring-part" markdown="1"> - <a href="https://github.com/YunoHost" target="_blank" class="github-ribbon hidden-xs"> - <img src="/images/github_ribbon_grey.png" alt="قم بتشعيبي على جيت هب"> - </a> - <h1 dir="rtl">YunoHost <small>أداة تُمكّنكم من تنصيب و استخدام خادمكم بأسلوب سهل.</small></h1> <div class="home-panel"> diff --git a/index_de.md b/index_de.md index 3e86b308..9da2cd14 100644 --- a/index_de.md +++ b/index_de.md @@ -30,10 +30,6 @@ <div class="boring-part" markdown="1"> - <a href="https://github.com/YunoHost" target="_blank" class="github-ribbon hidden-xs"> - <img src="/images/github_ribbon_grey.png" alt="Folgen Sie Yunohost auf GitHub"> - </a> - <h1>YunoHost <small>ist ein Serverbetriebssystem, das<br> Self-Hosting für alle möglich macht.</small></h1> diff --git a/index_fr.md b/index_fr.md index c6e5c82c..d358e760 100644 --- a/index_fr.md +++ b/index_fr.md @@ -26,10 +26,6 @@ <div class="boring-part" markdown="1"> - <a href="https://github.com/YunoHost" target="_blank" class="github-ribbon hidden-xs"> - <img src="/images/github_ribbon_grey.png" alt="Fork me on GitHub"> - </a> - <h1>YunoHost <small>est un outil qui vous permet d’installer et d’utiliser facilement votre propre serveur.</small></h1> <div class="home-panel"> diff --git a/index_it.md b/index_it.md index de3db000..ee0bc581 100644 --- a/index_it.md +++ b/index_it.md @@ -31,10 +31,6 @@ <div class="boring-part" markdown="1"> - <a href="https://github.com/YunoHost" target="_blank" class="github-ribbon hidden-xs"> - <img src="/images/github_ribbon_grey.png" alt="Fork me on GitHub"> - </a> - <h1>YunoHost <small>è un sistema operativo per server con l'obiettivo di rendere il self-host accessibile a tutti.</small></h1> <div class="home-panel"> From 17920e475498aedf31f259147bda596bd161deb4 Mon Sep 17 00:00:00 2001 From: ljf <ljf+git@grimaud.me> Date: Fri, 19 Jul 2019 17:16:52 +0200 Subject: [PATCH 059/360] [enh] Remove unused image --- images/github_ribbon_grey.png | Bin 4139 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/github_ribbon_grey.png diff --git a/images/github_ribbon_grey.png b/images/github_ribbon_grey.png deleted file mode 100644 index 8c441927bb3e3b5f6cbc1cf5f433d41d264e51bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4139 zcmc(iXHZjH*T?B9RltD6OBaz4h*z3`1rfM3DS-eXbm_fHq$30fozSF1q$Qz-0Mdd) zI)a2Iibzp9ih@W{@QK%%=fnHq{q)YfYv!E2_TJ~Ly?%TB&&=6qBZGf9Sb?l`baWg# z+8R(=oBjJb%SgLBhiQk?(J}NG>6>cOx-b~b%*@Q(+}y�uF~;T3R9y2rDZqYiny8 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 From 1e73cab7165281ad5059ea942623b1efbc87a6c0 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sun, 21 Jul 2019 08:58:52 +0000 Subject: [PATCH 060/360] Just corrected "30 Go" to "30GB" --- backup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backup.md b/backup.md index 819bd80f..6f48d0e4 100644 --- a/backup.md +++ b/backup.md @@ -139,7 +139,7 @@ then make it executable : chmod +x /etc/cron.weekly/backup-wordpress ``` -Be careful what you backup exactly and when : you don't want to end up with your whole disk space saturated because you backuped 30 Go of data every day. +Be careful what you backup exactly and when : you don't want to end up with your whole disk space saturated because you backuped 30 GB of data every day. #### Backing your server on a remote server From 7f9d284821f09aa009d7e410461f5137c6f1cbd6 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sun, 21 Jul 2019 08:59:12 +0000 Subject: [PATCH 061/360] Just corrected "Spcify" to "Specify" --- app_update.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app_update.md b/app_update.md index edb2c769..94a4cd5c 100644 --- a/app_update.md +++ b/app_update.md @@ -17,7 +17,7 @@ yunohost app upgrade wordpress ** Note: ** in case you have multiple instances of the same type (ex: 2 wordpress) installed, you will need to specify the instance name (ex: wordpress ou wordpress__2). #### Upgrade an unofficial application -Spcify the git repository containing the upgrade. +Specify the git repository containing the upgrade. For intance, to upgrade LimeSurvey: ```bash From dd6ae243dcb26ed92626efb1150e9a2a5226d1d5 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Sun, 21 Jul 2019 11:34:35 +0200 Subject: [PATCH 062/360] Revert "[Anonymous contrib] Add Tracim to the wishlist." --- apps_wishlist.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index 7f5478fc..412ee594 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -67,6 +67,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Habitica](https://habitica.com/) - [HackMD CE](https://github.com/hackmdio/hackmd) - [Hackpad](https://github.com/dropbox/hackpad) +- [Helpy](https://github.com/helpyio/helpy) - [Hexo](https://hexo.io/) - [Hi Buddy](https://github.com/tOkeshu/hibuddy) (/!\ last update: 17 Feb 2015) - [Huginn](https://github.com/cantino/huginn) @@ -98,6 +99,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [LibreNews-Server](https://librenews.io) - [LibreOffice Online](https://wiki.documentfoundation.org/ReleaseNotes/5.3/fr#LibreOffice_Online) - [LiquidSoap](http://savonet.sourceforge.net/) +- [LocomotiveCMS](https://github.com/locomotivecms/engine) - [Logstalgia](http://logstalgia.io) - [Loomio](https://www.loomio.org) - [MaidSafe](http://maidsafe.net) @@ -118,6 +120,8 @@ The following list is a compiled wishlist of applications that would be nice-to- - [OpenBazaar](https://openbazaar.org) - [openHAB](https://www.openhab.org/) - Smart home platform. - [OpenJabNab](https://github.com/OpenJabNab/OpenJabNab) (/!\ last update: Apr 30, 2016) +- [OpenProject](https://github.com/opf/openproject) +- [OpenSourceBilling](https://github.com/vteams/open-source-billing) - [OX Open-Xchange](https://www.open-xchange.com) Linux groupware solution - [Paperless](https://github.com/danielquinn/paperless) - [Paperwork](http://paperwork.rocks) @@ -169,7 +173,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [TorChat](https://github.com/prof7bit/TorChat) - [Torrent Tunes](https://github.com/tchoulihan/torrenttunes-client) - [Total Respawn](https://github.com/broncowdd/TotalRespawn) -- [Tracim](https://github.com/tracim/tracim) - [Twister](http://twister.net.co) - [TwitRSS.me](http://twitrss.me/) ([Github](https://github.com/ciderpunx/twitrssme)) Scrapes Twitter to create RSS feeds. - [Unvis](https://unv.is/) ([Github](https://github.com/lodjuret/unvis.it)) @@ -183,6 +186,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Wireguard](https://www.wireguard.com/) - [Xonotic](http://xonotic.org) - [YesWiki](https://yeswiki.net) +- [Zammad](https://github.com/zammad/zammad) - [ZeroTier](https://github.com/zerotier/ZeroTierOne) - [ZNC](http://wiki.znc.in/ZNC) - [Zone-project](https://github.com/descl/ZONE) From f41aedad510e4aadece3b031cd29373065b1b894 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Sun, 21 Jul 2019 11:35:39 +0200 Subject: [PATCH 063/360] Readd Tracim --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index 412ee594..9e92b73a 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -173,6 +173,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [TorChat](https://github.com/prof7bit/TorChat) - [Torrent Tunes](https://github.com/tchoulihan/torrenttunes-client) - [Total Respawn](https://github.com/broncowdd/TotalRespawn) +- [Tracim](https://github.com/tracim/tracim) - [Twister](http://twister.net.co) - [TwitRSS.me](http://twitrss.me/) ([Github](https://github.com/ciderpunx/twitrssme)) Scrapes Twitter to create RSS feeds. - [Unvis](https://unv.is/) ([Github](https://github.com/lodjuret/unvis.it)) From 486705b99e665639991707bc0aecf1ace2ff9e55 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alexandre.aubin@cern.ch> Date: Fri, 26 Jul 2019 18:31:56 +0200 Subject: [PATCH 064/360] Some updates to improve the page about virtualbox --- images/images.list | 1 - images/virtualbox_4.png | Bin 3086 -> 0 bytes install_on_virtualbox.md | 21 ++++++++++++--------- install_on_virtualbox_fr.md | 24 +++++++++++++----------- 4 files changed, 25 insertions(+), 21 deletions(-) delete mode 100644 images/virtualbox_4.png diff --git a/images/images.list b/images/images.list index 4e785728..46cb18ce 100644 --- a/images/images.list +++ b/images/images.list @@ -60,7 +60,6 @@ virtualbox_1.png virtualbox_2.1.png virtualbox_2.png virtualbox_3.png -virtualbox_4.png virtualbox.png vps.png web4all.png diff --git a/images/virtualbox_4.png b/images/virtualbox_4.png deleted file mode 100644 index aa28c8c186afa256990eafe527ccb636826af0ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3086 zcmV+p4Ds`cP)<h;3K|Lk000e1NJLTq00Phe00EH#0{{R3G1Y8a00009a7bBm000XU z000XU0RWnu7ytkO2XskIMF-vn1rISexqT{p0000CP)t-s00000r~nNO4XCK7lbzN6 z000Y>Nkl<Zc-rlq&2Hm55{1u2Z42OilmfC9z`npdz-;Cv=P3&CHh^D+fVTu{79=Ig zmJ+w)#ME>hWZ`!E=QC3xkB+Gd{(C^d<@%E7dtaU(cpFkA00E=`CIkRT?Z(Edk*(ef z00gUlkP%cx7(fIxCNi=V6`)L}Dlvx))2ILhhNv+^f8&D+F#u5(04In7#P!DZ!0Q4n zThI{F2CX0!hJc|0FcFYMz*O&nluwA?ffi=M1QlT<g0`1d6(F2p2zX0t=%^tv!w@AT zfD9^ci87`hngt+$KY`W;El+}GIY9{%uc1|hSqQ2s3_zeVmDj1zvOvoW4S+$w`wWc+ zjR&Anpm7VWP=fGPO^bjPE9m+<9W-hAC1^|#Fs1@+c$b($?x82d^h{{Gfd*m{1i(}^ z<{3KJ0?iG&elP)p6yQj}NdzoCH0e`E`h*Q=6#*+jV|k}K(pW>6@=!|^8m*>JB4F;J z@eMV-2`vPb1}#aLvD7pz(6~7eH8to*4@4GXOl8VTI6;(jp7K~uv<01nnTa&EnhsY7 zBI*3ATSJEi{iP}Ic5xw{7Z(=I8q-ZpOGr$}suIeRQKmcqh?$JgK9AMK1&pWwUFzb( z^p(ZsOVasQDqFwYU~7<QPg=&mq^R=^fy?#(<frxC8H=u-^&rx=pXTKtqpkNX?k6e` z(lvB27@|_M6Vy!;)t}HcH0kb*`~CEU-T5H2S1gZVz8SN!pfZr|hF)EDRrINq`6 zr||}W6{wG4g5j*BlqmvuOBGr`0w8KklqteAB)U{+$`o<dkSN271<3@BIzz8kwELi| zzuEB9I4$Kd8<iwbCQ=0^2KOFFg}_9r3}G%Oam55^5@DutDx}TuC_tunK;O8$<|McL z^i@qSZ&u!37z{(uYLOLG3WhOzZsz(dVa6@=eIvaE&DinNbTiVXDp0ZljW*H@0Wg6; zMgSw`89G>Ti%d$U05lj*u=F)(!HzX8@3ATmsMMjVF0X?orScetphA;ywYZF_9+V86 z`dR3qn${g?+>Z1Xv^HqS$Ix^O{b^0__~{v%HlPEbNDZ3XffzQSRjAnLdLT|{6^yF` zvCN_OOnEzg+SJmvp9UcyWTa|{LxSO~A=71sh9PQ5WW@<4x)4BR%A4j1uAlNkri=+u zL%w5i`KmcJ_c<=tpRHdG{UiDhejSebFZ}uk2Za9D5uyL>BkeW4ZB6kPejRJ}AT3kg z-@d@QT&~|!o^OTg^IshnS{G}o0HQ9*tj^P7$SB`bal5m{E<-@8^l@^zlcnUSV?kFx zU7+VUnUpi~0v!Ml5%jDfF_kYZ6Vhv-oA*$ZWVXi1&_G0}d0z)T$5|?b7efE5K~GDZ z4CMwLax0hjn$ra%sJ^f~nx9sbWVXi1Gjz;6*LVvTnFu<)7J44(E}4ZgA(!&lh9-R} z^gsRV(L?J39d4lU+M4cWk2y|;GQn=3X@RZ>;`FL1@9%kWS>oi}!hL4c#RXEgdDJNn z33vhY2g^9-t%C=XhvqJq%jI&pTrQW(<@%E7P^_|sE@$!~9T57Xy^N14oav%D#p#PT zP%fK$EAe*JkU~b=#rkZqoSyPip{KGpT1B|#Y#1B*4PDG9Egbxgi1LZh+(U-~E#DFc ze-|`Th2|qcbA^`Sq0>^+1v+4O=qSSV;*U_$_JEk(Be+~H*Po^*`stt36IVosc4&uo z=+U8FE|=?TX78cIO;(wgY266Ntxrg8#v^pqDCkLgERbD8bL$E+wLT%W?NNGmo>vX= zW6;dKpJtRkXiMvl0!{L4=(eOi2z{O9kz#3+0F)*lV?mRwq34>Op{dsNK+w>uk;XMN z*U{D^LCbeSzr8;P`nsm|JE5oPsnE4g$W-nT`X1;9zoJ}0n`&ES=DvHDNXfoycW`i5 z;Bp;DJP->lFs-{#>-yPEaFoHNqvvSQOgQyDgO|r>bDOUo?rMndf#$g{)!dC#Uz$(% zzw!3v_BC|5T5;~tTgLvCu~^^BYa(b&NH;E6F|DDyRPEK!N>;9byB%pA3c4!~0zpw4 z=v~hq)pqI_&|SCs(&A8L1DXNGS-PvU$ABi~+Bf=YAqfpSr2(OX5i}xZN^9tlgOxUU zuP%=VG{NO^xjvDoLqFM1_f4kLyq9Bvo-pt3IP2}xU*o6yCew-Lb<P&(`ODcP8w=`d zmhn~V<9TiGSY~K-=;uS9x^JZhhwf^caa+^lK=%itd<>n02JzGVl(z-lmB(3^=Fs|5 zKP{{C*AJ!lKlBHoaX0jluF`V34j|f2Zw;2p5hsU%Ce*J62ZO%Nrvae3=LQXJyQSmm zLyeP9ck5pVUGGs{K@Su4uAr;Wdt2_=^jl*=*J9=op?Aw;Wa#VD?us&f3_VKJyLQhf zEql}!XdM>1A*z+#fE{$i0Ohg$NtRQuo8@NQU}=BlbjRazxelz2e7b0rMpx6!dFSb` z&!_8L-KWtta|*P#puRpe?V+`YW`}m@!$4mjh+%agrkw+EpnSRp9W9MUmssCyFB~SH zURhA>|M#YbbSMYSD=giCc6aS^JyrD4?qa3`LWj|yck<~~_8e%(a}SnJua;;&(YEIv zET3MPp$ffqCEdW#Z(~AlT~IMR^zF8=zNW(t^iWanmF=w1)3Kn5wmkRi%42`I`P9B1 zLWhKQxsEPgoot6ALXWhSdN-d2i29~@((NI<dHN{%G(gmCg%p)7=)nR=0Pkz)kDfjb zbie6TEFBQ~kRv@{O>cSSn~~PR{Pb2l@HzBg`Sg7b`#AfjKmHglm+K4X-g{e->n(%w zQJ`s|9|?LlpRONe-bgJQv*K|1Gysq+TTHj1hl_dv(gm7zIG6W1G+{XC&&y*#=<RcD z;$<T>VYr&!gib`uM(X20L+6duBbCR!8v5^)xm>Ps<&8d`<)`1a=i%1YV;6e3d>Y;L zP<#Ew#|t2VcIBC#;Ltw;eW>zSI%JGE($hoG!{yWK^4J;a@$=~|=+~}z4?WBCX_xD% z+DT2n=kKt5FZ8SDv`_r>F7#Ggk8VXAFrNl(b`uz78Q+e27if&=@(u~TQyx4t^v;Rv zC(uJiy?tAca6IUEz<ipHXhUhNKYHPE{aG%1_S1*Tr^kf;IG=_dFrTI)29R{bsP~Z2 ze8lqLBj(c`^niYPXUglKH?8UD`817}<$Mm!_kIwU%k{8xW{3V6Km8c=nECXl&?82@ zcl#}e{@(H!GoK#2rvD)51O0tOm&@gH{k)&9O*|gI@sbtst3M9y&<^d;2Y`0DTrQXU zX<rc?+MylVp<OPQ%jI&pTrQXEPgAhFr4Ie4L&pu+^N7%h3tPE)F*6HxGP67=bUd#H zv_YTkQlM>2=oB(#m|2b&G8keCcD9RY)L_A25{H96UoN?pN6Oja#m*Ny+r{EJo1L@8 za2~Fv&zDQ9=}XRL7qbFw4LXhn9qoL{(awfo@scgr#S)eB2qQz=X&z}yc3U1}Lgxi~ ztEPv9zT~c^<HgRW0zGhfq>#yynI*bpgXNgsG7M4A7BUPr9JCuIm&@gHxm+%n%jI$% zP<r>h-39&h@w1<=n6B~YmaV`r03=KWvp|Q`{)6#w2mIgGRimqIXe`hI?#EX6HPBoF zn2;zVD-aW90A~$}G8q6;&M=sU1OX#zOh_=CRSK&Lg!7Lz5fu(ZP!(Y&A_WLc0FnqZ z)$#~LP=+uB3>5-|ph+-8YoH&4j){q&3SlO~0<9v<t)`huGu8r)2CV{_q50>a1q^~J zVh(l<O$vb}C=(JGA(!$<3$#{f!YiQbjTJPed883=TOMOV(*nI!)Ai4$3ncL?pg%qk zxgLm9fxapaMi4=J@DD++r#$pi9s+=nnP4Cd?_@BIf<y+x42=c)r8(+vy!E_3>Vcqv c_@kiz1A9>SA?Y@nssI2007*qoM6N<$f;qg`#Q*>R diff --git a/install_on_virtualbox.md b/install_on_virtualbox.md index 196ec176..98db3a96 100644 --- a/install_on_virtualbox.md +++ b/install_on_virtualbox.md @@ -6,10 +6,16 @@ <img src="/images/virtualbox.png" width=200> -* A x86 computer with VirtualBox installed and enough RAM capacity to be able to run a small virtual machine. +* An 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](/images). +<div class="alert alert-warning" markdown="1"> +N.B. : Installing YunoHost in a VirtualBox is usually intended for testing. To +run an actual server on the long-term, you usually need a dedicated physical +machine (old computer, ARM board, ...) or a VPS online. +</div> + --- ## <small>1.</small> Create a new virtual machine @@ -18,9 +24,8 @@ <br> -* 256MB RAM is the minimum required, 512MB may be better. - -* 4GB storage is the minimum required. +* 256MB RAM is the minimum required, but at least 512MB is recommended. +* 8GB storage is the minimum required. --- @@ -64,12 +69,10 @@ You will have to select your ISO image here, then you should see the YunoHost's ## <small>4.</small> Proceed to post-installation -After the reboot, you will see this screen: +After the reboot, the system should ask you to proceed with the +post-installation -<img src="/images/virtualbox_4.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> +<a class="btn btn-lg btn-default" href="/postinstall">Post-install documentation</a> -<br> -* The password for root user is "yunohost" -* You can get more information on the post-installation here: **[yunohost.org/postinstall](/postinstall)** diff --git a/install_on_virtualbox_fr.md b/install_on_virtualbox_fr.md index c93d9901..60463d2b 100644 --- a/install_on_virtualbox_fr.md +++ b/install_on_virtualbox_fr.md @@ -9,6 +9,13 @@ * 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](/images_fr). +<div class="alert alert-warning" markdown="1"> +N.B. : Installer YunoHost dans une VirtualBox est utile pour tester la +distribution. Pour réellement s'autohéberger sur le long terme, il vous faudra +probablement une machine physique (vieil ordinateur, carte ARM, ..) ou un VPS en +ligne. +</div> + --- ## <small>1.</small> Créer une nouvelle machine virtuelle @@ -17,9 +24,8 @@ <br> -* 256MB de RAM est le minimum requis, 512MB est recommandé. - -* 4GB de stockage minimum requis. +* 256Mo de RAM est le minimum requis, 512Mo est recommandé. +* 8Go de stockage minimum requis. --- @@ -63,12 +69,8 @@ Vous devez sélectionner ici l’image ISO, puis vous devriez voir cet écran d ## <small>4.</small> Effectuer la post-installation -Après le redémarrage, vous devriez voir cet écran : - -<img src="/images/virtualbox_4.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> - -<br> - -* Vous pouvez obtenir plus d’information sur la post-installation ici : **[yunohost.org/postinstall_fr](/postinstall_fr)** -* Le mot de passe root est "yunohost" +Après le redémarrage, la machine devrait vous proposer d'effectuer la +post-installation : +<a class="btn btn-lg btn-default" href="/postinstall">Post-install +documentation</a> From 1cbf645a4c2a0f99b46da61a927ccb90aebaac5b Mon Sep 17 00:00:00 2001 From: JOduMonT <jodumont@users.noreply.github.com> Date: Tue, 30 Jul 2019 12:08:15 +0700 Subject: [PATCH 065/360] few traduction FR/EN --- app_hextris.md | 4 ++ app_nextcloud.md | 143 +++++++++++++++++++++++++++++++++++++++++++++ app_noalyss.md | 13 +++++ app_noalyss_fr.md | 3 +- app_peertube.md | 5 +- app_peertube_fr.md | 3 + app_pihole_fr.md | 5 ++ app_spip.md | 33 +++++++++++ app_yunofav.md | 5 +- app_yunofav_fr.md | 5 ++ 10 files changed, 212 insertions(+), 7 deletions(-) create mode 100644 app_hextris.md create mode 100644 app_nextcloud.md create mode 100644 app_noalyss.md create mode 100644 app_peertube_fr.md create mode 100644 app_pihole_fr.md create mode 100644 app_spip.md create mode 100644 app_yunofav_fr.md diff --git a/app_hextris.md b/app_hextris.md new file mode 100644 index 00000000..b938caed --- /dev/null +++ b/app_hextris.md @@ -0,0 +1,4 @@ +#Hextris + +Because sometimes you have to know how to relax. Host your own fork of the famous Tetris and become the master of this infernal hexagon. +Who will tame this infernal hexagon? \ No newline at end of file diff --git a/app_nextcloud.md b/app_nextcloud.md new file mode 100644 index 00000000..b18aff78 --- /dev/null +++ b/app_nextcloud.md @@ -0,0 +1,143 @@ +# Add storage space + +Solution I) allows you to add a link to a local or remote folder. +Solution II) allows to move the main storage space of nextcloud. + +## I) Add an external storage space + +Parameter =>[Administration] External storage. + +At the bottom of the list you can add a folder (It is possible to define a subfolder using the `folder/subfolder` convention.) +Select a storage type and specify the requested connection information. +You can restrict this folder to one or more nextcloud users with the column `Available for`. +With the gear you can allow or prohibit previewing and file sharing. +Finally click on the check mark to validate the folder. + +## II) Migrate Nextcloud data to a larger partition + +**Note**: The following assumes that you have a hard disk mounted on `/media/storage`. Refer to[this article](/external_storage_en) to prepare your system. + +**Note**: Replace `nextcloud` with the name of its instance, if you have several Nextcloud apps installed. + +First turn off the web server with the command: +```bash +systemctl stop nginx +``` + +#### Choice of location + +#### Case A: Blank storage, exclusive to Nextcloud + +For the moment only root can write to it in `/media/storage`, which means that nginx and nextcloud will not be able to use it. + +```bash +chown -R nextcloud:nextcloud /media/storage +chmod 775 -R /media/storage +``` + +#### Case B: Shared storage, data already present, Nextcloud data in a subfolder + +If you want to use this disk for other applications, you can create a subfolder belonging to Nextcloud. + +```bash +mkdir -p /media/storage/nextcloud_data +chown -R nextcloud /media/storage/nextcloud_data +chmod 775 -R /media/storage/nextcloud_data +``` + +#### Migrate data + +Migrate your data to the new disk. To do this *(be patient, it can take a long time)*: + +```bash +Case A: cp -ir /home/yunohost.app/nextcloud /media/storage +Case B: cp -ir /home/yunohost.app/nextcloud /media/storage/nextcloud_data +``` + +The `i` option allows you to ask yourself what to do if there is a file conflict, especially if you overwrite an old Owncloud or Nextcloud data folder. + +To check that everything went well, compare what these two commands display (the content must be identical): + +```bash +ls -la /home/yunohost.app/nextcloud + +Case A: ls -al /media/storage +Case B: ls -al /media/storage/nextcloud_data/nextcloud +``` + +#### Configure Nextcloud + +To inform Nextcloud of its new directory, modify the `/var/www/nextcloud/config/config.php` file with the command: + +```bash +nano /var/www/nextcloud/config/config/config.php +``` + +Look for the line: + +```bash +'datadirectory' => '/home/yunohost.app/nextcloud/data', +``` + +That you modify: + +```bash +CASE A:'datadirectory' =>'/media/storage', +CASE B:'datadirectory' =>'/media/storage/nextcloud_data/nextcloud/data', +``` + +Back up with `ctrl+x` then `y` or `o` (depending on your server locale). + +Restart the web server: + +```bash +systemctl start nginx +``` + +Add the.ocdata file +```bash +CASE A: nano /media/storage/.ocdata +CASE B: nano /media/storage/nextcloud_data/nextcloud/data/.ocdata +``` +Add a space to the file to be able to save it + +Back up with `ctrl+x` then `y` or `o` (depending on your server locale). + +Run a scan of the new directory by Nextcloud: + +```bash +cd /var/www/nextcloud +sudo -u nextcloud php occ files:scan --all +``` + +It's over now. Now test if everything is fine, try connecting to your Nextcloud instance, upload a file, check its proper synchronization. + +# The KeeWeb application + +The KeeWeb application is a password manager integrated into Nextcloud. For example, it allows you to read a KeePass file (*.kdbx*) stored on your Nextcloud instance. +But sometimes Nextcloud does not let the application support these files, which makes it impossible to read them from KeeWeb. To remedy this, +[a solution](https://github.com/jhass/nextcloud-keeweb/issues/34) exists. + +Go to the Nextcloud configuration directory: + +```bash +cd /var/www/nextcloud/config/ +``` + +If it does not exist, create the *mimetypemapping.json* file whose owner is the user *nextcloud* : + +```bash +sudo su nextcloud -c "nano mimetypemapping.json" +``` + +Then add in this file the following text: + +```bash +{ + "kdbx": ["x-application/kdbx"] +} +``` + +Save the file (**CTRL** + **o**) and exit nano (**CTRL** + **c**). + +Now the problem is fixed. \ No newline at end of file diff --git a/app_noalyss.md b/app_noalyss.md new file mode 100644 index 00000000..8762bf51 --- /dev/null +++ b/app_noalyss.md @@ -0,0 +1,13 @@ +# Noalyss + +Open source accounting software developed in PHP. + +All the information on this software is available on the [project website](http://www.noalyss.eu) + +To learn how to use it I invite you to read the [project wiki](http://www.noalyss.eu/?page_id=46&lang=fr_FR_id=46&lang=en_EN) + +The github of the Yunohost module is [here](https://github.com/YunoHost-Apps/noalyss_ynh_ynh) + +You can try the project [here](http://demo.noalyss.eu/index.php) with the identifiers: demo /demo + +I mean, not to have to struggle like me. The administrator IDs and passwords for the first login are: phpcompta / phpcompta \ No newline at end of file diff --git a/app_noalyss_fr.md b/app_noalyss_fr.md index 77bbbf9f..eac70633 100644 --- a/app_noalyss_fr.md +++ b/app_noalyss_fr.md @@ -10,5 +10,4 @@ Le github du module Yunohost est [ici](https://github.com/YunoHost-Apps/noalyss_ Vous pouvez essayer le projet [ici](http://demo.noalyss.eu/index.php) avec les identifiants : demo /demo -Enfin pour ne pas galérer comme moi. Les identifiants et mot de passe administrateur lors de la première connexion sont : phpcompta / phpcompta - +Enfin pour ne pas galérer comme moi. Les identifiants et mot de passe administrateur lors de la première connexion sont : phpcompta / phpcompta \ No newline at end of file diff --git a/app_peertube.md b/app_peertube.md index fb15d3e8..77984f62 100644 --- a/app_peertube.md +++ b/app_peertube.md @@ -1,2 +1,3 @@ -===== Peertube ===== -PeerTube is a federated (ActivityPub) video streaming platform using P2P (BitTorrent) directly in the web browser, using WebTorrent. +# Peertube + +PeerTube is a federated (ActivityPub) video streaming platform using P2P (BitTorrent) directly in the web browser, using WebTorrent. \ No newline at end of file diff --git a/app_peertube_fr.md b/app_peertube_fr.md new file mode 100644 index 00000000..1ae2ed47 --- /dev/null +++ b/app_peertube_fr.md @@ -0,0 +1,3 @@ +# PeerTube + +PeerTube est une plateforme de streaming vidéo fédérée (ActivityPub) utilisant P2P (BitTorrent) directement dans le navigateur web, en utilisant WebTorrent. \ No newline at end of file diff --git a/app_pihole_fr.md b/app_pihole_fr.md new file mode 100644 index 00000000..4d2dbc39 --- /dev/null +++ b/app_pihole_fr.md @@ -0,0 +1,5 @@ +# Pihole + +Page d'accueil : https://pi-hole.net + +**Pi-hole®** Blocage des publicités à l'échelle du réseau via votre propre serveur DNS, avec une belle page web Performance And Statistics. \ No newline at end of file diff --git a/app_spip.md b/app_spip.md new file mode 100644 index 00000000..fb51d7ab --- /dev/null +++ b/app_spip.md @@ -0,0 +1,33 @@ +# SPIP for YunoHost + +#### SPIP is what? + +SPIP is an Internet publishing system that focuses on collective functioning, multilingualism and ease of use. It is free software, distributed under the GNU/GPL license. It can therefore be used for any website, whether associative or institutional, personal or commercial. + +Source:[spip.net](https://www.spip.net/fr_rubrique91.html_rubrique91.html) + +#### Application functionality for Yunohost + +* Installation of the base without going through the installation system +* Multilingual support +* LDAP support + +##### Installation + +```bash +$ sudo yunohost app install https://github.com/YunoHost-Apps/spip_ynh.git_ynh.git +``` + +##### Update + +``` +sudo yunohost app upgrade --verbose spip -u https://github.com/YunoHost-Apps/spip_ynh.git_ynh.git +``` + +##### Use + +Access the administration of the site by entering the following address in your browser. + +https://www.domain.tld/spip/ecrire + +Make a "forgotten password" request to change your password, you will receive an email telling you how to change your password. \ No newline at end of file diff --git a/app_yunofav.md b/app_yunofav.md index e99f88b6..181abe8d 100644 --- a/app_yunofav.md +++ b/app_yunofav.md @@ -1,6 +1,5 @@ -Yunofav : (unofficial) Page of favorite links for Yunohost -======= +#Yunofav : (unofficial) Page of favorite links for Yunohost homepage: https://github.com/YunoHost-Apps/yunofav_ynh -Functionality: Creates a page for your favorite links, using the Yunohost tiles look and feel. +Functionality: Creates a page for your favorite links, using the Yunohost tiles look and feel. \ No newline at end of file diff --git a/app_yunofav_fr.md b/app_yunofav_fr.md new file mode 100644 index 00000000..087b1b50 --- /dev/null +++ b/app_yunofav_fr.md @@ -0,0 +1,5 @@ +# Yunofav : (non officiel) Page de liens favoris pour Yunohost + +page d'accueil : https://github.com/YunoHost-Apps/yunofav_ynh_ynh + +Fonctionnalité : Crée une page pour vos liens préférés, en utilisant les tuiles Yunohost look and feel. \ No newline at end of file From b670e98bba71d3ee25228890dee6d4c065d9b90b Mon Sep 17 00:00:00 2001 From: JOduMonT <jodumont@users.noreply.github.com> Date: Tue, 30 Jul 2019 12:30:08 +0700 Subject: [PATCH 066/360] add instruction for cloudflare --- app_nextcloud.md | 25 ++++++++++++++++++++++++- app_nextcloud_fr.md | 23 +++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/app_nextcloud.md b/app_nextcloud.md index b18aff78..92cb29f4 100644 --- a/app_nextcloud.md +++ b/app_nextcloud.md @@ -140,4 +140,27 @@ Then add in this file the following text: Save the file (**CTRL** + **o**) and exit nano (**CTRL** + **c**). -Now the problem is fixed. \ No newline at end of file +Now the problem is fixed. + +# Nextcloud and Cloudflare + +If you use Cloudflare for your DNS, *which may be useful if you have a dynamic IP*, you will most likely have authentication problems with the Nextcloud application. On the Internet many people propose to create a rule that disables all options related to security and Cloudflare speed for the url pointing to your Nextcloud instance. Although it works, it is not the optimal solution. I propose, certainly to create a rule for the url pointing to your Nextcloud instance but to disable only 2 options. So here's how: + +## Cloudflare Page Rules + +In the Cloudflare control panel select your domain and find Page Rules +the url in your address bar will look like this: https://dash.cloudflare.com/*/domain.tld/page-rules + +#### Add a rule + +The rule to be added must apply to the url of your Nextcloud instance either: + +- `https://nextcloud.domain.tld/**` if you use a subdomain +- `https://domain.tld/nextcloud/*`` if you have deployed Nextcloud in a directory + +The options to disable (Off) are: + +- Rocket Loader +- Email Obfuscation + +Save and clean your caches (Cloudflare, browser,...) and that's it. \ No newline at end of file diff --git a/app_nextcloud_fr.md b/app_nextcloud_fr.md index 152252ea..31aaf3a5 100644 --- a/app_nextcloud_fr.md +++ b/app_nextcloud_fr.md @@ -141,3 +141,26 @@ Puis ajouter dans ce fichier le texte suivent : Enregistrer le fichier (**CTRL** + **o**) et quitter nano (**CTRL** + **c**). A présent, le problème est corrigé. + +# Nextcloud et Cloudflare + +Si vous utilisez Cloudflare pour vos DNS, *ce qui peut-être pratique si vous avez une IP dynamique*, vous aurez très probablement des problèmes d'authentification avec l'application Nextcloud. Sur Internet beaucoup de gens propose de créer une règle ayant pour effet de désactivé tous les options relié à la sécurité et à la vitesse de Cloudflare pour l'url pointant sur votre instance Nextcloud. Malgré que cela fonctionne, ce n'est pas la solution optimial. Je vous propose, certes de créé une règle pour l'url pointant sur votre instance Nextcloud mais de désactivé seulement 2 options. Voici donc comment: + +## Cloudflare Page Rules + +Dans le panneau de controle de Cloudflare choisissez votre domaine et trouver Page Rules +l'url dans votre barre d'addresse ressemblera à : https://dash.cloudflare.com/*/domain.tld/page-rules + +### Ajouter une règle + +La règle à ajouter doit s'appliquer pour l'url de votre instance Nextcloud soit: + +- `https://nextcloud.domain.tld/*` si vous utilisez un sous domain +- `https://domain.tld/nextcloud/*` si vous avez déployé Nextcloud dans un répertoire + +Les options à désactiver (Off) sont : + +- Rocket Loader +- Email Obfuscation + +Sauvegarder et nettoyer vos caches (Cloudflare, navigateur, ...) et le tour est joué. \ No newline at end of file From 7d1c5eb6fe3e48448c5e4c1fced160ce2265c239 Mon Sep 17 00:00:00 2001 From: Marco Bakera <pintman@users.noreply.github.com> Date: Fri, 2 Aug 2019 09:46:25 +0200 Subject: [PATCH 067/360] Improved translation. --- index_de.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index_de.md b/index_de.md index 9da2cd14..5f679c8a 100644 --- a/index_de.md +++ b/index_de.md @@ -31,7 +31,7 @@ <div class="boring-part" markdown="1"> <h1>YunoHost <small>ist ein Serverbetriebssystem, das<br> -Self-Hosting für alle möglich macht.</small></h1> +Self-Hosting für alle ermöglicht.</small></h1> <div class="home-panel"> <img src="/images/home_panel.jpg" /> From af454dab62f32f80b4af6e23eae76f86b964310c Mon Sep 17 00:00:00 2001 From: Thatoo <Thatoo@users.noreply.github.com> Date: Fri, 2 Aug 2019 10:40:33 +0200 Subject: [PATCH 068/360] Add Gateway https://iot.mozilla.org/gateway/ App de domotique. --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index 9e92b73a..4328b3bc 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -55,6 +55,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [FoOlSlide](http://foolcode.github.io/FoOlSlide/) Open source comicbook/manga management software - [Fossil](http://www.fossil-scm.org) - [Framaslides](https://framagit.org/framasoft/framaslides/) +- [Gateway](https://iot.mozilla.org/gateway/) - [Geneweb](https://geneweb.tuxfamily.org) - [GetSimple CMS](http://get-simple.info) - [Git-annex](http://git-annex.branchable.com) From 44c0c58f7074142bfb7d39f84edde9fc8c5b46d1 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Fri, 2 Aug 2019 11:58:19 +0000 Subject: [PATCH 069/360] Fixed a few markdown errors --- packaging_apps_start.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packaging_apps_start.md b/packaging_apps_start.md index 2b1257f0..5e69e811 100644 --- a/packaging_apps_start.md +++ b/packaging_apps_start.md @@ -17,6 +17,7 @@ This is what application packaging is, a serie of scripts that automate the inst ### 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 @@ -40,7 +41,7 @@ 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. +A [bash](https://en.wikipedia.org/wiki/Bash_%28Unix_shell%29) 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). From 2a7c28b7feb6cb5eb8d12e2f6f87fc0c1d13a9cf Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Fri, 2 Aug 2019 14:01:27 +0000 Subject: [PATCH 070/360] Just corrected work and visioconferences in ###Chatrooms and ###VoIP and visioconferences --- XMPP.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/XMPP.md b/XMPP.md index a3d818a6..85a30665 100644 --- a/XMPP.md +++ b/XMPP.md @@ -46,8 +46,8 @@ XMPP chats can be encrypted with the help of [OMEMO](https://xmpp.org/extensions To create a chatroom (multi-user chat) on your YunoHost server, use the identifier `chatroomname@muc.yourdomain.tld`. -For this to workm you need to [add the corresponding `muc.` DNS record](dns_config_fr) in the DNS configuration. +For this to work you need to [add the corresponding `muc.` DNS record](dns_config_fr) in the DNS configuration. -### VoIP and visioconferences +### VoIP and videoconferences A practical tool to call an XMPP client, either with voice or voice+video, is to use the client [Jitsi](http://jitsi.org/). From c051de5ba252c76294c45481cb7570b06f4c9ffe Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Fri, 2 Aug 2019 16:03:40 +0200 Subject: [PATCH 071/360] Propagate to english page --- backup.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/backup.md b/backup.md index 819bd80f..0d068886 100644 --- a/backup.md +++ b/backup.md @@ -156,3 +156,8 @@ dd if=/dev/mmcblk0 of=./backup.img status=progress ``` (replace `/dev/mmcblk0` with the actual device of your sd card) + +You can also create a compressed image using gzip this way: +```bash +dd if=/dev/mmcblk0 | gzip > ./image.gz +``` From 8ee37ab125c963d2a96ef0bf13b0c67239e33dc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Quent=C3=AD?= <33203663+Quenty31@users.noreply.github.com> Date: Thu, 8 Aug 2019 18:26:37 +0200 Subject: [PATCH 072/360] Creation of the Occitan version of the page First release --- use_case_non-profit_organisations_oc.md | 203 ++++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 use_case_non-profit_organisations_oc.md diff --git a/use_case_non-profit_organisations_oc.md b/use_case_non-profit_organisations_oc.md new file mode 100644 index 00000000..3dc63891 --- /dev/null +++ b/use_case_non-profit_organisations_oc.md @@ -0,0 +1,203 @@ +# YunoHost per organizacion sens tòca lucrativa + +## Ensenhador +* [Introduccion](#introduccion) +* [Qual ](#qual) +* [Qué](#qué) +* [Quand](#quand) +* [Ont](#ont) +* [Perque](#perque) +* [Cossí](#cossí) +* [Conclusion](#conclusion) + +## Introduccion + +L'objectiu d’aqueste document es de presentar una utilizacion especifica de [YunoHost](https://yunohost.org/) per d’organizacions sens tòca lucrativa. + +## Qual + +Organizacions sens tòca lucrativa, ONG o qualque siá associacion. + +## Qué + +Las organizacions sens tòca lucrativa devon generalament fornir diferents servicis a diferents publics : + +* Conselh d'administracion / Comitat director / Benevòls amb : + * [Mails](#mails) + * [Calendièr](#calendièr) + * [Contacte](#contacte) + * [Fichièrs partejats / Drive](#fichièrs-partejats) + * [Comunicacion instantanèa](#comunicacion-instantan-a) + * [Intranet / Basa de coneissenças](#intranet) + * [ERP / Comptabilitat](#erp-comptabilitat) +* Membres amb : + * [Site Web public amb accès privat e individual](#site-web-public) + * [Adhesion](#adhesion) + * [Inscripcions als eveniments](#inscriptions-als-eveniments) + * [Infoletras](#infoletras) + * [Forum](#forum) +* Public amb : + * [Site Web public](#site-web-public) + * [Infoletras](#newsletter-mailing) + +## Quand + +Quand l'organizacion sens tòca lucrativa es prèsta a passar lo pas. + +## Ont + +Lo servidor YunoHost pòt èsser albergat a diferents endreches : +* Albergament en pròpri sus un servidor, un ordenador o Raspberry darrièr una connexion ADSL, SDSL o Fibra +* [Chatons](https://chatons.org), [librehosters](https://framagit.org/librehosters/awesome-librehosters) +* Servicis d'albergament comercial que fornís una maquina virtuala Debian + +## Perque + +YunoHost pòt correspondre als besonhs d'una organizacion sens tòca lucrativa e li permetre de servar lo mestritge de sas donadas. + +## Cossí + +### YunoHost + +YunoHost es una distribucion basada sus Debian GNU/Linux qu’automatiza l’installacion d’un servidor Web personal. La tòca de YunoHost es de permetre als utilizaires d’albergar facilament lors pròpris servicis Web en prepausant una interfàcia Web simpla, als clics, per installar divèrsas aplicacions Web. + + + +YunoHost provesís sul pic: +* Un sistèma d'aplicacion +* Una interfàcia web +* Una interfàcia en linha de comanda (CLI) : Moulinette +* Un servidor Web : Nginx +* Un servidor DNS : Dnsmasq +* Una basa de donadas : MariaDB +* Un sistèma de salvagarda +* Un SSO: SSOwat +* OpenLDAP +* Corrièls : + * SMTP: Postfix + * IMAP & POP3 : Dovecot + * Un antispam : rspamd, rmilter +* Servidor XMPP de messatjariá instantanèa : Metronome IM + +### Nom de domeni + +La primièra causa que vos fa mestièr per installar un servidor YunoHost es un nom de domeni. Lo nom de domeni pòt èsser generalament fornit amb lo servici d’albergament. + +### Corrièls + +A la prima installacion YunoHost fornís un sistèma de messatjariá disponible en utilizant POP / IMAP / SMTP. +Los comptes de messatjariá seràn gerits amb l'interfàcia Web o en linha de comanda. Los comptes creats seràn gardats dins l’OpenLDAP. + +De paquets suplementaris pòdon èsser installats per provesir mai de foncionalitats al sistèma de messatjariá YunoHost : +* un webmail en utilizant [Roundcube](https://github.com/YunoHost-Apps/roundcube_ynh), [Rainloop](https://github.com/YunoHost-Apps/rainloop_ynh) +* ActiveSync utilizant [Z-Push](https://github.com/YunoHost-Apps/z-push_ynh) +* Grop de distribucion intèrne en utilizant [Mailman](https://github.com/YunoHost-Apps/mailman_ynh) + +### Calendièr + +Per fornir de calendièrs personals o partejats, vos calrà installar : +* [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) +* [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) + +### Contacte + +Per fornir un sistèma de contacte personal, vos caldrà installar : +* [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh) +* [Baikal](https://github.com/YunoHost-Apps/baikal_ynh) + +### Fichièrs partejats + +Per fornir un sistèma de fichièrs partejats : dorsièrs personals e dorsièrs partejats, podètz installar [Nextcloud](https://github.com/YunoHost-Apps/nextcloud_ynh). +Las fichièrs seràn disponibles d’una interfàcia web estant o amb un client de sincronizacion. + +### Comunicacion instantanèa + +Tras l’installacion YunoHost fornís sul pic un servidor XMPP per lo qual podètz installar un client Web : [Jappix](https://github.com/YunoHost-Apps/jappix_ynh) + +Podètz tanben installar un servidor Matrix : +* Lo servidor: [Synapse](https://github.com/YunoHost-Apps/synapse_ynh) +* Un client web: [Riot](https://github.com/YunoHost-Apps/_ynh) + +### Intranet + +Per una organizacion sens tòca lucrativa, un bon biais de metre en plaça un intranet es de fornir un wiki que permet als utilizaires intèrne de legir, modificar e ajustar de contengut. Vaquí unes paquets per installar un wiki : +* [DokuWiki](https://github.com/YunoHost-Apps/docuwiki_ynh) utiliza la sintaxi wiki +* [Wiki.js](https://github.com/YunoHost-Apps/wikijs_ynh) utiliza la sintaxi markdown + +### ERP / Comptabilitat + +Arriba un moment ont a l’organizacion sens tòca lucrativa li pòsca far besonh un sistèma de comptabilitat / ERP, vaquí doas proposicions : +* [OpenERP/Odoo](https://github.com/YunoHost-Apps/libreerp_ynh) +* [Dolibarr](https://github.com/YunoHost-Apps/dolibarr_ynh) + +### Site Web Public + +Existís mantuns biaisses de construire un site Web public : +* Un simple site HTML, CSS, etc... en utilizant : [Custom Webapp](https://github.com/YunoHost-Apps/my_webapp_ynh) +* Utilizar un CMS (sistèma de gestion de contengut) coma [Wordpress](https://github.com/YunoHost-Apps/_ynh), [Drupal](https://github.com/YunoHost-Apps/drupal_ynh) , [Grav](https://github.com/YunoHost-Apps/grav_ynh), [PluXml](https://github.com/YunoHost-Apps/pluxml_ynh) + +Mas prepausam quicòm de mai potent : [CiviCRM on Drupal 7](https://github.com/YunoHost-Apps/civicrm_drupal7_ynh): +* Drupal qu’es un framework potent de gestion de contengut +* amb CiviCRM qu’es un CRM OpenSource a destinacion de las organizacions sens tòca lucrativa + +#### Adhesion + +Amb CiviCRM, poiretz metre en plaça d’adhesions en linha amb pagament. + +#### Inscripcions als eveniments + +Amb CiviCRM, poiretz metre a disposicion un agenda en linha amb la possibilitat pels membres o lo public de s’inscriure gratuitament o en pagant. + +#### Infoletra/Lista de difusion + +Çò melhor per gerir aquò es d’utilizar CiviCRM e son modul de lista de difusion. + +### Forum + +Avètz mantun possibilitats, aver un forum integrat a Drupal o utilizar un sistèma dedicat coma [Flarum](https://github.com/YunoHost-Apps/flarum_ynh). + +### Salvagarda + +YunoHost fornís son pròpri sistèma de salvagarda. Abans tota mesa a nivèl de paquet, YunoHost salvagarda la version actuala del paquet e la restaura automaticament se la mesa a nivèl se debana pas corrèctament. +Las salvagardas Yunohost son gardadas localament dins `/home/yunohost.backup/archives`. + +Mas per la produccion, la salvagarda gardada localament basta pas, vos cal emplegar d’estrategias de salvagarda suplementàrias : +* Salvagarda de la maquina virtuala se fornida pel sistèma d’albergament. +* [Archivist](https://github.com/YunoHost-Apps/archivist_ynh) es un sistèma de salvagarda automatic de vòstre servidor. Vòstras salvagardas pòdon èsser enviadas a mantun endreches, locals o alonhats. +* [Borg](https://github.com/YunoHost-Apps/borg_ynh) e [Borg Server](https://github.com/YunoHost-Apps/borgserver_ynh) permeton d’externalizar las salvagardas. +* [Fallback](https://github.com/YunoHost-Apps/fallback_ynh), se avètz dos servidors YunoHost, ajatz los mejans d’aver un servidor segondari que poiretz utilizar se lo primièr ven a foncionar pas mai. Aqueste servidor segondari vos permetrà de restablir una còpia de vòstre servidor per dire de corregir los problèmas de l’autre servidor YunoHost. + +### Anar mai luènh + +#### Galariá de fotografias federada + +* [Pixelfed](https://github.com/YunoHost-Apps/pixelfed_ynh) + +#### Galariá àudio federada + +* [Reel2Bits](https://github.com/YunoHost-Apps/reel2bits_ynh) +* [Funkwhale](https://github.com/YunoHost-Apps/funkwhale_ynh) + +#### Galariá vidèo federada + +* [PeerTube](https://github.com/YunoHost-Apps/peertube_ynh) + +#### Malhums socials federats + +* [Mastodon](https://github.com/YunoHost-Apps/mastodon_ynh) +* [Pleroma](https://github.com/YunoHost-Apps/pleroma_ynh) +* [Mobilizon](https://github.com/YunoHost-Apps/mobilizon_ynh) + +#### Blog federats + +* [Plume](https://github.com/YunoHost-Apps/plume_ynh) +* [Writefreely](https://github.com/YunoHost-Apps/writefreely_ynh) + +#### Chat + +* [Mattermost](https://github.com/YunoHost-Apps/mattermost_ynh) + +## Conclusion + +YunoHost pòt cumplir 99% dels besonhs de las organizacions sens tòca lucrativa, en lor permetent de téner e protegir lors donadas, de causir las aplicacions que vòlon utilizar. +E se son pas disponiblas, pòdon [crear un paquet per YunoHost](https://yunohost.org/#/contributordoc), es fòrça simple. From 23c61365a831254072e31704d34bb49da1908b2d Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Fri, 9 Aug 2019 10:28:56 +0000 Subject: [PATCH 073/360] =?UTF-8?q?Cr=C3=A9ation=20de=20la=20page=20et=20a?= =?UTF-8?q?jout=20de=20doc=20utilisateur.Liens=20images=20:=20https://fram?= =?UTF-8?q?adrop.org/r/xiu0o4Wh2O#K1oQgudcEPT4wo6c++fC2I13TOSzJbh9dcCz2Y6L?= =?UTF-8?q?Ais=3D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app_pleroma_fr.md | 51 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 app_pleroma_fr.md diff --git a/app_pleroma_fr.md b/app_pleroma_fr.md new file mode 100644 index 00000000..831ba17a --- /dev/null +++ b/app_pleroma_fr.md @@ -0,0 +1,51 @@ +# <img src="/images/pleroma_logo.png" alt="logo de Pleroma"> Pleroma + +| Index | +|-------| +| [Découverte de l'interface de Pleroma](#decouvertegeneralepleroma) | +| [Logiciels Clients pour mobile et ordinateur](#LogicielsClients) | +| [Liens utiles](#liensutiles) | + +Pleroma est un réseau social décentralisé de micro-blogging qui propose une alternative à Twitter, le protocole Activy Pub qu'il utilise permet d'interagir avec le fediverse composé notamment de Mastodon, GNU Social, et d'autres. Il a l'avantage d'être plus léger que mastodon et se prête donc plus facilement à l'auto-hébergement. + +## <a name="#decouvertegeneralepleroma">Découverte de l'interface de Pleroma +Pour ceux et celles qui n'ont pas ou peu l'habitude des réseaux sociaux, voici en détail l'utilisation de chacune des fenêtres proposées. + +### Accueil de l'interface +<img src="/images/capture_globale.png" alt="Capture écran accueil de Pleroma"> + +1. Barre de menu + + <img src="/images/capture_menu_gauche.png" alt="Capture du bouton à gauche de la barre de menu"> Le bouton à gauche portant le nom de l'instance dans la capture ci-dessus *Meta - Pleroma* renvoie vers la page d'accueil de l'instance. Dans le cas où vous êtes connecté cela vous renverra vers la visualisation de votre *journal*, si ce n'est pas le cas vers *Le réseau connu*. + + <img src="/images/capture_menu_droite.png" alt="Capture des boutons à droite de la barre de menu"> Si vous êtes connecté vous aurez trois boutons, si vous ne l'êtes pas il n'y en aura que deux. Dans l'ordre de gauche à droite : + + <img src="/images/capture_menu_droite_chercher_utilisateur.png" alt="Capture bouton chercher un/e utilisateur.trice"> Permet d'ajouter de nouveaux utilisateurs et nouvelles utilisatrices afin de les suivre et ainsi vous abonner à leurs publications. Il est possible de rechercher un·e utilisateur·trice avec seulement son pseudonyme (par exemple : *yunohost*) ou alors sous la forme @pseudonyme@instance.domaine (par exemple : *@yunohost@mastodon.social*) + + <img src="/images/capture_menu_droite_preferences.png" alt="Capture bouton préférences"> Permet d'accéder aux paramétres d'affichages de votre session. /!\ Si vous n'êtes pas connecté·e les modifications effectuées ne seront valables qu'un temps (jusqu'à ce que les cookies de fonctionnement soient effacés). + + <img src="/images/capture_menu_droite_deconnexion.png" alt="Capture Déconnexion"> Permet de se déconnecter de l'instance. Si vous n'êtes pas sur votre ordinateur personnel pensez-y ! + +2. Espace de Publications / Fenêtre de connexion +<img src="/images/capture_espace_connexion.png" alt="Fenêtre de connexion à la place de la zone de publications"> Si vous êtes connecté·e cet espace vous permet de publier vos messages et d'y joindre un média (images, GIF, vidéos, etc). Vous êtes limité dans le nombre de caractères, avec Pleroma la limitation est définie par l'administrateur·trice de l'instance. Si vous avez des questions envoyez lui un message. + +3. Fenêtre de visualisations +C'est ici le centre ~~du monde~~ de Pleroma, vous pourrez y voir les différentes publications de vos contacts ou qui circulent sur l'instance ainsi que les re-toots et qui a publié. + +4. Le journal +Cette zone permet de voir les différentes publications des comptes que vous suivez mais aussi l'ensemble des publications visibles sur votre instance. Vous trouverez aussi les messages privés et les notifications où vous trouverez tous vos toots et les publications où vous avez été cité. + +5. Interface utilisateur·trice +Cet espace permet de choisir l'agencement de Pleroma, il est proposé deux agencements : un spécifique à Pleroma et un fork (une copie) de l'agencement de Mastodon, selon vos préférences d'usages et de visualisations ; à vous de faire votre choix. + +6. Notifications +On retrouve dans cette zone les messages où vous avez été cité, mais aussi les abonnements à votre compte. + +## <a name="LogicielsClients"> Applications clients + +| Nom de l'applications | Plateforme | Multi-comptes | Autre réseaux supportés | Play Store | F-Droid | Apple Store | +|---|---|---|---|---|---|---| +| Tusky | Android | Oui | Mastodon | [https://play.google.com/id=com.keylesspalace.tusky](https://play.google.com/store/apps/details?id=com.keylesspalace.tusky) | [f-droid.org/com.keylesspalace.tusky](https://f-droid.org/fr/packages/com.keylesspalace.tusky/) | +| Fedilab | Android | Oui | Mastodon, Pleroma, Peertube, GNU Social, Friendica, Pixelfed | [play.google.com/app.fedilab.android](https://play.google.com/store/apps/details?id=app.fedilab.android&hl=fr) | [f-droid.org//fr.gouv.etalab.mastodon](https:/f-droid.org/fr/packages/fr.gouv.etalab.mastodon/) +| Twidere | Android | Oui | Twitter, Mastodon | [play.google.com/org.mariotaku.twidere](https://play.google.com/store/apps/details?id=org.mariotaku.twidere) | [https://f-droid.org/org.mariotaku.twidere](https://f-droid.org/fr/packages/org.mariotaku.twidere/) | +| Librem Social | Android | Non | ? | [play.google.com/one.librem.social](https://play.google.com/store/apps/details?id=one.librem.social&hl=fr) | [https://f-droid.org/one.librem.social](https://f-droid.org/fr/packages/one.librem.social) | | + +## <a name="liensutiles">Quelques liens utiles</a> ++ Site officiel : [pleroma.social (En anglais)](https://pleroma.social) ++ Trouver d'autres instances de Pleroma : [fediverse.network/pleroma](https://fediverse.network/pleroma) ++ Trouver de l'aide et poser toutes vos questions : [forum.yunohost.org](https://forum.yunohost.org/c/support) \ No newline at end of file From d4da5f674a9504831fc21ebacadd2847e671a23e Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Sat, 10 Aug 2019 23:54:10 +0200 Subject: [PATCH 074/360] Add some info about virtualbox install --- install_on_virtualbox.md | 3 ++- install_on_virtualbox_fr.md | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/install_on_virtualbox.md b/install_on_virtualbox.md index 98db3a96..fa8c0e3b 100644 --- a/install_on_virtualbox.md +++ b/install_on_virtualbox.md @@ -24,7 +24,8 @@ machine (old computer, ARM board, ...) or a VPS online. <br> -* 256MB RAM is the minimum required, but at least 512MB is recommended. +* It's okay if you can only have 32-bit versions, just be sure that you downloaded the 32-bit image previously. +* 256MB RAM is the minimum required, but at least 512MB is recommended (1Go or more if you can). * 8GB storage is the minimum required. --- diff --git a/install_on_virtualbox_fr.md b/install_on_virtualbox_fr.md index 60463d2b..4e454f85 100644 --- a/install_on_virtualbox_fr.md +++ b/install_on_virtualbox_fr.md @@ -24,7 +24,8 @@ ligne. <br> -* 256Mo de RAM est le minimum requis, 512Mo est recommandé. +* Ce n'est pas grave si seulement la version 32-bit est dispo, mais dans ce cas soyez sur d'avoir téléchargé l'image 32 bit précédemment. +* 256Mo de RAM est le minimum requis, 512Mo est recommandé (1Go ou plus si vous pouvez). * 8Go de stockage minimum requis. --- From b06b2e9983ea2c5b30c77179112883b7f879a549 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Sat, 10 Aug 2019 23:57:45 +0200 Subject: [PATCH 075/360] Add a note about some virtualbox error --- install_on_virtualbox.md | 4 ++++ install_on_virtualbox_fr.md | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/install_on_virtualbox.md b/install_on_virtualbox.md index fa8c0e3b..238100f2 100644 --- a/install_on_virtualbox.md +++ b/install_on_virtualbox.md @@ -58,6 +58,10 @@ You will have to select your ISO image here, then you should see the YunoHost's <br> +If you encounter the error "VT-x is not available", you need probably need to enable Virtualization in the BIOS of your computer. + +<br> + <img src="/images/virtualbox_3.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> <br> diff --git a/install_on_virtualbox_fr.md b/install_on_virtualbox_fr.md index 4e454f85..f83a3151 100644 --- a/install_on_virtualbox_fr.md +++ b/install_on_virtualbox_fr.md @@ -56,6 +56,10 @@ Démarrez votre machine virtuelle Vous devez sélectionner ici l’image ISO, puis vous devriez voir cet écran d’accueil YunoHost. +<br> + +Si vous rencontrez l'erreur "VT-x is not available", il vous faut probablement activer (enable) la virtualisation dans les options du BIOS de votre ordinateur. + <br> <img src="/images/virtualbox_3.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> From 235f8b0af1b2fbaf1800802fff1b5318e2aa8c87 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Sun, 11 Aug 2019 00:17:59 +0200 Subject: [PATCH 076/360] Add a warning about ISO install being broken right now --- images.md | 4 ++++ images_fr.md | 4 ++++ install_iso.md | 4 ++++ install_iso_fr.md | 4 ++++ install_on_virtualbox.md | 3 +++ install_on_virtualbox_fr.md | 4 ++++ 6 files changed, 23 insertions(+) diff --git a/images.md b/images.md index be1840bb..f008170e 100644 --- a/images.md +++ b/images.md @@ -8,6 +8,10 @@ This page requires Javascript enabled to display properly :s. N.B. : Even if the image does not corresponds to the latest version of YunoHost, you can still use it and do a regular system upgrade after setting up! +<div class="alert alert-error" markdown="1"> +The current installation using our Virtualbox / x86 ISO is broken and will fail for now... We are investigating the issue [here](https://github.com/YunoHost/issues/issues/1382). In the meantime, a workaround is to use the official Debian 9.x (not 10 !) image and install YunoHost on top of it as explained [here](https://yunohost.org/#/install_on_debian) +</div> + <div id="cards-list"> </div> diff --git a/images_fr.md b/images_fr.md index 4b03c4f9..4499ccf8 100644 --- a/images_fr.md +++ b/images_fr.md @@ -8,6 +8,10 @@ Cette page requiert que Javascript soit activé pour s'afficher correctement :s. N.B. : Même si l'image de corresponds pas à la dernière version de YunoHost, vous pouvez tout de même l'utiliser puis faire une mise à jour du système après l'installation ! +<div class="alert alert-error" markdown="1"> +L'installation à l'aide de notre ISO Virtualbox / x86 est actuellement cassée ... Nous investiguons le problème [ici](https://github.com/YunoHost/issues/issues/1382). En attendant, il est possible de contourner le problème est d'utiliser l'ISO officielle Debian 9.x (pas 10 !) et d'installer YunoHost par dessus comme expliqué [ici](https://yunohost.org/#/install_on_debian) +</div> + <div id="cards-list"> </div> diff --git a/install_iso.md b/install_iso.md index 059f45eb..0e391429 100644 --- a/install_iso.md +++ b/install_iso.md @@ -15,6 +15,10 @@ You can use any computer with **256MB RAM or more**. * A **USB stick** of at least 1GB capacity **OR** a standard **blank CD** * ***Particular case*** : If your server has no graphic card, [prepare iso for booting with serial port](https://github.com/luffah/debian-mkserialiso). +<div class="alert alert-error" markdown="1"> +The current installation using our Virtualbox / x86 ISO is broken and will fail for now... We are investigating the issue [here](https://github.com/YunoHost/issues/issues/1382). In the meantime, a workaround is to use the official Debian 9.x (not 10 !) image and install YunoHost on top of it as explained [here](https://yunohost.org/#/install_on_debian) +</div> + --- ## Installation steps diff --git a/install_iso_fr.md b/install_iso_fr.md index 63840dd3..51536fad 100644 --- a/install_iso_fr.md +++ b/install_iso_fr.md @@ -14,6 +14,10 @@ * Une **clé USB** d’une capacité minimum d’1Go **OU** un **CD vierge** standard * ***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). +<div class="alert alert-error" markdown="1"> +L'installation à l'aide de notre ISO Virtualbox / x86 est actuellement cassée ... Nous investiguons le problème [ici](https://github.com/YunoHost/issues/issues/1382). En attendant, il est possible de contourner le problème est d'utiliser l'ISO officielle Debian 9.x (pas 10 !) et d'installer YunoHost par dessus comme expliqué [ici](https://yunohost.org/#/install_on_debian) +</div> + --- ## Étapes d’installation diff --git a/install_on_virtualbox.md b/install_on_virtualbox.md index 238100f2..09cfa6a9 100644 --- a/install_on_virtualbox.md +++ b/install_on_virtualbox.md @@ -9,6 +9,9 @@ * An 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](/images). +<div class="alert alert-error" markdown="1"> +The current installation using our Virtualbox / x86 ISO is broken and will fail for now... We are investigating the issue [here](https://github.com/YunoHost/issues/issues/1382). In the meantime, a workaround is to use the official Debian 9.x (not 10 !) image and install YunoHost on top of it as explained [here](https://yunohost.org/#/install_on_debian) +</div> <div class="alert alert-warning" markdown="1"> N.B. : Installing YunoHost in a VirtualBox is usually intended for testing. To diff --git a/install_on_virtualbox_fr.md b/install_on_virtualbox_fr.md index f83a3151..1f6875e0 100644 --- a/install_on_virtualbox_fr.md +++ b/install_on_virtualbox_fr.md @@ -9,6 +9,10 @@ * 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](/images_fr). +<div class="alert alert-error" markdown="1"> +L'installation à l'aide de notre ISO Virtualbox / x86 est actuellement cassée ... Nous investiguons le problème [ici](https://github.com/YunoHost/issues/issues/1382). En attendant, il est possible de contourner le problème est d'utiliser l'ISO officielle Debian 9.x (pas 10 !) et d'installer YunoHost par dessus comme expliqué [ici](https://yunohost.org/#/install_on_debian) +</div> + <div class="alert alert-warning" markdown="1"> N.B. : Installer YunoHost dans une VirtualBox est utile pour tester la distribution. Pour réellement s'autohéberger sur le long terme, il vous faudra From da4c3fabccbaa07fa37f0e3b056c0ae34f307342 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Sun, 11 Aug 2019 10:33:37 +0200 Subject: [PATCH 077/360] Uh I meant alert-danger --- images.md | 2 +- images_fr.md | 2 +- install_iso.md | 2 +- install_iso_fr.md | 2 +- install_on_virtualbox.md | 2 +- install_on_virtualbox_fr.md | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/images.md b/images.md index f008170e..f06d8b79 100644 --- a/images.md +++ b/images.md @@ -8,7 +8,7 @@ This page requires Javascript enabled to display properly :s. N.B. : Even if the image does not corresponds to the latest version of YunoHost, you can still use it and do a regular system upgrade after setting up! -<div class="alert alert-error" markdown="1"> +<div class="alert alert-danger" markdown="1"> The current installation using our Virtualbox / x86 ISO is broken and will fail for now... We are investigating the issue [here](https://github.com/YunoHost/issues/issues/1382). In the meantime, a workaround is to use the official Debian 9.x (not 10 !) image and install YunoHost on top of it as explained [here](https://yunohost.org/#/install_on_debian) </div> diff --git a/images_fr.md b/images_fr.md index 4499ccf8..e5ee45e6 100644 --- a/images_fr.md +++ b/images_fr.md @@ -8,7 +8,7 @@ Cette page requiert que Javascript soit activé pour s'afficher correctement :s. N.B. : Même si l'image de corresponds pas à la dernière version de YunoHost, vous pouvez tout de même l'utiliser puis faire une mise à jour du système après l'installation ! -<div class="alert alert-error" markdown="1"> +<div class="alert alert-danger" markdown="1"> L'installation à l'aide de notre ISO Virtualbox / x86 est actuellement cassée ... Nous investiguons le problème [ici](https://github.com/YunoHost/issues/issues/1382). En attendant, il est possible de contourner le problème est d'utiliser l'ISO officielle Debian 9.x (pas 10 !) et d'installer YunoHost par dessus comme expliqué [ici](https://yunohost.org/#/install_on_debian) </div> diff --git a/install_iso.md b/install_iso.md index 0e391429..b4fb9b8f 100644 --- a/install_iso.md +++ b/install_iso.md @@ -15,7 +15,7 @@ You can use any computer with **256MB RAM or more**. * A **USB stick** of at least 1GB capacity **OR** a standard **blank CD** * ***Particular case*** : If your server has no graphic card, [prepare iso for booting with serial port](https://github.com/luffah/debian-mkserialiso). -<div class="alert alert-error" markdown="1"> +<div class="alert alert-danger" markdown="1"> The current installation using our Virtualbox / x86 ISO is broken and will fail for now... We are investigating the issue [here](https://github.com/YunoHost/issues/issues/1382). In the meantime, a workaround is to use the official Debian 9.x (not 10 !) image and install YunoHost on top of it as explained [here](https://yunohost.org/#/install_on_debian) </div> diff --git a/install_iso_fr.md b/install_iso_fr.md index 51536fad..6d37b1ff 100644 --- a/install_iso_fr.md +++ b/install_iso_fr.md @@ -14,7 +14,7 @@ * Une **clé USB** d’une capacité minimum d’1Go **OU** un **CD vierge** standard * ***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). -<div class="alert alert-error" markdown="1"> +<div class="alert alert-danger" markdown="1"> L'installation à l'aide de notre ISO Virtualbox / x86 est actuellement cassée ... Nous investiguons le problème [ici](https://github.com/YunoHost/issues/issues/1382). En attendant, il est possible de contourner le problème est d'utiliser l'ISO officielle Debian 9.x (pas 10 !) et d'installer YunoHost par dessus comme expliqué [ici](https://yunohost.org/#/install_on_debian) </div> diff --git a/install_on_virtualbox.md b/install_on_virtualbox.md index 09cfa6a9..eb5c9188 100644 --- a/install_on_virtualbox.md +++ b/install_on_virtualbox.md @@ -9,7 +9,7 @@ * An 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](/images). -<div class="alert alert-error" markdown="1"> +<div class="alert alert-danger" markdown="1"> The current installation using our Virtualbox / x86 ISO is broken and will fail for now... We are investigating the issue [here](https://github.com/YunoHost/issues/issues/1382). In the meantime, a workaround is to use the official Debian 9.x (not 10 !) image and install YunoHost on top of it as explained [here](https://yunohost.org/#/install_on_debian) </div> diff --git a/install_on_virtualbox_fr.md b/install_on_virtualbox_fr.md index 1f6875e0..984d3ff1 100644 --- a/install_on_virtualbox_fr.md +++ b/install_on_virtualbox_fr.md @@ -9,7 +9,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](/images_fr). -<div class="alert alert-error" markdown="1"> +<div class="alert alert-danger" markdown="1"> L'installation à l'aide de notre ISO Virtualbox / x86 est actuellement cassée ... Nous investiguons le problème [ici](https://github.com/YunoHost/issues/issues/1382). En attendant, il est possible de contourner le problème est d'utiliser l'ISO officielle Debian 9.x (pas 10 !) et d'installer YunoHost par dessus comme expliqué [ici](https://yunohost.org/#/install_on_debian) </div> From 35317f8f02e92b4381d2136f22ca75d89e6c6818 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Sun, 11 Aug 2019 17:28:18 +0200 Subject: [PATCH 078/360] ISO installs should be fixed now ? --- images.md | 4 ---- images_fr.md | 4 ---- install_iso.md | 4 ---- install_iso_fr.md | 4 ---- install_on_virtualbox.md | 4 ---- install_on_virtualbox_fr.md | 4 ---- 6 files changed, 24 deletions(-) diff --git a/images.md b/images.md index f06d8b79..be1840bb 100644 --- a/images.md +++ b/images.md @@ -8,10 +8,6 @@ This page requires Javascript enabled to display properly :s. N.B. : Even if the image does not corresponds to the latest version of YunoHost, you can still use it and do a regular system upgrade after setting up! -<div class="alert alert-danger" markdown="1"> -The current installation using our Virtualbox / x86 ISO is broken and will fail for now... We are investigating the issue [here](https://github.com/YunoHost/issues/issues/1382). In the meantime, a workaround is to use the official Debian 9.x (not 10 !) image and install YunoHost on top of it as explained [here](https://yunohost.org/#/install_on_debian) -</div> - <div id="cards-list"> </div> diff --git a/images_fr.md b/images_fr.md index e5ee45e6..4b03c4f9 100644 --- a/images_fr.md +++ b/images_fr.md @@ -8,10 +8,6 @@ Cette page requiert que Javascript soit activé pour s'afficher correctement :s. N.B. : Même si l'image de corresponds pas à la dernière version de YunoHost, vous pouvez tout de même l'utiliser puis faire une mise à jour du système après l'installation ! -<div class="alert alert-danger" markdown="1"> -L'installation à l'aide de notre ISO Virtualbox / x86 est actuellement cassée ... Nous investiguons le problème [ici](https://github.com/YunoHost/issues/issues/1382). En attendant, il est possible de contourner le problème est d'utiliser l'ISO officielle Debian 9.x (pas 10 !) et d'installer YunoHost par dessus comme expliqué [ici](https://yunohost.org/#/install_on_debian) -</div> - <div id="cards-list"> </div> diff --git a/install_iso.md b/install_iso.md index b4fb9b8f..059f45eb 100644 --- a/install_iso.md +++ b/install_iso.md @@ -15,10 +15,6 @@ You can use any computer with **256MB RAM or more**. * A **USB stick** of at least 1GB capacity **OR** a standard **blank CD** * ***Particular case*** : If your server has no graphic card, [prepare iso for booting with serial port](https://github.com/luffah/debian-mkserialiso). -<div class="alert alert-danger" markdown="1"> -The current installation using our Virtualbox / x86 ISO is broken and will fail for now... We are investigating the issue [here](https://github.com/YunoHost/issues/issues/1382). In the meantime, a workaround is to use the official Debian 9.x (not 10 !) image and install YunoHost on top of it as explained [here](https://yunohost.org/#/install_on_debian) -</div> - --- ## Installation steps diff --git a/install_iso_fr.md b/install_iso_fr.md index 6d37b1ff..63840dd3 100644 --- a/install_iso_fr.md +++ b/install_iso_fr.md @@ -14,10 +14,6 @@ * Une **clé USB** d’une capacité minimum d’1Go **OU** un **CD vierge** standard * ***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). -<div class="alert alert-danger" markdown="1"> -L'installation à l'aide de notre ISO Virtualbox / x86 est actuellement cassée ... Nous investiguons le problème [ici](https://github.com/YunoHost/issues/issues/1382). En attendant, il est possible de contourner le problème est d'utiliser l'ISO officielle Debian 9.x (pas 10 !) et d'installer YunoHost par dessus comme expliqué [ici](https://yunohost.org/#/install_on_debian) -</div> - --- ## Étapes d’installation diff --git a/install_on_virtualbox.md b/install_on_virtualbox.md index eb5c9188..0dc98eac 100644 --- a/install_on_virtualbox.md +++ b/install_on_virtualbox.md @@ -9,10 +9,6 @@ * An 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](/images). -<div class="alert alert-danger" markdown="1"> -The current installation using our Virtualbox / x86 ISO is broken and will fail for now... We are investigating the issue [here](https://github.com/YunoHost/issues/issues/1382). In the meantime, a workaround is to use the official Debian 9.x (not 10 !) image and install YunoHost on top of it as explained [here](https://yunohost.org/#/install_on_debian) -</div> - <div class="alert alert-warning" markdown="1"> N.B. : Installing YunoHost in a VirtualBox is usually intended for testing. To run an actual server on the long-term, you usually need a dedicated physical diff --git a/install_on_virtualbox_fr.md b/install_on_virtualbox_fr.md index 984d3ff1..f83a3151 100644 --- a/install_on_virtualbox_fr.md +++ b/install_on_virtualbox_fr.md @@ -9,10 +9,6 @@ * 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](/images_fr). -<div class="alert alert-danger" markdown="1"> -L'installation à l'aide de notre ISO Virtualbox / x86 est actuellement cassée ... Nous investiguons le problème [ici](https://github.com/YunoHost/issues/issues/1382). En attendant, il est possible de contourner le problème est d'utiliser l'ISO officielle Debian 9.x (pas 10 !) et d'installer YunoHost par dessus comme expliqué [ici](https://yunohost.org/#/install_on_debian) -</div> - <div class="alert alert-warning" markdown="1"> N.B. : Installer YunoHost dans une VirtualBox est utile pour tester la distribution. Pour réellement s'autohéberger sur le long terme, il vous faudra From 5f5c6e8bfc152715132a79568fc49cf7f521081e Mon Sep 17 00:00:00 2001 From: Laurent Peuch <cortex@worlddomination.be> Date: Sun, 11 Aug 2019 19:47:38 +0200 Subject: [PATCH 079/360] [mod] add images for PR #1043 by external contrib on pleroma app --- images/capture_espace_connexion.png | Bin 0 -> 10950 bytes images/capture_globale.png | Bin 0 -> 272681 bytes images/capture_menu_droite.png | Bin 0 -> 1588 bytes ...apture_menu_droite_chercher_utilisateur.png | Bin 0 -> 757 bytes images/capture_menu_droite_deconnexion.png | Bin 0 -> 576 bytes images/capture_menu_droite_preferences.png | Bin 0 -> 840 bytes images/pleroma_logo.png | Bin 0 -> 1929 bytes 7 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/capture_espace_connexion.png create mode 100644 images/capture_globale.png create mode 100644 images/capture_menu_droite.png create mode 100644 images/capture_menu_droite_chercher_utilisateur.png create mode 100644 images/capture_menu_droite_deconnexion.png create mode 100644 images/capture_menu_droite_preferences.png create mode 100644 images/pleroma_logo.png diff --git a/images/capture_espace_connexion.png b/images/capture_espace_connexion.png new file mode 100644 index 0000000000000000000000000000000000000000..d2edd32de8968a1cbc5d013bbf074cae40e1a9b0 GIT binary patch literal 10950 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 E1AzzVjsO4v literal 0 HcmV?d00001 diff --git a/images/capture_globale.png b/images/capture_globale.png new file mode 100644 index 0000000000000000000000000000000000000000..5b2b84d9fdb4e82b49555911d6b24666dc77bbbf GIT binary patch literal 272681 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%0A{Xa{2SSq~MZe7H^ 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 NV`FJ+K``@7`VS%s7Ha?i literal 0 HcmV?d00001 diff --git a/images/capture_menu_droite.png b/images/capture_menu_droite.png new file mode 100644 index 0000000000000000000000000000000000000000..60658ac744ad20c5c688d5f4b8a7b47b1ab0224b GIT binary patch literal 1588 zcmcgr|2LBh7+<A(i=)%&>UvM;=DpQO>21xdx5Dg;jWHXsH=AUe+049Dx|)`aiOR*~ zG__YlU+9ZSNktK*quUCt-p=Ky+v#?2MRXl?Q+Lk&AMSHLpXc*DpI@F|K2Kp}M2NHF z3P%Eg;LKq&1a>vp2`^e;?{y|+y<O(*5rhO2>aFg>_QgR?3#SnXjm1u1b}u9l77!x2 z(M$k@0FVTLWB{ZBAPj(80Wc6C!T@nQ;IkD3A&^M%2BA%M5TQ*Q17Q$?*F)6JWGWm0 zfHVMP0>mHyWCI`v@Sy=@1^{sZG6x`Yf$c2s%`||;1%mkiO8~H=fQTJHbS!`%fG7?O zVuC@T-eDY&9SO1pV00`fii7zAn7;$I5AmW+yTvpj6tWQx1tA_0Vo)hTFwB_4Rt6j( zCPES)C;{H045Vm4Xx}!n27)wO$OmCayN#lx!&*A|U>KDa9?pwL7*a7$A_|r74pk&Z zsU(P6CPtH#JHwJ>(Mnm2Vy_&{Nc<%$MF&EMw~&fpxCDmsf=C4{$jBy{Sdf_oRfdtx zQE+tx=}a`mvJ<Y2B3+1vF2$1SMbt(S)D%x@6j7Vvsn=xzZF2aoVw+(Xt7sS7APv`L zAm&U&r&Z=1N-5S#by~DqMz2qxRcC}=)<j>{Ah#8?JDK6l8l+W=T+&K9RDoUUzz1m1 zqrG&imSfe1c4`ruhHcYwa4qLZj^c<;S(KwN<}1y5IhLDZI;J)sQyUA=ibAwnFR9f_ zF6*WB<?1RUdhP^TkD=F(r8JkS?igh^%hlI0v;{-kD$qs?+G0ViI___IyvO;x4t;Ew z9<k;}TJr@xN8@d|Tw4JT&*eVNjlzG8vX#d68^yNrUAR$*pFr>m5so1}$CG=?RZos5 zcVK9j8GUR<`%MztNhy9J0mtl+;8+rFmgATL$5g!-id*7vi@3vrc3IFz_R|)-Bf~99 z+>(M@QgMs=sRgyonW#Oe|7T5Gy)E{8i%~YRhd@};Imdb3X|+-UVSXEjL5miKjFs=u zMA4S!`={z62STe_Zl|F87vCQo6uXg`ajh-%^!*!{j%S6ObyF#(L5woYnKp|)>P{U@ zBTYS)PQCrB(&JojGI>Q2tL9U;OR>1^f_(Lwm}kP#Bd3DXJrms~R}!wKW!4PLCsJ;E z$3&{GITem}3x!$6^$M(T6x8$>EvrW+2H&fGZe9y%{@8GKR4MN|a3~3)^fl!%oYqw? zADTDeyNYR;UDZB?)#0C0hh#Z!9vuG!w{axKm`Kb^uCZ=Z%un$5UdQ6^TKVCOTW$7N zzPID2X+u)yJ5cAc+;&A!vpN+X{;s<0pwkDsi?PV$lfln<d&WyqM#tR81%jeQuFU5X z3r23WZ|!##+;{k0*yz>%D8S_R(D0&7>RHl!6VJTje=)1zdmpwRC}I$g`mL$L8;FyB zulvcBWQUmm+C!ESJMieAm6`3-?CmUMT+J&#t9Q87aE&jcKj^=c%e!;)ZryB)S>6QN zd>if|>y4i?(ta%L3R>zqkwsdbyKJ9(T;C06bg#!AMN?<*S#!D5cy{U2(j_kqpTuO5 zD*shbp>@e&iC23uXXd5%tKjo;PhRJuioB6~0}RHp>z?W%pQ8=|B@K>^A&n)JAKsjM z0Uc<)8lphf6`=fKvyhdT?$a$gAJEmaP%!QvbM<{og#6Wc`N}$0o|Asawc&<`%yH!N zESf!b+9h4zR{wgm)+@_0bC~5CvvzWN=LCaG{CoJ!=)I6>-#%x?>b8??&;3;^`~$v- z+q=hnUx+rlJ{HtQP0A?4tdnx>Agye0@ksBfVm$fKK$5TUqRW%#Bx1uD^V{yawQs84 zGQU2Xk*2lYpX5L>A5Al<KmF+|EYoFNeJ{V%yQ<GocOhgZ{mHvd_f{9%9>&x8-_E}s i=>IQey~$twkIgPLoTdo|3L>p@-^5`?FzSO7^#1}=B!=Yx literal 0 HcmV?d00001 diff --git a/images/capture_menu_droite_chercher_utilisateur.png b/images/capture_menu_droite_chercher_utilisateur.png new file mode 100644 index 0000000000000000000000000000000000000000..d29a1ffee0473f0c076dc76dfc6a9897f618917e GIT binary patch literal 757 zcmV<R0t)?!P)<h;3K|Lk000e1NJLTq001rk001rs0ssI2*xS5d00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0*XmQK~z{rW0X)b zU>F>L2}%zFFzOU+VALttz^GHOfl;Sm1LT&roZLbB0@7Se9KV0xeeiC_<6qyP666Ci zoWf*oqh4w!F2VxkGcf%7^5o&f#SeG?hVsb+%she;P$qFe$x5rsS&SbgVj0=^1WlxW z9>4VEJye7oKx$eMOg9tdg0fKnmy%MEDMcxdM9nIK%6w2J24Iz!6@)U$0@Tbwyj*Nh z7FmEqr@Z?0@h_B#37)?E2xXB4NOa1lXIrj+hqBSY_m}%lBIRgv&AoLF2Y{$rGZ`vG z0FW9%|JHB5w&}r7^q~3vVb{i+b3Z|OAi&JT3}X-(ZA52gPQmgBojPB&M196H8?VfK z_*;yJm6!Sd&ySxjUbxe>@g<A7PJftsoFT9J&o3ul{QfN~mY~E9*7@z~!PjTNEc}4D zB92v{B~{Nx1QvvUe?GhUWX;*Pw?J{lqNXhoqRao`+?{E+euAYLzkT|8&p`Wtizt}; zdS%nq>0lOqK$KIATn)P|`Jn-h4g9@#(|6@tIbjw=39O|&#YPy+db@Sj-R)o&2>knV z?-ll1f*7Z8Ri&A^;f=;O=gx=R5MC1{Cju3~18@cs5y_TMNR70*flNSzQzY2=p)8z$ znTe6%&wtz{4ifnL?-!JX4v2^#D|iCL4c<L&op~3fW=7~DHrbL|uHXPdvK7T9^CC5; zf>DPB)*6!lAi^o1etm|r@BwBv9wk+AZ7@<1VTFp40*G+Rl~-rq{DZP-35bcHj}0rX z9eMN}qqN5ke*gIV;MsSEAAf#8__)(48X%)VNh?65WJ?V&>J)5X)G64&s8g_kQKw)7 nqfWsFMxBBUj5-AqFfafBTUx}LW!6Dh00000NkvXXu0mjf`*KvG literal 0 HcmV?d00001 diff --git a/images/capture_menu_droite_deconnexion.png b/images/capture_menu_droite_deconnexion.png new file mode 100644 index 0000000000000000000000000000000000000000..ba2b7c79473ed721623f7e8f1d1430d77e0f86d6 GIT binary patch literal 576 zcmV-G0>Ax<P)<h;3K|Lk000e1NJLTq001ih001ip0ssI2Za?Oi00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0o6%FK~z{rW0X)b zU>H!q1f>TKjJjad1t2i$f>9TMz^Drt7)YrXSh@V{q};_=p<EF7ePREd*)Je$76n0u z2k-wtIK%^H9zh8x6F(4=oR*>Mr_3)V%!7oOKizz`?;S|q+RJcqpuFYp*IOQw<_IFg zfGHu|GC}?S-J@4Z_I`Q~6+{7!KBo0X+zbrAZtgjke(VQSln6j%IuJ8cVP$yys0N4i zNPtb<#b~A#2b4zyAkqbl%*?<@|N9)u#Schx1d*{IIkQe({oYN7B@j1oX9mdWaDtgI zz#%B4EP|9s|NgwT|9ln^(Lr8r<TKC{*H%SADAof3GrN|f;WQ#bf|lh0agLyIi3D<l zMg`vdPGc7^FnoLXauu}5!VYNbf^YY3<}7)B56Z(1$aBG;uiv38Jb)PMfq=Z+hy}pP zL@4-n?^f~3XV-s2xp)9gVu5(;fq+OCe0&H@P13^o;)K<Idw8djXzPK1*xH%PNPUfu zB-fwsPab{x_!laOTsuQz;oGzO{R<!NCfa%+Ahve?{rv6m4@|n!0y2_(;@E2ES3ek3 znchxc{p1iS)&l`4Efm@S+Li~zfKeBWx&Q=5T`=kb5EymAs0$bv7#ILKa-K{3el_v{ O0000<MNUMnLSTZH*Y{)q literal 0 HcmV?d00001 diff --git a/images/capture_menu_droite_preferences.png b/images/capture_menu_droite_preferences.png new file mode 100644 index 0000000000000000000000000000000000000000..ce7d05edd7af02a0f004a25cafd3bead4ec3114c GIT binary patch literal 840 zcmV-O1GoH%P)<h;3K|Lk000e1NJLTq001ih001ip0ssI2Za?Oi00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0^LbOK~z{rW0X)b zU>H!q1f>TKjJjad1t2i$f>9TM00m{Dv{;L!upldt_51qKds80$g9wuf$PWWYLwOr5 zacxx~l5x=Eg^H36NO1wHKvjy>wiE?#P7qH+fEz3d0wMxjAc~c@D9&<Aio7c*V2A}o z#{$swC|y5!HX!rw*Z0?7vM9^(a<V|=fI@#>KYaU5TvVPL<fU&9?=&uZa`HDsjsPIm z1+IQ()dpaX5(nO0xDd4I1C)ao5E~1-k34(u7s@6K{(io6jVSAZfSE^70?Nb>zJI#( zpT}L13m)*e!SCA#E*4+-1LY9{B&5Xe%#6q>?Ax<PbLSj!XgUx$`Qp|GKam26m4}-M zcftS>=|Dwhf{nP6Fef)R3o}%R;qQz4rL!KMgYtlYBPZ54L=o=7zu&+7{`Bts@gp}U z+<^+=0z`y?7{7rWFCUWiKydHcV<hW=;K!7!Z+<}8K)}q&!yzswsVN5K;{l|U2MF-{ z`!|dd@YC-vP!?%`JQuKvit<32FkqxCAOdBQ28hTDkKZ4-`R38vFMrth<oKac!7ItD z_U858H_(vaQd4Mm6z7AbzaNhuZ#?&O)9!mK@BH~fsJbAfX3|mJ93+iY0sMXQ=*`QY z3=HhtD$+dch-C8X!sZhN=ZUSTh>r!1OaoEW`iEIW4qP+IAzKdwY`O+gN>DaoK&%TS z?NvjRK$QY9fLT_l-HRW}Aq0qZ!N=!c-;hu$|9JT5Gn7pT5L+t$e*6C1CsqqpJ|3oD zk5697Sp8g7Nm2oxAwIoWw)oPLubh@LTx?9gZtlB~f0nqKk$4vX!TXo*_P+V~@7(R0 zGvB`a`pGISW+wqH1phvIl7IZ;(+96MJp9UV`(fjGq{4|1Agw%jfBpHa`_L-q=$o(b zXnFDG6NK^Y(d*gQNw6LWC}<~A36NJNQWK22VAKU5FzSL)7l6R13kKc=3=9BtQs-*F SwCKVB0000<MNUMnLSTY*)PH;c literal 0 HcmV?d00001 diff --git a/images/pleroma_logo.png b/images/pleroma_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ac82ca0c6661d1fbe3bb33e411ac8fa265b2c7bf GIT binary patch literal 1929 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 U$K5Ft(KiY}I-Iw!vkkcQFPY@6&j0`b literal 0 HcmV?d00001 From 5025a3c1eb6a5d6e338cc7d8eb069f8400c9216d Mon Sep 17 00:00:00 2001 From: gmar <gmar@marsan.me> Date: Tue, 13 Aug 2019 17:47:08 +0200 Subject: [PATCH 080/360] Spanish translation for the website --- dns_config_es.md | 73 +++++++++++++++++++++ dns_es.md | 42 ++++++++++++ dns_nohost_me_es.md | 53 ++++++++++++++++ hardware_es.md | 14 ++++ images_es.md | 123 ++++++++++++++++++++++++++++++++++++ install_es.md | 80 +++++++++++++++++++++++ install_iso_es.md | 38 +++++++++++ install_manually_es.md | 18 ++++++ install_on_arm_board_es.md | 51 +++++++++++++++ install_on_raspberry_es.md | 60 ++++++++++++++++++ install_on_virtualbox_es.md | 77 ++++++++++++++++++++++ install_on_vps_es.md | 20 ++++++ postinstall_es.md | 63 ++++++++++++++++++ try_es.md | 29 +++++++++ vagrant_es.md | 60 ++++++++++++++++++ 15 files changed, 801 insertions(+) create mode 100644 dns_config_es.md create mode 100644 dns_es.md create mode 100644 dns_nohost_me_es.md create mode 100644 hardware_es.md create mode 100644 images_es.md create mode 100644 install_es.md create mode 100644 install_iso_es.md create mode 100644 install_manually_es.md create mode 100644 install_on_arm_board_es.md create mode 100644 install_on_raspberry_es.md create mode 100644 install_on_virtualbox_es.md create mode 100644 install_on_vps_es.md create mode 100644 postinstall_es.md create mode 100644 try_es.md create mode 100644 vagrant_es.md diff --git a/dns_config_es.md b/dns_config_es.md new file mode 100644 index 00000000..879ed0e6 --- /dev/null +++ b/dns_config_es.md @@ -0,0 +1,73 @@ +# Configuración de la zona DNS + +DNS (sistema de nombre de dominios) es un elemento esencial de Internet que permite convertir direcciones comprensibles por seres humanos (los nombres de dominio) en direcciones comprensibles por la máquina (los IPs). Para que tu servidor esté fácilemente por otros seres humanos, y para que servicios como el mail funcionen correctamente, es preciso configurar la zona DNS de tu dominio. + +Si utilizas un [dominio automático](/dns_nohost_me_es) provecho por el Proyecto Yunohost, la configuración debería ser automática. Si quieres utilizar tu propio nombre de dominio (comprado a un registrar), hay que configurar manualmente tu proprio nombre de dominio vía la interfaz de tu registrar. + + +## Configuración DNS recomendada + +YunoHost provee una configuración DNS recomendada, accesible vía : +- la webadmin, en Dominios > tu.dominio.tld > Configuración DNS ; +- o la linea de comando, `yunohost domain dns-conf tu.dominio.tld` + +Para algunas necesidades o instalaciones particulares, y si sabes lo que estás haciendo, a lo mejor tendrás que modificar esa recomendación o añadir otros registros (e.g. para administrar subdominios). + +La configuración recomendada típicamente se parece a : + +```bash +# +# Registros IPv4/IPv6 básicos +# +@ 3600 IN A 111.222.33.44 +* 3600 IN A 111.222.33.44 + +# (Si tu servidor es compatibles con el IPv6, habrá registros AAAA) +@ 3600 IN AAAA 2222:444:8888:3333:bbbb:5555:3333:1111 +* 3600 IN AAAA 2222:444:8888:3333:bbbb:5555:3333:1111 + +# +# XMPP +# +_xmpp-client._tcp 3600 IN SRV 0 5 5222 tu.dominio.tld. +_xmpp-server._tcp 3600 IN SRV 0 5 5269 tu.dominio.tld. +muc 3600 IN CNAME @ +pubsub 3600 IN CNAME @ +vjud 3600 IN CNAME @ + +# +# Mail (MX, SPF, DKIM et DMARC) +# +@ 3600 IN MX 10 votre.domaine.tld. +@ 3600 IN TXT "v=spf1 a mx ip4:111.222.33.44 -all" +mail._domainkey 3600 IN TXT "v=DKIM1; k=rsa; p=uneGrannnnndeClef" +_dmarc 3600 IN TXT "v=DMARC1; p=none" +``` + +Pero puede ser un poco más fácil entenderla viéndola de esta manera : + + +| Tipo | Nombre | Valor | +| :-----: | :--------------------: | :----------------------------------------------------: | +| **A** | **@** | `111.222.333.444` (tu IPv4) | +| A | * | `111.222.333.444` (tu IPv4) | +| AAAA | @ | `2222:444:8888:3333:bbbb:5555:3333:1111` (tu IPv6) | +| AAAA | * | `2222:444:8888:3333:bbbb:5555:3333:1111` (tu IPv6) | +| **SRV** | **_xmpp-client._tcp** | `0 5 5222 tu.dominio.tld.` | +| **SRV** | **_xmpp-server._tcp** | `0 5 5269 tu.dominio.tld.` | +| CNAME | muc | `@` | +| CNAME | pubsub | `@` | +| CNAME | vjud | `@` | +| **MX** | **@** | `tu.dominio.tld.` (y prioridad: 10) | +| TXT | @ | `"v=spf1 a mx ip4:111.222.33.44 -all"` | +| TXT | mail._domainkey | `"v=DKIM1; k=rsa; p=uneGrannnndeClef"` | +| TXT | _dmarc | `"v=DMARC1; p=none"` | + +#### Algunas notas a propósito de esta tabla : + +- Todos los registros no son necesarios. Para una instalación mínima, solos los registros en negrita son necesarios. +- El punto al final de `tu.dominio.tld.` es importante ;) ; +- `@` corresponde a `tu.dominio.tld`, y por ejemplo `muc`corresponde a `muc.tu.dominio.tld` ; +- ¡ Los valores mostrados son ejemplos ! Refiérete a la configuración generada por tu servidor qué valores utilizar. +- Recomendamos un [TTL](https://en.wikipedia.org/wiki/Time_to_live) de 3600 (1 hora). Pero puedes utilizar otro valor si sabes lo que estás haciendo ; +- ¡ No pongas registros IPv6 si no estás seguro que el IPv6 funcione en tu servidor ! Tendrás problemas con Let's Encrypt si no es el caso :-) diff --git a/dns_es.md b/dns_es.md new file mode 100644 index 00000000..3fae91a9 --- /dev/null +++ b/dns_es.md @@ -0,0 +1,42 @@ +# DNS : sistema de nombre de dominios + +La configuración de los DNS es una etapa crucial para que tu servidor esté accesible. En efecto, si tus DNS están mal configurados, con mucha certeza tendrás problemas de conexión a tu servidor vía tu nombre de dominio. + +*Aunque esta etapa de documentación parezca larga y compleja, sigue siendo muy importante si quieres entender correctamente las implicaciones de la denominación en Internet vía los nombres de dominio, que son necesarios para el funcionamiento de tu servidor Yunohost.* + +### ¿ Qué es ? + +DNS significa « Domain Name Server » en inglés, y está frecuentemente empleado para designar la configuración de tus nombres de dominio. Tu nombre de dominio debe apuntar hacia algo (en general, una dirección IP). + +**Por ejemplo** : `yunohost.org` apunta hacia `88.191.153.110`. + +Este sistema fue creado para poder memorizar más fácilmente las direcciones de servidores. Existen registros DNS en los cuales hay que apuntarse. Esto se hace con **registrars** que te alquilarán estos nombres de dominio a cambio de cierto importe (entre 5 y algunas centenas de euros). Estos [registrars](registrar) son entidades privadas autorizadas por el [ICANN](https://es.wikipedia.org/wiki/Corporaci%C3%B3n_de_Internet_para_la_Asignaci%C3%B3n_de_Nombres_y_N%C3%BAmeros), tales como [Gandi](http://gandi.net), [OVH](http://ovh.com) o [BookMyName](http://bookmyname.com). + +Es importante notar que los subdominios no necesariamente apuntan al dominio principal. + +Si `yunohost.org` apunta hacia `88.191.153.110`, no quiere decir que `backup.yunohost.org` apunte hacia la misma IP. Tienes que configurar **todos** los dominios y subdominios que deseas utilizar. + +También existen **tipos** de registros DNS, lo que significa que un dominio puede apuntar hacia otra cosa que una dirección IP. + +**Por ejemplo** : `www.yunohost.org` apunta hacia `yunohost.org` + + +### ¿ Cómo (bien) hacer la configuración ? + +Tienes varias opciones. Nota que puedes cumular estas soluciones si posees varios dominios : por ejemplo, puedes tener `mi-servidor.nohost.me` utilizando la solución **1.**, et `mi-servidor.org` utilizando la solución **2.**, redirigiéndolos hacia el mismo servidor YunoHost. + +1. Puedes utilizar [el servicio DNS de YunoHost](/dns_nohost_me_es), que configurará él mismo los DNS de tu instancia YunoHost. Pero en este caso, tienes que elegir un dominio terminando por `.nohost.me`, `.noho.st` o `.ynh.fr`, lo que puede tener inconvenientes (tendrás direcciones email tales como `juan@mi-servidor.noho.st`). +**Es el método recomendado si estás debutando.** + +2. Puedes utilizar el servicio de DNS de tu **registrar** (Gandi, OVH, BookMyName u otro) para configurar tus nombres de dominio. Ésta es la [configuración DNS estándar](/dns_config_es). También es posible utilizar una redirección DNS local, más información sobre cómo [Acceder a su servidor desde la red local](/dns_local_network_es). +También puedes consultar las documentaciones específicas a estas varias [oficinas de registro](/registrar_fr) : [Gandi](http://gandi.net), [OVH](/OVH_fr) o [BookMyName](http://bookmyname.com). + +**Atención** : Si eliges este modo de funcionamiento, tendrás más flexibilidad, pero nada será automático. Por ejemplo si quieres utilizar `webmail.mi-servidor.org`, tendrás que añadirlo manualmente en la interfaz de tu registrar. + +3. Tu instancia tiene un servicio DNS, lo que quiere decir que configura automáticamente sus registros DNS y que es posible delegarle la administración de estos registros. Por eso, tienes que indicar al **registrar** que es tu instancia Yunohost que es el servidor DNS de tu nombre de dominio creando un registro glue (a menudo denominado **glue record**) apuntando hacia la IP de tu instancia Yunohost. +<br><br>**Atención** : Si eliges este modo de funcionamiento, todas las configuraciones serán automatizadas, tendrás mucha flexibilidad pero la pérdida de tu servidor potencialmente traerá muchos problemas. **Elige este método si estás muy seguro de los que estás haciendo.** + +4. Una vez que tu servicio DNS está operacional, tu servidor puede utilizarlo pero hay que configurarlo, es el [revolvedor DNS](/dns_resolver_es). + +### IP Dinámica +Si la dirección IP pública cambia, sigue este [tutorial](dns_dynamicip_es). diff --git a/dns_nohost_me_es.md b/dns_nohost_me_es.md new file mode 100644 index 00000000..c8b2be78 --- /dev/null +++ b/dns_nohost_me_es.md @@ -0,0 +1,53 @@ +# Nombres de dominios automáticos + +Para hacer que el auto-alojamiento esté lo más accesible posible, el Proyecto Yunohost provee un servicio de nombres de dominio *ofertos* y *automáticamente configurados*. Cuando utilizas este servicio, no tienes que configurar tú mismo la [configuración de los registros DNS](/dns_config) que es bastante técnica. + +Los subdominios siguientes están propuestos : +- `loquequieras.nohost.me` ; +- `loquequieras.noho.st` ; +- `loquequieras.ynh.fr`. + +Para aprovechar de este servicio, basta con elegir uno de estos tipos de dominios durante la post-instalación. ¡ Estará automáticamente configurado por Yunohost ! + +N.B. : Por razones de equidad, sólo puedes tener un *único nombre de dominio* nohost.me por instalación de Yunohost. + +### Subdominios + +El servicio de dominios `nohost.me`, `noho.st` y `ynh.fr` no permite la creación de subdominios. + +Aunque Yunohost permita la instalación de aplicaciones en subdominios (por ejemplo teniendo la aplicación Nextcloud accesible desde la dirección `cloud.midominio.org`), esta función no está permitida con los dominios `nohost.me` y `noho.st` y no es posible tener un subdominio tal como `miaplicacion.midominio.nohost.me`. + +Para poder aprovechar de las aplicaciones instalables únicamente a la raíz de un nombre de de dominio, hay que tener su propio nombre de dominio. + +### Añadir un dominio nohost.me, noho.st o ynh.fr después de la post-instalación + +Si ya has hecho la post-instalación y quieres añadir un dominio de tipo nohost.me, puedes utilizar la categoría "Dominios" de la interfaz web, eligiendo la opción "no tengo nombre de dominio..." + +También puedes utilizar los comandos siguientes desde línea de comandos. + + +```bash +# Añadir el dominio +yunohost domain add loquequieras.nohost.me + +# Registrar el dominio en el servicio dyndns +yunohost dyndns subscribe -d loquequieras.nohost.me + +# [ esperar ~ 30 segundos ] + +# Actualizar la configuración DNS +yunohost dyndns update +``` + +### Recuperar un dominio nohost.me, noho.st o ynh.fr + +Si reinstalas tu servidor y quieres utilizar un dominio automático que ya utilizaste, tienes que pedir una reinstalación del dominio al Proyecto Yunohost [en el hilo de discusión dedicado del foro](https://forum.yunohost.org/t/nohost-domain-recovery/442). + +### Cambiar un dominio nohost.me, noho.st o ynh.fr +Si quieres utilizar otro dominio automático en tu servidor, primero tienes que cancelar el que ya está configurado, siguiendo estas instrucciones : +1. Suprimir el dominio de tu instancia (vía webadmin o `yunohost domain remove`). **Cuidado : esto suprimirá todas las aplicaciones instaladas en este dominio así como sus datos**. +2. Pedir la supresión de tu suscripción [en el hilo de discusión dedicado del foro](https://forum.yunohost.org/t/nohost-domain-recovery/442). +3. Suprimir los ficheros de configuración automática de tu instancia (únicamente desde la linea de comando por ahora) : `sudo rm /etc/cron.d/yunohost-dyndns && sudo rm -r /etc/yunohost/dyndns` + + +Luego podrás registrar un nuevo dominio automático. diff --git a/hardware_es.md b/hardware_es.md new file mode 100644 index 00000000..e10c13f5 --- /dev/null +++ b/hardware_es.md @@ -0,0 +1,14 @@ +# Hardware + +YunoHost puede ser instalado en este hardware : +- Tarjetas ARM (Raspberry Pi, Olinuxino LIME1 & 2, Orange Pi, etc...) ; +- 'Viejos' ordenadores de escritorio ou portátiles ; +- Servidores remotos, también llamado Virtual Private Servers (VPS). + +Los guías de instalación se encuentran en [esta página](/install_es). + +### Configuración minimal + +* Procesador 500MHz +* 512 Mo de RAM (recomendado : 1Go para que los servicios y las aplicaciones funcionen correctamente +* 8 Go de espacio de almacenamiento (recomendado : 32 Go para poder almacenar emails y documentos) diff --git a/images_es.md b/images_es.md new file mode 100644 index 00000000..2023334b --- /dev/null +++ b/images_es.md @@ -0,0 +1,123 @@ +# Imagenes + +<span class="javascriptDisclaimer"> +Esta página requiere que Javascript esté instalado par aparecer correctamente :s. +<br/> +<br/> +</span> + +N.B. : Incluso si la imagen no corresponde con la última versión de Yunohost, puedes utilizarla y actualizarla después de la instalación ! + +<div id="cards-list"> +</div> + +<script type="text/template" id="image-template"> +<div id="{id}" class="card panel panel-default"> + <div class="panel-body text-center"> + <h3>{name}</h3> + <div class="card-comment">{comment}</div> + <div class="card-desc text-center"> +<img src="/images/{image}" height=100 style="vertical-align:middle"> + </div> + </div> + <div class="annotations"> + <div class="col-sm-6 annotation"><a href="{file}.sha256sum"><span class="glyphicon glyphicon-barcode" aria-hidden="true"></span> Checksum</a></div> + <div class="col-sm-6 annotation"><a href="{file}.sig"><span class="glyphicon glyphicon-tag" aria-hidden="true"></span> Signature</a></div> + </div> + <div class="btn-group" role="group"> + <a href="{file}" target="_BLANK" type="button" class="btn btn-info col-sm-12"><span class="glyphicon glyphicon-download-alt" aria-hidden="true"></span> Télécharger <small>{version}</small></a> + </div> +</div> +</script> + +<style> +/* +############################################################################### + Style sheet for the cards +############################################################################### +*/ +#cards-list:after { + content:''; + display:block; + clear: both; +} + +.card { + margin-bottom:20px; + width:270px; + float:left; + min-height: 1px; + margin-right: 10px; + margin-left: 10px; +} + +.card .panel-body > h3 { + margin-top:0; + margin-bottom:5px; + font-size:1.2em; +} + +.card-desc { + height:100px; + overflow: hidden; +} + +.card .btn-group { + width:100%; + margin-left: 0px; +} +.card > .btn-group > .btn{ + border-bottom:0; +} +.card > .btn-group { + border-left:0; + border-top-left-radius:0; + border-top-right-radius:0; + margin-left: 0px; +} +.card-comment { + font-size: 0.8em; + margin-top:-5px; +} +.card > .annotations { + text-align:center; + font-size:small; +} +</style> + +<script> +/* +############################################################################### + Script that loads the infos from javascript and creates the corresponding + cards +############################################################################### +*/ +$(document).ready(function () { + console.log("in load"); + $.getJSON('https://build.yunohost.org/images.json', function (images) { + $.each(images, function(k, infos) { + // Fill the template + html = $('#image-template').html() + .replace('{id}', infos.id) + .replace('{name}', infos.name) + .replace('{comment}', infos.comment || " ") + .replace('{image}', infos.image) + .replace('{version}', infos.version); + + if (infos.file.startsWith("http")) + html = html.replace(/{file}/g, infos.file); + else + html = html.replace(/{file}/g, "https://build.yunohost.org/"+infos.file); + + if ((typeof(infos.has_sig_and_sums) !== 'undefined') && infos.has_sig_and_sums == false) + { + var $html = $(html); + $html.find(".annotations").html(" "); + html = $html[0]; + } + $('#cards-list').append(html); + }); + }); +}); +</script> + diff --git a/install_es.md b/install_es.md new file mode 100644 index 00000000..d6046f61 --- /dev/null +++ b/install_es.md @@ -0,0 +1,80 @@ +# Guía de instalación + +Existenten varias mèneras de instalar YunoHost. El método y el hardware difieren un poco si quieres instalarlo en tu casa o en acceso remoto : **[ver el hardware compatible](/hardware_es)** + +Esta página enumera varios tipos de instalaciones, clasificos por categorías. + +--- + +<h1 style="font-weight: 100">Probar</h1> + +<div class="row"> + +<div class="col col-md-3 text-center"> +<a href="/try_es"><img height=150 src="/images/logo.png" style="vertical-align:bottom"><b><p>Servidor de demo</p></b></a> +</div> + +<div class="col col-md-3 text-center"> +<a href="/install_on_virtualbox_es"><img src="/images/virtualbox.png" height=150 style="vertical-align:bottom"><b><p>Probar en una máquina virtual</p></b></a> +</div> + +</div> + +<br> + +--- + +<h1 style="font-weight: 100">Instalar en casa</h1> + +<div class="row"> + +<div class="col col-md-3 text-center"> +<a href="/install_on_raspberry_es"><img src="/images/raspberrypi.jpg" height=150 style="vertical-align:bottom"><b><p>En un Raspberry Pi</p></b></a> +</div> + +<div class="col col-md-3 text-center"> +<a href="/install_on_arm_board_es"><img src="/images/olinuxino.jpg" height=150 style="vertical-align:bottom; padding:20px"><b><p>En un ARM board</p></b></a> +</div> + +<div class="col col-md-3 text-center"> +<a href="/install_iso_es"><img src="/images/computer.png" height=150 style="vertical-align:bottom"><b><p>En un ordenador estándar</p></b></a> +</div> + +</div> + +<br> + +--- + +<h1 style="font-weight: 100">Instalación remota</h1> + +<div class="alert alert-info" markdown="1"> +<span class="glyphicon glyphicon-heart"></span> Proveedores de Internet asociativos cerna de ti pueden proponerte un *Servidor Virtual Privado* (VPS), administrado por humanos que respetan los usuarios y la [Neutralitad de Internet](https://es.wikipedia.org/wiki/Neutralidad_de_red) ! Ver [esta página](https://db.ffdn.org/) por mas informaciones. +</div> + +<div class="row"> + +<div class="block-center text-center"> +<a href="/install_on_vps_es"><img src="/images/vps.png" height=150 style="vertical-align:bottom; text-align:center"><b><p>En un servidor dedicado o virtual (VPS)</p></b></a> +</div> + +</div> + +<br> + +--- + +<h1 style="font-weight: 100">Avancé / autres</h1> + +<div class="row"> + +<div class="col col-md-3 text-center"> +<a href="/vagrant_es"><img src="/images/vagrant.png" height=150 style="vertical-align:bottom"><b><p>Con Vagrant</p></b></a> +</div> + +<div class="col col-md-3 text-center"> +<a href="/install_on_debian_es"><img height=150 src="/images/debian-logo.png" style="vertical-align:bottom"> +<b><p>Sur Debian 9/Stretch</p></b></a> +</div> + +</div> diff --git a/install_iso_es.md b/install_iso_es.md new file mode 100644 index 00000000..8cd26815 --- /dev/null +++ b/install_iso_es.md @@ -0,0 +1,38 @@ +# Instalación en un ordenador + +*Encontrar otros medios de instalar Yunohost **[aquí](/install_es)**.* + +## Prerrequisitos + +<img src="/images/laptop.png" width=200> +<img src="/images/desktop.jpg"> +<img src="/images/nettop.jpg"> + +* Un ordenador compatible x86 dedicado a YunoHost : portátil, netbook, ordenador de escritorio. Puedes reutilizar calquiera máquina con **256 Mo de RAM mínimo** +* Otro ordenador para examinar esta guía y acceder a tu servidor +* Un [proveedor de Internet ético](/isp_fr), de preferencia con acceso de buena velocidad (ascendente) +* Una **memoria USB** con capacidad mínima de 1Go **O** un **CD en blanco** estándar +* ***Casos particulares*** : si tu servidor no tiene tarjeta gráfica, hay que preparar un iso que se inicie sobre el puerto de serie](https://github.com/luffah/debian-mkserialiso). + +--- + +## Etapas de instalación + +<a class="btn btn-lg btn-default" href="/images_fr">0. Descargar la imagen ISO</a> + +<a class="btn btn-lg btn-default" href="/burn_or_copy_iso_fr">1. Copiar la imagen ISO</a> + +<a class="btn btn-lg btn-default" href="/boot_and_graphical_install_fr">2. Encender e instalar</a> + +<a class="btn btn-lg btn-default" href="/postinstall_fr">3. Post-instalación</a> + +--- + +Para conectarse directamente al ordenador (únicamente en local) : +* Usuario : **root** +* Contraseña : **yunohost** + + +## Casos específicos / avanzados + +si el ordenador no tiene tarjeta gráfica pero sí tiene un puerto de serie : hay que modificar el ISO para un inicio con la consola de serie. Una solución es utilizar [un script que modifica las opciones de inicio](https://github.com/luffah/debian-mkserialiso). diff --git a/install_manually_es.md b/install_manually_es.md new file mode 100644 index 00000000..8f273361 --- /dev/null +++ b/install_manually_es.md @@ -0,0 +1,18 @@ +# Instalar YunoHost manualmente + +Una vez que tienes acceso a tu servidor (directamente o con SSH), puedes instalar Yunohost ejecutando este comando como root : + +```bash +curl https://install.yunohost.org | bash +``` + +<small>*(Si `curl` no está instalado en tu sistema, tal vez tendrás que instalarlo con `apt install curl`. De otro modo, si el comando no muestra nada, puedes intentar `apt install ca-certificates`)*</small> + +Cuando la instalación esté terminada, habrá que [**proceder a la post-instalación**](/postinstall) + +--- + +**Nota para los usuarios expertos preocupados por el enfoque `curl|bash`** + +Si no te gusta utilizar `curl|bash` (ou comandos similares) para desplegar software, toma el tiempo de leer ["Is curl|bash insecure?"](https://sandstorm.io/news/2015-09-24-is-curl-bash-insecure-pgp-verified-install) en el blog de Sandstorm, y también [esta discusión en Hacker News](https://news.ycombinator.com/item?id=12766350). + diff --git a/install_on_arm_board_es.md b/install_on_arm_board_es.md new file mode 100644 index 00000000..4c3b25fd --- /dev/null +++ b/install_on_arm_board_es.md @@ -0,0 +1,51 @@ +# Instalar Yunohost en una tarjeta ARM + +*Encontrar otros medios de instalar Yunohost **[aquí](/install_es)**.* + +<center> +<img src="/images/olinuxino.jpg" width=250 style="padding-bottom:20px"> +<img src="/images/micro-sd-card.jpg"> +</center> + +<div class="alert alert-info" markdown="1"> +Antes de alojar tu propio servidor en tu casa, te recomendamos que consultes las [posibles restricciones impuestas por tu Proveedor de Internet](/isp). Si tu proveedor es demasiado restrictivo, puedes utilizar un VPN para eludir estas restricciones. +</div> + +<div class="alert alert-warning" markdown="1"> +YunoHost todavía no es compatible con las tarjetas ARM64. Para obtener más informaciones, ver [este ticket](https://github.com/YunoHost/issues/issues/438). +</div> + +- Una tarjeta ARM con un procesador de 500 MHz et 512 Mo de memoria RAM ; +- Un adaptador de corriente para alimentar la tarjeta ; +- Una tarjeta microSD : al menos **8 Go** y **Clase 10** (por ejemplo una [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ; +- Un cable ethernet/RJ-45 para conectar la carte con el router / caja internet. (Con el Raspberry Pi 0, puedes conectar tu tarjeta con un cable OTG y un adaptador Wifi USB.) +- Un [proveedor de Internet ético](/isp_fr), de preferencia con una buena velocidad de upload. + +--- + +## Instalación con la imagen pre-instalada (recomendada) + +<a class="btn btn-lg btn-default" href="/images_fr">0. Descargar la imagen pre-instalada para tu tarjeta ARM</a><br><small>Si no existe una imagen dedicada a tu tarjeta, puedes seguir la sección "Instalación encima de ARMbian".</small> + +<a class="btn btn-lg btn-default" href="/copy_image_fr">1. Poner la imagen en tu tarjeta SD</a> + +<a class="btn btn-lg btn-default" href="/plug_and_boot_fr">2. Conectar y encender</a> + +<a class="btn btn-lg btn-default" href="/ssh_fr">3. Conectarse en SSH</a> + +<a class="btn btn-lg btn-default" href="/postinstall_fr">4. Proceder a la post-instalación</a> + +--- + +## Instalación encima de ARMbian + +<a class="btn btn-lg btn-default" href="https://www.armbian.com/download/">0. Descargar la imagen ARMbian para tu tarjeta ARM</a> + +<a class="btn btn-lg btn-default" href="/copy_image_fr">1. Poner la imagen en tu tarjeta SD</a> + +<a class="btn btn-lg btn-default" href="/plug_and_boot_fr">2. Conectar y encender</a> + +<a class="btn btn-lg btn-default" href="/ssh_fr">3. Conectarse en SSH</a> + +<a class="btn btn-lg btn-default" href="/install_manually_fr">4. Proceder a la post-instalación genérica</a> + diff --git a/install_on_raspberry_es.md b/install_on_raspberry_es.md new file mode 100644 index 00000000..b683416a --- /dev/null +++ b/install_on_raspberry_es.md @@ -0,0 +1,60 @@ +# Instalar YunoHost en un Raspberry Pi + +*Encontrar otros medios de instalar Yunohost **[aquí](/install_es)**.* + +<center> +<img src="/images/raspberrypi.jpg" width=300 style="padding-bottom:20px"> +<img src="/images/micro-sd-card.jpg"> +</center> + +<div class="alert alert-info" markdown="1"> +Antes de alojar tu propio servidor en tu casa, te recomendamos que consultes las [posibles restricciones impuestas por tu Proveedor de Internet](/isp). Si tu proveedor es demasiado restrictivo, puedes utilizar un VPN para eludir estas restricciones. +</div> + +## Prerrequisitos + +- Un Raspberry Pi 0, 1, 2, 3 o 4 ; +- Un adaptador de corriente para alimentar la tarjeta ; +- Una tarjeta microSD : al menos **8 Go** y **Clase 10** (por ejemplo una [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ; +- Un cable ethernet/RJ-45 para conectar la tarjeta con tu enrutador o tu caja internet. (Con el Raspberry Pi 0, puedes conectar tu tarjeta con un cable OTG y un adaptador Wifi USB.) +- Un [proveedor de Internet ético](/isp_fr), de preferencia con buena velocidad de upload. + +--- + +## Instalación con la imagen pre-instalada (recomendada) + +<a class="btn btn-lg btn-default" href="/images_fr">1. Descargar la imagen para Raspberry Pi</a> + +<a class="btn btn-lg btn-default" href="/copy_image_fr">2. Poner la imagen en tu tarjeta SD</a> + +<a class="btn btn-lg btn-default" href="/plug_and_boot_fr">3. Conectar y encender</a> + +<a class="btn btn-lg btn-default" href="/ssh_fr">4. Conectarse en SSH</a> + +<a class="btn btn-lg btn-default" href="/postinstall_fr">5. Proceder a la post-instalación</a> + +--- + +## Instalación manual (desaconsejada) + +<div class="alert alert-warning" markdown="1"> +No recomendamos la instalación manual porque es más técnica y más larga que la instalación vía la imagen per-instalada. Esta documentación sobre todo está destinada a los usuarios expertos. +</div> + +<div class="alert alert-warning" markdown="1"> +Las últimas versiones de Raspbian necesitan una pantalla y un teclado porque ya no es posible conectarse directamente por SSH al Raspberry por defecto. Sin embargo, es posible reactivar el inicio de SSH al boot : solo hay que poner un fichero llamado `ssh` (vacío, sin extensión) en la partición boot de la tarjeta SD. +</div> + +0. Instalar Raspbian Stretch Lite ([instrucciones](https://www.raspberrypi.org/downloads/raspbian/)) en la tarjeta SD. + +1. Conéctate con ssh al Raspberry Pi con el usuario pi. Define una contraseña root con +```bash +sudo passwd root +``` + +2. Modifica `/etc/ssh/sshd_config` para autorizar root a que se conecte con ssh, reemplazando `PermitRootLogin without-password` por `PermitRootLogin yes`. Recarga el daemon ssh con `service ssh reload`, y luego re-conéctate como root. + +3. Desconéctate et reconéctate con el usuario root esta vez. + +4. Sigue con el <a href="/install_manually_es">procedimiento de instalación manual genérico</a>. + diff --git a/install_on_virtualbox_es.md b/install_on_virtualbox_es.md new file mode 100644 index 00000000..48a8107b --- /dev/null +++ b/install_on_virtualbox_es.md @@ -0,0 +1,77 @@ +# Instalar YunoHost en VirtualBox + +*Encontrar otros medios de instalar Yunohost **[aquí](/install_es)**.* + +## Prerrequisitos + +<img src="/images/virtualbox.png" width=200> + +* Un ordenador x86 con VirtualBox instalado y bastante RAM disponible para iniciar una pequeña máquina virtual. +* La última **imagen ISO YunoHost** estable, disponible [aquí](/images_es). + +<div class="alert alert-warning" markdown="1"> +N.B. : Instalar YunoHost en VirtualBox es útil para probar la distribución. Para realmente autoalojarse a largo plazo, probablement necesitarás una máquina virtual (viejo ordenador, tarjeta ARM...) o un VPS. +</div> + +--- + +## <small>1.</small> Crear una nueva máquina virtual + +<img src="/images/virtualbox_1.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> + +<br> + +* No es grave si sólo la versión 32-bit está disponible, pero en este caso asegúrate que 32 bit previamente. +* 256Mo de RAM es el requisito mínimo, 512Mo está recomendado (1Go o más si puedes). +* 8Go de almacenaje mínimo requisito. + +--- + +## <small>2.</small> Modificar la configuración de la red + +Ir a **Settings** > **Network* : + +<img src="/images/virtualbox_2.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> + +<br> + +* Selectiona `Bridged adapter` + +* Elige tu interfaz según su nombre : + + **wlan0** si estás conectado sin hilo, **eth0** de otro modo. + +--- + +## <small>3.</small> Inicia tu máquina virtual + +Inicia tu máquina virtual + +<img src="/images/virtualbox_2.1.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> + +<br> + +Aquí tienes que seleccionar la imagen ISO, luego deberías ver esta pantalla de bienvenida. + +<br> + +Si te encuentras con el error "VT-x is not available", probablement hay que activar (enable) la virtualización en la opciones del BIOS de tu ordenador. + +<br> + +<img src="/images/virtualbox_3.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> + +<br> + +* Elige `Instalación gráfica` + +* Selecciona tu idioma, tu ubicación, la distribución de tu teclado y deja el ordenador terminar el proceso :-) + +--- + +## <small>4.</small> Efectuar la post-instalación + +Después del reinicio, la máquina debería proponerte de efectuar la post-instalación : + +<a class="btn btn-lg btn-default" href="/postinstall">Post-install +documentation</a> diff --git a/install_on_vps_es.md b/install_on_vps_es.md new file mode 100644 index 00000000..89eb2504 --- /dev/null +++ b/install_on_vps_es.md @@ -0,0 +1,20 @@ +# Instalación en un servidor dedicado + +*Encontrar otros medios de instalar Yunohost **[aquí](/install_es)**.* + +## Prerrequisitos + +<img src="/images/vps.png" width=250> + +* Un servidor dedicado o virtual +* con al menos **512MB** RAM +* y **Debian 9.x (Stretch) 64bits** como sistema operativo + +--- + +## Etapas de instalación + +<a class="btn btn-lg btn-default" href="/install_manually_fr">1. Instalar manualmente</a> + +<a class="btn btn-lg btn-default" href="/postinstall_fr">2. Post-instalación</a> + diff --git a/postinstall_es.md b/postinstall_es.md new file mode 100644 index 00000000..397e8f8f --- /dev/null +++ b/postinstall_es.md @@ -0,0 +1,63 @@ +# Post-instalación + +La etapa que llamamos « **post-instalación** » de hecho es la etapa de configuración inicial de Yunohost. Se ejecuta después de la **instalación** del sistema mismo. + +### Vía la interfaz web + +Puedes acceder a la post-instalación gráfica entrando en un navegador web : +* la dirección **IP local de tu servidor** si éste está conectado a tu red local (en general `192.168.x.x`, ver ['Encontrar mi IP' en la página sobre SSH](/ssh)) +* la dirección **IP pública de tu servidor** si éste no está conectado a tu red local (por ejemplo, si es un VPS, tu proveedor debería haberte transmitido la dirección IP). + +Durante la primera visita, encontrarás muy probablemente una advertencia de seguridad relacionada al certificado utilizado. De momento, tu servidor utiliza un certificado autofirmado. Después, podrás utilizar un certificado automáticamente reconocido por los navegadores como descrito en la página sobre los [Certificados](/certificate). Mientras tanto, añade una excepción de seguridad para aceptar el certificado vigente. + +Luego, llegas en esta página : + +<img style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);" src="/images/postinstall_web.png"> + +*<p class="text-muted">Vistazo de la post-instalación Web</p>* + +### Vía la interfaz de línea de comando + +También puedes acceder a la post-instalación entrando el comando `yunohost tools postinstall` directamente en el servidor o [en SSH](/ssh). + +<img style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);" src="/images/postinstall_cli.png"> + +*<p class="text-muted">Vistazo de la post-instalación con línea de comando</p>* + +## Informaciones solicitadas + +### Dominio principal + +Es el nombre de dominio que permitirá el acceso a tu servidor así como al portal de autenticación de los usuarios. Entonces estará **visible por todo el mundo** : elígelo en consecuencia. + +* YunoHost te propone un DNS dinámico, proveando nombres de dominio del tipo *midominio.nohost.me*, *midominio.noho.st* o *midominio.ynh.fr*. Si no posees un nombre de dominio y/o que quieres aprovechar de este servicio, elige un dominio terminando con `.nohost.me`, `.noho.st` o `.ynh.fr`. Si no está utlizado ya, el dominio automáticamente estará vinculado a tu servidor Yunohost, y no tendrás más etapas de configuración. + +* Si, en cambio, dominas la noción de **DNS**, puedes utilizar tu propio nombre de dominio. En este caso, refiérete a la página [yunohost.org/dns](/dns_es) por más información. + +* Si no tienes nombre de dominio y que no quieres uno que acabe con *.nohost.me*, *.noho.st* ou *.ynh.fr*, puedes utilizar un dominio local. Más información sobre cómo [acceder a tu servidor desde la red local](/dns_local_network_es). + + +### Contraseña de administración + +Es la contraseña que permitirá acceder a la [interfaz de administración](/admin_es) de tu servidor. También podrás utilizarla para conectarte remotamente vía **SSH**, o vía **SFTP** para transferir ficheros. + +De manera general, ésta es la **llave de entrada en tu sistema**, pues piensa en **[elegirla atentamente](https://es.wikihow.com/escoger-una-contrase%C3%B1a-segura)**. + +<br> + +--- + +## Enhorabuena ! + +Si llegas aquí después de haber visto “Yunohost fue instalado con éxito" desde tu navegador ou tu interfaz de línea de comando, pues felicitaciones ! + + +### ¿ Y ahora ? + +- Si te auto-alojas en casa y sin VPN, tienes que asegurarte que [los puertos de tu caja internet estén redirigidos](isp_box_config_es) ; +- Si utilizas tu propio nombre de dominio (i.e. que no sea un nohost.me / + noho.st), tienes que [configurar el nombre de dominio según la configuración recomendada](dns_config_es) ; +- Si no puedes configurar el nombre de dominio de momento (porque todavía no lo has comprado, ou porque es un dominio test), puedes solucionar temporalmente el problema con las instrucciones del último párrafo [aquí](dns_local_network_es) ; +- No te asustes demasiado por [la advertencia a propósito del certificado](certificate_es), tendrás la posibilidad de obtener un certificado Let's Encrypt :). +- Echa un vistazo a las [aplicaciones disponibles](apps_es) ! + diff --git a/try_es.md b/try_es.md new file mode 100644 index 00000000..89e5e6d6 --- /dev/null +++ b/try_es.md @@ -0,0 +1,29 @@ +#Probar YunoHost + +<div class="alert alert-warning" markdown="1"> +**Nota :** Este demo puede dejar de functionar de vez en cuando. +<br> + +</div> + +<br> + + <div class="row text-center"> + <div class="col-md-6"> + <a href="https://demo.yunohost.org/" target="_blank" class="btn btn-success btn-lg"><span class="glyphicon glyphicon-user"></span> Interfaz de usuario</a> + <p class="text-muted">Utilisateur : demo<br>Contraseña : demo</p> + </div> + <div class="col-md-5"> + <a href="https://demo.yunohost.org/yunohost/admin" target="_blank" class="btn btn-primary btn-lg"><span class="glyphicon glyphicon-lock"></span> Interfaz de administración</a> + <p class="text-muted">Contraseña : demo</p> + </div> + </div> + +<br> + +<p class="text-center" markdown="1"> +***El servidor de demo es ofrecido generosamente por +<a href="https://www.gitoyen.net" target="_blank">Gitoyen</a>*** +</p> + + diff --git a/vagrant_es.md b/vagrant_es.md new file mode 100644 index 00000000..2edf6375 --- /dev/null +++ b/vagrant_es.md @@ -0,0 +1,60 @@ +# Vagrant y YunoHost + +*Si necesitas una máquina virtual para testar tu código, es mejor utilizar directamente [ynh-dev](https://github.com/yunohost/ynh-dev)* + +*Encontrar otros medios de instalar Yunohost **[aquí](/install_es)**.* + +<img src="/images/vagrant.png" width=250> + +**Prerrequisitos** : Un ordenador x86 con VirtualBox instalado y bastante RAM disponible para iniciar una pequeña máquina virtual. + +--- + +## Inicio + +Crear una carpeta para el proyecto : +```bash +mkdir YunoHost +cd YunoHost +``` + +El comando siguiente iniciará el proyecto con una imagen básica de Yunohost +```bash +vagrant box add yunohost/stretch-unstable https://build.yunohost.org/yunohost-stretch-unstable.box --provider virtualbox +vagrant init yunohost/stretch-unstable +``` +Luego, tienes que activar la red para la instancia Yunohost : +```bash +sed -i 's/# config\.vm\.network "private_network"/config.vm.network "private_network"/' Vagrantfile +``` + +--- + +## Instalación + +Iniciar la máquina virtual +```bash +vagrant up +``` + +Conectarse a la máquina virtual iniciada +```bash +vagrant ssh +``` + +Actualizar el sistema. +```bash +apt update && apt dist-upgrade +``` + +Puedes acceder a tu VM vía el IP 192.168.33.10. + +Las direcciones IP están asignadas por defecto pero pueden ser cambiadas en los parámetros de red del Vagrantfile. + +--- + +*Una vez la instalación terminada, puedes proceder a la post-instalación : +**[yunohost.org/postinstall](/postinstall_es)** * + + + From d0b543e8911fee27b6e9f94c8730103b6df0858d Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Wed, 14 Aug 2019 15:51:04 +0200 Subject: [PATCH 081/360] Small fix for what it should really be ... so that we can screencast the page. Will actually implement it later --- install_on_raspberry.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install_on_raspberry.md b/install_on_raspberry.md index 816ca748..9acf6fb1 100644 --- a/install_on_raspberry.md +++ b/install_on_raspberry.md @@ -29,7 +29,7 @@ Before setting up a server at home, it is recommended that you know the [possibl <a class="btn btn-lg btn-default" href="/plug_and_boot">2. Plug & boot</a> -<a class="btn btn-lg btn-default" href="/ssh">3. Connect to your server with SSH</a> +<a class="btn btn-lg btn-default" href="/ssh">3. Connect to your server with your web browser</a> <a class="btn btn-lg btn-default" href="/postinstall">4. Proceed to post-installation</a> From c5c35bb225a312de76d43f14170467f154b735ad Mon Sep 17 00:00:00 2001 From: gmar <gmar@marsan.me> Date: Wed, 14 Aug 2019 16:55:35 +0200 Subject: [PATCH 082/360] More spanish translation for the website --- admin_es.md | 37 +++++++++++++++ commandline_es.md | 30 ++++++++++++ dns_local_network_es.md | 38 ++++++++++++++++ dns_nohost_me_es.md | 2 +- index_es.md | 20 ++++---- install_es.md | 6 +-- install_on_raspberry_es.md | 2 +- install_on_virtualbox_es.md | 5 +- postinstall_es.md | 2 +- ssh_es.md | 91 +++++++++++++++++++++++++++++++++++++ 10 files changed, 214 insertions(+), 19 deletions(-) create mode 100644 admin_es.md create mode 100644 commandline_es.md create mode 100644 dns_local_network_es.md create mode 100644 ssh_es.md diff --git a/admin_es.md b/admin_es.md new file mode 100644 index 00000000..3ed8aee7 --- /dev/null +++ b/admin_es.md @@ -0,0 +1,37 @@ +# La interfaz de administración web + +Yunohost tiene una interfaz gráfica de administración. El otro método consiste en utilizar la [linea de comando](/commandline_es). + +### Acceso + +La interfaz admin está accesible desde tu instancia Yunohost en esta dirección : https://ejemplo.org/yunohost/admin (reemplaza ejemplo.org por tu nombre de dominio) + +<div class="text-center" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> +<img src="/images/manage.png" style="max-width:100%;"> +</div> + + +### Reinicia la contraseña del administrador + +Para reiniciar la contraseña de administración de Yunohost (con el usuario root) : + +```bash +$ yunohost-reset-ldap-password +``` + +Una contraseña provisional será creada, podrás utilizarla para luego definir una nueva contraseña. + + +### Cómo mover la carpeta de una aplicación + +Para cambiar la carpeta donde está una aplicación, sólo algunos comandos son necesarios : desplazar el contenido, crear un vínculo simbólico y definir los derechos de acceso. + +Ejemplo con WordPress : +```bash +# Desplazamiento del wordpress hacia otro soporte +$ sudo mv /var/www/wordpress /mon/dossier/cible +# Creación del vínculo simbólico +$ sudo ln -s /media/disqueexterne/wordpress /var/www/wordpress +# El directorio debe pertenecer a www-data +sudo chown -R www-data:www-data /media/externalharddrive/wordpress +``` diff --git a/commandline_es.md b/commandline_es.md new file mode 100644 index 00000000..3b829818 --- /dev/null +++ b/commandline_es.md @@ -0,0 +1,30 @@ +# Administrar YunoHost con la interfaz de línea de comandos + +La interfaz de línea de comandos (CLI) es, en informática, la manera original (y más técnica) de interactuar con un ordenador. Está generalmente considera como más completa, más potente y eficaz que las interfaces gráficas, aunque sea más difícil de aprenderla. + +En el contexto de Yunohost, o de la administración de sistemas en general, la línea de comandos comúnmente se utiliza después de haberse [conectado en SSH](/ssh_es). + +<div class="alert alert-info" markdown="1"> +Proveer un tutorial completo sobre la línea de comandos saldría del marco de la documentación de Yunohost : por eso, refiérete a totorales como [éste](https://www.fing.edu.uy/inco/cursos/sistoper/recursosLaboratorio/tutorial0.pdf) o [éste (en)](http://linuxcommand.org/). Pero no te preocupes : no hace falta ser un experto para comenzar a utilizarla ! +</div> + +El comando `yunohost` puede ser utilizado para administrar tu servidor o realizar las mismas acciones que en la interfaz gráfica webadmin. Hay que iniciarla como usuario `root`, o como el usuario `admin` poniendo `sudo` antes del comando. (ProTip™ : puedes convertirte en usuario `root` vía el comando `sudo su` cuando eres `admin`.) + +Los comandos Yunohost tienen este tipo de estructura : + +```bash +yunohost app install wordpress --label Webmail + ^ ^ ^ ^ + | | | | + categoría acción argumento opción +``` + +No dudes en navegar ni en pedir información a propósito de una categoría o acción utilizando la opción `--help`. Por ejemplo, estos comandos : + +```bash +yunohost --help +yunohost user --help +yunohost user create --help +``` + +de manera sucesiva van a enumerar todas las categorías disponibles, luego las acciones de la categoría `user`, y luego explicar cómo utilizar la acción `user create`. Deberías notar que el árbol de los comandos Yunohost tiene la misma estructura que las páginas del webadmin. \ No newline at end of file diff --git a/dns_local_network_es.md b/dns_local_network_es.md new file mode 100644 index 00000000..045d4b4d --- /dev/null +++ b/dns_local_network_es.md @@ -0,0 +1,38 @@ +#Acceder a tu servidor desde la red local + +Después de haber instalado tu servidor, es probable que tu nombre de dominio no esté accesible desde la red local donde se encuentra el servidor. Esto es un problema que se llama el [hairpinning](https://en.wikipedia.org/wiki/Hairpinning). + +Para resolver este problema, es preciso configurar el DNS de tu router o, por defecto, el o los archivos hosts de tu ordenadores clientes. + +### Obtener la dirección IP local del servidor +A fin de configurar el DNS o el archivo hosts, tienes que conocer la dirección IP privada de tu servidor. Esta dirección sólo puede ser utilizada en la red local donde está el servidor, y no está vinculada con tu dirección pública utilizada en Internet. + +Puedes descubrir la dirección privada de tu servidor de varias maneras : +- En la pantalla de conexión de Yunohost en el mismo servidor : +<img src="/images/ynh_login.png" width=600> + +- Desde la interfaz de administración de tu servidor Yunohost : + en Estado del servidor > Red +<img src="/images/ynh_admin_etat_ip.png" width=900> + +- O desde tu router o tu caja Internet, dependiendo de su modelo. + +## Configurar el DNS de la caja Internet o del router + +Vas a crear una redirección que estará activa en toda tu red local. El objetivo es crear una redirección DNS hacia el IP de tu servidor en tu caja Internet. Hay que acceder a la interfaz de configuración de tu caja y a los parámetros DNS, y luego crear una redirección local (por ejemplo, yunohost.local puede redigir hacia 192.168.21). + +## Configurar el archivo [hosts](https://es.wikipedia.org/wiki/Archivo_hosts) del ordenador cliente +Sólo deberías modificar el archivo hosts si no puedes modificar el DNS de tu caja Internet / router, porque el archivo hosts únicamente afectará el ordenador en el cual el archivo esté modificado. + +- En Windows, encontrarás el archivo hosts aquí : + `%SystemRoot%\system32\drivers\etc\` + > Es preciso visualizar los archivos y sistemas escondidos para ver el archivo hosts. +- En sistemas UNIX (GNU/Linux, Mac OS), lo encontrarás aquí : + `/etc/hosts` + > Necesitarás derechos root para modificar el archivo. + +Simplemente añade al final del archivo hosts una linea conteniendo la dirección IP privada del servidor y tu nombre de dominio + +```bash +192.168.1.62 domain.tld +``` diff --git a/dns_nohost_me_es.md b/dns_nohost_me_es.md index c8b2be78..9a285056 100644 --- a/dns_nohost_me_es.md +++ b/dns_nohost_me_es.md @@ -47,7 +47,7 @@ Si reinstalas tu servidor y quieres utilizar un dominio automático que ya utili Si quieres utilizar otro dominio automático en tu servidor, primero tienes que cancelar el que ya está configurado, siguiendo estas instrucciones : 1. Suprimir el dominio de tu instancia (vía webadmin o `yunohost domain remove`). **Cuidado : esto suprimirá todas las aplicaciones instaladas en este dominio así como sus datos**. 2. Pedir la supresión de tu suscripción [en el hilo de discusión dedicado del foro](https://forum.yunohost.org/t/nohost-domain-recovery/442). -3. Suprimir los ficheros de configuración automática de tu instancia (únicamente desde la linea de comando por ahora) : `sudo rm /etc/cron.d/yunohost-dyndns && sudo rm -r /etc/yunohost/dyndns` +3. Suprimir los archivos de configuración automática de tu instancia (únicamente desde la linea de comando por ahora) : `sudo rm /etc/cron.d/yunohost-dyndns && sudo rm -r /etc/yunohost/dyndns` Luego podrás registrar un nuevo dominio automático. diff --git a/index_es.md b/index_es.md index 3bc6ceed..140c2bd4 100644 --- a/index_es.md +++ b/index_es.md @@ -31,7 +31,7 @@ <div class="boring-part" markdown="1"> - <h1>YunoHost <small>es un herramiento que permite installar et utilizar facilamente sur propio servidor.</small></h1> + <h1>YunoHost <small>es una herramienta que permite instalar y utilizar fácilmente su propio servidor.</small></h1> <div class="home-panel"> @@ -46,8 +46,8 @@ <div class="row cf"> <div class="col-md-7"> - <h1>Installar <small>su sevidor simplemente, tienes todo a casa</small></h1> - <p><br /><a href="/hardware">Ver los requisitos previos</a></p> + <h1>Installar <small>su servidor simplemente, tienes todo en casa</small></h1> + <p><br /><a href="/hardware">Ver los prerrequisitos</a></p> </div> <div class="col-md-4"> <div class="feature-pic"> @@ -65,8 +65,8 @@ </div> </div> <div class="col-md-7 text-right"> - <h1>Disfrutar <small>de sus aplicaciones web, y crea su esquina de Internet</small></h1> - <p><br /><a href="/apps_fr">Lista de aplicationes disponible</a></p> + <h1>Disfrutar <small>de sus aplicaciones web, y crea tu esquina de Internet</small></h1> + <p><br /><a href="/apps_fr">Lista de aplicaciones disponible</a></p> </div> </div> @@ -74,8 +74,8 @@ <div class="row cf"> <div class="col-md-7"> - <h1>Gestionar <small>su servidor como quieras : via web, móvil o en línea de comandos</small></h1> - <p><br /><a href="/try_fr">Intentar el interfaz de administración</a></p> + <h1>Gestionar <small>tu servidor como quieras : vía web, móvil o en línea de comandos</small></h1> + <p><br /><a href="/try_fr">Intentar la interfaz de administración</a></p> </div> <div class="col-md-4"> <div class="feature-pic"> @@ -90,12 +90,12 @@ <div class="col-md-4 button-list"> <a class="btn btn-lg btn-block btn-primary" href="/userdoc_fr">Guía del usuario</a> <a class="btn btn-lg btn-block btn-info" href="https://ask.yunohost.org" target="_blank">Preguntas más frecuentes</a> - <a class="btn btn-lg btn-block btn-success" href="/whatsyunohost_fr">Que es YunoHost ?</a> + <a class="btn btn-lg btn-block btn-success" href="/whatsyunohost_fr">¿ Que es YunoHost ?</a> <a class="btn btn-lg btn-block btn-warning" href="/contribute_fr">Cómo contribuir</a> <a class="btn btn-lg btn-block btn-danger btn-support" href="http://news.yunohost.org">últimas noticias</a> </div> <div class="col-md-7 text-right"> - <h1>Explorar <small>las posibilidad de su servidor, y aprender pourque es importante</small></h1> + <h1>Explorar <small>las posibilidad de su servidor, y aprender porque es importante</small></h1> <p><br /><a href="/docs_fr">Leer la documentación</a></p> </div> </div> @@ -103,7 +103,7 @@ <hr /> <div class="text-center"> - <h1>¡ Hey ! Somos humanos<br /><small> Si tiene algun pregunta, un problema, o simplemente estás interesado, ven decir "¡ Hola !" sobre nuetra salón de discusión clic en el botón abajo <span class="glyphicon glyphicon-share-alt"></span> </small></h1> + <h1>¡ Hey ! Somos humanos<br /><small> Si tiene alguna pregunta, un problema, o simplemente estás interesado, ven decir "¡ Hola !" sobre nuestro salón de discusión clic en el botón abajo <span class="glyphicon glyphicon-share-alt"></span> </small></h1> <p class="liberapay"> <a href="https://liberapay.com/YunoHost" target="_blank"><img src="/images/liberapay_logo.svg" alt="Donation button" title="Liberapay" /></a> diff --git a/install_es.md b/install_es.md index d6046f61..0550dab8 100644 --- a/install_es.md +++ b/install_es.md @@ -1,8 +1,8 @@ # Guía de instalación -Existenten varias mèneras de instalar YunoHost. El método y el hardware difieren un poco si quieres instalarlo en tu casa o en acceso remoto : **[ver el hardware compatible](/hardware_es)** +Existen varias maneras de instalar YunoHost. El método y el hardware difieren un poco si quieres instalarlo en tu casa o en acceso remoto : **[ver el hardware compatible](/hardware_es)** -Esta página enumera varios tipos de instalaciones, clasificos por categorías. +Esta página enumera varios tipos de instalaciones, clasificados por categorías. --- @@ -64,7 +64,7 @@ Esta página enumera varios tipos de instalaciones, clasificos por categorías. --- -<h1 style="font-weight: 100">Avancé / autres</h1> +<h1 style="font-weight: 100">Avanzado / otros</h1> <div class="row"> diff --git a/install_on_raspberry_es.md b/install_on_raspberry_es.md index b683416a..4863e975 100644 --- a/install_on_raspberry_es.md +++ b/install_on_raspberry_es.md @@ -42,7 +42,7 @@ No recomendamos la instalación manual porque es más técnica y más larga que </div> <div class="alert alert-warning" markdown="1"> -Las últimas versiones de Raspbian necesitan una pantalla y un teclado porque ya no es posible conectarse directamente por SSH al Raspberry por defecto. Sin embargo, es posible reactivar el inicio de SSH al boot : solo hay que poner un fichero llamado `ssh` (vacío, sin extensión) en la partición boot de la tarjeta SD. +Las últimas versiones de Raspbian necesitan una pantalla y un teclado porque ya no es posible conectarse directamente por SSH al Raspberry por defecto. Sin embargo, es posible reactivar el inicio de SSH al boot : solo hay que poner un archivo llamado `ssh` (vacío, sin extensión) en la partición boot de la tarjeta SD. </div> 0. Instalar Raspbian Stretch Lite ([instrucciones](https://www.raspberrypi.org/downloads/raspbian/)) en la tarjeta SD. diff --git a/install_on_virtualbox_es.md b/install_on_virtualbox_es.md index 48a8107b..be31c3d2 100644 --- a/install_on_virtualbox_es.md +++ b/install_on_virtualbox_es.md @@ -29,7 +29,7 @@ N.B. : Instalar YunoHost en VirtualBox es útil para probar la distribución. Pa ## <small>2.</small> Modificar la configuración de la red -Ir a **Settings** > **Network* : +Ir a **Settings** > **Network** : <img src="/images/virtualbox_2.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> @@ -73,5 +73,4 @@ Si te encuentras con el error "VT-x is not available", probablement hay que acti Después del reinicio, la máquina debería proponerte de efectuar la post-instalación : -<a class="btn btn-lg btn-default" href="/postinstall">Post-install -documentation</a> +<a class="btn btn-lg btn-default" href="/postinstall_es">Documentación de post-instalación</a> diff --git a/postinstall_es.md b/postinstall_es.md index 397e8f8f..015515f4 100644 --- a/postinstall_es.md +++ b/postinstall_es.md @@ -39,7 +39,7 @@ Es el nombre de dominio que permitirá el acceso a tu servidor así como al port ### Contraseña de administración -Es la contraseña que permitirá acceder a la [interfaz de administración](/admin_es) de tu servidor. También podrás utilizarla para conectarte remotamente vía **SSH**, o vía **SFTP** para transferir ficheros. +Es la contraseña que permitirá acceder a la [interfaz de administración](/admin_es) de tu servidor. También podrás utilizarla para conectarte remotamente vía **SSH**, o vía **SFTP** para transferir archivos. De manera general, ésta es la **llave de entrada en tu sistema**, pues piensa en **[elegirla atentamente](https://es.wikihow.com/escoger-una-contrase%C3%B1a-segura)**. diff --git a/ssh_es.md b/ssh_es.md new file mode 100644 index 00000000..650c5caf --- /dev/null +++ b/ssh_es.md @@ -0,0 +1,91 @@ +# SSH + +## ¿ Qué es SSH ? + +**SSH** est un acrónimo por Secure Shell, y representa un protocolo que permite controlar remotamente una máquina vía la línea de comandos (CLI). También es un comando básico disponible en los terminales de Linux y MacOS / OSX. En Windows, hace falta utilizar el programa [MobaXterm](https://mobaxterm.mobatek.net/download-home-edition.html) (después de haberlo iniciado, clicar sobre Session y lego SSH). + +## Durante la instalación de Yunohost + +#### Encontrar su IP + +Si instalas Yunohost en un VPS, tu proveedor debería haberte comunicado la dirección IP de tu servidor. + +Si instalas un servidor en tu casa (por ejemplo en Raspberry Pi u OLinuXino), tienes que encontrar el IP que fue atribuido a tu tarjeta cuando la conectaste a tu router / caja Internet. Hay varias maneras de hacerlo : + +- abre una terminal y teclea `sudo arp-scan --local` para enumerar los IP de las máquinas en la red local ; +- utiliza la interfaz de tu router caja internet para listar las máquinas conectadas, o mira los los ; +- conecta una pantalla en tu servidor, inicia una sesión y escribe `hostname --all-ip-address`. + +#### Conectarse + +Suponiendo que tu dirección IP sea `111.222.333.444`, abre una terminal y escribe : + +```bash +ssh root@111.222.333.444 +``` + +Ahora te piden una contraseña. Si es un VPS, tu proveedor ya te hará comunicado la contraseña. Si utilizaste una imagen pre-instalada (para x86 o tarjetas ARM), el password debería ser `yunohost`. + +<div class="alert alert-warning"> +Desde YunoHost 3.4, después de la post-instalación ya no es posible conectarse con el usuario `root`. En lugar de eso, hace falta **conectarse con el usuario `admin` !**. Incluso si el servidor LDAP fuera quebrado (haciendo que el usuario `admin` ya no fuera utilizable) todavía deberías poder conectarte con el usuario `root` desde la red local. +</div> + +#### ¡ Cambiar la contraseña root ! + +Después de haberte conectado por primera vez, tienes que cambiar la contraseña `root`. Tal vez el servidor te pida automáticamente que lo hagas. Si no es el caso, hay que utilizar el comando `passwd`. Es muy importante que elijas una contraseña bastante complicada. Nota que esta contraseña luego estará reemplazada por la contraseña admin elegida durante la post-instalación. + + +## En una instancia que ya está instalada + +Si instalaste tu servidor en casa y que quieres conectarte desde fuera de la red local, asegúrate que hayas previamente redirigido el puerto 22 de tu router / caja hacia tu servidor (con el usuario `admin` !) + +Si sólo conoces el IP de tu servidor : + +```bash +ssh admin@111.222.333.444 +``` + +Luego, entra la contraseña de administración que has elegido durante la post-instalación [post-installation](postinstall_es). + +Si has configurado tus DNS (o modificar tu `/etc/hosts`), puedes utilizar tu nombre de dominio : + +```bash +ssh admin@votre.domaine.tld +``` + +Si cambiaste el puerto SSH, hay que añadir `-p <numerodelpuerto>` al comando, por ej. : + +```bash +ssh -p 2244 admin@tu.dominio.tld +``` + +<div class="alert alert-info"> +Si estás conectado como `admin` y quieres ser `root` para tener más confort (por ejemplo, para no teclear `sudo` con cada comando), puedes convertirte en `root` tecleando `sudo su`. +</div> + +## ¿ Qué usuarios ? + +Por defecto, sólo el usuario `admin` puede conectarse en SSH en una instancia Yunohost. + +Los usuarios Yunohost creados vea la interfaz de administración están administrados por la base de datos LDAP. Por defecto, no pueden conectarse en SSH por razones de seguridad. Si necesitas absolutamente que uno de estos usuarios disponga de un acceso SSH, puedes utilizar el comando : +```bash +yunohost user ssh allow <username> +``` + +Del mismo modo, es posible cancelar el acceso SSH de un usuario con el comando : +```bash +yunohost user ssh disallow <username> +``` + +Finalmente, es posible añadir, suprimir y listar llaves SSH, para mejorar la seguridad del acceso SSH, con estos comandos : +```bash +yunohost user ssh add-key <username> <key> +yunohost user ssh remove-key <username> <key> +yunohost user ssh list-keys <username> +``` + +## SSH y seguridad + +N.B. : `fail2ban` proscribirá tu IP durante 10 minutos si fracasas más de 5 veces consecutivas en identificarte. Si esto ocurre y que quieres re-validar tu IP, puedes echar un vistazo a la página [fail2ban](/fail2ban_es) + +Encontrarás explicaciones más completa sobre la seguridad y SSH en [la página dedicada](security_es). From 80c97d14f97e42e1a6a5701cdd5503997984861e Mon Sep 17 00:00:00 2001 From: g-m-a-r <52879606+g-m-a-r@users.noreply.github.com> Date: Wed, 14 Aug 2019 17:02:12 +0200 Subject: [PATCH 083/360] Update ssh_es.md --- ssh_es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ssh_es.md b/ssh_es.md index 650c5caf..49645031 100644 --- a/ssh_es.md +++ b/ssh_es.md @@ -2,7 +2,7 @@ ## ¿ Qué es SSH ? -**SSH** est un acrónimo por Secure Shell, y representa un protocolo que permite controlar remotamente una máquina vía la línea de comandos (CLI). También es un comando básico disponible en los terminales de Linux y MacOS / OSX. En Windows, hace falta utilizar el programa [MobaXterm](https://mobaxterm.mobatek.net/download-home-edition.html) (después de haberlo iniciado, clicar sobre Session y lego SSH). +**SSH** est un acrónimo por Secure Shell, y representa un protocolo que permite controlar remotamente una máquina vía la línea de comandos (CLI). También es un comando básico disponible en los terminales de Linux y MacOS / OSX. En Windows, hace falta utilizar el programa [MobaXterm](https://mobaxterm.mobatek.net/download-home-edition.html) (después de haberlo iniciado, clicar sobre Session y luego SSH). ## Durante la instalación de Yunohost From 3654c442bb69ef816d35d6dbdf3a5c868c1a049e Mon Sep 17 00:00:00 2001 From: g-m-a-r <52879606+g-m-a-r@users.noreply.github.com> Date: Wed, 14 Aug 2019 17:03:44 +0200 Subject: [PATCH 084/360] Update ssh_es.md --- ssh_es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ssh_es.md b/ssh_es.md index 49645031..6b09207c 100644 --- a/ssh_es.md +++ b/ssh_es.md @@ -27,7 +27,7 @@ ssh root@111.222.333.444 Ahora te piden una contraseña. Si es un VPS, tu proveedor ya te hará comunicado la contraseña. Si utilizaste una imagen pre-instalada (para x86 o tarjetas ARM), el password debería ser `yunohost`. <div class="alert alert-warning"> -Desde YunoHost 3.4, después de la post-instalación ya no es posible conectarse con el usuario `root`. En lugar de eso, hace falta **conectarse con el usuario `admin` !**. Incluso si el servidor LDAP fuera quebrado (haciendo que el usuario `admin` ya no fuera utilizable) todavía deberías poder conectarte con el usuario `root` desde la red local. +Desde YunoHost 3.4, después de la post-instalación ya no es posible conectarse con el usuario `root`. En lugar de eso, hace falta **conectarse con el usuario `admin`**. Incluso si el servidor LDAP fuera quebrado (haciendo que el usuario `admin` ya no fuera utilizable) todavía deberías poder conectarte con el usuario `root` desde la red local. </div> #### ¡ Cambiar la contraseña root ! From 65b4f20143f944eb71fa4d0f042ff637f140060b Mon Sep 17 00:00:00 2001 From: Shad Faust <38153806+myrrhashad@users.noreply.github.com> Date: Wed, 14 Aug 2019 17:44:38 +0200 Subject: [PATCH 085/360] Update plug_and_boot_fr.md Going through the documentation, I had a slight scare because I did not have a screen with me and felt blocked because of that. --- plug_and_boot_fr.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plug_and_boot_fr.md b/plug_and_boot_fr.md index 8762e4dc..a38e26d6 100644 --- a/plug_and_boot_fr.md +++ b/plug_and_boot_fr.md @@ -2,7 +2,7 @@ * Branchez votre serveur avec un câble Ethernet (RJ-45) **directement sur votre routeur principal**. Vous pouvez aussi configurer la connexion wifi comme expliqué [ici](http://raspbian-france.fr/connecter-wifi-raspberry-pi-3/). La configuration wifi peut aussi se faire sans avoir booté sur la carte, en "montant" la deuxième partition de la carte et enfin éditer le fichier wpa-supplicant.conf. Sur Windows vous pouvez utiliser [Paragon ExtFS](https://www.paragon-software.com/home/extfs-windows/), ne pas oublier de "unmount" pour que les changements soient pris en compte. -* N’oubliez pas de **brancher un écran** si vous voulez observer comment se déroule le démarrage, et un clavier si vous souhaitez un accès en **ligne de commande** à votre serveur. +* Facultatif : vous pouvez **brancher un écran** si vous voulez observer comment se déroule le démarrage, et un clavier si vous souhaitez un accès en **ligne de commande** à votre serveur. * Démarrez le serveur, le Raspberry Pi va redémarrer tout seul une première fois, puis attendez jusqu’à voir un gros `Y` carré : @@ -15,3 +15,4 @@ </p> </div> +<br>Si vous n'avez pas d'écran pour votre Raspberry, ce n'est pas grave ! Vous pourrez trouver son adresse IP autrement à l'étape suivante. From 5091da9e424438b48384c0db51c6adddf0e1cb62 Mon Sep 17 00:00:00 2001 From: Shad Faust <38153806+myrrhashad@users.noreply.github.com> Date: Wed, 14 Aug 2019 18:17:41 +0200 Subject: [PATCH 086/360] Add link to post-install for 1st login It feels more user-friendly to indicate when the user can switch over to the post-install after the first login, instead of reading the whole page like I did. --- ssh_fr.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ssh_fr.md b/ssh_fr.md index 34d619f5..1153dc93 100644 --- a/ssh_fr.md +++ b/ssh_fr.md @@ -34,6 +34,10 @@ Depuis YunoHost 3.4, après avoir effectué la postinstallation, il ne sera plus Après vous être connecté pour la première fois, il vous faut changer le mot de passe `root`. Le serveur vous demandera peut-être automatiquement de le faire. Si ce n'est pas le cas, il faut utiliser la commande `passwd`. Il est important de choisir un mot de passe raisonnablement compliqué. Notez que ce mot de passe sera écrasé ensuite par le mot de passe admin choisi lors de la postinstallation. +#### En avant pour la configuration ! + +Tout est prêt pour passer à la [post-installation](postinstall). + ## Sur une instance déjà installée Si vous avez installé votre serveur à la maison et que vous cherchez à vous connecter depuis l'extérieur du réseau local, assurez-vous d'avoir bien redirigé le port 22 vers votre serveur. (Rappel : depuis la version 3.4, il vous faut vous logguer avec l'utilisateur `admin` !) From 0ef849ed434850d00415285f860db6255ed9e689 Mon Sep 17 00:00:00 2001 From: Shad Faust <38153806+myrrhashad@users.noreply.github.com> Date: Wed, 14 Aug 2019 18:46:15 +0200 Subject: [PATCH 087/360] Suggesting using nmap Very specific issue, but on an install-LAN, with lots of devices connected, nmap could help so skim through the results of arp-scan ? --- ssh_fr.md | 1 + 1 file changed, 1 insertion(+) diff --git a/ssh_fr.md b/ssh_fr.md index 34d619f5..0e9a0cb6 100644 --- a/ssh_fr.md +++ b/ssh_fr.md @@ -13,6 +13,7 @@ Si vous installez YunoHost sur un VPS, votre fournisseur devrait vous avoir comm Si vous installez un serveur à la maison (par ex. sur Raspberry Pi ou OLinuXino), il vous faut trouver l'IP qui a été attribuée à votre carte après que vous l'ayez connectée à votre box internet / routeur. Il y a plusieurs façons de faire cela : - ouvrez un terminal et tapez `sudo arp-scan --local` pour lister les IP des machines sur le réseau local ; +- si la commande arp-scan vous affiche beaucoup de machines, vous pouvez vérifier lesquelles sont ouvertes au ssh avec `nmap -p 22 192.168.1.0/24` pour faire du tri (adaptez la plage IP selon votre réseau local) - utilisez l'interface de votre box internet pour lister les machines connectées, ou regarder les logs ; - branchez un écran sur votre serveur, loggez-vous et tapez `hostname --all-ip-address`. From a801050f349331ace384080115d170fa57d509fb Mon Sep 17 00:00:00 2001 From: gmar <gmar@marsan.me> Date: Thu, 15 Aug 2019 17:39:42 +0200 Subject: [PATCH 088/360] More spanish translation --- XMPP_es.md | 50 +++++++ apps_es.md | 295 +++++++++++++++++++++++++++++++++++++ certificate_es.md | 77 ++++++++++ copy_image_es.md | 39 +++++ default_es.md | 11 ++ dns_es.md | 2 +- email_es.md | 44 ++++++ index_es.md | 12 +- install_iso_es.md | 10 +- install_manually_es.md | 2 +- install_on_arm_board_es.md | 20 +-- install_on_raspberry_es.md | 12 +- install_on_vps_es.md | 4 +- isp_box_config_es.md | 48 ++++++ isp_es.md | 47 ++++++ plug_and_boot_es.md | 17 +++ port_forwarding_es.md | 5 + try_es.md | 2 +- 18 files changed, 665 insertions(+), 32 deletions(-) create mode 100644 XMPP_es.md create mode 100644 apps_es.md create mode 100644 certificate_es.md create mode 100644 copy_image_es.md create mode 100644 default_es.md create mode 100644 email_es.md create mode 100644 isp_box_config_es.md create mode 100644 isp_es.md create mode 100644 plug_and_boot_es.md create mode 100644 port_forwarding_es.md diff --git a/XMPP_es.md b/XMPP_es.md new file mode 100644 index 00000000..228b941f --- /dev/null +++ b/XMPP_es.md @@ -0,0 +1,50 @@ +#Chat, VoIP y red local con <img src="/images/XMPP_logo.png" width=100> + +Yunohost está instalado con un servidor de mensajería instantánea Metronome que implementa el [protocolo XMPP](https://es.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol). + +XMPP es un protocolo abierto y extensible que también permite crear salones de discusión, compartir status y datos, echar llamadas en VoIP y hacer videoconferencias. + +Todas las aplicaciones basadas en XMPP son compatibles entre ellas : cuando utilizas un cliente XMPP puedes discutir con cualquier persona que tenga una cuenta XMPP/Jabber. Este protocolo ya es utilizado por millones de personas en el mundo. + +### Cuenta XMPP/Jabber + +Una cuenta XMPP/Jabber está basada en un ID bajo la forma `usuario@dominio.tld`, así como una contraseña. La contraseña es la de la cuenta del usuario de Yunohost. + +### Conectarse a XMPP + +Existen varios clientes web de tipo red social, como : +- [Movim](https://pod.movim.eu) +- [Libervia/Salut à Toi](http://salut-a-toi.org/). + +También puedes utilizar un cliente Desktop como : +- [Pidgin](http://pidgin.im/) (multiplataformas), +- [Gajim](http://gajim.org/index.fr.html) (Linux, Windows), +- [Dino](https://dino.im) (Linux), +- [Thunderbird](https://www.mozilla.org/fr/thunderbird/) (multiplataformas), +- [Jitsi](http://jitsi.org/) (multiplataformas) +- [Adium](https://adium.im/) (Mac OS). + +... o un cliente smartphone : +* [Xabber](http://xabber.com) (Android) +* [Conversations](https://conversations.im/) (Android) +* [Movim sous Android](https://movim.eu) +* [Monal](https://itunes.apple.com/us/app/monal-free-xmpp-chat/id317711500?mt=8) (iOS) + +Aquí tienes una lista más exhaustiva de clientes XMPP (fr) : https://fr.wikipedia.org/wiki/Liste_de_clients_XMPP + +### Cifrar tu conversaciones con OMEMO : + +Es posible cifrar tu conversaciones XMPP con la ayuda de [OMEMO](https://xmpp.org/extensions/xep-0384.html), por ejemplo utilizando Gajim : +* Instalar `gajim` y el plugin `gajim-omemo` +* Activar el plugin en `Tools > Plugins` +* Activar el cifrado en una conversación con un contacto que también tiene OMEMO activado. + +### Salón de discusión + +Para crear un salón de discusión (Multi-user chat) en tu servidor Yunohost, utiliza el ID nombredelsalon@muc.dominio.tld (donde dominio.tld es el dominio principal de tu servidor). + +Si utilizas un nombre de dominio personal, es necesario [añadir una redirección de tipo CNAME para el subdominio `muc.`](dns_config_es) en tu servidor DNS. + +### VoIP y videoconferencias + +Un buen medio de llamar a un contacto XMPP en VoIP o en llamada video, es utilizar el cliente [Jitsi](http://jitsi.org/). diff --git a/apps_es.md b/apps_es.md new file mode 100644 index 00000000..99398de4 --- /dev/null +++ b/apps_es.md @@ -0,0 +1,295 @@ +# Apps + +<span class="javascriptDisclaimer"> +Esta página requiere que Javascript esté activado para aparecer correctamente :s. +<br/> +<br/> +</span> + +<div class="input-group"> + <span class="input-group-addon" id="basic-addon1"><span class="glyphicon glyphicon-search"></span></span> + <input type="text" id="filter-app-cards" class="form-control" placeholder="Rechercher des apps..." aria-describedby="basic-addon1"/> + <div class="input-group-btn"> + <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> + <span id="app-cards-list-filter-text">Apps oficiales únicamente</span> <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + <li><a href="#" id="app-cards-list-validated">Apps oficiales únicamente</a></li> + <li><a href="#" id="app-cards-list-working">Apps "working" únicamente</a></li> + <li><a href="#" id="app-cards-list-working-inprogress">Apps "in progress"/"not working"</a></li> + <li><a href="#" id="app-cards-list-all-apps">Todas las apps</a></li> + </ul> + </div> +</div> +<br /> +<div id="community-app-list-warrant" class="alert alert-danger"> + <p>Sólo las apps señaladas <span class="label label-success label-as-badge">validated</span> están oficialmente soportadas por el equipo de desarrollo de aplicaciones. </p> + + <p>Las apps señaladas <span class="label label-success label-as-badge">working</span>, <span class="label label-warning label-as-badge">inprogress</span>, <span class="label label-danger label-as-badge">notworking</span> son aplicaciones que son oficiales, mantenidas por la comunidad, puedes testarlas y utilizarlas **por tu cuenta y riesgo**.</p> + + <p>Importante: son los que mantienen la aplicación quienes definen su propia aplicación cómo "working", no es el equipo de desarrollo de aplicaciones de Yunohost. Instala estas aplicaciones por tu cuenta y riesgo. No proponemos servicios de soporte para ellas.</p> +</div> +<div class="alert alert-info">Los desarrolladores de aplicaciones te agradecerán tu comentarios. Si instalas sus apps y encuentras fallos, o si tienes ideas para mejorarlas, no dudes en crear tickets direactement en las páginas de depósitos de los proyectos.</div> + +<div class="app-cards-list" id="app-cards-list"></div> + +<div class="alert alert-warning">Si no encuentras la aplicación que buscas, puedes buscarla en las aplicaciones comunitarias (working, inprogress y networking) o llenar la <a href="/apps_wishlist_en">lista de apps deseadas</a>.</div> + +<style> +/*================================================= + Search bar +=================================================*/ +#filter-app-cards, #app-cards-list { + width:100%; +} +/*===============================================*/ + +/*================================================= + Force return space after card list +=================================================*/ +#app-cards-list:after { + content:''; + display:block; + clear: both; +} +/*===============================================*/ + +/*================================================= + App card +=================================================*/ +.app-card { + margin-bottom:20px; + width:270px; + float:left; + min-height: 1px; + margin-right: 10px; + margin-left: 10px; +} +/*===============================================*/ + +/*================================================= + App card body +=================================================*/ +.app-card .panel-body > h3 { + margin-top:0; + margin-bottom:5px; + font-size:1.2em; +} +.app-card .category { + height:35px; +} +.app-card .category .label, .app-card-date-maintainer { + font-size:0.7em; +} +.app-card-date-maintainer { + text-align:right; + max-height: 18px; + margin-bottom: 3px; + margin-right: 7px; + margin-top: -5px; +} + +.app-card-desc { + height:100px; + overflow: hidden; +} +/*===============================================*/ + +/*================================================= + App card footer +=================================================*/ +.app-card .btn-group { + width:100%; + margin-left: 0px; +} +.app-card > .btn-group > .btn{ + border-bottom:0; +} +.app-card > .btn-group > .btn:first-child { + border-left:0; + border-top-left-radius:0; +} +.app-card > .btn-group > .btn:last-child { + border-right:0; + border-top-right-radius:0; + margin-left: 0px; + width: 33.6%; +} +/*===============================================*/ +</style> + +<script type="text/template" id="app-template2"> + <div class="app-card_{app_id} app-card panel panel-default"> + + <div class="panel-body"> + <h3>{app_name}</h3> + <div class="category"></div> + + <div class="app-card-desc">{app_description}</div> + </div> + + <div class="app-card-date-maintainer"> + <span class="glyphicon glyphicon-refresh"></span> {app_update} - + <span class="glyphicon glyphicon-user"></span> {app_maintainer} + </div> + <div class="btn-group" role="group"> + <a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Code</a> + <a href="#/app_{app_id}_fr" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a> + <a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_bootstrap} col-sm-4 active">Installer</a> + </div> + + </div> +</script> + +<script> +function timeConverter(UNIX_timestamp) { + var a = new Date(UNIX_timestamp*1000); + var months = ['January','February','March','April','May','June','July','August','September','October','November','December']; + var year = a.getFullYear(); + var month = months[a.getMonth()]; + var date = a.getDate(); + var hour = a.getHours(); + var min = a.getMinutes(); + if (hour < 10) { hour = '0' + hour; } + if (min < 10) { min = '0' + min; } + var time = date+' '+month+' '+year;//+' at '+hour+':'+min + return time; +} + +$(document).ready(function () { + // Hide warrant about community list + $('#community-app-list-warrant').hide(); + var filters = ["validated"]; + + function filter(){ + var filters_text = filters.map(function(el) { return '.app-' + el;}).join(', '); + var valThis = $('#filter-app-cards').val().toLowerCase(); + $('.app-card').each(function(){ + var text = $(this).find('h3').text().toLowerCase(); + (text.indexOf(valThis) >= 0 && $(this).find(filters_text).length > 0) ? $(this).show() : $(this).hide(); + }); + (filters.indexOf("working") == -1) ?$('#community-app-list-warrant').hide():$('#community-app-list-warrant').show(); + } + + //================================================= + // Search & filter bar event + //================================================= + $('#filter-app-cards').keyup(filter); + + $('#app-cards-list-validated').click(function(){ + filters = ["validated"]; + $('#app-cards-list-filter-text').text($('#app-cards-list-validated').text()); + filter(); + }); + + $('#app-cards-list-working').click(function(){ + filters = ["validated", "working"]; + $('#app-cards-list-filter-text').text($('#app-cards-list-working').text()); + filter(); + }); + + $('#app-cards-list-working-inprogress').click(function(){ + filters = ["notworking", "inprogress"]; + $('#app-cards-list-filter-text').text($('#app-cards-list-working-inprogress').text()); + filter(); + }); + + $('#app-cards-list-all-apps').click(function(){ + filters = ["validated", "working", "inprogress", "notworking"]; + $('#app-cards-list-filter-text').text($('#app-cards-list-all-apps').text()); + filter(); + }); + //================================================= + + + //================================================= + // Upload apps lists + //================================================= + var app_list={}; + $.when( + $.getJSON('https://app.yunohost.org/community.json', {}, function(community) { + app_list.community = $.map(community, function(el) { return el; }); + }), + $.getJSON('https://app.yunohost.org/official.json', {}, function(official) { + app_list.official = $.map(official, function(el) { return el; }); + }) + ).then(function() { + app_list = app_list.official.concat(app_list.community); + + // Sort alpha + app_list.sort(function(a, b){ + a_state = (a.state == "validated")?4:(a.state == "working")?3:(a.state == "inprogress")?2:1; + b_state = (b.state == "validated")?4:(b.state == "working")?3:(b.state == "inprogress")?2:1; + if (a_state < b_state || a_state == b_state && a.level < b.level || a_state == b_state && a.level == b.level && a.manifest.id > b.manifest.id) {return 1;} + else if (a.manifest.id == b.manifest.id) {return 0;} + return -1; + }); + $.each(app_list, function(k, infos) { + app_id = infos.manifest.id; + app_install_bootstrap = "success"; + if (infos.state === "validated") { + app_state_bootstrap = "success"; + } else if (infos.state === "working") { + app_state_bootstrap = "success"; + } else if (infos.state === "inprogress") { + app_state_bootstrap = "warning"; + app_install_bootstrap = "danger"; + } else if (infos.state === "notworking") { + app_state_bootstrap = "danger"; + app_install_bootstrap = "danger"; + } + if (infos.level == null ) { + infos.level = '?'; + } + if (infos.level == 0 ) { + app_level_bootstrap = "danger"; + app_install_bootstrap = "danger"; + } else if (infos.level <= 2) { + app_level_bootstrap = "warning"; + app_install_bootstrap = "danger"; + } else if (infos.level >= 7) { + app_level_bootstrap = "success"; + } else { + app_level_bootstrap = "default"; + } + + // Fill the template + html = $('#app-template2').html() + .replace(/{app_id}/g, app_id) + .replace(/{app_name}/g, infos.manifest.name) + .replace('{app_description}', infos.manifest.description.fr) + .replace(/{app_git}/g, infos.git.url) + .replace('{app_branch}', infos.git.branch) + .replace('{app_level}', infos.level) + .replace('{app_update}', timeConverter(infos.lastUpdate)) + .replace('{app_state_bootstrap}', app_state_bootstrap) + .replace('{app_install_bootstrap}', app_install_bootstrap); + + if (infos.manifest.developer) { + html = html + .replace('{app_maintainer}', infos.manifest.developer.name) + .replace('{app_mail}', infos.manifest.developer.email); + } + + if (infos.manifest.maintainer) { + html = html + .replace('{app_maintainer}', infos.manifest.maintainer.name) + .replace('{app_mail}', infos.manifest.maintainer.email); + } + + // Fill the template + $('#app-cards-list').append(html); + $('.app-card_'+ app_id).attr('id', 'app-card_'+ app_id); + $('.app-card_'+ app_id + ' .category').append(' <span class="label label-'+app_level_bootstrap+' label-as-badge">'+infos.level+'</span>'); + $('.app-card_'+ app_id + ' .category').append(' <span class="label label-'+app_state_bootstrap+' label-as-badge app-'+infos.state+'">'+infos.state+'</span>'); + if (infos.manifest.license && infos.manifest.license != 'free') { + $('.app-card_'+ app_id + ' .category').append(' <span class="label label-default">'+infos.manifest.license+'</span>'); + } + + }); + filter(); + }); + //================================================= +}); +</script> + diff --git a/certificate_es.md b/certificate_es.md new file mode 100644 index 00000000..16e12ca9 --- /dev/null +++ b/certificate_es.md @@ -0,0 +1,77 @@ +# Certificado + +Los certificados sirven para garantizar la confidencialidad y la autenticidad de las comunicaciones entre un navegador web y tu servidor. En particular, permite proteger los visitantes contra atacantes que podrían intentar de robar la identidad del servidor. + +Por defecto, Yunohost provee un certificado **auto-firmado**, lo que significa que es tu servidor el que garantiza la validez del certificado. Es suficiente **en el caso de un uso personal**, porque puedes confiar en tu propio servidor, pero esto planteará problemas si piensas en abrir el acceso a tu servidor a personas anónimas, por ejemplo si quieres alojar un sitio web. +En efecto, los usuarios deberán pasar por una pantalla de este tipo : + +<img src="/images/postinstall_error.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> + +Esta pantalla equivale a que te pidan ** ¿ Confías en el servidor que aloja este sitio ? ***. Esto puede asustar tu usuarios (con toda la razón). + +Para evitar esta confusión, es posible obtener un certificado, reconocido directamente por los navegadores, firmado por una autoridad « conocida » : **Let's Encrypt**, **Gandi**, **RapidSSL**, **StartSSL**, **Cacert**. + +**Let's Encrypt** propone certificados gratuitos. Desde la versión 2.5, Yunohost permite instalar directamente tales certificados desde la interfaz de administración o la línea de comandos. El resto del documento detalla la instalación y la firma de este tipo de certificado. También puedes [instalar un certificado de otra autoridad que Let's Encrypt](/certificate_custom_es). + +### Instalar un certificado Let's Encrypt + +Antes de intentar la instalación de un certificado Let's Encrypt, primero debes asegurarte de que el DNS está configurado correctamente (tu.dominio.tld debe apuntar hacia la IP de tu servidor) y que el sitio está accesible en HTTP desde afuera (i.e. por lo menos que el puerto 80 está correctamente redirigido hacia tu servidor). + +#### Vía la interfaz de administración web + +En la categoría 'Dominio' de la interfaz de administración, y luego en la sección dedicada a tu dominio, encontrarás un botón 'Certificado SSL'. + + + +En la sección 'Certificado SSL', puedes ver el estado corriente del certificado. +Si acabas de añadir el dominio, ya dispone de un certificado auto-firmado. + + + +Si tu dominio está configurado correctamente, es posible instalar un certificado Let's Encrypt vía el botón verde. + + + +Una vez la instalación terminada, puedes ir a tu dominio vía tu navegador, en HTTPS, para comprobar que tu certificado está bien firmado por Let's Encrypt. El certificado se renovará automáticamente al cabo de cada periodo de tres meses. + + + +#### Vía línea de comandos + +Conectate en tu servidor en SSH. + +Puedes comprobar el estatus corriente de tu certificado vía + +```bash +yunohost domain cert-status tu.dominio.tld +``` + +Instala el certificado Let's Encrypt vía + +```bash +yunohost domain cert-install tu.dominio.tld +``` + +Este comando debe devolverte : + +```bash +Success! The SSOwat configuration has been generated +Success! Successfully installed Let's Encrypt certificate for domain DOMAIN.TLD! +``` + +Una vez que la instalación está terminada, puedes dirigirte a tu dominio vía tu navegador, en HTTPS, para comprobar que el certificado está bien firmado por Let's Encrypt. El certificado se renovará automáticamente al cabo de cada periodo de tres meses. + +##### Si hay un problema + +Si, después de una manipulación incorrecta, un certificado se encuentra en una mala situación (e.g. pérdida del certificado o imposibilidad de leerlo), es posible regenerar un certificado autofirmado : + +```bash +yunohost domain cert-install tu.dominio.tld --self-signed --force +``` + +Si Yunohost te dice que tu dominio está mal configurado mientras que has verificado tu configuración DNS y que tienes acceso a tu servidor en HTTP desde afuera, puedes intentar : + +- de añadir una línea `127.0.0.1 tu.dominio.tld` al archivo `/etc/hosts` en tu servidor ; +- si la instalación todavía no funciona, desactiva las verificaciones añadiendo `--no-checks` al comando `cert-install`. + + diff --git a/copy_image_es.md b/copy_image_es.md new file mode 100644 index 00000000..c979e3e2 --- /dev/null +++ b/copy_image_es.md @@ -0,0 +1,39 @@ +# Flashear una tarjeta SD + +Ahora que has descargado la imagen de Yunohost, tienes que copiar su contenido en una tarjeta SD. Esta etapa también puede llamarse 'flashear' la tarjeta SD. + +<div class="alert alert-warning" markdown="1"> +En el marco del self-hosting / auto-alojamiento, está recomendado que tu tarjeta SD tenga una capacidad de por lo menos 8 Go (para diponer de suficientemente espacio para el sistema y un poco de datos) y esté al menos certificada de clase 10 (para tener bueno rendimiento). +</div> + +<img src="/imagen/sdcard.jpg" width=150><img src="https://yunohost.org/images/micro-sd-card.jpg"> + +### Con Etcher + +Descarga <a href="https://etcher.io/" target="_blank">Etcher</a> para tu sistema operativo, e instálalo. + +<img src="/images/etcher.gif"> + +Conecta tu tarjeta SD, selecciona tu imagen Yunohost y luego haz clic en 'Flash'. + +### Con `dd` + +Si estás en Linux / Mac y que estás cómodo con la línea de comandos, también puedes flashear tu tarjeta SD con el comando `dd`. Empieza por identificar el periférico que corresponde a tu tarjeta SD con `fdisk -l` o +`lsblk`. Suponiendo que tu tarjeta SD sea `/dev/mmcblk0` (¡ ten cuidado +!), puedes iniciar : + +```bash +dd if=/chemin/vers/yunohost.img of=/dev/mmcblk0 +``` + +## Extiende la partición root <small>(optionnel)</small> + +<div class="alert alert-warning" markdown="1"> +Esta etapa es opcional porque normalmente la realiza automáticamente el sistema durante el primer inicio sobre las imágenes recientes. +</div> + +Por defecto, la partición root instalada en tu tarjeta SD con el comando `dd` es muy pequeña. Puedes redimensionarla con un programa como `resize2fs` (línea de comandos) o `Gparted` (interfaz gráfica) extendiendo la partición ext4 al máximo de modo a utilizar todo el espacio que no está asignado. + +<img src="/images/gparted.jpg" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> + +<p class="text-muted">Vistazo de la interfaz de Gparted</p> diff --git a/default_es.md b/default_es.md new file mode 100644 index 00000000..6b8c21f5 --- /dev/null +++ b/default_es.md @@ -0,0 +1,11 @@ +#Nueva página + +Esta página todavía no existe, puedes editarla tecleando ```<Escap>``` en tu teclado, o clicando en el botón "Editar" abajo a la derecha de tu pantalla. Puedes echar un vistazo a los cambios que has efectuado empujando de nuevo la tecla ```<Escap>``` o clicando en el botón "Vistazo". + +** Nota : ** Necesitarás una dirección email para validar tu propuesta. + + +### Sintaxis +Esta página utiliza la sintaxis Markdown, refiérete a la documentación para más informaciones : + +http://daringfireball.net/projects/markdown/syntax diff --git a/dns_es.md b/dns_es.md index 3fae91a9..14261ac2 100644 --- a/dns_es.md +++ b/dns_es.md @@ -29,7 +29,7 @@ Tienes varias opciones. Nota que puedes cumular estas soluciones si posees vario **Es el método recomendado si estás debutando.** 2. Puedes utilizar el servicio de DNS de tu **registrar** (Gandi, OVH, BookMyName u otro) para configurar tus nombres de dominio. Ésta es la [configuración DNS estándar](/dns_config_es). También es posible utilizar una redirección DNS local, más información sobre cómo [Acceder a su servidor desde la red local](/dns_local_network_es). -También puedes consultar las documentaciones específicas a estas varias [oficinas de registro](/registrar_fr) : [Gandi](http://gandi.net), [OVH](/OVH_fr) o [BookMyName](http://bookmyname.com). +También puedes consultar las documentaciones específicas a estas varias [oficinas de registro](/registrar_es) : [Gandi](http://gandi.net), [OVH](/OVH_fr) o [BookMyName](http://bookmyname.com). **Atención** : Si eliges este modo de funcionamiento, tendrás más flexibilidad, pero nada será automático. Por ejemplo si quieres utilizar `webmail.mi-servidor.org`, tendrás que añadirlo manualmente en la interfaz de tu registrar. diff --git a/email_es.md b/email_es.md new file mode 100644 index 00000000..bedac75d --- /dev/null +++ b/email_es.md @@ -0,0 +1,44 @@ +Emails +====== + +YunoHost integra un ecosistema completo de servidor mail, permitiéndote de alojar tu propia mensajería electrónica, y pues de tener tus propias direcciones email en `algo@tu.dominio.tld`. + +Este ecosistema comprende un servidor SMTP (postfix), un servidor IMAP (Dovecot), un antispam (rspamd) y una configuración DKIM. + +Asegurarse de que la configuración esté correcta +------------------------------- + +Los emails son un ecosistema complicado y una multitud de detalles puedes impedir que funcionen correctamente. + +Para validar que tu configuración es correcta : +- si te alojas en casa y que no tienes VPN, asegúrate de que [tu proveedor de Internet no esté bloqueando el puerto 25](isp_es) ; +- redirige los puertos siguiendo [esta documentación](isp_box_config_es) ; +- configura con cuidado los registros DNS del correo electrónico siguiendo [esta documentación](dns_config_es) ; +- testa tu configuración utilizando [Mail-tester.com](https://mail-tester.com) <small>(cuidado : sólo 3 tests por dominio y por día están autorizados)</small> ; + +Una nota de al menos 8~9/10 es un objetivo razonable. + +Clientes de mensajería +------------- + +Para interactuar con el servidor de mail, o sea leer y mandar emails, puedes instalar un cliente web como Roundcube o Rainloop en tu servidor - o configurar un cliente de Desktop o móvil como descrito en [esta página][cette page](email_configure_client_es). + +Los clientes Desktop o móvil tienen la ventaja de copiar tu emails en el equipo, así permitiendo la consulta desconectada de tus mensajes, y cierta protección frente a la posibilidad de un servidor averiado. + +Configuration de los aliases de mensajeras y de las redirecciones automáticas +------------------------------------------- + +Aliases de mensajeras y redirecciones pueden ser configurados por cada usuario. Por ejemplo, el primer usuario creado en el servidor automáticamente dispone de un alias `root@tu.dominio.tld` - lo que significa que un email mandado hacia esta dirección se encontrará en el buzón de entrada de este usuario. Las redirecciones automáticas pueden ser configuradas, por ejemplo si un usuario no quiere configurar una cuenta de correo adicional y simplemente desea recibir correos del servidor en - por ejemplo - su dirección gmail. + +Otra función desconocida es el uso del sufijo "+". Por ejemplo, email mandados a `johndoe+sncf@tu.dominio.tld` llegarán en el directorio 'sncf' del buzón de correo de John Dos (o directamente en el buzón si este directorio no existe). Es una técnica práctica que permite proveer una dirección de mail a un sitio y automatizar la clasificación de los correos que te mandará este sitio. + +¿ Qué ocurre si mi servidor se pone indisponible ? +----------------------------------------------- + +Si tu servidor se pone indisponible, los correos electrónicos mandados a tu servir se quedarán en una fila de espera por el lado del expedidor durante aproximadamente 5 días. El proveedor de hosting del expedidor intentará mandarte regularmente el correo, hasta que lo tire si no lo puede enviar. + +Más información +-------------------- + +- Existe una página de documentación para [migrar sus emails desde un proveedor de mensajería hacia una instancia Yunohost](email_migration_es). +- Para profundizar tu comprensión del correo electrónico y de sus protocolos, aquí tienes una [conferencia muy interesante](http://www.iletaitunefoisinternet.fr/lemail-par-benjamin-sonntag/index.html)(en francés). diff --git a/index_es.md b/index_es.md index 140c2bd4..1b066c15 100644 --- a/index_es.md +++ b/index_es.md @@ -66,7 +66,7 @@ </div> <div class="col-md-7 text-right"> <h1>Disfrutar <small>de sus aplicaciones web, y crea tu esquina de Internet</small></h1> - <p><br /><a href="/apps_fr">Lista de aplicaciones disponible</a></p> + <p><br /><a href="/apps_es">Lista de aplicaciones disponible</a></p> </div> </div> @@ -75,7 +75,7 @@ <div class="row cf"> <div class="col-md-7"> <h1>Gestionar <small>tu servidor como quieras : vía web, móvil o en línea de comandos</small></h1> - <p><br /><a href="/try_fr">Intentar la interfaz de administración</a></p> + <p><br /><a href="/try_es">Intentar la interfaz de administración</a></p> </div> <div class="col-md-4"> <div class="feature-pic"> @@ -88,15 +88,15 @@ <div class="row cf"> <div class="col-md-4 button-list"> - <a class="btn btn-lg btn-block btn-primary" href="/userdoc_fr">Guía del usuario</a> + <a class="btn btn-lg btn-block btn-primary" href="/userdoc_es">Guía del usuario</a> <a class="btn btn-lg btn-block btn-info" href="https://ask.yunohost.org" target="_blank">Preguntas más frecuentes</a> - <a class="btn btn-lg btn-block btn-success" href="/whatsyunohost_fr">¿ Que es YunoHost ?</a> - <a class="btn btn-lg btn-block btn-warning" href="/contribute_fr">Cómo contribuir</a> + <a class="btn btn-lg btn-block btn-success" href="/whatsyunohost_es">¿ Que es YunoHost ?</a> + <a class="btn btn-lg btn-block btn-warning" href="/contribute_es">Cómo contribuir</a> <a class="btn btn-lg btn-block btn-danger btn-support" href="http://news.yunohost.org">últimas noticias</a> </div> <div class="col-md-7 text-right"> <h1>Explorar <small>las posibilidad de su servidor, y aprender porque es importante</small></h1> - <p><br /><a href="/docs_fr">Leer la documentación</a></p> + <p><br /><a href="/docs_es">Leer la documentación</a></p> </div> </div> diff --git a/install_iso_es.md b/install_iso_es.md index 8cd26815..91de3195 100644 --- a/install_iso_es.md +++ b/install_iso_es.md @@ -10,7 +10,7 @@ * Un ordenador compatible x86 dedicado a YunoHost : portátil, netbook, ordenador de escritorio. Puedes reutilizar calquiera máquina con **256 Mo de RAM mínimo** * Otro ordenador para examinar esta guía y acceder a tu servidor -* Un [proveedor de Internet ético](/isp_fr), de preferencia con acceso de buena velocidad (ascendente) +* Un [proveedor de Internet ético](/isp_es), de preferencia con acceso de buena velocidad (ascendente) * Una **memoria USB** con capacidad mínima de 1Go **O** un **CD en blanco** estándar * ***Casos particulares*** : si tu servidor no tiene tarjeta gráfica, hay que preparar un iso que se inicie sobre el puerto de serie](https://github.com/luffah/debian-mkserialiso). @@ -18,13 +18,13 @@ ## Etapas de instalación -<a class="btn btn-lg btn-default" href="/images_fr">0. Descargar la imagen ISO</a> +<a class="btn btn-lg btn-default" href="/images_es">0. Descargar la imagen ISO</a> -<a class="btn btn-lg btn-default" href="/burn_or_copy_iso_fr">1. Copiar la imagen ISO</a> +<a class="btn btn-lg btn-default" href="/burn_or_copy_iso_es">1. Copiar la imagen ISO</a> -<a class="btn btn-lg btn-default" href="/boot_and_graphical_install_fr">2. Encender e instalar</a> +<a class="btn btn-lg btn-default" href="/boot_and_graphical_install_es">2. Encender e instalar</a> -<a class="btn btn-lg btn-default" href="/postinstall_fr">3. Post-instalación</a> +<a class="btn btn-lg btn-default" href="/postinstall_es">3. Post-instalación</a> --- diff --git a/install_manually_es.md b/install_manually_es.md index 8f273361..c5120e0a 100644 --- a/install_manually_es.md +++ b/install_manually_es.md @@ -8,7 +8,7 @@ curl https://install.yunohost.org | bash <small>*(Si `curl` no está instalado en tu sistema, tal vez tendrás que instalarlo con `apt install curl`. De otro modo, si el comando no muestra nada, puedes intentar `apt install ca-certificates`)*</small> -Cuando la instalación esté terminada, habrá que [**proceder a la post-instalación**](/postinstall) +Cuando la instalación esté terminada, habrá que [**proceder a la post-instalación**](/postinstall_es) --- diff --git a/install_on_arm_board_es.md b/install_on_arm_board_es.md index 4c3b25fd..26477bf7 100644 --- a/install_on_arm_board_es.md +++ b/install_on_arm_board_es.md @@ -19,21 +19,21 @@ YunoHost todavía no es compatible con las tarjetas ARM64. Para obtener más inf - Un adaptador de corriente para alimentar la tarjeta ; - Una tarjeta microSD : al menos **8 Go** y **Clase 10** (por ejemplo una [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ; - Un cable ethernet/RJ-45 para conectar la carte con el router / caja internet. (Con el Raspberry Pi 0, puedes conectar tu tarjeta con un cable OTG y un adaptador Wifi USB.) -- Un [proveedor de Internet ético](/isp_fr), de preferencia con una buena velocidad de upload. +- Un [proveedor de Internet ético](/isp_es), de preferencia con una buena velocidad de upload. --- ## Instalación con la imagen pre-instalada (recomendada) -<a class="btn btn-lg btn-default" href="/images_fr">0. Descargar la imagen pre-instalada para tu tarjeta ARM</a><br><small>Si no existe una imagen dedicada a tu tarjeta, puedes seguir la sección "Instalación encima de ARMbian".</small> +<a class="btn btn-lg btn-default" href="/images_es">0. Descargar la imagen pre-instalada para tu tarjeta ARM</a><br><small>Si no existe una imagen dedicada a tu tarjeta, puedes seguir la sección "Instalación encima de ARMbian".</small> -<a class="btn btn-lg btn-default" href="/copy_image_fr">1. Poner la imagen en tu tarjeta SD</a> +<a class="btn btn-lg btn-default" href="/copy_image_es">1. Poner la imagen en tu tarjeta SD</a> -<a class="btn btn-lg btn-default" href="/plug_and_boot_fr">2. Conectar y encender</a> +<a class="btn btn-lg btn-default" href="/plug_and_boot_es">2. Conectar y encender</a> -<a class="btn btn-lg btn-default" href="/ssh_fr">3. Conectarse en SSH</a> +<a class="btn btn-lg btn-default" href="/ssh_es">3. Conectarse en SSH</a> -<a class="btn btn-lg btn-default" href="/postinstall_fr">4. Proceder a la post-instalación</a> +<a class="btn btn-lg btn-default" href="/postinstall_es">4. Proceder a la post-instalación</a> --- @@ -41,11 +41,11 @@ YunoHost todavía no es compatible con las tarjetas ARM64. Para obtener más inf <a class="btn btn-lg btn-default" href="https://www.armbian.com/download/">0. Descargar la imagen ARMbian para tu tarjeta ARM</a> -<a class="btn btn-lg btn-default" href="/copy_image_fr">1. Poner la imagen en tu tarjeta SD</a> +<a class="btn btn-lg btn-default" href="/copy_image_es">1. Poner la imagen en tu tarjeta SD</a> -<a class="btn btn-lg btn-default" href="/plug_and_boot_fr">2. Conectar y encender</a> +<a class="btn btn-lg btn-default" href="/plug_and_boot_es">2. Conectar y encender</a> -<a class="btn btn-lg btn-default" href="/ssh_fr">3. Conectarse en SSH</a> +<a class="btn btn-lg btn-default" href="/ssh_es">3. Conectarse en SSH</a> -<a class="btn btn-lg btn-default" href="/install_manually_fr">4. Proceder a la post-instalación genérica</a> +<a class="btn btn-lg btn-default" href="/install_manually_es">4. Proceder a la post-instalación genérica</a> diff --git a/install_on_raspberry_es.md b/install_on_raspberry_es.md index 4863e975..902c8ab1 100644 --- a/install_on_raspberry_es.md +++ b/install_on_raspberry_es.md @@ -17,21 +17,21 @@ Antes de alojar tu propio servidor en tu casa, te recomendamos que consultes las - Un adaptador de corriente para alimentar la tarjeta ; - Una tarjeta microSD : al menos **8 Go** y **Clase 10** (por ejemplo una [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ; - Un cable ethernet/RJ-45 para conectar la tarjeta con tu enrutador o tu caja internet. (Con el Raspberry Pi 0, puedes conectar tu tarjeta con un cable OTG y un adaptador Wifi USB.) -- Un [proveedor de Internet ético](/isp_fr), de preferencia con buena velocidad de upload. +- Un [proveedor de Internet ético](/isp_es), de preferencia con buena velocidad de upload. --- ## Instalación con la imagen pre-instalada (recomendada) -<a class="btn btn-lg btn-default" href="/images_fr">1. Descargar la imagen para Raspberry Pi</a> +<a class="btn btn-lg btn-default" href="/images_es">1. Descargar la imagen para Raspberry Pi</a> -<a class="btn btn-lg btn-default" href="/copy_image_fr">2. Poner la imagen en tu tarjeta SD</a> +<a class="btn btn-lg btn-default" href="/copy_image_es">2. Poner la imagen en tu tarjeta SD</a> -<a class="btn btn-lg btn-default" href="/plug_and_boot_fr">3. Conectar y encender</a> +<a class="btn btn-lg btn-default" href="/plug_and_boot_es">3. Conectar y encender</a> -<a class="btn btn-lg btn-default" href="/ssh_fr">4. Conectarse en SSH</a> +<a class="btn btn-lg btn-default" href="/ssh_es">4. Conectarse en SSH</a> -<a class="btn btn-lg btn-default" href="/postinstall_fr">5. Proceder a la post-instalación</a> +<a class="btn btn-lg btn-default" href="/postinstall_es">5. Proceder a la post-instalación</a> --- diff --git a/install_on_vps_es.md b/install_on_vps_es.md index 89eb2504..0263d71f 100644 --- a/install_on_vps_es.md +++ b/install_on_vps_es.md @@ -14,7 +14,7 @@ ## Etapas de instalación -<a class="btn btn-lg btn-default" href="/install_manually_fr">1. Instalar manualmente</a> +<a class="btn btn-lg btn-default" href="/install_manually_es">1. Instalar manualmente</a> -<a class="btn btn-lg btn-default" href="/postinstall_fr">2. Post-instalación</a> +<a class="btn btn-lg btn-default" href="/postinstall_es">2. Post-instalación</a> diff --git a/isp_box_config_es.md b/isp_box_config_es.md new file mode 100644 index 00000000..dc239ef0 --- /dev/null +++ b/isp_box_config_es.md @@ -0,0 +1,48 @@ +# Configurar la redirección de los puertos + +Si te estás auto-alojando en casa y sin VPN, tienes que redirigirse los puertos de tu router (caja/box). Si quieres una explicación sencilla de lo que es y por qué necesitas redirigir los puertos, puedes echar un vistazo a [esta página](port_forwarding_es). [Esta página](https://www.testdevelocidad.es/configuraciones/abrir-correctamente-los-puertos-router/) también propone explicaciones detalladas sobre el funcionamiento de los puertos, y las etapas de configuración para un router genérico. + +### 0. Diagnosticar los puertos abiertos + +Una vez que tienes la redirección configurada, deberías poder comprobar que los puertos están bien abiertos con esta herramienta : + +<a class="btn btn-default" href="http://ports.yunohost.org">Comprobar la redirección de los puertos</a> + +### 1. Acceder a la interfaz de administración de tu router/caja/box + +En general la interfaz de administración está accesible desde http://192.168.0.1 o http://192.168.1.1. +Luego, es posible que tengas que autenticarte con los ID provechos pour tu proveedor de acceso a Internet. + +### 2. Descubrir la IP local del servidor + +Identifica cuál es la IP local de tu servidor, o sea : +- desde la interfaz de tu router/caja/box, donde tal vez estén listados los dipositivos conectados a la red local +- desde la webadmin de YunoHost, en 'Estado del servidor', 'Red' +- desde la línea de comandos en tu servidor, por ejemplo con `ip a | grep "scope global" | awk '{print $2}'` + +En general una dirección IP local se parece a `192.168.xx.yy`, o `10.0.xx.yy`. + +### 3. Redirigir los puertos + +En la interfaz de administración de tu router/caja/box, tienes que encontrar una categoría que debe llamarse 'Configuración del router', o 'Redirección de puertos'. El nombre difiere según el tipo o la marca del router / de la caja Internet... + +Luego tienes que redirigir cada uno de los puertos listados a continuación hacia la IP local de tu router para que los varios servicios de Yunohost funcionen. Para cada uno de ellos, una redirección 'TCP' es necesaria. En algunas interfaces, tal vez encontrarás referencias a un puerto 'externo' y un puerto 'interno' : en nuestro caso, se trata del mismo número de puerto, que sea interno o externo. + +* Web: 80 <small>(HTTP)</small>, 443 <small>(HTTPS)</small> +* [SSH](/ssh_es): 22 +* [XMPP](/XMPP_es): 5222 <small>(clients)</small>, 5269 <small>(servers)</small> +* [Email](/email_es): 25, 587 <small>(SMTP)</small>, 993 <small>(IMAP)</small> + +<div class="alert alert-warning" markdown="1"> +<span class="glyphicon glyphicon-warning-sign"></span> Algunos proveedores de acceso a Internet bloquean el puerto 25 (mail SMTP) por defecto para luchar con el spam. Otros (más escasos) no permiten utilizar libremente los puertos 80/443. Dependiendo de tu proveedor, puede ser posible de abrir estos puertos en la interfaz... Ver [esta página](isp_es) por más informaciones. +</div> + +## Redirección automática / UPnP + +Una tecnología llamada UPnP está disponible en algunos routers/cajas/box y permite redirigir automáticamente puertos hacia una máquina que lo pide. Si UPnP está activado en tu casa, ejecutar este comando debería automáticamente redirigir los puertos correctos : + + +```bash +sudo yunohost firewall reload +``` + diff --git a/isp_es.md b/isp_es.md new file mode 100644 index 00000000..e0c42cf0 --- /dev/null +++ b/isp_es.md @@ -0,0 +1,47 @@ +# Proveedores de acceso a Internet + +<a class="btn btn-lg btn-default" href="/isp_box_config_es"> Configuración general del router</a> + +Aquí tienes una lista (no exhaustiva) de proveedores de acceso a Internet por país, con criterios de compatibilidad con el [self-hosting](selfhosting_es). + +Un « **no** » puede implicar problemas de utilización del servidor o puede obligarte a hacer configuraciones adicionales. El estatus entre paréntesis indica el comportamiento por defecto. + +### Francia + +*Nota que algunos de estos proveedores como OVH y Orange también están presentes en España.* + +Todos los proveedores de acceso a Internet [miembros de la Federación French Data Network] (http://www.ffdn.org/fr/membres) tienen una política a favor del auto-alojamiento / self-hosting. +* ✔ : sí +* ✘ : no + +| Proveedor de acceso | OVH | [Free](/isp_free_fr) | [SFR](/isp_sfr_fr) | [Orange](/isp_orange_fr) | Bouygues<br>Télécom | Darty | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| **Box/router** | Personal/OVH Télécom | Freebox | Neufbox | Livebox | Bbox | Dartybox | +| **[UPnP](https://fr.wikipedia.org/wiki/Universal_Plug_and_Play)** | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| **[Puerto 25 que se abre](email_fr)**<br> (cerrado por defecto) | ✔ | ✔ | ✔ | ✘ | ✔ | ✔ | +| **[Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning)** | ✔ | ✔ | ✔/✘ | ✘ | ✔ | ✔ | +| **[Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup)<br>personalizable ** | ✔ | ✔ (excepto IPv6) | … | ✘ | ✘ | ✘ | +| **[IP fija](/dns_dynamicip_es)** | ✔ | ✔ | ✔/✘ | ✘ | ✔ | ✔ | +| **[IPv6](https://fr.wikipedia.org/wiki/IPv6)** | ✔ | ✔ | ✔ | ✔ | … | … | +| **[No listado en el DUL](https://en.wikipedia.org/wiki/Dialup_Users_List)** | … | ✘ | … | … | … | … | +Para obtener una lista más completa y precisa, refiérete a la muy buena documentación (fr) de [wiki.auto-hebergement.fr](http://wiki.auto-hebergement.fr/fournisseurs/fai#d%C3%A9tail_des_fai). + +**Truco** : [FDN](http://www.fdn.fr) propone unos [VPN](http://www.fdn.fr/-VPN-.html) que permiten recuperar una (o varias si lo pides) IPv4 fija y un /48 en IPv6 y así « limpiar » tu conexión si tu proveedor es uno los *proveedores limitantes* de la tabla más arriba. + +### Bélgica + +| Proveedor de acceso | Box/ router | uPnP activable | [Puerto 25 que se abre](email_fr)| [Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning) | [Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) | IP fija | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| **Proximus** | BBox2 | sí (activado) | sí | **no** | **no** | **no** | +| | BBox3 | sí (activado) | sí | **no** | **no** | **no** | +| **Scarlet** | BBox2 | sí (activado) | sí | **no** | **no** | **no** | + +**Proximus** no estaría a favor del auto-alojamiento. Hacen que la apertura de los puertos esté más difícil para luchar contra el spam. Es mejor pasar por [Neutrinet](http://neutrinet.be), uno de los [miembros de la Federación French Data Network](http://www.ffdn.org/fr/membres). + +### Costa de Marfil + +| Proveedor de acceso | Box/ router | uPnP activable | [Puerto 25 que se abre](email_fr)| [Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning) | [Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) | IP fija | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| **Orange** | Livebox2 | sí (activado) | no | **no** | **no** | **no** | +| **Moov** | | sí (activado) | | | | | +| **MTN** | | sí (activado) | | | | | \ No newline at end of file diff --git a/plug_and_boot_es.md b/plug_and_boot_es.md new file mode 100644 index 00000000..d73cdd0d --- /dev/null +++ b/plug_and_boot_es.md @@ -0,0 +1,17 @@ +# Conectar e iniciar el servidor + +* Conecta tu servidor con un cable Ethernet (RJ-45) **directamente sobre tu router principal**. También puedes configurar la conexión wifi como explicado [aquí (fr)](http://raspbian-france.fr/connecter-wifi-raspberry-pi-3/). El wifi también puede configurarse sin haber iniciado la tarjeta, "montando" la segunda partición de la tarjeta y finalmente editando el archivo wpa-supplicant.conf. En Windows, puedes utilizar [Paragon ExtFS](https://www.paragon-software.com/home/extfs-windows/), no olvides de "unmount" para que los cambios estén integrados. + +* No te olvides de **conectar una pantalla** si quieres observar cómo ocurre el inicio, y un teclado si quieres un acceso con **línea de comandos** a tu servidor. + +* Inicia el servidor, el Raspberry Pi va a reiniciarse si-mismo una primera vez, pues espera hasta que veas un gran `Y` cuadrado : + +<br> + +<div class="text-center"><img src="/images/boot_screen.png"> + +<p markdown="1"> +*Nota el valor `IP` visible en la pantalla : esto es **la dirección IP local** de tu servidor.* +</p> + +</div> diff --git a/port_forwarding_es.md b/port_forwarding_es.md new file mode 100644 index 00000000..3ff93dc3 --- /dev/null +++ b/port_forwarding_es.md @@ -0,0 +1,5 @@ +# Redirección de puertos + +El esquema aquí abajo intenta explicar brevemente el rol de la redirección de los puertos durante la instalación de un servidor en tu casa. + +<img src="./images/portForwarding_fr.png" width="100%"> diff --git a/try_es.md b/try_es.md index 89e5e6d6..99a3f063 100644 --- a/try_es.md +++ b/try_es.md @@ -11,7 +11,7 @@ <div class="row text-center"> <div class="col-md-6"> <a href="https://demo.yunohost.org/" target="_blank" class="btn btn-success btn-lg"><span class="glyphicon glyphicon-user"></span> Interfaz de usuario</a> - <p class="text-muted">Utilisateur : demo<br>Contraseña : demo</p> + <p class="text-muted">Usuario : demo<br>Contraseña : demo</p> </div> <div class="col-md-5"> <a href="https://demo.yunohost.org/yunohost/admin" target="_blank" class="btn btn-primary btn-lg"><span class="glyphicon glyphicon-lock"></span> Interfaz de administración</a> From bf617501a7524a9926d7a63507b1cfb9c5b5bd41 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Fri, 16 Aug 2019 09:53:17 +0000 Subject: [PATCH 089/360] Fautes de frappe et de grammaire --- packaging_apps_guidelines_fr.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging_apps_guidelines_fr.md b/packaging_apps_guidelines_fr.md index ec16ee4c..2942cf81 100644 --- a/packaging_apps_guidelines_fr.md +++ b/packaging_apps_guidelines_fr.md @@ -275,7 +275,7 @@ Pour celà, il faut recourir autant que possible aux dossiers `.d` des configura #### 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. +À l’exception de dépendances (par exemple : paquets Debian) utilisés par d’autres services ou applications. #### YEP 2.10 ##### Configurer les logs de l'application | brouillon | manuel | WORKING | @@ -374,7 +374,7 @@ Toutefois, cela ne doit pas exempter d'une restriction maximale des droits sur l ##### 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. +Le mainteneur de paquet doit toutefois rester vigilant, certaines documentations pouvant être erronées ou insuffisantes. #### YEP 3.6 ##### Mettre à jour les versions contenant des CVE | draft | manuel | OFFICIAL | From 0341447b0bca9710490d66080eb27d5abb636243 Mon Sep 17 00:00:00 2001 From: Shad Faust <38153806+myrrhashad@users.noreply.github.com> Date: Mon, 19 Aug 2019 00:29:17 +0200 Subject: [PATCH 090/360] Translating from ssh_fr.md - Very specific issue, but on an install-LAN, with lots of devices connected, nmap could help so skim through the results of arp-scan ? - It feels more user-friendly to indicate when the user can switch over to the post-install after the first login, instead of reading the whole page like I did. --- ssh.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ssh.md b/ssh.md index a2425bcd..05073dbe 100644 --- a/ssh.md +++ b/ssh.md @@ -13,6 +13,7 @@ If you are installing on a VPS, then your VPS provider should have gave you your If you are installing at home (e.g. on a Raspberry Pi or OLinuXino), then you need to find out which IP has been attributed to your board after you plugged it to your internet box / router. Several ways exists to find your server's IP : - open a terminal and use `sudo arp-scan --local` to list the IP on your local network ; +- if the arp-scan command displays a confusing number of devices, you can check which ones are open to ssh with `nmap -p 22 192.168.1.0/24` to sort them out (adapt the IP range to your local network) - use your internet box / router interface to list the machines connected, or check the logs ; - plug a screen on your server, log in and type `hostname --all-ip-address`. @@ -34,6 +35,10 @@ Since YunoHost 3.4, after running the postinstallation, you won't be able to log After logging in for the first time, you should change the root password. The server might automatically ask you to do so. If not, use the command `passwd`. It is important to choose a reasonably strong password. Note that the root password will be overriden by the admin password when you perform the postinstallation. +#### Let's configure ! + +We're now ready to begin the [post-installation](postinstall). + ## After installing YunoHost If you installed your server at home and are attempting to connect from outside your local network, make sure port 22 is correctly forwarded to your server. (Reminder : since YunoHost 3.4 you should connect using the `admin` user !) From 1a3c4b2b9711a112b8175a709585b62eaf4ce5f0 Mon Sep 17 00:00:00 2001 From: Shad Faust <38153806+myrrhashad@users.noreply.github.com> Date: Mon, 19 Aug 2019 00:35:18 +0200 Subject: [PATCH 091/360] Update plug_and_boot_fr.md Markdown was disabled on a line --- plug_and_boot_fr.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plug_and_boot_fr.md b/plug_and_boot_fr.md index a38e26d6..a237c19d 100644 --- a/plug_and_boot_fr.md +++ b/plug_and_boot_fr.md @@ -10,9 +10,9 @@ <div class="text-center"><img src="/images/boot_screen.png"> -<p markdown="1"> + *Notez la valeur `IP` affichée à l’écran : c’est **l’adresse IP locale** de votre serveur.* -</p> + </div> <br>Si vous n'avez pas d'écran pour votre Raspberry, ce n'est pas grave ! Vous pourrez trouver son adresse IP autrement à l'étape suivante. From 52792239b7f229f9139972b452c67d128d5e53f5 Mon Sep 17 00:00:00 2001 From: Shad Faust <38153806+myrrhashad@users.noreply.github.com> Date: Mon, 19 Aug 2019 00:38:46 +0200 Subject: [PATCH 092/360] Update plug_and_boot.md This is a translation of FR version. - Going through the documentation, I had a slight scare because I did not have a screen with me and felt blocked because of that. - Markdown was disabled for one line --- plug_and_boot.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/plug_and_boot.md b/plug_and_boot.md index ca2a2c76..ee139d5e 100644 --- a/plug_and_boot.md +++ b/plug_and_boot.md @@ -2,7 +2,7 @@ * Plug your server in wired Ethernet, or configure the wifi connection as explained [here](https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md). You can also mount the second partition of the SD card and edit the wpa-supplicant.conf file prior to boot the card for the first time - on Windows you can use [Paragon ExtFS](https://www.paragon-software.com/home/extfs-windows/), don't forget to unmount everytime for changes to take effect. -* Do not forget to **plug a screen** if you want to see how boot is going, and a keyboard if you want to have a **command-line access** to your server. +* Optional : You can **plug a screen** if you want to see how boot is going, and a keyboard if you want to have a **command-line access** to your server. * Power up the server, wait for the first reboot to happen, and then wait until you see a big squared `Y` : @@ -10,8 +10,7 @@ <div class="text-center"><img src="/images/boot_screen.png"> -<p markdown="1"> *Write down the `IP address` field visible on the screen: It is your server's **local IP address**.* -</p> </div> +Don't worry if you don't have a screen ! You can still find you IP address in the next step. From e4ef4a5a6dbd74b5f693a0cc58cb4ab167ce4ded Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 19 Aug 2019 20:27:38 +0000 Subject: [PATCH 093/360] Change french 'ou' to 'or'. --- app_update.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app_update.md b/app_update.md index 94a4cd5c..da5a5b58 100644 --- a/app_update.md +++ b/app_update.md @@ -14,7 +14,7 @@ First, connect to your server through SSH and type in the following command (Wor ```bash yunohost app upgrade wordpress ``` -** Note: ** in case you have multiple instances of the same type (ex: 2 wordpress) installed, you will need to specify the instance name (ex: wordpress ou wordpress__2). +** Note: ** in case you have multiple instances of the same type (ex: 2 wordpress) installed, you will need to specify the instance name (ex: wordpress or wordpress__2). #### Upgrade an unofficial application Specify the git repository containing the upgrade. From 3e31aadd14e8485e80f7e044904d8bd19ca5a3fd Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 24 Aug 2019 17:47:31 +0000 Subject: [PATCH 094/360] Ajout du hairpinning chez Orange en fonction de la box. --- isp_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isp_fr.md b/isp_fr.md index 9cd648d1..ac174ff4 100644 --- a/isp_fr.md +++ b/isp_fr.md @@ -17,7 +17,7 @@ Tous les fournisseurs d’accès à Internet [membres de la Fédération French | **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)**<br> (fermé par défaut) | ✔ | ✔ | ✔ | ✘ | ✔ | ✔ | -| **[Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning)** | ✔ | ✔ | ✔/✘ | ✘ | ✔ | ✔ | +| **[Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning)** | ✔ | ✔ | ✔/✘ | ✔ (uniquement sur Livebox 4) | ✔ | ✔ | | **[Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup)<br>personnalisable ** | ✔ | ✔ (sauf IPv6) | … | ✘ | ✘ | ✘ | | **[IP fixe](/dns_dynamicip_fr)** | ✔ | ✔ | ✔/✘ | ✘ | ✔ | ✔ | | **[IPv6](https://fr.wikipedia.org/wiki/IPv6)** | ✔ | ✔ | ✔ | ✔ | … | … | From 207d0a20f650118e55e3f31ea650690da39ffb72 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Thu, 29 Aug 2019 20:07:17 +0000 Subject: [PATCH 095/360] =?UTF-8?q?Lien=20mort=20vers=20la=20conf=C3=A9ren?= =?UTF-8?q?ce=20de=20Benjamin=20Sonntag...=20J'ai=20mis=20ce=20paragra?= =?UTF-8?q?phe=20en=20commentaire=20en=20attendant=20mieux?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- email_fr.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/email_fr.md b/email_fr.md index d28238fd..ebfbe422 100644 --- a/email_fr.md +++ b/email_fr.md @@ -42,4 +42,7 @@ Pour aller plus loin -------------------- - Il existe une page de documentation pour [migrer ses emails d'un fournisseur de messagerie vers une instance YunoHost](email_migration). + +<!-- Le lien est mort (404) il faudrait retrouver le texte de cette conf avant de remettre éventuellement ce paragraphe: - Pour approfondir votre compréhension du courriel et de ses protocoles, voici une [conférence éclairante](http://www.iletaitunefoisinternet.fr/lemail-par-benjamin-sonntag/index.html)(en français). +--> From 76cb71cc71806138fed4d5fff19f3bceb6bc8381 Mon Sep 17 00:00:00 2001 From: frju365 <abld@abld.info> Date: Thu, 29 Aug 2019 22:41:04 +0200 Subject: [PATCH 096/360] Update email_fr.md --- email_fr.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/email_fr.md b/email_fr.md index ebfbe422..75d84ae9 100644 --- a/email_fr.md +++ b/email_fr.md @@ -43,6 +43,4 @@ Pour aller plus loin - Il existe une page de documentation pour [migrer ses emails d'un fournisseur de messagerie vers une instance YunoHost](email_migration). -<!-- Le lien est mort (404) il faudrait retrouver le texte de cette conf avant de remettre éventuellement ce paragraphe: -- Pour approfondir votre compréhension du courriel et de ses protocoles, voici une [conférence éclairante](http://www.iletaitunefoisinternet.fr/lemail-par-benjamin-sonntag/index.html)(en français). ---> +- Pour approfondir votre compréhension du courriel et de ses protocoles, voici une [conférence éclairante](https://www.iletaitunefoisinternet.fr/post/7-email-sonntag/)(en français). From ca5b9d450869340b8d43cf2e40e0da0340cbb674 Mon Sep 17 00:00:00 2001 From: frju365 <abld@abld.info> Date: Thu, 29 Aug 2019 22:41:43 +0200 Subject: [PATCH 097/360] Correct URL + typo --- email_fr.md | 1 - 1 file changed, 1 deletion(-) diff --git a/email_fr.md b/email_fr.md index 75d84ae9..662804fe 100644 --- a/email_fr.md +++ b/email_fr.md @@ -42,5 +42,4 @@ Pour aller plus loin -------------------- - Il existe une page de documentation pour [migrer ses emails d'un fournisseur de messagerie vers une instance YunoHost](email_migration). - - Pour approfondir votre compréhension du courriel et de ses protocoles, voici une [conférence éclairante](https://www.iletaitunefoisinternet.fr/post/7-email-sonntag/)(en français). From 0c47f2cc209900cb90d2d59e01574702ca239390 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 31 Aug 2019 10:50:54 +0000 Subject: [PATCH 098/360] Asked for support for apps: MyBB and Flarum --- apps_wishlist.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index 4328b3bc..2c4fc734 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -52,6 +52,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [FEX](http://fex.rus.uni-stuttgart.de/) - [FileTea](https://filetea.me) - [FitTrackee](https://github.com/SamR1/FitTrackee) +- [Flarum](https://flarum.org/) - [FoOlSlide](http://foolcode.github.io/FoOlSlide/) Open source comicbook/manga management software - [Fossil](http://www.fossil-scm.org) - [Framaslides](https://framagit.org/framasoft/framaslides/) @@ -113,6 +114,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Modoboa](http://modoboa.org) - [MotionEye](https://github.com/ccrisan/motioneye) - [MPD](http://www.musicpd.org) +- [MyBB](https://mybb.com/) - [Museek+](https://github.com/eLvErDe/museek-plus) - [Netrunner](https://github.com/mtgred/netrunner) - [Nibbleblog](http://www.nibbleblog.com) From 1e1851fb3f242d25182ac99ee4765a8323512aa4 Mon Sep 17 00:00:00 2001 From: frju365 <abld@abld.info> Date: Sat, 31 Aug 2019 15:05:23 +0200 Subject: [PATCH 099/360] Remove Flarum = Already packaged --- apps_wishlist.md | 1 - 1 file changed, 1 deletion(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index 2c4fc734..59b60446 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -52,7 +52,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [FEX](http://fex.rus.uni-stuttgart.de/) - [FileTea](https://filetea.me) - [FitTrackee](https://github.com/SamR1/FitTrackee) -- [Flarum](https://flarum.org/) - [FoOlSlide](http://foolcode.github.io/FoOlSlide/) Open source comicbook/manga management software - [Fossil](http://www.fossil-scm.org) - [Framaslides](https://framagit.org/framasoft/framaslides/) From ff2c0a8bf539c1f8fb4d8450166d8e91798930d2 Mon Sep 17 00:00:00 2001 From: Plumf <plumf@open-plug.eu> Date: Wed, 4 Sep 2019 16:50:39 +0200 Subject: [PATCH 100/360] =?UTF-8?q?Francisation=20du=20bouton=20longue=20r?= =?UTF-8?q?=C3=A9ponse=20+=20modification=20de=20lien=20qui=20renvoit=20d?= =?UTF-8?q?=C3=A9sormais=20vers=20le=20wiki=20plutot=20que=20vers=20la=20p?= =?UTF-8?q?age=20brut=20github?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- faq.md | 2 +- faq_de.md | 2 +- faq_fr.md | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/faq.md b/faq.md index 97c4f452..7614f9cb 100644 --- a/faq.md +++ b/faq.md @@ -95,7 +95,7 @@ and having some free time. Other than that, just doing what you can is already a #### What's YunoHost's political model? -It is described in [this document](https://github.com/YunoHost/project-organization/blob/master/yunohost_project_organization.md) :). +It is described in [this document](yunohost_project_organization.md) :). #### Will you port YunoHost to [insert favorite distro] ? diff --git a/faq_de.md b/faq_de.md index e5e10754..5a1928e1 100644 --- a/faq_de.md +++ b/faq_de.md @@ -72,7 +72,7 @@ Es ist ein weit verbreitetes Missverständnis, dass Neulinge bei offenen Softwar #### Was sind YunoHost organisatorische Grundsätze ? -Das beschreiben wir in [diesem Dokument](https://github.com/YunoHost/project-organization/blob/master/yunohost_project_organization.md) :). +Das beschreiben wir in [diesem Dokument](yunohost_project_organization) :). #### Werdet ihr YunoHosts für [Lieblingsdistribution hier einfügen] portieren ? diff --git a/faq_fr.md b/faq_fr.md index 0698ff59..22b4d10c 100644 --- a/faq_fr.md +++ b/faq_fr.md @@ -88,7 +88,7 @@ pouvez, c’est déjà trop cool ! #### Quel est le modèle politique de YunoHost ? -Il est décrit dans [ce document](https://github.com/YunoHost/project-organization/blob/master/yunohost_project_organization.md) :). +Il est décrit dans [ce document](yunohost_project_organization) :). @@ -111,7 +111,7 @@ Réponse courte : ce n’est pas ce que nous faisons. Réponse moyenne : Par le passé, les apps étaient gérées via des .deb. C’était cauchemardesque. Nous sommes heureux maintenant ;). -<a data-toggle="collapse" data-target="#whyareyoureinventingpackaging" href="#">Long answer</a> +<a data-toggle="collapse" data-target="#whyareyoureinventingpackaging" href="#">Longue réponse</a> <div id="whyareyoureinventingpackaging" class="collapse"> <p>YunoHost cherche à garder un système de packaging simple. L’idée depuis le départ était que « si tu sais installer l’app à la main, alors tu peux facilement créer un package basique en copiant-collant les étapes, sans besoin de connaissances particulière ». Ce n’est pas le cas des paquets Debian.</p> From 2fdc23fcfb3eb80411109d62438e1b07cfc43ffc Mon Sep 17 00:00:00 2001 From: Plumf <plumf@open-plug.eu> Date: Wed, 4 Sep 2019 17:22:49 +0200 Subject: [PATCH 101/360] Modification du logo de Pleroma de dimensions en 80px/80px --- images/pleroma_logo.png | Bin 1929 -> 1591 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/pleroma_logo.png b/images/pleroma_logo.png index ac82ca0c6661d1fbe3bb33e411ac8fa265b2c7bf..a199972db7f82b65e39adf177cc6fcd19ff81c84 100644 GIT binary patch literal 1591 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 literal 1929 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 U$K5Ft(KiY}I-Iw!vkkcQFPY@6&j0`b From d0a37ffbdeebde9a93f141f8a86052317efd1632 Mon Sep 17 00:00:00 2001 From: Plumf <plumf@open-plug.eu> Date: Thu, 5 Sep 2019 11:04:56 +0200 Subject: [PATCH 102/360] =?UTF-8?q?Modifications=20de=20liens=20non=20ferm?= =?UTF-8?q?=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app_pleroma_fr.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/app_pleroma_fr.md b/app_pleroma_fr.md index 831ba17a..fd2236e1 100644 --- a/app_pleroma_fr.md +++ b/app_pleroma_fr.md @@ -1,14 +1,12 @@ # <img src="/images/pleroma_logo.png" alt="logo de Pleroma"> Pleroma -| Index | -|-------| -| [Découverte de l'interface de Pleroma](#decouvertegeneralepleroma) | -| [Logiciels Clients pour mobile et ordinateur](#LogicielsClients) | -| [Liens utiles](#liensutiles) | + - [Découverte de l'interface de Pleroma](#decouvertegeneralepleroma) | + - [Logiciels Clients pour mobile et ordinateur](#LogicielsClients) | + - [Liens utiles](#liensutiles) | Pleroma est un réseau social décentralisé de micro-blogging qui propose une alternative à Twitter, le protocole Activy Pub qu'il utilise permet d'interagir avec le fediverse composé notamment de Mastodon, GNU Social, et d'autres. Il a l'avantage d'être plus léger que mastodon et se prête donc plus facilement à l'auto-hébergement. -## <a name="#decouvertegeneralepleroma">Découverte de l'interface de Pleroma +## <a name="#decouvertegeneralepleroma">Découverte de l'interface de Pleroma</a> Pour ceux et celles qui n'ont pas ou peu l'habitude des réseaux sociaux, voici en détail l'utilisation de chacune des fenêtres proposées. ### Accueil de l'interface @@ -36,7 +34,7 @@ Cet espace permet de choisir l'agencement de Pleroma, il est proposé deux agenc 6. Notifications On retrouve dans cette zone les messages où vous avez été cité, mais aussi les abonnements à votre compte. -## <a name="LogicielsClients"> Applications clients +## <a name="LogicielsClients"> Applications clients</a> | Nom de l'applications | Plateforme | Multi-comptes | Autre réseaux supportés | Play Store | F-Droid | Apple Store | |---|---|---|---|---|---|---| From 326811eaaf37fef93d7f2a0ba6155bf8c7921314 Mon Sep 17 00:00:00 2001 From: Plumf <plumf@open-plug.eu> Date: Thu, 5 Sep 2019 11:06:00 +0200 Subject: [PATCH 103/360] =?UTF-8?q?Ajout=20du=20logo=20de=20nextcloud,=20r?= =?UTF-8?q?estructuration=20de=20la=20page=20de=20documentation=20de=20nex?= =?UTF-8?q?tcloud=20et=20ajout=20d'informations=20g=C3=A9n=C3=A9raliste=20?= =?UTF-8?q?sur=20l'application?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app_nextcloud_fr.md | 90 +++++++++++++++++++++++++------------- images/nextcloud-logo.png | Bin 0 -> 6006 bytes 2 files changed, 59 insertions(+), 31 deletions(-) create mode 100644 images/nextcloud-logo.png diff --git a/app_nextcloud_fr.md b/app_nextcloud_fr.md index 31aaf3a5..4cc61a06 100644 --- a/app_nextcloud_fr.md +++ b/app_nextcloud_fr.md @@ -1,9 +1,29 @@ -# Ajouter de l'espace de stockage +# <img src="/images/nextcloud-logo.png" alt="logo de Nextcloud"> Nextcloud + + - [Découverte de l'environnement de Nextcloud](#EnvironnementNextcloud) + - [Logiciels Clients pour mobile et ordinateur](#LogicielsClients) + - [Manipulations & Problèmes rencontrés utiles](#ManipulationsUtiles) + - [Ajouter de l'espace à Nextcloud](#AjoutEspace) + - [Applications tiers](#AppsTiers) + - [Liens utiles](#liensutiles) + +Nextcloud est un service d'hébergement de fichiers, de nombreuses applications peuvent être installés afin de lui offrir de nouvelles fonctionnalités tel que un agenda, un répertoire, des notes et pleins d'autres (vous pouvez trouver quelques applications dans la partie [applications tiers](#AppsTiers) mais il en existe pleins d'autres suivant vos besoins). + +## <a name="EnvironnementNextcloud">Découverte de l'environnement de Nextcloud</a> + +Du fait de la constitution de Nextcloud, une base avec des applications tiers à installer, cette découverte de nextcloud ne concernera que la base de nextcloud sans applications ajoutés. Plus d'informations sur les applications dans la partie dédiée ou sur le catalogue d'application de nextcloud : https://apps.nextcloud.com/ + +## <a name="#LogicielsClients">Logiciels Clients</a> +Il existe des logiciels client pour l'ensemble plateformes. Vous pouvez les retrouver sur le site officiel de nextcloud : https://nextcloud.com/install/#install-clients + +## <a name="#ManipulationsUtiles"> Manipulations utiles & Problèmes rencontrés</a> + +### <a name="AjoutEspace">Ajouter de l'espace à Nextcloud</a> La solution I) permet d'ajouter un lien vers un dossier local ou distant. La solution II) permet de déplacer l'espace de stockage principal de nextcloud. -## I) Ajouter un espace de stockage externe +#### I. Ajouter un espace de stockage externe Paramètre => [Administration] Stockages externe. @@ -13,7 +33,7 @@ Vous pouvez restreindre ce dossier à un ou plusieurs utilisateurs nextcloud ave Avec l'engrenage vous pouvez autoriser ou interdire la prévisualisation et le partage des fichiers. Enfin cliquer sur la coche pour valider le dossier. -## II) Migrer les données de Nextcloud dans une partition plus grosse +#### II. Migrer les données de Nextcloud dans une partition plus grosse **Remarque** : Ce qui suit suppose que vous avez un disque dur monté sur `/media/stockage`. Référez-vous à [cet article](/external_storage_fr) pour préparer votre système. @@ -24,9 +44,9 @@ Commencez par éteindre le serveur web avec la commande: systemctl stop nginx ``` -### Choix de l'emplacement +##### Choix de l'emplacement -#### Cas A : Stockage vierge, exclusif à Nextcloud +**Cas A : Stockage vierge, exclusif à Nextcloud** Pour l'instant seul root peut y écrire dans `/media/stockage`; ce qui signifie que nginx et nextcloud ne pourront donc pas l'utiliser. @@ -35,7 +55,7 @@ chown -R nextcloud:nextcloud /media/stockage chmod 775 -R /media/stockage ``` -#### Cas B : Stockage partagé, données déjà présentes, données Nextcloud dans un sous-dossier +**Cas B : Stockage partagé, données déjà présentes, données Nextcloud dans un sous-dossier** Si vous souhaitez utiliser ce disque pour d'autres applications, vous pouvez créer un sous-dossier appartenant à Nextcloud. @@ -45,7 +65,7 @@ chown -R nextcloud /media/stockage/nextcloud_data chmod 775 -R /media/stockage/nextcloud_data ``` -### Migrer les données +##### Migrer les données Migrez vos données vers le nouveau disque. Pour ce faire *(soyez patient, cela peut être long)* : @@ -65,7 +85,7 @@ Cas A : ls -al /media/stockage Cas B : ls -al /media/stockage/nextcloud_data/nextcloud ``` -### Configurer Nextcloud +##### Configurer Nextcloud Pour informer Nextcloud de son nouveau répertoire, modifiez le fichier `/var/www/nextcloud/config/config.php` avec la commande: @@ -112,7 +132,33 @@ sudo -u nextcloud php occ files:scan --all C'est terminé. À présent testez si tout va bien, essayez de vous connecter à votre instance Nextcloud, envoyer un fichier, vérifiez sa bonne synchronisation. -# L'application KeeWeb + +### Nextcloud et Cloudflare + +Si vous utilisez Cloudflare pour vos DNS, *ce qui peut-être pratique si vous avez une IP dynamique*, vous aurez très probablement des problèmes d'authentification avec l'application Nextcloud. Sur Internet beaucoup de gens propose de créer une règle ayant pour effet de désactivé tous les options relié à la sécurité et à la vitesse de Cloudflare pour l'url pointant sur votre instance Nextcloud. Malgré que cela fonctionne, ce n'est pas la solution optimial. Je vous propose, certes de créé une règle pour l'url pointant sur votre instance Nextcloud mais de désactivé seulement 2 options. Voici donc comment: + +#### Cloudflare Page Rules + +Dans le panneau de controle de Cloudflare choisissez votre domaine et trouver Page Rules +l'url dans votre barre d'addresse ressemblera à : https://dash.cloudflare.com/*/domain.tld/page-rules + +#### Ajouter une règle + +La règle à ajouter doit s'appliquer pour l'url de votre instance Nextcloud soit: + +- `https://nextcloud.domain.tld/*` si vous utilisez un sous domain +- `https://domain.tld/nextcloud/*` si vous avez déployé Nextcloud dans un répertoire + +Les options à désactiver (Off) sont : + +- Rocket Loader +- Email Obfuscation + +Sauvegarder et nettoyer vos caches (Cloudflare, navigateur, ...) et le tour est joué. + +## <a name="AppsTiers">Les applications Tiers</a> + +### L'application KeeWeb L'application KeeWeb est un gestionnaire de mots de passe incorporé à Nextcloud. Elle permet par exemple de lire un fichier de type KeePass (*.kdbx*) stocké sur votre instance Nextcloud. Mais il arrive parfois que Nextcloud ne laisse pas l'application prendre en charge ces fichiers, ce qui rend alors impossible leur lecture de KeeWeb. Pour remédier à cela, @@ -142,25 +188,7 @@ Enregistrer le fichier (**CTRL** + **o**) et quitter nano (**CTRL** + **c**). A présent, le problème est corrigé. -# Nextcloud et Cloudflare - -Si vous utilisez Cloudflare pour vos DNS, *ce qui peut-être pratique si vous avez une IP dynamique*, vous aurez très probablement des problèmes d'authentification avec l'application Nextcloud. Sur Internet beaucoup de gens propose de créer une règle ayant pour effet de désactivé tous les options relié à la sécurité et à la vitesse de Cloudflare pour l'url pointant sur votre instance Nextcloud. Malgré que cela fonctionne, ce n'est pas la solution optimial. Je vous propose, certes de créé une règle pour l'url pointant sur votre instance Nextcloud mais de désactivé seulement 2 options. Voici donc comment: - -## Cloudflare Page Rules - -Dans le panneau de controle de Cloudflare choisissez votre domaine et trouver Page Rules -l'url dans votre barre d'addresse ressemblera à : https://dash.cloudflare.com/*/domain.tld/page-rules - -### Ajouter une règle - -La règle à ajouter doit s'appliquer pour l'url de votre instance Nextcloud soit: - -- `https://nextcloud.domain.tld/*` si vous utilisez un sous domain -- `https://domain.tld/nextcloud/*` si vous avez déployé Nextcloud dans un répertoire - -Les options à désactiver (Off) sont : - -- Rocket Loader -- Email Obfuscation - -Sauvegarder et nettoyer vos caches (Cloudflare, navigateur, ...) et le tour est joué. \ No newline at end of file +## <a name="liensutiles">Quelques liens utiles</a> ++ Site officiel : [nextcloud.com (En anglais)](https://nextcloud.com/) ++ Catalogue d'application pour nextcloud : [apps.nextcloud.com](https://apps.nextcloud.com/) ++ Trouver de l'aide et poser toutes vos questions : [forum.yunohost.org](https://forum.yunohost.org/c/support) \ No newline at end of file diff --git a/images/nextcloud-logo.png b/images/nextcloud-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e813cecd0065a18bb50b324e7da6c9550a2d79fd GIT binary patch literal 6006 zcmV-+7m4VJP)<h;3K|Lk000e1NJLTq0040S002-31^@s6E{>W*00009a7bBm000XT z000XT0n*)m`~UzKC`m*?RCr$Poe7*9)p@|bk+ka*6Ji5~a+b?27zi=!uDKxzM+$+a zBqk|^BwR@-!RAQ7_DZw6)LafRF;|j;sgsftS_lxX0EPOH));7j(1g==xbMR@yQ^dJ z|K4b{T1lfBX=TTzdcWVSq?tGGeb@Wm_kHhsZ$+A=Nr5H>niObKph<xy1)3CSQlLqJ zCIy-lXi}g_fk6sbpD1E<J-Ve>&MxA}&LYk>T)TkZj$ErmtUrnsc|{!Od9keLWcI$V zeNu4W_?g(%yB*9q8ipMM^Y-R*D~XM;U=&|-A~~)|1RioZj!32--dV5n{CC{An|pUj zXWNS#Geb9CCfcdV5{dpZ#6MnQEfZj%NH*;<PMM`lEG^!BWoR_!GB(ry9$)T|T=vHj zZ+~oKWah@l#Q4&QFyI21^evb-PBH<E^W%y#R7)f(v;#BKYvBG(lFeKqiK&0un3%b7 zG0{#P0nvXXvDQhF89-HL8AM9%VWOc7Rh1hX0W$|)qTLyc%G);<Mh+AE^@ygOI+qc6 zF)DC`VW8n%1Ht!3W|UDWPKFWLEwBEmORhg*JtA3OR}G{>eE<Z$Wv3LzITCI8zH6xH z=v#+id!sVKoS8{q&HQ?fB-%59aQ+1=tQ%@{JvtI<w@M_IW%R6-3-`)TKy_ehr+TDi z<V-XAl!?_CSTI~b%VMrm6=_s0-K&-AAOKp&&+zfU^PabW#=yr{(JzdgS|1KQ%Oi9@ z3gL@NG}14#_Eqz^p`|fQv{Mt9s}2UTLm|*)sI(>Dp@66azYF1?g_w(Y_Mmj`_k3s! z?ButZ|E`g&65o%3$`mzF)Z%P)8I~DXO<(wd)|>FKk9#AzJpnkjrp_j&t~aOpsb!Cm zG1^S`T_Ev}%R|H6z3gx4`*ZX=6*%x&Wiu|MO4f4!HP^k7hfvvzB+>Cf=yrW74v&e6 z<hG2oGim!o=Bgbf3Y<A5Dg-x_)q#-r(e!sVt>*l1kjnWO4!u=@w^MBh#{JY8=c_^s zgvKDr4y>Vz-%|fJu3lhxMRL{}vD+N!S^`|rF)(jyn7S|ZzQpHIhN0>=R&z<zdKGJ} z<TA$s^Mh4k?&>`he9xl6&zrWj7?(%sVTdv4vl@5E`6D+M0{c%SvHx53GP8ar+NqNu zayJ&;_5k6|Rbl)ym25TVo!opzL$`DtfN5V+?A|dn_AqTvF+}$B`PA1lvXZ-%&r2BP z;r+a>WqZ-?1+D<nK^CRq*N?)SP5&SGO@)!~m%$rfGM+iR8wQ>#G5i&Edz2oAZ&mzN zop%+7%)lS0e__2AaqUb@BwLW^OPTMc8z5Dp{D7?_T0_kFepE{KpHL~U45@0T&Xd+r zmopz#AuLv;<Gc^@=Mr(bp<XGLuHLUPf6fD^2}Z^G5xsSk&W}A1diIdM5=(c3fj>v> zPm#2a>VSE>_+`%`Rv~e6Y7uuyG}|q+_OA(@+L&mk5F5D$0-shhz@@+|vD9!#_b&&5 z;~<X9NISI^f0rX9Tcg6tiK>XJ8{p(#=lL||sz++VxKd?1iRzBs!bsZA2xTcFjo_hH zo!mPJ&VIn^hUpTiNlYPk0M9PWo3#mZDLu@b4qoa0OC)MtD6`r^qow9s4aJ!W;bEZK z3N=VvX%8l@31M`kwV*OZZh(1+x+y0iB>oI^iTM#yds0Ifs6ECzdTH-#wELdRtP(?1 z;Z^n6GIBh%znK@d%_L$iWCXel)H?OLKBj%>scJad@&n1{zEcBJY6x}MsY8+0dyVU$ z9o7qQDRfG&77UYgUnj)Fna6UAw(KD}RnsMk!qi3e4D`)F1z%YUqM_>A$<vvKuP;my zr7tOivzZsTy(ibD2-{h{DnC?*C6&ApFY*yWb08yLt=Pa4ZY0{N(FW)UHoPALiz6Ny zzEVB!eR?Yh6~Qr9t3Ej!27Z^%-HaM7V<7c3#+mM4OuefEF{`VB^{>o}_ZiqrN29jq z8Y??+b#t9!rj$yh;EU!%dByZF5g|&Y_Pr4wZBfg14%$gg<G>PbPP9|gV93qJ3iSh8 zt*o5!FVr7=m})x5jf3FrFy!+lSnVNQY0fc>&Y@p%jI~r6>5*uTk)WpjZvru^w}PEI z2w{B?Sakj$S`6V;ZRT%Rvc`-3%S>A5(EC8_QRAkFvjcb?PW$^AtGd#h@AYU!vpoL- zxIPqwN;#mVZ`i#$ft~EG&sA9B(R(^VvN<CE&i5oYaJwW996G6V_3p`NyAri|SVieI z4AZtFFwiG3qULxu{WJtrUvS+OOBOTYmNOdL%hYPAV3i44o<16M$fj?DUIYo+h6Xom ztoxib4SHV5v@zb-kZNg($^i4e1_c622zBagM;k6eepXv9_ZCv~Wla6s${45sbhbUo z2>N?e)gwm5R#GJfP#*>k&J}k{XS<I&2tqaF^Uikl%<m`&ZOGRO;2WP3K~DFdSjIrD z6z@pm&n`qzPBaFZYM|1hbatnhLs6-p3IZVn6J;+9nokWz9ZH%sYBX~hh6XC5N=Z!p z0Orl0?%IlgS9{k*N;$kZ2%!c&Uy7xetJ!!{!zYt|8(Phft^=#bNaO9lg^|})oqsKh z6cd>ggi{zM?rg$ol}3;HHtGI%8KO4_b!48$+aCw;CB`4BsTdPq9kG{cdaeG-D`CWk zH8aumU+-nKg@yAbB2s<+5h+xv$X^Gc5r&DAeZy(GQXqokYrPuOQPK0q+|`8|imS#o zJU8rMamZdjq~7W>3pw1&)iu)4HeQ0Zub35=(lR)8sXJ4(grVl<zH^w{(Z}fiT9#?b zW2He*y3f_V&j%#Ky)cYgIxl8x9*J&;wcw`{A0yERQdj#;48kJ}6Q6WPP6a->(fNr? zzPjubw(Q_<*!VSJ`qn;b=_f2amFi)A(U-3Q=F_w*)H~GB@ut+RJV=ZuVAvBF)DOeN z=iG(V3ZSX;8;L2<`-TF%E2U2CA+9rDLvdZ3u|{ClPuYTQHm#Y7y6!1*gxI~ouA7U; zLD&Z{(Oar2MlK)f6VV7!)e?q@zsEAn_)fkNW2Iaqor{B`3yz$Li?Neg_Nk?qpm%E& zwG%i$)Y5E~y1PT%+DD>>3ZpHbMdH662uEV+XtNYXhOB?|Ci4;P=$hlOnfMHyyugSn zZ%EaLF5kpjkHq1>LgI^cX}xl>d#4eph}S#{wKWr5=F^cc1R>O*=SR8;$F)rL3ZH7M zTm(GlGQ}L>3rk|@Sm>$lMVkqFSMtAI3;s#26+t+K4ZB??t)tJE0nIKb4N7}a3XP~_ zi7q(vxR!}yVWK<CE!J+lL*(B&1z?C)R7iC4B0=hB`7JKH5u^9GK7*^WG6=D{pWCS| zOc36ROe|M(`LJ6xIE~iO#cF3Q*YzOub6`OwTDp`^nuc`%?N5h^ZEmu&PZZ2uzdRRQ ze;9;ISlxXis|;r%VVjgO!3)Q!ij1`$hN?V_grqm<m{bhWz`5qN#HuDbxov1%bP@Fr z(y><txCY)^Ms5ZiXYlNzAjF38{F|u!iG}5*;)cw?gzDK0`#D7Sd6X9un1B|M$Y|&> z9Y2tuK5m4FI{)M%#WdF^pRMl0Kox?4KHV$w%P@F^nG@AXCp95=jR~3g0j~E8E8Ed6 zk;X{?tRcIYyI@)Y;5<!C)WVI%oMxDB@>)uYvQ;HF68$!+YL76;)m+C;?F{j!`z}Sf z)*}8RD;N%{&TqBD6KsRGrCEPFa!tY?oM5IC-@I8*tC`%_%b|NH|2rHLU24pc^v6$_ zwLd@8+f%hBKNMiA<(YU4G=c4mI@bh?+n?j}0e9uTbUw;kYf(agVqGO_7&Nlj$q|gM zd1#F-d{w>%`b8E2=Tbg@fMEAmTtxQZ@&fxx2c?H+h5D_<D#|)g20qq=tZT!f7oLgn zc8z_W0>NMPmB6sQ78uBgv#cBlPA|%SyN*68JKBo8j`o%jEKo<Uky(#~oeru)cHUhy z9Qh#xJleEhiOB9+pOX0}rm=YYJ&f4S!p59heacdZ^nFcN$qbO*DW}qYKHnplsNtFD z0<NnO(@Z*`cIYu9xSygLYQgE`k5pS0$w6rt*in?|WIX~?S(vRd;xz*<)_O84>o-b# zX<(GUDtPfFV`bbHYAJrlRdbbs8r(Ch6B$+c_Y~TTcU%V3yUb{GjhUJ#F@%0<$Yj&c zA}C*h&MRtZs5T~Q%ZZLfAbS)YE;WSqfDeO!sY90vunIyp^K}5eY6!sbHuZetw7=Gv z`K9f8^Ns7;{3EW-y=1H%Tno~Lx?Q~;2-7{ZbGljZ_Fd!!j;vV`?*!hVOJVVLh4l>H zeMeeVu=DG#K>!)N@|LVg<0PXXn>h;lhDymOZa$ogQ3;^gi^ihX&cPJ_E`*$D<`JX! z^CNA@BC=|$ytHNpR88Ch;$5W1`$r?}q%AF@I$iZv0RWG=I!9;C5W0oFe~NIV$_QQj zdRGb+5SfA&P$Oy@LO9B`oU0gK#@t^!4~=n-FK-gb$+Ttj{1}8HW{jhPyQFUwEvhSR zj3z=jGU-*oJXiWxUndtIR@Yi-{Y><*u~XZ@pcDCd9E8~2xFO0gZ(dPEl*pD@?YJL+ z7qUpaJV;OpUFmSWlTmwk)np_u#;6HY>3)rSJ;jCL;XH+)vqC_CUM!8iko_G|t9B~S z_F_7~?Lk1QC4G7GRJuROJ4YfMYJgQQUA+g=kFLn$YUQ>!?v=M{qwN`kFZY4*MMeG- zX5WG^zaG?VwdccUqStyn86*37M}F=K@PEZ8S=^Q~51-L`fqT!vJT=e57duH#N)&b1 zGRfEA@LKamlGy>QE{YPYC@bAf$9FA6_2Yt4F10;XbGhsauA^Y!AHoAp&8}se!YIxU zaCYL?=5(k-PuD14=J&IV>=n{|a2=CqITVd!Voey<P&tv@12sj0E&@_et@VPPkGKSN zKghsWVfb-@Sqnk!t>fpl8#e10pt9x@9Zy5ZW4N9&22ohUp(30C%=hM5?I)Lg)@0TN zrJbyAdQ|9d!)Kxbo#@b&l%p{~er;4-r7Z2?5>pvy_V1f5-}jsT5*>kSdBg3t5$|st zOf-y~`m(Hf{~sXm41T?3Mx|!~4~G(F^f5xsC@18X8JH>kYZ-x6Ea&0$w+`N|cXC+= zpw!T$o!pgJ<axY7QZxGi)ll)=8^4fNar1>$lfu?AP3*lDtMM`nnBUg`$p%q%<7A>o zI=h#%Y%E=X{SwCLZZK5M&-~Wz3ajPnmzi}!s+prx%;{2h@c9dJK_A~BI8p}?8#faR z%uKP!8u={zJAhlHiWswgJil2zH`}b$e^h_*9X?;=9&;Vr&o$FKjPF+mVb|v?pA06J zQtaX<S_z|V!U!9~NYkLEu0*eq=!g$x=H7KhMb;-%nte4X(4;_<0!<1uDbS=qlLG&5 zDbRT9)J|<f`06uQg=!tHBKq;T^c;*cy@3^X>j4?%*2)_9k_;aaJN0QSW-`pJmpC_W z*zGkg>}L0ll&(iPz9Y7jWuAY*2h#&(7s$vlNwU+988)PT4cMtoS$nJ}y<eBj?uM9K zuQS;E8zu?bx)p!5);)d|TWlN?#pxt^atfiVQ;9!LVePPks7M>55nv-X!^m*^HEO4* z9!qvj&96CTrJXfDUFTcR#UW&*n#yt-LjT5Oi@B$3d^Ml+r021@#h$7Wl5QBNM<kuh zRlawx=W$NtAd9SX-~7>3H4@aZh{`zC(-$v)W`wMIv0r}tcY}?aiG)l$ztZ!Vt}a_L zYoGeyDs6Yp?^@-Zm1()+SdF-Azy5vKNP@;N(LM13vRLj(OXWomAJCHq2aAr(NbDSf zDLa`>CEbtyFQd4N`N=z3N>%V)gvEM>zL#X@ENSo}Gfl|MBC|TyI$3%i<LKw~N);XM zXAzuMbJm&_IYIhXe_FQK@?-jV2!Xk}aC%iGNX@~3v9qc7HwLHf<<AjZ*8>Irr%>Ha z9mV&(xi_Z-Cspe+xiq0lGvI+HsoUi*LOV^8O}AbPTno_v?5<WOHpV1r$Z&Qyys$Lj zryeYHmsPYo#ZG;W-*<w@N;7vlSq{pxV2<-^kaSNcbdT7)kl(5<-C`#RqeV2eU1OtO z_>A*JISI;=N4Tf!e~w|Go?aM<UO?NoBOKqO&V1slhjX7(5PgcB`YH)b9Ju6sO#PW$ z-{<=q%=5R?Ci_VWg;W3K*b1#o;2r^aYn%&jYIjma?sIc%v***^r93+xICKR@)A}2d zp3$h02s~yD$Vaq_)`wixI}d5RR63^&o(gr*14$V%R<qx}%(VbXUIG!mL9+|^e4gJA zumtflo~c!-sg7Q9EtzGRRs0^zUA0qssL??rLUph%xS~Mp^X~kmY_fS})oZ7Apx%5& z-E8Lb`9%!6pZ--i=JUDK<l0yqFReR#ON%S02tZ-OVGrMz%B(4xNahwhrP<xOVxkAv zl{Hb%jRrC?bocwfm~BArB@klO!9xVZBmDD`TuyUH7ns)K?YCfgGD792(z9Goo9IBA z4<~idRaIWGiZ;F5y?RQ-w+zvX8K`xyI7W%@m$9b8^D>!r<)>BUS{6toeKyZ^*^5&a z1BtKdT!m#HU@0EKiql6tyNM>$M%d6sVrV9Ai;9V&=Dtyu860hWLvnqj2Nsoh+a(}< zh>RL{nyh~Ji!g9#uBy8*UqlQ?RhgcA{6uJo+={z$JtIAbloQrw->99^#bT}F(Y_J` z@)^Mf9-S7H+Z@tVRul(a9t)I)FgW}rMk0sLah8pqrWj@|&rTgk-Q6)xG-dE~=EVnL z<lq@Gs=<bmQ=jR4sq>S6G4JR+UU>UWZtPa&4L!osO<PnKp%Me!L@Tv3^wRW9wLmLv zGw>K3hDU*Q8e`Z5b~B{Hviz^$|5ae8c0u+22lao3n!^|p&eo3nNNnB4SSYF<b&tJU z;_WIRx@Y1PIrBz;Nmu6UiNowR%)faTpL<IpSsp@3Bz2p)-v6(B-M9JNnJw<*))p5B z_}I#)XMN|Qx>Z}P<u6tsk6O11+lHo2oqTp~1&{@&*2$lL6>onN)zpLKcm*c^YH~^M zluTbAM$NX|JA-*|q1g{<r%1T9eg&FKFeJLf-e0ZG6F{8<09#(*`&{ZN5!6uVX3jhd z14oaM)(x%+7_>;XnS32v;JRe(2d|=z$8gN%@$9M4Ie9vRP)EvGtlfQR>otjO)hn6T z{*6TCUrG0}lg(+4xonOd()&^W2EN}aQRlz&*kNQ@bJ@l)kM=p@Q}<Lx_QZ;v3k)2{ zXT2vju?>Y$<R;o%CVd~>CoQ9Kd-%^fCJSBRY>cztn33pUtvMF|5zW$563dHYy$vH& zdflR%Xw-bSB5{1Yl#JXY2?KSvk%q#&Gq%-)=kOs6gU$|DV)gt_$I%pdwf2ZV=I;py zI#>}6^W6!PH#b6%bNDA<sNrbKVi`NWmwuRQBf6JD_ZCtd&BXq9QWSNo+CegNdmWiG zX#ZN;x|aJ%7?^@N3wVAj*Xc5=0LLoc{|fcnXg>w>o&f&ajU_5_4!*93=N){xkoM-v z$Z>j-*2DZ(!wr{5|C3x}9R7w(tf(L*07SJu0D<xYgY;l_^&va4%!*5V@i>TkI0&(e z*11_`x2-5VHhVF07V}?u@Z9cYp5grOc#-DoWP^{MTBsJLI{RAAzb7W+#?!t-Sk9V5 z>ijP-Tm}U#zKrN)WLLB2Qmsa>=)Z`tEQE+%zE1WwV9?QBUS>Z$T3W~G_H+Ot*=qKF zx=FUYB$5*twL3GK*GPZg)6&B!lnMOdL<v1AzTCXoq(GAbO$szA(4;_<0!<1uDbS=q klLAc&G%3)eKy4KGGwzbUOZz=ekN^Mx07*qoM6N<$g77eoQUCw| literal 0 HcmV?d00001 From 698870e1be51806badd373187fa0d8f520b8374c Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Thu, 5 Sep 2019 18:00:25 +0000 Subject: [PATCH 104/360] Added flatfile blog engine "FlatPress". --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index 59b60446..066da909 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -52,6 +52,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [FEX](http://fex.rus.uni-stuttgart.de/) - [FileTea](https://filetea.me) - [FitTrackee](https://github.com/SamR1/FitTrackee) +- [FlatPress](https://github.com/flatpressblog/flatpress) - [FoOlSlide](http://foolcode.github.io/FoOlSlide/) Open source comicbook/manga management software - [Fossil](http://www.fossil-scm.org) - [Framaslides](https://framagit.org/framasoft/framaslides/) From 5cda9e586dd3f2c0fa47c59fb2967841cc22187f Mon Sep 17 00:00:00 2001 From: Plumf <plumf@open-plug.eu> Date: Fri, 6 Sep 2019 00:40:08 +0200 Subject: [PATCH 105/360] ajout d'une page sogo + du logo et une courte description --- app_sogo_fr.md | 9 +++++++++ images/sogo_logo.png | Bin 0 -> 6416 bytes 2 files changed, 9 insertions(+) create mode 100644 app_sogo_fr.md create mode 100644 images/sogo_logo.png diff --git a/app_sogo_fr.md b/app_sogo_fr.md new file mode 100644 index 00000000..1ffd6bdc --- /dev/null +++ b/app_sogo_fr.md @@ -0,0 +1,9 @@ +#  SOGo + + - [Liens Utiles](#LiensUtiles) +SOGo est un service de webmail pour votre serveur email, c'est une alternative à [RoundCube](app_roundcube). Il permet aussi la gestion des agendas et contacts présents sur le serveur. + +## <a name="LiensUtiles">Quelques liens utiles</a> + + Site officiel de SOGo : [sogo.nu](https://sogo.nu/a) + + Dépot de l'application pour Yunohost : [github.com/YunoHost-Apps/sogo_ynh](https://github.com/YunoHost-Apps/sogo_ynh) + + Trouver de l'aide et poser vos questions sur le [forum de Yunohost](https://forum.yunohost.org/c/support/apps) diff --git a/images/sogo_logo.png b/images/sogo_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bfad4b53daa721c068eaac2779307c8b99b86910 GIT binary patch literal 6416 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 UQS|KJivyteQBAH^#w_H20KRcrjQ{`u literal 0 HcmV?d00001 From 9730868cb89d1d2d164b735414295f6ce97782f6 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Fri, 6 Sep 2019 17:24:23 +0200 Subject: [PATCH 106/360] Standard computer -> regular computer --- install_iso.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install_iso.md b/install_iso.md index 059f45eb..5652a861 100644 --- a/install_iso.md +++ b/install_iso.md @@ -1,4 +1,4 @@ -# Install on a standard computer +# Install on a regular computer *Find other ways to install YunoHost **[here](/install)**.* From 39fa1f6b606ecfb72abe2c90451a17d266c839b8 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Fri, 6 Sep 2019 17:42:21 +0200 Subject: [PATCH 107/360] Misc wording improvements --- boot_and_graphical_install.md | 6 +++--- boot_and_graphical_install_fr.md | 2 +- burn_or_copy_iso.md | 14 +++++++------- burn_or_copy_iso_fr.md | 2 +- create_live_usb.md | 2 +- install_iso.md | 8 ++++---- install_iso_fr.md | 8 ++++---- install_on_arm_board.md | 4 ++-- install_on_arm_board_fr.md | 6 +++--- install_on_raspberry.md | 4 ++-- install_on_raspberry_fr.md | 6 +++--- install_on_vps.md | 3 ++- install_on_vps_fr.md | 3 +-- plug_and_boot.md | 2 +- 14 files changed, 35 insertions(+), 35 deletions(-) diff --git a/boot_and_graphical_install.md b/boot_and_graphical_install.md index 746c8282..c20fe280 100644 --- a/boot_and_graphical_install.md +++ b/boot_and_graphical_install.md @@ -9,10 +9,10 @@ If you want the network configuration to be set up automatically, you have to pl The wireless connections are not supported yet, and if you use intermediate routers, the network ports opening will not be automatic: Your server will not be accessible externally. -## <small>2.</small> Boot on CD / USB key +## <small>2.</small> Boot on CD / USB stick -Boot up your server with the USB key or a CD-ROM inserted, and select it as **bootable device** by pressing one of the following keys (hardware specific): -```<ESC>```, ```<F8>```, ```<F10>```, ```<F11>```, ```<F12>``` or ```<SUPPR>``` +Boot up your server with the USB stick or a CD-ROM inserted, and select it as **bootable device** by pressing one of the following keys (hardware specific): +```<ESC>```, ```<F9>```, ```<F10>```, ```<F11>```, ```<F12>``` or ```<SUPPR>``` ## <small>3.</small> Launch graphical installation diff --git a/boot_and_graphical_install_fr.md b/boot_and_graphical_install_fr.md index fcfd7c72..daf928cd 100644 --- a/boot_and_graphical_install_fr.md +++ b/boot_and_graphical_install_fr.md @@ -11,7 +11,7 @@ Les connexions sans-fil ne sont pas supportées pour le moment, et si vous utili ## <small>2.</small> Démarrer sur le CD/la clé USB Démarrez votre serveur avec la clé USB ou le CD-ROM inséré, et sélectionnez-le comme **périphérique de démarrage** en pressant l’une des touches suivantes (dépendant de votre ordinateur) : -```<Échap>```, ```<F8>```, ```<F10>```, ```<F11>```, ```<F12>``` or ```<Suppr>``` +```<Échap>```, ```<F9>```, ```<F10>```, ```<F11>```, ```<F12>``` or ```<Suppr>``` ## <small>3.</small> Lancer l’installation graphique diff --git a/burn_or_copy_iso.md b/burn_or_copy_iso.md index 1c4f7007..13e365b8 100644 --- a/burn_or_copy_iso.md +++ b/burn_or_copy_iso.md @@ -1,13 +1,13 @@ -# Flashing YunoHost ISO on a USB key or CD/DVD +# Flashing the YunoHost ISO on a USB stick or CD/DVD -Now that you have the ISO image of YunoHost, you have to put it on a physical medium: **USB key** or **CD/DVD** +Now that you downloaded the ISO image of YunoHost, you should flash/burn it on a physical medium. Typically, this is done on a **USB stick** but you might want to use a **CD/DVD** for older machines. <img src="/images/usb_key.png" width=150> <img src="/images/cd.jpg" width=150> --- -## USB key +## USB stick ### With Etcher @@ -15,7 +15,7 @@ Download <a href="https://etcher.io/" target="_blank">Etcher</a> for your operat <img src="/images/etcher.gif"> -Put your USB key on, select your YunoHost ISO and click "Flash" +Plug your USB stick, select your YunoHost ISO and click "Flash" ### With UNetbootin @@ -23,12 +23,12 @@ Download <a href="https://unetbootin.github.io/">UNetbootin</a> for your operati <img src="/images/unetbootin.png"> -Put your USB key on, select your YunoHost ISO and click "OK" +Put your USB stick on, select your YunoHost ISO and click "OK" ### With `dd` -If you know your way around command line, you may also flash your USB key with -`dd`. Assuming your USB key is `/dev/sdb` (be careful !!), you may run : +If you know your way around command line, you may also flash your USB stick with +`dd`. Assuming your USB stick is `/dev/sdb` (be careful !!), you may run : ```bash dd if=/path/to/yunohost.iso of=/dev/sdb diff --git a/burn_or_copy_iso_fr.md b/burn_or_copy_iso_fr.md index 577c79aa..4fd5aab6 100644 --- a/burn_or_copy_iso_fr.md +++ b/burn_or_copy_iso_fr.md @@ -1,6 +1,6 @@ # Flasher l'ISO YunoHost sur une clef USB ou un CD/DVD -Maintenant que vous avez téléchargé l’image ISO de YunoHost, vous devez la mettre sur un support physique : une **Clé USB** ou un **CD/DVD**. +Maintenant que vous avez téléchargé l’image ISO de YunoHost, vous devez la mettre sur un support physique. Classiquement, il s'agit d'une **Clé USB** mais pour certaines raisons vous pouvez aussi utiliser un **CD/DVD**. <img src="/images/usb_key.png" width=150> <img src="/images/cd.jpg" width=150> diff --git a/create_live_usb.md b/create_live_usb.md index 2a59c1dd..bcf39bc2 100644 --- a/create_live_usb.md +++ b/create_live_usb.md @@ -147,4 +147,4 @@ cp /usr/lib/syslinux/menu.c32 image/isolinux/ cd image && genisoimage -rational-rock -volid "YunoHost Live" -cache-inodes -joliet -full-iso9660-filenames -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -output ../yunohost-live.iso . && cd .. ``` -Great success! Now you can burn the .iso or use [Unetbootin](http://unetbootin.sourceforge.net/) to copy it on a USB key. +Great success! Now you can burn the .iso or use [Unetbootin](http://unetbootin.sourceforge.net/) to copy it on a USB stick. diff --git a/install_iso.md b/install_iso.md index 5652a861..43575844 100644 --- a/install_iso.md +++ b/install_iso.md @@ -20,13 +20,13 @@ You can use any computer with **256MB RAM or more**. ## Installation steps -<a class="btn btn-lg btn-default" href="/images">0. Download your ISO image</a> +<a class="btn btn-lg btn-default" href="/images">0. Download the YunoHost ISO image</a> -<a class="btn btn-lg btn-default" href="/burn_or_copy_iso">1. Burn or copy ISO image</a> +<a class="btn btn-lg btn-default" href="/burn_or_copy_iso">1. Burn the ISO image on a USB stick</a> -<a class="btn btn-lg btn-default" href="/boot_and_graphical_install">2. Boot & install</a> +<a class="btn btn-lg btn-default" href="/boot_and_graphical_install">2. Boot the machine and run the installation</a> -<a class="btn btn-lg btn-default" href="/postinstall">3. Post-install</a> +<a class="btn btn-lg btn-default" href="/postinstall">3. Proceed with the initial configuration (post-installation)</a> --- diff --git a/install_iso_fr.md b/install_iso_fr.md index 63840dd3..043b5198 100644 --- a/install_iso_fr.md +++ b/install_iso_fr.md @@ -18,13 +18,13 @@ ## Étapes d’installation -<a class="btn btn-lg btn-default" href="/images_fr">0. Télécharger l'image ISO</a> +<a class="btn btn-lg btn-default" href="/images_fr">0. Télécharger l'image ISO de YunoHost</a> -<a class="btn btn-lg btn-default" href="/burn_or_copy_iso_fr">1. Copier l’image ISO</a> +<a class="btn btn-lg btn-default" href="/burn_or_copy_iso_fr">1. Flasher l’image ISO sur une clef USB</a> -<a class="btn btn-lg btn-default" href="/boot_and_graphical_install_fr">2. Démarrer & installer</a> +<a class="btn btn-lg btn-default" href="/boot_and_graphical_install_fr">2. Démarrer la machine et installer YunoHost</a> -<a class="btn btn-lg btn-default" href="/postinstall_fr">3. Post-installation</a> +<a class="btn btn-lg btn-default" href="/postinstall_fr">3. Effectuer la configuration initiale (post-installation)</a> --- diff --git a/install_on_arm_board.md b/install_on_arm_board.md index 9e12e380..f6f70aa9 100644 --- a/install_on_arm_board.md +++ b/install_on_arm_board.md @@ -31,11 +31,11 @@ YunoHost doesn't yet support ARM64 boards. For more information, see [this issue <a class="btn btn-lg btn-default" href="/copy_image">1. Flash the SD card with the image</a> -<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Plug & boot</a> +<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Power up the board and let it boot</a> <a class="btn btn-lg btn-default" href="/ssh">3. Connect to your server with SSH</a> -<a class="btn btn-lg btn-default" href="/postinstall">4. Proceed to post-installation</a> +<a class="btn btn-lg btn-default" href="/postinstall">4. Proceed with the initial configuration (post-installation)</a> --- diff --git a/install_on_arm_board_fr.md b/install_on_arm_board_fr.md index aca92685..02f207cd 100644 --- a/install_on_arm_board_fr.md +++ b/install_on_arm_board_fr.md @@ -29,11 +29,11 @@ YunoHost ne supporte pour le moment pas les cartes ARM64. Pour plus d'informatio <a class="btn btn-lg btn-default" href="/copy_image_fr">1. Flasher la carte SD avec l'image</a> -<a class="btn btn-lg btn-default" href="/plug_and_boot_fr">2. Brancher & démarrer</a> +<a class="btn btn-lg btn-default" href="/plug_and_boot_fr">2. Brancher la carte et la laisser démarrer</a> -<a class="btn btn-lg btn-default" href="/ssh_fr">3. Se connecter en SSH</a> +<a class="btn btn-lg btn-default" href="/ssh_fr">3. Se connecter en SSH sur le serveur</a> -<a class="btn btn-lg btn-default" href="/postinstall_fr">4. Procéder à la post-installation</a> +<a class="btn btn-lg btn-default" href="/postinstall_fr">4. Effectuer la configuration initiale (post-installation)</a> --- diff --git a/install_on_raspberry.md b/install_on_raspberry.md index 9acf6fb1..9022f3e6 100644 --- a/install_on_raspberry.md +++ b/install_on_raspberry.md @@ -27,11 +27,11 @@ Before setting up a server at home, it is recommended that you know the [possibl <a class="btn btn-lg btn-default" href="/copy_image">1. Flash the SD card with the image</a> -<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Plug & boot</a> +<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Power up the board and let it boot</a> <a class="btn btn-lg btn-default" href="/ssh">3. Connect to your server with your web browser</a> -<a class="btn btn-lg btn-default" href="/postinstall">4. Proceed to post-installation</a> +<a class="btn btn-lg btn-default" href="/postinstall">4. Proceed with the initial configuration (post-installation)</a> --- diff --git a/install_on_raspberry_fr.md b/install_on_raspberry_fr.md index 8fbc42be..beb34373 100644 --- a/install_on_raspberry_fr.md +++ b/install_on_raspberry_fr.md @@ -27,11 +27,11 @@ Avant d'héberger un serveur chez vous, il est recommandé de prendre connaissan <a class="btn btn-lg btn-default" href="/copy_image_fr">2. Flasher la carte SD avec l'image</a> -<a class="btn btn-lg btn-default" href="/plug_and_boot_fr">3. Brancher & démarrer</a> +<a class="btn btn-lg btn-default" href="/plug_and_boot_fr">3. Brancher la carte et la laisser démarrer</a> -<a class="btn btn-lg btn-default" href="/ssh_fr">4. Se connecter en SSH</a> +<a class="btn btn-lg btn-default" href="/ssh_fr">4. Se connecter en SSH sur le serveur</a> -<a class="btn btn-lg btn-default" href="/postinstall_fr">5. Procéder à la post-installation</a> +<a class="btn btn-lg btn-default" href="/postinstall_fr">5. Effectuer la configuration initiale (post-installation)</a> --- diff --git a/install_on_vps.md b/install_on_vps.md index 671847ea..bf44dae6 100644 --- a/install_on_vps.md +++ b/install_on_vps.md @@ -16,5 +16,6 @@ <a class="btn btn-lg btn-default" href="/install_manually">1. Install manually</a> -<a class="btn btn-lg btn-default" href="/postinstall">2. Post-install</a> +<a class="btn btn-lg btn-default" href="/postinstall">2. Proceed with the initial configuration (post-installation)</a> + diff --git a/install_on_vps_fr.md b/install_on_vps_fr.md index 2453538f..9194d9b7 100644 --- a/install_on_vps_fr.md +++ b/install_on_vps_fr.md @@ -16,5 +16,4 @@ <a class="btn btn-lg btn-default" href="/install_manually_fr">1. Installer manuellement</a> -<a class="btn btn-lg btn-default" href="/postinstall_fr">2. Post-installation</a> - +<a class="btn btn-lg btn-default" href="/postinstall_fr">2. Effectuer la configuration initiale (post-installation)</a> diff --git a/plug_and_boot.md b/plug_and_boot.md index ee139d5e..2a085383 100644 --- a/plug_and_boot.md +++ b/plug_and_boot.md @@ -2,7 +2,7 @@ * Plug your server in wired Ethernet, or configure the wifi connection as explained [here](https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md). You can also mount the second partition of the SD card and edit the wpa-supplicant.conf file prior to boot the card for the first time - on Windows you can use [Paragon ExtFS](https://www.paragon-software.com/home/extfs-windows/), don't forget to unmount everytime for changes to take effect. -* Optional : You can **plug a screen** if you want to see how boot is going, and a keyboard if you want to have a **command-line access** to your server. +* Optional : You can **connect a screen** if you want to see how boot is going, and a keyboard if you want to have a **command-line access** to your server. * Power up the server, wait for the first reboot to happen, and then wait until you see a big squared `Y` : From 49fbc0e3d2d1eaad1c1a0ab9c10a4ce96d8cd288 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sun, 8 Sep 2019 16:50:39 +0000 Subject: [PATCH 108/360] anki --- apps_wishlist.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index 066da909..b4019e9d 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -15,6 +15,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Ajenti](http://ajenti.org) - [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. - [aMule](https://github.com/amule-project/amule) +- [Anki](https://github.com/tsudoko/anki-sync-server) - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) - [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) - [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) @@ -52,7 +53,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [FEX](http://fex.rus.uni-stuttgart.de/) - [FileTea](https://filetea.me) - [FitTrackee](https://github.com/SamR1/FitTrackee) -- [FlatPress](https://github.com/flatpressblog/flatpress) - [FoOlSlide](http://foolcode.github.io/FoOlSlide/) Open source comicbook/manga management software - [Fossil](http://www.fossil-scm.org) - [Framaslides](https://framagit.org/framasoft/framaslides/) @@ -114,7 +114,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Modoboa](http://modoboa.org) - [MotionEye](https://github.com/ccrisan/motioneye) - [MPD](http://www.musicpd.org) -- [MyBB](https://mybb.com/) - [Museek+](https://github.com/eLvErDe/museek-plus) - [Netrunner](https://github.com/mtgred/netrunner) - [Nibbleblog](http://www.nibbleblog.com) From b645f367cb9155657542f577e179ae6cf043f501 Mon Sep 17 00:00:00 2001 From: Plumf <plumf@open-plug.eu> Date: Sun, 8 Sep 2019 21:53:58 +0200 Subject: [PATCH 109/360] =?UTF-8?q?D=C3=A9veloppement=20page=20de=20Peertu?= =?UTF-8?q?be=20fr=20Ajout=20du=20logo=20de=20l'app=20Ajout=20structure=20?= =?UTF-8?q?de=20page=20Entam=C3=A9=20documentation=20pour=20savoir=20comme?= =?UTF-8?q?nt=20incorporer=20une=20vid=C3=A9o=20sur=20un=20site=20internet?= =?UTF-8?q?=20=C3=A0=20partir=20d'une=20instance=20peertube=20Ajout=20d'un?= =?UTF-8?q?e=20capture=20d'=C3=A9cran?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app_peertube_fr.md | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/app_peertube_fr.md b/app_peertube_fr.md index 1ae2ed47..eda7a4a5 100644 --- a/app_peertube_fr.md +++ b/app_peertube_fr.md @@ -1,3 +1,20 @@ -# PeerTube +#<img src="/images/peertube_logo.png" alt="Logo de PeerTube"> PeerTube + +PeerTube est une plateforme de streaming vidéo fédérée (ActivityPub) utilisant P2P (BitTorrent) directement dans le navigateur web, en utilisant WebTorrent. + + - [Découverte de l'environnement de PeerTube](#EnvironnementPeerTube) + - [Manipulations utiles & Problèmes rencontrés](#ManipulationsUtiles) + + [Permettre aux vidéos d'être embarqué sur un site web](#VideosEmbed) + - [Liens utiles](#liensutiles) + +## <a name ="EnvironnementPeerTube">Découverte de l'environnement de PeerTube</a> + +## <a name="ManipulationsUtiles">Manipulations utiles & Problèmes rencontrés</a> + +### <a name="VideosEmbed">Permettre aux vidéos d'être embarqué sur un site web</a> + +Pour permettre à une vidéo d'être embarqué, c'est à dire que la vidéo puisse être visible sur un site internet à l'aide du code disponible en cliquant sur *Partager* et en copiant le code sur une page du site de destination (cf. capture d'écran ci-dessous). Vous devrez modifier ce fichier de configuration situé ici : `/etc/nginx/conf.d/nom.instance.tld.conf` + + +## <a name="liensutiles">Quelques liens utiles</a> -PeerTube est une plateforme de streaming vidéo fédérée (ActivityPub) utilisant P2P (BitTorrent) directement dans le navigateur web, en utilisant WebTorrent. \ No newline at end of file From 40d12a876a1b01fe9bbc1672b12f774c133df1de Mon Sep 17 00:00:00 2001 From: Plumf <plumf@open-plug.eu> Date: Sun, 8 Sep 2019 21:54:43 +0200 Subject: [PATCH 110/360] Ajout fichier images --- images/peertube_embed_01.png | Bin 0 -> 31067 bytes images/peertube_logo.png | Bin 0 -> 1639 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/peertube_embed_01.png create mode 100644 images/peertube_logo.png diff --git a/images/peertube_embed_01.png b/images/peertube_embed_01.png new file mode 100644 index 0000000000000000000000000000000000000000..74bc12fac74229b2b4a31b373489756aeb7321aa GIT binary patch literal 31067 zcmYhiWl&tf)-{Y1Ja~ZM!QI{6Ay{zNVQ_a3PH=a3AKcyD1`h#(3<Mi2z?=Krx?g=i zj@3Ecwb$xhUAz0N6|Jr+hk;6r3IhX!p&&2)6$S=&?%#dD2c&;zruneFe-{*Ic|A86 z7*^{49I)PHVxBNC6fg?X5?bEI7rn?S#*-d<0kkK%?4N$2U$8c2ZPR2(lvav!WT!eP zXgN<FX&wE+_=|nPm;qV$oNSnGR#xCvP{2D(#`EeFFimos`=mT~O7tF7;e^GSpGPzU z1CNf>K`8W6>L-+YDf*uB>>iS(a(<Q6C;EC00a^Lgsi>+Vn~%Jo^7w1+Hz58kO?)H1 zIvj@7M{K)wb2jf?!6I_A$Js~}kqT`%z3iR0u>D;lbhu5QP0z_zTpgFDZwxJl6Y@K5 z?R}nJcW`i@@x0tN>wXZn<Kf}SCVU7a(vXvo2#HTf0JrzQ0$+a1iP;;pJ2q8SZGX4b z)Y7ta>VF0033^QRLE9Si%*+mQ?_yPS7ojQS?;Fpu37fG64!Q->VRj<pSO@)oc5Q;b z5i&h|-IC!YZx3bnM2tXO^Y8#02R$_h9JtMYGcqbuk<yP3xTy9Da#So2jOLr;W4q*d zU4j=HK6Y9o5+He1;xFhYARyRUu$>Ep#y->*J1&XdEZM7sxlG_sG%kG)M4<&<<D@p- z#0Iko%5yRdN!v)wDnG4wy=|f2W_AVy5)2I)EHR0=wdnQOF3tUE9YA%3i>m9kcd&I{ z>U$5n+REsAr1=LC2q!=JD|lY9QNKU1q|V+1D6+G|%OPMV6Csm69q_4xV5b~Wc;D@7 zP+3{o+Qx>hZoOd>ivef`72H}?Uq9#T>w7U4PqGFE3(|GG+^y}U{$AKxw>jdmf<xz6 zwzS9h?hOIZergF`6CG%$U>g;s{747KxtEq|C;E#P=xr-`x9k`ErE^^-vhygh2a`?u zhyH|!lK8kmc$dL>Ps9nnEt%3l*CL;NLl0=a`kd}!laNN7;~|OqX-B~5BfpbzBAFQD z*OT`h9Q4^3R`cOCVt{R^9>N_0r_HfG!fY0qY_w38xNQk*5@%NOI)A6NafWw@u<xzA z-HEPNCXRp*`gLks+xq7IKx6Oini;^+u?;C?xm7D6$4vrVnjE!kc6DV%-w2quOSnr2 z<U)1pDfSrpl}ILHzXby3Xy>?pq-VJHdw^`&P*YQb>{qMxPJioXyp4^I1NYtn*0#So zsIXX>r-x`fyXR=M;Z#}BP}{CF`fp1GxkhVOsjq#%t$42MDV+lA@(4sp<`e?iAly9< zWk+_sF1shaNS(&F8!;CbPv_7nl9#%+l9~K~A{Cu<hDB4wT9zV-Uv^ABe=~yr5IM(0 zk?^7M=O~3~r6Fg--k6f1us>G}D2rMi<>Qh&g<iysKq;MPFFT!DQOrF*0p1d2IS^mn z*1D?4BEOGA>i97EO+jrSy(XB6i0WTA6?fzmg8iqCC_1*)QI#$?+E!L&q@w;CXXod2 zMMVcv`=lXmug~{uySt7r4_EEGyT%4B*0bM3L>DcQk&zK|ueKstco@l@`>GU>4=Cqe zHY)K2ZFaKp!Ve!amLH4D2=R^`94bfV@=if2B)UrUW=C{GH?N;B%JKvm0Q$fEI&dUR z^sSxtqI#d^T!cKIdm!G$lOQo;Hi++6H{sf3_M6Hr;S^z^<uQCgtjkbjn}MpqJ&JvY z)G>iH+uYi6{x&$%-JxE`tR=IrJ9sjhNV_!o&w4ION+ImlAuhD~$cJohS_Xb)Y3U~y zVZCy{mU}E^WJWo+Ru#jBTd-Su4OFz1wwgN?m0mO!X&X%X9i^nCILR9dRt;xfAEf{Q zKwU}6@UHhE2H)n*6G4Fk70hQ5-;sJFF{bj(LRw|oW4+l+TX~nz*}qqB?$7xvuDIMg z{Tb+VsGh2{XEDv3LV*|A+UdGc#uyTZ`caGY#3fYq%)heymimL8PGu{elKIdI+PBeP zUoD`Q$aIib_;Jf(@^+E=wl0u>6)x+i-KA^%3YR^mpV{uWGg?e2-TLKV=|g34u0P)` z%V#nHDQWwlnh9ygdICo@3g2^+;)dM_f44pNCb{BxGXWa7q?+7l+A>&a?@*03zVyiq zJqwZE08r2#wou^T*1y>znEcw>+B#nism5?Ul2Yy7ck5Oc&ZN(aNJmFUp@Yce9R;`) zDq)ll*dOoSUakymY$|{ojf1SlJ-^>H25`A*)c~*9@+*5{wqh?&^T63>RDeAT9%(og zHisrU*9b}kn@(~5!L;CFzJ+?+VOUr>I#e^WV|Glg0<v+fYS0am0k?1S-@Fr;g4Eao z-tlHO5i)%QI2P!4y|Ip^I33zk{WZVG!4(~sf^i}woif1R3I__{W@E{oIIze>ovyCL z>^q0B?Xu!Qfn0DUYr*pvt<$y|opv`EJ7~P^Y5Z?WtH;dz6NFzm2OW{KCrhKzPmX8e z0}BlhTOa*C&`#AON5W~mMT4z}qD^z(=u$)mz8Y(ob{E*U#v6=X+>BBRd3ZLE3V_xb znMN$vfQ{*E1X+sbwN+J%F-nMrKEbYR&m@CMy8h`_O9{IH4@Q2cWf?f)AM(1L-$HqK z_%_Glb1sfDOhB_aywl$WI1b5YJBdIGgZJB=x6mo3hHo0D!F9&VmlA523%12n@|pdM z(uApVaN!sQYh<3pU1y?ih;sAWXgAw^%E<i-?Ugb&s3Pp+w{)*dypYQFITGEA)pe{b zO+Q`(1B<#ef>`5V?DuVV^3b+it!M_Zkh)a!eA$J^w@bU!c?}%Q)UO}mI}mM8jEdsX z)#Rhj+R!o@w%SPYbc_Xn2ILKG$7`G_h^LvA+r&~c%MrfS69K2#_QD7P=q@+J;qy7S zKcOQ*-j@^Hs_{p@S@t=^N?}#JQ=0W6<$qz5CS`e(=(@i6TYGW{$An?c_vmekD8N>@ z5s(|$Wl!#Ln^LCa1+9TnmzpI34)v|8fEvrOy7UNuw5gkF;IIX17g5S-3vH&@6_+-Q zNbqg%!|pODwa(Y%>{UEW*!fSee|7+wu=~@El~B+@sE3!=W{R4q9X>ujTrk!7`FY#A ziQjVI6L_yCNWkwx0R@J}mc(o;R_!{RZEXGThb&3Eoxg}~Himf2`O+m`VahOsY?=?U zz9$(TCKH6?q65YQFO~+1QD4S>7D5SB3|{Q@KKn)<DfQV_%o{e%)x(}c$kR+YXo{*= zVk|vOV{!7(MAQaWvZDH8)6pv=Bxi^yy0&(YYg+l*Br{wLc|Z7?6$^t0rED(l+p!Gv zj#7as0)ac_j5U=6(wuv}{2($PIm3!vBDZ%zqGj<W=VfIXudR%<2mf*x&c71jo(ha7 zn12wsahH{Inat*OQ#&-nAj;I8moa{#*-KlmCcJUCvxQi@u*qg<IQ<A8J=n!bvIZQ8 zL{rlVH?lFbQK_n1`AoXawbNqy9CTZ&k7HWYPE4Mj2bLb#?ek}6XN^tR8+LO2{ez74 z>9|^oiw$SqqXM8U1=_97Eif(fn52SKTvspPKn_PW(RGS_=JmXo!c-88GKSyhG9PJT z?@6=g??*pihQ-yI;^S5HwN*j}zSug}7mnqjy=7~5%J6RJn&aZ)>KKSw(Ukq*GFwqn z%NI~o4(9Yk;uoJT6^m;TO#E{()nROf(mw9Rx3O@Xd+(0%0?I!>aoV`kYxx<9qeq-= z1=aDF2BxiQr7JlzBrO!bb>qw_D~8srs5KzMnwMKW4YYrv`m$uKuO7XYK>vYOT$i53 z$8cybevY!+yKG%>O$S^r60h@ZW<&M4hk-rINe?T|>4vcV{Et38On$PuM)*R>epR?p z<m8WRx7gD`#eP2cxrvh>2-kWvXqBCT?W@{Ot6wNTzwTnS{PHCE+-d$Qbz(#^QST=g zGBFa0hc|P_MZs_?L?@=p`ZTBFjg4pXslHq>ASvLPs|GT1Kqlk|&83t21EeA|ZRG}j zw^NBe-PuNU1$6#3HZnR)YDPf$SCc-y+UEM3XltLo@V`7iLzGOOL)%(g!Pv0Bi-wV{ z(n%V3)Ed%}jA&*RLc|?`3fy!m{Zw`>h?y6{k<wSNQ_=wUov-A7kfFwGO{+D0;4H2e z;BA6p2=`rRy~eC$(xOg=#*P@+R{Lnx^LWH~>t4F$Ol78w9EW$QkdtKKSCCitJT^pg z;B?3lMxoE+*1svP_3{u&x`bPp1*1;fz@6BE>EX0J+NEXi4Q0`DWzMLJ7Pn7aM_k`P zll9iSmuG$btoLt(m5ge?^f78E#`3V$Z8zc^KVkCZvA#(8uOE%(Uol9Dvs%wHd@r^m zm}0U?8=*Y+ATvN4V0jRM1aZjHp^2=6JawaJ#ImM|oQS*I)ozNhn$`glIaO*-D@8m& zO+8!ilH|j>So|%!%wxUGa^N(UwxU+z8JGIcQK<|U2Z!|`u2i<^DLUuv!VBvl{(i1j zp5_hP(THs`z!9}0X@ctjp+*0fgn#1G63^HOG9r8w>v5qrLiv%^03}t4vR$q)D!sRs z85Iu)UB_NP7^ZE+Qge*MEmTm*^$!00tjla(__kF$H3cX;FT<x}{@lGuGC&WbvEU=c zF56=sSzs!PHh}Wcwcja2UJy5h6_1dRA=s*pDtHgKr5+SB^))Mz?&8<vp(o^w$4*gX zZE4M3x521I*Em3?4P&bd13a|UtSG?_^BQ&LJe&(p*UB`aoY#u^+(~fy`aK;*q=@Tn zU^{$GagH^YR6W?JsI5WUGX8d9pUrK#0!OZ}Nm<oSC0=)9w50^(7!b0$qC|i1(t*-y zwhfnpkuC)e*TL)ayil0H-;&A+%i^x=oLrb+Sb^PB8G)TK$_edjk>@wNl=pUhrpqqI z5&&XQ>rm9|ts9!&FD<!sDw2?3%QN`MW+->k%|SOMtaca}8JoJYQ2|cC*79fjnyNHe zePdcvMX-3zl3T_x2jSwMWM(x?phmHq@67KP%!IpdTnvlp_!1%l_F-VfRS%1Wdc$*^ zZ<x=}>~w8y=*F>5&6+=c#`3o>?z-=xFWFO+g!w9MJJaZZC?C-c0}GOMV56?dYgX|z zQ*AkGM`I=l*Lj%BH78u5V6b12JnBr#cO`+|&D$(H=<i;iw?mcY2i@*+Y_`3}K(5J^ z07}I_Okc3`AIiqk^d?uNLon`&P*n5-!g$ZraPPj-Bk9<}qc$`o@0E9fl(R#W9r$S5 zXu?bh-3n`f!K+cxYIyo4^Bn+9kLQG@f=_JCyO$hxk^(yhwWFeC;U5H6%iJx@slaJe z<r-9OET36mNmjSkg&gG`9#A^;FHS28bY8U`F=b-yY-@GX3w&+p7pqtI_H1^HcE~#Q z%U&~QSy*B`SzN5+O<eu`XH=@CXNLx!OIhOLBY-roukgDW1R}UNlz1Earv0z~mZ~>j zka^(L!uz7H8PtBla9y54blkqzSp;-`GD)lQcHuy=WpDf9n#+0g+&X37q{5B4PLJmB z4J@m0+Pcbz$P|U{smRAqlU)f}Ejt^J>V0|EW=fgAvM4xPxJ6v^0j|I&ZH#F)Y``8x ztLs_QVPSzo0*ux+)XmuZUE}kK2z%*<zY!!FSfz~>HyOT4-ZC}4?V3Vh<&lub(l%`k zVYC>t8K<;?M5Mg1YnjTWN4~RF^M|6Ivvv4OP|0xjBJ~8Qrx(ip>XkVPn)E_O3DNo9 z?;pw&@J0CtgD&d{B-y{Z@%AY!XEXa@4c-Y&d&PB%uAA)Qzk|!3zUk}K3ec5Q_>WM- zFOB$>U;ON(jGxU6jfwgDpr7SVa{g4)&gfr?6ZNO2IS3?w+Xx~Utk~#sLf@F!=t#4F z(bTkvPeXI2qbYQMkpDplgsBaLbX#g7xRp6MOIyWl{N6~tw+q})8BbQ<gMr8}9os%c zrNUEHw(*{Q@W+ip#iOHBzO^<itZ&9s5N4(P5Q4fK5Rp3F=Xmew&{j*F12Ncp28q01 z>ln1jYK&XR*q>yMi9?bK+CdV;UZkOsp>eWGt9>Xk`Ggxkf^*weo2!*?mE0KZclhwF zDy|K6(vZ`ntOlx*d@e0iI3=`p;Bp__2Z~YM)tG!fqV@Z=V3c;#wk$e3<#7!THM1J@ zVh$@b<q3%bd9+DA50*FpKsNjm=9b9pcsN|(aXQ7y)?U@;T$?idG(D#bf_LZMdn|VY z8I^`QBNM<ntJ>x-`JDLpM8%p8T6U%kXxo&&fuMi)cohGA8la+g4lD>8El!7^f(KT2 zD)KPKF9FzN-?AoO0n(IqdILnvQI}DdHqYW7@2Zx~O~IGNwuYZh7WNx4re?ZaG{1jR zZ-TstSIt$|Af_HdS2WcGU`T~LXR?%RPB228!#>$X<b3rKfo5_o9*(Ph$fQkE_#NfM z7a~w^)NQQXzWM6;uiCh{6tV)6mYp3|wsAYU4PaW^+Sy9-{C0bu(Eu2c2E)7mKEqok zNqW}-TbMm*pMR6{ti$Q{R}EZFzW02-kO<K!tFt$-&=pjR>SXj85s%>Et6L|)gz-1@ zFad=oGp%iWwOwb^inUH#TlJgr6yCL6Z&3cGGU{7X<>=Z1Gzn@K-%oC9(8LMl$dYW} zK23v&;VVivfe|C?FKc)OJ!AuqQH27XwGQL6d>3>Yz?FhEsXgWcg5C4qG;;!L*g*B? zn#4Kw06TrUF{6?jS-f9vyNZm@BQt0hLv|su2gIu)wg&ANABV5nS~8$arj5$(2m>@S z9U9cO)e;KY28eOI3?J=wC>E;Jd!;;|&g>Ak-2Gfp#mlN3Taq<fyJ*)peReQEKZ{$% zZT)&|<?fgj)tPC6VjhL!PndMMYlts5G#Q+fLp4w&3Fq_HK113$o+7t&>O2mD_w={G z0U_i<o-6f+z2<5PrcxWk#Gik#-F7gezG6ncideyoC<2_eYJD_mC|x(|?HexL4|w7g zvW$ees;>2!Lfi%fEnOQHM24GZjn9Rx+GeGA7mTb7_#lhK)h)4vtXo;Pes!HHL(A%Q z2*H?6XmES+|EBQjKectnCid%W>1e_Lpg6?1KQJYh*k=B!z0JV2s{p7efzVx5S}VLi zQ*6)U3jtULR;G=xP15VjUP8`yRu2itW)ddPdw~FRGK1u<%lf^+6=LP`l*2TTBgE71 zy>}ROWl=H>;euiv?0D7JVuEe~&iB2ML9UVdj%jD+C6Jklw>m}Vvq&^jy~bkht?7Ar z;e)8M(vjLz?a|GwLbDX7st@$Y0d75K@(z=?bJ@&CO{Ps|JcW~rdMkpH;S3d{<k2N) zY%#U*>!2ft-87?W-g%i$n--hvOxCOmImzB)92^Yg>&K?v2R{*Obj>4pv%V(M2av_# zwE+G6zV|*I8-UD)eUZnK4$PkBvhinHboCYTfO~zjyL&Hv@V{08>t!7GXsv6$d5_!$ zK9LAVZJvMjCAxi&vIEZ>pTPt|K0kBMK7LagKD#1!fp|EZiuX4xzutoze80IV#%XQg zhEC$B*Wu)~PvJ2OwreZ+;ZA4Trj2zgx)V(3u5OaaoCW@Q!)AM^5@Fj|tyzcsZlYeY zl!Y{ndu~0o?954@p9@OwwJE}SYcblk)tzn}96CQvm>uo(vi>nB@dRx}<DQJ(mF?)( zx3T1S*~Q6nBT2I-#=Lby&W_CNe&p%H6DI=a8Sc$W#_np3I-D1IuG7m`&!#nOmR^n0 zK)`8D#`o+nbkjcImTI?mp8?$0f(@@U(3$XQ(&Bo(k+u*rWTeTh-evNPY;1j9A4j?r zYls!aXclDglH#f0XOU<Zn5x(a?!0wbd`#Zy5VbYn6`>9(G`46o3HF}U@v6mUcfw}( zoE}my>&M&zS$r3_mwy#G;BQtrL=~ww>ObC!)^FRXRFvE+qW)gn94S0$;PAq`DCN%Y za}#bL?s>IIT~xdpQQ~I9*3sYH)4G;GCQt>`Oyg|P*}SC7Unko|^ZYyF!uRU5)unkW znI0c4F+2Iy&td%bET~s523I|jt*5P1$|7(kERS)@zE&9~=y^s#$nCkgq0S~hP=olg z@;JA+{YYxB$EUk>H#gbUU2$0p!S{s#_FBI#g!Q4RfWLeLLnUwQ_{UVzeW*Cj>*OLr z|5tCl<HM1&v7bN4t<5^Su8aXOfgwVRC?)GG*{ItN?sSMO=UjX$KVyMN7d6V!9dxcn zj=NPgz;rw3ffz)pS&v!NuL4YCybR8p6kT}W`5>rUR+(kjS!HX<_+C>*fxm(>$Qa#e zg7|!5n85(QPx`@w5l?v_66?dVxwdw1j=WldKv6(;Oh-?pc+MLM=X-*}WbV?NDo4nO z3HQ;y04v01W7q$j#jfI&Qv@{_D^sNN#OLKy?T9?N;k@%Czir*vZ#GNVRNispMD!-N zpz&r-=!&uPFOps9zwIp-EbA#0ySy~TuHe(#=X(-!b*UxGvm>`>KR%xR#~~%KtLte0 zUWZFBfK2T14NKU}&%&Y&RC5Qe5Pi~<kz0$^fKIG$*oBD*s9EmP&LU<Izwj@vfq2_$ z-Ul20Evjl?y7K0<k66}r1WwC)SIt){)Rb-ssF|5`OKX2vDssTljA~zw3k5(^!Anea z<$JqZLd<ne-^#}&YWz4)o}9<aR8-Z{6wd2f$lo8oU%p&?)3uUQ>tWe{ZB4^(+c>qT z0G@beJx4x6RIG%nE0af^CH+3m^C>RdHF@od6+)<RJn_SV2b^zKI8emeh-<K6M`LkH z883b%VQ;m$WsJSV^_Fo|)n!1-IN8S?cRQAMy<g<u@`$hYqH*c)ef;IEUr+(5RqbDo z10TX@hlriFD=J6V_JpheI(51_Rc_D(=mJRIx!d39NKuNEoB^kBQh0B{T<q@wmV;@f zZnk;dz!mUi!mXgWIhi12%}0+G&y;(`#;NBil9`SZ7trT!iv>voWH>a`Vg{dQanT4? z*>nf$9y4Y&+6@*uoHX=bXXg~txdw=ue9V^*U;Lsj=-0Q+>$pKnIaYeFs@S-3`5JVR z=VhtSw$yXsuK5^wZ@{A#L>W@0byu(;EMi)rTCgIz%P2&{a#tlno`gbtj+h?I8n4~U zO#F}A45fvQY8HV*C|6xwax#^bQOXZb+lJq7r6Ars&Arrs8XrZsn`Bj-=dxq_h?!x; zY(QH!-9>V|=s8S2WuR$O?tVEwMF;brcVxbqJYzE_w~sSUx~fRIn7Qn8`^%YEu1YGL zLuQ4S4pE_dzt+BMI=%}rt`yji?INZ83@Az#x)>mBb7mkz&9gYjNM&LO`Lysa2S-wO zlR6vM7=OtL1ikg70mLkn+)Azt5Iz-n`_`@UsBD(Gl_UrI?dW>{UZB}(!kFX>U&los z=`tguNV7OTBkA~Qpb`jK50aWUN=vNLOn$Li6=6U!NOOQi31lx2x>URH&|FU^#RzmB zIJy-v=d>Ve4FiRdCo79u-EhRm-}|Y9JrFNpOy$pK!9NE+H3JV{d!2+@wn0`IJimzZ z^i&AZyPk0E-lp2z6#vZ<k+LskpR{~@noi0_-9cuDNKS-tEF(7boLbw@zp`SXk0~sd zTO_2_&KTAOnU||I#p8!6#khm6Z^2G6Y$<Gw-QAk{CxS9IWErx1%#doW>~SKy^0Z5= z9A&u7v9a%#ygjxBe}B=vX6^3QFt)GDj=xwX)Oz|#7`#<mCXl7-VJ{zO&bLqhrNjMe zrQE$vgU%z5Mw+r#zO3)-C%wk8^{V`R*<KmOP)FzFtt%SkY59xRKAUlS(=OT8vZd~v zQVsIXHO7Ood{|9m(v61S&**WhY8vM%@p;{79U8b!oCiDVN>glGlVP3s<ByXwYoA-G zJ~7npRv3GerukvNAFcv2jKaWg-%9d{+HY+zt3E4V%vX~eWuu9_87LV<|K_+TfXy0~ zdk*OHc$mOq#R%H6sQE?6ve-kkEPM_{c*${}IjH33f1cSUmRruydzG#DyNa_0I?v)j zq>MlF?k33-xm4P1ZW*IJn)eE%efAb=BZxV|8Nm5U3!7ZiT&x3-4pGsh;e;f_CX`&J zn6x*Ic?#1?+$ko_iz(0a?3arlTC=t_=&UqS#Z@4Hx;-IU0#-MpxH%dZ0(sNZ)jWya zWg)6Bry}?F_^uH=-Hl%<Qp8|0`6L)>PxcQDgC&#AbIcrdEBlC1-~)7wHt8jPMfwlk zXyRsNWUdg79O4vJHuo3@FlhSp_F13Yc3Te+g{06=ZNXJQuhX>j<z8@aa6c!dMpe;8 zD;prNhFA7|@m0Ix=!~%KHpRL5J^4j_LPa`SnxGx=QCi7)UL~V3>{C@V^jG=EfGe}3 zgF8$t$Lo)`AM44gyWM7;uy>4p8rX4#Fwl6a&<QwzA2Z`I09a-|VLLzUS`Een>P|lr z>b#G&^*3tG6l+;)w|>sg!Sj{?gfg0D&VAmQCoK73mWd!w|4oWR#HshS+CPFc|GcfK z$td}`gH-4`1S*!mZ)5|7#gQ*Qp~saS${({^mn|cWeJQMJ)C=UCoN6%x)B#{zJAEin z_4ARRvRnB$9N}1bol?lPm{Mh8uu@!w)>b#}Rjm;1N4_gk!NVo_9=)7v#SHkyv%yjy z=Iiod7Y3xN<qMzQg<vNzqPmOwF}4FYt6N>iAtRHTAUn6%mk1+x8=ct2CbFrTn2Rp% z?<ypo_9W9CwgxohW)<93us|_A$ROpTLy?Ropp#VWDW7wWdrOwIe{Hcz<@nlM$nWw8 z)hM?41|88&ALr}B<@N29B&5%<kFNT2G&zRn*8zT(_zLAM!QU^HAYE@->i4h%IPe!L zEM?NcFLVW8L=E^Fd;@OgtA%00KWNyKrJuh1ZW_Lnqoqd!A8R>j<EGN8)5~rnkvo6P zJX&XISnWtXf2%PT-PbjifYIG}*Jm@Ut}UJ0`p$;mNYAk97mwVZ$l$~-iF72vwdVaT zVd)ngEJH2nbCUF}Z=h?j@Hg^p2ePv;TADIn)esknkFfM~0VWO+D>vbC4YB{z0vu~^ z3EMK%`WzcXakCZ`IBKV`bC&OOqoh6F)D_OWPR=O(ok2)fQCS=>MQ;;Y!5#bl@{L?r zvvyKJ1eb9guW;N><Td8*22>MthhKwc;}bdI0wJ{O_aEvB{XrhynmX<l7>JD|g*{#4 zu#;_r@2%~KobaYje5sn1QE?O&p!xch`&t>PX6v@2(MEgdI6Kka2-q4X_dZweRe;l< zOG3uAZ}}Uh2{F??Zvf{n*ue7};Lutq;LWHz@Gx9$EC=2r#|4WjUF|HroW&e<b#2wn zcnOCVPhq%>=W@cP*wZsl(}<+DL*48GJmG(E6PSUSL%aqE^?ZIwFIVY<Y4FOsJIPw9 z(FXyNsM8X`t8*!9+l@L$I!yesZ_z~nMmC4<-&{~_eyH6iYPrN*F>7e;{qBHbdrpvV zR!Zfl34Y>fNBe|lr>|FJ(Z3;C+=PGr<4HAmO^cO$NxOo`^z=Za&l#rUM<^ySRrCXW zaMb4l-FosCC0(`22R+Am(c4-czIsCMKDw%cn?rA8@UXJ~;9zUGgnXl6m=v|Su>%t} zZbn1u3b4#7g|liBy*mDuntB)$NkFE#IcjrSDZCQR%>gCafN<rdI2i@2RBsieh}OHP zVlD#*_Lbqq#DqRYGi2^ASbv0Bn6s}YE?q?Dr!Fzc;d4kEb6>@!ti7~VZ^STQ8nZ49 zg886Q^9@K(Pv#m#P=0il%_!vZH`Q1Qk70|Qy}t>mOGpm!3x0M^25@gs$?<Fp6p-Pc zkz?5`#D?MeRdms`iYQgDqbf_h8fRV7wbT5`wW3ysb`sXE*i88&-0+5};CBMVYC4Be zg>bdK0di%QzKDr-_3++y+GzxZ%O;#$Q8z;%f%mf@8&teF7tUj<RTbvEQI{{6b#Wx+ zOK<QRneu0?yrm_@EMDE3SwbUz%51N16i0_bl@5}qnP8A#O2HzS8kf(_>O6txC$>%L zj@RT~@9b;q%LA!9jOCdys|tHY_nA)E^E1+7g?@-=H@7Y=&{96>=MqJL@gFP+ip|)= z<-x&JsH);^bt|cXXmw|&p1xDNA=<A}ZTGg|KgpbO2L-itbwAQOwqVm=d;Vk=7jufW z-#?v*Q7KJT9{Xj0BW2@Y@N3zPotmxeyI{OV3K6P+m;J*2mi_Y_P!JAYL}DgT<Acl{ zHYCWuRk`ncb*_aS4Ot}tGhAfI%s>e)-|f?2CK}IbU9)U!XS$xzDl@T3v(B}ct#jRN z$8E<w>HKDsX2auVvj$OCJoUKkY5aM<re5<%Zosk;w=-e8=n&VJ)>#j$0fwnYOgba@ zp1ekC*`L-%EXmFKDl2Lzsdz^8Fr*7ZA3|3kGX>RhXgyucGPvd2)Z#+mb^s3k^gAcj z`>dcH9^p>z*OL8It`q3X7dw0X5*hB}iWXg+iCovi;+G!f5M~<JZ3_^U>ks<Hn`U1& zi|~Eq_}3`7kM&;0pnCv0p|^30GU+Sq?Zbn_YuY468V9v;r>m-U(X9E!At##Rc`}>k zHJ&GA2qOz%1?OO|iN|W7Jn|Uh-d8wwa#P0S$Vf_*R-ifHcKtO%xf(oWijj{Jh0Y;A zvzitIGH#IpPa=a8DBZT=HP*@g_+etG@^i6$T#h<6{^XnX$)r2DM~;}nVs))~QpG(W zV2ATcCnhOzgZ3yMav@sfQ|iN4?Vbq0XLkQv3COTm3g3i}66n-D?!}pl*k1Ta?DmV# zq5br<lM$$z)MY>7bCg}T${QbZX7_~4wpBfeiMZ;}WSo`F)H+(?+$9^rpf*ANkp9B4 zUb}l7EGdpNgW1^a>!aKvxn=53Ko_?#Z*nJ%BoM-4JqjTE9ggIFpRK%sTFI4=mrOv& zEeyR++p_4+Zwf%(O;=M|tVJcrRu5XZm`IsoQqBbOQd7U~79^|!ewFk&9xVm4=r(k@ z8)k<_L}hv|(~F-Lerg3bdZj*CwnSfrq3~SvqZ237egCN9>nCJ2XF^w0BzL_3_1@&) zKgwAgXGO?t`=0ZF3?P0`JvBDSxiWD%89`oq_(tVB!m~!K_CVvZMO|opLVm|VQg;b; z8Fb`UXeYeaWf_U@`r$#Bfn8B2X*Q8*>aGV_fa9Gk=r0GdF)c?3e+igZTYK?f4Tq|{ zDe|+>Q=drFt)^q!2gl$AvETcIIym^jNZ(2Z%6I(oHMt=QB20rSI#G#1e-AmQ`zxA~ z+f0{fQK<8#LR(b^_0C0>agXn=0v`+p!pBM`+D2otQC=o))wWJ?U*J?$%yfuDu`LEW zU@N7ldy9c}6>b-&V&~T9H%mH%aKh?}v<R)UkgfKb_;W;YU2Z<c9l_@EfQo^(>5`_{ z*tWc?htM_0Jr$*m&&tRLraNbJX&n}Zl8PC5LjCjeqcSe0{g7-Z9pob7fu|s+w#czg z4$)$^<H+@?VgS)Te5=STs{^nuzwwP}?~iCj16_@L>&p|fE0MFHGwr510Zi`Y`*m*m z!7(VkF8kshI#_fSEAY|VIj2^vPrWRQ{>H(!W1fg8nQ)(%a^G@qvr%%%PSax8z96{A zbC>@_xdv3OagW~dYi#K9vXeRZ+ZC}xf9~U9myNt~l_8OSHnHwj8Iv6Tm*QoPHIbvj zm@k!O_{y|cjGVjWMiQ7S#;uCLhaYOT4$4E3trgeT*m*VJv%b`&DKnWNGF^&c&vnxU zxT)#sSHme-JF6{EJE4*I7ErxKg&b)@yjgK}a^hum&J1HstCiJ$vVY1EC}28e=@W9T zl~UPqV$?V27XCD9a29K3t|Yh*8}_RK*Wnsf2<>Mn&wZG$J|T5q*{4riUbIgRaU!Ae z>Pu^(YxarO!fwyC{${8!j7dMJ<GmA$X|7?Z;vd`}<}OYxjZ@R7x61<)75z@rvOJ|t zd#t5O0F|q4%S%02Li_6qVIc=ATI;_1;~uap)!H>QpI2-zG3d`883_A+8j1!T)aD5V z7}1)8;t}E#?dGD1bn5|13R2yz?Mm6-;l3fRHWK`plamnw3kdMgLymKm2NIv`nBsYG z&VD^mb@65XV!w8ADw2!N7x0oE=#+W2b=_xdpw|qZlR)v&rSV^R_AhV;NGyC=46XP= zK|oN5QIrRmFP*8!tX{%dq&2(Al(r*zkwlJUt->0;IlA-&_JCvz;_j}(0+uGM(#KGP z3qCsE{2jSe)4H>f`hG$w>T?7C@>nr?f$YJVz*Gb#qvn%P9pL+d5%{vUgHtSP8M3tf zRb4IX_?w<xQSbd6iTOSdWHGKvn2wZo=-K!lhei%>{&zIfe|2psnG^O!6FRr`!Xw8) zr-q6S{<0xb;)jP{%R^eroaw(vF?{hLFz%l+|Je*fU%zRrT~A{loIk=_nZBk^$c%<o z`c#v554MRbTwY!VU@SSqVl#iSJrlw^Fevwt5ree|zxyGo@nVR`j*$X^Znw-&;svQM z?pGk(VZbTMP&3^SnIZS{-NEsjcpvz*w;J|RO((#W^E&FCgifg+6c&T=Pleod?i;W> z@@{_-&1vo+2(@F!UCUK=dOtOK?;<W%O9SKs7QBX0o4Z^g9dedfOrL5Lzq2c=kb0p> z_7n@GvzQ3Azr`r`vOtghg39`k)<4|x)2=zU#~YMz#=9Boe11hnTja-n6z-dgxVFo1 zP|f$zJw}84Jf7CViO^$GDYY)0in$?98!R^i3jBcL{{4WSKI5)0{Ya5%8{sQPu~6bK zo-Hr3Cs;Dd9TB7)h@RQoBQE;h)y1kX+(}73z{;1j{kyMHz7xygFmi{Hig_*#JvXF2 zZm^Ztn2?_H9th+o*I`#JBXDT~2()>OdRkmWLc}Oebq=1saQ!|T9Oo++$%*lG&|r_` ztsobCu6NQ1LD^H64{Gwaih~ib%h^JuiH;dmU86VGI;1QQk~(IfB3=j9x&`Ma#EKH> zf{ZR!HH<IXEqgZl<$laYs&Edk{>~|Oc|zU8EvfQk|3Y7)i-JwuR@L7tC93q4#cIr7 z-EWWF#!6}xIZ4`L>U@Rp-rBf;N%ka;onJCH!I5|TC0<vH0A(9_^~&o$&fhig_@_og zMW?oC$CQR2<X)G$0F?j-S>Z`^bbmU{IDuKL{wD%j8QQlr9swD@zAD!*x!gKYlaaN8 zGKz+O-gdq6LYy|XX>|t#_5w9@7&R-`kijonj#@8NBn}SMN}<y-LG{hm17RhYWT>sd z49S(Su&!;;FdQqtqn||GMV6?JPisG=AAk3_DwJE>?fs0#=X|-`Vgt+%L_vXYt=a2f z(Wdu(W0dHyH={7lzlQvNUnMMpy(0{8y1MFXW^&;=QlSmbL%V+OK-jS#f5Q;i72q{R z2-)%o;m3B8G|y&v?W%IV*yiEVpjvhMNQ$f5^*@f*EPX*FzG*SDr+XSH<>b(Sj>Vr} z40WEfRzh~EomY)_=nA$=CN5v$I*jWkUG&&#Q%9?$4j)0SD=Og7(tvy_zl>HrsFJ6= z5Xt8+S>gUouBV1wuCm9@C}hp~?4mR=ccQND1t*I@2Nn>^lsQi&{jb*-QD>%cTs1yB zG>xp#pQ;mtq@02-zXjm%{46%nlx{w@E)9QoC$m|tRNZ{)D9FAU?0evGilmuYolY+D zaJ6h$LY=B}w~*(6AI+!FA7BB^v5#*c-4CIWr)igMAa+XtJ%-Q?j8(syqX>Va;U<ry zSs9*YH4>m4G*1g>iN9^j9~oljbN0nF<GV6H(C}G|yOP9@CQbc=kRn91vE7;rCpvpw zM`9Jj%Ao5z;+2Q_0U>&Hj|sy7TZ(jW`zl#sXecG(hxzZUF%+L-6H7{By0ac6xI!VC zfgb16MtHImo5-Shv}K8oGl=G0VQKy>Ndb;q&&9zm47lz5#G$U00_pnis1#XQq#l|Z z1+2JyQ5fqhjyJ{fxIJ`8d)l&RuIx?1uF0}-P<mq2`eYTdwVfNu9T_h3<D+s=grI=t ziuOtcsJzvKp09@U=gL%RWC7-EV&w!9qF<_Rln+ykhh)wiiB;skq{I1**V&47Ytj-j zf*9k!YEI1oM-(Qnr(5)4mFkE!qH`eg8BrJ!uC48PhOEE2`6C{#e<|gx0r~|M#?G%+ zkVPeF9Yk@6f{V@CD!krxb+bsY8-GVg_)EOhpi<7(86JMs6LrC7i)KZ;bKfo`E6&du zYu{>lwL8<`G<97RqO!l-Dk<fFtI)Yumo8B8f)6VED#NqE1C3pdcc{5|g&LZbBS?xZ z>&(uh<PF=c0*ECDm_u;#pQI%^OCK!@NPildgNqmJ(>A-h)U#5mdsG6AE1p%dJ~#(! zMJRW*#hX{7j-6>!;Gox9X*WHy;dV6h3iL+xrSgV)8kQ82H{)P42o}}y+{eR}Maq(o zOWs%bq|JokSWY3Dwl=93%7-Fx^5HWP6l!e7#VAeKmo{a<L^LFOg6R3gji?Wmg(^}h zN=B$1UQ&JNDtzYoaXY7YX_%4fATs8UJdVku?E>}aUmuG&@^Bb@WvzSSn>QSGA6vmj z)f-`GOZ$5`1Jii57n=WSZ6Sc8!&c|&11fGU7w;y6$&qKgPZIQd{vrqmF@tB7zRRmZ zyk$sLh1^5aqUrBy*f8HkcCh<Hib3nnaSyZnZ1J?CTEfDn&!`%QggVtex^Jpo10Af4 z!=jyi8bfb3w>RqBVrJvJHW_M71`Ygylm0_eYGF5Eh1EpJ9I)0~>S;%Qz8Z!Tj6eog z%!nfMs2!__;2nbjBW?gD+S-SHxTn|XDeeQ1;7PZbg<T=C{P@`C;?~W*4PR_h#mwlT zv-~F$*&c)5x}>vA&y@Fq6%B+jNJmGrotCa6U+8pu&%t^$P=~@L&eKhbPC=3)V>jGI zmp0~H6a3I2%ET&emC7{Lr9gbqr0LWtbhbSj)<>}Mh$G%SpwrH9DTTs5M~@v=p}F!4 z%J8`p1ZXuAkd`^q(S+22ZGM*ZVpIf81nu@1S<mW_PPW4Ak05ke4KI7@ge^BHb7#Ux ztsQr+KKtK{((5Xt*y3mQu~T|8@~f~qyi+<Il_Iwzyx~vNT~SjgR{0uFmXXq1&!M3E z@G6bun(nh>UOcUYfn@rov;0fi@5gtiL)4U9$kTrl=y2iuo_*_xBa%|Um1_M?%3qg^ znDtow(>a1(Y^C~R?*3O`C=Irn`45SO$K=^RWT&57d06$3fgL7;)Qa5BzyH8;Xhi&- zPQ8$9M)nLhP5JRNA@~E?(dI|NMA_V0SJ4>+<<isr*OJdp^snU@9~?CF%L^A|6W5e) zpuY2V?N>Zjb4PNabf1S$<?f3T*cp=?DX;k=kP93+t%c8!eUZW4x^V%{8Y%H{3`LqV zG#5|)DWI{EvD{15mp?ft!uMq|13H$Wd>JJA9~_z0_^}R4Hd7}xOo{=%tn87yrKM_@ z`7W?Z@BS+4avu%lXT1(CqPT}B?ZQ3ak|^+;4Ex6iFEXJya0vNs{7|eQp2Y=DO7q^# zCC~>GFVsNu0>FgYXIIQ_9}|b2M2j$=8jZ`Bv`#MR8K$i7ml1@S!HEM6S)G}mr;qRC zU56qC6sBX{RWDcxkB6U%T@)iaiEpo#O#CY@bzGaxn=uSL#_*lxxt*KHz4K<6=6~QH z|F|Wh%GhC)aK<{CGO6imXW~EIi1u31;TDs5k3mN4cZ({uBK20!CytEH<bad62@Uga zn#0V6rJxa~pNN0N!i&@Zs#I&QRjuzmC2V8I-|RWM3X%!D`F@*M(2Ik_&IgWi(e*y< z?rm6XiIsbR?Vb8w)~8}hO~tHKeU<ha3~n>wxcE+;uL>rNoX31_40VxmnWO5olf|8| za#f`Z9x1=Pm8T2P1=ze&a-NKe@QkbPj4TVpOb4;zKlj!Sbaw2rUG4BmQ2mtos0JT) zqWfvRjcJO6F#`{73S=||qKc>Gj1Q040mqL>pZ(z;W=rm}zEloU#qtalZ2#b3R!g0N z_JL$v3<`TW9)vxT67#ceTIn}(Arz*Z8r;mqTPv@cMYhTJc}(Ch!K1jbW=c^s%y<JU z!pL=0|GaQ|Dqb1KyXdw^%MP;+-mf&hhODcU0}t4-h>RRKHE;gb<70OP!l{SJt3W4T zzlm9UoA5GsfhOV*cd3Bxal?*AE;gr5u6(@L)E*t}HPlM6V$(uF8Rz$z{Ed4QnQX7Q z4?IuZpM{r<R-bj)2+i5al{liWXyhL!*;&Q0tw`6wpWW5ypJ9|YjsQc?vuT|Dln|Ce zjCRCo#8i&q07BQRx`*(mJoedN_X*cdl&?nqxa7NZUx}@M|Ei;qqfj!zA`Vr~7W9l` zq04k}g42`C4mOhLcH{M^(9MR8NOlw>w8kE|tjG2OKO#SOnx=K~EQ!MC`?fmLY{#|z zlp4UjjP?3%mEli#RIpje0S}U}P)gk1cC&_>41Mm|G`@<p__h72_XkGcG7>00n4QG! zIfz*5Xh@-U14X-2Y^p_p+0<h%Hf6awHq-~$*OkdR)<4|x1f^@c)Abr{&ev|y=X9$o zfBWdX>!O<xDKxt_w#79q<aj6I`)97`=Nw7v0KNbKv8mUtiowX(vV!^8(xlShHJKw( zO6+?&r{>X)a?;k1yR`_>^;s{el8xA-Pg|oiF`LhsSPBw=emf#XJ0~vfqxtC0Eq3@! zOr3+y%HG{#=VQX8=W9>RL(l%buXkah(rBOND)r=Os6N0AT75k24mQ7hOlRhoFC8u$ zj$ALy@BVbGDP$O%o$Ldj#5Vm!Y(Cb#WtA_8Bt3M8#Q|vtgJr3;Cy1r5&BP1*_7{5N zlh9=4b{yx9d!pg$^wwcft&;Oj!26+nmuDD(a0tU9=fw4xtu(HaSO6Z&Ybo~SuX0!2 z6F`Lb$kUDc>Y?)^dls6VBMw4!Vc9HlZc*CvJNm|)TDgIKstsKJ4k)()`1K8PEdEB^ zwanwuE=A@?vPHs|xb3)o3EKVhw`Tw)6qob8(d4q`jw053hiM-@Ot>4Fve(o`Q^k?5 zD8oKA-JFtHhDd3(z+FITv%YgGbn)nEm}&y&Q!25n8mIHWeYqgAS=~PlGftGsx2(i3 z;v(5txwmz_h`jy@A(nAAmd@mF($ub|IeYltxHtst|4K}Lr|Q|I=rVmYCG9!5)4##n zyljlk4A66v_pYl%-;ed3pFvN1$O^2Lm)GrgB2RnRZ3M-AL-={OT;<s-f=ZU71_Nw? zUVe5!O08TV)$aUcC!Pn33=vw<s`-`Pl;^DO+Sj#~4bk1xSEi;}udVf$GLa*I+?<tR zxN#St>4*jT)~Vm6b;L|cb1A2A3rD9XCa*xic_j8pml$uEW$Im&T-XMF?nClmHqHz! ziu)WMX%N~&WWzE+``wjN_eU~xUz@rK`X3q;CE~In1`N&yLJk|>-EuGz9+Ik0L8T=X zRO(2kvC-W&KiIG7w*LylCso<zY;uGBXL&FRvAvx@hr>sEa!Z!lR(SvIW+0$&02p#B z+G?huE&byryvJvd;3+tZcQx|Q4OWh$P4V_uY$rSMxcOh}Jh-E6H<J2<GFKPJad1S4 zoT!#~-%7`x3bC232PTkP?@lTO$|X4Li%;K5d1m|}Joy$`@7oX<uD7?sMHYaXY{-9G zF=HU=<c?(_HT&0bkqh5SFq5k<6Q4O`pBV1VA|?>ovd)&yC{F$#$bm5B5PY;;yFCki zgC0_ESuO|S;9FQ%UKMxN6h~j@lc{gl6l%e>!2bp_LEp%aS}VV=9JcGA0cv@oKH*xO zJ7&tmFts4cvhM6qNZ-l(FLU3c;g|^cosjdN#Iwjfa>Sxq>>5u^i#xfe|JmfqkAB?K z{D<E-xb}*H7^Jy~V4F9Q*u^h4TQSL4g;_pOXbN*T^?$#>!bQ{(c4kEqUJjgUMIuK2 z7Z^nH-;*$*WZ6aje*xF}qYC2<2#|Om=h&Yt;n_^{r;630Eiw|i&QBGv>S6td$p4JS zei7`Pe_>Ca8dsgwF6N!}GOf)tXR1oY|H$@!WcZ^Fd*YyfED7t*>IQ-I1wB^CuMPk2 zy}agr5&XX%l;{L9nKTz5<s%Nnr;yf_t+cGy{Qm-vgJVj8i(qQmj0Nye$f5RTHl$Zj zN6is@Y3*2Q>E`-hAR5I3QZ+7fyipoT%2)HbOg?_ZhU8@^N%uVeMNNcwTroh6m}~cy z`AfIDb;4}=|2Mk7H20Gb=lmrtDY94+{ukM|4~S$a<R_9Jl6F%57YGp|fn*3e|NoDt z|6@U&0)Ebc@xO%pUzW?Lo65l2C@4fbG3ia!iloY9$;imWQf!3<F})V6EyMvB?09vr z4$})>G}iOt#9dsPoD_W3x4h^Ax|VIIFbE`Z$L<4Xi-aI*P(#^}7ljZj*trf{vorRG zj*R37=3gE1X0F@A=llDGuaDzmAh(mb9qftO@s&hUA?vH2+XNLAm7R1b$152mCJ4<; zw4H_jDw5kmX+5ppO%$fEUoMfXEyE;mb8KuZH`2>jgW!H{RSnF+!C@x${xlEyXD4Ni zVtz;y+np)UHTD_(CjjML?(@U=ph2Gl{F_b^_1iBfsQ>kK@4eT<!(&#!Iwd6q3I;T6 zmMLXeubsIj0(F99Lptey7`wI9HF2Bt=J0edYqYUn7Zp)%b$d0mfk5B{QlZbniJt|` zcXoE5cgt!9K0clIP$(Fg+<(6x-u^#InSWZ1*LC1>xk~!<5dpU!)k2<#-&%Eb^*@`} zY5IxjWAJnuldi+zSo}X%EPsP6+;C^$YgaoDT%ev_R-H-zuArb`x^hm4Y)MIpYRUEW zHPL=7yosjfp?mhZ<Oc!oKZXCae>wlr!Rr099){Ybn;bvgo?twurKf{Iz^&S%qQU7H z)6eJ6qilg@YQonep<_qJJ9y(cyj-j-EG)+OkoWWcH^9qXg&45^DX0H*Xk;{&5V%^c zt)r*sqn15vSY-URB#C+Fd)ax?6EN+u2*RaP-Pn7B?D=kq-dCy3GV(92X;!Fio-S8F z9)jK<t`uPm>iewkMFsIpjk$F7-v8Mf;<R;jy9ba1N2K}x`CFm8epdnwp={+X(-KwQ zV!{azsnIZ5Z#~QdMBlL~5S;&cs!vT|O>I*F>-8Sa;V?lDUO_fMAaJhMqM{f{TCO-f zlebgyL*GfFpU>+tU%#Cn^rDF^=xG{LKIysy!~Z(gr1jvytfr>MjdtkPR=4M5)BlI~ zbGgw+(qQsWpZ@sv{fS`PKx6CKmsZUQx}7fcM+#r(r#S7qCWS~U`M%z-zv9cP2?P_) z!!6B=zSQ<7TB*}Pjzz(9FZ_RcD#*7<UOvrsYMiUR6KoA5yg=LgAy$+Z>R06N*W@Gv zq%^$wQWkq{fDAOr57bTXr%h3~?yO+xuJNW=g70@H8|2{py<L9f-zO%ot0tSrvpEp2 zz!NY3o_2>#^PtD?LAEuz4W3<Io}S?MzXk8heb@0$8;6Nvmk$f|9r8aPHRV1x@Mrv_ znyD~(<98EVLqFy@B&cJ6p>@M19uxgTaz(vEy;B_g$u7lFEt}OvMdo<~G}FfVnCBt) zt{3J)I(l*lF2*ANC-{fVzyF;#GPU&Q(tId^mu9M}NHTf<mk4c#<B38+fp1SIka)h` zKlh0dhzsE+)Y1=kcaPw4)X~-L?F+Y;nJlh3A@J4~<j=wI9FzK|kIif*eHU;K%`kNF zQZHfAizt}{0}JcxC!`&|_tjph5iz_2=0{%j^rP^N{#XNJ5z5F(mu9T&VLX7f=0Fdk z|7ijEfA_pXw^X_FpEl<MkI~^N5@6sso?;6)_^7OIvu-GDpJUz@=7ZjD>t{8f@6RUh z)6=psA(Ttd6go9Q=YNvdo&GQ)8C)WGv=;N=g_ue-29y?}hpVmjd7k8;C${%8-Pbh( zr_G1{_kfq)y%&+KMzb(3x623)u1edb|JT%8xJB80Z@d#UNOwzjOG$U9N_P#C(#_D) z-JPP+-3%?AQc}|0od>_~@0{yg&p$9Td(Zvs`(B^D)&w?dV#mcmpRbRqZ`(Ip2t~R` z1}_LD5p7iDbIFpTH&J1w|I@+BnER^l96Z7<(nc&G&|<AS1l7-ov{0Mgtkr(Gg$Nc% z9);toF)&-M=gYznc_y0}wymTAC5|SliW$lF;}HF9W8)h$vEm`kN``5r&e27La~}c? za_n6)&R1iz`_t*)IXBEdg_skRlh&M%Gw!sSFB$eI5-fO+vloU5FO2!h)pcv#M;H?g zuuh>-T8MMYrsIs@ZKH3U=LqUFMZF_%MqA`?uO8yCKfB?t)TV~S*Cl=_%uX78njjg5 zzd92ps9Q@%>fhT*Pn=QiWQc73rN1E@sP1Ng>oLKA=}Bd?)kk1-`L50T#{OaDro-xG zm*R=qNUMxwmeD5kUB6Y*j{$P;kvTzoWDmxaF;$;+oa^ippMg7Iirg&8IAsz$s-sLY z5glA9P#21~IxQx4utD+C6om1EcZ5L!{-pDz<H5psgd<n<Hc0eTrI6@VgCG2TS@uZL zu412eW3w0~;qc#2fyTSOzEv?dO(Qg^!DRbPl?0q#YxF-?eI6{M)8GF_zKE0v)HYT@ zn|QeseHmEoL3&jHqm~BA)zYwlz~;U+vLZhy^4|7uEu*U&4*5DQKm?cZqdpQg6k%1I z9wB81i^}-kryp0IC|&@x4@Gc6NNUREf}FT_J{UM4UIwt$C5otvB%%U>bk2$TQNYm& zI&kv4LnliE+(^t2=P05zFe_s!vd0<>_%Pep@s7HbqoMQZPv_B*MVs}DR>wJ>1M1f4 zU1IKIk*b?dlIU$0hCWih5`LfPE#ix@jHBuEgiL>?){vyxH;gD+9P&u;QP`|L3tRu= zAboBYryX~S&&!k|yFmN%&CBzuNJ$j%%J1r@(N(oc)bru^vu(fVuPh0YShHjVm)+4@ zSyrt4HHYVI2hy+KbI0q>=tb|s8-+7=^55i*-5dK!(&NA1All)t`+L**INW(D&_xJL zdpXQ~;_i&)<zh=hjRUV=5&(m({9d(oZVvgV>z$aM=dp9{Ll!s2ebDc)=GHiVC}MQJ z<&h^311w9nD&_z&0AFO-%Xp=>V{PHo)8pJq^g$<g`t-vrkpzzfT^oG`9-Q|r-FQvt z?VB!V9cZFS@L(6j1d~Iq$d`~R13p{!vsj`@mrSjW`3wg=6396eXi60<&@E-c!V&*+ zZuA_fc*$W)xa@zg`Z8#@0#)D%>f6IbCZ_fOdK3F{ChC@JHDhndtt#z|-z!TTb~o`U z&DYnrJxCDktn=mO<(RTh3~Mbo_@(mYs`Fa>aa#0A6A^B|fNUbD)BnQZIXV>!kz<wu z$U0@(Fy|7?;R_D{7#A^)ghC1Oz=d!lX*?VoFORt|wLt^2BIof$`GF$muPcu=5&I=l z0&z={osJ$2pO`BJGM-iu|5(6|l^-Iw$EQSA^-S@y;op>dl>2hwF9H^;ewqwJQO-w} zz{!{pefst?L*#9~zGqAW!5<)bgPvDJx`??$rc2VHvR@pHWXO4oY+SVD|KRXaj;eJ@ z#2O<oumrl~ga-;u1iL*&`k%4;lu?ltY*CG|i#W48Golb)f(7%CB{ch~@72~#pZ<N> zd(gLvdD&y}IIt~eF4qY_Wf2a-m7<MTB|}LmcERqur|5@a6UwDSu*a3peh^(9+l{o< zqgINs2)K`8HoLBp&J!iBIzPQhs7E5FEaR3f#O@IcdZGG7UCN!CKER-d6s}*UxXpia zj)Hy`5fWNIoMB?ny|G3yjF82X6!Jz>k{i~GB3be!ZPB=m#nN_S2`8Nal^g*fu>eO7 z48VdR_Y?-DjWbY)#rSpYQm+$zO&MRJI*X$-CQOqq>_^O}RxA2OK?mT0OTz(&2tavz zC{6k~?jbTkdz45Ms=+`d|M>XA>S8d|Z-dXT2QkKtjR)y-g@t%4K$#A$E~sltL`>wf zz(myZ7j~C{Z^<3I6m+`x!L*b|7t!15bfhD~pT9$3Q1qt=6|XcQiP6gE{mOf7XU>i^ z<@A{gPV;^!vf?IN27#S<1xE}LIpmN25_nCz)7-0VgYa8nqcvY%E`C&==mljvCeU!V zKMkM|MVr8kitUdK0$qml{Gz}pqnR9du<5+E;l98-!jBdllieL?%NG&Ly36K`#{Li- z2k#7}dmQ7J(CY}By^KAxRMIgk!(e$|hB_p%E0-$2tgWoA1*PXH%z;S6reFp0FQ(#~ zQ~0@MT{#x3L9ZgjP#la6x)8Nv;gY%?u!?lJm%tc-Cp98#v6FU}dYxB#=pCGNz>dK1 z6t2Pt6p<EN*dVCLi~|6J3spcgZqny)B$R#3N?9>mlT7ON47mfDv-lAbj?3DG&(-zg z1DX9L94X*r3&Myr$+rpwre<H=qRdpc3&&o5e<7=Lm%dpXI;D8?q!J>g$$g;+4f#D` zI@7pmU?%F)wB4A4YLV>oO|_w4EJzMb3Rs27;el|3^XgJ<{3Ig-()-=|oo-nJrDsCp zXP!4zpL<8gAW8sk%L|XLw892LapnekVcxxGHD2QP8_?}2{Fmxj-;uOkCHrj*0?GvP zpK_7&D=w|naV78pJWpmEc&G``fO)NgbRfnyQ3^6#aOZ7gr(-$#U&bT%Xy1O)2%Qu^ z>NM$m2D0B_djvS55|jZ(NJ)3ynsrW60W4El4+Y`;D4r7-)6884GoyiFI-7``>iAJ0 zigy=eUCEt<hbj2{pHOf{7w>k}DKqrbSB(d(L@v^aa-v&<>bogA&AvpW$Ohm1a`^iN z4!7^YbV+72Uk&fM#ui3YtY4&ynWF-r^eHhZ9pIo(JN3~e81I@d&?HDCmJ&0IQsS3E zq00Uy8BL87tr;~gw=siUD0@CY8dZ1B+<DGSff8ZNLFr^}-)349MAZGrKrLe}vr1uc z@g9v2WNyA>?WhXgvsHw8n>m4@X%E$VJE-tUZ+x2wYAJIkJqjCQXG2xv&(}A@yQr!S zbEM_ILQ_jf#@{~nmagtv1&=8S0@g&I2VQp3h?G(Dq?%yvGI|irCAwg|0Mznqr-`ZQ zr~KTcfzAGtuP@l#mvgTji}c_Mo3s+oV!9=C)7E^^76W+q<TjD8)y<@L^M%v=v7++S z^`#)$0PH|~Vp>Z`KVVMWYfJ<G0wm9eqRDdjcozm0_coj1k{GZ}iNEy8LxT+YNCNtL z72b0W_XB8lhkeYHs`xj@;~C^7Q6Dqp=3b6EpZJV4Cy4K>*o>7pK@XE=!#c5AAb7fx zk}brfK(#Vf8n2%iD~I2+{E>1aal6K3&w$6HXPF%v8Fx7tArVhs$7wAD{U=syfb@}g zbX`<o;@!Urqlx;_A$=zWMQd<!3Aj=+7>QP#7q)1#P+*}nu$Q9>sXy)aEx9~gC_y@j z1q{;~C&O|{Hvk_zE%s3rQMz}>Beb)Wb&^gjSNIED^<&t}Da9lANEDKOoymw3-1o-^ z|Cf{Y69^te<rdGZ`Hq<SDW<d7h>_$}n!Ch-lSyEiePu&77y*h~C*3VE9U_kH8i9<l zt>C}VfmP_UApzW-D4nQ#{ww+z)(BZi!tl)lUx6{B$etyY(&I&LQ6TIkhG~4yA9nla zB{LzqMFx*5jw)~y4B}H5Vp%n(J7*}|VSm4|4;5fY(SZSSsgr1=<rsD8uRneW29D^O z?I&a?5jVqHtPHw#L2}`qg!|(7jW+-3<c=O4m0CZmq_vpxIN3J2GvQloU2xeXJx=}5 zrO?+4(H5#S$y=exUTcb@?i~y=LU%vOQ?d7m=F=AHe3p>M+=(PVHNL>NE|CGB9uWu! z>T9qGt!MjX!$8xTPId-@ROXsgB%^!Yp7B=4tD_%*O86IJKE$ibJZzsoLWwdkN-BS~ zaWn&YZp)|=jX8UYAX-bGFmHT75^{YUdPU|u@Gz*8&Y@394xtWlW8s7!01S}O{QAu4 zqa=3@XWt9=rn+(l$5($Z7`a+B%>rmA7VmA%?T-~~Vheq5;mH0};wLfynSA`EbPul# z5LW7mLe3L^@=^6a9TjILB!vNtFNC*x2=nO|EtHG_b^s>7$SYH)v72}O!dcduUPbU% z;`A`=(8%0qx5?*SO>h$-&T+In9igHa=8NQGv{N3*Q-16vV#X8!q<<cE>zUF4Fsu`` z`y8FY&yz>GtD2oeu!CXTZM6%S*F-FV9K+M>(%a?hi=|bYt#IT_kN^WasOEu-mx(9V z7+3w*YHVAYmZXh5{5WxaZN=<DJ+)A5=b(r0sny1YT&qN?i}LMDvffp2RS4QRBeZ}- zQ8><7^o_xJ2|j4t!yZZJnJ^ptHlMMA5o2O=e>+lI6qYZnF=|3mxE9&Xy$7+ziW`Lm z8J-Roqv`}P<siwT{2=gov!YejALcY;B0A$nb;!ZD^3zw31@`#nh==N>6*3i(d0U7< z-!3mKl6VZa^^GrCHdkkH0B6)~1`CIvsF0_y{C&oV$JR}=QpZ^b1SRT7er~YVn%m$~ zuTNy8zS_S*aN0t;Q_IiOI-_^>Himbzk-PKQgW{^!>OwhcA_zbf{D#V~nUBI}daLAM z<eNi_Xne}d@T$Jcu!E|X;pB7am2{#lT!V|}UUe?3yp)&9i1g}wYMmO^0MBaWFX6qr z;T`_Usqq0%BISWSr}H_<rLn+JB_08gQjv6v(#pW|Yf~p)qi;JbSEgLsCq_>{{jc)N zc@?`)$pa;(E^goMj@h-wiE24Kz@A$2)nsP8f7*Jfri^|dA#yU0IODFY^(7$izVASa zn3Uztv?NXc+%n=q^qAuinq8Sy`my9dWjtKlNN}F^ncQD-F7?^2!f#y5%1@{I2sK|m zqonrg?Wpa}z5^*c52?}?L>(e_aphlKC(nKUc$JEgQ9JtcR>_aTvd|#I?;`mfg)aeD zN$u!PU0&+y_@%?0GmD?hLthJ2G#$oLMr-Zt_)NGn$M>g6jZQ3zodQ**<K@BctOv23 zoJD5hy%DDG#2?>pN7TR2I-kLFtNOn>Tq`Rr;K#g|o68;_B!Pq++o~Y7g1yV<nXKOl zC4drZpUboc&Z{xHJk}Ib4w=VJ=(eq14Zhw=kC&)RH!a6%%8#(`CwCFQdS)6!E@{DI zA!>}RR)#22(ewyr(l|CU4G)SyrP|vlU^7HMU76ZQ>8FPXf{?|Apy<}R;cnlAd+|zU z472uk-=<7A_Ln<V_v!n?1;hx@o#hzfk1w%eW~cA5E_>^fC<%fBj`4#j0^a^=x&5j} zIn7TIA28N(2T^-1RQPiAr+<NoM&0=o8>QuLoayg%ObmF)0ajO|jq!rm%yPC6vn`1n zMRuu^>e>ILrFgPHDAZ19??VQ21&(}BAxDbH9eoQ3Fjib+-|J;L+;){W$p#)nw3Dj2 z{ug_ms;N;TXpR<#_d)Iu+iUOsl$m<pi3DyhLo)ZCSAS*!6_q#8_){|qbUgpX-a_ZN zY2)T&_-_+F<V7cp1b)>|a0ZBQ5=I6SV+_61GBWi}Md6`HdS)vkBXVR5R#*`JzvLbc zo~m?HG_W&nqfE|KzJabr&E&N=fyXVFDC5^DUVUX+DYZQ?eVB(h(crWtNxjnf$^vUs z`?Q=HKA3w=|1{2$&+@<2`j`R05%(PD+mIy^B#;V$@TkTNQwK<o=u0aXNt-*cEm|wx zq^;N|jiE^|kgku3ta$vuUF|!cu>H<V*Rj^<vR&#TvQrGV(poqlbmxMQg|XdaUOx0M z4}V)M)`5T+_q=8FTpYxhCx=k6`$BVT`SSea=SO2z3@SQ{1E0T1^u8@`Tyb)w5#`BX z8I=2F+WQwCQf+=k#gxLWGpMM1Y>(~%6B_yA34Q17Du4^5r0?WhJYAN7jBoWsud;ts zQ-9`Rq$&Qsvz*DDc}O-|=3-6cxPpaT8}?r??`VZ9mq`s|QqiEA6ro>oOn4*zGVN`( zP!J$9#0(e=07HU>WK~SDPo3qs!|$5Ig23w+Mg1Ed{9^ckZAyR&{yG#<ETsp>@3N4> z)2;ONmgRt-7Y?O2U*2GC7Je{$YDZjXB9a+8!x{h#%e*<$?tNdleyAE9gZAh9hODg; z4-*5N5I9&+n?ANkbK%~dl)XPBR);+#tE@Yh;ywQ9+yKiRdb#fc6lc9e8L^hOD`(h} zVieVy8+_yR1N?US&h5NOmSLNqcq3Ao0)IGftXYY|ol3m;fg{&fG$lK?ROm?{C;3-F z1Tu^}aae<GxU4J+q^Jm-6|#Ejuho^;N%!Z{;F)v6*qL;~#v1>UfkCGaMSp{R!E!Q5 z2&5H5IZDu~QRupu5X<%4CPL&|>EY%Vh=`mHWI#MMVDVSdgg1oe?@uh{|AKggUnSEj zGfXS|R|C8=vzgR>w?BTk`4<dQ-ns@J+|mPBXG94Q5>7~I$i%@>V^WByw5}ODO72T_ zWG7Q|P^LN^-Zk?zPGQF~EI27p_<(^l;4dC>6gT+>r*Rq^e-!}^JQ!wtD%9Xh2a36R zj2z=OCZz~P4isOmu^2A+1hD(-IYL4DzE5iNP>K#dG4bS_{_%)OjH)ooV{_i;MpJa4 zK%Bd1+9QiFH=au1I9xI*{jzQ6!J}dQXfghOH5AxWp_mscVjFS}E;vBD=k(o}M)V)y zHFl%t^HgCB9(v5K1G$!Q?k_*(J_xOepW@!)_@Hxy49GYFd<24luq|?t9-~4DOjYcb zOiHr*-Y-e&3ou+X|JXYp;OBkAeH&YsUbbA}LNA4x-1R)lm55#OpDv?QSUiwafE8t& zKf22}?Y2|mwh-H@WBi5ZlW9nwG-%GE&G;CN*zM`xCB}-y0c2d&&uiugMadr8oKpli z^zEx*H%S3J_=u#|^e;4sbcj}l<bp20vNwfNU*kMqLAa~l(cwwk0GZ*pbLQZDavv<E zHW#NI!aMv?#!JSAY%33p+nqlz=~Z%Z&PQhJenV1=oBA^M5+oR;{A(qcbhLDY_^3w` zO_aLq2%z2&Ns3n_MT9Quo^jQpswg|jpN}rnB1>22HxWF!HcC~8c2Ak!Ec5mU!#lG~ z1zj9T%+Sg+vNkxQ&3{?A??#-fUu=AH*^a93zGjEtUwNdNrSS^}JPtpeQ3t<^Oha-% z&HYdcVAB#oY)h-&y1Jo~xtIYK10zMb2iwce@(fAHS2%q5;P7wU^xC+D__#>Nq`2R@ zDF*N&PMSZman2$55v--~;un<PbH)i}WMYY>C~p)6pwV1=zz`Xc?a<#G*XBNz`Mx}? zHWC>5Op;*m0}z%X%X0#tcV@B!q3D3ZH%@sRi4jg77){1rFrVRGlLU@@!ZyhMT9!B+ zCSbI;H!5HTu?ZBH6c!9urAClpuRCQ1<Y3%IwWuLHWz2gEo{~$vM1Fzaa^A$ri^i4F zVZr6;;al<OK@5?MG$T9vMSic4T?e*Hj2xFsoS;TQU5b^82)?_j^k06E&qkuXWz*)F zz&Z`>f2}>a3QplKj<naMdKvmZxr&yh_x0MmCaAv{9B*)qmuptmR9ElD+${-RW+Z?T zvzBcD%31qGVL0Rd$P>}CaMjzBQwFNfuRJLGy?5E?$>k7#96!KG@M<2!k^PYxWn$0k zSZ1Th?hfRB@4V>meS_Ps16o|$E#)HGDk&?f>#grCpvumUs+@i|oJlv26l~w_%F12r zNhjU!mLeAfujC9eep>Z6;9V=KM&o@*^|0Vb=Ybet&6t+*8iUq+Z(3Jf8JX^xI1NB) z5R){8SPIc&K$H84AtGTN+jHD60Q_+*4yb_gjw2nwPRI3H0Lcr>1&pR}aoQE#s7YJH zsr{w;5$yyJ+Ru*}_dRyL-tm9l5%ElagbHO`IFAeO&=J6ap%`L2L}Dp!rk2Ha5N{+L zAw?roLeEPbnQ+#lo=t&Z1UM|EX#nLo*yl1{@HX1J380oED+gH0=X90XOYzb%UPyke zS;D5&C<FiSb)3C1+K5k;T9X3Ae!+;>+RCNQ^ta#F-@*P??w+QA6|vEf!tmi6(5Zvl zJ+<WKrUCa}Lr2H5P@BZU@XZrO2HjIgg>+wdB{woLigpA(ahC`(gVP)CG}qA*QkO}Q zkBjFZt1OPR&*6urYOgmq1tb^hC;-W#pIxl2;W>aV0DagSwP;>15wIUrhG#+MR33u@ z2W2h#+Rtx;+kz@y-LGw3#vB?Vo{tVobptERjKgcI6C7<DJ{Rl}QWmh?ixZtmp~eJx z-7LE=>jyQ5w0td6%(S~@%V|4y^WvkGD{#`3s2VMNOC1c@mKr)E%i!vUy8(qF5iC)_ z<KT19kv;a^>g5w{1iJmp<zMU>$K2W)hv}Gw3t>Uh0Sil{UzX1V^;BkwoC~=Ri<_y~ zrQfbaD8NkXh8FIzeXHVA*`;kx`rpCzMMR(k<JB;LoYs9cHM_|81m5L$ez8WK!iO&? zrajjhgF|H`Me?E#kVG#)mI}QNo><Jw#&)S2d98i=)ba383(CS!iD^tGCu8M$IDZ!) z1FJZ$F292zY7qN0D&uPoFF@3|5^i_hv@RV~ZUG8!jP|Rlix4v^z7$HE!G4oR<^&{7 z3U4Mb?z@X_K&vtVSyX=LxK7QHON!Rn{Fl~S0ScQOPqRUmX9eR+I05`Ak(OVHh(?Lj zq<_+QpyVNJeh=cxXB3l9PYanaowUuz7zZw;Iebrb1EjHcKGxXeETQ@$scAF$4`{HI zmPNf*-lIY4&RONl))VOmH^qkzaGNgak-+bd;Fjr#QPZLHO4XzwM}K!MQx#<~bV^pH z?ipgCQ~@Ak$7uLq9%i#2V;nqYP$~9E%i}Pu$f(|*jpC6`MO@7LLecv|y}F9lgPC&G zo)MGFc=3T<Ehy?XI^|kZOn@MVs~Bb;2+)iXjbYq{HssDZK%GIdRUog<W;{$mOtJVD zFk+tfM)YY<RhWj<*yNOfV3pPaY+U#HUtqfjPsB}9S)&@`g1>mATx*C}Ok;Eu>hG7J z1;gD-=s=BaaeTKPnpNUuOY<<2q&rJ<MMbD-q*#+0q~7r5j1x+Ze~-MzDo`QG$FkdW zho(8@y)V(bS6QuL{&zCIV}uDlB#PeQ5cFru)BC`^b@>jpXzn*|Fzc(T!7}f~D|d>V zG`@Ji7Qe8M!6P9*Y&`M3P!&d*y>Y}w+BC!Z+%vIXGAk9H<(5lZvQ#S1G&H+mfn$f) z`31ZAu<iF-?xZ?f5tSdZnUM)vJnv-IB3FBMsV`!AADZlF1M$F-{e+{rNy?O1T4<Xl z65I?}F1O^E5}DG>g(Hv{IF14%?iAo{!SBAouJ$^Ls^}7o<1L;2_15`L!p$Cc$ge#v zWc>nVABs_a^$bN-whqZ!l{wXy!r+vc{w?1b%Z(d#=WT9S+6s-bQ6A@wl-Jhui9LRw z6YFi+N)%{V8aRvULkZe*s^2jDP2%}s)BWa0j&yQnQzeQ}#`U%#?p}<%ew>&_Cl=x+ zCGpH?-j{RbuDW>VU)A&rZdBu?VCFv`CKQS*y%JOK_zP)LEQhQCc>%TQJnO>N@@%V! zsciIiKSmKXsb);`G+M~^&ev~h>seP){diS=%y+oFw_>JlU{pz15Q{k3{wXTlRe;&; ze&-w8S^NjLQ}M==_n!4LwiTb%KR+^|vDSrOwEVi!^#fY+SnrdeHjdhYFq&2GTh%Ib z8c}#r>stXh3|c@L*Xw6Vb^f#!^fyQtD<x4wXZfGkU<n2}H*4dcA1bt3HHZx(=3`76 z;Q1trmGBH9B>)A;gvhiKVH9&}iEBe?gl~-xN2QRf9byWZ)?YaiM3cB$-v7BGM>S|u z2%*}I<0a(T5L43WCO}A0`Ma@cw#s9?eWbLF(#&Y7s|>3X0%>(03KnX3n(Gl4zqlms z(I{_8^3PYp<aJnc{_jBVvB@CDK~A4lb}5z@f}TY$sAc>&$W>la${X%%$-&cEPrfA^ zJ+y0bZv*csgZ!~@e6v}(6>Iq_<yH*Usf*w~@9MFOIIQg5|IC*L?&+?IHMul=q<Qpu z3$1%=;(C0+<zco3>aUs0O(olYQ@M4lTKjP2K;H=x18=mLp(Z{YHRX=9Nv=UIT;-N< zJ?^@<_x#I;Bw~qk(ql1wF4V1j|1mbqks!c!U-k60!Z=3RZN&|4MOg>CyUoIVb%*Is z-?C%pq2H1XIeiA?GzVUmOObbfcQ)K`{~Ezm?BvCJSg_@;Z<r%9r>;KEg_cKfwxm2* zK4uR-Sb)dm?E(lX=ICZ<N8+maxvbp(t?{eZ`h)`WP%QajE4x?QNXni(xwoPT;I@`j zFKqA$UQTd#kzShN-$s%95EoGz{lEuQ`XC=b=V@zZJki@*1pf9jU0!TbxttrB0mW@) zYnne&PF~B<O}1{3{GX9~eS5YSh)Ih_mjBRot&A8S$_@k3sOL@%(z@3ScSYBv4GX~a zl{ZYzDBx4VIHVRsc@V;56IHn|E}XxlWB2SNRj|w8{QUz*4_|@4#XZhW?YM$$QbUyb zA4=q{3f$taAM`d-{?t>3+oWlGihEdLk+4e%6pp<$d64^B;R<+@vIKa&G-7O;z|&u^ z`g9?*qA*8LJ$0h$le1K7Te4_7_WvV}iVMY%2$M0h006?he=`E$m`(vXYrU6H3Q&jT z<L|%0iFyUOI2RRQrX3ztM*hKAD(Y(QsuM4#;9bJse6KEhxzvL8{{!r5)B$iG)MCrv zbNqRMV`pdT{wMMzxSYb}b9s&ky_fpO<klp0%Kj(0iMSHa=zwk5L0*L=tl2gw>tojc z%StKA1KljPOC<dkKsN>`GEWdW_@^cve6>voM~wNVkII-R>laoYb6f>XzD<0m_iTQe z;~yh0a1SbmMxf4&vaHPi)7yVER!RtnR7jZXM>I>KKz5^!dGX;W3+@NH2b(8p<9+p3 zd0cgly-*x=Ck1<sij98Q#{#>^k1}!^2m9ZxXd>=DzdHYvw_{AB|69~o2`?@J0EKth zTo-$9)86rY`151i3s01BNf8vP#;ZAq**$1x@?OE=B<>0w{UB>h9%vQtQ7c6^GKZZl z!qNbDDo!2Aju$*uOxpa<bN){(aNzYhiAnH@SwuWxT<`8?KMOdv6bTKkZ5aNNHcB%X zC>d~#DFI;Rmeh?C9sCURCgq1uX?nMSt)u;+toCczk(XBI$B!v`2Cm6tT;%nC|9;8V z6S9AIuT(XW7LymH6I{l@{d>jISZb|WeN<8)Gg-c%s*Os0`J(29&C8<}@juI7m4wSs z^}Y6Far2o%agbQgGu(nB{L`$?V69PoK}xi}hQT8q$Y<V3LqD)GfmM3(6Uex`#`nQ8 zK~JtkH#=>Adtt>7nWUw?tZ8DX*e>O>sMXwjQ8c=Www-IdvWoKj>94epA3n9p=zdVU zgji>tWho`#6wW$tZ|Zx80!F^uXtB~~-Xy8uvQGhj4}G?!wIc&fIH~+H^h|U<<L30H z`d_Xj2J~@A9Pqbp?lNR%=-{@qYi<=-7B<ziTB$B*VC`=01An6sAzOD}>W%Q{vhBo` zi!e$IBCKT%5IL@Nq1hq<mLKojWbL!!a-<+h$w$Qv56=92P=G4|OH$_?#gsD*fBr$1 zdXEYPLM$vSawtv>4TGsM(9q^zF%a8_>!aC;362A6gyu<g5`Mq=mZZiSiw&8d<qmQ1 z=JWktt#(SQS`N!^Ps>~ithD|^KT|S69jj^*A^{wLzKAxIVEFx>Y(u#F%_OezfLiT8 z8c7-sf?-D3FtkO;$mza%BMK=~LfoX9mIa^vC8|rLow=?4^C*gmdOnA|HBLmJCjl!y z3p)c#b;6XzEWbdgm80W?_yu?FT~xV2>ukLktWJuU95%!Z9dOrgOG!x?dkpRW#f^g^ zu>J5jF7%$4cUyK%ZJgcj40WMGwtZ=FQ5R8dY$`H?{=(sL2>$0{)xtd@!jZTCgRldE z@$i$;?eFo$-mS<_E!H;ks7VI@7o%CC1k-H3WnPMCUss8He+Z?YPSi>MDFqAPPLmu? z5|~vL6(7b;y9dtwU}h-R{A8qMN8N+djhvI+pl*U}@q2FWYYEqtQ^_|d@bvJA0^5y+ z+Y$ZEn}t_$LLRYXXh`87)j|91uuAypavD99!sj%=|D~ASchK+oB3F^A$wX*+aq+XT zuyBLx!6)ytK7ylvz1S~y#{c|7x{6Z`YfgMmyoX#?9Vi~=2lRV<Hlq2;s;egt1idax z>+9<mG95bh;7T4}@h1;o{pR?$SRaGqQ<@F^cX(~9PM$_r=l?Mzf0op&@P7a172q+} zlnnZ$|Is&0GD|q+KY5}pfsrCwDkU}vEo`d7M#9*5X3WPoB&L?7Q?=y85ix-(?kPss zJ$B8`o8OM=e<y!3<gzT*ND5?*0Z^tJs{fdu7GNXDh9y{Ttg@tl-m&@_X=%Q;@CWm5 zDtxT|$jtE7H`9evjpg`)htV1|O-tS)jTgp?MEU&ME7mExy0&)umDKwme0P2AhA0C# zJKq{chXPnSogplg9-F_g=J5Y9Z3naEwe8+Ff_YA&l)BWWZLg5!^%lGT0uvLHzKyND zeZy=2&iU87)sM}uTZL$%=xqAjN+kweZ}q2WBlFA4i&eQ*tX?+H@7Ff>I)ARSKQSPF zLBFV}n?E#9m44&y=KODq-^7FbSW*DhRo2;f4*ruUB#UHgCDkiuBtB(rvk|!u8LP4# zpLPNUh5vd!DesGPOrJbQQGG<snAMw%QI%&ss9LA@SM*8T3Ho@tebIQ&*p5CF;V<v2 zD4k#m++6%!-cV5}ZB>YJErcu~*TYxbpgd@_C%<CwhXsp*9n%nPAtZ7RF5_thZRnRg zGZ{H?{lQ#IS*Q1Wzbq~$P4q{Mrd1q9a~<C-9$cIw1Z&qVl%_5pl)SeB#v0PxaE}}d zrk~4SVa2$OWYOc-e)F%rn?3v7juyA*42JIZwL15qK6_KN?6n;ohS<SW1#n|&Hj^T) zt*z}*KYlRrZOO?0%&QxbK|j2jr=SztN-u1XJ?{%qOf9dk?ka&>l;ePhL$&xnAt3*N zf{8g@r3<_E95#4w9fH!5PEJ%6=mmuA==iP}PZtJ#Qv2v2ZFBQ$an@m)Z%o_d0)e^I zzGmsS8F{~YlUJDXjnR!a>Q9p7_hOU<cI?d^HYid|)qxq7%!^F}wpG(k%c<p6U+VE@ z%FhMA$sz_e^uI9gmsR<C^XEymdGFsdW|BAk{UejI4`L9$MXaRLEw-6*dfA#+>Gm6A z3^1;aj@detQSHPgNBZEKC>4;LjQ`*auKD~4qBl}>OqA?eU8GNJQ|wsSp>iyk?qF3n zQT+LeED7v*Mv!<aV?>v+8G=ec%Cq6Xjjcw7+~+*Qagy`ieJm)FW3uCFRu4Ti&1I75 z<rSYAQOOpx7#F_D0<&9OkPtJCFDn7c<Tcc-rPGY1uZ9M$wfFkV8#?MH(Dzq{t;QGY zkiO60exjjt^A&CV?@e_I(15wJ^3W7WKU6Gk4mOtMX=L6v`b+%y7;b1(6X=vqqsUZN zRWYhS{_+vHYtQVr?hFzD216@uzpp0rx6GmpeZFj2iO9XHfoXWN{v<AkT#Z$IRQ)3t z0oUKx>OYO5WmmtRor~|-pmS!H`zDX*uBc&9?bBdnr&S1<*Czq<)N_>6sD5fkr35^F zs8@}fsg>j!<|q*{aqSthA8LnM#d(c}ja@~e(?_Z(fFpb@lf4fbtB#1uo$7L!pm1{= z@y=^e|J@uMkc&+OTmU86{y0(#`I@FPDKbe8R8?y739}66y=(1!XeH+f{-oe}D*)8b z`71%P<sIlP@=92bLmGu5W4W^#DY`!iKLoy^5HO~e#hBl{b8h%NK7E~TC2F~>RjC_I zQ+^(El@VEbypWPqoOP?C^S{#u8N3is?Brvn#{qkp$De_6kI@ZY&u!teCr-pR>j1zb z8{d-6hPQu_a8hn+$%1Wj#RX`FnA<uPzBrlpdD{qSv(Cco4|mFe5Itap{*80$PT<wF zlvm~a?R(L>DWkj44*z~7sLd2jeJcBAh;qY|vTD@grni4N*O>P4xq71D&cjCP;rS7L zR~woVLM@9>#!0cSX8gBB<{HlC&3@P1K+B#Aba<SPLyOvUFP0yh8*-3lB!%qc($tv5 z3%@sv(G@p$->3fm@Mng`8Q^vyMHQZVhb{(|G6<cp0`T~rDYa2d+q5+ih|(=WW(>6| z4Ub$;(^(lfF_A<WP8=4-zdtDaSzJzvJJ_oUd}mW`+e7y=lelp^Lm{10x4cy4dsfxX z_}?g_n(#Qhr2o|ZeKA0cs?*YBgE+IrW&Ry3Fo6qEx=y-I72}ezvZ3JJpR%fk(UP%t zcFLpL_2_Zk_>muwpOAck^v_ne221Db;?noJTe#(`baAYW-%$t3<%~01z4U)9%Bis> z3~SE*wGn#C$rY(7%9AJK)MhM6g_nW%Vps-P^IsOJA-}<0+wfNG4waya|908j=no@C z{aG#%ZckTa5fc;2peLHEDfXUK99FM&Wvvsy4br}3FA<fkwWYad-T6jqG$z%(Es(x( zW6kl#<&B=!I$pq4id;?bE!1j5t9TF{{nvHn2)4rLhZ<cv)YLq#iMHwbEa87H1Lj)< zWibyq7uP+&&(sJE{?0tG^zt>A+x;vrNbfiTR^c0F7^|b=H&9Scfm0JjQ(};A!Y8yr znM$%>tsh^Y*)=@r$B3VbOCzvJY(BX-@M7e>GfVQ@HT3UR`q{0m88sCZlgW=E_29Q^ zY-k$Nz+{r5XT+k*uuF;$?bgR$b3bL&e}1wnMsf;Dz}L?}is<cf!<7ppQ;HtXF<agF z^T3_?J$^${D96Rlrq1fxq`bb9=#?N{{cDgfcowTxtemz~#YAnK91&!R9J*}do@l|F zHg)ihbzv?J>$I-5GfbCN9YRJD{DbCM?WMVhcr0Q)M-uGIq)vo{Y8RPek%^YdHK;+w z_V(14$?^E_xYdC{F+j16dzHBnepb~fO)t^9M02mqDCnuCA@{!BHK?Dv0KNeJdJ44t z0}qxg`gAaCUtjLD(=%cfAHHMMao&8su$nMVv%tdecW1BAbpm-B$Fv-ju`rN-eTZrn zlkESrwdMEunBIPIxC*6no1ASs=}J#efu40Fvh|a_u7Y~$9_j9H7gMGvZC$)b9^=uF zzzX;J5ApU#`h*`Km5r5JhU08F3Z>s_%Lpr{Cb9VW9yG`}o|-;^Nc!z129ni0pIP$0 zCM6EHa&V-X!#D0r!Yo&HmMB<H{VjnPzwF}5AWRa`^S^)HK3lzP_j}XgG+;@)!5H|? zS?onJQe|lfcdv?n?bBiacn89l(ZBqTz{<Q2u#~7iS5myF??ktw#BuktUT|_~X~m`5 z6iL^T!=SU1m*wTQy1=h7mfx*TZ{{0R8?~H0-u~L2#+RvcU}oZ@Lj=o?F==<yCYbPO zU+qWGYdOZ{83v6^1?zJ%_5B^l(b5pxI{Q#M=9gHMJTS7xn*NTQl(mY2)ff-K&1fOE z@WIVYVd>|4?I|e=)C(e&3~3h5UyFERvvq}8mLoN9#OfJ;s2g&TiF^pf*4EcGKvf)` z`u4k>`!69f#7Rk$h<=NX0T{m-gb9osAgkSCq!is3rMY;W1?3`~kEG^Yt`~DdX!)ri z)=Y@=>rD>N=76(E0kZk2*B`cNK4I3EHvC?~U%S$FUk~-+i1lgw3a`m1h0g}NQk|O& zv9lquPnRKwlo2v!W@gt(J$DOkM{iLkY?@YBU=QysKMFIkZ+8!+#`X{}T^`vRz3CZ< z39+_77`CB6sB6!qfW@s-yta*B>wK3(%sSzN>Zm!+Y}4?3602mKhez;Pf>Cpj4%co= z5W9*7f6#o!&NNJ3Km}A}{zqdDxt~Teg7$1&YIiyAowQw$2D#Mcth7#PXD1(Uy+wb< z^yi@su_K5I`c}7k#-Lyu%n=7f&7-u1S#eonafyB0o%yZ_<mkanDy(_~+j=@YEMr7b zcamWJmRg|pE&MAey@74Pee+j52RFCb+Q7r>5IP+L`W?+1d4t{MR`(-P=;8IzAB4r3 zK&p9I^H;_Rf(?^Vej@M=r~>+ys11p$2@`DA{$(RH`Yud^YMsAdfufY`bv&SMt~qXD zTCeMwT9-ttD!f-zD*OX%);jm7O;!jbX30tE%S$bO-`G>d)&G1sAR4SH@;u+~al58= z+iZ^ZbJ~bG@feCM*h{NRshgL~niq^`F`9s^S6MpWnJl3&_=fpABiYQ;XaalVg#jRQ z(8v(SMVqZ0{LLDjt}H7I?Ktsw#=e~9vhL0|H)zaoj~IN#a7Jb#+}rmUqq<zqA<fEQ z75l@bLm=WT!`;Z}=t49Z3^>AO&~mAugZyB>(niFl-((B}&I@^*Qf9q(XVY(W8zrQs zM7#z3fKuA<IE?3tI-GmYKvk5L7b5+vaZbTf))*XM!uXpF{Tw#T*qfV~u!3mCT)=x{ zrH52@BlNjSqef02wtTo*wiZ}3;BC~DRq)??h?$R%P*hYD;lz~a4q$yABqr>8UzfZE zXo@--Or*b7bKDurc05~`_TGg?cV|@UH`hGd{A6Wcm=P!nc2$&cyeyADZC&l8@H;zh zHMz|*&GKsbiQDHz@QxV<OuneAiM4wFVs@4V2{=iF2asDlH*(U>U8{Y&o2}w!%}ehk zZES;4GOP9UKFEcKH-E+vEf=t3{VQ**`{~yYN(J3@j~}cWu0ENK+`=nT>#i&XC&-6% z#mrF^)|@JAXtM|#f%1Y-5P)OM%!#=>Pu~>7oe|bWY@nMu*mE`L4LiR*+i*j((XWIi zF~b8Tpl<<hP~ppDWM$vvK@y#J6Wz4=(P8FMfYf0iXul0$0ZSpUdo5!5o^Q&(f9?&( z;brTGMIMAqf+8-#kXnFORQ!?EcuxJZ;~yusfoWdeb#ZW>`TJZGSX5?%Nh{#phU*P$ zy^KX4XYR{g(CKf7Rn+!eA6!35=_snHP(+N7teOxTh)hZCnC+b`vFca+ulVz#_>Q60 zfydb7kUoMu>tS9oZsGFJ-1)e!t8f6?{DCCXQt*~EHk`YF^^BXMLl&CeOaMU4c`IXG z4V#kJfvi5W0f9vmc12i9OY+Vd$O0e~!_nI53B!2fA;bpR$N0V;9F#j}45H&uUP@wX z-I<Q}EQ>v=;<IW1pxLX!zM6$sig;Z@$QXb!B_w8|#=9p#DKSC=Juy~2#GyO#SbaVZ z!Oqfw&nEHE_j&!zRUh;lqfVZm9{SA}`oZ91lYU^8lU=XI9!Z{gfHJtQ$;p@0CzP{C zq83?J0Pn0qS-8$WuOhxt@>>$e3bIA(cFVrTFt?FjXEVC;5ZQud;xnpg<0NPj)M^1F z+{&QKF#LUKY$3nduC1+ZJ(!?h<H@P?0osH};Ihj6d9fNDM}~uC=7~KF1>4?W6j?WU zQB9iCP-E840Jm<U;<kF9FEYW9Rl%gxfT$U+(eJJ$z?mCio){k9?UlzwhfXb!igiV2 z%~NQ20Pt9nLXLVF7y1{sE&zOK1ZbG2S5F;uhA5CX7#JjCAeAit?GYld?0v8&NQ6T~ zbsf0r*j1D57S0T6iAo-?>x%q>?Oo)1JzaTn!^zKVu1paX#Q7yViXx6?dv7X;!>B}{ z(BN>)E%zP`A1(29lu>z8$X(9ya;p{EvYkw`ysP1{AuUq9;z&MI$>Q6a-lDb(pFPPR zsy`0I^G^FS|M+(NiOv<brGAwkN?l_u7Bzf<dzZ&tlh>>9KWK82@d8Tsx!xB+;AB4x z71LbstTtY=e!j*LOKB=@7eeKuZIx&FATK6&CcoCM2|5K>hKb?oh&cc0u%Brnt2Au? ztaQ+-y`;QX7AI0enVsByVJ2+$I__eB`|@z6zrI#H_4lx4qvh&*8;eYCLv2zqR7#LX z-EV$`ahI#>+J{;*;A^GcIodDlW=Cm;+pm^|*9K$!NAa7O5NRA{S3Q`Tu)tTd9}&)M zs}C$JF)zYNy|x&Smsa`Chx8_vPE=@n);|tp9YV4$i8ioVF<+mFeSGaWt7E>-=Z_xM zO}4Pm_sN2zD$8@;f|2=o7_{;6@BwsU3l(WqwD4GSGhIr41~e*Voxc+<ed^heSTM+l zc>sOhRv;e~7hYBY2Gj%{gN4J?)a35rp##qadFo%5e@0qd+m+pOiA&8*y^q&N?1SER z^N`_^{Bf&t4Y-fKUxA=4bky!xKG>7y#&%Y-1JZ-3$!(1XMd)ftXjvo7uA_3$o3Bk7 zgr5|+3FR`+&vyP+;c}ikkn(Z{Ye!7&H%9V5LjoYcMgU;0SRXy{kJ(#m1>;7l1aVK4 z1kd&-jtSoCv3JSEadgc1OkzhT2N=tsu^Rn$o4qo90iaduaqf{u(D--KVikq*{nbpA ztcSaUG0?Uj>9-)7!{6|ywII~+6LF&k(`;c;a@6HsLwSvE)_e*HjhUH(^MHpl)Nr$i zS2=<FfNyFfBmKZoF6&96fW+m_gq+1RUhT<`*U96?=+)d(^8KydY*JCf^psF(p4x52 zhl)@xpqkx*Wrw;v+AP?XJ3L$ihd7}2yV2E{pucq1O2^EcdEwqbPY!RjhChm;zxaC+ zF`@VW?aEy3ypr=ohosEzj5xfvWq9T?$-C2YKksBw751_2|N5~qwYs_LnAVs0#vzg8 zrmyLSe|vXS`Sm0IyLN5mGbN@^w!8$x6UtH>)Q-oA?7rh+XM%Cd7XiKKg|BDd0(duj z;Ck$oEkO^i`oyI*d~)6<DiZ<AZyuuhAN(zw1s|KyN9qh%Y7}AGc*`_8Uy0|Rfyv)@ zD`%%m?)c}T%sy?c7Sj|{PVjh&n0-@@`EtDUp*rMsjsAOpER=CLm=#GjCU$<D^5_~2 zir>>e$<$P7PwFOqaxX2atfg-A)OJoBD%MLqXi#E(?)L9aP|$AqaLnhD$39ZY@?Czk nJ=`Z3!0j+yLF1bJ0>5Xvyq7YJ&i*<r86YpMB2^(_9QgkLjX#i{ literal 0 HcmV?d00001 diff --git a/images/peertube_logo.png b/images/peertube_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7d709ef1990886f2162185ca869d90a86cb41681 GIT binary patch literal 1639 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 literal 0 HcmV?d00001 From 882f3982d919a034b918b03850f29d4884eb439e Mon Sep 17 00:00:00 2001 From: Plumf <plumf@open-plug.eu> Date: Mon, 9 Sep 2019 10:22:25 +0200 Subject: [PATCH 111/360] ajout contribution de kayou[m] --- app_nextcloud_fr.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app_nextcloud_fr.md b/app_nextcloud_fr.md index 4cc61a06..804f08ea 100644 --- a/app_nextcloud_fr.md +++ b/app_nextcloud_fr.md @@ -13,10 +13,10 @@ Nextcloud est un service d'hébergement de fichiers, de nombreuses applications Du fait de la constitution de Nextcloud, une base avec des applications tiers à installer, cette découverte de nextcloud ne concernera que la base de nextcloud sans applications ajoutés. Plus d'informations sur les applications dans la partie dédiée ou sur le catalogue d'application de nextcloud : https://apps.nextcloud.com/ -## <a name="#LogicielsClients">Logiciels Clients</a> +## <a name="LogicielsClients">Logiciels Clients</a> Il existe des logiciels client pour l'ensemble plateformes. Vous pouvez les retrouver sur le site officiel de nextcloud : https://nextcloud.com/install/#install-clients -## <a name="#ManipulationsUtiles"> Manipulations utiles & Problèmes rencontrés</a> +## <a name="ManipulationsUtiles"> Manipulations utiles & Problèmes rencontrés</a> ### <a name="AjoutEspace">Ajouter de l'espace à Nextcloud</a> @@ -191,4 +191,4 @@ A présent, le problème est corrigé. ## <a name="liensutiles">Quelques liens utiles</a> + Site officiel : [nextcloud.com (En anglais)](https://nextcloud.com/) + Catalogue d'application pour nextcloud : [apps.nextcloud.com](https://apps.nextcloud.com/) -+ Trouver de l'aide et poser toutes vos questions : [forum.yunohost.org](https://forum.yunohost.org/c/support) \ No newline at end of file ++ Trouver de l'aide et poser toutes vos questions : [forum.yunohost.org](https://forum.yunohost.org/c/support) From 36594392c5187d86d3b1e124845ae3d4354bdecb Mon Sep 17 00:00:00 2001 From: Plumf <plumf@open-plug.eu> Date: Mon, 9 Sep 2019 11:30:51 +0200 Subject: [PATCH 112/360] developpement page de doc peertube --- app_peertube_fr.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app_peertube_fr.md b/app_peertube_fr.md index eda7a4a5..f359cede 100644 --- a/app_peertube_fr.md +++ b/app_peertube_fr.md @@ -9,12 +9,19 @@ PeerTube est une plateforme de streaming vidéo fédérée (ActivityPub) utilisa ## <a name ="EnvironnementPeerTube">Découverte de l'environnement de PeerTube</a> +Pour comprendre en quoi PeerTube propose une réelle alternative à youtube, vous êtes invité à regarder le clip de promotion de PeerTube réalisé par l'association Framasoft (ci-dessous). Elle est elle même hébergé sur framatube.org + +<iframe width="560" height="315" sandbox="allow-same-origin allow-scripts" src="https://framatube.org/videos/embed/9db9f3f1-9b54-44ed-9e91-461d262d2205" frameborder="0" allowfullscreen></iframe> + ## <a name="ManipulationsUtiles">Manipulations utiles & Problèmes rencontrés</a> ### <a name="VideosEmbed">Permettre aux vidéos d'être embarqué sur un site web</a> -Pour permettre à une vidéo d'être embarqué, c'est à dire que la vidéo puisse être visible sur un site internet à l'aide du code disponible en cliquant sur *Partager* et en copiant le code sur une page du site de destination (cf. capture d'écran ci-dessous). Vous devrez modifier ce fichier de configuration situé ici : `/etc/nginx/conf.d/nom.instance.tld.conf` +Pour permettre à une vidéo d'être embarqué, c'est à dire que la vidéo puisse être visible sur un site internet (comme la vidéo de présentation de youtube sur cette page) à l'aide du code disponible en cliquant sur *Partager* sur la page de la vidéo et en copiant le code sur une page du site de destination (cf. capture d'écran ci-dessous). Vous devrez modifier ce fichier de configuration situé ici : `/etc/nginx/conf.d/nom.instance.tld.conf`  ## <a name="liensutiles">Quelques liens utiles</a> + - [Site officiel de PeerTube - joinpeertube.org](https://joinpeertube.org/fr/) + - [Documentation de l'application de yunohost](#) + - [ From ad2ce9ca31354b23d9f248638e71ab002a48ce74 Mon Sep 17 00:00:00 2001 From: tituspijean <tituspijean@outlook.com> Date: Mon, 9 Sep 2019 18:34:16 +0200 Subject: [PATCH 113/360] Add Ownit in Sweden Adding a great customer service experience I recently had with Ownit in Sweden. --- isp.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/isp.md b/isp.md index 0d28c988..04343253 100644 --- a/isp.md +++ b/isp.md @@ -42,6 +42,9 @@ A list of French and Belgian ISPs is available on the [french page](/isp_fr). | --- | --- | --- | --- | --- | --- | --- | | Telia | Multiple | Yes | No. Business only. | Yes | No. Business only. | No. Business only. | | Bredbandsbolaget | Multiple | Yes | No. Business only. | Yes | No. Business only. | No. Business only. | +| Ownit | Multiple | Yes | Yes | N/A? | ? | Yes | + +Ownit reserves port 3 and 4 of their router to TV. With a simple call to their hotline, explaining that you want to selfhost, they can reassign one of the ports to be in bridge mode. It means that your server will have its own public fixed IP address, in addition to the modem's. ### Switzerland From 49b26a8689664282a2f6b7959e2529dab5b18caa Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Tue, 10 Sep 2019 13:21:15 +0200 Subject: [PATCH 114/360] Restore removed item due to bug in simone anonymous submission --- apps_wishlist.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index b4019e9d..214478a8 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -53,6 +53,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [FEX](http://fex.rus.uni-stuttgart.de/) - [FileTea](https://filetea.me) - [FitTrackee](https://github.com/SamR1/FitTrackee) +- [FlatPress](https://github.com/flatpressblog/flatpress) - [FoOlSlide](http://foolcode.github.io/FoOlSlide/) Open source comicbook/manga management software - [Fossil](http://www.fossil-scm.org) - [Framaslides](https://framagit.org/framasoft/framaslides/) @@ -114,6 +115,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Modoboa](http://modoboa.org) - [MotionEye](https://github.com/ccrisan/motioneye) - [MPD](http://www.musicpd.org) +- [MyBB](https://mybb.com/) - [Museek+](https://github.com/eLvErDe/museek-plus) - [Netrunner](https://github.com/mtgred/netrunner) - [Nibbleblog](http://www.nibbleblog.com) From 8057c88503344dca6a59b482189dfc32d21cdc91 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Wed, 11 Sep 2019 12:04:54 +0000 Subject: [PATCH 115/360] typo in path "config/config" instead of "config" --- app_nextcloud.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app_nextcloud.md b/app_nextcloud.md index 92cb29f4..dca14eb6 100644 --- a/app_nextcloud.md +++ b/app_nextcloud.md @@ -70,7 +70,7 @@ Case B: ls -al /media/storage/nextcloud_data/nextcloud To inform Nextcloud of its new directory, modify the `/var/www/nextcloud/config/config.php` file with the command: ```bash -nano /var/www/nextcloud/config/config/config.php +nano /var/www/nextcloud/config/config.php ``` Look for the line: From 7945ffafd641d6396e2920f7a4de5423fdad9655 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Wed, 11 Sep 2019 15:38:52 +0000 Subject: [PATCH 116/360] Fixing typo. --- packaging_apps_virtualbox_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging_apps_virtualbox_fr.md b/packaging_apps_virtualbox_fr.md index 823fdace..aa07285e 100644 --- a/packaging_apps_virtualbox_fr.md +++ b/packaging_apps_virtualbox_fr.md @@ -6,7 +6,7 @@ Cette page de documentation va vous expliquer comment mettre en place un serveur Il y a principalement deux raisons pour préférer l'usage d'un serveur virtuel plutôt que votre propre serveur : -- Vous pouvez torturez à loisir un serveur virtuel sans courir le risque de le casser, puisque vous pourrez toujours restaurer un état précédent. Alors qu'il serait dommage de casser son propre serveur ! +- Vous pouvez torturer à loisir un serveur virtuel sans courir le risque de le casser, puisque vous pourrez toujours restaurer un état précédent. Alors qu'il serait dommage de casser son propre serveur ! - Un serveur virtuel sera restauré avant de travailler dessus, pour garder en permanence un système sans résidus d'une précédente installation. Cela permet de se rapprocher au plus près d'une première installation par un utilisateur. Nous parlerons ici de VirtualBox, pour son approche graphique facile à utiliser. Si vous préférez une interface en ligne de commande pour la gestion de la machine virtuelle, tournez-vous de préférence vers [ynh-dev](/dev_fr). From 8968f2712cd62e1c81b8fe980ff909cc7da73f20 Mon Sep 17 00:00:00 2001 From: jeantest-git <55061244+jeantest-git@users.noreply.github.com> Date: Wed, 11 Sep 2019 18:31:08 +0200 Subject: [PATCH 117/360] Creations de la page et ajout d'informations --- app_gogs_fr.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 app_gogs_fr.md diff --git a/app_gogs_fr.md b/app_gogs_fr.md new file mode 100644 index 00000000..8756e26a --- /dev/null +++ b/app_gogs_fr.md @@ -0,0 +1,13 @@ +#  Gogs + +[](https://install-app.yunohost.org/?app=gogs) + +Gogs est une forge logiciel minimaliste utilisant git. Gogs a été conçu pour pouvoir fonctionner de manières optimale sur du matériel peu puissant type Raspberry Pi. +Il est donc adapté à l'auto-hébergement d'une forge git. +Pour utiliser pleinement la puissance de gogs vous devez avoir appréhender ce qu'est git et l'utilisation d'un [logiciel de gestion de versions](https://fr.wikipedia.org/wiki/Logiciel_de_gestion_de_versions). + +##<a name=LiensUtiles> Liens utiles</a> + - [Site Officiel - gogs.io](https://gogs.io) + - [Dépot applications gogs pour YunoHost](https://github.com/YunoHost-Apps/gogs_ynh) + - [Site officiel de l'outils git - git-scm.com](https://git-scm.com/) + - [Trouver de l'aide et poser toutes vos questions : forum.yunohost.org](https://forum.yunohost.org/c/support/apps) From 135572e4daa114542d90837421f6d1f48de41ce4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Quent=C3=AD?= <33203663+Quenty31@users.noreply.github.com> Date: Wed, 11 Sep 2019 19:57:42 +0200 Subject: [PATCH 118/360] Create index_oc.md --- index_oc.md | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 index_oc.md diff --git a/index_oc.md b/index_oc.md new file mode 100644 index 00000000..194bf8e2 --- /dev/null +++ b/index_oc.md @@ -0,0 +1,149 @@ +<div class="teasing-part"> + + <div class="home-logo"> + <img src="/images/ynh_logo_white_300dpi.png" width="100"/> + </div> + + <div class="punchline"> + <p> + <span class="yolo 1" style="color: #FF3399;">Ven a l’ostal, soi albergat en çò d’una amiga</span> + <span class="yolo 2" style="color: #FF0066;">S’alberguèron e aguèron un molon d’enfants</span> + <span class="yolo 3" style="color: #3366FF;">Internet, lectura e escritura</span> + <span class="yolo 4" style="color: #FFFFFF;">monssur@michu.fr</span> + <span class="yolo 5" style="color: #CC66FF;">Ai pas res a rescondre</span> + <span class="yolo 6" style="color: #FF6600;">How I met your server</span> + </p> + <button class="btn btn-primary btn-lg btn-block yolobtn">Perdon ?</button> + </div> + + <div class="main-links hidden-xs"> + <a href="/whatsyunohost_fr">A prepaus</a> <span class="colored-bar">•</span> + <a href="https://forum.yunohost.org/c/announcement" target="_blank">Darrièras novèlas</a> <span class="colored-bar">•</span> + <a href="/docs_fr">Documentacion</a> + </div> + +</div><!-- teasing-part --> + +<div class="boring-part" markdown="1"> + + <h1>YunoHost <small> es una aisina que vos permet d’installar e d’utilizar facilament vòstre pròpri servidor.</small></h1> + + <div class="home-panel"> + <img src="/images/home_panel.jpg" /> + </div> + + <div class="call-to-action"> + <a class="btn btn-primary btn-lg" href="/try_fr">Ensajar</a> + <a class="btn btn-success btn-lg" href="/install_fr">Installar</a> + <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-6-release-sortie-de-yunohost-3-6/8359">YunoHost v3.6</a></small></p> + </div> + + <hr /> + + <div class="row cf"> + <div class="col-md-7"> + <h1>Installatz <small>vòstre servidor simplament, avètz ja tot çò que cal a l’ostal</small></h1> + <p><a href="/hardware_fr">Far veire los requistes</a></p> + </div> + <div class="col-md-4"> + <div class="feature-pic"> + <img src="/images/home_install.png" /> + </div> + </div> + </div> + + <hr /> + + <div class="row cf"> + <div class="col-md-4"> + <div class="feature-pic"> + <img src="/images/home_enjoy.jpg" /> + </div> + </div> + <div class="col-md-7 text-right"> + <h1>Profitatz <small>de vòstras aplicacions web e fabricatz vòstre canton d’Internet</small></h1> + <p><br /><a href="/apps_fr">Lista de las aplicacions disponiblas</a></p> + </div> + </div> + + <hr /> + + <div class="row cf"> + <div class="col-md-7"> + <h1>Gerissètz <small>vòstre servidor coma volgatz : via web, mobil o en linha de comanda</small></h1> + <p><br /><a href="/try_fr">Ensajar l’interfàcia d’administracion</a></p> + </div> + <div class="col-md-4"> + <div class="feature-pic"> + <img src="/images/home_manage.jpg" /> + </div> + </div> + </div> + + <hr /> + + <div class="row cf"> + <div class="col-md-4 button-list"> + + <a class="btn btn-lg btn-block btn-primary" href="/whatsyunohost_fr">Qu’es aquò YunoHost ?</a> + <a class="btn btn-lg btn-block btn-info" href="/docs_fr">Documentacion</a> + <a class="btn btn-lg btn-block btn-success" href="/contribute_fr">Cossí contribuir</a> + <a class="btn btn-lg btn-block btn-warning" href="https://forum.yunohost.org" target="_blank">Forum</a> + <a class="btn btn-lg btn-block btn-default" href="chat_rooms_fr" target="_blank">Salas de discussions</a> + <a class="btn btn-lg btn-block btn-danger" href="https://forum.yunohost.org/c/announcement">Darrièras novèlas</a> + <a class="btn btn-lg btn-block btn-danger btn-support" href="/help_fr">Assisténcia</a> + + </div> + <div class="col-md-7 text-right"> + <h1>Exploratz <small>las possibilitats de vòstre servidor, e aprenètz perque es important</small></h1> + <p><br /><a href="/docs_fr">Legir la documentacion</a></p> + </div> + </div> + + <hr /> + + <div class="text-center"> + <h1>Ou ! Sèm umans !<br /><small> S’avètz una question, un problèma, o que sètz simplament interessat, venètz dire « Bonjorn » dins nòstra sala de discussion en clicar lo boton aval <span class="glyphicon glyphicon-share-alt"></span> </small></h1> + +<p class="liberapay"> + <a href="https://liberapay.com/YunoHost" target="_blank"><img src="/images/liberapay_logo.svg" alt="Donation button" title="Liberapay" /></a> + </p> + + </div> + +</div><!-- boring-part --> + +<script type="text/javascript"> + jQuery('.teasing-part').css({ + marginTop: '0', + display: 'block' + }); + jQuery('.boring-part').css({ + marginTop: jQuery(window).height() + 100 + }); + jQuery( window ).resize(function() { + jQuery('.boring-part').css({ + marginTop: jQuery('.teasing-part').height() + 100 + }); + }); + jQuery('.yolo').hide(); + randomNumber = Math.floor((Math.random()*jQuery('.yolo').length)+1); + color = jQuery('.yolo.' + randomNumber).css('color'); + jQuery('.yolo.' + randomNumber).fadeIn(); + document.title = jQuery('.yolo.' + randomNumber).text(); + jQuery('.colored-bar').css({ + color: color, + fontWeight: 'bold', + padding: '1%' + }); + jQuery('.yolobtn').css({ + background: color, + borderColor: color + }).on('click', function() { + jQuery('html, body').animate({ + scrollTop: jQuery(window).height() + 80 + }, 500); + }); + +</script> + From a049013c085eaddfab664951cd9cc19f3ebac481 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Wed, 11 Sep 2019 23:14:46 +0000 Subject: [PATCH 119/360] trivial grammatical changes noticed while reading. --- packaging_apps_start.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packaging_apps_start.md b/packaging_apps_start.md index 5e69e811..6693194a 100644 --- a/packaging_apps_start.md +++ b/packaging_apps_start.md @@ -12,7 +12,7 @@ To be able to do that, we need to remember that Yunohost at its core is a server 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. +This is what application packaging is, a series 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 @@ -41,17 +41,17 @@ Scripts used during application packaging are simply a serie of bash commands. ### ... bash command? -A [bash](https://en.wikipedia.org/wiki/Bash_%28Unix_shell%29) 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. +A [bash](https://en.wikipedia.org/wiki/Bash_%28Unix_shell%29) command is a line of text that will be interpreted by the computer and will produce a result. This is commonly refered to as 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). +You can ony interact with your server through the 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. +Package scripts are therefore a series 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). +To know what you can write in a bash script, you should start reading this [simple tutorial](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. +Before starting the packaging process, you need to successfully install the application. The script will only perform what you instruct it 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. @@ -59,7 +59,7 @@ Once completed, you need to read a little bit more documentation about applicati 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). +There are 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. From 93b0729a936c12d5f7263b5768be86e8af61afa0 Mon Sep 17 00:00:00 2001 From: jeantest-git <55061244+jeantest-git@users.noreply.github.com> Date: Thu, 12 Sep 2019 08:43:20 +0200 Subject: [PATCH 120/360] ajout Logo Gogs --- images/gogs_logo.png | Bin 0 -> 8178 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/gogs_logo.png diff --git a/images/gogs_logo.png b/images/gogs_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..74ac8d4085fe44a0f435ebed62f3f9d7fb30b017 GIT binary patch literal 8178 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 Y59^5cbVck^2><{907*qoM6N<$g0e~2O8@`> literal 0 HcmV?d00001 From ac42e9a5427cf9bc8bacff89fa6b35b6962feb4b Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Fri, 13 Sep 2019 19:09:43 +0200 Subject: [PATCH 121/360] Draft of documentation for groups and permissions --- groups_and_permissions.md | 145 ++++++++++++++++++++++++++++++++++++++ users.md | 6 +- 2 files changed, 148 insertions(+), 3 deletions(-) create mode 100644 groups_and_permissions.md diff --git a/groups_and_permissions.md b/groups_and_permissions.md new file mode 100644 index 00000000..a24b5a7c --- /dev/null +++ b/groups_and_permissions.md @@ -0,0 +1,145 @@ +User groups and permissions +=========================== + +Warning : for now, these features are only available through the command line (c.f. `yunohost user group --help` and `yunohost user permission --help`) + +Managing groups +--------------- + +The group mechanism can be used to define group of users which then can be used to restrict permissions for applications and other services such as mail or xmpp. Note that it is *not* mandatory to create a group to do so : you can also restrict access to an app or service to just a specific list of user. + +Using groups is however useful for semantic, for example if you host multiple group of friends, association or enterprise on your server, you might want to create groups like `association1` and `association2` and add members of each association to the relevant group. + +### List existing groups + +To list the currently existing groups : + +```bash +$ yunohost user group list +groups: + all_users: + members: + - alice + - bob + - charlie + - delphine +``` + +By default, a special group called `all_users` exists and contain all users registered on YunoHost. This group can not be edited. + +### Creating a new group + +To create a new group called `yolo_crew` + +```bash +$ yunohost user group create yolo_crew +``` + +Let's add Charlie and Delphine to this group: + +```bash +$ yunohost user group update yolo_crew --add charlie delphine +``` + +(similarly, `--remove` can be used to remove members from a group) + +Now in the group list we should see : + +```bash +$ yunohost user group list +groups: + all_users: + members: + - alice + - bob + - charlie + - delphine + yolo_crew: + members: + - charlie + - delphine +``` + +### Deleting groups + +To delete the group `yolo_crew`, you may run + +```bash +$ yunohost user group delete yolo_crew +``` + +Managing permissions +-------------------- + +The permission mechanism allow to restrict access to services (for example mail, xmpp, ...) and apps, or even specific part of the apps (for example the administration interface of wordpress). + +### List permissions + +To list permissions and corresponding accesses: + +```bash +$ yunohost user permission list +permissions: + mail.main: + allowed: all_users + wordpress.admin: + allowed: + wordpress.main: + allowed: all_users + xmpp.main: + allowed: all_users +``` + +Here, we find that all registered users can use mails, xmpp, and access the wordpress blog. However, nobody can access the wordpress admin interface. + +More details can be displayed by adding the `--full` option which will display the list of users corresponding to groups allowed, as well as urls associated to a permission (relevant for web apps). + +### Add accesses to group or users + +To allow a group to access the wordpress admin interface: + +```bash +$ yunohost user permission update wordpress.admin --add yolo_crew +``` + +Note that you can also allow a single user: + +```bash +$ yunohost user permission update wordpress.admin --add alice +``` + +And now we may see that both the YoloCrew and Alice have access to the wordpress admin interface : + +```bash +$ yunohost user permission list + [...] + wordpress.admin: + allowed: + - yolo_crew + - john + [...] +``` + +Note that, for example, if we want to restrict permission for email so that only Bob, we should also remove `all_users` from the permission : + +```bash +$ yunohost user permission update mail --remove all_users --add bob +``` + +### Notes for apps packagers + +By default, installing an app creates the permission `$app.main` with `all_users` allowed by default. +If you want to create a custom permission for your app (e.g. to restrict access to an admin interface) you may use the following helpers: + +```bash +ynh_permission_create --permission "admin" --urls "$domain$path_url/admin" +ynh_permission_update --permission "admin" --add "$admin_user" +``` + +For now, inside the `change_url` script, you need to take care of updating the url corresponding to your permission: + +```bash +ynh_permission_urls --permission "admin" --remove "$old_domain$old_path_url/admin" --add "$domain$path_url/admin" +``` + +However, you don't need to take care of removing permissions or backing up/restoring them as it is handled by the core of YunoHost. diff --git a/users.md b/users.md index 1d7ea512..e4b979ce 100644 --- a/users.md +++ b/users.md @@ -25,10 +25,10 @@ In the portal, users can also click on the avatar in the top-left to configure s You should be aware that the SSO can only be reached through the actual domain name (i.e. `https://the.domain.tld/yunohost/sso`), and NOT by just using the IP of the server (i.e. `https://11.22.33.44/yunohost/sso`), contrarily to the webadmin ! This is a bit confusing but is necessary for technical reason. If you are in a situation where you need to access the SSO without having your DNS properly configured for some reason, you might consider tweaking your `/etc/hosts` as described in [this page](dns_local_nework). </div> -App permissions ---------------- +User groups and permissions +--------------------------- -Access to apps can be restricted to some users only. This can be configured via the webadmin in Applications > (choose an app) > Access, or similarly via the command line `yunohost app addaccess`, `removeaccess` and `clearaccess`. +See [this dedicated page](groups_and_permissions). SSH access ---------- From 79b3afdb62f823f4e0f49ba50165791ac157e7ed Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Fri, 13 Sep 2019 22:50:34 +0200 Subject: [PATCH 122/360] Small typo, need a space for the title to be rendered properly --- app_gogs_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app_gogs_fr.md b/app_gogs_fr.md index 8756e26a..4b09de7b 100644 --- a/app_gogs_fr.md +++ b/app_gogs_fr.md @@ -6,7 +6,7 @@ Gogs est une forge logiciel minimaliste utilisant git. Gogs a été conçu pour Il est donc adapté à l'auto-hébergement d'une forge git. Pour utiliser pleinement la puissance de gogs vous devez avoir appréhender ce qu'est git et l'utilisation d'un [logiciel de gestion de versions](https://fr.wikipedia.org/wiki/Logiciel_de_gestion_de_versions). -##<a name=LiensUtiles> Liens utiles</a> +## <a name=LiensUtiles>Liens utiles</a> - [Site Officiel - gogs.io](https://gogs.io) - [Dépot applications gogs pour YunoHost](https://github.com/YunoHost-Apps/gogs_ynh) - [Site officiel de l'outils git - git-scm.com](https://git-scm.com/) From f73a89c33e613cd1e3eb661b1b0a3f4ee7a2a4a7 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Wed, 18 Sep 2019 07:58:06 +0000 Subject: [PATCH 123/360] Homepage in Spanish fixed --- index_es.md | 99 ++++++++++++++++++++--------------------------------- 1 file changed, 37 insertions(+), 62 deletions(-) diff --git a/index_es.md b/index_es.md index 1b066c15..1753db2e 100644 --- a/index_es.md +++ b/index_es.md @@ -6,48 +6,46 @@ <div class="punchline"> <p> - <span class="yolo 1" style="color: #FF3399;">datalove <3</span> - <span class="yolo 2" style="color: #6699FF;">data@home</span> - <span class="yolo 3" style="color: #66FF33;">Alojar arriba, dijeron</span> - <span class="yolo 4" style="color: #00FFCC;">Host me I'm famous</span> - <span class="yolo 5" style="color: #FF5050;">sudo internet</span> - <span class="yolo 6" style="color: #FF0066;">Ellos alojamientido y tenía muchos hijos</span> - <span class="yolo 8" style="color: #FFFFFF;">Try Internet</span> - <span class="yolo 7" style="color: #3366FF;">Internet, lectura y escritura</span> - <span class="yolo 9" style="color: #CC66FF;">No tengo nada que ocultar</span> - <span class="yolo 10" style="color: #FF6600;">How I met your server</span> - <span class="yolo 11" style="color: #FF3399;">datalove <3</span> + <span class="yolo 1" style="color: #6699FF;">Okupa tu servidor</span> + <span class="yolo 2" style="color: #66FF33;">¡Yo me alojo a mi mismo!</span> + <span class="yolo 3" style="color: #00FFCC;">¡Anda y que te alojen!</span> + <span class="yolo 4" style="color: #FF5050;">Fuera de mi nube</span> + <span class="yolo 5" style="color: #FF0066;">Alójame, soy famoso</span> + <span class="yolo 6" style="color: #3366FF;">Prueba Internet</span> + <span class="yolo 7" style="color: #FFFFFF;">Su fiel servidor</span> + <span class="yolo 8" style="color: #FF6600;">yo@mismo.parami</span> + <span class="yolo 9" style="color: #FF5050;">Tío ¡¿X K NO alojas?!</span> + <span class="yolo 10" style="color: #66FF33;">Tranqui y alójate</span> </p> - <button class="btn btn-primary btn-lg btn-block yolobtn">Perdón ?</button> + <button class="btn btn-primary btn-lg btn-block yolobtn">¿Qué?</button> </div> <div class="main-links hidden-xs"> - <a href="/whatsyunohost">About</a> <span class="colored-bar">•</span> - <a href="https://forum.yunohost.org/c/announcement" target="_blank">últimas noticias</a> <span class="colored-bar">•</span> - <a href="/docs">Documentation</a> + <a href="/whatsyunohost">Acerca de</a> <span class="colored-bar">•</span> + <a href="https://forum.yunohost.org/c/announcement" target="_blank">Últimas noticias</a> <span class="colored-bar">•</span> + <a href="/docs">Documentación</a> </div> </div><!-- teasing-part --> <div class="boring-part" markdown="1"> - <h1>YunoHost <small>es una herramienta que permite instalar y utilizar fácilmente su propio servidor.</small></h1> - + <h1>YunoHost <small>es un sistema operativo de servidor que pretende hacer accesible el autoalojamiento para todo el mundo.</small></h1> <div class="home-panel"> <img src="/images/home_panel.jpg" /> </div> <div class="call-to-action"> - <!-- <a class="btn btn-primary btn-lg" href="/try">Try it</a> --> - <a class="btn btn-success btn-lg" href="/install">Get started</a> + <a class="btn btn-primary btn-lg" href="/try">Probar</a> + <a class="btn btn-success btn-lg" href="/install">Instalar</a> <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-6-release-sortie-de-yunohost-3-6/8359">YunoHost v3.6</a></small></p> </div> <div class="row cf"> <div class="col-md-7"> - <h1>Installar <small>su servidor simplemente, tienes todo en casa</small></h1> - <p><br /><a href="/hardware">Ver los prerrequisitos</a></p> + <h1>Instale <small>su servidor fácilmente, ya tiene todo en su casa</small></h1> + <p><br /><a href="/hardware">Vea los requisitos</a></p> </div> <div class="col-md-4"> <div class="feature-pic"> @@ -65,8 +63,8 @@ </div> </div> <div class="col-md-7 text-right"> - <h1>Disfrutar <small>de sus aplicaciones web, y crea tu esquina de Internet</small></h1> - <p><br /><a href="/apps_es">Lista de aplicaciones disponible</a></p> + <h1>Disfrute <small>sus aplicaciones y construya su rinconcito de Internet</small></h1> + <p><br /><a href="/apps">Lista de aplicaciones disponibles</a></p> </div> </div> @@ -74,8 +72,8 @@ <div class="row cf"> <div class="col-md-7"> - <h1>Gestionar <small>tu servidor como quieras : vía web, móvil o en línea de comandos</small></h1> - <p><br /><a href="/try_es">Intentar la interfaz de administración</a></p> + <h1>Gestione <small>su servidor como le guste: vía web, móvil o línea de órdenes</small></h1> + <p><br /><a href="/try">Pruebe la administración</a></p> </div> <div class="col-md-4"> <div class="feature-pic"> @@ -88,26 +86,28 @@ <div class="row cf"> <div class="col-md-4 button-list"> - <a class="btn btn-lg btn-block btn-primary" href="/userdoc_es">Guía del usuario</a> - <a class="btn btn-lg btn-block btn-info" href="https://ask.yunohost.org" target="_blank">Preguntas más frecuentes</a> - <a class="btn btn-lg btn-block btn-success" href="/whatsyunohost_es">¿ Que es YunoHost ?</a> - <a class="btn btn-lg btn-block btn-warning" href="/contribute_es">Cómo contribuir</a> - <a class="btn btn-lg btn-block btn-danger btn-support" href="http://news.yunohost.org">últimas noticias</a> + <a class="btn btn-lg btn-block btn-primary" href="/whatsyunohost">Acerca de YunoHost</a> + <a class="btn btn-lg btn-block btn-info" href="/docs">Documentación</a> + <a class="btn btn-lg btn-block btn-success" href="/contribute">Colaborar</a> + <a class="btn btn-lg btn-block btn-warning" href="https://forum.yunohost.org/" target="_blank">Foro</a> + <a class="btn btn-lg btn-block btn-default" href="chat_rooms_en" target="_blank">Salas de chat</a> + <a class="btn btn-lg btn-block btn-danger" href="https://forum.yunohost.org/c/announcement">Últimas noticias</a> + <a class="btn btn-lg btn-block btn-danger btn-support" href="/help_fr">Ayuda</a> </div> <div class="col-md-7 text-right"> - <h1>Explorar <small>las posibilidad de su servidor, y aprender porque es importante</small></h1> - <p><br /><a href="/docs_es">Leer la documentación</a></p> + <h1>Explore <small>lo que puede hacer con un servidor y la razón de su importancia</small></h1> + <p><br /><a href="/docs">Lea la documentación</a></p> </div> </div> <hr /> <div class="text-center"> - <h1>¡ Hey ! Somos humanos<br /><small> Si tiene alguna pregunta, un problema, o simplemente estás interesado, ven decir "¡ Hola !" sobre nuestro salón de discusión clic en el botón abajo <span class="glyphicon glyphicon-share-alt"></span> </small></h1> + <h1>¡Oye! ¡Somos humanos!<br /><small> Si tiene alguna pregunta, problema o es simplemente un fan, deje un mensaje en nuestra sala de chat pulsando en el botón inferior <span class="glyphicon glyphicon-share-alt"></span> </small></h1> - <p class="liberapay"> - <a href="https://liberapay.com/YunoHost" target="_blank"><img src="/images/liberapay_logo.svg" alt="Donation button" title="Liberapay" /></a> - </p> + <p class="liberapay"> + <a href="https://liberapay.com/YunoHost" target="_blank"><img src="/images/liberapay_logo.svg" alt="Botón de donación" title="Liberapay" /></a> + </p> </div> @@ -144,30 +144,5 @@ scrollTop: jQuery(window).height() + 80 }, 500); }); - $(".actions").css('opacity', 0); - jQuery.ajaxSetup({cache: false}); - jQuery.getScript('https://'+ location.host +'/mini/javascripts/mini.js', function() { - HOST_BOSH = 'https://'+ location.host +'/http-bind/'; - JappixMini.launch({ - connection: { - domain: 'anonymous.yunohost.org' - }, - application: { - network: { - autoconnect: false - }, - - interface: { - showpane: true, - animate: true - }, - - groupchat: { - open: ['support@conference.yunohost.org'], - suggest: ['dev@conference.yunohost.org'] - } - } - }); - }); -</script> +</script> From 63f63cd38f6f7c509f2e14191a4271a4fdae5102 Mon Sep 17 00:00:00 2001 From: Ashwin Vishnu <9155111+ashwinvis@users.noreply.github.com> Date: Wed, 18 Sep 2019 19:44:01 +0200 Subject: [PATCH 124/360] Mention Nitter on wishlist - Repo: https://github.com/zedeus/nitter - Demo: https://nitter.net/ --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index 214478a8..a947eb62 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -119,6 +119,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Museek+](https://github.com/eLvErDe/museek-plus) - [Netrunner](https://github.com/mtgred/netrunner) - [Nibbleblog](http://www.nibbleblog.com) +- [Nitter](https://github.com/zedeus/nitter) (Twitter front-end focused on privacy) - [Nuage](https://nuage.kerjean.me/login) - [Ombi](https://github.com/tidusjar/Ombi) - [OpenBazaar](https://openbazaar.org) From fe6b14b01cef5f3557de2014394aaebbc8a0e5e2 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 23 Sep 2019 13:53:59 +0000 Subject: [PATCH 125/360] Use -a flag when copying data dir, so we can preserve modification time, ownership... --- app_nextcloud_fr.md | 27 ++------------------------- 1 file changed, 2 insertions(+), 25 deletions(-) diff --git a/app_nextcloud_fr.md b/app_nextcloud_fr.md index 31aaf3a5..d61b1bb8 100644 --- a/app_nextcloud_fr.md +++ b/app_nextcloud_fr.md @@ -50,8 +50,8 @@ chmod 775 -R /media/stockage/nextcloud_data Migrez vos données vers le nouveau disque. Pour ce faire *(soyez patient, cela peut être long)* : ```bash -Cas A : cp -ir /home/yunohost.app/nextcloud /media/stockage -Cas B : cp -ir /home/yunohost.app/nextcloud /media/stockage/nextcloud_data +Cas A : cp -ia /home/yunohost.app/nextcloud /media/stockage +Cas B : cp -ia /home/yunohost.app/nextcloud /media/stockage/nextcloud_data ``` L'option `i` permet de vous demander quoi faire en cas de conflit de fichier, notamment si vous écrasez un ancien dossier de données Owncloud ou Nextcloud. @@ -141,26 +141,3 @@ Puis ajouter dans ce fichier le texte suivent : Enregistrer le fichier (**CTRL** + **o**) et quitter nano (**CTRL** + **c**). A présent, le problème est corrigé. - -# Nextcloud et Cloudflare - -Si vous utilisez Cloudflare pour vos DNS, *ce qui peut-être pratique si vous avez une IP dynamique*, vous aurez très probablement des problèmes d'authentification avec l'application Nextcloud. Sur Internet beaucoup de gens propose de créer une règle ayant pour effet de désactivé tous les options relié à la sécurité et à la vitesse de Cloudflare pour l'url pointant sur votre instance Nextcloud. Malgré que cela fonctionne, ce n'est pas la solution optimial. Je vous propose, certes de créé une règle pour l'url pointant sur votre instance Nextcloud mais de désactivé seulement 2 options. Voici donc comment: - -## Cloudflare Page Rules - -Dans le panneau de controle de Cloudflare choisissez votre domaine et trouver Page Rules -l'url dans votre barre d'addresse ressemblera à : https://dash.cloudflare.com/*/domain.tld/page-rules - -### Ajouter une règle - -La règle à ajouter doit s'appliquer pour l'url de votre instance Nextcloud soit: - -- `https://nextcloud.domain.tld/*` si vous utilisez un sous domain -- `https://domain.tld/nextcloud/*` si vous avez déployé Nextcloud dans un répertoire - -Les options à désactiver (Off) sont : - -- Rocket Loader -- Email Obfuscation - -Sauvegarder et nettoyer vos caches (Cloudflare, navigateur, ...) et le tour est joué. \ No newline at end of file From 44593334a5a335bea1e9f86306b326a85655634e Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 23 Sep 2019 13:54:26 +0000 Subject: [PATCH 126/360] added Samourai Dojo Bitcoin Coinjoin Node --- apps_wishlist.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index a947eb62..fc5a8e0d 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -15,7 +15,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Ajenti](http://ajenti.org) - [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. - [aMule](https://github.com/amule-project/amule) -- [Anki](https://github.com/tsudoko/anki-sync-server) - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) - [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) - [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) @@ -53,7 +52,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [FEX](http://fex.rus.uni-stuttgart.de/) - [FileTea](https://filetea.me) - [FitTrackee](https://github.com/SamR1/FitTrackee) -- [FlatPress](https://github.com/flatpressblog/flatpress) - [FoOlSlide](http://foolcode.github.io/FoOlSlide/) Open source comicbook/manga management software - [Fossil](http://www.fossil-scm.org) - [Framaslides](https://framagit.org/framasoft/framaslides/) @@ -115,11 +113,9 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Modoboa](http://modoboa.org) - [MotionEye](https://github.com/ccrisan/motioneye) - [MPD](http://www.musicpd.org) -- [MyBB](https://mybb.com/) - [Museek+](https://github.com/eLvErDe/museek-plus) - [Netrunner](https://github.com/mtgred/netrunner) - [Nibbleblog](http://www.nibbleblog.com) -- [Nitter](https://github.com/zedeus/nitter) (Twitter front-end focused on privacy) - [Nuage](https://nuage.kerjean.me/login) - [Ombi](https://github.com/tidusjar/Ombi) - [OpenBazaar](https://openbazaar.org) @@ -156,6 +152,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Restya](http://restya.com) - [Retroshare](http://retroshare.net/downloads.html) - [SABnzbd](https://sabnzbd.org) +- [Samourai Dojo, Bitcoin coinjoin node] (https://github.com/Samourai-Wallet/samourai-dojo) - [ScenariChain-server](https://download.scenari.software/SCENARIchain-server/) - [Scramble, Browser-based PGP web mail](https://github.com/dcposch/scramble) - [Scribbleton](https://scribbleton.com) From 7cae46d46876598667a5ea68ce071856583b8815 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 23 Sep 2019 13:54:36 +0000 Subject: [PATCH 127/360] fixed typo (doesn't/don't) --- user_interface.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user_interface.md b/user_interface.md index 1980f8d8..ded37e11 100644 --- a/user_interface.md +++ b/user_interface.md @@ -16,7 +16,7 @@ You can create a redirection of a domain name to IP address of your server by mo your.server.ip.address domain.tld ``` -By replacing `your.server.ip.address` for instance by `192.168.1.05` and `domain.tld` by your domain name or by one you can choose if you doesn’t own one. +By replacing `your.server.ip.address` for instance by `192.168.1.05` and `domain.tld` by your domain name or by one you can choose if you don’t own one. ### Software From c600a5dc705b7dcc5aece8f104d5bac2d59ca61e Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Mon, 23 Sep 2019 16:06:51 +0200 Subject: [PATCH 128/360] Fix simone's mess --- app_nextcloud_fr.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/app_nextcloud_fr.md b/app_nextcloud_fr.md index d61b1bb8..b7a998d5 100644 --- a/app_nextcloud_fr.md +++ b/app_nextcloud_fr.md @@ -141,3 +141,20 @@ Puis ajouter dans ce fichier le texte suivent : Enregistrer le fichier (**CTRL** + **o**) et quitter nano (**CTRL** + **c**). A présent, le problème est corrigé. + +# Nextcloud et Cloudflare + +Si vous utilisez Cloudflare pour vos DNS, *ce qui peut-être pratique si vous avez une IP dynamique*, vous aurez très probablement des problèmes d'authentification avec l'application Nextcloud. Sur Internet beaucoup de gens propose de créer une règle ayant pour effet de désactivé tous les options relié à la sécurité et à la vitesse de Cloudflare pour l'url pointant sur votre instance Nextcloud. Malgré que cela fonctionne, ce n'est pas la solution optimial. Je vous propose, certes de créé une règle pour l'url pointant sur votre instance Nextcloud mais de désactivé seulement 2 options. Voici donc comment: + +## Cloudflare Page Rules + +Dans le panneau de controle de Cloudflare choisissez votre domaine et trouver Page Rules +l'url dans votre barre d'addresse ressemblera à : https://dash.cloudflare.com/*/domain.tld/page-rules +### Ajouter une règle +La règle à ajouter doit s'appliquer pour l'url de votre instance Nextcloud soit: +- `https://nextcloud.domain.tld/*` si vous utilisez un sous domain +- `https://domain.tld/nextcloud/*` si vous avez déployé Nextcloud dans un répertoire +Les options à désactiver (Off) sont : +- Rocket Loader +- Email Obfuscation +Sauvegarder et nettoyer vos caches (Cloudflare, navigateur, ...) et le tour est joué. From 2339000b3d11197b2edcb310e51df5fa39009468 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Mon, 23 Sep 2019 16:07:41 +0200 Subject: [PATCH 129/360] Propagate changes on english version --- app_nextcloud.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app_nextcloud.md b/app_nextcloud.md index dca14eb6..2d9b04ae 100644 --- a/app_nextcloud.md +++ b/app_nextcloud.md @@ -50,8 +50,8 @@ chmod 775 -R /media/storage/nextcloud_data Migrate your data to the new disk. To do this *(be patient, it can take a long time)*: ```bash -Case A: cp -ir /home/yunohost.app/nextcloud /media/storage -Case B: cp -ir /home/yunohost.app/nextcloud /media/storage/nextcloud_data +Case A: cp -ia /home/yunohost.app/nextcloud /media/storage +Case B: cp -ia /home/yunohost.app/nextcloud /media/storage/nextcloud_data ``` The `i` option allows you to ask yourself what to do if there is a file conflict, especially if you overwrite an old Owncloud or Nextcloud data folder. @@ -163,4 +163,4 @@ The options to disable (Off) are: - Rocket Loader - Email Obfuscation -Save and clean your caches (Cloudflare, browser,...) and that's it. \ No newline at end of file +Save and clean your caches (Cloudflare, browser,...) and that's it. From 9941d2b4c5a0fb503240c57aecfcf74e683854dd Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Mon, 23 Sep 2019 16:20:34 +0200 Subject: [PATCH 130/360] Remove userdoc page for now ... It's too empty and the few pages listed are not directed toward end-users... --- docs.md | 9 ++------- docs_ar.md | 7 +------ docs_de.md | 9 ++------- docs_fr.md | 9 ++------- docs_it.md | 9 ++------- index_es.md | 3 --- user_interface.md | 23 ----------------------- user_interface_fr.md | 23 ----------------------- userdoc.md | 7 ------- userdoc_ar.md | 7 ------- userdoc_fr.md | 7 ------- 11 files changed, 9 insertions(+), 104 deletions(-) delete mode 100644 user_interface.md delete mode 100644 user_interface_fr.md delete mode 100644 userdoc.md delete mode 100644 userdoc_ar.md delete mode 100644 userdoc_fr.md diff --git a/docs.md b/docs.md index b11d3779..9518991a 100644 --- a/docs.md +++ b/docs.md @@ -1,22 +1,17 @@ #Documentation <p class="lead"> -YunoHost's documentation has 3 different sections: +YunoHost's documentation has 2 different sections: </p> <div class="row text-center"> -<div class="col col-md-4 col-md-offset-1"> -<a class="btn btn-success btn-lg" href="/userdoc"><span class="glyphicon glyphicon-user"></span> User guide</a> -<p><small class="text-muted">Regarding the daily usage of your server and some client configuration "HOW-TOs"</small></p> -</div> - <div class="col col-md-4 col-md-offset-1"> <a class="btn btn-primary btn-lg" href="/admindoc"><span class="glyphicon glyphicon-lock"></span> Administrator guide</a> <p><small class="text-muted">Including installation, server management and application management</small></p> </div> -<div class="col col-md-5 col-md-offset-3"> +<div class="col col-md-4 col-md-offset-1"> <a class="btn btn-danger btn-lg" href="/contributordoc"><span class="glyphicon glyphicon-heart"></span> Contributor guide</a> <p><small class="text-muted">Which contains everything you have to know about us and the way we work</small></p> </div> diff --git a/docs_ar.md b/docs_ar.md index df44211b..59be5db6 100644 --- a/docs_ar.md +++ b/docs_ar.md @@ -6,17 +6,12 @@ <div class="row text-center"> -<div dir="rtl" class="col col-md-4 col-md-offset-1"> -<a class="btn btn-success btn-lg" href="/userdoc_fr"><span class="glyphicon glyphicon-user"></span> دليل المستخدم</a> -<p><small class="text-muted">كل ما يخص طريقة استخدام السيرفر يوميًا</small></p> -</div> - <div dir="rtl" class="col col-md-4 col-md-offset-1"> <a class="btn btn-primary btn-lg" href="/admindoc_fr"><span class="glyphicon glyphicon-lock"></span> دليل المدير</a> <p><small class="text-muted">يتطرق إلى طريقة التنصيب و إدارة السيرفر و التطبيقات</small></p> </div> -<div dir="rtl" class="col col-md-5 col-md-offset-3"> +<div dir="rtl" class="col col-md-4 col-md-offset-1"> <a class="btn btn-danger btn-lg" href="/contributordoc"><span class="glyphicon glyphicon-heart"></span> دليل المساهم</a> <p><small class="text-muted">يحتوي على كافة المعلومات التي تخصنا و أسلوب عملنا و مساهمتنا</small></p> </div> diff --git a/docs_de.md b/docs_de.md index 470c9945..e3a73f0d 100644 --- a/docs_de.md +++ b/docs_de.md @@ -1,22 +1,17 @@ #Documentation <p class="lead"> -Die YunoHost Dokumentation ist in 3 Bereiche aufgeteilt: +Die YunoHost Dokumentation ist in 2 Bereiche aufgeteilt: </p> <div class="row text-center"> -<div class="col col-md-4 col-md-offset-1"> -<a class="btn btn-success btn-lg" href="/userdoc"><span class="glyphicon glyphicon-user"></span> Benutzerhandbuch</a> -<p><small class="text-muted">Über die tägliche Nutzung des Servers und Anleitungen zur Konfiguration des Clients.</small></p> -</div> - <div class="col col-md-4 col-md-offset-1"> <a class="btn btn-primary btn-lg" href="/admindoc"><span class="glyphicon glyphicon-lock"></span> Handbuch für Administratoren</a> <p><small class="text-muted">Befasst sich mit den Installationsschritten und der Verwaltung von Server und Apps.</small></p> </div> -<div class="col col-md-5 col-md-offset-3"> +<div class="col col-md-4 col-md-offset-1"> <a class="btn btn-danger btn-lg" href="/contributordoc"><span class="glyphicon glyphicon-heart"></span> Handbuch für Mitwirkende</a> <p><small class="text-muted">Alles, was du über uns und unsere Art zu arbeiten wissen musst.</small></p> </div> diff --git a/docs_fr.md b/docs_fr.md index 18864ed5..7469efce 100644 --- a/docs_fr.md +++ b/docs_fr.md @@ -1,22 +1,17 @@ #Documentation <p class="lead"> -La documentation de YunoHost s’articule autour de trois sections : +La documentation de YunoHost s’articule autour de deux sections : </p> <div class="row text-center"> -<div class="col col-md-4 col-md-offset-1"> -<a class="btn btn-success btn-lg" href="/userdoc_fr"><span class="glyphicon glyphicon-user"></span> Guide de l’utilisateur</a> -<p><small class="text-muted">Concernant l’usage du serveur au quotidien</small></p> -</div> - <div class="col col-md-4 col-md-offset-1"> <a class="btn btn-primary btn-lg" href="/admindoc_fr"><span class="glyphicon glyphicon-lock"></span> Guide de l’administrateur</a> <p><small class="text-muted">Incluant l’installation, la gestion du serveur et des applications</small></p> </div> -<div class="col col-md-5 col-md-offset-3"> +<div class="col col-md-4 col-md-offset-1"> <a class="btn btn-danger btn-lg" href="/contributordoc_fr"><span class="glyphicon glyphicon-heart"></span> Guide du contributeur</a> <p><small class="text-muted">Qui contient tout ce que vous devez savoir à propos de nous et de notre manière de travailler</small></p> </div> diff --git a/docs_it.md b/docs_it.md index 85afd4ba..f7cdcd9a 100644 --- a/docs_it.md +++ b/docs_it.md @@ -1,22 +1,17 @@ #Documentazione <p class="lead"> -La documentazione di YunoHost ha 3 differenti sezioni: +La documentazione di YunoHost ha 2 differenti sezioni: </p> <div class="row text-center"> -<div class="col col-md-4 col-md-offset-1"> -<a class="btn btn-success btn-lg" href="/userdoc"><span class="glyphicon glyphicon-user"></span> Guida utente</a> -<p><small class="text-muted">Sull'utilizzo giornaliero del tuo server e con alcune configurazioni per client "HOW-TOs"</small></p> -</div> - <div class="col col-md-4 col-md-offset-1"> <a class="btn btn-primary btn-lg" href="/admindoc"><span class="glyphicon glyphicon-lock"></span> Guida di amministrazione</a> <p><small class="text-muted">Include l'installazione, la gestione del server e delle applicazioni</small></p> </div> -<div class="col col-md-5 col-md-offset-3"> +<div class="col col-md-4 col-md-offset-1"> <a class="btn btn-danger btn-lg" href="/contributordoc"><span class="glyphicon glyphicon-heart"></span> Guida del contributore</a> <p><small class="text-muted">Contiene tutto quello che devi sapere su di noi e su come lavoriamo</small></p> </div> diff --git a/index_es.md b/index_es.md index 1b066c15..bc2f2b50 100644 --- a/index_es.md +++ b/index_es.md @@ -88,11 +88,8 @@ <div class="row cf"> <div class="col-md-4 button-list"> - <a class="btn btn-lg btn-block btn-primary" href="/userdoc_es">Guía del usuario</a> - <a class="btn btn-lg btn-block btn-info" href="https://ask.yunohost.org" target="_blank">Preguntas más frecuentes</a> <a class="btn btn-lg btn-block btn-success" href="/whatsyunohost_es">¿ Que es YunoHost ?</a> <a class="btn btn-lg btn-block btn-warning" href="/contribute_es">Cómo contribuir</a> - <a class="btn btn-lg btn-block btn-danger btn-support" href="http://news.yunohost.org">últimas noticias</a> </div> <div class="col-md-7 text-right"> <h1>Explorar <small>las posibilidad de su servidor, y aprender porque es importante</small></h1> diff --git a/user_interface.md b/user_interface.md deleted file mode 100644 index 1980f8d8..00000000 --- a/user_interface.md +++ /dev/null @@ -1,23 +0,0 @@ -# User interface - -The user interface is a portal that allows the loged-in user to see all the applications he is allowed to use, and -access them. This interface is also where the user can set his parameters (change password, define email alias and -redirections). - -<img src="/images/home_panel.jpg" width=800> - -### Access problem - -Access to user interface can only be done by using a domain name. You can’t access to it by using the local IP address of your server like that: https://your.server.ip.address/yunohost/sso/ - -You can create a redirection of a domain name to IP address of your server by modifing `/etc/hosts` and by adding that line: - -```bash -your.server.ip.address domain.tld -``` - -By replacing `your.server.ip.address` for instance by `192.168.1.05` and `domain.tld` by your domain name or by one you can choose if you doesn’t own one. - -### Software - -User interface is based on that software: https://github.com/Kloadut/ssowat diff --git a/user_interface_fr.md b/user_interface_fr.md deleted file mode 100644 index e1f9ab84..00000000 --- a/user_interface_fr.md +++ /dev/null @@ -1,23 +0,0 @@ -# Interface utilisateur - -L'interface utilisateur est un portail permettant à un utilisateur connecté de voir toutes les applications qu'il peut -utiliser, et d'y accéder. Cette interface permet aussi à l'utilisateur de gérer ses paramètres (changer de mot de passe, -définir ses alias et redirections courriel). - -<img src="/images/home_panel.jpg" width=800> - -### 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 suit : https://adresse.ip.du.server/yunohost/sso - -Cependant, sur votre ordinateur, vous pouvez créer une redirection d’un nom de domaine vers l’adresse IP du serveur en modifiant le fichier `/etc/hosts` et en ajoutant cette ligne : - -```bash -adresse.ip.du.server domaine.tld -``` - -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](/dns) si vous n’en avez pas. /!\ Cela ne fonctionne que localement /!\ - -### Logiciel - -L’interface utilisateur est basé sur le logiciel suivant : https://github.com/Kloadut/ssowat diff --git a/userdoc.md b/userdoc.md deleted file mode 100644 index 06e3826b..00000000 --- a/userdoc.md +++ /dev/null @@ -1,7 +0,0 @@ -# User documentation - -* [What is YunoHost](/whatsyunohost) -* [User interface](user_interface) -* [Configure an email client](/email) -* [Instant messaging usage](/XMPP) -* [Applications](/apps) diff --git a/userdoc_ar.md b/userdoc_ar.md deleted file mode 100644 index 4eac43e3..00000000 --- a/userdoc_ar.md +++ /dev/null @@ -1,7 +0,0 @@ -<div dir="RTL" align="right" style="direction:rtl;text-align:right;"> -# دليل مستخدمي واي يونوهوست 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 deleted file mode 100644 index 265bcc97..00000000 --- a/userdoc_fr.md +++ /dev/null @@ -1,7 +0,0 @@ -# Documentation pour les utilisateurs YunoHost - -* [Qu'est-ce que YunoHost](/whatsyunohost_fr) -* [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](/apps_fr) From aaa17118507fdef36ec80db0953443cdffb31e00 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 23 Sep 2019 14:25:34 +0000 Subject: [PATCH 131/360] =?UTF-8?q?Correction=20d'une=20faute=20:=20de?= =?UTF-8?q?=20->=20ne=20=20et=20j'ai=20enlev=C3=A9=20le=20s=20a=20la?= =?UTF-8?q?=20fin=20de=20correspond,=20sinon=20c'est=20une=20faute=20d?= =?UTF-8?q?e=20grammaire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- images_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/images_fr.md b/images_fr.md index 4b03c4f9..97b8cf2e 100644 --- a/images_fr.md +++ b/images_fr.md @@ -6,7 +6,7 @@ Cette page requiert que Javascript soit activé pour s'afficher correctement :s. <br/> </span> -N.B. : Même si l'image de corresponds pas à la dernière version de YunoHost, vous pouvez tout de même l'utiliser puis faire une mise à jour du système après l'installation ! +N.B. : Même si l'image ne correspond pas à la dernière version de YunoHost, vous pouvez tout de même l'utiliser puis faire une mise à jour du système après l'installation ! <div id="cards-list"> </div> From 5163e917669561a82e854df816ecb66c8c172d25 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 23 Sep 2019 14:28:29 +0000 Subject: [PATCH 132/360] added ProjeQtOr --- apps_wishlist.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index a947eb62..cd39f12b 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -15,7 +15,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Ajenti](http://ajenti.org) - [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. - [aMule](https://github.com/amule-project/amule) -- [Anki](https://github.com/tsudoko/anki-sync-server) - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) - [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) - [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) @@ -53,7 +52,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [FEX](http://fex.rus.uni-stuttgart.de/) - [FileTea](https://filetea.me) - [FitTrackee](https://github.com/SamR1/FitTrackee) -- [FlatPress](https://github.com/flatpressblog/flatpress) - [FoOlSlide](http://foolcode.github.io/FoOlSlide/) Open source comicbook/manga management software - [Fossil](http://www.fossil-scm.org) - [Framaslides](https://framagit.org/framasoft/framaslides/) @@ -115,11 +113,9 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Modoboa](http://modoboa.org) - [MotionEye](https://github.com/ccrisan/motioneye) - [MPD](http://www.musicpd.org) -- [MyBB](https://mybb.com/) - [Museek+](https://github.com/eLvErDe/museek-plus) - [Netrunner](https://github.com/mtgred/netrunner) - [Nibbleblog](http://www.nibbleblog.com) -- [Nitter](https://github.com/zedeus/nitter) (Twitter front-end focused on privacy) - [Nuage](https://nuage.kerjean.me/login) - [Ombi](https://github.com/tidusjar/Ombi) - [OpenBazaar](https://openbazaar.org) @@ -143,6 +139,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Privoxy](http://www.privoxy.org) - [ProcessMaker](http://www.processmaker.com) - [ProtonMail’s WebClient](https://github.com/ProtonMail/WebClient) +- [ProjeQtOr](https://www.projeqtor.org/en/product-en/downloads) - [PyLoad](https://github.com/pyload/pyload) - [Pulse](https://source.ind.ie/project/pulse-swift/tree/master) - [Pump.io](http://pump.io) From 014a5e276381455cb4bc77ab55316452503f592a Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 23 Sep 2019 14:30:56 +0000 Subject: [PATCH 133/360] Added SpamGourmet to the list. SpamGourmet is an e-mail redirection / disposable e-mail service. --- apps_wishlist.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index a947eb62..bb49d2d9 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -15,7 +15,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Ajenti](http://ajenti.org) - [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. - [aMule](https://github.com/amule-project/amule) -- [Anki](https://github.com/tsudoko/anki-sync-server) - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) - [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) - [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) @@ -53,7 +52,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [FEX](http://fex.rus.uni-stuttgart.de/) - [FileTea](https://filetea.me) - [FitTrackee](https://github.com/SamR1/FitTrackee) -- [FlatPress](https://github.com/flatpressblog/flatpress) - [FoOlSlide](http://foolcode.github.io/FoOlSlide/) Open source comicbook/manga management software - [Fossil](http://www.fossil-scm.org) - [Framaslides](https://framagit.org/framasoft/framaslides/) @@ -115,11 +113,9 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Modoboa](http://modoboa.org) - [MotionEye](https://github.com/ccrisan/motioneye) - [MPD](http://www.musicpd.org) -- [MyBB](https://mybb.com/) - [Museek+](https://github.com/eLvErDe/museek-plus) - [Netrunner](https://github.com/mtgred/netrunner) - [Nibbleblog](http://www.nibbleblog.com) -- [Nitter](https://github.com/zedeus/nitter) (Twitter front-end focused on privacy) - [Nuage](https://nuage.kerjean.me/login) - [Ombi](https://github.com/tidusjar/Ombi) - [OpenBazaar](https://openbazaar.org) @@ -165,6 +161,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Simone](https://github.com/Kloadut/Simone) - [SocialHome](https://github.com/jaywink/socialhome) (Socialhome is best described as a federated personal profile with social networking functionality) (https://socialhome.network) - [Sonarr](https://sonarr.tv) +- [SpamGourmet](https://sourceforge.net/projects/spamgourmet/) - [Stackedit](https://stackedit.io) - [StandardNotes](https://standardnotes.org) (a clean, simple, E2E-encrypted notes app) -- specifically, the server-side [StandardFile](https://standardfile.org) portion. - [Streama](https://github.com/dularion/streama) From 267abde888c316ac47795513b381da4e67210bf4 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 23 Sep 2019 14:32:25 +0000 Subject: [PATCH 134/360] Sous debian 10 pas de paquet ni de repo dispo. Installation via fichier deb --- packaging_apps_virtualbox_fr.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging_apps_virtualbox_fr.md b/packaging_apps_virtualbox_fr.md index aa07285e..68493565 100644 --- a/packaging_apps_virtualbox_fr.md +++ b/packaging_apps_virtualbox_fr.md @@ -6,7 +6,7 @@ Cette page de documentation va vous expliquer comment mettre en place un serveur Il y a principalement deux raisons pour préférer l'usage d'un serveur virtuel plutôt que votre propre serveur : -- Vous pouvez torturer à loisir un serveur virtuel sans courir le risque de le casser, puisque vous pourrez toujours restaurer un état précédent. Alors qu'il serait dommage de casser son propre serveur ! +- Vous pouvez torturez à loisir un serveur virtuel sans courir le risque de le casser, puisque vous pourrez toujours restaurer un état précédent. Alors qu'il serait dommage de casser son propre serveur ! - Un serveur virtuel sera restauré avant de travailler dessus, pour garder en permanence un système sans résidus d'une précédente installation. Cela permet de se rapprocher au plus près d'une première installation par un utilisateur. Nous parlerons ici de VirtualBox, pour son approche graphique facile à utiliser. Si vous préférez une interface en ligne de commande pour la gestion de la machine virtuelle, tournez-vous de préférence vers [ynh-dev](/dev_fr). @@ -14,7 +14,7 @@ Nous parlerons ici de VirtualBox, pour son approche graphique facile à utiliser ## Installer VirtualBox Depuis un système GNU Linux, installer simplement le paquet `virtualbox-qt`. -Depuis un système Windows ou macOS, il faudra se référer à la page de [téléchargement de VirtualBox](https://www.virtualbox.org/wiki/Downloads) pour récupérer le fichier d'installation adéquat. +Depuis un système Windows ou macOS, il faudra se référer à la page de [téléchargement de VirtualBox](https://www.virtualbox.org/wiki/Downloads) pour récupérer le fichier d'installation adéquat. Le paquet virtualbox est déprécié depuis debian 9, un fichier d'installation .deb est disponible sur la même page. Quel que soit votre système, il ne devrait pas être nécessaire d'installer l'extension pack ou les additions invités. From 44cdcef88e03ce811c8dc5239c88afd9445b8252 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Mon, 23 Sep 2019 16:33:10 +0200 Subject: [PATCH 135/360] Fix simone's mess --- packaging_apps_virtualbox_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging_apps_virtualbox_fr.md b/packaging_apps_virtualbox_fr.md index 68493565..1aadff27 100644 --- a/packaging_apps_virtualbox_fr.md +++ b/packaging_apps_virtualbox_fr.md @@ -6,7 +6,7 @@ Cette page de documentation va vous expliquer comment mettre en place un serveur Il y a principalement deux raisons pour préférer l'usage d'un serveur virtuel plutôt que votre propre serveur : -- Vous pouvez torturez à loisir un serveur virtuel sans courir le risque de le casser, puisque vous pourrez toujours restaurer un état précédent. Alors qu'il serait dommage de casser son propre serveur ! +- Vous pouvez torturer à loisir un serveur virtuel sans courir le risque de le casser, puisque vous pourrez toujours restaurer un état précédent. Alors qu'il serait dommage de casser son propre serveur ! - Un serveur virtuel sera restauré avant de travailler dessus, pour garder en permanence un système sans résidus d'une précédente installation. Cela permet de se rapprocher au plus près d'une première installation par un utilisateur. Nous parlerons ici de VirtualBox, pour son approche graphique facile à utiliser. Si vous préférez une interface en ligne de commande pour la gestion de la machine virtuelle, tournez-vous de préférence vers [ynh-dev](/dev_fr). From b2cb0d08a4aa87763c560bef16576fbc6e1bfa1f Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 23 Sep 2019 14:33:35 +0000 Subject: [PATCH 136/360] Anki is a powerful Open Source flashcard application --- apps_wishlist.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index a947eb62..91f46bb3 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -15,7 +15,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Ajenti](http://ajenti.org) - [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. - [aMule](https://github.com/amule-project/amule) -- [Anki](https://github.com/tsudoko/anki-sync-server) +- [Anki](https://apps.ankiweb.net/index.html) is a powerful Open Source flashcard application, which helps you quickly and easily memorize facts over the long term utilizing a spaced repetition algorithm. (https://github.com/dsnopek/anki-sync-server) - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) - [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) - [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) @@ -53,7 +53,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [FEX](http://fex.rus.uni-stuttgart.de/) - [FileTea](https://filetea.me) - [FitTrackee](https://github.com/SamR1/FitTrackee) -- [FlatPress](https://github.com/flatpressblog/flatpress) - [FoOlSlide](http://foolcode.github.io/FoOlSlide/) Open source comicbook/manga management software - [Fossil](http://www.fossil-scm.org) - [Framaslides](https://framagit.org/framasoft/framaslides/) @@ -115,11 +114,9 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Modoboa](http://modoboa.org) - [MotionEye](https://github.com/ccrisan/motioneye) - [MPD](http://www.musicpd.org) -- [MyBB](https://mybb.com/) - [Museek+](https://github.com/eLvErDe/museek-plus) - [Netrunner](https://github.com/mtgred/netrunner) - [Nibbleblog](http://www.nibbleblog.com) -- [Nitter](https://github.com/zedeus/nitter) (Twitter front-end focused on privacy) - [Nuage](https://nuage.kerjean.me/login) - [Ombi](https://github.com/tidusjar/Ombi) - [OpenBazaar](https://openbazaar.org) From 742219ef4fcd01a56bb5cee4421780390d4fe964 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 23 Sep 2019 14:34:09 +0000 Subject: [PATCH 137/360] =?UTF-8?q?added=20MagicMirror=C2=B2=20to=20wishli?= =?UTF-8?q?st=20This=20app=20as=20main=20task=20and=20other=20services,=20?= =?UTF-8?q?like=20nextcloud,=20in=20the=20background=20would=20free=20me?= =?UTF-8?q?=20one=20extra=20raspberry!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps_wishlist.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index a947eb62..282a910a 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -15,7 +15,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Ajenti](http://ajenti.org) - [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. - [aMule](https://github.com/amule-project/amule) -- [Anki](https://github.com/tsudoko/anki-sync-server) - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) - [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) - [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) @@ -105,6 +104,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [LocomotiveCMS](https://github.com/locomotivecms/engine) - [Logstalgia](http://logstalgia.io) - [Loomio](https://www.loomio.org) +- [MagicMirror²](https://github.com/MichMich/MagicMirror) - [MaidSafe](http://maidsafe.net) - [Mailpile](https://www.mailpile.is) - [Mautic](https://github.com/mautic/mautic) @@ -119,7 +119,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Museek+](https://github.com/eLvErDe/museek-plus) - [Netrunner](https://github.com/mtgred/netrunner) - [Nibbleblog](http://www.nibbleblog.com) -- [Nitter](https://github.com/zedeus/nitter) (Twitter front-end focused on privacy) - [Nuage](https://nuage.kerjean.me/login) - [Ombi](https://github.com/tidusjar/Ombi) - [OpenBazaar](https://openbazaar.org) From f85ce145b3fced0764cd69ce72b6d459f5fe367a Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 23 Sep 2019 14:34:19 +0000 Subject: [PATCH 138/360] xibo - a FLOSS digital signage solution --- apps_wishlist.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index a947eb62..7e3a1a69 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -119,7 +119,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Museek+](https://github.com/eLvErDe/museek-plus) - [Netrunner](https://github.com/mtgred/netrunner) - [Nibbleblog](http://www.nibbleblog.com) -- [Nitter](https://github.com/zedeus/nitter) (Twitter front-end focused on privacy) - [Nuage](https://nuage.kerjean.me/login) - [Ombi](https://github.com/tidusjar/Ombi) - [OpenBazaar](https://openbazaar.org) @@ -190,6 +189,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [WebTorrent](https://github.com/feross/webtorrent) - [Wisemapping](http://www.wisemapping.com) - [Wireguard](https://www.wireguard.com/) +- [Xibo](https://github.com/xibosignage) - [Xonotic](http://xonotic.org) - [YesWiki](https://yeswiki.net) - [Zammad](https://github.com/zammad/zammad) From 0e318f920bd6bf3331e34705381a11bbf3b8f2f4 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 23 Sep 2019 14:35:14 +0000 Subject: [PATCH 139/360] Added Mailtrain --- apps_wishlist.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index a947eb62..b26c970c 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -15,7 +15,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Ajenti](http://ajenti.org) - [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. - [aMule](https://github.com/amule-project/amule) -- [Anki](https://github.com/tsudoko/anki-sync-server) - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) - [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) - [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) @@ -53,7 +52,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [FEX](http://fex.rus.uni-stuttgart.de/) - [FileTea](https://filetea.me) - [FitTrackee](https://github.com/SamR1/FitTrackee) -- [FlatPress](https://github.com/flatpressblog/flatpress) +- [Flarum](https://flarum.org/) - [FoOlSlide](http://foolcode.github.io/FoOlSlide/) Open source comicbook/manga management software - [Fossil](http://www.fossil-scm.org) - [Framaslides](https://framagit.org/framasoft/framaslides/) @@ -107,6 +106,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Loomio](https://www.loomio.org) - [MaidSafe](http://maidsafe.net) - [Mailpile](https://www.mailpile.is) +- [Mailtrain](https://mailtrain.org/) - [Mautic](https://github.com/mautic/mautic) - [MediaCrush](https://github.com/MediaCrush/MediaCrush) (/!\ last update: Jan 23, 2015) - [microblog.pub](https://microblog.pub) @@ -119,7 +119,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Museek+](https://github.com/eLvErDe/museek-plus) - [Netrunner](https://github.com/mtgred/netrunner) - [Nibbleblog](http://www.nibbleblog.com) -- [Nitter](https://github.com/zedeus/nitter) (Twitter front-end focused on privacy) - [Nuage](https://nuage.kerjean.me/login) - [Ombi](https://github.com/tidusjar/Ombi) - [OpenBazaar](https://openbazaar.org) From ccf5cde4fb7de73d5f298d94fabb895b7b3a2293 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 23 Sep 2019 16:07:16 +0000 Subject: [PATCH 140/360] I translated the Administrator Documentation Startpage to German. --- admindoc_de.md | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 admindoc_de.md diff --git a/admindoc_de.md b/admindoc_de.md new file mode 100644 index 00000000..f9c0b256 --- /dev/null +++ b/admindoc_de.md @@ -0,0 +1,45 @@ +# Administrator-Dokumentation + +* Self-Hosting entdecken + * [Was ist Self-Hosting](/selfhosting) + * [Was ist YunoHost](/whatsyunohost) + * [Probiere YunoHost aus](/try) + * [Wie du selber hostest](howtohostyourself) + * [Wähle die Hardware](/hardware) + * [Über die Freundlichkeit von Internet-Service-Providern](/isp) +* [YunoHost installieren](/install) + * [Auf einem normalen Computer](/install_iso) + * [Auf einem eigenen oder virtuellen Server](/install_on_vps) + * [Auf einem Raspberry Pi](/install_on_raspberry) + * [Auf einem ARM-Board](/install_on_arm_board) + * [Auf Debian](/install_on_debian) + * [Auf VirtualBox](/install_on_virtualbox) +* Setup abschließen + * [Nach der Installation](/postinstall) + * [Port-Forwarding konfigurieren](/isp_box_config) + * [DNS-Einträge konfigurieren](/dns_config) + * [SSL-Zertifikate installieren](/certificate) + * [Diagnostiziere deine Installation](/diagnostic) +* YunoHost kennenlernen + * [Übersicht über YunoHost](/overview) + * [Allgemeine Hinweise und Hilfestellungen](/guidelines) + * [Web-Administrations-Interface](/admin) + * [SSH](/ssh) and [command-line administration](/commandline) + * [Benutzer und SSO (Single-Sign-On)](/users) + * [Applicationen](/apps_overview) + * [Domains, DNS und Zertifikate](/domains) + * [E-Mail](/email) + * [XMPP](/XMPP) + * [Datensicherung](/backup) + * [System-Update](/update) and [apps](/app_update) + * [Sicherheit](/security) +* Weiteres + * [Noho.st / nohost.me / ynh.fr Domain-Namen](/dns_nohost_me) + * [Grafischer Dateiaustausch mit deinem Server](/filezilla) + * [Passe das Aussehen vom Yunohost-Portal an](/theming) + * [Für externen Speicher hinzu](/external_storage) + * [Migriere E-Mails zu Yunohost](/email_migration) + * [Verstecke Services mit Tor](/torhiddenservice) +* [Hinweise zur Fehlersuche](/troubleshooting_guide) + * [Entsperren von IPs in fail2ban](/fail2ban) + * [Administrator-Passwort ändern](/change_admin_password) From 7733086d5f8249573ad504456fe06da95e5d30b8 Mon Sep 17 00:00:00 2001 From: Mitra Ardron <mitra@mitra.biz> Date: Wed, 25 Sep 2019 07:50:51 +1000 Subject: [PATCH 141/360] Fix bad link in Yep 1.6 Note - it also needs someone to edit as to HOW to subscribe to apps@list.yunohost.org - e.g. a link ? - the usual guesses (like sending 'subscribe ' to apps@list.yunohost.org, or going to http://list.yunohost.org don't work --- packaging_apps_guidelines.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging_apps_guidelines.md b/packaging_apps_guidelines.md index 62716fc0..14e4db66 100644 --- a/packaging_apps_guidelines.md +++ b/packaging_apps_guidelines.md @@ -153,7 +153,7 @@ This involves monitoring updates to the upstream application, adhering to the ne ##### 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) +* follow [the forum's Apps category](https://forum.yunohost.org/c/contribute-room/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/)) From 34863b10772de4ed0fe30169a228069a17413f87 Mon Sep 17 00:00:00 2001 From: Mitra Ardron <mitra@mitra.biz> Date: Wed, 25 Sep 2019 08:32:36 +1000 Subject: [PATCH 142/360] Removed pointer to both mailing list (Alex said its not valid) --- packaging_apps_guidelines.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/packaging_apps_guidelines.md b/packaging_apps_guidelines.md index 14e4db66..b9607d37 100644 --- a/packaging_apps_guidelines.md +++ b/packaging_apps_guidelines.md @@ -152,13 +152,11 @@ This involves monitoring updates to the upstream application, adhering to the ne #### 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/contribute-room/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 | From 64a80f1bafab6169eb5667b2ec5ac5db6575a2d2 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Fri, 27 Sep 2019 15:31:58 +0200 Subject: [PATCH 143/360] Propagate changes to the french version --- packaging_apps_guidelines_fr.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/packaging_apps_guidelines_fr.md b/packaging_apps_guidelines_fr.md index 2942cf81..271edfb6 100644 --- a/packaging_apps_guidelines_fr.md +++ b/packaging_apps_guidelines_fr.md @@ -153,13 +153,11 @@ Cela implique de surveiller les mises à jour de l'application upstream, de resp #### 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) Pour suivre l'évolution de YunoHost de façon plus générale : * rejoindre le salon XMPP dev@conference.yunohost.org ([trois jours de logs sont disponibles](https://im.yunohost.org/logs/dev/)) * 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 | From b1020ee5437f7d2c7909b25731593c9389a11260 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Fri, 27 Sep 2019 15:32:53 +0200 Subject: [PATCH 144/360] Also update the link as for the english version --- packaging_apps_guidelines_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging_apps_guidelines_fr.md b/packaging_apps_guidelines_fr.md index 271edfb6..4048f777 100644 --- a/packaging_apps_guidelines_fr.md +++ b/packaging_apps_guidelines_fr.md @@ -153,7 +153,7 @@ Cela implique de surveiller les mises à jour de l'application upstream, de resp #### 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: -* suivre [la catégorie Apps packaging du forum](https://forum.yunohost.org/c/apps-packaging) +* suivre [la catégorie Apps packaging du forum](https://forum.yunohost.org/c/contribute-room/apps-packaging) Pour suivre l'évolution de YunoHost de façon plus générale : * rejoindre le salon XMPP dev@conference.yunohost.org ([trois jours de logs sont disponibles](https://im.yunohost.org/logs/dev/)) From 01a32a5fae8945e168efadd0516602f04a2e9012 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 28 Sep 2019 03:12:17 +0000 Subject: [PATCH 145/360] Changed the link so it points to the English, not French version --- packaging_apps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging_apps.md b/packaging_apps.md index 8e04f0ed..dee9331a 100644 --- a/packaging_apps.md +++ b/packaging_apps.md @@ -104,7 +104,7 @@ Here is a list of best practices for application install scripts: * 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). +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). ### Package script checker <a class="btn btn-lg btn-default" href="https://github.com/YunoHost/package_checker">Package checker</a> From 67ffe2573ca15d102412c64890dc1a775188f089 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 28 Sep 2019 03:12:38 +0000 Subject: [PATCH 146/360] Added a pointer to packaging guidelines (which they haven't encountered yet if working sequentially through packaging_apps_en) for rules for id --- packaging_apps_manifest.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging_apps_manifest.md b/packaging_apps_manifest.md index e8c713af..d757bdba 100644 --- a/packaging_apps_manifest.md +++ b/packaging_apps_manifest.md @@ -53,9 +53,9 @@ The `manifest.json` file defines the app's constants, a bunch of values that Yun } ``` -* **name**: app name. It does not have to be unique, but it should be, since it is the name shown to all the YunoHost administrators in the app list. +* **name**: app name. It does not have to be unique, but it should be, since it is the name shown to all the YunoHost administrators in the app list. Any characters are allowed. -* **id**: ID of the app. You have to ensure that this ID is unique before submit an app integration request. +* **id**: ID of the app. You have to ensure that this ID is unique before submit an app integration request. See [packaging_apps_guidelines.md#yep-11](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines.md#yep-11) for valid rules. - **packaging_format**: package version. Actual version is **1**. This key has been set up to make independant packaging evolution versions from YunoHost versions evolution. From 96cbef5e78fa878665042725062444ae5bc3dd75 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 28 Sep 2019 03:12:54 +0000 Subject: [PATCH 147/360] Make it clearer that this image does NOT work on RPI4 as many people are making the wrong assumption https://forum.yunohost.org/t/rpi-4-fresh-install/ --- install_on_raspberry.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install_on_raspberry.md b/install_on_raspberry.md index 9022f3e6..a6f0090f 100644 --- a/install_on_raspberry.md +++ b/install_on_raspberry.md @@ -13,7 +13,7 @@ Before setting up a server at home, it is recommended that you know the [possibl ## Pre-requisites -- A Raspberry Pi 0, 1, 2 or 3 ; +- A Raspberry Pi 0, 1, 2 or 3 (does not currently work on RPI 4); - An 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)) ; - A power supply (either an adapter or a MicroUSB cable)i ; - An ethernet cable (RJ-45) to connect your Raspberry Pi to your router. (Raspberry Pi Zero users can connect the Pi using an OTG cable, [Wifi dongle](https://core-electronics.com.au/tutorials/raspberry-pi-zerow-headless-wifi-setup.html).) ; From 8626f287ce2362f156919949971997f8b6d06fd9 Mon Sep 17 00:00:00 2001 From: Plumf <45500657+Plumf@users.noreply.github.com> Date: Sat, 28 Sep 2019 13:19:08 +0200 Subject: [PATCH 148/360] Fix Simon --- apps_wishlist.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index fc5a8e0d..a30d7f4b 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -15,6 +15,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Ajenti](http://ajenti.org) - [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. - [aMule](https://github.com/amule-project/amule) +- [Anki](https://github.com/tsudoko/anki-sync-server) - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) - [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) - [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) @@ -52,6 +53,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [FEX](http://fex.rus.uni-stuttgart.de/) - [FileTea](https://filetea.me) - [FitTrackee](https://github.com/SamR1/FitTrackee) +- [FlatPress](https://github.com/flatpressblog/flatpress) - [FoOlSlide](http://foolcode.github.io/FoOlSlide/) Open source comicbook/manga management software - [Fossil](http://www.fossil-scm.org) - [Framaslides](https://framagit.org/framasoft/framaslides/) @@ -113,9 +115,11 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Modoboa](http://modoboa.org) - [MotionEye](https://github.com/ccrisan/motioneye) - [MPD](http://www.musicpd.org) +- [MyBB](https://mybb.com/) - [Museek+](https://github.com/eLvErDe/museek-plus) - [Netrunner](https://github.com/mtgred/netrunner) - [Nibbleblog](http://www.nibbleblog.com) +- [Nitter](https://github.com/zedeus/nitter) (Twitter front-end focused on privacy) - [Nuage](https://nuage.kerjean.me/login) - [Ombi](https://github.com/tidusjar/Ombi) - [OpenBazaar](https://openbazaar.org) From 0ab43b7a64488c791eaa7d3577e2514f56e1ae56 Mon Sep 17 00:00:00 2001 From: Plumf <45500657+Plumf@users.noreply.github.com> Date: Sat, 28 Sep 2019 13:29:54 +0200 Subject: [PATCH 149/360] Fix Simon --- apps_wishlist.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index cd39f12b..1630fe9d 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -15,6 +15,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Ajenti](http://ajenti.org) - [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. - [aMule](https://github.com/amule-project/amule) +- [Anki](https://github.com/tsudoko/anki-sync-server) - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) - [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) - [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) @@ -52,6 +53,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [FEX](http://fex.rus.uni-stuttgart.de/) - [FileTea](https://filetea.me) - [FitTrackee](https://github.com/SamR1/FitTrackee) +- [FlatPress](https://github.com/flatpressblog/flatpress) - [FoOlSlide](http://foolcode.github.io/FoOlSlide/) Open source comicbook/manga management software - [Fossil](http://www.fossil-scm.org) - [Framaslides](https://framagit.org/framasoft/framaslides/) @@ -113,9 +115,11 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Modoboa](http://modoboa.org) - [MotionEye](https://github.com/ccrisan/motioneye) - [MPD](http://www.musicpd.org) +- [MyBB](https://mybb.com/) - [Museek+](https://github.com/eLvErDe/museek-plus) - [Netrunner](https://github.com/mtgred/netrunner) - [Nibbleblog](http://www.nibbleblog.com) +- [Nitter](https://github.com/zedeus/nitter) (Twitter front-end focused on privacy) - [Nuage](https://nuage.kerjean.me/login) - [Ombi](https://github.com/tidusjar/Ombi) - [OpenBazaar](https://openbazaar.org) From a7c1a6a69b436e69039ac66f2e373d944a3b1dde Mon Sep 17 00:00:00 2001 From: Plumf <45500657+Plumf@users.noreply.github.com> Date: Sat, 28 Sep 2019 13:33:53 +0200 Subject: [PATCH 150/360] Fix Simon --- apps_wishlist.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index bb49d2d9..be45cb3d 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -15,6 +15,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Ajenti](http://ajenti.org) - [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. - [aMule](https://github.com/amule-project/amule) +- [Anki](https://github.com/tsudoko/anki-sync-server) - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) - [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) - [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) @@ -52,6 +53,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [FEX](http://fex.rus.uni-stuttgart.de/) - [FileTea](https://filetea.me) - [FitTrackee](https://github.com/SamR1/FitTrackee) +- [FlatPress](https://github.com/flatpressblog/flatpress) - [FoOlSlide](http://foolcode.github.io/FoOlSlide/) Open source comicbook/manga management software - [Fossil](http://www.fossil-scm.org) - [Framaslides](https://framagit.org/framasoft/framaslides/) @@ -113,9 +115,11 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Modoboa](http://modoboa.org) - [MotionEye](https://github.com/ccrisan/motioneye) - [MPD](http://www.musicpd.org) +- [MyBB](https://mybb.com/) - [Museek+](https://github.com/eLvErDe/museek-plus) - [Netrunner](https://github.com/mtgred/netrunner) - [Nibbleblog](http://www.nibbleblog.com) +- [Nitter](https://github.com/zedeus/nitter) (Twitter front-end focused on privacy) - [Nuage](https://nuage.kerjean.me/login) - [Ombi](https://github.com/tidusjar/Ombi) - [OpenBazaar](https://openbazaar.org) From 7460ecf907976b3fc4b2e0f3f9deaebadde7284a Mon Sep 17 00:00:00 2001 From: Plumf <45500657+Plumf@users.noreply.github.com> Date: Sat, 28 Sep 2019 13:39:23 +0200 Subject: [PATCH 151/360] Fix Simon --- apps_wishlist.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index 91f46bb3..aaab981d 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -15,6 +15,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Ajenti](http://ajenti.org) - [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. - [aMule](https://github.com/amule-project/amule) +- [Anki](https://github.com/tsudoko/anki-sync-server) - [Anki](https://apps.ankiweb.net/index.html) is a powerful Open Source flashcard application, which helps you quickly and easily memorize facts over the long term utilizing a spaced repetition algorithm. (https://github.com/dsnopek/anki-sync-server) - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) - [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) @@ -53,6 +54,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [FEX](http://fex.rus.uni-stuttgart.de/) - [FileTea](https://filetea.me) - [FitTrackee](https://github.com/SamR1/FitTrackee) +- [FlatPress](https://github.com/flatpressblog/flatpress) - [FoOlSlide](http://foolcode.github.io/FoOlSlide/) Open source comicbook/manga management software - [Fossil](http://www.fossil-scm.org) - [Framaslides](https://framagit.org/framasoft/framaslides/) @@ -114,9 +116,11 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Modoboa](http://modoboa.org) - [MotionEye](https://github.com/ccrisan/motioneye) - [MPD](http://www.musicpd.org) +- [MyBB](https://mybb.com/) - [Museek+](https://github.com/eLvErDe/museek-plus) - [Netrunner](https://github.com/mtgred/netrunner) - [Nibbleblog](http://www.nibbleblog.com) +- [Nitter](https://github.com/zedeus/nitter) (Twitter front-end focused on privacy) - [Nuage](https://nuage.kerjean.me/login) - [Ombi](https://github.com/tidusjar/Ombi) - [OpenBazaar](https://openbazaar.org) From 0963754db5fdb13ba748cf09204d55af9cb7b097 Mon Sep 17 00:00:00 2001 From: Plumf <45500657+Plumf@users.noreply.github.com> Date: Sat, 28 Sep 2019 13:42:10 +0200 Subject: [PATCH 152/360] Fix anki repo --- apps_wishlist.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index aaab981d..87b575f6 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -15,8 +15,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Ajenti](http://ajenti.org) - [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. - [aMule](https://github.com/amule-project/amule) -- [Anki](https://github.com/tsudoko/anki-sync-server) -- [Anki](https://apps.ankiweb.net/index.html) is a powerful Open Source flashcard application, which helps you quickly and easily memorize facts over the long term utilizing a spaced repetition algorithm. (https://github.com/dsnopek/anki-sync-server) +- [Anki](https://github.com/dsnopek/anki-sync-server) is a powerful Open Source flashcard application, which helps you quickly and easily memorize facts over the long term utilizing a spaced repetition algorithm. - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) - [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) - [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) From a65c67fda4f10e9169dff87ac46a746cb79705f0 Mon Sep 17 00:00:00 2001 From: Plumf <45500657+Plumf@users.noreply.github.com> Date: Sat, 28 Sep 2019 13:48:41 +0200 Subject: [PATCH 153/360] Fix Simon --- apps_wishlist.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index 282a910a..499fce3c 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -15,6 +15,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Ajenti](http://ajenti.org) - [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. - [aMule](https://github.com/amule-project/amule) +- [Anki](https://github.com/tsudoko/anki-sync-server) - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) - [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) - [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) @@ -119,6 +120,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Museek+](https://github.com/eLvErDe/museek-plus) - [Netrunner](https://github.com/mtgred/netrunner) - [Nibbleblog](http://www.nibbleblog.com) +- [Nitter](https://github.com/zedeus/nitter) (Twitter front-end focused on privacy) - [Nuage](https://nuage.kerjean.me/login) - [Ombi](https://github.com/tidusjar/Ombi) - [OpenBazaar](https://openbazaar.org) From 9b7866de576d3881a56cf40ffc5d2e0f7438b332 Mon Sep 17 00:00:00 2001 From: Plumf <45500657+Plumf@users.noreply.github.com> Date: Sat, 28 Sep 2019 13:51:15 +0200 Subject: [PATCH 154/360] Fix Simon --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index 7e3a1a69..5eac50e9 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -119,6 +119,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Museek+](https://github.com/eLvErDe/museek-plus) - [Netrunner](https://github.com/mtgred/netrunner) - [Nibbleblog](http://www.nibbleblog.com) +- [Nitter](https://github.com/zedeus/nitter) (Twitter front-end focused on privacy) - [Nuage](https://nuage.kerjean.me/login) - [Ombi](https://github.com/tidusjar/Ombi) - [OpenBazaar](https://openbazaar.org) From 3b34c5a9868e6ba2fbf73354bd51de3513e1cce9 Mon Sep 17 00:00:00 2001 From: Plumf <45500657+Plumf@users.noreply.github.com> Date: Sat, 28 Sep 2019 13:54:11 +0200 Subject: [PATCH 155/360] Fix Simon --- apps_wishlist.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index b26c970c..39a68ac2 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -15,6 +15,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Ajenti](http://ajenti.org) - [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. - [aMule](https://github.com/amule-project/amule) +- [Anki](https://github.com/tsudoko/anki-sync-server) - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) - [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) - [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) @@ -52,6 +53,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [FEX](http://fex.rus.uni-stuttgart.de/) - [FileTea](https://filetea.me) - [FitTrackee](https://github.com/SamR1/FitTrackee) +- [FlatPress](https://github.com/flatpressblog/flatpress) - [Flarum](https://flarum.org/) - [FoOlSlide](http://foolcode.github.io/FoOlSlide/) Open source comicbook/manga management software - [Fossil](http://www.fossil-scm.org) @@ -119,6 +121,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Museek+](https://github.com/eLvErDe/museek-plus) - [Netrunner](https://github.com/mtgred/netrunner) - [Nibbleblog](http://www.nibbleblog.com) +- [Nitter](https://github.com/zedeus/nitter) (Twitter front-end focused on privacy) - [Nuage](https://nuage.kerjean.me/login) - [Ombi](https://github.com/tidusjar/Ombi) - [OpenBazaar](https://openbazaar.org) From a9ffeddea529dfbca554864d1166f794f6d69d3d Mon Sep 17 00:00:00 2001 From: Plumf <plumf@open-plug.eu> Date: Sat, 28 Sep 2019 22:09:11 +0200 Subject: [PATCH 156/360] =?UTF-8?q?D=C3=A9veloppement=20de=20la=20doc=20de?= =?UTF-8?q?=20nextcloud=20et=20restructuration=20de=20la=20page?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app_nextcloud.md | 93 +++++++++--------- app_nextcloud_fr.md | 63 ++++-------- app_nextcloud_keeweb.md | 29 ++++++ app_nextcloud_keeweb_fr.md | 38 +++++++ ...{nextcloud-logo.png => nextcloud_logo.png} | Bin 5 files changed, 134 insertions(+), 89 deletions(-) create mode 100644 app_nextcloud_keeweb.md create mode 100644 app_nextcloud_keeweb_fr.md rename images/{nextcloud-logo.png => nextcloud_logo.png} (100%) diff --git a/app_nextcloud.md b/app_nextcloud.md index 92cb29f4..f7ec478d 100644 --- a/app_nextcloud.md +++ b/app_nextcloud.md @@ -1,9 +1,31 @@ -# Add storage space +# <img src="/images/nextcloud_logo.png" alt="logo de Nextcloud"> Nextcloud -Solution I) allows you to add a link to a local or remote folder. -Solution II) allows to move the main storage space of nextcloud. + - [Discovering the Nextcloud environment](#EnvironmentNextcloud) + - [Mobile and computer client software](#ClientSoftware) + - [Useful Manipulations & Problems Encountered](#UtileManipulations) + - [Add space to Nextcloud](#AddSpace) + - [Third Party Applications](#AppsTiers) + - [Useful links](#UsefulLinks) -## I) Add an external storage space +Nextcloud is a file hosting service, many applications can be installed to offer it new features such as a calendar, a directory, notes and many others (you can find some applications in the[third-party applications] part (#AppsTiers) but there are many others depending on your needs). + +## Discovering the Nextcloud environment <a name="EnvironmentNextcloud"></a> + +Due to the creation of Nextcloud, a database with third-party applications to install, this chapter will only concern the nextcloud database without added applications. More information on applications in the dedicated section or in the nextcloud application catalogue: [apps.nextcloud.com](https://apps.nextcloud.com). +Nextcloud is before a cloud service (like Seafile and others), it allows synchronization and file sharing on the Internet and between several terminals (computers, smartphone) but also with several people. + +## Mobile and computer client software <a name="ClientSoftware"></a> + +There are client software for all platforms. You can find them on the official nextcloud website: https://nextcloud.com/install/#install-clients + +## Useful Manipulations & Problems Encountered <a name="UtileManipulations"></a> + +### Add storage space <a name="AddSpace"></a> + +Solution I. allows you to add a link to a local or remote folder. +Solution II. allows to move the main storage space of nextcloud. + +#### I. Add an external storage space Parameter =>[Administration] External storage. @@ -13,7 +35,7 @@ You can restrict this folder to one or more nextcloud users with the column `Ava With the gear you can allow or prohibit previewing and file sharing. Finally click on the check mark to validate the folder. -## II) Migrate Nextcloud data to a larger partition +#### II. Migrate Nextcloud data to a larger partition **Note**: The following assumes that you have a hard disk mounted on `/media/storage`. Refer to[this article](/external_storage_en) to prepare your system. @@ -24,9 +46,9 @@ First turn off the web server with the command: systemctl stop nginx ``` -#### Choice of location +##### Choice of location -#### Case A: Blank storage, exclusive to Nextcloud +**Case A: Blank storage, exclusive to Nextcloud** For the moment only root can write to it in `/media/storage`, which means that nginx and nextcloud will not be able to use it. @@ -35,7 +57,7 @@ chown -R nextcloud:nextcloud /media/storage chmod 775 -R /media/storage ``` -#### Case B: Shared storage, data already present, Nextcloud data in a subfolder +**Case B: Shared storage, data already present, Nextcloud data in a subfolder** If you want to use this disk for other applications, you can create a subfolder belonging to Nextcloud. @@ -45,7 +67,7 @@ chown -R nextcloud /media/storage/nextcloud_data chmod 775 -R /media/storage/nextcloud_data ``` -#### Migrate data +##### Migrate data Migrate your data to the new disk. To do this *(be patient, it can take a long time)*: @@ -54,8 +76,7 @@ Case A: cp -ir /home/yunohost.app/nextcloud /media/storage Case B: cp -ir /home/yunohost.app/nextcloud /media/storage/nextcloud_data ``` -The `i` option allows you to ask yourself what to do if there is a file conflict, especially if you overwrite an old Owncloud or Nextcloud data folder. - +The `i` option allows you to ask yourself what to do if there is a file conflict, especially if you overwrite an old Owncloud or Nextcloud data folder. To check that everything went well, compare what these two commands display (the content must be identical): ```bash @@ -65,7 +86,7 @@ Case A: ls -al /media/storage Case B: ls -al /media/storage/nextcloud_data/nextcloud ``` -#### Configure Nextcloud +##### Configure Nextcloud To inform Nextcloud of its new directory, modify the `/var/www/nextcloud/config/config.php` file with the command: @@ -112,44 +133,14 @@ sudo -u nextcloud php occ files:scan --all It's over now. Now test if everything is fine, try connecting to your Nextcloud instance, upload a file, check its proper synchronization. -# The KeeWeb application - -The KeeWeb application is a password manager integrated into Nextcloud. For example, it allows you to read a KeePass file (*.kdbx*) stored on your Nextcloud instance. -But sometimes Nextcloud does not let the application support these files, which makes it impossible to read them from KeeWeb. To remedy this, -[a solution](https://github.com/jhass/nextcloud-keeweb/issues/34) exists. - -Go to the Nextcloud configuration directory: - -```bash -cd /var/www/nextcloud/config/ -``` - -If it does not exist, create the *mimetypemapping.json* file whose owner is the user *nextcloud* : - -```bash -sudo su nextcloud -c "nano mimetypemapping.json" -``` - -Then add in this file the following text: - -```bash -{ - "kdbx": ["x-application/kdbx"] -} -``` - -Save the file (**CTRL** + **o**) and exit nano (**CTRL** + **c**). - -Now the problem is fixed. - -# Nextcloud and Cloudflare +### Nextcloud and Cloudflare If you use Cloudflare for your DNS, *which may be useful if you have a dynamic IP*, you will most likely have authentication problems with the Nextcloud application. On the Internet many people propose to create a rule that disables all options related to security and Cloudflare speed for the url pointing to your Nextcloud instance. Although it works, it is not the optimal solution. I propose, certainly to create a rule for the url pointing to your Nextcloud instance but to disable only 2 options. So here's how: -## Cloudflare Page Rules +#### Cloudflare Page Rules In the Cloudflare control panel select your domain and find Page Rules -the url in your address bar will look like this: https://dash.cloudflare.com/*/domain.tld/page-rules +the url in your address bar will look like this: https://dash.cloudflare.com/*/domain.tld/page-rules #### Add a rule @@ -163,4 +154,14 @@ The options to disable (Off) are: - Rocket Loader - Email Obfuscation -Save and clean your caches (Cloudflare, browser,...) and that's it. \ No newline at end of file +Save and clean your caches (Cloudflare, browser,...) and that's it. + +## Third Party Applications <a name="AppsTiers"></a> + + + [KeeWeb](app_nextcloud_keeweb) + +## Useful links <a name="UsefulLinks"></a> + ++ Official website : [nextcloud.com](https://nextcloud.com/) ++ Application catalogue for nextcloud : [apps.nextcloud.com](https://apps.nextcloud.com/) ++ Find help and ask all your questions : [forum.yunohost.org](https://forum.yunohost.org/c/support) diff --git a/app_nextcloud_fr.md b/app_nextcloud_fr.md index 804f08ea..65ab443a 100644 --- a/app_nextcloud_fr.md +++ b/app_nextcloud_fr.md @@ -1,4 +1,4 @@ -# <img src="/images/nextcloud-logo.png" alt="logo de Nextcloud"> Nextcloud +# <img src="/images/nextcloud_logo.png" alt="logo de Nextcloud"> Nextcloud - [Découverte de l'environnement de Nextcloud](#EnvironnementNextcloud) - [Logiciels Clients pour mobile et ordinateur](#LogicielsClients) @@ -7,21 +7,23 @@ - [Applications tiers](#AppsTiers) - [Liens utiles](#liensutiles) -Nextcloud est un service d'hébergement de fichiers, de nombreuses applications peuvent être installés afin de lui offrir de nouvelles fonctionnalités tel que un agenda, un répertoire, des notes et pleins d'autres (vous pouvez trouver quelques applications dans la partie [applications tiers](#AppsTiers) mais il en existe pleins d'autres suivant vos besoins). +Nextcloud est un service d'hébergement de fichiers, de nombreuses applications peuvent être installées afin de lui offrir de nouvelles fonctionnalités tel qu'un agenda, un répertoire de contacts, des notes et pleins d'autres possibles (vous pouvez trouver quelques applications dans la partie [applications tiers](#AppsTiers) mais il en existe une multitude suivant vos besoins). -## <a name="EnvironnementNextcloud">Découverte de l'environnement de Nextcloud</a> +## Découverte de l'environnement de Nextcloud<a name="EnvironnementNextcloud"></a> -Du fait de la constitution de Nextcloud, une base avec des applications tiers à installer, cette découverte de nextcloud ne concernera que la base de nextcloud sans applications ajoutés. Plus d'informations sur les applications dans la partie dédiée ou sur le catalogue d'application de nextcloud : https://apps.nextcloud.com/ +Du fait de la constitution de Nextcloud, une base avec des applications tiers à installer, ce chapitre ne concernera que la base de nextcloud sans applications ajoutés. Plus d'informations sur les applications dans la partie dédiée ou sur le catalogue d'application de nextcloud : [apps.nextcloud.com](https://apps.nextcloud.com). +Nextcloud est avant tout un service de cloud (comme Seafile et d'autres logiciels), il permet une synchronisation et le partage de fichiers sur internet et entre plusieurs terminaux (ordinateurs, smartphone) mais aussi avec plusieurs personnes. -## <a name="LogicielsClients">Logiciels Clients</a> -Il existe des logiciels client pour l'ensemble plateformes. Vous pouvez les retrouver sur le site officiel de nextcloud : https://nextcloud.com/install/#install-clients +## Logiciels Clients<a name="LogicielsClients"></a> -## <a name="ManipulationsUtiles"> Manipulations utiles & Problèmes rencontrés</a> +Il existe des logiciels clients pour de nombreux terminaux. Vous pouvez les retrouver sur le site de nextcloud : [nextcloud.com/install/#install-clients](https://nextcloud.com/install/#install-clients) -### <a name="AjoutEspace">Ajouter de l'espace à Nextcloud</a> +## Manipulations utiles & problèmes rencontrés<a name="ManipulationsUtiles"></a> -La solution I) permet d'ajouter un lien vers un dossier local ou distant. -La solution II) permet de déplacer l'espace de stockage principal de nextcloud. +### Ajouter de l'espace à Nextcloud<a name="AjoutEspace"></a> + +La solution I. permet d'ajouter un lien vers un dossier local ou distant. +La solution II. permet de déplacer l'espace de stockage principal de nextcloud. #### I. Ajouter un espace de stockage externe @@ -74,8 +76,7 @@ Cas A : cp -ir /home/yunohost.app/nextcloud /media/stockage Cas B : cp -ir /home/yunohost.app/nextcloud /media/stockage/nextcloud_data ``` -L'option `i` permet de vous demander quoi faire en cas de conflit de fichier, notamment si vous écrasez un ancien dossier de données Owncloud ou Nextcloud. - +L'option `i` permet de vous demander quoi faire en cas de conflit de fichier, notamment si vous écrasez un ancien dossier de données Owncloud ou Nextcloud. Pour vérifier que tout s'est bien passé, comparer ce qu'affichent ces deux commandes (le contenu doit être identique): ```bash @@ -156,39 +157,15 @@ Les options à désactiver (Off) sont : Sauvegarder et nettoyer vos caches (Cloudflare, navigateur, ...) et le tour est joué. -## <a name="AppsTiers">Les applications Tiers</a> +## Applications Tiers<a name="AppsTiers"></a> -### L'application KeeWeb + + [Calendrier](app_nextcloud_calendar_fr) + + [contact](app_nextcloud_contact_fr) + + [KeeWeb](app_nextcloud_keeweb_fr) + + [Carnet](app_nextcloud_carnet_fr) -L'application KeeWeb est un gestionnaire de mots de passe incorporé à Nextcloud. Elle permet par exemple de lire un fichier de type KeePass (*.kdbx*) stocké sur votre instance Nextcloud. -Mais il arrive parfois que Nextcloud ne laisse pas l'application prendre en charge ces fichiers, ce qui rend alors impossible leur lecture de KeeWeb. Pour remédier à cela, -[une solution](https://github.com/jhass/nextcloud-keeweb/issues/34) existe. +## Quelques liens utiles<a name="liensutiles"></a> -Se rendre dans le répertoire de configuration de Nextcloud : - -```bash -cd /var/www/nextcloud/config/ -``` - -S'il n'existe pas, créer le fichier *mimetypemapping.json* dont le propriétaire est l'utilisateur *nextcloud* : - -```bash -sudo su nextcloud -c "nano mimetypemapping.json" -``` - -Puis ajouter dans ce fichier le texte suivent : - -```bash -{ - "kdbx": ["x-application/kdbx"] -} -``` - -Enregistrer le fichier (**CTRL** + **o**) et quitter nano (**CTRL** + **c**). - -A présent, le problème est corrigé. - -## <a name="liensutiles">Quelques liens utiles</a> -+ Site officiel : [nextcloud.com (En anglais)](https://nextcloud.com/) ++ Site officiel : [nextcloud.com (en)](https://nextcloud.com/) + Catalogue d'application pour nextcloud : [apps.nextcloud.com](https://apps.nextcloud.com/) + Trouver de l'aide et poser toutes vos questions : [forum.yunohost.org](https://forum.yunohost.org/c/support) diff --git a/app_nextcloud_keeweb.md b/app_nextcloud_keeweb.md new file mode 100644 index 00000000..75a1e146 --- /dev/null +++ b/app_nextcloud_keeweb.md @@ -0,0 +1,29 @@ +# The KeeWeb application + +The KeeWeb application is a password manager integrated into Nextcloud. For example, it allows you to read a KeePass file (*.kdbx*) stored on your Nextcloud instance. +But sometimes Nextcloud does not let the application support these files, which makes it impossible to read them from KeeWeb. To remedy this, +[a solution](https://github.com/jhass/nextcloud-keeweb/issues/34) exists. + +Go to the Nextcloud configuration directory: + +```bash +cd /var/www/nextcloud/config/ +``` + +If it does not exist, create the *mimetypemapping.json* file whose owner is the user *nextcloud* : + +```bash +sudo su nextcloud -c "nano mimetypemapping.json" +``` + +Then add in this file the following text: + +```bash +{ + "kdbx": ["x-application/kdbx"] +} +``` + +Save the file (**CTRL** + **o**) and exit nano (**CTRL** + **c**). + +Now the problem is fixed. diff --git a/app_nextcloud_keeweb_fr.md b/app_nextcloud_keeweb_fr.md new file mode 100644 index 00000000..47b09e9a --- /dev/null +++ b/app_nextcloud_keeweb_fr.md @@ -0,0 +1,38 @@ +# L'application KeeWeb + +L'application Keeweb sur le catalogue de nextcloud - [apps.nextcloud.com/keeweb](https://apps.nextcloud.com/apps/keeweb) + + - [Manipulations utiles et problèmes rencontrés](#ManipulationsUtiles) + - [Liens utiles](#liensutiles) + +L'application KeeWeb est un gestionnaire de mots de passe incorporé à Nextcloud. Elle permet par exemple de lire un fichier de type KeePass (*.kdbx*) stocké sur votre instance Nextcloud. + +## Manipulations utiles & problèmes rencontrés <a name="ManipulationsUtiles"></a> +Mais il arrive parfois que Nextcloud ne laisse pas l'application prendre en charge ces fichiers, ce qui rend alors impossible leur lecture de KeeWeb. Pour remédier à cela, +[une solution](https://github.com/jhass/nextcloud-keeweb/issues/34) existe. + +Se rendre dans le répertoire de configuration de Nextcloud : + +```bash +cd /var/www/nextcloud/config/ +``` + +S'il n'existe pas, créer le fichier *mimetypemapping.json* dont le propriétaire est l'utilisateur *nextcloud* : + +```bash +sudo su nextcloud -c "nano mimetypemapping.json" +``` + +Puis ajouter dans ce fichier le texte suivent : + +```bash +{ + "kdbx": ["x-application/kdbx"] +} +``` + +Enregistrer le fichier (**CTRL** + **o**) et quitter nano (**CTRL** + **c**). + +A présent, le problème est corrigé. + +## Liens utiles <a name="liensutiles"></a> diff --git a/images/nextcloud-logo.png b/images/nextcloud_logo.png similarity index 100% rename from images/nextcloud-logo.png rename to images/nextcloud_logo.png From 2440e80563000675c3e03fe27aa21a0b33b4bf84 Mon Sep 17 00:00:00 2001 From: Plumf <45500657+Plumf@users.noreply.github.com> Date: Sat, 28 Sep 2019 22:22:55 +0200 Subject: [PATCH 157/360] update page --- isp_fr.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/isp_fr.md b/isp_fr.md index ac174ff4..53d0930f 100644 --- a/isp_fr.md +++ b/isp_fr.md @@ -17,7 +17,7 @@ Tous les fournisseurs d’accès à Internet [membres de la Fédération French | **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)**<br> (fermé par défaut) | ✔ | ✔ | ✔ | ✘ | ✔ | ✔ | -| **[Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning)** | ✔ | ✔ | ✔/✘ | ✔ (uniquement sur Livebox 4) | ✔ | ✔ | +| **[Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning)** | ✔ | ✔ | ✔/✘ | ✔ (depuis la Livebox 4) | ✔ | ✔ | | **[Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup)<br>personnalisable ** | ✔ | ✔ (sauf IPv6) | … | ✘ | ✘ | ✘ | | **[IP fixe](/dns_dynamicip_fr)** | ✔ | ✔ | ✔/✘ | ✘ | ✔ | ✔ | | **[IPv6](https://fr.wikipedia.org/wiki/IPv6)** | ✔ | ✔ | ✔ | ✔ | … | … | @@ -42,4 +42,4 @@ Pour une liste plus complète et précise, référez-vous à la très bonne docu | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | **Orange** | Livebox2 | oui (activé) | non | **non** | **non** | **non** | | **Moov** | | oui (activé) | | | | | -| **MTN** | | oui (activé) | | | | | \ No newline at end of file +| **MTN** | | oui (activé) | | | | | From 49c750d2e0ceb9328b8c665a77932b3f5a16945b Mon Sep 17 00:00:00 2001 From: Plumf <plumf@open-plug.eu> Date: Sun, 29 Sep 2019 15:31:01 +0200 Subject: [PATCH 158/360] dev doc PeerTube --- app_peertube_fr.md | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/app_peertube_fr.md b/app_peertube_fr.md index f359cede..fef9efb5 100644 --- a/app_peertube_fr.md +++ b/app_peertube_fr.md @@ -1,27 +1,21 @@ #<img src="/images/peertube_logo.png" alt="Logo de PeerTube"> PeerTube +**Index** + - [Découverte de l'environnement de PeerTube](#EnvironnementPeerTube) + - [Quelques liens utiles](#liensutiles) +[](https://install-app.yunohost.org/?app=peertube) + PeerTube est une plateforme de streaming vidéo fédérée (ActivityPub) utilisant P2P (BitTorrent) directement dans le navigateur web, en utilisant WebTorrent. - - [Découverte de l'environnement de PeerTube](#EnvironnementPeerTube) - - [Manipulations utiles & Problèmes rencontrés](#ManipulationsUtiles) - + [Permettre aux vidéos d'être embarqué sur un site web](#VideosEmbed) - - [Liens utiles](#liensutiles) -## <a name ="EnvironnementPeerTube">Découverte de l'environnement de PeerTube</a> +## Découverte de l'environnement de PeerTube <a name ="EnvironnementPeerTube"></a> -Pour comprendre en quoi PeerTube propose une réelle alternative à youtube, vous êtes invité à regarder le clip de promotion de PeerTube réalisé par l'association Framasoft (ci-dessous). Elle est elle même hébergé sur framatube.org +Pour comprendre en quoi PeerTube propose une alternative à youtube, vous êtes invité à regarder le clip réalisé par l'association Framasoft (ci-dessous). Elle est elle même hébergé sur [framatube.org](https://framatube.org) <iframe width="560" height="315" sandbox="allow-same-origin allow-scripts" src="https://framatube.org/videos/embed/9db9f3f1-9b54-44ed-9e91-461d262d2205" frameborder="0" allowfullscreen></iframe> -## <a name="ManipulationsUtiles">Manipulations utiles & Problèmes rencontrés</a> +## Quelques liens utiles <a name="liensutiles"></a> -### <a name="VideosEmbed">Permettre aux vidéos d'être embarqué sur un site web</a> - -Pour permettre à une vidéo d'être embarqué, c'est à dire que la vidéo puisse être visible sur un site internet (comme la vidéo de présentation de youtube sur cette page) à l'aide du code disponible en cliquant sur *Partager* sur la page de la vidéo et en copiant le code sur une page du site de destination (cf. capture d'écran ci-dessous). Vous devrez modifier ce fichier de configuration situé ici : `/etc/nginx/conf.d/nom.instance.tld.conf` - - -## <a name="liensutiles">Quelques liens utiles</a> - - - [Site officiel de PeerTube - joinpeertube.org](https://joinpeertube.org/fr/) - - [Documentation de l'application de yunohost](#) - - [ + - Site officiel de PeerTube - [joinpeertube.org](https://joinpeertube.org/fr/) + - Dépot application PeerTube Yunohost - [github.com/YunoHost-Apps/peertube_ynh](https://github.com/YunoHost-Apps/peertube_ynh) + - Trouver de l'aide et poser toutes vos questions : [forum.yunohost.org](https://forum.yunohost.org/c/support) From 8fe093848f6da050213aa0c1574d3268a2ce959a Mon Sep 17 00:00:00 2001 From: Plumf <45500657+Plumf@users.noreply.github.com> Date: Mon, 30 Sep 2019 13:36:42 +0200 Subject: [PATCH 159/360] Update app_nextcloud.md Co-Authored-By: decentral1se <lukewm@riseup.net> --- app_nextcloud.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app_nextcloud.md b/app_nextcloud.md index 90b16926..7da57a5b 100644 --- a/app_nextcloud.md +++ b/app_nextcloud.md @@ -7,7 +7,7 @@ - [Third Party Applications](#AppsTiers) - [Useful links](#UsefulLinks) -Nextcloud is a file hosting service, many applications can be installed to offer it new features such as a calendar, a directory, notes and many others (you can find some applications in the[third-party applications] part (#AppsTiers) but there are many others depending on your needs). +Nextcloud is a file hosting service, many applications can be installed to offer it new features such as a calendar, a directory, notes and many others (you can find some applications in the [third-party applications](#AppsTiers) part but there are many others depending on your needs). ## Discovering the Nextcloud environment <a name="EnvironmentNextcloud"></a> From 42f73191563ea7f48c6832233822c6004bcd9ddc Mon Sep 17 00:00:00 2001 From: Plumf <plumf@open-plug.eu> Date: Mon, 30 Sep 2019 13:56:21 +0200 Subject: [PATCH 160/360] Add pages for apps in process packaging and link to this pages --- apps_packaging.md | 8 ++++++++ apps_packaging_fr.md | 3 +++ apps_wishlist.md | 2 +- 3 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 apps_packaging.md create mode 100644 apps_packaging_fr.md diff --git a/apps_packaging.md b/apps_packaging.md new file mode 100644 index 00000000..125a46ce --- /dev/null +++ b/apps_packaging.md @@ -0,0 +1,8 @@ +# Apps packaging in progress + +<div class="alert alert-info">To add an apps in apps packaging in progress +a repository must exist in the community repository <a href="https://github.com/YunoHost-Apps/">YunoHost-Apps</a>.</div> + +The following list is a list of apps in the process of being packaged. + +[Edit this list](/write_documentation) to add the application you are packaging, or contribut to [package apps](/packaging_apps) yourself. diff --git a/apps_packaging_fr.md b/apps_packaging_fr.md new file mode 100644 index 00000000..2433ccb4 --- /dev/null +++ b/apps_packaging_fr.md @@ -0,0 +1,3 @@ +# Apps en cours de packaging + +La liste des applications en cours de packaging n’est maintenue qu’en <a href="/apps_packaging_en">version anglaise</a>. Merci de vous y référer. diff --git a/apps_wishlist.md b/apps_wishlist.md index f984463d..62aa4242 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -1,6 +1,6 @@ # Apps wishlist -<div class="alert alert-info">Before to add an app in wishlist please check your app is not already in official or community list: see the <a href="/apps_en">apps list</a></div> +<div class="alert alert-info">Before to add an app in wishlist please check your app is not already in official or community list: see the <a href="/apps_en">apps list</a></div> and <a href="/apps_packaging_en">apps packaging in progress</a> The following list is a compiled wishlist of applications that would be nice-to-have. From 7a230cca567687d93e6df1abc1441d83a2a7f274 Mon Sep 17 00:00:00 2001 From: Plumf <plumf@open-plug.eu> Date: Mon, 30 Sep 2019 13:58:14 +0200 Subject: [PATCH 161/360] deletion of wishes that already have a repository --- apps_packaging.md | 6 ++++++ apps_wishlist.md | 19 ++----------------- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/apps_packaging.md b/apps_packaging.md index 125a46ce..ed24ce44 100644 --- a/apps_packaging.md +++ b/apps_packaging.md @@ -6,3 +6,9 @@ a repository must exist in the community repository <a href="https://github.com/ The following list is a list of apps in the process of being packaged. [Edit this list](/write_documentation) to add the application you are packaging, or contribut to [package apps](/packaging_apps) yourself. + +- [Huginn](https://github.com/YunoHost-Apps/huginn_ynh) +- [Redmine](https://github.com/YunoHost-Apps/redmine_ynh) +- [Salut à Toi](https://github.com/YunoHost-Apps/sat_ynh) +- [Streama](https://github.com/YunoHost-Apps/streama_ynh) +- [Wisemapping](https://github.com/YunoHost-Apps/wisemapping_ynh) diff --git a/apps_wishlist.md b/apps_wishlist.md index 62aa4242..c2015953 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -15,11 +15,9 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Ajenti](http://ajenti.org) - [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. - [aMule](https://github.com/amule-project/amule) -- [Anki](https://github.com/dsnopek/anki-sync-server) is a powerful Open Source flashcard application, which helps you quickly and easily memorize facts over the long term utilizing a spaced repetition algorithm. - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) - [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) - [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) -- [Bitwarden](https://bitwarden.com/) - [Beehive](https://github.com/muesli/beehive) - [Bludit](https://www.bludit.com) - [Blynk](https://github.com/blynkkk/blynk-library) @@ -53,12 +51,10 @@ The following list is a compiled wishlist of applications that would be nice-to- - [FEX](http://fex.rus.uni-stuttgart.de/) - [FileTea](https://filetea.me) - [FitTrackee](https://github.com/SamR1/FitTrackee) -- [FlatPress](https://github.com/flatpressblog/flatpress) -- [Flarum](https://flarum.org/) - [FoOlSlide](http://foolcode.github.io/FoOlSlide/) Open source comicbook/manga management software - [Fossil](http://www.fossil-scm.org) - [Framaslides](https://framagit.org/framasoft/framaslides/) -- [Gateway](https://iot.mozilla.org/gateway/) +- [WebThings Gateway](https://iot.mozilla.org/gateway/) - [Geneweb](https://geneweb.tuxfamily.org) - [GetSimple CMS](http://get-simple.info) - [Git-annex](http://git-annex.branchable.com) @@ -74,7 +70,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Helpy](https://github.com/helpyio/helpy) - [Hexo](https://hexo.io/) - [Hi Buddy](https://github.com/tOkeshu/hibuddy) (/!\ last update: 17 Feb 2015) -- [Huginn](https://github.com/cantino/huginn) - [Hugo](http://gohugo.io) - [Icecast 2](http://www.icecast.org) - [ikiwiki](http://ikiwiki.info) @@ -106,10 +101,8 @@ The following list is a compiled wishlist of applications that would be nice-to- - [LocomotiveCMS](https://github.com/locomotivecms/engine) - [Logstalgia](http://logstalgia.io) - [Loomio](https://www.loomio.org) -- [MagicMirror²](https://github.com/MichMich/MagicMirror) - [MaidSafe](http://maidsafe.net) - [Mailpile](https://www.mailpile.is) -- [Mailtrain](https://mailtrain.org/) - [Mautic](https://github.com/mautic/mautic) - [MediaCrush](https://github.com/MediaCrush/MediaCrush) (/!\ last update: Jan 23, 2015) - [microblog.pub](https://microblog.pub) @@ -122,7 +115,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Museek+](https://github.com/eLvErDe/museek-plus) - [Netrunner](https://github.com/mtgred/netrunner) - [Nibbleblog](http://www.nibbleblog.com) -- [Nitter](https://github.com/zedeus/nitter) (Twitter front-end focused on privacy) - [Nuage](https://nuage.kerjean.me/login) - [Ombi](https://github.com/tidusjar/Ombi) - [OpenBazaar](https://openbazaar.org) @@ -146,7 +138,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Privoxy](http://www.privoxy.org) - [ProcessMaker](http://www.processmaker.com) - [ProtonMail’s WebClient](https://github.com/ProtonMail/WebClient) -- [ProjeQtOr](https://www.projeqtor.org/en/product-en/downloads) - [PyLoad](https://github.com/pyload/pyload) - [Pulse](https://source.ind.ie/project/pulse-swift/tree/master) - [Pump.io](http://pump.io) @@ -154,13 +145,11 @@ The following list is a compiled wishlist of applications that would be nice-to- - [racktables](http://racktables.org) - [Race for the Galaxy](https://github.com/bnordli/rftg) - [Radarr](https://github.com/Radarr/Radarr) -- [Redmine](https://www.redmine.org) - [Request Tracker](https://bestpractical.com) - [Respawn 2.0](https://github.com/broncowdd/respawn) ( /!\ last update: 2015) - [Restya](http://restya.com) - [Retroshare](http://retroshare.net/downloads.html) - [SABnzbd](https://sabnzbd.org) -- [Samourai Dojo, Bitcoin coinjoin node] (https://github.com/Samourai-Wallet/samourai-dojo) - [ScenariChain-server](https://download.scenari.software/SCENARIchain-server/) - [Scramble, Browser-based PGP web mail](https://github.com/dcposch/scramble) - [Scribbleton](https://scribbleton.com) @@ -170,10 +159,8 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Simone](https://github.com/Kloadut/Simone) - [SocialHome](https://github.com/jaywink/socialhome) (Socialhome is best described as a federated personal profile with social networking functionality) (https://socialhome.network) - [Sonarr](https://sonarr.tv) -- [SpamGourmet](https://sourceforge.net/projects/spamgourmet/) - [Stackedit](https://stackedit.io) -- [StandardNotes](https://standardnotes.org) (a clean, simple, E2E-encrypted notes app) -- specifically, the server-side [StandardFile](https://standardfile.org) portion. -- [Streama](https://github.com/dularion/streama) +- [StandardNotes](https://standardnotes.org) (a clean, simple, E2E-encrypted notes app) -- specifically, the server-side [StandardFile](https://standardfile.org) portion - [Streisand](https://github.com/jlund/streisand) - [Subspace](https://github.com/subspacecloud/subspace) (A simple WireGuard VPN server GUI) - [Syspass](http://www.syspass.org/) @@ -194,9 +181,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [WebODF](http://webodf.org) - [webSync](http://furier.github.io/websync) - [WebTorrent](https://github.com/feross/webtorrent) -- [Wisemapping](http://www.wisemapping.com) - [Wireguard](https://www.wireguard.com/) -- [Xibo](https://github.com/xibosignage) - [Xonotic](http://xonotic.org) - [YesWiki](https://yeswiki.net) - [Zammad](https://github.com/zammad/zammad) From a200f84538b11d996bff59bb5880356d2ad99237 Mon Sep 17 00:00:00 2001 From: Plumf <plumf@open-plug.eu> Date: Mon, 30 Sep 2019 13:59:06 +0200 Subject: [PATCH 162/360] Removal software not be for server not free+added last update old repo --- apps_wishlist.md | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index c2015953..84d9d16c 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -14,15 +14,13 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Airtime](https://www.sourcefabric.org/en/airtime/) - [Ajenti](http://ajenti.org) - [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. -- [aMule](https://github.com/amule-project/amule) - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) -- [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) +- [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 2015) - [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) - [Beehive](https://github.com/muesli/beehive) - [Bludit](https://www.bludit.com) - [Blynk](https://github.com/blynkkk/blynk-library) - [Bookstack](https://www.bookstackapp.com/) -- [Browsepass](http://techualization.blogspot.de/2013/09/introducing-browsepass-keepass-on-web.html) - [btcpayserver](https://github.com/btcpayserver/btcpayserver) - [Candy](https://candy-chat.github.io/candy) - [CardDavMate](https://www.inf-it.com/open-source/clients/carddavmate) @@ -38,27 +36,26 @@ The following list is a compiled wishlist of applications that would be nice-to- - [CumulusClips](http://cumulusclips.org) - [Cyclos](https://www.cyclos.org) - [Darkwire.io](https://github.com/seripap/darkwire.io) -- [Deluge](http://deluge-torrent.org) (with WebUI) - [DirectoryLister](https://github.com/DirectoryLister/DirectoryLister) - [DNSchain](https://github.com/okTurtles/dnschain) - [eLabFTW](https://www.elabftw.net/) electronic lab notebook - [Emoncms](https://github.com/emoncms/emoncms) - [ERPnext](https://erpnext.com/download) - [EteSync](https://www.etesync.com/) -- [Ethersheet](https://github.com/ethersheet-collective/EtherSheet) -- [Fail2web](https://github.com/Sean-Der/fail2web) -- [Ferment](https://github.com/mmckegg/ferment) +- [Ethersheet](https://github.com/ethersheet-collective/EtherSheet) (/!\ last update: Avr 2017) +- [Fail2web](https://github.com/Sean-Der/fail2web) (/!\ last update: Avr 2017) +- [Ferment](https://github.com/mmckegg/ferment) (/!\ last update: Nov 2018) - [FEX](http://fex.rus.uni-stuttgart.de/) -- [FileTea](https://filetea.me) +- [FileTea](https://filetea.me) (/!\ last update: Jan 2014) - [FitTrackee](https://github.com/SamR1/FitTrackee) -- [FoOlSlide](http://foolcode.github.io/FoOlSlide/) Open source comicbook/manga management software +- [FoOlSlide](http://foolcode.github.io/FoOlSlide/) (/!\ last update: Dec 2017) - [Fossil](http://www.fossil-scm.org) -- [Framaslides](https://framagit.org/framasoft/framaslides/) +- [Framaslides](https://framagit.org/framasoft/framaslides/) (/!\ last update: Sept 2017) - [WebThings Gateway](https://iot.mozilla.org/gateway/) - [Geneweb](https://geneweb.tuxfamily.org) - [GetSimple CMS](http://get-simple.info) - [Git-annex](http://git-annex.branchable.com) -- [Gitit](https://github.com/jgm/gitit) +- [Gitit](https://github.com/jgm/gitit) (/!\ last update: Dec2018) - [Goaccess](https://goaccess.io) Web log analyser (replaces piwik without js tracking scripts) - [Gollum](https://github.com/gollum/gollum) - [Goploader](https://github.com/Depado/goploader) @@ -66,14 +63,13 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Guacamole](http://guac-dev.org) - [Habitica](https://habitica.com/) - [HackMD CE](https://github.com/hackmdio/hackmd) -- [Hackpad](https://github.com/dropbox/hackpad) +- [Hackpad](https://github.com/dropbox/hackpad) (/!\ last update: Jul 2017) - [Helpy](https://github.com/helpyio/helpy) - [Hexo](https://hexo.io/) -- [Hi Buddy](https://github.com/tOkeshu/hibuddy) (/!\ last update: 17 Feb 2015) -- [Hugo](http://gohugo.io) +- [Hi Buddy](https://github.com/tOkeshu/hibuddy) (/!\ last update: Feb 2015) - [Icecast 2](http://www.icecast.org) - [ikiwiki](http://ikiwiki.info) -- [img.bi](https://github.com/imgbi/img.bi) +- [img.bi](https://github.com/imgbi/img.bi) (/!\ last update: Jan 2016) - [InfCloud](https://www.inf-it.com/open-source/clients/infcloud) - [Invidious](https://github.com/omarroth/invidious) - [Invoice Ninja](https://www.invoiceninja.com) @@ -82,17 +78,17 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Joplin](http://joplin.cozic.net/) - [Jellyfin](https://github.com/jellyfin) - [JS Bin](http://jsbin.com/help/2-second-setup) -- [Kaiwa](http://getkaiwa.com) -- [Kin calendar](https://github.com/KinToday) -- [Kinto](https://github.com/Kinto/formbuilder) +- [Kaiwa](http://getkaiwa.com) (/!\ last update: Jan 2016 UNMAINTAINED) +- [Kin calendar](https://github.com/KinToday) (/!\ last update: Mar 2018) +- [Kinto](https://github.com/Kinto/formbuilder) ARCHIVED - [Kiwix](http://www.kiwix.org/) Offline wikipedia - [Known](https://withknown.com) - [Koel](http://koel.phanan.net) - [Kontalk](https://kontalk.org) - [Koozip](http://koozic.net) -- [KrISS feed](https://github.com/tontof/kriss_feed) -- [Koken](http://koken.me) -- [Kune](https://en.wikipedia.org/wiki/Kune_%28software%29) +- [KrISS feed](https://github.com/tontof/kriss_feed) (/!\ last update: Dec 2018) +- [Koken](http://koken.me) (/!\ last update: Nov 2016) +- [Kune](https://github.com/comunes/kune/) (/!\ last update: Dec 2017) - [L'atelier](https://github.com/jbl2024/latelier) - [Lessy](https://lessy.io) - [LibreNews-Server](https://librenews.io) From 16d5221f0ca78fcf2110db1feba9c9d9b909902a Mon Sep 17 00:00:00 2001 From: Plumf <45500657+Plumf@users.noreply.github.com> Date: Mon, 30 Sep 2019 14:54:18 +0200 Subject: [PATCH 163/360] Update apps_wishlist.md --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index 84d9d16c..33a337ae 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -99,6 +99,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Loomio](https://www.loomio.org) - [MaidSafe](http://maidsafe.net) - [Mailpile](https://www.mailpile.is) +- [Mailtrain](https://mailtrain.org/) - [Mautic](https://github.com/mautic/mautic) - [MediaCrush](https://github.com/MediaCrush/MediaCrush) (/!\ last update: Jan 23, 2015) - [microblog.pub](https://microblog.pub) From 5ea1c0f4f6ba0d71f00950e0d553beb2a7b45686 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 30 Sep 2019 18:47:20 +0000 Subject: [PATCH 164/360] =?UTF-8?q?Ajout=20Caisse=20Bliss=20service=20gest?= =?UTF-8?q?ion=20de=20caisse=20pour=20des=20=C3=A9v=C3=A8nements.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index f984463d..2015d590 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -26,6 +26,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Bookstack](https://www.bookstackapp.com/) - [Browsepass](http://techualization.blogspot.de/2013/09/introducing-browsepass-keepass-on-web.html) - [btcpayserver](https://github.com/btcpayserver/btcpayserver) +- [Caisse Bliss](https://framagit.org/tykayn/caisse-bliss) - [Candy](https://candy-chat.github.io/candy) - [CardDavMate](https://www.inf-it.com/open-source/clients/carddavmate) - [cgit](http://git.zx2c4.com/cgit/about) From bc8318a221e358b2aaee700b29a80c350da6851a Mon Sep 17 00:00:00 2001 From: Plumf <plumf@open-plug.eu> Date: Tue, 1 Oct 2019 01:20:51 +0200 Subject: [PATCH 165/360] Update commit -> just clean wishlist --- apps_packaging.md | 14 -------------- apps_packaging_fr.md | 3 --- apps_wishlist.md | 2 +- 3 files changed, 1 insertion(+), 18 deletions(-) delete mode 100644 apps_packaging.md delete mode 100644 apps_packaging_fr.md diff --git a/apps_packaging.md b/apps_packaging.md deleted file mode 100644 index ed24ce44..00000000 --- a/apps_packaging.md +++ /dev/null @@ -1,14 +0,0 @@ -# Apps packaging in progress - -<div class="alert alert-info">To add an apps in apps packaging in progress -a repository must exist in the community repository <a href="https://github.com/YunoHost-Apps/">YunoHost-Apps</a>.</div> - -The following list is a list of apps in the process of being packaged. - -[Edit this list](/write_documentation) to add the application you are packaging, or contribut to [package apps](/packaging_apps) yourself. - -- [Huginn](https://github.com/YunoHost-Apps/huginn_ynh) -- [Redmine](https://github.com/YunoHost-Apps/redmine_ynh) -- [Salut à Toi](https://github.com/YunoHost-Apps/sat_ynh) -- [Streama](https://github.com/YunoHost-Apps/streama_ynh) -- [Wisemapping](https://github.com/YunoHost-Apps/wisemapping_ynh) diff --git a/apps_packaging_fr.md b/apps_packaging_fr.md deleted file mode 100644 index 2433ccb4..00000000 --- a/apps_packaging_fr.md +++ /dev/null @@ -1,3 +0,0 @@ -# Apps en cours de packaging - -La liste des applications en cours de packaging n’est maintenue qu’en <a href="/apps_packaging_en">version anglaise</a>. Merci de vous y référer. diff --git a/apps_wishlist.md b/apps_wishlist.md index 84d9d16c..7e52407b 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -1,6 +1,6 @@ # Apps wishlist -<div class="alert alert-info">Before to add an app in wishlist please check your app is not already in official or community list: see the <a href="/apps_en">apps list</a></div> and <a href="/apps_packaging_en">apps packaging in progress</a> +<div class="alert alert-info">Before to add an app in wishlist please check your app is not already in official or community list: see the <a href="/apps_en">apps list</a></div> The following list is a compiled wishlist of applications that would be nice-to-have. From dc940bb5b1552d9be312cf96e6c31a160ab6ab0b Mon Sep 17 00:00:00 2001 From: yalh76 <yalh@yahoo.com> Date: Tue, 1 Oct 2019 22:04:40 +0200 Subject: [PATCH 166/360] First commit to donation --- donate | 25 +++++++++++++++++++++++++ index.md | 3 ++- index_ar.md | 3 ++- index_de.md | 3 ++- index_es.md | 3 ++- index_fr.md | 3 ++- index_it.md | 3 ++- 7 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 donate diff --git a/donate b/donate new file mode 100644 index 00000000..3c88974c --- /dev/null +++ b/donate @@ -0,0 +1,25 @@ +# What for? +Donations are used to cover infrastructure costs (servers, domain names, ..), communication (stickers, conference, ...) and possibly development on the long term. + +# 2019/2020 Budget + + * Revenu + * Donations via Liberapay : current is 45€/week, -> 2340€/year + * NLNet 20K€ + + * Expenses + * Server renting => 1000€ + * Forum: 14.4€/month => 172.80€/Year + * CI: 20€/mois to be confirmed => 240€/Year + * Bearnaise server migration bearnaise => 587.2€ + * Domain names => 150€ + * nohost.me : 11.99€HT/Year + * ynh.fr : 6.99€HT/Year (voir avec frju?) + * noho.st : ~35€ TTC/Year + * YunoHost.org :13.99€HT/Year + * YunoHost.com ??? 9.99€HT/Year + * labriqueinter.net ?? 12.49€Ht/Year + * internetcu.be ?? 17.99€HT/Year + * Communication => 200€ + * Travel (to go at conferencies) => 500€ + * Bank account 7x12€ => 100€ \ No newline at end of file diff --git a/index.md b/index.md index 21576d77..5feb2a24 100644 --- a/index.md +++ b/index.md @@ -23,7 +23,8 @@ <div class="main-links hidden-xs"> <a href="/whatsyunohost">About</a> <span class="colored-bar">•</span> <a href="https://forum.yunohost.org/c/announcement" target="_blank">Latest news</a> <span class="colored-bar">•</span> - <a href="/docs">Documentation</a> + <a href="/docs">Documentation</a> <span class="colored-bar">•</span> + <a href="https://donate.yunohost.org/">Donate</a> </div> </div><!-- teasing-part --> diff --git a/index_ar.md b/index_ar.md index 1e6f7574..3a495680 100644 --- a/index_ar.md +++ b/index_ar.md @@ -20,7 +20,8 @@ <div dir="auto" class="main-links hidden-xs"> <a href="/whatsyunohost">عن واي يونوهوست</a> <span class="colored-bar">•</span> <a href="https://forum.yunohost.org/c/announcement" target="_blank">آخر المستجدات</a> <span class="colored-bar">•</span> - <a href="/docs_ar">المستندات</a> + <a href="/docs_ar">المستندات</a> <span class="colored-bar">•</span> + <a href="https://donate.yunohost.org/">تبرع/a> </div> </div><!-- teasing-part --> diff --git a/index_de.md b/index_de.md index 5f679c8a..b324ad47 100644 --- a/index_de.md +++ b/index_de.md @@ -24,7 +24,8 @@ <div class="main-links hidden-xs"> <a href="/whatsyunohost">Über Yunohost</a> <span class="colored-bar">•</span> <a href="https://forum.yunohost.org/c/announcement" target="_blank">Letzte Nachrichten</a> <span class="colored-bar">•</span> - <a href="/docs">Dokumentation</a> + <a href="/docs">Dokumentation</a> <span class="colored-bar">•</span> + <a href="https://donate.yunohost.org/">Spenden</a> </div> </div><!-- teasing-part --> diff --git a/index_es.md b/index_es.md index b28e306c..b408427d 100644 --- a/index_es.md +++ b/index_es.md @@ -23,7 +23,8 @@ <div class="main-links hidden-xs"> <a href="/whatsyunohost">Acerca de</a> <span class="colored-bar">•</span> <a href="https://forum.yunohost.org/c/announcement" target="_blank">Últimas noticias</a> <span class="colored-bar">•</span> - <a href="/docs">Documentación</a> + <a href="/docs">Documentación</a> <span class="colored-bar">•</span> + <a href="https://donate.yunohost.org/">Donar</a> </div> </div><!-- teasing-part --> diff --git a/index_fr.md b/index_fr.md index d358e760..9dd58f21 100644 --- a/index_fr.md +++ b/index_fr.md @@ -19,7 +19,8 @@ <div class="main-links hidden-xs"> <a href="/whatsyunohost_fr">À propos</a> <span class="colored-bar">•</span> <a href="https://forum.yunohost.org/c/announcement" target="_blank">Dernières nouvelles</a> <span class="colored-bar">•</span> - <a href="/docs_fr">Documentation</a> + <a href="/docs_fr">Documentation</a> <span class="colored-bar">•</span> + <a href="https://donate.yunohost.org/">Faire un don</a> </div> </div><!-- teasing-part --> diff --git a/index_it.md b/index_it.md index ee0bc581..870ec5c3 100644 --- a/index_it.md +++ b/index_it.md @@ -24,7 +24,8 @@ <div class="main-links hidden-xs"> <a href="/whatsyunohost">A proposito</a> <span class="colored-bar">•</span> <a href="https://forum.yunohost.org/c/announcement" target="_blank">Ultime notizie</a> <span class="colored-bar">•</span> - <a href="/docs">Documentazione</a> + <a href="/docs">Documentazione</a> <span class="colored-bar">•</span> + <a href="https://donate.yunohost.org/">Donare</a> </div> </div><!-- teasing-part --> From 4cdd9b68f5c8cad8e00d91e2d9c84b62dde1a0ed Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Tue, 1 Oct 2019 23:54:50 +0200 Subject: [PATCH 167/360] Rename donate to donate.md --- donate => donate.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename donate => donate.md (96%) diff --git a/donate b/donate.md similarity index 96% rename from donate rename to donate.md index 3c88974c..58cefc50 100644 --- a/donate +++ b/donate.md @@ -22,4 +22,4 @@ Donations are used to cover infrastructure costs (servers, domain names, ..), co * internetcu.be ?? 17.99€HT/Year * Communication => 200€ * Travel (to go at conferencies) => 500€ - * Bank account 7x12€ => 100€ \ No newline at end of file + * Bank account 7x12€ => 100€ From ca7f38d9a802fa66926d79906082120612815b7e Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Wed, 2 Oct 2019 00:10:27 +0200 Subject: [PATCH 168/360] Improve formating of the budget --- donate.md | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/donate.md b/donate.md index 58cefc50..1690d749 100644 --- a/donate.md +++ b/donate.md @@ -1,25 +1,29 @@ # What for? -Donations are used to cover infrastructure costs (servers, domain names, ..), communication (stickers, conference, ...) and possibly development on the long term. +Donations are used to cover infrastructure costs (servers, domain names, ..), communication (stickers, conference, ...) and possibly development on the long term. Below is a draft of budget detailing our expected expenses and revenues # 2019/2020 Budget - * Revenu - * Donations via Liberapay : current is 45€/week, -> 2340€/year - * NLNet 20K€ +## Expected revenues - * Expenses - * Server renting => 1000€ - * Forum: 14.4€/month => 172.80€/Year - * CI: 20€/mois to be confirmed => 240€/Year - * Bearnaise server migration bearnaise => 587.2€ - * Domain names => 150€ - * nohost.me : 11.99€HT/Year - * ynh.fr : 6.99€HT/Year (voir avec frju?) - * noho.st : ~35€ TTC/Year - * YunoHost.org :13.99€HT/Year - * YunoHost.com ??? 9.99€HT/Year - * labriqueinter.net ?? 12.49€Ht/Year - * internetcu.be ?? 17.99€HT/Year - * Communication => 200€ - * Travel (to go at conferencies) => 500€ - * Bank account 7x12€ => 100€ +* Donations via Liberapay: current is 45€/week, so about 2340€/year +* Grant from NLNet: 20K€, to be used for R&D + +## Expected expenses + +* Server renting: ~1000€ + * Forum: 14.4€/month: 172.80€/Year + * CI: 20€/mois to be confirmed: 240€/Year + * Bearnaise server migration bearnaise: 587.2€ +* Domain names: ~150€ + * nohost.me: 11.99€HT/Year + * ynh.fr: 6.99€HT/Year (voir avec frju?) + * noho.st: ~35€ TTC/Year + * YunoHost.org: 13.99€HT/Year + * YunoHost.com: 9.99€HT/Year + * labriqueinter.net: 12.49€Ht/Year + * internetcu.be: 17.99€HT/Year +* Communication: ~200€ +* Travel (e.g. to go to conferences): ~500€ +* Bank account fees: 7x12€ => ~100€ + +Total is about 2000€ From f46a46a421194d6998d7f47b5c3c9b494827d62d Mon Sep 17 00:00:00 2001 From: Arthur Lutz <arthur.lutz@logilab.fr> Date: Wed, 2 Oct 2019 12:08:48 +0200 Subject: [PATCH 169/360] add smokeping --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index 2015d590..cc084d95 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -171,6 +171,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Simone](https://github.com/Kloadut/Simone) - [SocialHome](https://github.com/jaywink/socialhome) (Socialhome is best described as a federated personal profile with social networking functionality) (https://socialhome.network) - [Sonarr](https://sonarr.tv) +- [smokeping](https://packages.debian.org/buster/smokeping) - [SpamGourmet](https://sourceforge.net/projects/spamgourmet/) - [Stackedit](https://stackedit.io) - [StandardNotes](https://standardnotes.org) (a clean, simple, E2E-encrypted notes app) -- specifically, the server-side [StandardFile](https://standardfile.org) portion. From 2d59689d64783e16b4eb1e8a0d19debd200c6670 Mon Sep 17 00:00:00 2001 From: Plumf <plumf@open-plug.eu> Date: Wed, 2 Oct 2019 14:46:48 +0200 Subject: [PATCH 170/360] Delete old repo (more one years) + add repo --- apps_wishlist.md | 192 +++++++++++++++++------------------------------ 1 file changed, 69 insertions(+), 123 deletions(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index 51961815..6ad9a452 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -11,179 +11,125 @@ The following list is a compiled wishlist of applications that would be nice-to- - [List of awesome Node.js projects](https://github.com/sqreen/awesome-nodejs-projects) - [List of SIP softwares/applications](https://en.wikipedia.org/wiki/List_of_SIP_software#Free_and_open-source_license) - [10er10](https://github.com/dready92/10er10) -- [Airtime](https://www.sourcefabric.org/en/airtime/) -- [Ajenti](http://ajenti.org) -- [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. +- [Ajenti](http://ajenti.org) / [github](https://github.com/ajenti/ajenti/) +- [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. / [github](https://github.com/akaunting/akaunting) - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) -- [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 2015) -- [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) +- [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) / [github](https://github.com/Bitmessage/PyBitmessage) - [Beehive](https://github.com/muesli/beehive) -- [Bludit](https://www.bludit.com) +- [Bludit](https://www.bludit.com) / [github](https://github.com/bludit/bludit) - [Blynk](https://github.com/blynkkk/blynk-library) -- [Bookstack](https://www.bookstackapp.com/) +- [Bookstack](https://www.bookstackapp.com/) / [github](https://github.com/BookStackApp/BookStack) - [btcpayserver](https://github.com/btcpayserver/btcpayserver) -- [Candy](https://candy-chat.github.io/candy) -- [CardDavMate](https://www.inf-it.com/open-source/clients/carddavmate) - [cgit](http://git.zx2c4.com/cgit/about) -- [CheckUp](https://sourcegraph.github.io/checkup) -- [Cloud torrent](https://github.com/jpillora/cloud-torrent) +- [CheckUp](https://sourcegraph.github.io/checkup) / [github](https://github.com/sourcegraph/checkup) - [Cockpit](http://cockpit-project.org/) - [Commafeed](https://github.com/Athou/commafeed) -- [Converse.js](https://conversejs.org) +- [Converse.js](https://conversejs.org) / [github](https://github.com/jcbrand/converse.js) - [Cozy](https://github.com/cozy) -- [Cronkeep](https://github.com/cronkeep/cronkeep) - [Croodle](https://github.com/jelhan/croodle) Schedule a date or to do a poll on a general topics, with client-side encryption. -- [CumulusClips](http://cumulusclips.org) -- [Cyclos](https://www.cyclos.org) - [Darkwire.io](https://github.com/seripap/darkwire.io) - [DirectoryLister](https://github.com/DirectoryLister/DirectoryLister) -- [DNSchain](https://github.com/okTurtles/dnschain) -- [eLabFTW](https://www.elabftw.net/) electronic lab notebook +- [eLabFTW](https://www.elabftw.net/) electronic lab notebook / [github](https://github.com/elabftw/elabftw) - [Emoncms](https://github.com/emoncms/emoncms) -- [ERPnext](https://erpnext.com/download) -- [EteSync](https://www.etesync.com/) -- [Ethersheet](https://github.com/ethersheet-collective/EtherSheet) (/!\ last update: Avr 2017) -- [Fail2web](https://github.com/Sean-Der/fail2web) (/!\ last update: Avr 2017) -- [Ferment](https://github.com/mmckegg/ferment) (/!\ last update: Nov 2018) +- [ERPnext](https://erpnext.com/download) / [github](https://github.com/frappe/erpnext) +- [EteSync](https://www.etesync.com/) / [github](https://github.com/etesync) - [FEX](http://fex.rus.uni-stuttgart.de/) -- [FileTea](https://filetea.me) (/!\ last update: Jan 2014) - [FitTrackee](https://github.com/SamR1/FitTrackee) -- [FoOlSlide](http://foolcode.github.io/FoOlSlide/) (/!\ last update: Dec 2017) - [Fossil](http://www.fossil-scm.org) -- [Framaslides](https://framagit.org/framasoft/framaslides/) (/!\ last update: Sept 2017) -- [WebThings Gateway](https://iot.mozilla.org/gateway/) -- [Geneweb](https://geneweb.tuxfamily.org) -- [GetSimple CMS](http://get-simple.info) -- [Git-annex](http://git-annex.branchable.com) -- [Gitit](https://github.com/jgm/gitit) (/!\ last update: Dec2018) -- [Goaccess](https://goaccess.io) Web log analyser (replaces piwik without js tracking scripts) +- [WebThings Gateway](https://iot.mozilla.org/gateway/) [github](https://github.com/mozilla-iot/) +- [Geneweb](https://geneweb.tuxfamily.org) / [github](https://github.com/geneweb/geneweb) +- [GetSimple CMS](http://get-simple.info) / [github](https://github.com/GetSimpleCMS/GetSimpleCMS) +- [Goaccess](https://goaccess.io) Web log analyser (replaces piwik without js tracking scripts) / [github](https://github.com/allinurl/goaccess) - [Gollum](https://github.com/gollum/gollum) - [Goploader](https://github.com/Depado/goploader) - [Granary](https://github.com/snarfed/granary) - [Guacamole](http://guac-dev.org) -- [Habitica](https://habitica.com/) +- [Habitica](https://habitica.com/) / [github](https://github.com/HabitRPG/habitica) - [HackMD CE](https://github.com/hackmdio/hackmd) -- [Hackpad](https://github.com/dropbox/hackpad) (/!\ last update: Jul 2017) - [Helpy](https://github.com/helpyio/helpy) -- [Hexo](https://hexo.io/) -- [Hi Buddy](https://github.com/tOkeshu/hibuddy) (/!\ last update: Feb 2015) -- [Icecast 2](http://www.icecast.org) +- [Hexo](https://hexo.io/) / [github](https://github.com/hexojs/hexo) +- [Icecast 2](http://www.icecast.org) / [gitlab](https://gitlab.xiph.org/xiph/icecast-server/) - [ikiwiki](http://ikiwiki.info) -- [img.bi](https://github.com/imgbi/img.bi) (/!\ last update: Jan 2016) -- [InfCloud](https://www.inf-it.com/open-source/clients/infcloud) - [Invidious](https://github.com/omarroth/invidious) -- [Invoice Ninja](https://www.invoiceninja.com) -- [InvoicePlane](https://invoiceplane.com) -- [IPFS](https://ipfs.io) -- [Joplin](http://joplin.cozic.net/) +- [Invoice Ninja](https://www.invoiceninja.com) / [github](https://github.com/invoiceninja/invoiceninja) +- [InvoicePlane](https://invoiceplane.com) / [github](https://github.com/InvoicePlane/InvoicePlane) +- [IPFS](https://ipfs.io) / [github](https://github.com/ipfs/ipfs) +- [Joplin](http://joplin.cozic.net/) / [github](https://github.com/laurent22/joplin) - [Jellyfin](https://github.com/jellyfin) -- [JS Bin](http://jsbin.com/help/2-second-setup) -- [Kaiwa](http://getkaiwa.com) (/!\ last update: Jan 2016 UNMAINTAINED) -- [Kin calendar](https://github.com/KinToday) (/!\ last update: Mar 2018) -- [Kinto](https://github.com/Kinto/formbuilder) ARCHIVED -- [Kiwix](http://www.kiwix.org/) Offline wikipedia -- [Known](https://withknown.com) -- [Koel](http://koel.phanan.net) -- [Kontalk](https://kontalk.org) -- [Koozip](http://koozic.net) -- [KrISS feed](https://github.com/tontof/kriss_feed) (/!\ last update: Dec 2018) -- [Koken](http://koken.me) (/!\ last update: Nov 2016) -- [Kune](https://github.com/comunes/kune/) (/!\ last update: Dec 2017) +- [JS Bin](http://jsbin.com/help/2-second-setup) / [github](https://github.com/jsbin/) +- [Kiwix](http://www.kiwix.org/) Offline wikipedia / [github](https://github.com/kiwix/) +- [Known](https://withknown.com) / [github](https://github.com/idno/known) +- [Koel](http://koel.phanan.net) / [github](https://github.com/phanan/koel) +- [Kontalk](https://kontalk.org) / [github](https://github.com/kontalk) +- [Koozip](http://koozic.net) / [github](https://github.com/DocMarty84/koozic) - [L'atelier](https://github.com/jbl2024/latelier) -- [Lessy](https://lessy.io) -- [LibreNews-Server](https://librenews.io) +- [Lessy](https://lessy.io) / [github](https://github.com/lessy-community/lessy) - [LibreOffice Online](https://wiki.documentfoundation.org/ReleaseNotes/5.3/fr#LibreOffice_Online) -- [LiquidSoap](http://savonet.sourceforge.net/) +- [LiquidSoap](http://savonet.sourceforge.net/) / [github](https://github.com/savonet/liquidsoap) - [LocomotiveCMS](https://github.com/locomotivecms/engine) -- [Logstalgia](http://logstalgia.io) -- [Loomio](https://www.loomio.org) -- [MaidSafe](http://maidsafe.net) -- [Mailpile](https://www.mailpile.is) -- [Mailtrain](https://mailtrain.org/) +- [Loomio](https://www.loomio.org) / [github](https://github.com/loomio/loomio/) +- [MaidSafe](http://maidsafe.net) / [github](https://github.com/maidsafe) +- [Mailpile](https://www.mailpile.is) / [github](https://github.com/mailpile/Mailpile) +- [Mailtrain](https://mailtrain.org/) / [github](https://github.com/Mailtrain-org/mailtrain) - [Mautic](https://github.com/mautic/mautic) -- [MediaCrush](https://github.com/MediaCrush/MediaCrush) (/!\ last update: Jan 23, 2015) -- [microblog.pub](https://microblog.pub) -- [MinigalNano](https://github.com/sebsauvage/MinigalNano) (/!\ last update: Jun 24, 2016) -- [Mirakel](http://mirakel.azapps.de/taskwarrior.html) (/!\ SSL-Warning) -- [Modoboa](http://modoboa.org) +- [microblog.pub](https://microblog.pub) / [github](https://github.com/tsileo/microblog.pub) +- [Mirakel](http://mirakel.azapps.de/taskwarrior.html) / [github](https://github.com/GothenburgBitFactory/taskwarrior) (/!\ SSL-Warning) +- [Modoboa](http://modoboa.org) / [github](https://github.com/modoboa/) - [MotionEye](https://github.com/ccrisan/motioneye) - [MPD](http://www.musicpd.org) -- [MyBB](https://mybb.com/) +- [MyBB](https://mybb.com/) / [github](https://github.com/mybb) - [Museek+](https://github.com/eLvErDe/museek-plus) - [Netrunner](https://github.com/mtgred/netrunner) -- [Nibbleblog](http://www.nibbleblog.com) -- [Nuage](https://nuage.kerjean.me/login) +- [Nibbleblog](http://www.nibbleblog.com)/ [github](https://github.com/dignajar/nibbleblog) +- [Nuage](https://nuage.kerjean.me/login) / [github](https://github.com/mickael-kerjean/filestash) - [Ombi](https://github.com/tidusjar/Ombi) -- [OpenBazaar](https://openbazaar.org) -- [openHAB](https://www.openhab.org/) - Smart home platform. -- [OpenJabNab](https://github.com/OpenJabNab/OpenJabNab) (/!\ last update: Apr 30, 2016) +- [OpenBazaar](https://openbazaar.org) / [github](https://github.com/openbazaar) +- [openHAB](https://www.openhab.org/) - Smart home platform. / [github](https://github.com/openhab) - [OpenProject](https://github.com/opf/openproject) - [OpenSourceBilling](https://github.com/vteams/open-source-billing) -- [OX Open-Xchange](https://www.open-xchange.com) Linux groupware solution +- [OX Open-Xchange](https://www.open-xchange.com) Linux groupware solution / [github](https://github.com/open-xchange/) - [Paperless](https://github.com/danielquinn/paperless) - [Paperwork](http://paperwork.rocks) -- [Passbolt](https://www.passbolt.com) Passwords manager -- [pdfy](https://github.com/joepie91/pdfy) (/!\ last update: Aug 5, 2014) -- [Pelias](https://github.com/pelias/pelias) -- [Peps](https://github.com/MLstate/PEPS) -- [PHPList](http://www.phplist.com) -- [PHProxy](http://sourceforge.net/projects/poxy) -- [Phraseanet](https://docs.phraseanet.com/3.8/fr/index.html#) -- [Pico](http://picocms.org) -- [Pix](http://pix.toile-libre.org) +- [Passbolt](https://www.passbolt.com) Passwords manager / [github](https://github.com/passbolt) +- [Pelias](https://github.com/pelias/pelias)) +- [PHPList](http://www.phplist.com) / [github](https://github.com/phpList) +- [Phraseanet](https://docs.phraseanet.com/3.8/fr/index.html#) / [github](https://github.com/alchemy-fr/Phraseanet-Docs) +- [Pico](http://picocms.org) / [github](https://github.com/picocms/Pico) - [Playmaker](https://github.com/NoMore201/playmaker) - [Privoxy](http://www.privoxy.org) - [ProcessMaker](http://www.processmaker.com) - [ProtonMail’s WebClient](https://github.com/ProtonMail/WebClient) - [PyLoad](https://github.com/pyload/pyload) -- [Pulse](https://source.ind.ie/project/pulse-swift/tree/master) -- [Pump.io](http://pump.io) +- [Pump.io](http://pump.io) / [github](https://github.com/pump-io/pump.io) - [qBittorrent](https://github.com/qbittorrent/qBittorrent) -- [racktables](http://racktables.org) -- [Race for the Galaxy](https://github.com/bnordli/rftg) +- [racktables](http://racktables.org) / [github](https://github.com/RackTables/racktables) - [Radarr](https://github.com/Radarr/Radarr) -- [Request Tracker](https://bestpractical.com) -- [Respawn 2.0](https://github.com/broncowdd/respawn) ( /!\ last update: 2015) -- [Restya](http://restya.com) -- [Retroshare](http://retroshare.net/downloads.html) -- [SABnzbd](https://sabnzbd.org) +- [Request Tracker](https://bestpractical.com) / [github](https://github.com/bestpractical/rt) +- [Restya](http://restya.com) / [github](https://github.com/RestyaPlatform/board/) +- [Retroshare](https://retroshare.cc/) / [github](https://github.com/RetroShare/RetroShare) - [ScenariChain-server](https://download.scenari.software/SCENARIchain-server/) -- [Scramble, Browser-based PGP web mail](https://github.com/dcposch/scramble) -- [Scribbleton](https://scribbleton.com) - [Scuttlebutt Pub](https://www.scuttlebutt.nz/contributing) -- [ShareLatex](https://www.sharelatex.com) -- [Shleuder](http://schleuder2.nadir.org) -- [Simone](https://github.com/Kloadut/Simone) +- [ShareLatex](https://www.sharelatex.com) / [github](https://github.com/overleaf/overleaf) +- [Shleuder](https://schleuder.org/) - [SocialHome](https://github.com/jaywink/socialhome) (Socialhome is best described as a federated personal profile with social networking functionality) (https://socialhome.network) -- [Sonarr](https://sonarr.tv) -- [Stackedit](https://stackedit.io) -- [StandardNotes](https://standardnotes.org) (a clean, simple, E2E-encrypted notes app) -- specifically, the server-side [StandardFile](https://standardfile.org) portion +- [Sonarr](https://sonarr.tv) / [github](https://github.com/Sonarr/Sonarr) +- [Stackedit](https://stackedit.io) / [github](https://github.com/benweet/stackedit) +- [StandardNotes](https://standardnotes.org) (a clean, simple, E2E-encrypted notes app) -- specifically, the server-side [StandardFile](https://standardfile.org) portion / [github](https://github.com/standardnotes/web) - [Streisand](https://github.com/jlund/streisand) - [Subspace](https://github.com/subspacecloud/subspace) (A simple WireGuard VPN server GUI) -- [Syspass](http://www.syspass.org/) -- [Taiga](https://taiga.io) -- [Tania](http://gettania.org/) -- [Taskwarrior](https://taskwarrior.org) -- [TMate](https://tmate.io/) -- [TorChat](https://github.com/prof7bit/TorChat) -- [Torrent Tunes](https://github.com/tchoulihan/torrenttunes-client) -- [Total Respawn](https://github.com/broncowdd/TotalRespawn) +- [Syspass](http://www.syspass.org/) / [github](https://github.com/nuxsmin/sysPass) +- [Taiga](https://taiga.io) / [github](https://github.com/taigaio/) +- [Taskwarrior](https://taskwarrior.org) / [github](https://github.com/GothenburgBitFactory/taskwarrior) +- [TMate](https://tmate.io/) / [github](https://github.com/tmate-io/tmate) - [Tracim](https://github.com/tracim/tracim) -- [Twister](http://twister.net.co) -- [TwitRSS.me](http://twitrss.me/) ([Github](https://github.com/ciderpunx/twitrssme)) Scrapes Twitter to create RSS feeds. -- [Unvis](https://unv.is/) ([Github](https://github.com/lodjuret/unvis.it)) -- [Vaultier](http://www.vaultier.org) -- [Volumio](https://volumio.org) -- [Webmpc](https://github.com/ushis/webmpc) -- [WebODF](http://webodf.org) -- [webSync](http://furier.github.io/websync) -- [WebTorrent](https://github.com/feross/webtorrent) -- [Wireguard](https://www.wireguard.com/) -- [Xonotic](http://xonotic.org) -- [YesWiki](https://yeswiki.net) +- [Twister](http://twister.net.co) / [github](https://github.com/miguelfreitas/twister-core/) +- [TwitRSS.me](http://twitrss.me/) / [Github](https://github.com/ciderpunx/twitrssme) Scrapes Twitter to create RSS feeds. +- [Volumio](https://volumio.org) / [github](https://github.com/volumio) +- [WebODF](http://webodf.org) / [github](https://github.com/webodf/WebODF) +- [Wireguard](https://www.wireguard.com/) / [git](https://git.zx2c4.com/WireGuard/) +- [Xonotic](http://xonotic.org) / [gitlab](https://gitlab.com/xonotic) +- [YesWiki](https://yeswiki.net) / [github](https://github.com/YesWiki/yeswiki) - [Zammad](https://github.com/zammad/zammad) - [ZeroTier](https://github.com/zerotier/ZeroTierOne) -- [ZNC](http://wiki.znc.in/ZNC) -- [Zone-project](https://github.com/descl/ZONE) - [Zoneminder](https://github.com/ZoneMinder/zoneminder) -- [Zulip](https://zulipchat.com/) +- [Zulip](https://zulipchat.com/) / [github](https://github.com/zulip/zulip) From a4e44650e293cd6de93e650491e1cf2d63bb913f Mon Sep 17 00:00:00 2001 From: Arthur Lutz <arthur.lutz@logilab.fr> Date: Wed, 2 Oct 2019 17:53:52 +0200 Subject: [PATCH 171/360] Update apps_wishlist.md Co-Authored-By: Plumf <45500657+Plumf@users.noreply.github.com> --- apps_wishlist.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index cc084d95..ca38d89e 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -171,7 +171,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Simone](https://github.com/Kloadut/Simone) - [SocialHome](https://github.com/jaywink/socialhome) (Socialhome is best described as a federated personal profile with social networking functionality) (https://socialhome.network) - [Sonarr](https://sonarr.tv) -- [smokeping](https://packages.debian.org/buster/smokeping) +- [smokeping](https://packages.debian.org/buster/smokeping) / [github](https://github.com/oetiker/SmokePing) - [SpamGourmet](https://sourceforge.net/projects/spamgourmet/) - [Stackedit](https://stackedit.io) - [StandardNotes](https://standardnotes.org) (a clean, simple, E2E-encrypted notes app) -- specifically, the server-side [StandardFile](https://standardfile.org) portion. From b9f17ea29e2e3fcca749fa209eafaf79b90d6a5b Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Thu, 3 Oct 2019 15:19:20 +0200 Subject: [PATCH 172/360] Small tweaks and polishing for the landpage --- index.md | 68 +++++++++++++++++++++-------------------------------- index_fr.md | 64 +++++++++++++++++++------------------------------ 2 files changed, 51 insertions(+), 81 deletions(-) diff --git a/index.md b/index.md index 21576d77..7335ef10 100644 --- a/index.md +++ b/index.md @@ -30,7 +30,7 @@ <div class="boring-part" markdown="1"> - <h1>YunoHost <small>is a server operating system aiming to make self-hosting accessible to everyone.</small></h1> + <h1>YunoHost <small>is an operating system designed for you to easily manage a server for your friends, association or enterprise. <a href="/whatsyunohost" style="font-size:0.6em;">Learn more</a></small></h1> <div class="home-panel"> <img src="/images/home_panel.jpg" /> @@ -39,12 +39,13 @@ <div class="call-to-action"> <a class="btn btn-primary btn-lg" href="/try">Try it</a> <a class="btn btn-success btn-lg" href="/install">Get started</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-6-release-sortie-de-yunohost-3-6/8359">YunoHost v3.6</a></small></p> + <h2 style="margin-top: 0"><small><a href="https://forum.yunohost.org/c/announcement">Latest news</a></small></h2> </div> + <div class="row cf"> - <div class="col-md-7"> - <h1>Install <small>your server with ease, you already have everything at home</small></h1> + <div class="col-md-7 text-right"> + <h1>Setup <small>your server with ease, you already have everything at home</small></h1> <p><br /><a href="/hardware">See the requirements</a></p> </div> <div class="col-md-4"> @@ -57,59 +58,45 @@ <hr /> <div class="row cf"> - <div class="col-md-4"> - <div class="feature-pic"> - <img src="/images/home_enjoy.jpg" /> - </div> - </div> - <div class="col-md-7 text-right"> - <h1>Enjoy <small>your apps and make your little corner of Internet</small></h1> - <p><br /><a href="/apps">List of available apps</a></p> - </div> - </div> - - <hr /> - - <div class="row cf"> - <div class="col-md-7"> - <h1>Manage <small>your server the way you like: via Web, mobile or command-line</small></h1> - <p><br /><a href="/try">Try the administration</a></p> - </div> <div class="col-md-4"> <div class="feature-pic"> <img src="/images/home_manage.jpg" /> </div> </div> + <div class="col-md-7"> + <h1>Manage <small>your server from a clean and simple web interface</small></h1> + <p><br /><a href="/try">Try the administration</a></p> + </div> </div> <hr /> <div class="row cf"> - <div class="col-md-4 button-list"> - <a class="btn btn-lg btn-block btn-primary" href="/whatsyunohost">About YunoHost</a> - <a class="btn btn-lg btn-block btn-info" href="/docs">Documentation</a> - <a class="btn btn-lg btn-block btn-success" href="/contribute">Get involved</a> - <a class="btn btn-lg btn-block btn-warning" href="https://forum.yunohost.org/" target="_blank">Forum</a> - <a class="btn btn-lg btn-block btn-default" href="chat_rooms_en" target="_blank">Chat rooms</a> - <a class="btn btn-lg btn-block btn-danger" href="https://forum.yunohost.org/c/announcement">Latest news</a> - <a class="btn btn-lg btn-block btn-danger btn-support" href="/help_fr">Support</a> - </div> <div class="col-md-7 text-right"> - <h1>Explore <small>what you can do with a server, and why it is important</small></h1> - <p><br /><a href="/docs">Read the documentation</a></p> + <h1>Install <small>applications to build your little corner of Internet</small></h1> + <p><br /><a href="/apps">Browse available apps</a></p> + </div> + <div class="col-md-4"> + <div class="feature-pic"> + <img src="/images/home_enjoy.jpg" /> + </div> </div> </div> <hr /> - <div class="text-center"> - <h1>Hey! We are humans!<br /><small> If you have questions, problems or if you are just an enthusiast, leave a message on our chatroom by clicking on the button below <span class="glyphicon glyphicon-share-alt"></span> </small></h1> + <div class="row cf"> + <div class="text-center"> + <h1>Hey! We are humans!<br /> + <small>If you have questions, issues or if you are just an enthusiast, come and leave a message on our forum or chatroom!</small></h1> - <p class="liberapay"> - <a href="https://liberapay.com/YunoHost" target="_blank"><img src="/images/liberapay_logo.svg" alt="Donation button" title="Liberapay" /></a> - </p> - - </div> + <div class="col-md-4 col-md-offset-4 button-list"> + <a class="btn btn-lg btn-block btn-info" href="/docs"><span class="glyphicon glyphicon-book"></span> Documentation</a> + <a class="btn btn-lg btn-block btn-danger btn-support" href="/help_fr"><span class="glyphicon glyphicon-comment"></span> Forum and chat</a> + <a class="btn btn-lg btn-block btn-success" href="/contribute"><span class="glyphicon glyphicon-heart"></span> Get involved</a> + <a class="btn btn-lg btn-block btn-primary" href="https://donate.yunohost.org/" style="background-color: #ffd236; border-color: #ffd236;"><span class="glyphicon glyphicon-usd"></span> Donate</a> + </div> + </div> </div><!-- boring-part --> @@ -146,4 +133,3 @@ }); </script> - diff --git a/index_fr.md b/index_fr.md index d358e760..e2d1faf7 100644 --- a/index_fr.md +++ b/index_fr.md @@ -26,7 +26,7 @@ <div class="boring-part" markdown="1"> - <h1>YunoHost <small>est un outil qui vous permet d’installer et d’utiliser facilement votre propre serveur.</small></h1> + <h1>YunoHost <small>est un système conçu pour gérer facilement un serveur pour ses amis, son asso ou son entreprise. <a href="/whatsyunohost" style="font-size:0.6em;">En savoir plus</a></small></h1> <div class="home-panel"> <img src="/images/home_panel.jpg" /> @@ -35,13 +35,13 @@ <div class="call-to-action"> <a class="btn btn-primary btn-lg" href="/try_fr">Essayer</a> <a class="btn btn-success btn-lg" href="/install_fr">Installer</a> - <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-6-release-sortie-de-yunohost-3-6/8359">YunoHost v3.6</a></small></p> + <h2 style="margin-top: 0"><small><a href="https://forum.yunohost.org/c/announcement">Dernières nouvelles</a></small></h2> </div> <hr /> <div class="row cf"> - <div class="col-md-7"> + <div class="col-md-7 text-right"> <h1>Installez <small>votre serveur simplement, vous avez déjà tout ce qu’il faut à la maison</small></h1> <p><a href="/hardware_fr">Voir les prérequis</a></p> </div> @@ -55,60 +55,44 @@ <hr /> <div class="row cf"> - <div class="col-md-4"> - <div class="feature-pic"> - <img src="/images/home_enjoy.jpg" /> - </div> - </div> - <div class="col-md-7 text-right"> - <h1>Profitez <small>de vos applications web, et fabriquez votre coin d’Internet</small></h1> - <p><br /><a href="/apps_fr">Liste des applications disponibles</a></p> - </div> - </div> - - <hr /> - - <div class="row cf"> - <div class="col-md-7"> - <h1>Gérez <small>votre serveur comme vous le voulez : via web, mobile ou ligne de commande</small></h1> - <p><br /><a href="/try_fr">Essayez l’interface d’administration</a></p> - </div> <div class="col-md-4"> <div class="feature-pic"> <img src="/images/home_manage.jpg" /> </div> </div> + <div class="col-md-7"> + <h1>Gérez <small>votre serveur depuis une interface web simple et propre</small></h1> + <p><br /><a href="/try_fr">Essayez l’interface d’administration</a></p> + </div> </div> <hr /> <div class="row cf"> - <div class="col-md-4 button-list"> - - <a class="btn btn-lg btn-block btn-primary" href="/whatsyunohost_fr">Qu’est-ce que YunoHost ?</a> - <a class="btn btn-lg btn-block btn-info" href="/docs_fr">Documentation</a> - <a class="btn btn-lg btn-block btn-success" href="/contribute_fr">Comment contribuer</a> - <a class="btn btn-lg btn-block btn-warning" href="https://forum.yunohost.org" target="_blank">Forum</a> - <a class="btn btn-lg btn-block btn-default" href="chat_rooms_fr" target="_blank">Salons de discussions</a> - <a class="btn btn-lg btn-block btn-danger" href="https://forum.yunohost.org/c/announcement">Dernières nouvelles</a> - <a class="btn btn-lg btn-block btn-danger btn-support" href="/help_fr">Support</a> - - </div> <div class="col-md-7 text-right"> - <h1>Explorez <small>les possibilités de votre serveur, et apprenez pourquoi c’est important</small></h1> - <p><br /><a href="/docs_fr">Lire la documentation</a></p> + <h1>Construisez <small>votre petit bout d'Internet en ajoutant des applications en quelques clics</small></h1> + <p><br /><a href="/apps">Parcourir les applications disponibles</a></p> + </div> + <div class="col-md-4"> + <div class="feature-pic"> + <img src="/images/home_enjoy.jpg" /> + </div> </div> </div> <hr /> - <div class="text-center"> - <h1>Hey ! Nous sommes humains !<br /><small> Si vous avez une question, un problème, ou que vous êtes tout simplement intéressé, passez dire « Bonjour » sur notre salon de discussion en cliquant sur le bouton en bas <span class="glyphicon glyphicon-share-alt"></span> </small></h1> + <div class="row cf"> + <div class="text-center"> + <h1>Hey ! Nous sommes humains !<br /> + <small>Si vous avez une question, un problème, ou que vous êtes tout simplement intéressé, passez dire « Bonjour » sur notre forum ou le chat!</small></h1> -<p class="liberapay"> - <a href="https://liberapay.com/YunoHost" target="_blank"><img src="/images/liberapay_logo.svg" alt="Donation button" title="Liberapay" /></a> - </p> - + <div class="col-md-4 col-md-offset-4 button-list"> + <a class="btn btn-lg btn-block btn-info" href="/docs"><span class="glyphicon glyphicon-book"></span> Documentation</a> + <a class="btn btn-lg btn-block btn-danger btn-support" href="/help_fr"><span class="glyphicon glyphicon-comment"></span> Forum et chat</a> + <a class="btn btn-lg btn-block btn-success" href="/contribute"><span class="glyphicon glyphicon-heart"></span> Contribuer</a> + <a class="btn btn-lg btn-block btn-primary" href="https://donate.yunohost.org/" style="background-color: #ffd236; border-color: #ffd236;"><span class="glyphicon glyphicon-usd"></span> Faire un don</a> + </div> </div> </div><!-- boring-part --> From 879204141ec812587ba886b4f6a18e0f747f54e8 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Thu, 3 Oct 2019 15:38:07 +0200 Subject: [PATCH 173/360] Update and rename donate.md to project_budget.md --- donate.md | 29 ----------------------------- project_budget.md | 28 ++++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 29 deletions(-) delete mode 100644 donate.md create mode 100644 project_budget.md diff --git a/donate.md b/donate.md deleted file mode 100644 index 1690d749..00000000 --- a/donate.md +++ /dev/null @@ -1,29 +0,0 @@ -# What for? -Donations are used to cover infrastructure costs (servers, domain names, ..), communication (stickers, conference, ...) and possibly development on the long term. Below is a draft of budget detailing our expected expenses and revenues - -# 2019/2020 Budget - -## Expected revenues - -* Donations via Liberapay: current is 45€/week, so about 2340€/year -* Grant from NLNet: 20K€, to be used for R&D - -## Expected expenses - -* Server renting: ~1000€ - * Forum: 14.4€/month: 172.80€/Year - * CI: 20€/mois to be confirmed: 240€/Year - * Bearnaise server migration bearnaise: 587.2€ -* Domain names: ~150€ - * nohost.me: 11.99€HT/Year - * ynh.fr: 6.99€HT/Year (voir avec frju?) - * noho.st: ~35€ TTC/Year - * YunoHost.org: 13.99€HT/Year - * YunoHost.com: 9.99€HT/Year - * labriqueinter.net: 12.49€Ht/Year - * internetcu.be: 17.99€HT/Year -* Communication: ~200€ -* Travel (e.g. to go to conferences): ~500€ -* Bank account fees: 7x12€ => ~100€ - -Total is about 2000€ diff --git a/project_budget.md b/project_budget.md new file mode 100644 index 00000000..9d461450 --- /dev/null +++ b/project_budget.md @@ -0,0 +1,28 @@ +# Project budget + +# Estimated budget for 2019/2020 + +## Expected revenues + +* Donations via Liberapay: current is about 45€/week, so about 2340€/year +* Grant from NLNet: 20K€, to be used for R&D (TODO: publish the project plan once validated with NLnet) + +## Expected expenses + +* Server renting: ~1000€ + * Forum: 14.4€/month: 172.80€/year + * CI: 20€/month (to be confirmed): 240€/year + * Bearnaise server migration to a new machine: 587.2€ +* Domain names: ~150€ + * nohost.me: 11.99€HT/year + * ynh.fr: 6.99€HT/year (to be confirmed with frju?) + * noho.st: ~35€ TTC/year + * YunoHost.org: 13.99€HT/year + * YunoHost.com: 9.99€HT/year + * labriqueinter.net: 12.49€Ht/year + * internetcu.be: 17.99€HT/year +* Communication: ~200€ +* Travel (e.g. to go to conferences): ~500€ +* Bank account fees: 7x12€ => ~100€ + +**Total**: about 2000€ From 4bb55a698d36ab8bcaba8c760d9d74c3cb4891f0 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Fri, 4 Oct 2019 18:00:57 +0200 Subject: [PATCH 174/360] Update webadmin screenshot --- admin.md | 2 +- admin_es.md | 2 +- admin_fr.md | 2 +- images/images.list | 4 ++-- images/manage.png | Bin 25464 -> 0 bytes images/manage_en.png | Bin 16483 -> 0 bytes images/webadmin.png | Bin 0 -> 21128 bytes images/webadmin_fr.png | Bin 0 -> 23256 bytes 8 files changed, 5 insertions(+), 5 deletions(-) delete mode 100644 images/manage.png delete mode 100644 images/manage_en.png create mode 100644 images/webadmin.png create mode 100644 images/webadmin_fr.png diff --git a/admin.md b/admin.md index d462c05c..288471af 100644 --- a/admin.md +++ b/admin.md @@ -7,7 +7,7 @@ Yunohost has an administrator web interface. The other way to administrate your You can access your administrator web interface at this address: https://example.org/yunohost/admin (replace 'example.org' with your own domain name) <div class="text-center" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> -<img src="/images/manage_en.png" style="max-width:100%;"> +<img src="/images/webadmin.png" style="max-width:100%;"> </div> diff --git a/admin_es.md b/admin_es.md index 3ed8aee7..dc6bea60 100644 --- a/admin_es.md +++ b/admin_es.md @@ -7,7 +7,7 @@ Yunohost tiene una interfaz gráfica de administración. El otro método consist La interfaz admin está accesible desde tu instancia Yunohost en esta dirección : https://ejemplo.org/yunohost/admin (reemplaza ejemplo.org por tu nombre de dominio) <div class="text-center" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> -<img src="/images/manage.png" style="max-width:100%;"> +<img src="/images/webadmin.png" style="max-width:100%;"> </div> diff --git a/admin_fr.md b/admin_fr.md index 7dbcb32a..ec8476e5 100644 --- a/admin_fr.md +++ b/admin_fr.md @@ -7,7 +7,7 @@ YunoHost est fourni avec une interface graphique d’administration. L’autre m L’interface admin est accessible depuis votre instance YunoHost à l’adresse https://exemple.org/yunohost/admin (remplacez exemple.org par la bonne valeur) <div class="text-center" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> -<img src="/images/manage.png" style="max-width:100%;"> +<img src="/images/webadmin_fr.png" style="max-width:100%;"> </div> diff --git a/images/images.list b/images/images.list index 46cb18ce..585a521b 100644 --- a/images/images.list +++ b/images/images.list @@ -28,8 +28,8 @@ logo-jirafeau.jpeg logo.png Logo-wallabag-svg.svg mailview.jpg -manage_en.png -manage.png +webadmin.png +webadmin_fr.png micro-sd-card.jpg nettop.jpg networks.png diff --git a/images/manage.png b/images/manage.png deleted file mode 100644 index 0d653f8a580d7c7fef997f4e714fdbfcd998be73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25464 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 N)HBnqym9}x{{qXD9I*fZ diff --git a/images/manage_en.png b/images/manage_en.png deleted file mode 100644 index f07e5d5b9fe2e586761c048d2a44b26f45351e88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16483 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 diff --git a/images/webadmin.png b/images/webadmin.png new file mode 100644 index 0000000000000000000000000000000000000000..cfb96101ab1bec58aea7fb2c16da2a082d851872 GIT binary patch literal 21128 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 U|8N033V>YW1Pbli;BxlzKWEt=!T<mO literal 0 HcmV?d00001 diff --git a/images/webadmin_fr.png b/images/webadmin_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..7954be443ca33bc7ee538a139e4c06dd2c1e35c9 GIT binary patch literal 23256 zcmd43cT`i`*EY&I3V5hT1(B`-B0bVODgpx1q<2ty6=_mJ6b^7iic&)t>7gk-w1`Me z=)J2zkQyaG3?Xn=Jm>e0d&j-w8{fF!ci(aU&;Z$c?YY;QYtH9+=G^;*p}rO)9S0p1 z6&0iQy}J*nsD8(Se;3cufWPSW%o3@nu25;;y>0R|XL~UWBNbwMdP;h?env~f+)w4K zbS2&Bj|z6y-b%&W+;?)G_1_JMAAOzH`PXlHF6KhXER1G@O*c_BblMt~obS$#JKVSu zROj>JuWN>EWdnM3EsGz5n7yWLU3`OZ)3_w}umgyS&Gh6}3wHM)oIn3B@AdDQ$d>Jj z{0_Bz1wLR8mEbN$JDBnVRVNqtua7!X0erkVbJibxT%kP&OsBfV^e5&wDynB(SKw#B zuL`#ywBX~(GY2N{vHI_czx}tI*uh-$v|D6<!vJ<v)Cz2R^7-^GZc=yodz18B5&3)e za#-2$#0wfc0d-1N3_GkG%26o99aZDTigh#eYn4Q7+nyS^4&{tyO1bX$!j5|d7rCjZ z9)Gkuib19Mkz(EIwZk?zPYw<9%P%rw<rW@y@o(oT_-jtvh3#kuxfb6kfNZSK*11kc zym)%FQEDojw$G=w$9FW!OE!X@;Pcf=@_wg!wsH$nI@p9(gd4=}`Lz<U*#@<`y6iDG z$A{;AQ7Zne^lakaoF&36u?>rUz1+PEp1=f?bJ%)fkR>hNj~yML1T5!)9sfw#HY@S0 zX%8yNABOJwvo#{Os#_(`5CcTgbOcAjsHom~pY@*$Z>@|X67lO&U0bB()03+Ft*_lL zb(h1wz7U*BFToIgv}{#phn#Md=G$=&^x7-uh41xO*<7Tel2`c8*>W(voNLT9TgUfk zPTrMF*Syiw6WnR_;%*P8?*!WZWG{Leb=Xj&H$*a4J22KI<l|PtRgSrX7v38|)cmpW zC#wc0PAgl$If!@vz4g-%%*P+bzANGiVtK}p{_6o)414=-U`=-0$vW(0T@jqs@rASF zwt>ol2{xqT<e<i2z{RI!qa>5iv0p4Pm_rB|4qN(olB9a{ZO%b;cmDbg#Y*NUt-v1> z|HQcCcWRlir~_+MgLE5HY*&9!hPdrmnz@|<{-mmDNm%=+fcL1N-*bH^ciaJDAwNte zEUVSww(L)j`onNw>`O!B_GMDL6zOyxMV=pckgkMl^ItKH0Cq0IPRa8fX;f67;phLo zQ1CL8F!uduG$|sWc2VMVPr}t_eCy!S=0rYu+f^cGy>Z^hngan_4~`JT&%pMzVA8W# zTU_Y$N7A%CjJ!&=_CY$^cPb~PSpP=#;p9(D@VoXk@ethcU&m_XZ_f`=U<na_q)3E+ zp%2^`6KMaD;A_(|*sFH(12dif^y`aEybbhVQdig64xcsc#Iq8^=>zw|A5Eho)<~8W z=p5jpz7hEBNgUxIVfkl*RL$u$j66NMYy&*2=p43n60^5HnaAQ~V?xL?=u_0|w6Wsx zkaM>u4w$DW78#)DT()~7wtLfo(;2?WCn58#pW?vUr}8&gRbikoLNF}&Nh0rYCvQ#& zjuq^{(PazD$cJngwSqZ5=8B((f%8y{-7v+y<;G<Pq9ZXOb`rMg7r0AY?Krd6Id217 z_N$reqBVU=igjvR8~0EpKKn?VX7)ek^W-)D@^RcB_NCY4WZd`?#(pn3gX=~rn6-nJ zfQ<*(uzb?O`t@Gew}MzR8ocQ`YHvUU%uz8$8!;R@Rmblfd+5JDv;mwpGly>r4I)!> z8@C?h6duRMvlx6u+6QHwM$2RDyiDR&9T_?#bUhge?r(#N!wpaoWh=a<t=4O_*wc?M zJaEd+oyRZjkH0>TBti*`rLK7)*YWMc5r=gtE3nUJcrDm5_CG(eRVxpB+Tl5%V5!$X zZmn1yX8W|bZ@9JalS!!4FsvVM#Lq7)t^HI~4qHrInB_fp8Q$<)X|22Fcr_kVTqmvR z@wjwb3_-c1v%6I0>Gzvpj*2kzYWyS>m4@9glSN?bx^aHG6jM9%Ld}@1y&35v`RMe7 zINBf4Fc9m!5YhA%1~puy<u%8>7M$$ZT1hbqXnk_Kik8P5*V#Ks_R<=v^^c#Q$C;8| z=N*r#DV=_Q7fJ|MZbgkdhHspnH0zxHfVVI!m+V6Ad2GYXU<5z4^h3WNcHO!iTp<a) zsrOHx^CAs8t@SM-8AYc@HK%jtH(=APO9Jj82}iD~_{{$I8PvG<zCUApEy6lPs+%8v zX;@cYS4ghqO_o-<xvwD+Iy$Ec!XSFMAd=YKYa#@bXMD{YZbF7}NB7O+jMko)pZ^-X zP%#x<-PTmpxrkaflEEE+`*!&S2aafQ7|{eX*>zeyO7UROT94>$_fXq=6NkGu?A=Z- zL=V50g}deiM>+U(tfM)?4~^ZImkviq*<u99i~A9k^jIl^ho8yPDTy8-yKDO14`oGA zK^(eDl>KD3HN_FzJ_hI1I*4m`eKDj2_qkWcbJHC`wZpaN@dnUMW0B>2CTw<&R7HXo zrf!K6g*g&pmiE${L>FP9CcIQsHW5s$7(oFZcSG)oL*vZb(?_IOnebJk1_|YyMiP(l z7VoZ=e9uG3>8tpr<-(s)DwArYH!TLL)jA3)OP}lVbA*H}LlgPvus!o?#Ybn7D#$ei z;T$_Me<6x<IVrF+9BVfyyUxqA#3=;Z(+(6@t{jSDBiMy~k8B&igejK3r*=vlw&!s1 zMXsesLu(sJtAc7m+DCm_s>#F?xrh}x{X-Ns%ae%((<_6eoh4v0X9MRz#94E-?p(0A zh@s6tT7Bq!*y3=K7&aOD87<t77q|39>K2oD%o~oc&gw>nU=>_||IgE7SI+Md!tD}( zU#$!!iS6Ke2#-v8&1vwJb9*5Mh@(?|N8lfV`QegMeR)d3;{K#cZya)+N88Gx<ncnp zSHXyfwJ@{Hf$QEjS`n|H!+9!U`*IhksJO}t|G*X+Dl$dlezqxg#hM<C*YAG{C-shv zCCPM#m)NXw=bNp(HX0$14_8Qq8%7(2#2h5HI*BRuVltk^YKc@W6plsTC2K?Sw{X`x zkGTnbVe|5CYGo&-s_)xSq!wP?qh?7s>_LLy^l6nf3^m(=Rbs<rOeW;3!Bl~j=W(cG zGzt^`cD=csIOv<V4I4R+`=K6J-F`R+#gPPIdxE`BB*3JNDr7mFTvdRbIv?<a*en`A ztqym1lks^=ZnfA)n|9xXFp53LeFyWZ1)ER<1mQ!M2NY4U8SOVhewCwyGbVNJKg}J6 z+AUe9=REQVP-@;XV$8cg(fT-_j`z5>CB;E?dO0&<v2YLiVve^htORwa)aqgP)Fc=9 z5ut<D<mb2yd2uzOa&sli!Oor&ldsy|87|MYD*{IyP1Y<0Lpn&it%4+8X}G=rpiFYn zDG7Fp>(D~yhi;ZXLS}&M_3it!0$VrUbON)zneS7h{_aw#IgNvp!qy*(n_x<o$-BX> zG;?4FU-Kt1M|_VWF-?wp#)AP32<vMSFk%m>{R^Y7{9f2ODyl@D&K%k0AaVHVTn%|{ z;QVF?T5~3&fr3tIaTg7g{XRQH9B$8MK0D1u5wkrBA)WMgk5>uIV8NLq6}&rkY#^we z#(7Egou`Z6Ma^vkCwrbBB`WR0w<)RB*~fo(K>_-O-hM=^X`yz{0xuwxPsF(H>n-o= zWzH`>L5qQ8F!p*;4y2tn3RG(J?+l+!QAF*`cX)58@{+%4$uVK0Ivr}4Yil#@e@5Gb z{D@aO#p@;=G}J)F>eRH8zYQtjCIDzDP&-*sn_@%#?A}?t0<bPU1qRI{9ZqH*B{|1@ z#sTbOk6fNKw{MqCT@Kx<k|O=(2uCiSVaABN5i3wf6`94NY!Y@0M+av>kUR75yx6w{ z2>E;eus=Pp2WM08)8+!wUss(7FiCk0jJ!opY6t5!1<<45ye-IXnY}PV>$1wllX5m% zs?Py@@Nw+?5VgN{%fXa2TjYTnd0ee(5!Wx6KLJKSzQZxfExckM=*<hkvO{}=!(*#E zjy#}Psr*@NF~H{B8WiA_%YX$iD2u&Y72vC6{@JI?N#Uz}k__s<Mw5VU=xQxkgDK>o z;2LkiC?r35HlI9up91LnF8*34FR-hZPsz*E03rwA2j%hu%n#QnkTB`wThgX0?9i3% zdNPRai{D{O`*!X7j4<6oy*XwSu|4+a{+c3OcSHSI2e{F^0J+08J>SrAj2o=@fx?D3 zK<ii5pYUQNv@9z=GQ@VJ>|Ua<h<JyNkH!Wn#d2+57^TpVrEvUU%i}K}2cWf)M2VBH z5<HKF!I_VdSK$&rKAd5$47V8dZdy!7E>ji|vx6eFqDb%>FcMdB7_QxXCn#GpyPg7< zfjPE~oyP!~jaS$m2)7?p`Az~5h?;z)_T$q<dbEs-3K4%X|L3QV9lp>l>kJ>*!KC@t zF%d7-+p&qL*iTU-rdaQ&0h}DV6GSR%eU_uJ?fSKr0gL*<iF*HMcunhWOTx6G{W|ck zodH8tvh--kxB=~=K`V&BjbngRJyt%4g*W+k9s{Tlyib`r5kXzMz)920FNfw4Yvz|4 zq4V=gCF`mLq$2F34Fn*o*~Y3Q==LKK(mS8}@Y$oyT>bT11>p-F0OuY!$T5PuREku< z?wCMMGhoDw%s0S2n>GQtp`RC{Z#1{@>vqa6%?s6$c-l#y?h|%$9MVqS@g3goMSMTj zMeXZ?&`=8Yk$}qni24ySpQK<5U?qtTpS=%~+bU-#7d}WB4nsGEqwiRdJ8-0q=$&-x zc~0LpzuG~Bp{hNJyhIohr-5~|nu{);_?}>W`L&Z&4rk0h{tQt2$;Jit1MTTzPg^b> z7JX+cR_*vpLL+H$nQW^aX27s$K+3}r^ZLJq*Uj3rEY{^6h*Id7+|tvPsXN5Fe6p9y zULRj?1Pa97&hwa?IFqyfT@aT>YuN|nw3={@<bac7;u-2y0C1P#IfW0(y~LhMcn-r( z@CU##xVBUP!JfYj>1{JUkMX52iJjU=0w6{L+JM1iFmt8m6WZ1XbJlABsA=N(1Ts<u zFX=t+IG};BZ-5@DHj)5oZ%lGX3@N<^M}4N2fX|AH{F;uJMFCKJ6wP`?b&E%V0WN%9 zsp-N1>U*>V7h2^k6;&@EtTX(L9ZX4AYsEod1A+pa&$SUP>`Vk9$X|Pm64UnOabe3O zer*bWm0VT}-nDT-4Xo`IL;=1%BSxgdsyFE7wLP>(v*j$QXx9`xVCf?$hvbzuFJ+{b z&6id9|1S5{<Sd@z^(o#I4u|pXF*pt1_0P{Ho&X0&^xrho+qJoVE;3C(xM?|}bqSwG z5UqlpQdmNO9H8o4tt<3cZ&q*P#;t)sTO`OVHk<e71fru$XnH3K&umPy%oJ=|Z#kJe z51S)ZMjp#gK(td&>_*Hd<(xtV8j=)p^5YyL&|*#Z8$)K%cIn7LbJUTkHkwy;9|T&p zlt<y;qj+sN-kBpeO0uVDjsPro?tp>l?oIUhjp|uSKxOB`A10jCbB?8NKOCBFaF1^^ zT{l9_Panp4XT`PGw$Rs<b}m2|GVO>KT0;gJ5ZLHTJAU^-ZSBI*SM}kHdw!2IiZW2g zYnk&DHk9HmZr4^;=Q_NJIwhe5YZgP+b3LPowfH2o8x_?DANg_s^xESDOJ`p5GiC`y zcSsE5SJ^l=lN#CU2k6=ZQWsxtZR&2y>84B{H@C1^rNms5Geg=KvK&2GG;CO+!HFrH zzTp{2$l}n^nbQcltw$~@=!=`=*a?2qfq~Ou+vAk^7+3Ivdm@`$#vA1Fb6D5myh)j9 zo4VQ<l4}Ikm0ufhKPZ;Otg`=#f1?RTYRceQ5s(P!FOs0-yw!yj$yE8oX&O8QJ!j%j z8+yKqJxYIoTsx;t<KOVm^0sYPgr1|Jk=*N|ySd3VWjF7mHFFFbMx92!I2>CQ^;}tO zv_4#AncFxQG-l`&DjclUeZ>@Z;n=*RY5RDy;!?A4V=IEDaFo2^5Ha%0=EdY30m>B5 zt~}y>k5+|GZw0n*J4;w|woOw~xmoi5&hp6)t!mFs)3WNu^fGyIS<enORhL%`sPeKk zv1s^x{!w}UK=>)xkZbRkDY+y-UlJ}@WnpG9edgd+`ijW8$a-SlM=SfT&?`zlgMW=i zPal~Q^^LgQWu<j>vR+p<D;&kH;TSV=?2{)d`kK5$iihkz^Kh?!fM&jTgf#I@lGs~$ zpQB~rr=5UtPVu^*e!6JzjrsIDGjn)6?34h@-^WqHcE=$%*icIu#1qPQ`JcSO_SahF zj|yqp9uNu~duHt>7Ei;>#ExmW2KN+)yXM*_#|&EJZS{%OkEK0ix{PVih8To;OnD+E zJrI+^aXEfBm`!oq%NLR}ydm~xFQIVRYAL{lem;ldlp=180(79#_@jfu8=O!z5eF5S z^T#91<dOGF_Fxw3^+Weu8%m`|=AI)8zh^SgxS!iKU7P>nRP=NP=Q&g3lA2V1NwZGC zn+ubXr{-SqO#{Ikia4r{+i|K+U3&)2L`m%aygaU%qPAn$@Q7h;%$W=0+x#V_iWa{y zX&rG0vd680h`Cx;JM27Vw+(L-qSSsy(a+z{09^AKdbwXT<C~~xMzh?Du@tt{2@dMX zh{CcDdiI1uM9Yf_-%G6Vf`4iHUleD)fRP%`r}2i>d)*%sL*sQem1Wh4cq(Y7lv^50 zb0Syo>y_p>52&_!!+^$QOYiBsV#->q0MOJCMF^a>EoBb>e5Pf$Wos%u_1>8Makssf ziMUjrydv&nG`%OG9iY5Rhphn{$vz!KY;oZa07UmPYG@g*GK<fH9qAjs!Z}T|PT99W zm>RD+*{m7b4qHi(t7gO|?@t&TY$yze=wm~MKzN=;og9den!OhHDTh~qG(7-aCUg)s zs3o30KcU3dQ#pWKRyjc865j%Y6P9780}dx`>naldC_vyfDfAueu=l;ZFdN{pB7*Z2 z5o)~qC7aylN>jvE(@@Szw?xGI4j^xFe+vbf$L9+C(ULPSrg-wA7$wCQlT^t2<Dnb6 z_KJ06pduy~C6OcSqdIR5E8{V*xhSO2j*{jtcG@JX68jB&Oyu&`D0d~h1n`XmC*?aS z@SP8!Y-gzP?;}p(W=X*4Ql5XZEpu#_IyDempRL>hsS6~|WFUV*wSjKM2h`SQHhjRG zA#ffq@ip%#$YuwWl@MHH1!qv7^~cQ5QdHPiuHZ+?@l-j_{%<Jg{QqCX+y8-F3}`iP z$m)5H1kJ)xH))OpSr5TW6tk(kX#dfr|9j-+|AB@76H538pm#*mvr+8-bsKYKxo*Ft z^2a~DenD)i#{X5#{6iu&{%*UbrQbI+L7i1t?;r)bz35wRb&mCC$H(SM&EV#>6UwyB z2Hk)QZkj1)#$0`bu)J;BuJ<tnRWg#bI1N!rQzYFx1jl^%ZATx%JHZO~@0^1;T`u|9 z)AAa3cW`E4X8P3^^T}m9K!T~B-EX~!nb(-L1jnqVDy9s^kQ1#2OR}mGLsQz8jAsXz zrXi0S8mD!^fLF$M&*JSgmXaNI%}F{(dTHTdyDGX7?+ffC4OJj@QApzl!C~#nIT5z6 z9}PTtBtv6dBghzCa<xmiti7LNQD5%jA6Sku9+%X@nb#b-EqB8D|NdFV)IKiSXZdva zf#JOGRb4HO`B#o-5mo297Hj#sAS_d^Xs={D^)wyR!T9m(gKj43zU2^=coaWeV)5i$ z)g}P&RO#~t4&p)^2(#}_+3w!R9X3<kfeCX)e2l?l0ckQXbTIjM*ZQh8q3Xc;(?Clm zHVkdUtr$n4A%?Lt4W6u~o7{t3p|gJzYj=`HHc!ANbI8m+ht+OEj0Cc#Z*DS-nVMYp zEZ?u#GmqIb!V7QeF~RTYNPm+xNmNGO*2tC^deZE$RPmI=+^8Ex{Gnuc3g%UuEh>E= zy4FeyvWYy?sca<D=%R@d>rLBItX)i2tXfOCvo07S+sYb}&Nm&nW`V`rENl>Ijpr7J z2kQ(ub7Pn%V3e@m`L6hFw#(gdu`=Y^<Bl_(ZLQ%NtgU5-ag$aqS*C^+#sg(i2HCdT zmAJT~C>nhIS*QNhNxxiDEmg<zv;bpkAgj7Tqw@enZ`S8c^O%hdUWL8PSfb+3=8eV} zA@mPc^LeSYo16!*T0iT_hc~8WofDJHhvb8U_X*!?(<`^jR-G2sM`f)2bjJ*HJw%sf zwd^k?lWmoNbJgEgADw9H_KwAKpTml=VtE;)-SZH+F>f&kgRa@^6BAX`^vpN1+IVFe zEPa$LAO?yuX*wFw`iggOngVG$?iGQWg`3uNV4ANDOFO|EkDJRLzJJr#<jfJXea920 z7^}ysDMKjP5jw}G@x_i2WxjjAak1=F2c7u4Nbajmn%8vE?f%vgri&Zd;eR{$#K<%Z zY@8__vp2jpc|>Xs0+Yv}T@&H-C7d=g#P~<t=biL9kBl6d&IPlANuzG-_j)rkkFR}m z)Uk~5_-kc!F+R8P0;acEE&c7R4BMoy++-%Q?|D{nq;S>JeFwc3Rw8iYcxme|b=9Zd ztla7`YZa3IZ|^R~NsL2WwWgWRV;Irt&Mm^SBxC6Ea0BomC*9CGkrQu`9NaAkFKs<> zjK#nYS?y9<!@q&xz|=UZ`lKK0Xmu6U=vP$hbPkI`-^=po4TeE@5j-4{3|hr{75<mD z59&sSB2+3)$#XZt&FiKjy(%0yC6DLq&Z*sp3@Z=IR)gx+XSa_;rnCO;BjO?fm~u{I zlZs{Ix(9|VKj~fu2F9LgsGz1!l=)*dk+))O({skNjOA#rD^hr{`e^5Y)h;CK=f>G$ zD5ecuIfLfFFx|25@g38w_Q8z5?$c}rT6s)V2tRdi51E;%KRq)URo_;&!0rZt``Vg@ ztH-EJPOB%twLDzHQxv~b?ir&!*PTgxf$d?vG#hjcZovN{ncqlqyKH-~%GQTgcq(i2 zu(wHM^v(Q(Dwe)Xq3D}y>2n;3NewvtfUzeDGM#P4ib#h%{kZtU>iIpEv`r7@+G^R{ zV|L<D(aBOhw?bjd$slRjRADP4f#}kcwH;dK(BT!GMYf?h<b|kqR;#f}c0^EL8h?-o zJShOZdqmY-t03&t@tAl#t5xyoDPlj}cT(6wlEHWs^KRFV8vkP>)MHX7Zeg_MTuDXq zP1ffriNX<c21+*&bK7pm?IpJL1a8dul^ukkZ~3Iv*qm|UjMfE=TpPu|oD;94>b73S zq?lP%gqJz^^u@{9MmsOb=Tuvf+T^m_HW3Sha|C!KaVcg~?&T9b^%!=9DqTyv&JlI5 zSR-3R`Ya5>TXyNPB!hLg9-B2TeT}1MyDR@XfV705zF(KPuf;M@Y|DTZnYy-YUiXqV z!eZE=e)}!^L|Pg?+3#~eTvl!ryzG1?JKx4iQ<5;eblpc2Yw|cR>&C3@LW^x59kznB zTywOs7wzX?cT^E!x>SqOK*?GK{dm`@yhGUj<*1i=Y;R-)LEtr^BZDVdHI?1!vXWjx zjg0Iu0;q+t0OH;|bMx(zFOxNgmx8#b^OU*|zy3{*qvA=h^Q~Hpc;j;O!TY6L#$Ii$ zVxvFwLl;-xc?iQpZjBf&TID1{B+lYx$h?WL!FMbsO8#HM%j_yttZS3wr^}jH4fOo= zTVym+`a4K}V6*MOBHoJGpk?q@NYz!kjA6F7?=W|bfD0VN?2PfZag>Nn<5v}?oPICn zo{}1nsyFYr8A@fqMMEc2cy+6|z+d^xL^9{3H2deFxrog(&dBFq?-+GItaM-r$i3rv z!78@uqua(kU7tTi5(@)NInl;kA(@@w&ZjcuXIIq$t%;)-{!|d|YV!Md4)=3hY7fjn zH<7oGz-1XD)HGu#BS~Px5d3yPvaw9Iv-SJ4BI0Zk!!pugNvJvuK2kE6XI&U}nrvsB zcIV2l{u!kE+>_&H%ZnfW(+hB~I8?CilXK;=s8E1dW{l8y5NoPd;jqXZSJZiQ0|PtO z#L!mp<C1ZmmB}}S+WYD;?)`^%SUvG%oe9rWmX^aZiM)>w^>UvVncX%sgV;}=zQ3*2 z@IadQ_Muhd!WCPD<cga|`W<AWP?xlGYk|%|^@W731%l;3?GMTlbJgV1V?)?)0$56Q z_-H+nXeJ1&t(O76CHC)9`wMKEbs=MEcH~lN5dmegfM<R9G27{&D!E-g?omGLwOi4k zsKUrD1Wx~ObAItxTY!z`{{&$AUu_+DevujbAF#zC<}Jwa3o@=ce4?~6{BLe(&^Le> z&}_<jB2ww%3hy~y7K(c*Y`*1j5YsyiL~g1pUAwgSqEZ)yWKVX<__e{kho<vUg*eJr zuN+IGLdL3uo?wiAHm)`&-tRIp`Fqu(k*hb0{#$z69d$C_&Sc`oG^;|1sGM08jxz7G zjdh*M8z!sPF$`U17VhP0m)+p}989zvOcxKfG@_TnAqLspQxi(xGh2mQ@x9W{vx#l* z-aKh9yj|OXR`%1DN>(^}VC<F~;0p#5w{K;~(CTS4UhN7n^%7%RIjlIjaX*VrSWHH@ zLv)<0JzchGW~y@!FAukV(q-YtC6aiDI!{HRW1|N_2olI;o~Sl8DG&bi3`kWUI(HmE z4q~5|WYBd~X}uw^(O@FdyXS4~2)!a?l)P{9GN=6UZrOywy{A01{sw7F3n3&i(>qEk z9o!Y#$<$zgzFlexNOY54kZ5Y~XiqDeAA8!d{%+a0#@N^mmynfxn@m;s0UZ^BsIhvL zJ~9(M^_$ijKunLX(TJtdJ3F&DbIk!l<kO#t*f}&^bh_>;X;`}LI+5+$eCowKb=H3e z8Uj(5sqIi;m_x9thcpU|L!4(R+avR34?hKOiuh=AAgm>X19k$`dd&-#xT8<+l3grc zyP~DX312+~NiTK5kalKQA3IySSn=V0##QWeO9&U@In8eG6q7k}=YyRxWA3Ak3@a;I zx2^l%RC(M?^~_G$`Wvn1Y<kK-K~)kvrS1bkXS&n2y@Bma&NB~2WweU>qpQr-wk;sI zicJG*PpPRR;@|3l!p|!)&MbP-nf)PYjFHGt#8Y?f(1k3$SK3W)9qQ`~*J$Vp4WBDz z6?sr2Fd5VFQGSMIVnI$EC0xT9xJ1u6@9x38IRS%o$AQCeVoGSRr^$d6R4Ge1-mLbf zx54epLUby#E}?2|Ph5jiVR{g`$l6T}^Ag8_ASiW*5^_3d!RqJ3R{<4;TTQDJ)D(G5 zZKr0<-1TGlSXG}CBYTOMnmEE@VLsiS53Jr4BgckvPk&qIP7I!#A}6{`i8PtIRWVJG ztsqhx{vF7*T~*RMZAgYyw6qs#Tz#)Ao$l}k#JttGK*p$vV?dUHJ?OSnhBVWMn5*M2 zOtzQ^heBZ+4VfkPl}sAy2zE7!Ej~4pO}`J`8hmg&&CK`u%=N{%@bOoUnstT8Taie| zKDa_tYJkp@x`><i=7bev7|`a$Quvq_R(o(yH3xz<4G(nzc+avdy=jD6G>LW91mYv# ztNl%_OGCk;a5>gY|1WcUrtZwOS_WYU<$*(W03UDHF=tcbhssu66n`d}zkL5uQ`4Jd zn9!%=xnA0JEKimF+yn0{7nSw<qlFBl62z;BFc3en;N})mrs-CKzNRnuJ+M=`!al`b zmMg8q#}_3_w`_T!uB}8K`#P<;g<&>jW=o>@@I<m5G|292`bQ!la#IU`6Ti8HP*3)# zmyu)WIz;B5u%yuyzIcny_P@)AeF-$>&{yd%@9HM+ISqb))5x}vLA^3c{=2tufj)M- z%#Bkr{?<X7loRcLfEe~+$Z(58-fYd?!M+@8Qg}EyZy@(MO%!p;wA%o7^D?imA@g|c zWkHkTS!;z+Hb7*u6R+jqEFiqoJ`z)L+4^On_76(o>3?}m+@}^X_Dt7{BsMd2y|U-L ze<-2=LXm06Y()DLtKYw-O0)CZUBu8&?K$M-Nf>&6QBT!Bi9c>%<I|geEp;?@af+D} zQ|#iE=&{{f6JQ!7`!gGZ;k=A6PFRhH3A|U<C~lc+-9IY`qNBBT>kZdXh`bk<$D7B! zk;n=0IkXmvp7DUjc5*;QW?+e?GyI?|xDnX$lrsz=$}b2aW7*eI0jVHElZII%*!~}! z%kzbF*p)4b32Tpr^!lKlzMt<(&8mvrl(nY<Smh4ea{#gbfTal&sgGZum}EkVE`Ul~ zppMkC&7~}7G$Y!hUI{^6v4v)=QIxy+<Ra%;{I1(xA*;b;FtZ7LymY0wnDdMAu>@#p z?Y118AY9#Jpqk74L5ma9JMCKmZ|KszaFDHm1QdWl2KAW%T+58>Ho#0b;T0&=$4S?t zHT~XPsjgV`uCNm;|7>kMKNFWtOT76|4+xNmBlpvsuiIl$DgF6IQ^Qw0ufu!<;0AhS zm>X5TY>AR^16$aF@~7cjD@O-iXTt%m6iB=Q01!Jy-~d5~HFxdz8c$&sV4N3j*$4|t zZIB$eo(?k6@&kp-X>;=aXdWG7w7?vl=VJLtUYWIZoy}LXNTU2i7M)A_19pV<%kkIW z_!zL`Xbl>AW;G7Pw1;Pn`5Bp)uj3AOw}Sv?8znEFb`^juV)hRXl!5DVNYhv7S}~}{ zaN`E^xPwd>$I~9%uL<}&@Lg}`LNaGh+=_)Ci!fYyqW9Gr>!i&Ejud^3lZi7iZ*OFU zet3mC{!QIl*qObNuCV`o`oa}6E-gAP-Iz6@#I{04Y*xgFS62b??51Y@YS<w)7jZ1o zGx7UrI_C{>7E{q4I!&~_Vsv*b8`w--1N&!U8o36FxtXxZ(r&D4&Z7D9?mpU8KDq}F z_=D?nxlNdekF)$B`Q9aKef0Fga*A78UunH3;|i4Lb$GRX!{}bhG}Hwx93ezsgeD~4 znND|yOKPp}GVnLh)h5crOQ)BOs#yB{MS+SkUb{v^ZJLEITv3s!(1_0CLjzKp?j>RJ zzOj>1c#?lsWNyy&3E@itr#u(|ZF0Ks=+dLl8Phpo!V_3D@N^*Yy(e{sgHpg`St?8H zbLHW*t(LvxTSf&%9(8=_9TZ%pttj)4-X-<l(oXsRq<0DOVBG%$s;uVprGNE&_I3VE z=?kU$$0|@U2S5M6=?*Owg$r^7a3Ipr2w6oA{@(CVFp$HG@$;CJ=ZXil*M^fFFNX~R zZnw4hYJ?InKL#nn1)~x-*Y4%XFs-Dwl@*0nRJk;~`Eb+K9>;L^E(LRH&x|^#nzXK> zITGTt8*7>u`YyBcBBl|DKjkI0=B*;McfOntqz4zWcqkV|d{goP;snp5JE)fJpY5_! z*O1`8P4FZaZcJ<Ia?k-5W@;FAbnssqmEa^&A!Hl0OMW;%Hwa{$zU+zDt#rCF4J6$- zljM%MhU7cJH75%d`;8N?pL=wc+4NMnS!=1h6X;ZS*DSPW5M{OMoyq-Ipu*i2oCKcm zETxvzxiC{95#06GqpIVAwl=ER>Sn4^wVIqau|vc^yEEL-*ny)~R5#{}yJyJhoAd;@ z=bNCaw>s^GD_l7|6Th>^6w6CJ&A*=y?n-|^hz=VzSYN5Fhjb?in`CV=2?WN~HeII3 zSS4Q&CSn7#oA-`?6Jx{*7MlMsqb%MtE{=K=@zhDh$k$!Q>=?$bS6}WTq}Mlxn>a99 z&Z0p^JC4@WO0;XD3iR0AWOa&)nUUnEt05<5EV~$)WzDo+DhtoHbbky?wduLglzPKR z%Fbv=k`Cjt@F01AvicHBbL0K-ROc`{-GhL;FkO=9S$yDg=!|JQOMkEzWkWq#?PYDi zZXIfEb+i3$P7$H*TPD^t&*ceeY3o|lo{FcuXxciGcB?RBSes41|0rOvJ8RDJG%`NX zxm!&8#nE8xwdL2&CDRvJwl-bv-@Y8QB^+ZHDpn#i&&Xn)wfVl}IuO~%-xT!a4Ws~j zl`dguH)Vz6RKgD2hyXs*Y)<IL^<2E=ZSbSHZS9RpIkhCCuAh{iU)QKp4`xJ-sleyW zh|GBC&nqUEj{tOswI?g~rytI0K@3`Cq7R$5dyW6ppo0q9#*Jkvp1dpn=w|zL{E+3Z z*KbEsyn#YvY=@Mx<Wt?4FcD^DRon>kF?mp)+Gyq4d^=y5PSgL4sGQ;DXu2Mll89lk z)M>P1K;@gt(9tw^c&)AdbDVzqME%MXrbdt=e{l_}{QXk+5`En9{>vA(Zts^=z@3?l zRq$HMFDE#tenS|&SerFwW}xFErqG^qro~6o{+Zc$d?V+`RqJ*EVyYwd9#~VCq8|Aj zMy)T9iX3MyE=Khr!#wU6JoTm=Vk_VDV~@JF>)as*bHa%q>&!g{<3pL10%a7(je_2| zl)urbkh^G=;-k^wj#+xSf6n7C?B0WPXDCPGSnZXr2Nt>F8afkIF|~~9F}8-Da6i$m zSB|j={R5?q)K!ic2C1A)`?qFZ{SZ+NDNmW}n@!o9?}jM1U^P}@KqKD7J|uy2Sn@5u z5axcFGbvzL`JNk40ZJY=%SkG_r_11}-hSLa7b0ocYR8dqH%T+FE14skX5WbYCHquq z<jSps5sbKNCS5^QyfOby{imMC1DihX`FfEds7pn~A`zyv_OnolXKZt`H8?>yp`zn{ z*DF?8Ni$D&#Cc1wOc4#Jr=n6LUoRX$O`+;BU&<zCmGo6|V4&B+Vc6&|JX#)3F!|B5 z#_)O|VG_M5KyKVDe*6IIcsWK?!Y+qOvDN&@$q;73@rZ45=}LB~vuH`=(Up~h_$TRs z2NT-H@7?<#zfZ<$y)(dWQ3Nu5WiKv=zvbD>rrpbpY7n2Dx!14!!g&!!aapslzx$8Y zZ+qkL@Am8jJT$Q%LpP#A<%OsJFm*qa4ZR17KJvE7K`nbr{5i1+>drC1I62k?^+tEJ zgvo@B8A~3+gnKG$lE+_yh1il5{mV9c-wTSC&8nmurjX~$8V|EaeiqzGUx1i#88kp_ z1)&8w&O07L+-Y2og6g5!B&Uug)7hI&m#YVCy>I-|)h3>#CgzNi>9=ATv5TWJNMVBH z;p-wh1u;E8oh*i+8l?H4d<Cz1AYychO#y9ef~Zh=(*oG{J&x_F5lQikD()xIe=nZH zrnn3ot_18Wk3M8XI`-2aw~u9H#xkdw_!81?jJ`287n&1+-Q>3KsB?tyroFGs3s*EB zs+DzWGOgDl9V9vA2VQ-e;*b|$@?%``!Y}cyOl{!H&RZxu4c<>K%ww|TI!$)<*Pc%L zFc7Gj<RcBmLBpB7ojQ-XX2W_^RwQeI0#s++?ZKK!xvq$;9355{ZK^pIyNPK>1-XAP z${)O!LYL^hTUX>&)L7!>bl9>GQ0xA_{rknCLjZvd!YUR;x2NLAQKX(?QBR=Qy`J>F zw3fATcT_Qnj~aAuDZT|)d;*bU$n>e)3}+-}IrsnvL6wENLh4%jTqr@Z_Tk+oC63Wt zaaYTWT)h{02H$n~%`8l->e}(bUO=Lb29C&?{mJZwTRV5mAO;hEW7axhi>t#oDq=hb zSBKT9@%6**DlJtHdGba;%Sqz&_iuNQ^(&nVLplZkuU3xkCICz0yM^3C4zyhB&pK-E zG&zb?Hp;*)iSJUYOTFcV^@o*JKC6yC70B2S7qiWJr(jh&o@}27y=OS)i+I2;Q6SG$ zSrVD)Y!I_K^)(<h<SINV|Jc1xsF7`&+P>B1ZPmM}+&KxOrbZX!r-Uftt-*&y523rd zwqr*9dZ$6A2ut9e&=Ouq{hFb8?nj3_ukR)!-43dDn-B}jj}Y-kesL93GrHIL`cm-s z)A4mqK-@s5@y5`#{ovQpjVPAlv}3LvUe$drAcv^3*EAY?d|{6<GqDsB$3k6rL@HmS z1sYvh&~h^8r?{1S&mZ-_Q|^A9!Hy9`@mvNt@&QHaTWo;pD6$fbnJ>q^b=&++{bUd5 zg&dgDlj6FCTYd#)4{w@5tk{-?>Me??sh$}NZ%ne%zTedPe&ai3pKCeu0Tu|bbHgi{ zAO5Cb6?{z(ub&{-SoyxJNL~W)T2XzBWAb(q+Onr}R2-r5t<3D)sznLIc=AdwLYjou zN+r}K6-Dsrn`hoE)jXX(JH5XYz2~J1m}$K&b@aftdO~X1^bMhaol)8UvtXAo;hWCV zV%#g1q&Yl2HPU1%vU||akz12{(7kb`SXA3!(8H);y^jO-+a6H;Dl*o92gsKJlSLQ} z(%d{0y1+DV%b31s@4st^erf71Z7M-6<(V~1g9kGH+|tonN#Prl>DtN5%-$DjGpgRz z7DEAWcx9at4B^!c^)UNd?tETru=e_vdnxn9ET~Nz4fo{B=iA6<K8XY=Z|W7J<-+=) zjV`erAQnDbm;*^CeSd<YUa?io4Tx{Sw`D<^&Jp*2zsBa#OMtLbVB&}JChN{{(T$2l zx3XDF?mo64&VY$Zxe3cX{t>=kh(i7#ND6N6^GhhCl*55ZegB`<c^`l6%=x##tXWvR zbC=S41)xy;FNpik!%fKlO%FGHDE|YijjGaYD7ph0xonWtf@<ejSw#>{EdcdSr5THD zOqx~)cJHVP95JR<crzNbP&x@{g4E#5bBMduAcek1%;wQeCejoxCfn(~e$-!cnAnk2 zssT2ejML@Dx0<I#VNrb3#@$j*m(wGya79XIsBZ1<1VDJ}b@nP{o`+XkMp#w_=@sOj z)Uh`u)+d$fja3Q1V_+{Sed3zGf+e?H>rGwj@nD$p&7;>=FL3XBN9U0rV6T5`tU{y~ zi2D@}U-|*0Xf`|Rpz3yM)rs1-*Zj|JVHUbLb^G0{&mE@@AX#wla85J`t6d*_DxK_G z{<!Zrf1d+kg76S$|J#mm;-}Lxx&JbW+g<I<y0%n0vX~U;6(kS$J<i+&YG(|Ch+%`) zc>t}^+b$5?Bn!Omw|OQVL@*6|!=QQ~rvUZgVHDDl1|g=0RhQxO49M%E9lR~}%F)7V zYB3PU+f-z3{H<BI{!nUP#jw@PsCdbe7%gZHE`ZyTn)JO9#HDe-6)ts_>Pji7UND<5 zSCv2Z9uR4qqCpnfVz?aD9z&W$En}{tTKNBF;EWShPxtl~0PKEg;8p!D`Qq!G$kA~? zElDT$b7N3)R1O42D`B>Qx#^j&F+mdWVDytxUGtAEQwgI2?d@56Rn-0xX4@Q+Z5~)+ zY{I>gFE_-`TK@sSbDboART!_9Q*4w%z7W_IQeNfXvfMQT=skQCa&R^fgRYPA7Ga3} zsqI(wrZyJ_m{~E4$sEqU+Pt9hSi(?R7TRskgQ4{{eOX{Lp9=6Hm%Sgdd_!`vKIcj+ zE}{x`NZ#iu`Z5}4ogA}i@`%`|Kxf<Eaa8x<zckE}_#ZbBJA*pL$uVz@`Ua0H{uM^k z4u=m}E_r&ma<^IQz^?Wmf1NPu2kGCx_+IvspxADmG@N%YkLj13*`EIous%G*rQ5Q{ zTy0uFtKO=)HVkp1Y3N^eSiC8Bbbp6%gx&RSvNQQMmjb0b_;Dfo7fK&acTZGP%Uwg? z<T;e0r&NX?)t5c@<Np%g8yWI8NZ`TcvviS$M#zTFqkgDNT){_(;h&gBNW94s0moA4 zu$wx;6P*`rC|xEZ&8SeEsOT&w1vfC0xG9RfU3915pOUaB3bA{`f<HG)r}*t1L9uzi z!epJ|`bovE23#qvw)$)KsR`k*4FxXqYEJj$MY-+a2VEs}L*F?6sUH^z&U2-4rYUVr z%i04b>f=12rVbQ`_&e0QWkvmTCYkoXVgKw5pM(x<;%gluX2P-pMD{2}7<3ZA<%Gi~ z`l|hi!-~E5ef-Rzyrxy+L*dJ|->&yAe3NQe-r`&?eN$<*-6wrtAx~ntLF;0~|3$IQ zQ^{oDnqoUuQQ3FB1gg?uB8lE=6j5$C$_Ua#?;!{^RZ)+z&ig|nD)h?uW0TG6DNmkd zI^@-x1~9Ov*XXz&RcO5R>CSM6`}3s~p8r|wOzpXp|Cg3^`UYZVdpKqlN)SZ<E2d&+ z0H0U}%EfDrtqu(_dh9Q8_Kj()v3<{lz={GdK5`hQaw_<5hmL(!u?>G0h}yo2-bCCu z@sCl=-0K%dJ0*uq3ZR+8`EsI8F7Z*kYQD=G>1m(P`|e~{kNj!54uk)wx{bWhKP2xP zmvAHIX2WXC8OI21aiOsapdEt*v{)(Uk$JlHv-m1bgOmGRk5JgstKk>oXb{v`{>rA8 zhj$<bgqwAOiPv|e|2k?YzlAJz=vd7m;f5o&531f(p9|B5;LOPZEYe<1sh=1o|E}!z zRJsqb50XgVR}g{op5!r^GA9T;5A#85@}nV6Z1Z*Y{Gba_3LWYbfeFknhuSayRL$)C zTEh&mp|<<nf_cH0Z&Hq$9{TNp_4xqDBwo+Ch-vbXg?qjdU;GxIGW6#9vh->K-7p)# zJqK49udWT<is}sCLVQiqToqhjnEIRO)vWLoCi{wEVyk|l%-r<*SSbGS;;RrB2rpsS zq<)4N(BzVuh|r%j;`RBYyrn9J!#{*952<iZbOmsS|B__w8q?w<jNZ{_Wl9?2$4RQD zG_^l&nn#o{J%);S{;-bgMIl5N2t#g(_ud>~YR+nX&!nbu7&=BoxXjGFi4R2rJsv7U z2XrO0TgTT>U-DHNM%LpWss#wkXr#y>wLhZ?uipOlja+$Gj*gx)Aul`IDr)P(B{z#Q zf0)QGnn8x?glRX1B{x=w`+_waI%DnwDHp-WyhZy5cG2kXpa!pq!qCFB(46G!XF6l) zu%vSVnIx~RJf_KV%_lvcht_#-AK316er<~BrxQ-`Whu1x!5AKVxt)mIlnQ*dW&Mv_ z-0`z%4oh)#0g4=ZIp%5?ld00`=I?-?XS+W}A2YufYHB+q5c`EMZSnqDzkd!q=+P$q zw(4PPjg`Z|K0(u`4(OL|mo~*3taPoyLZ$I;QN$BcN?;<W%v(KpNULF*&3zC%PWT)^ zjjvi5fA45eWu-m(w6<bHI1g6jQFCn?;-oRS507g3-M?Fo)X;0gjUhmx)=XIIb`<DQ zPy*y3_pQV3r@@1RBJ!M*bJG6$-$%dYL6Da*GG4-s46}~>%hIg()0mvnYA1eIk8!MM z_B&D<aEN$yBD!g+i9TeVr+57JxHEhKwK4h`xtQf=m3Py4K$30?pF$(R4W+F5pnT@h z;9HyVds-h|Roejb^q1_HCD%6JCXS3fsup*iB^-Fmz<DRh)Ks^$E)5iqU%=$P#hRn7 zA#Ml=G=)*C`|!5U6HQ2dWzg%G><!UW1){%l=1m_T`L`LM-Y>FQIo*c3{&*LqhA+9! z>XJ&+Kp*=D)|mXVRuh(S|Ab3|&y9_(CS;F#r!0~vySp)V5y76BSrA~z?95T}w&&L1 z%$%1%PI0ddIdkqGQ`UefIUZew^lM}8e_&&-&PyPc27ej^P_j&_8sXK|)_46J-z;k* zk*W3cwNf7+nL+aHP9!XzJ{>S@Hw$yzhaEczxJIlc=q=f^$up1SBQM5B=9WA7WcK=q z>1#a#Ei!~7SCPuV(rOCDa6*1^VmV~6{xQL_S!8Xz8h;u+uMe?r`n1xyyYY*8v@5mx z{sV^cE?wehCqH=<^Zpw874o}=3#`|Mm^p_#@Kyk^;N*8ufjt76Gt=4_5Xx3u6hNok zn>$y{SbnCwh#eo?M{jA(WDGE2AK34N+EyXe99$sN`&~w3s#<=xqvca^@dLD3{#S!+ zvTlaLb$*eI!KLLZk9S+u{9~&2UuuV*fRd@uV^Q|>Qu#g5JSHHJ8+Tkz%b;N-eemom z?8k5FIuk+(>lZDa9N+3#?~}Zb?2bXaM&>$H>$l`JI`$`cNNv5{AAC$j#Su$+FTgDC zW}ZHoH)@S0j$VWH<@?Cd3_3ylOJ_+TPEd3mJ^n!m!^q?#p|;D7QA9_a1bC|ee|yW< zD`w<#JbdkSoePPZ9&#`DBqIq3m)JBUZTa?etwWwSc$|};Q4x`LEhG_CM4doiz?(NZ zb=eA8%M|XhvGPrC-V{he{WeD@CC~ly$(d<@sp#?4`ON(nQ<=IN6*7lv^yoIs%e5<% zQPc|Cxcj^#t9ajUXQOakJxwzy!r)YV{v7rJrE4L6yZ=)xvh+XXMG}+}1?K5ZD+AMq z6D}KsHe7SYjzM|+7hQc;wv-|rI%@D|z>5b!9B4&6ZOm!zAV?j&Db`snNjWu>nKv$w zJx!5&;%p1)4J~x==^i{V5ChfZUXR{L;uCFDp-WZezd&1Ln3;uj03o9^U~$AAB2_8E zHTkk`rssCNuB8_%lk|IbP&p_zzKD5$MzLawr&qB{Untit8+n%>P%8Jc{;M_=NW!AE z=j~s=?Fe9XAUkNt(u%ud&<La)m9*CQbYP|y<v@dm5gxq-e-;+Gr-r~+H|eSZE|gvr zwUlH5J;}fSH}IK%xyt8HQ40TQoYmBwe?bFaJ9tgQ<zM|A{~q)FfAM7vAIgCcTr1J* zr#Wa`prCxHO1T6cJR^)N{|Xu&+FjU`dKZ97Oyw}DPm7PJyE6TRWwJ%5x7#|dYSzK$ z?7@C}QH{%J%FbN`A(?N-e0P5<j>|Zmv*M=w#t=9yM_-8(LrSn1;(wO?<fFxF*WsAG zA7QsE`|1wu>eMI0Vz)oMsRA1Lx`ia8dI_l6(Fx1-*k9P=bJqlah;b|*QQTPiH4dfM zA&?pyPPJ?=MMfOaDnmgXn>PWIoz6E*SVJD(IOeE5uAM{btpD5Gd6P0Vk0k*Y^?c*9 z&2<fKO}9mxux6XKxPSS!v-meAMFgAjtdEfEuN4*a)`~(F6%{6jy>syC9gNDz-WT2j zwJ_tcTKD39ArVI~2{Y{fHg_7jyzA<0t9sime_@wxYjZzVC)I7l8^I+$m7DFj^0~9k zI=%HeTtddJ!ir&SuH=4K>e|mZw4NA7LyuC5Fk48LHYw#mH|YVrzd5bUSO+HdUAR3B zDjj8|_*P9Z&yjTkbTj=Us&5;$xACb}mrdqx&6JQcq_?L`8B}J|e|7vk|EhD?2xbQf z`9(hL{v{ujMg&Xo8+1@)q6}NJUdUSYC4YPS28Rf1-9)w<!Yn{_lsvS&>R#cH)NwZT z^z?8yL(lX&RoBnhEa?}T*GBJ2U!Z*4kN7P);co3~x9iCXPH!{ahB-f+wzTg04Sxy5 zEeGl;v<iRwqp7az9dR#f$FcRnYJ3vD@UCUL&>y{j27OFxT&KMmU7w&UgLXLP1|1E8 z!oiAAg>!U)!FHal`_A#ECI@W8!4jBQ@A9Wdk&hN{871FfQc;MN;O)Zqs(H~<PxV=t zJ7$Rt8=$sa2K{m15z!CJV>M|xddD4#L(8HVPk|)yqxu(9NhRP#1iOXBV$03v>T3*? zKFUYDb)H0=mdVB@JQ?njFNixlzC!E$(s0TmdTrK-OMNcw5p?ZfSJ;JlYvD|l4^syx z%!QA;<=7F<n~1iceu@36+tX21ugbM$+^bfm&CR}Y138oJH{xSl;k*L`Zut9xiU`pm zm;oGCUtc7_+5y1`l>3_NMAc<J?KN*Jn^+=#4q9WWX<~(DJ!eLb`*Gbl8hykcsBz^H zW@otdAt<bvmySgIiEWkS$fyqA<53Pi4l{lK`expxg?aFt&@nTkZJ>?O_W}7+6-S?y zSSf55wm}L!hE%y&GI8y&x0tu5&%)k4utT}ToHe0t9^GiZY@bvWH`3SaIvUQfardAw z^JkYvnR%}oO{=L*ZaaH$SDQKO?2lmHlkzWNz02l5>RGOv83otPPjiDtQYp3b>%Nz; z?Q@8cYq~77rO+<sF8li6DT!b!6^lnarO5Ox!D+Y}WSgVv0Zj3_xut*KXjS?WThPn* z<%xt7;`T#5?J@m|kv{l$F9qGwYt49pwOu@SB6|7>X*3hM^0UFbRcDpE<F3N<WR2p% z*e!}kg>{};b(O0>?qa;VALJO};#PVvn$gMaR4i*-L++Taw)H%}xI6ImxIgFxFK_Bx zu^RO8<UWVBSP9h-LQ@a#;5Fouj$*-%`LHIUZ3j-iGt<St)~h}lS3ZaDX6riMSW%k^ z_85r1u&h9qaU_#b2H={<GGzDIOON8?IV+C4cGi{@F{sugWJ)D$mkA!rZG2qZv$SKX zxgr{RV&rU}Ge7;&23p>i*QmjzzG(EMU3#taLHdv8%H-HB=Z=u$Ccz@xTy)clS48)Y z7I?rUhkPql*OwF9zPTTC{dlWO*aqtVhc3zp+0i7n;#M~92Mx5~S%Edt^?FmI6pc?O zA?7ubwZ_}}o;|sD4-Q@`KkewEE|Nv49>3k&|FJAnroYWg1H$nKW>Ue8j3pTiq2a=M ztC1=rY9v-fes|NfJ2C$KUdo-o;LLK8cku*g#>A)f@sA{IGa;njqvmT+P4%pe-Ls=L z2(LtaeUGpZdZXm-!A?eu)^Jlz>CQ7Bf)j60L)^o;J3q=-aHi`o_B_HGa<Jdo62q*O ze+Pj1!^!$vo6u=UM!j!I@%eFv=6oleu6g=934Sd6$l4L))0B$cuo|U+w6Qv7OiM@P z6~oU8<DS+;OQ_TtXv^)S*DKLFWA`mNMD|ORLZ|X~-tK)%DC@~SuaH>jmkOSq-|NKh z$i4jGa;v8=^!ZnQqYHYin3;RAJN>BeV^>bRQbdt7I&HoDns4}UTcu;hB`PY2!Mfb# zP(LuuT-dS8X$5RIlza@Dje=BCc(}zsE|gpT^@MCP$&2c5p9?GyWm-iJ{g6GpodXRQ z9PKbg-b+01%WWQ!T3%M;nvs9bf2TpeM1oEqfn9nD+Y9fi9u<Dc+MHPVzP7sNhRDQr zb>23*ce&hdE$)m#qKxF!YtByt=)?7?L!gzmeHby-DKy{zTGhmaw~iG%YtZF<TMBrX z%jb+}WWCrm>gN*6|3@`f{>|pL{@v4WPpddN9hBB|N?SDtMJtYU!tF$>A`T@@Q8Sem zK}ZLsHN??MX=^Bs#+2k#O%X|ol2+2FG3KZcEn*5H1ox%)Ke+4OwZ1<+Yh}I3ex4`$ zc|M=de)ryD#sACOuOJ7!7nYfwS*zVTF(P=pWp3U3ADiLagp<H2da$zm&kyUBnNWo- zDq))WgGy|zlfFB(WlaA=Gs|kkTwxSfux~!PZv?E35-5pLrE5@Ylg;`wWLU5h>?he7 zX10PT7X)jGr*;tdJT@0`5U86@ngYsm?8u{+gR`l)$%HB0BRP0J!By<DVO^%^rp5Q_ zlfHYnxl+Awu@S@j3q{T!n7c+aUmFL-+VV<V-y~w-IJ5HZG^GzMiIr7G9(tyC0~DJs zEKYM;C%jfz_X^5RZu|oYkOHt01I!k?YA^Y}8R!^kx(HvnmG}OneoE-*_WKXsKf8mz zY~k2OCvjFyo*LuY1=9|dI&zAz(j>Ba+~xv!ptJ!TQaMY?_`A-Wogj3)ujW(q5JQ}< zV~E{g36(<oBAECkcPerCAsBo2_10Iet=O^xiv>+`27dveQdTR$ybwKu_A{>t&$DJK zb}<h`LU~p_gN5+yD3j)owuK&Zlq$K@%}KI+e$|!&4bNFL?J~lN5Xu5t%WSyzex`%d zafm|u@lv&9mi>T~;v1wipPUxz*rh>q`d(_Bm_qiBSeohoK39LCn$-k)x0crO9okS6 zH^$+ZG#}F^_@MU<Ys5)n-E>m7QE>RT&Lj;T1OKp)aCdzm!i>d$BR+fU$iRR~g2q^K zu;LK!XqyWKdDm4XIJpi};NyDty5r4Jug}`45Mmez?jyVIl?e(eZqkHLr7&l-<qY=o zkAVVua^*!xx8#eVWu@TH`0*D{zu?VmrwQW#!=I(clUClI*nlCe1L27SS8S+l4Gbs? zW1KaLimq=(oL=15e^nycmbx2DUmyJh)(}?Wg#1E%hewjvN5j053r0~PHbV1C4>U~| z@OY#B3oH@)8wYzi6XafuekogB?<fo>c2bA3$E;c!L#AGq16XOwJ-;TYo2Mr-`A@in z%5NK1Y;nm*Zf`NLM`zewdM;}t5v)-=KayhF{83iPzn0jY<Z?fH|F`aI>BI$^!ROWn z%o-k?ibKXqg;;e!SvK)kqKp6}1sUD|Vp<-Izib`ee~8nn?Z)^jY?OMW=W1Ggx!H&E z?h#L{u4#~R)jR)+=uUy&rmL^{{){vfc9Hf(F3oZup8AyE{>CQ^m|ph|7ej?#Ooj@M zI!h9$UUd<f2m=m-{-vY!RYo8T9b9c$rb33&mfs~39z)4ff5b_?`a#Ub&ODj9gz&-? zPPQ@t#VJ!)sqq-~J-ZPjKA-MGPDPz}tWFO}PTm`^*2XglFVqb1y7W39vMLrXEWf@I zA$rYF6%Y`eB+i(dmZv8SI^PUz(vgCsSJE%e928J1pT43-=h#KAnO-$KKLNAhCyaT2 zZd8#c?v2R$BbA%MEO*mES7292PNM^IB4l6GT)hnet193JBttkgEfkgAKyp%+ph{!y zka$TjapB=HaqRIH?Lq%tzNNpp1w?y{uR42Aq^=f0-j+<_51lPw8=Ex4qQd=V{x-m? zMx;@G5jAE*HKwTRr!%!X7`aFLqPrsV>-s!mi<SHQl0Kb6xLAXLNfpZp0WXXIaB09^ zT~QtjzV7S(#s}WAUU)2bs()<XxNWl~ururaObRty)tW7&f$m(P&JsMsM<1m%ynp6d zCdCk8H)rA{p|Z)Lqjpc)PdHu=BoHviO^0;FZ<vP*tJ<5eCzz?}w<z;gu+f+$IFRal zVhaERkHHqVRiDKcfHj=7IicYLh>8g+zQNCDx6xYk)z}K2KkbsDgro}D9`&o<>O%Jt zq$|mV9^hSupJci^xhXs~r$j^9M}!lPZt~L1oVynl4G6s=5O5Z&yBNd#*z;~&)v~Mf zdg!oPYQMtGG4E9|?<_DhVuaRU6*g^%oNHgqR<qyqMuIK?XLNE~tnxQsylp^d6a`N! z-1J1kiq&0Lf#!E_BS9<&Twd^cEr;p^;Qa6g|8nEzqs!PsTPI2n{Py27%i~DSzftH0 zxOvWDYvA|tx3)I;|0)2yc(4D%$p43?&LML~WsI&BAiS8sANOA(LoNZoKAa<#6_Kvo zNM^I_Ugt*-B7p?Rh<_EtN%{jE^*qZ)7H7#Ippu6VHAo2!b-W_B=k^?}faEfMOR9+h z*X^x|U`7*g_WefvYFs2jryTmLz}&G58gZ<#>dLp|)M^~zH+jWn($qqheNAV)<wn3x z0BL8jv(`vMzi*JRLFay9k}bD*GB<@nd`?d@#^vXC*>s4BCHj9(8toJ@w)nxuju1sb zA3kwV31Gm@x)BcQjmYyU)mK)B;Xkj;lKmYMHj#ncX5o74qL~A!XgN{5OLX*^sJ&1h zS1$PE*<(0{-6M!lp!N9|>(7r_^5w|@7lW$|Vy62aS$TRrzy~udDqPXF&F6FpJF4Uy znw7Vw?q@kL0}JN;<FN%Wbyfs%>MQzrWi2%ZQsicYkITv0aWOF~P(%}{bte+jo|!*g z@`o3n;kGE-`Q5S1L~@J%c{UQj5nLS@b~VBuB@WGmhT(uj!uu^+Vjza_r7is8DGG4p z6PNMocKW=?&`gku_w;hl?MQ8tnO<&7-S@NM+iXJf5C1ais^wYsz`Hcb9%I5zMeKiY zW-vR0XBcz9Q!(4%jYgH84F|0rn|_RCa^!1`{g5oY&qMXg>+l1~N|dOy@+L=?)k%7_ zM^*skdPz|P55m)72VF0D;lZ54NMcdaq-MH%PWNJT-pFC+QL1MkM4VA>6|w0ocanQy z;F=zwFR`#p-Yetj#NkS$VKKSGI4dQMukGqgwDu?&D)sQveL1c9&xD}7F9#32@{OS% zUF!uyNztH++Q?HD>r+xqF0x?2)Wp6h|99-y)BT$1X3k$F2Xp!J*;14cQ+?3rBTaH< zc2r`I3|58X7V%sv>o(7#BjZr%jZleq5wC2Y1C+W`<kJfD%~JrfLHCa{blE|F7GEb< zTH_r5xPed?JngL3E4+W_q#L8C(|WNUfJf#LmGRP3IUrGo(x0=n>>omt`Faq4Epy0O z`rYU!WF$sNm-kLiV+>fISfAx6J<#R=lOKfhgWK{0W6(2eHQ2fFcjLglP`AN%yN=I^ z`!)f39p0UZP_F1tcm1&by{3#@QJbYhk8vTBf+|SP9ZEY&mod8}D#+NZE_x!@xQ940 zF)O8&_-45ys%R_gQGu{H+vd-Aea8p=<we6sQ9HVx#DK4De2}R7u=jRZgbaAV0?C}O z?LnDPEbu4DjK^wnWJMYZqGw31FMg%NLqIAQSZXqp4n6w<nT`l{cNnS&UeUB<>=pF+ zDZVW2owT>P;T4Ffy6aV1D1Ibveq%{D3o>j~?k%dlehnI!P6dXqq{vPH!72;HXC!}L zVs?x~HN>J+1iTY=Ku6STJPI{Lm^XiHo`lw>9Y(HaG+>SwxvzBWfM;9R<iU31+*T-8 zNw7hGi?!R&s7AX)jqEBIdbvKh@V#>Hs1({39#uy!^Y1(kYJLNWzC;ci0qWxGO=37V zfNSR3#An!W11fWW=NZLIK3{nGi3Y~5s{#PaSs<vnCL5asm(7E!!?f5N{+W{%XA>En zd0Nz)$zf35K-};ec*8dX&qR{wPF@cEnz+2_W0acqa`=IicPo;;lPBWC5Aj@jMZ`U7 z2tNw#B!SQ>ZUjSB$*?FY$EJO)P@i`a2vO!dbkEox<oXJD#zL3dpAhgd!BQ>N*lOwk z9j*xVNPPQgI&R{4N6>)O+$mzLV*7CRmO3>tckU9GXhKN+^b-D{u4=XXrAhK<<(Ys& zQrauCK2Wr<ir6QduJ>ew(lz2Ge!1ZmLDO{tWcF%TQ*LXH7LeNo&#Q*J1xCM!JYZIa zZL?c?6|<#Rb1kfem(lV}))9^9AeIxIRxPN#Do8e^`^C`3=;99$sU1aWlVg?t5U;-j z;`K3q=^-v37OhB%4*M)X$zFyS5-EfDv7DK#86ZbMXJ_^}aL3(rmi&`kNX8b(^@Wo_ zi=V<8wj61Yj+qM1!gYRMeP1@IxAUj%Ii~KTzGFU%O*T(gkG>jdOVcR4&~Ywp{NsuH z?T2d=U<&?9>vPI9u%j{>m5k3NS6-NE1as*JL%R7V%9|r=r2M-gH7%wb{;wD1$DO}j zju^1Yy#-CW4!yt$9!}R~p$y=7bL!VAZmty%V2*v!122XU7LWHa(|+Q%xFF6?@!};v ziY@kGo{}BqTqYw{C+To8oNAcfbl)mM9yN*HHFC)&CZzPk>A|QxbnUgmux(9|C#NH= zvpa;&_W%wt=RDu+3f%c)V`i9lfa?eSx2*jIkhKLH4l$*uG*yO^3lp#5tvfLp#!rA? zEm7Has}0dUkT$DGdTzXAA#1UQmE_43LoUg6QBR-E{x~En8s`9==f=yp6i1j54)p}Q zkq6#z4~OY9(Ml};U*cnc197Brdaph3l#Cs~FsP1iCqKS*UP?{SVx}~?_d-pB;OHtA zJB9x_<w66%E{5-mcioY0yO!Ditv(~uBTO(z>Djwk>^tvB-ws+HFcRFw9Er>;FR371 zAU=Pg**ZiU2DU}YWbC|CcaHbm^>Ci_`%SnfQPt>5mI18t@TLy)*~C_v8$bW|&3a^} x>6UZ`xJz=V^xc+vpFOxK?PS2){=b-wf3z`CH0y?r9>8sx^EUS9NM~+5_!lJIwR`{o literal 0 HcmV?d00001 From 7e082bd588adc2edb14350ca9840225480c7fa25 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Fri, 4 Oct 2019 18:31:37 +0200 Subject: [PATCH 175/360] Use more up to date screenshot --- index.md | 2 +- index_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/index.md b/index.md index 7335ef10..69e00205 100644 --- a/index.md +++ b/index.md @@ -60,7 +60,7 @@ <div class="row cf"> <div class="col-md-4"> <div class="feature-pic"> - <img src="/images/home_manage.jpg" /> + <img src="/images/webadmin.png" /> </div> </div> <div class="col-md-7"> diff --git a/index_fr.md b/index_fr.md index e2d1faf7..e2939ac1 100644 --- a/index_fr.md +++ b/index_fr.md @@ -57,7 +57,7 @@ <div class="row cf"> <div class="col-md-4"> <div class="feature-pic"> - <img src="/images/home_manage.jpg" /> + <img src="/images/webadmin_fr.jpg" /> </div> </div> <div class="col-md-7"> From 21b6f5eda1aba4b8c658f5912aefa4cecfddb131 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Fri, 4 Oct 2019 19:07:25 +0200 Subject: [PATCH 176/360] Tweak description on the landpage --- index.md | 2 +- index_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/index.md b/index.md index 69e00205..9d9b6691 100644 --- a/index.md +++ b/index.md @@ -30,7 +30,7 @@ <div class="boring-part" markdown="1"> - <h1>YunoHost <small>is an operating system designed for you to easily manage a server for your friends, association or enterprise. <a href="/whatsyunohost" style="font-size:0.6em;">Learn more</a></small></h1> + <h1><small>With</small> YunoHost<small>, you can easily manage a server for your friends, association or enterprise.</small> <a href="/whatsyunohost" style="font-size:0.6em;">Learn more</a></small></h1> <div class="home-panel"> <img src="/images/home_panel.jpg" /> diff --git a/index_fr.md b/index_fr.md index e2939ac1..b9683bcf 100644 --- a/index_fr.md +++ b/index_fr.md @@ -26,7 +26,7 @@ <div class="boring-part" markdown="1"> - <h1>YunoHost <small>est un système conçu pour gérer facilement un serveur pour ses amis, son asso ou son entreprise. <a href="/whatsyunohost" style="font-size:0.6em;">En savoir plus</a></small></h1> + <h1><small>Avec</small> YunoHost<small>, gères facilement un serveur pour tes amis, ton asso, ton entreprise.</small> <a href="/whatsyunohost" style="font-size:0.6em;">En savoir plus</a></small></h1> <div class="home-panel"> <img src="/images/home_panel.jpg" /> From a5821903a52bcabbbc9e2f0bd5e2b20fe896e38c Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Fri, 4 Oct 2019 19:08:42 +0200 Subject: [PATCH 177/360] Rework the more extensive description of YunoHost --- whatsyunohost.md | 5 +---- whatsyunohost_fr.md | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/whatsyunohost.md b/whatsyunohost.md index 8fa48a75..2c0c4401 100644 --- a/whatsyunohost.md +++ b/whatsyunohost.md @@ -3,10 +3,7 @@ What is YunoHost? <img src="/images/YunoHost_logo_vertical.png" width=400> -Goal ----- - -YunoHost is a **server operating system** aiming to make [self-hosting](selfhosting) accessible to as many people as possible, without taking away from the quality and reliability of the software. YunoHost supports [several kinds of hardware](install). It is based on and fully compatible with [Debian GNU/Linux](https://debian.org). +YunoHost is an **operating system** aiming to simplify as much as possibly the administration of a **server** and therefore democratize [self-hosting](selfhosting), while making sure it stays reliable, secure, ethical and lightweight. It is a free software project maintained exclusively by volunteers. Technically, it can be seen as a distribution based on [Debian GNU/Linux](https://debian.org) and can be installed on [many kinds of hardware](install). Features -------- diff --git a/whatsyunohost_fr.md b/whatsyunohost_fr.md index 020b9975..d75724c4 100644 --- a/whatsyunohost_fr.md +++ b/whatsyunohost_fr.md @@ -3,10 +3,7 @@ Qu'est-ce que YunoHost ? <img src="/images/YunoHost_logo_vertical.png" width=400> -Objectif --------- - -YunoHost est un **système d’exploitation serveur** visant à rendre accessible [l’auto-hébergement](selfhosting_fr) à autant de personne que possible, sans délaisser la qualité et la fiabilité du logiciel. YunoHost supporte [plusieurs types de matériel](install_fr) et est basé et compatible avec [Debian GNU/Linux](https://debian.org). +YunoHost est un **système d’exploitation** qui vise à simplifier autant que possible l'administration d'un **serveur** pour ainsi démocratiser [l’auto-hébergement](selfhosting_fr) tout en restant fiable, sécurisé, éthique et léger. C'est un projet de logiciel libre maintenu exclusivement par des bénévoles. Techniquement, il peut être vu comme une distribution basé sur [Debian GNU/Linux](https://debian.org) et peut s'installer sur [de nombreux types de matériel](install_fr). Fonctionnalités --------------- From 669708fdb7780f5d0a0e9392262ac840fc66609d Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Fri, 4 Oct 2019 19:10:13 +0200 Subject: [PATCH 178/360] More tweaks in feature list --- whatsyunohost.md | 13 +++++-------- whatsyunohost_fr.md | 15 ++++++--------- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/whatsyunohost.md b/whatsyunohost.md index 2c0c4401..168873bf 100644 --- a/whatsyunohost.md +++ b/whatsyunohost.md @@ -9,15 +9,15 @@ Features -------- - <img src="/images/icon-debian.png" width=32 style="margin-right:5px"> based on Debian ; -- <img src="/images/icon-tools.png" width=32 style="margin-right:5px" width=64> administrate your server through a **friendly web admin** ; -- <img src="/images/icon-package.png" width=32 style="margin-right:5px"> easily **install applications** on your server ; +- <img src="/images/icon-tools.png" width=32 style="margin-right:5px" width=64> administrate your server through a **friendly web interface** ; +- <img src="/images/icon-package.png" width=32 style="margin-right:5px"> deploy **applications in just a few clicks** ; - <img src="/images/icon-users.png" width=32 style="margin-right:5px"> manage **users** <small>(based on LDAP)</small>; -- <img src="/images/icon-globe.png" width=32 style="margin-right:5px"> manage **domains** ; +- <img src="/images/icon-globe.png" width=32 style="margin-right:5px"> manage **domain names** ; - <img src="/images/icon-medic.png" width=32 style="margin-right:5px"> create and restore **backups** ; - <img src="/images/icon-door.png" width=32 style="margin-right:5px"> connect to all apps simultaneously through the **user portal** <small>(nginx, SSOwat)</small> ; - <img src="/images/icon-mail.png" width=32 style="margin-right:5px"> includes a **full email stack** <small>(Postfix, Dovecot, Rspamd, DKIM)</small> ; - <img src="/images/icon-messaging.png" width=32 style="margin-right:5px"> ... as well as **an instant messaging server** <small>(XMPP)</small> ; -- <img src="/images/icon-lock.png" width=32 style="margin-right:5px"> ... a **SSL certificate** management system <small>(intergrated with Let's Encrypt)</small> ; +- <img src="/images/icon-lock.png" width=32 style="margin-right:5px"> manages **SSL certificates** <small>(based on Let's Encrypt)</small> ; - <img src="/images/icon-shield.png" width=32 style="margin-right:5px"> ... and **security systems** <small>(fail2ban, yunohost-firewall)</small> ; Origin @@ -32,10 +32,7 @@ All that was needed was an administration interface for Beudbeud's server to mak Noting the growing enthusiasm around YunoHost and around self-hosting in general, the original developers along with new contributors decided to start work on version 2, more extensible, more powerful, more easy-to-use, and one that makes a nice cup of fair-trade coffee for the elves of Lapland. -Name ----- - -**YunoHost** comes from the jargon "Y U NO Host". The [Internet meme](https://en.wikipedia.org/wiki/Internet_meme) should illustrate it: +The name **YunoHost** comes from the jargon "Y U NO Host". The [Internet meme](https://en.wikipedia.org/wiki/Internet_meme) should illustrate it: <div class="text-center"><img style="border-radius: 5px; box-shadow: 0 5px 15px rgba(0,0,0,0.15);" src="/images/dude_yunohost.jpg"></div> Development diff --git a/whatsyunohost_fr.md b/whatsyunohost_fr.md index d75724c4..148dc856 100644 --- a/whatsyunohost_fr.md +++ b/whatsyunohost_fr.md @@ -9,15 +9,15 @@ Fonctionnalités --------------- - <img src="/images/icon-debian.png" width=32 style="margin-right:5px"> basé sur Debian ; -- <img src="/images/icon-tools.png" width=32 style="margin-right:5px"> administration via une **gentille interface web** ; -- <img src="/images/icon-package.png" width=32 style="margin-right:5px"> déployez facilement des **applications** ; -- <img src="/images/icon-users.png" width=32 style="margin-right:5px"> gérez des **utilisateurs** <small>(gérés via LDAP)</small> ; -- <img src="/images/icon-globe.png" width=32 style="margin-right:5px"> gérez des **domaines** ; +- <img src="/images/icon-tools.png" width=32 style="margin-right:5px"> administration via une **interface web simple et claire** ; +- <img src="/images/icon-package.png" width=32 style="margin-right:5px"> déployez des **applications en quelques clics** ; +- <img src="/images/icon-users.png" width=32 style="margin-right:5px"> ajoutez des **utilisateurs** <small>(gérés via un annuaire LDAP)</small> ; +- <img src="/images/icon-globe.png" width=32 style="margin-right:5px"> gérez des **noms de domaine** ; - <img src="/images/icon-medic.png" width=32 style="margin-right:5px"> créez et restaurez des **sauvegardes** ; - <img src="/images/icon-door.png" width=32 style="margin-right:5px"> connexion simultanée à toutes les apps via un **portail utilisateur** <small>(nginx, SSOwat)</small> ; - <img src="/images/icon-mail.png" width=32 style="margin-right:5px"> fourni avec un **serveur mail complet** <small>(Postfix, Dovecot, Rspamd, DKIM)</small> ; - <img src="/images/icon-messaging.png" width=32 style="margin-right:5px"> ... ainsi qu'un **serveur de messagerie instantanée** <small>(XMPP)</small> ; -- <img src="/images/icon-lock.png" width=32 style="margin-right:5px"> ... un système de gestion de **certificats SSL** <small>(integration de Let's Encrypt)</small> ; +- <img src="/images/icon-lock.png" width=32 style="margin-right:5px"> gères les **certificats SSL** <small>(basé sur Let's Encrypt)</small> ; - <img src="/images/icon-shield.png" width=32 style="margin-right:5px"> ... et des **systèmes de sécurité** <small>(fail2ban, yunohost-firewall)</small> ; Origine @@ -39,10 +39,7 @@ Le but de YunoHost est de rendre accessibles au plus grand nombre l’installati Tous les efforts sont faits pour simplifier le déploiement sur le plus d’appareils possible et dans toutes les conditions (chez soi, sur son serveur dédié ou sur un VPS). -Nom ---- - -**YunoHost** vient de l’argot Internet anglais « Y U NO Host » signifiant approximativement « Pourquoi toi ne pas héberger ». Le [mème Internet](http://fr.wikipedia.org/wiki/M%C3%A8me_Internet) qui l’illustre est à peu près celui-ci : +Le nom **YunoHost** vient de l’argot Internet anglais « Y U NO Host » signifiant approximativement « Pourquoi toi ne pas héberger ». Le [mème Internet](http://fr.wikipedia.org/wiki/M%C3%A8me_Internet) qui l’illustre est à peu près celui-ci : <div class="text-center"><img style="border-radius: 5px; box-shadow: 0 5px 15px rgba(0,0,0,0.15);" src="/images/dude_yunohost.jpg"></div> Développement From dca0b5a6e8248a9cc1e92d0675f5361a22a76426 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Fri, 4 Oct 2019 19:10:48 +0200 Subject: [PATCH 179/360] Remove those sections which are debatable and/or redundant --- whatsyunohost.md | 15 --------------- whatsyunohost_fr.md | 21 --------------------- 2 files changed, 36 deletions(-) diff --git a/whatsyunohost.md b/whatsyunohost.md index 168873bf..fea1c453 100644 --- a/whatsyunohost.md +++ b/whatsyunohost.md @@ -35,21 +35,6 @@ Noting the growing enthusiasm around YunoHost and around self-hosting in general The name **YunoHost** comes from the jargon "Y U NO Host". The [Internet meme](https://en.wikipedia.org/wiki/Internet_meme) should illustrate it: <div class="text-center"><img style="border-radius: 5px; box-shadow: 0 5px 15px rgba(0,0,0,0.15);" src="/images/dude_yunohost.jpg"></div> -Development ------------ - -YunoHost is developed to be as **simple** and minimally-intrusive as possible, to retain compatibility with Debian. It merely proposes a package of automatic configurations for existing software, and is configurable via simple interfaces. - -YunoHost is **entirely** a free software project. The philosophy of self-hosting is, to us, incompatible with any other model of software development. - -Do not hesitate to visit the ["contribute" page](/contribute). - -Security --------- - -The utmost effort is made to keep YunoHost secure, and **communications encrypted**. You can read more about this subject on the related page: -[https://yunohost.org/security](/security) - What YunoHost is not? --------------------- diff --git a/whatsyunohost_fr.md b/whatsyunohost_fr.md index 148dc856..dcec435b 100644 --- a/whatsyunohost_fr.md +++ b/whatsyunohost_fr.md @@ -32,30 +32,9 @@ Il ne manquait en fait qu’une interface d’administration au serveur de Beudb 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. -But ---- - -Le but de YunoHost est de rendre accessibles au plus grand nombre l’installation et l’administration d’un serveur, sans délaisser la qualité et la fiabilité du logiciel. - -Tous les efforts sont faits pour simplifier le déploiement sur le plus d’appareils possible et dans toutes les conditions (chez soi, sur son serveur dédié ou sur un VPS). - Le nom **YunoHost** vient de l’argot Internet anglais « Y U NO Host » signifiant approximativement « Pourquoi toi ne pas héberger ». Le [mème Internet](http://fr.wikipedia.org/wiki/M%C3%A8me_Internet) qui l’illustre est à peu près celui-ci : <div class="text-center"><img style="border-radius: 5px; box-shadow: 0 5px 15px rgba(0,0,0,0.15);" src="/images/dude_yunohost.jpg"></div> -Développement -------------- - -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’[auto-hébergement](selfhosting_fr) étant à nos yeux incompatible avec tout autre modèle de développement logiciel. - -N’hésitez pas à visiter la page « [contribuez](/contribute_fr) ». - -Sécurité --------- - -Tous les efforts ont été déployés pour sécuriser YunoHost, et **chiffrer tous les protocoles**. Une explication plus détaillée est disponible [ici](/security_fr). - Qu’est-ce que YunoHost n’est pas ? ---------------------------------- From 3a62a75e07702af7663a8eab98cc06603bb91e2a Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alexandre.aubin@cern.ch> Date: Sat, 5 Oct 2019 15:46:31 +0200 Subject: [PATCH 180/360] Typo --- index_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index_fr.md b/index_fr.md index 26a43ee5..e3ea6701 100644 --- a/index_fr.md +++ b/index_fr.md @@ -58,7 +58,7 @@ <div class="row cf"> <div class="col-md-4"> <div class="feature-pic"> - <img src="/images/webadmin_fr.jpg" /> + <img src="/images/webadmin_fr.png" /> </div> </div> <div class="col-md-7"> From 727038a70296fdd710207b82487266a5abaaa573 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 5 Oct 2019 21:36:37 +0000 Subject: [PATCH 181/360] Orthographe/grammaire/typo --- app_nextcloud_fr.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app_nextcloud_fr.md b/app_nextcloud_fr.md index b7a998d5..7cd7c1cd 100644 --- a/app_nextcloud_fr.md +++ b/app_nextcloud_fr.md @@ -144,15 +144,15 @@ A présent, le problème est corrigé. # Nextcloud et Cloudflare -Si vous utilisez Cloudflare pour vos DNS, *ce qui peut-être pratique si vous avez une IP dynamique*, vous aurez très probablement des problèmes d'authentification avec l'application Nextcloud. Sur Internet beaucoup de gens propose de créer une règle ayant pour effet de désactivé tous les options relié à la sécurité et à la vitesse de Cloudflare pour l'url pointant sur votre instance Nextcloud. Malgré que cela fonctionne, ce n'est pas la solution optimial. Je vous propose, certes de créé une règle pour l'url pointant sur votre instance Nextcloud mais de désactivé seulement 2 options. Voici donc comment: +Si vous utilisez Cloudflare pour vos DNS, *ce qui peut-être pratique si vous avez une IP dynamique*, vous aurez très probablement des problèmes d'authentification avec l'application Nextcloud. Sur Internet beaucoup de gens proposent de créer une règle ayant pour effet de désactiver toutes les options reliées à la sécurité et à la vitesse de Cloudflare pour l'URL pointant sur votre instance Nextcloud. Bien que cela fonctionne, ce n'est pas la solution optimale. Je vous propose, certes de créer une règle pour l'URL pointant sur votre instance Nextcloud, mais de désactiver seulement 2 options. Voici donc comment : ## Cloudflare Page Rules -Dans le panneau de controle de Cloudflare choisissez votre domaine et trouver Page Rules -l'url dans votre barre d'addresse ressemblera à : https://dash.cloudflare.com/*/domain.tld/page-rules +Dans le panneau de contrôle de Cloudflare, choisissez votre domaine et trouvez Page Rules +l'URL dans votre barre d'addresse ressemblera à : https://dash.cloudflare.com/*/domain.tld/page-rules ### Ajouter une règle -La règle à ajouter doit s'appliquer pour l'url de votre instance Nextcloud soit: -- `https://nextcloud.domain.tld/*` si vous utilisez un sous domain +La règle à ajouter doit s'appliquer pour l'URL de votre instance Nextcloud soit : +- `https://nextcloud.domain.tld/*` si vous utilisez un sous-domaine - `https://domain.tld/nextcloud/*` si vous avez déployé Nextcloud dans un répertoire Les options à désactiver (Off) sont : - Rocket Loader From 7d05718ecb87581cf76a2fdc1bb57926ecc817c6 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sun, 6 Oct 2019 20:21:23 +0000 Subject: [PATCH 182/360] Italian translation (corrected) --- app_ffsync_it.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 app_ffsync_it.md diff --git a/app_ffsync_it.md b/app_ffsync_it.md new file mode 100644 index 00000000..341a4bf8 --- /dev/null +++ b/app_ffsync_it.md @@ -0,0 +1,15 @@ +# Firefox Sync +Firefox Sync permette la sincronizzazione di plugin, schede, segnalibri, preferiti e cronologia fra diverse istanze di Firefox. + +### Configurazione di Firefox +#### Firefox versione desktop +Nella barra degli indirizzi di Firefox inserite: `about:config`. + +Cercate: `identity.sync.tokenserver.uri`. + +Modificate l'indirizzo trovato in: https://mydomain.tld/path/token/1.0/sync/1.5 + +Create un account su Mozilla: https://accounts.firefox.com/signup + +#### Firefox versione mobile +Nell'ultima versione di Firefox mobile la procedura è identica a quella per la versione desktop. \ No newline at end of file From 7a9630c91167e8edb2581e2f4e96049b589b97d5 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sun, 6 Oct 2019 20:21:47 +0000 Subject: [PATCH 183/360] Italian translation (corrected) --- index_it.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/index_it.md b/index_it.md index 870ec5c3..a1fd7c7d 100644 --- a/index_it.md +++ b/index_it.md @@ -9,6 +9,7 @@ <span class="yolo 1" style="color: #FF3399;">Self-hosting for you, mom</span> <span class="yolo 2" style="color: #6699FF;">Haters gonna host</span> <span class="yolo 3" style="color: #66FF33;">I host myself, Yo!</span> +With the last version of firefox mobile it's same than for desktop. <span class="yolo 4" style="color: #00FFCC;">Go host yourself!</span> <span class="yolo 5" style="color: #FF5050;">Get off of my cloud</span> <span class="yolo 6" style="color: #FF0066;">Host me I’m famous</span> @@ -97,7 +98,7 @@ <a class="btn btn-lg btn-block btn-danger btn-support" href="/help_fr">Supporto</a> </div> <div class="col-md-7 text-right"> - <h1>Esplora <small>cosa puoi fare con un server, e perchè è importante</small></h1> + <h1>Esplora <small>cosa puoi fare con un server, e perché è importante</small></h1> <p><br /><a href="/docs">Leggi la documentazione</a></p> </div> </div> From 10eb422e9d5516eb6c3d8e1ab701d8dff66d393a Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 7 Oct 2019 03:27:13 +0000 Subject: [PATCH 184/360] Edited list to be 1, 2 , 3, 4 instead of just 1. And uses . instead of ) to get proper lines --- packaging_apps_start.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packaging_apps_start.md b/packaging_apps_start.md index 6693194a..a6130781 100644 --- a/packaging_apps_start.md +++ b/packaging_apps_start.md @@ -18,10 +18,10 @@ This is what application packaging is, a series of scripts that automate the ins 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 +1. Pick an application +2. Fill a form +3. Wait +4. 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). From 82ebb689d7f1fb84fb9a075fbca2e8a862cca616 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 7 Oct 2019 21:44:36 +0000 Subject: [PATCH 185/360] =?UTF-8?q?=C3=9Cbersetzung=20begonnen.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app_dokuwiki_de.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 app_dokuwiki_de.md diff --git a/app_dokuwiki_de.md b/app_dokuwiki_de.md new file mode 100644 index 00000000..9f997374 --- /dev/null +++ b/app_dokuwiki_de.md @@ -0,0 +1,13 @@ +#New DokuWiki +======== + +Homepage: https://dokuwiki.org + +DokuWiki ist eine Wiki Anwendung, lizensiert unter der GPLv2, geschrieben in der PHP Programmsprache, arbeitet mit einfachen Textdateien und braucht deshalb keine Datenbank. Die Syntax ähnelt der von Mediawiki. Mehr in der Wikipedia. + +Entwickler: Andreas Gohr, et al. + +Betriebssystem: Cross-platform +Plattform:PHP + +Lizenz: GNU General Public License From 9561ef46503f2c5cd7e964195062231adc7b262b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anton=20Str=C3=B6mkvist?= <anton@stromkvist.com> Date: Wed, 9 Oct 2019 17:01:41 +0200 Subject: [PATCH 186/360] Fix mistakes in packagin_apps_start.md --- packaging_apps_start.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packaging_apps_start.md b/packaging_apps_start.md index a6130781..9cbecf34 100644 --- a/packaging_apps_start.md +++ b/packaging_apps_start.md @@ -35,9 +35,9 @@ The install script will handle the user answers to complete the process as you w 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 +### What is a script? -Scripts used during application packaging are simply a serie of bash commands. +Scripts used during application packaging are simply a series of bash commands. ### ... bash command? @@ -49,7 +49,7 @@ Package scripts are therefore a series of bash commands as if you had typed them To know what you can write in a bash script, you should start reading this [simple tutorial](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? +### 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 it to do. From bbe8edfdeb1185b0cae8b7e4e4b29879352ed833 Mon Sep 17 00:00:00 2001 From: Plumf <45500657+Plumf@users.noreply.github.com> Date: Wed, 9 Oct 2019 20:56:18 +0200 Subject: [PATCH 187/360] Update app_ffsync_it.md --- app_ffsync_it.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app_ffsync_it.md b/app_ffsync_it.md index 341a4bf8..c83e4b64 100644 --- a/app_ffsync_it.md +++ b/app_ffsync_it.md @@ -1,8 +1,8 @@ # Firefox Sync Firefox Sync permette la sincronizzazione di plugin, schede, segnalibri, preferiti e cronologia fra diverse istanze di Firefox. -### Configurazione di Firefox -#### Firefox versione desktop +## Configurazione di Firefox +### Firefox versione desktop Nella barra degli indirizzi di Firefox inserite: `about:config`. Cercate: `identity.sync.tokenserver.uri`. @@ -11,5 +11,5 @@ Modificate l'indirizzo trovato in: https://mydomain.tld/path/token/1.0/sync/1.5 Create un account su Mozilla: https://accounts.firefox.com/signup -#### Firefox versione mobile -Nell'ultima versione di Firefox mobile la procedura è identica a quella per la versione desktop. \ No newline at end of file +### Firefox versione mobile +Nell'ultima versione di Firefox mobile la procedura è identica a quella per la versione desktop. From c77adb41fa0060d06a3dd51b52c70f8ae224bc0b Mon Sep 17 00:00:00 2001 From: Plumf <45500657+Plumf@users.noreply.github.com> Date: Wed, 9 Oct 2019 20:57:49 +0200 Subject: [PATCH 188/360] Update index_it.md --- index_it.md | 1 - 1 file changed, 1 deletion(-) diff --git a/index_it.md b/index_it.md index a1fd7c7d..abc4c5e8 100644 --- a/index_it.md +++ b/index_it.md @@ -9,7 +9,6 @@ <span class="yolo 1" style="color: #FF3399;">Self-hosting for you, mom</span> <span class="yolo 2" style="color: #6699FF;">Haters gonna host</span> <span class="yolo 3" style="color: #66FF33;">I host myself, Yo!</span> -With the last version of firefox mobile it's same than for desktop. <span class="yolo 4" style="color: #00FFCC;">Go host yourself!</span> <span class="yolo 5" style="color: #FF5050;">Get off of my cloud</span> <span class="yolo 6" style="color: #FF0066;">Host me I’m famous</span> From 1376de666b22547b3ebf12c477c1449cb0330672 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Wed, 9 Oct 2019 23:31:50 +0200 Subject: [PATCH 189/360] Updating documentation following changes in the PRs --- groups_and_permissions.md | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/groups_and_permissions.md b/groups_and_permissions.md index a24b5a7c..6b89207d 100644 --- a/groups_and_permissions.md +++ b/groups_and_permissions.md @@ -12,13 +12,13 @@ Using groups is however useful for semantic, for example if you host multiple gr ### List existing groups -To list the currently existing groups : +To list the currently existing groups : ```bash $ yunohost user group list -groups: - all_users: - members: +groups: + all_users: + members: - alice - bob - charlie @@ -43,7 +43,7 @@ $ yunohost user group update yolo_crew --add charlie delphine (similarly, `--remove` can be used to remove members from a group) -Now in the group list we should see : +Now in the group list we should see : ```bash $ yunohost user group list @@ -79,14 +79,14 @@ To list permissions and corresponding accesses: ```bash $ yunohost user permission list -permissions: - mail.main: +permissions: + mail.main: allowed: all_users - wordpress.admin: - allowed: - wordpress.main: + wordpress.admin: + allowed: + wordpress.main: allowed: all_users - xmpp.main: + xmpp.main: allowed: all_users ``` @@ -108,7 +108,7 @@ Note that you can also allow a single user: $ yunohost user permission update wordpress.admin --add alice ``` -And now we may see that both the YoloCrew and Alice have access to the wordpress admin interface : +And now we may see that both the YoloCrew and Alice have access to the wordpress admin interface : ```bash $ yunohost user permission list @@ -120,7 +120,7 @@ $ yunohost user permission list [...] ``` -Note that, for example, if we want to restrict permission for email so that only Bob, we should also remove `all_users` from the permission : +Note that, for example, if we want to restrict permission for email so that only Bob, we should also remove `all_users` from the permission : ```bash $ yunohost user permission update mail --remove all_users --add bob @@ -129,17 +129,17 @@ $ yunohost user permission update mail --remove all_users --add bob ### Notes for apps packagers By default, installing an app creates the permission `$app.main` with `all_users` allowed by default. -If you want to create a custom permission for your app (e.g. to restrict access to an admin interface) you may use the following helpers: + +If you wish to make the application publicly available, instead of the old `unprotected_urls` mechanism, you should give access to the special groups `visitors`: ```bash -ynh_permission_create --permission "admin" --urls "$domain$path_url/admin" -ynh_permission_update --permission "admin" --add "$admin_user" +ynh_permission_update --permission "main" --remove "all_users" --add "visitors" ``` -For now, inside the `change_url` script, you need to take care of updating the url corresponding to your permission: +If you wish to create a custom permission for your app (e.g. to restrict access to an admin interface) you may use the following helpers: ```bash -ynh_permission_urls --permission "admin" --remove "$old_domain$old_path_url/admin" --add "$domain$path_url/admin" +ynh_permission_create --permission "admin" --url "/admin" --allowed "$admin_user" ``` -However, you don't need to take care of removing permissions or backing up/restoring them as it is handled by the core of YunoHost. +You don't need to take care of removing permissions or backing up/restoring them as it is handled by the core of YunoHost. From a782f0938cf32db422a93a77476a4b7e9ab528bb Mon Sep 17 00:00:00 2001 From: GannonTdW <32203939+GannonTdW@users.noreply.github.com> Date: Thu, 10 Oct 2019 00:30:31 +0200 Subject: [PATCH 190/360] typo error --- project_budget.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_budget.md b/project_budget.md index 9d461450..ae733961 100644 --- a/project_budget.md +++ b/project_budget.md @@ -19,7 +19,7 @@ * noho.st: ~35€ TTC/year * YunoHost.org: 13.99€HT/year * YunoHost.com: 9.99€HT/year - * labriqueinter.net: 12.49€Ht/year + * labriqueinter.net: 12.49€HT/year * internetcu.be: 17.99€HT/year * Communication: ~200€ * Travel (e.g. to go to conferences): ~500€ From 5278b5567700e433ae17c9ca1489cd61bf66fba8 Mon Sep 17 00:00:00 2001 From: GannonTdW <32203939+GannonTdW@users.noreply.github.com> Date: Thu, 10 Oct 2019 00:31:25 +0200 Subject: [PATCH 191/360] Create project_budget_fr.md --- project_budget_fr.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 project_budget_fr.md diff --git a/project_budget_fr.md b/project_budget_fr.md new file mode 100644 index 00000000..08f6d596 --- /dev/null +++ b/project_budget_fr.md @@ -0,0 +1,28 @@ +# Budget du projet + +# Budget prévisionnel pour 2019/2020 + +## Revenus attendus + +* Dons via Liberapay: environ 45 € / semaine, soit environ 2340 € / an +* Subvention de NLNet: 20K €, à utiliser pour la R&D (TODO: publier le plan de projet une fois validé avec NLnet) + +## Dépenses prévues + +* Location Server: ~1000€ + * Forum: 14.4€/mois: 172.80€/ans + * CI: 20€/mois (à confirmer): 240€/mois + * Mifration du serveur "Bearnaise" sur une nouvelle machine: 587.2€ +* Noms de domaines: ~150€ + * nohost.me: 11.99€HT/ans + * ynh.fr: 6.99€HT/ans (doit être confirmer avec frju?) + * noho.st: ~35€ TTC/ans + * YunoHost.org: 13.99€HT/ans + * YunoHost.com: 9.99€HT/ans + * labriqueinter.net: 12.49€Ht/ans + * internetcu.be: 17.99€HT/ans +* Communication: ~200€ +* Déplacements (ex: aller aux conférences): ~500€ +* Compte banquaire fees: 7x12€ => ~100€ + +**Total**: environ 2000€ From f877775267a415979bf81c6e0bd37e1faf128929 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Thu, 10 Oct 2019 18:50:47 +0000 Subject: [PATCH 192/360] Changed configuration box link to English page --- isp.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isp.md b/isp.md index 04343253..25590358 100644 --- a/isp.md +++ b/isp.md @@ -1,6 +1,6 @@ # Internet service providers -<a class="btn btn-lg btn-default" href="/isp_box_config_fr"> Main configuration box</a> +<a class="btn btn-lg btn-default" href="/isp_box_config_en"> Main configuration box</a> Here is a non-comprehensive list of internet service providers by country, which contains criteria about tolerance to self-hosting. From 522ddfe5fc5853a270028f5627be45c9b80367d8 Mon Sep 17 00:00:00 2001 From: frju365 <abld@abld.info> Date: Fri, 11 Oct 2019 08:43:23 +0200 Subject: [PATCH 193/360] Typos --- project_budget_fr.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/project_budget_fr.md b/project_budget_fr.md index 08f6d596..d73a948b 100644 --- a/project_budget_fr.md +++ b/project_budget_fr.md @@ -12,8 +12,8 @@ * Location Server: ~1000€ * Forum: 14.4€/mois: 172.80€/ans * CI: 20€/mois (à confirmer): 240€/mois - * Mifration du serveur "Bearnaise" sur une nouvelle machine: 587.2€ -* Noms de domaines: ~150€ + * Migration du serveur "Bearnaise" sur une nouvelle machine: 587.2€ +* Noms de domaine: ~150€ * nohost.me: 11.99€HT/ans * ynh.fr: 6.99€HT/ans (doit être confirmer avec frju?) * noho.st: ~35€ TTC/ans From 5918357a6c3f33595d38a42859685d9795c5a54f Mon Sep 17 00:00:00 2001 From: Bernard <bernard@ei8fdb.org> Date: Sun, 13 Oct 2019 20:35:03 +0100 Subject: [PATCH 194/360] Updating XMPP (_en) docs to make explicit how to use XMPP account. --- XMPP.md | 57 +++++++++++++++++++++++++++++++++------------------------ 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/XMPP.md b/XMPP.md index 85a30665..fdff0d24 100644 --- a/XMPP.md +++ b/XMPP.md @@ -1,53 +1,62 @@ # Chat, VoIP and social network with <img src="/images/XMPP_logo.png" width=100> -YunoHost comes installed with an instant messaging server Metronome which implements the [XMPP protocol](https://en.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol). +YunoHost comes installed with an instant messaging server Metronome which implements the [XMPP protocol](https://en.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol)(previously known as Jabber), by default. -XMPP is an open and extensible protocol which allows to create chatrooms, to share status and data, to give calls in VoIP and videoconferences. +This protocol is already used by millions of people around the world - it is an open protocol. All applications based on XMPP are compatible with each other: when using an XMPP client, you can interact with anybody who has an XMPP account. -All applications based on XMPP are compatible with each other : when using an XMPP client, you can interact with anybody who has an XMPP/Jabber account. This protocol is already used by millions of people around the world. +XMPP is an extensible protocol - this means users can configure "extensions" to chatrooms, to share messages and files, and to make voice and video calls using XMPP. -### XMPP/Jabber account +## XMPP account -An XMPP/Jabber account is based on an identifier with the structure `user@domain.tld`, and a password. +To use an XMPP account you need a username, which takes the format: `user@domain.tld`, and a password. -In YunoHost, this identifier simply corresponds to the main email address of a user, with his regular password. +With YunoHost, an XMPP account is created for a registered account automatically. The XMPP account can be used with the main email address and her YunoHost password. -### Connecting to XMPP +## Connecting to your YunoHost XMPP account -There are several web client built with social network features : +You can connect to your YunoHost XMPP account in different ways. + +### Web clients + +There are several XMPP web clients: - [Movim](https://pod.movim.eu) - [Libervia/Salut à Toi](http://salut-a-toi.org/). + +### Desktop clients + You can also use a desktop client such as : -- [Pidgin](http://pidgin.im/) (multiplatform), +- [Pidgin](http://pidgin.im/) (multiplatform), - [Gajim](http://gajim.org/) (Linux, Windows), - [Dino](https://dino.im) (Linux), -- [Thunderbird](https://www.thundebird.net/) (multiplatform), -- [Jitsi](http://jitsi.org/) (multiplatform) +- [Thunderbird](https://www.thundebird.net/) (multiplatform), +- [Jitsi](http://jitsi.org/) (multiplatform) - [Adium](https://adium.im/) (Mac OS). -... or a mobile client -* [Xabber](http://xabber.com) (Android) -* [Conversations](https://conversations.im/) (Android) -* [Movim under Android](https://movim.eu) -* [Monal](https://itunes.apple.com/us/app/monal-free-xmpp-chat/id317711500?mt=8) (iOS) +### Mobile clients + +Or a mobile client such as: +- [Xabber](http://xabber.com) (Android) +- [Conversations](https://conversations.im/) (Android) +- [Movim under Android](https://movim.eu) +- [Monal](https://itunes.apple.com/us/app/monal-free-xmpp-chat/id317711500?mt=8) (iOS) Here is an exhaustive list of XMPP clients : https://en.wikipedia.org/wiki/Comparison_of_XMPP_clients -### Encrypt conversations with OMEMO +## Encrypt conversations with OMEMO -XMPP chats can be encrypted with the help of [OMEMO](https://xmpp.org/extensions/xep-0384.html), for instance using Gajim : -* Install `gajim` and the plugin `gajim-omemo` -* Enable the plugin in `Tools > Plugins` -* Enable it -* Enable the encryption in the chat with somebody who also has OMEMO +XMPP chats can be made secure and private using [OMEMO] encryption (https://xmpp.org/extensions/xep-0384.html), for instance using Gajim: +- Install `gajim` and the plugin `gajim-omemo` +- Enable the plugin in `Tools > Plugins` +- Enable it +- Enable the encryption in the chat with somebody who also has OMEMO -### Chatrooms +## Chatrooms To create a chatroom (multi-user chat) on your YunoHost server, use the identifier `chatroomname@muc.yourdomain.tld`. For this to work you need to [add the corresponding `muc.` DNS record](dns_config_fr) in the DNS configuration. -### VoIP and videoconferences +## VoIP and videoconferences A practical tool to call an XMPP client, either with voice or voice+video, is to use the client [Jitsi](http://jitsi.org/). From 7531a8cdf2795c0066b6b0b9700e3d5b2d7f3ad7 Mon Sep 17 00:00:00 2001 From: Bernard Tyers <ei8fdb@users.noreply.github.com> Date: Sun, 13 Oct 2019 20:48:41 +0100 Subject: [PATCH 195/360] Update XMPP.md yep! Co-Authored-By: Alexandre Aubin <alex.aubin@mailoo.org> --- XMPP.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XMPP.md b/XMPP.md index fdff0d24..1746bec8 100644 --- a/XMPP.md +++ b/XMPP.md @@ -10,7 +10,7 @@ XMPP is an extensible protocol - this means users can configure "extensions" to To use an XMPP account you need a username, which takes the format: `user@domain.tld`, and a password. -With YunoHost, an XMPP account is created for a registered account automatically. The XMPP account can be used with the main email address and her YunoHost password. +With YunoHost, an XMPP account is created for all YunoHost users automatically. The XMPP account credentials corresponds to the user's main email address and password. ## Connecting to your YunoHost XMPP account From 3068ab1113e4589e5d3babefc5dda82a52552d4a Mon Sep 17 00:00:00 2001 From: Bernard Tyers <ei8fdb@users.noreply.github.com> Date: Sun, 13 Oct 2019 20:49:02 +0100 Subject: [PATCH 196/360] Update XMPP.md :thumbs_up: Co-Authored-By: Alexandre Aubin <alex.aubin@mailoo.org> --- XMPP.md | 1 - 1 file changed, 1 deletion(-) diff --git a/XMPP.md b/XMPP.md index 1746bec8..e08958b1 100644 --- a/XMPP.md +++ b/XMPP.md @@ -18,7 +18,6 @@ You can connect to your YunoHost XMPP account in different ways. ### Web clients -There are several XMPP web clients: - [Movim](https://pod.movim.eu) - [Libervia/Salut à Toi](http://salut-a-toi.org/). From dd44f0686af40a0bcca7440cc268dd0c30987514 Mon Sep 17 00:00:00 2001 From: Bernard Tyers <ei8fdb@users.noreply.github.com> Date: Sun, 13 Oct 2019 20:49:23 +0100 Subject: [PATCH 197/360] Update XMPP.md Co-Authored-By: Alexandre Aubin <alex.aubin@mailoo.org> --- XMPP.md | 1 - 1 file changed, 1 deletion(-) diff --git a/XMPP.md b/XMPP.md index e08958b1..cda985f0 100644 --- a/XMPP.md +++ b/XMPP.md @@ -24,7 +24,6 @@ You can connect to your YunoHost XMPP account in different ways. ### Desktop clients -You can also use a desktop client such as : - [Pidgin](http://pidgin.im/) (multiplatform), - [Gajim](http://gajim.org/) (Linux, Windows), - [Dino](https://dino.im) (Linux), From e32315551f26bd016ec685ee3e53fcc6f84cb145 Mon Sep 17 00:00:00 2001 From: Bernard Tyers <ei8fdb@users.noreply.github.com> Date: Sun, 13 Oct 2019 20:49:51 +0100 Subject: [PATCH 198/360] Update XMPP.md Co-Authored-By: Alexandre Aubin <alex.aubin@mailoo.org> --- XMPP.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XMPP.md b/XMPP.md index cda985f0..3a583704 100644 --- a/XMPP.md +++ b/XMPP.md @@ -1,6 +1,6 @@ # Chat, VoIP and social network with <img src="/images/XMPP_logo.png" width=100> -YunoHost comes installed with an instant messaging server Metronome which implements the [XMPP protocol](https://en.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol)(previously known as Jabber), by default. +YunoHost comes installed by default with an instant messaging server Metronome which implements the [XMPP protocol](https://en.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol) (previously known as Jabber). This protocol is already used by millions of people around the world - it is an open protocol. All applications based on XMPP are compatible with each other: when using an XMPP client, you can interact with anybody who has an XMPP account. From 193df328dc040455d1eee1ffa281e32a7d4b5b05 Mon Sep 17 00:00:00 2001 From: Bernard Tyers <ei8fdb@users.noreply.github.com> Date: Sun, 13 Oct 2019 20:51:33 +0100 Subject: [PATCH 199/360] Update XMPP.md Co-Authored-By: Alexandre Aubin <alex.aubin@mailoo.org> --- XMPP.md | 1 - 1 file changed, 1 deletion(-) diff --git a/XMPP.md b/XMPP.md index 3a583704..5fb4a6ea 100644 --- a/XMPP.md +++ b/XMPP.md @@ -33,7 +33,6 @@ You can connect to your YunoHost XMPP account in different ways. ### Mobile clients -Or a mobile client such as: - [Xabber](http://xabber.com) (Android) - [Conversations](https://conversations.im/) (Android) - [Movim under Android](https://movim.eu) From 9a3310a65143692deca4d7466d366aa6353ba401 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Sun, 13 Oct 2019 21:54:28 +0200 Subject: [PATCH 200/360] Propagate changes on french page --- XMPP_fr.md | 47 ++++++++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/XMPP_fr.md b/XMPP_fr.md index f1e663b0..e38c6300 100644 --- a/XMPP_fr.md +++ b/XMPP_fr.md @@ -1,32 +1,37 @@ #Chat, VoIP et réseau social avec <img src="/images/XMPP_logo.png" width=100> -Yunohost est installé avec un serveur de messagerie instantanée Metronome qui implémente le [protocole XMPP](https://fr.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol). +Yunohost est installé par défaut avec un serveur de messagerie instantanée Metronome qui implémente le [protocole XMPP](https://fr.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol) (anciennement connu sous le nom Jabber). -XMPP est un protocole ouvert et extensible qui permet également de créer des salons de discussions, de partager des statuts et des données, de passer des appels en VoIP et de faire de la visioconférence. +Ce protocole est déjà utilisé par des millions de personnes dans le monde - c'est un protocole ouvert. Toutes les applications basées sur XMPP sont compatibles entre elles : lorsque vous utilisez un client XMPP, vous pouvez interagir avec quiconque possède un compte XMPP. -Toutes les applications basées sur XMPP sont compatibles entre-elles : lorsque vous utilisez un client XMPP vous pouvez discuter avec n’importe quel possesseur d’un compte XMPP/Jabber. Ce protocole est déjà utilisé par des millions de personnes dans le monde. +XMPP est un protocole extensible - cela signifie que les utilisateurs peuvent configurer des "extensions" pour les salons de discussions, partager des messages et des fichiers, et passer des appels voix et vidéo en utilisant XMPP. -### Compte XMPP/Jabber +## Compte XMPP -Un compte XMPP/Jabber est basé sur un identifiant sous la forme `utilisateur@domaine.tld`, ainsi qu’un mot de passe. +Pour utiliser XMPP, il est nécessaire de disposer d'un compte dont l'identifiant prends la forme `utilisateur@domaine.tld`, ainsi qu’un mot de passe. -Sous Yunohost, cet identifiant correspond simplement à l’adresse courriel principale d’un utilisateur. Le mot de passe est celui du compte de l’utilisateur. +Sous Yunohost, un compte XMPP est créé automatiquement pour chaque utilisateur. Les identifiants XMPP sont simplement l’adresse courriel principale de l'utilisateur ainsi que son mot de passe. -### Se connecter à XMPP +## Se connecter à son compte XMPP YunoHost + +Il existe différents types de clients pour se connecter à XMPP. + +### Clients web -Il existe des clients web orientés réseau social, comme : - [Movim](https://pod.movim.eu) - [Libervia/Salut à Toi](http://salut-a-toi.org/). -Vous pouvez également utiliser un client desktop comme -- [Pidgin](http://pidgin.im/) (multiplateforme), +### Clients de bureau + +- [Pidgin](http://pidgin.im/) (multiplateforme), - [Gajim](http://gajim.org/index.fr.html) (Linux, Windows), - [Dino](https://dino.im) (Linux), -- [Thunderbird](https://www.mozilla.org/fr/thunderbird/) (multiplateforme), -- [Jitsi](http://jitsi.org/) (multiplateforme) +- [Thunderbird](https://www.mozilla.org/fr/thunderbird/) (multiplateforme), +- [Jitsi](http://jitsi.org/) (multiplateforme) - [Adium](https://adium.im/) (Mac OS). -... ou un client smartphone +### Clients sur mobile + * [Xabber](http://xabber.com) (Android) * [Conversations](https://conversations.im/) (Android) * [Movim sous Android](https://movim.eu) @@ -34,20 +39,20 @@ Vous pouvez également utiliser un client desktop comme Voici une liste plus exhaustive des clients XMPP : https://fr.wikipedia.org/wiki/Liste_de_clients_XMPP -### Chiffrer ses conversations avec OMEMO +## Chiffrer ses conversations avec OMEMO -Il est possible de chiffrer ses conversations XMPP à l’aide de [OMEMO](https://xmpp.org/extensions/xep-0384.html), notamment en utilisant Gajim : -* Installer `gajim` et le plugin `gajim-omemo` -* Activez le plugins dans `Outils > Plugins` -* L'activer -* Activez le chiffrement dans une conversation avec un contact disposant de OMEMO. +Il est possible de rendre les conversations plus sécurisées et privées en les chiffrants à l'aide de [OMEMO](https://xmpp.org/extensions/xep-0384.html), notamment en utilisant Gajim : +- Installer `gajim` et le plugin `gajim-omemo` +- Activez le plugins dans `Outils > Plugins` +- L'activer +- Activez le chiffrement dans une conversation avec un contact disposant de OMEMO. -### Salon de discussion +## Salon de discussion Pour créer un salon de discussion (Multi-user chat) sur votre serveur Yunohost utilisez l’identifiant nomsalon@muc.domaine.tld (où domaine.tld est le domaine principal de votre serveur). Si vous utilisez un nom de domaine personnel, il est nécessaire d’[ajouter une redirection de type CNAME pour le sous domaine `muc.`](dns_config_fr) au niveau de votre serveur DNS. -### VoIP et visioconférence +## VoIP et visioconférence Un moyen pratique d’appeler un contact XMPP, en VoIP ou en appel vidéo, est d’utiliser le client [Jitsi](http://jitsi.org/). From 76e4ae2999b037709a63bb4d520d0ff783be7433 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alexandre.aubin@cern.ch> Date: Mon, 14 Oct 2019 17:44:26 +0200 Subject: [PATCH 201/360] Move to LXC/LXD instead of vagrant, and update oudated dev doc bits --- dev.md | 32 ++++++++----------- dev_fr.md | 30 +++++++----------- images/images.list | 2 +- images/lxc.png | Bin 0 -> 10041 bytes images/vagrant.png | Bin 51377 -> 0 bytes install.md | 8 ++--- install_ar.md | 8 ++--- install_es.md | 9 +++--- install_fr.md | 8 ++--- install_it.md | 6 ++-- troubleshooting_guide.md | 2 +- troubleshooting_guide_fr.md | 2 +- vagrant.md | 59 ----------------------------------- vagrant_es.md | 60 ------------------------------------ vagrant_fr.md | 59 ----------------------------------- 15 files changed, 45 insertions(+), 240 deletions(-) create mode 100644 images/lxc.png delete mode 100644 images/vagrant.png delete mode 100644 vagrant.md delete mode 100644 vagrant_es.md delete mode 100644 vagrant_fr.md diff --git a/dev.md b/dev.md index e76fda01..645915a6 100644 --- a/dev.md +++ b/dev.md @@ -7,7 +7,7 @@ contribution process. If you're looking for stuff to implement or fix, the bug-tracker is [here](https://github.com/YunoHost/issues/issues) ! -**Come say hi to us in the [dev chatroom](xmpp:dev@conference.yunohost.org?join)** ! If you don't have an XMPP client, you can join using the widget at the bottom right of this page. +**Come say hi to us in the [dev chatroom](/chat_rooms)** ! ### Setting up a development environment @@ -19,16 +19,16 @@ If you're looking for stuff to implement or fix, the bug-tracker is - **Implement and test your feature**. Depending on what you want to develop, you will want to : - - **Python/CLI core** : work in `/vagrant/yunohost/` - - **Web administration interface** : work in `/vagrant/yunohost-admin/` + - **Python/CLI core** : work in `/ynh-dev/yunohost/` + - **Web administration interface** : work in `/ynh-dev/yunohost-admin/` - You can also work on the other projects on which YunoHost is built (SSOwat, moulinette) in similar ways ### Working on the YunoHost Python/CLI core -- Work in `/vagrant/yunohost/`. +- Work in `/ynh-dev/yunohost/`. -- Run `/vagrant/ynh-dev use-git yunohost`. +- Run `cd /ynh_dev/ && ./ynh-dev use-git yunohost`. - The actionsmap file (`data/actionsmap/yunohost.yml`) defines the various categories, actions and arguments of the yunohost CLI. Define how you want @@ -45,7 +45,7 @@ If you're looking for stuff to implement or fix, the bug-tracker is ##### Helpers / coding style -- To handle exceptions, you should raise some `MoulinetteError()` +- To handle exceptions, you should raise some `YunohostError()` - To help with internationalizing the messages, use `m18n.n('some-message-id')` and put your string in `locales/en.json`. You can also put arguments and use @@ -57,17 +57,11 @@ If you're looking for stuff to implement or fix, the bug-tracker is - Name of "private" functions should start with a `_` -##### Don't forget - -- (Might not be necessary anymore) Each time you edit the actionsmap, you should - force the refresh of the cache with `rm - /var/cache/moulinette/actionsmap/yunohost.pkl` - ### Working on the YunoHost web administration interface -- Work in `/vagrant/yunohost-admin/src/`. +- Work in `/ynh-dev/yunohost-admin/src/`. -- Run `/vagrant/ynh-dev use-git yunohost-admin`. It launches gulp, such as each +- Run `cd /ynh-dev && ./ynh-dev use-git yunohost-admin`. It launches gulp, such as each time you modify sources, it recompiles the code and you can use it by refreshing (Ctrl+F5) your web administration. To stop the command, just do Ctrl+C. @@ -111,14 +105,12 @@ If you're looking for stuff to implement or fix, the bug-tracker is - Fork the relevant repo on Github, and commit stuff to a new branch. We recommend to name the branch with the following convention : - - For an enhancement or new feature : `enh-REDMINETICKET-name-of-feature` - - For a bugfix `fix-REDMINETICKET-description-of-fix` - - `REDMINETICKET` is optional and is the id of a corresponding ticket on RedMine. + - For an enhancement or new feature : `enh-ISSUENUMBER-name-of-feature` + - For a bugfix `fix-ISSUENUMBER-description-of-fix` + - `ISSUENUMBER` is optional and is the id of a corresponding ticket on the bug tracker. - Once you're ready, open a Pull Request (PR) on Github. Please include `[fix]` or `[enh]` at the beginning of the title of your PR. - After reviewing, testing and validation by other contributors, your branch -should be merged in `testing` (?) ! - - +should be merged in `unstable` ! diff --git a/dev_fr.md b/dev_fr.md index 2cfa4cd8..d161888c 100644 --- a/dev_fr.md +++ b/dev_fr.md @@ -7,9 +7,7 @@ processus de contribution. Si vous chercher quelque chose à implémenter ou un bug à réparer, le bug tracker est [ici](https://github.com/yunohost/issues/issues) ! -**Venez dire coucou sur le [salon de -dev](xmpp:dev@conference.yunohost.org?join)** ! Si vous n'avez pas de client -XMPP, vous devriez pouvoir vous connecter à l'aide du widget en bas de la page. +**Venez dire coucou sur le [salon de dev](/chat_rooms)** ! ### Mettre en place un environnement de développement @@ -23,16 +21,16 @@ XMPP, vous devriez pouvoir vous connecter à l'aide du widget en bas de la page. - **Implémentez et testez votre fonctionnalité**. Suivant ce sur quoi vous voulez travailler : - - **Cœur Python/ligne de comande** : allez dans `/vagrant/yunohost/` - - **Interface d'administration web** : allez dans `/vagrant/yunohost-admin/` + - **Cœur Python/ligne de comande** : allez dans `/ynh-dev/yunohost/` + - **Interface d'administration web** : allez dans `/ynh-dev/yunohost-admin/` - Vous pouvez aussi travailler sur les autres projets liés sur lesquels s'appuie YunoHost (SSOwat, moulinette) de façon similaire. ### Travailler sur le cœur Python / ligne de commande -- Allez dans `/vagrant/yunohost/`. +- Allez dans `/ynh-dev/yunohost/`. -- Exécutez `/vagrant/ynh-dev use-git yunohost`. +- Exécutez `cd /ynh-dev && ./ynh-dev use-git yunohost`. - Le fichier actionsmap (`data/actionsmap/yunohost.yml`) définit les différentes catégories, actions et arguments de la ligne de commande YunoHost. Choisissez @@ -49,7 +47,7 @@ XMPP, vous devriez pouvoir vous connecter à l'aide du widget en bas de la page. ##### Helpers / style de code -- Pour gérer les exceptions, il existe un type `MoulinetteError()` +- Pour gérer les exceptions, il existe un type `YunohostError()` - Pour aider avec l'internationalisation des messages, utilisez `m18n.n('some-message-id')` et mettez le message correspondant dans `locales/en.json`. Vous pouvez aussi @@ -62,17 +60,11 @@ XMPP, vous devriez pouvoir vous connecter à l'aide du widget en bas de la page. - Mettre un `_` devant les noms des fonctions "privées". -##### N'oubliez pas - -- (Peut-être plus nécessaire) À chaque fois que vous modifiez l'actionsmap, il - faut forcer le rafraîchissement du cache avec : - `rm /var/cache/moulinette/actionsmap/yunohost.pkl` - ### Travailler sur l'interface d'administration web -- Allez dans `/vagrant/yunohost-admin/src/`. +- Allez dans `/ynh-dev/yunohost-admin/src/`. -- Exécutez `/vagrant/ynh-dev use-git yunohost-admin`. Ceci lance gulp, de sorte +- Exécutez `cd /ynh-dev && ./ynh-dev use-git yunohost-admin`. Ceci lance gulp, de sorte qu'à chaque fois que vous modifiez les sources, il recompilera le code (js) et vous pourrez voir les changements dans le navigateur web (Ctrl+F5). Pour stopper la commande, faites simplement Ctrl+C. @@ -121,14 +113,14 @@ XMPP, vous devriez pouvoir vous connecter à l'aide du widget en bas de la page. - Forkez le dépòt correspondant sur Github, et commitez vos changements dans une nouvelle branche, Il est recommandé de nommer la branche avec la convention : - - Pour une nouvelle fonctionnalité ou amélioration : `enh-TICKETREDMINE-description-fonctionnalité` + - Pour une nouvelle fonctionnalité ou amélioration : `enh-ISSUENUMBER-description-fonctionnalité` - Pour une correction de bug : `fix-REDMINETICKET-description-correctif` - - `TICKETREDMINE` est optionnel et correspond au numéro du ticket sur RedMine + - `ISSUENUMBER` est optionnel et correspond au numéro du ticket sur le bug tracker - Une fois prêt, ouvrez une Pull Request (PR) sur Github. De préférence, inclure `[fix]` ou `[enh]` au début du titre de la PR. - Après relecture, test et validation par les autres contributeurs, votre - branche sera mergée dans `testing` (?) ! + branche sera mergée dans `unstable` ! diff --git a/images/images.list b/images/images.list index 585a521b..9b1cf3f4 100644 --- a/images/images.list +++ b/images/images.list @@ -27,6 +27,7 @@ Linuxfr.png logo-jirafeau.jpeg logo.png Logo-wallabag-svg.svg +lxc.png mailview.jpg webadmin.png webadmin_fr.png @@ -55,7 +56,6 @@ transmission.png ttrss.png unetbootin.png usb_key.png -vagrant.png virtualbox_1.png virtualbox_2.1.png virtualbox_2.png diff --git a/images/lxc.png b/images/lxc.png new file mode 100644 index 0000000000000000000000000000000000000000..e344c1ddbdecfdbb9968cb12ccd215f2a0a819a7 GIT binary patch literal 10041 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 literal 0 HcmV?d00001 diff --git a/images/vagrant.png b/images/vagrant.png deleted file mode 100644 index 8a04afb11d159b43c29e824473955c1d723323ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51377 zcmV)oK%BpcP)<h;3K|Lk000e1NJLTq00EEy00EE)1^@s6fWJ1(0078%Nkl<ZcmeFe zfdBvi0Dz$VsTZjN0000000000000000000000000000000001(Ju`-pDGH;o4Vxel z5~V^X6P?&fXtWxuQ79xzg=}akv>LN?8kI(=*+>)`1v@GYt-`+lyBn*JC?uXUH}58Q z_6<rqGv`ab{O4}5#b3O$ckk@bG|kd@0&DW-IH!buW{mkeW-#2mEFTPpqvgTyoxdB4 zL`vyUL|g<uMbIisJ^<%Q9Q1~aG5;)(^--$=X_T+X!`{l=7YED0ihLFkEzp)(<)`ut zi38r4nT9bck5!dMTe%@G$a(w&)DUqRxG#5PTZ}Rz&tf9DD^Kk+#+d#MWHsMFq_WKO zhvq}M;tkCSB#sl@4&psgZW+bu=21!{+huqwZ$&gmy-8!t^czT5BI{#w{-}9R^Q1R5 zV*pE4zCrK`_$6DS6ME(GM}wacyacY5-<$AbyD=`1QW(X_LXmIen)LT#mWXK10UHE6 zr634dzk9?)Nn}e7N%Tr)o8W~!>kS(-iEkjie`n>h{I2|3^OCo=$JyHA81N*5MD*V_ z>N2U%5nb+PT_C+82^!#WO6iC<Zp>n$lF%E-W>p-W{dbY#H=Umk9*s_TdwUGFSpu%h zFLi0;GT2odLCI6gBpbxk0-+QPGUBtm>g}5a#*gTwAadSyF0<t9=&R0m<g&N;p8@vE z-|T$}cwE($=9eZ*PlxG-BrMIo#CFRjA)TdZlBSb%GM$-eh6MtFBrL=ZSppO2o^--= zl3wO(7BKq~mIMp|8yjO8jKS;}2w0XS+p;Y$mL*k5s(R<XD($i?sp{Q1@9D~Vb@Ja^ zMZkix-}}Dv-S?^r>REN){qH&df6kf3wn}mvituQa@0yX#4jz~<S;;m{k=if$MUrD* zI}#4WfCMJfCq@+7+QR3b=W(jj1(Jh^-mjE8i0uwVm=Kp-2O)2R2>v&uNPgDInV50z z_&s@hIglhrawJF1ZVp5M1po~=@@I@K;@6JgZ1xXM&7CJ+$6-WtDUUmO)Pz-4(vtuR zEC3LMJQ8y)!G@H)4#!@l=n@|PeDD4hk|Q}14}@)Z=&A;Uti))}!x6s!vst&TIdae4 zaRMC25Yah2t||#Nu@UejTwr0&joCgQy(fuy0U#4b^1pwb?JTxKlV2`5lH*;gclXCc zbkLq6(IGgn2@k^#EXE=LVms=_`sPpG*>K5@_Us|=&}}9MDLRDhXG*D8*a~bVWVZ=9 z*+W<gawEcGBs&77I9LHw3R;0}xl%MIlgT9I4U!`{rZ&v|DYiR^)KaC?1-YER-<~XG zVt@k^=Lkp)Pg27+?dE!Y@O5?i)Q6h%eQ&nvt}HFj`RbgJLXhN-yv<24M=A9hTOdo1 zNbZ9ThOZ=$V1itD6^bzVjuR2V{gj*!@wkkL{(JI^CdZyVl0$jwK&8}wvTck#qrE&n z#^Wh_tdt2`JfW~gf`+{2&&}lXk6yb<pLj=uzV)>hy`e3uhkA0__oMsH6VU>;zk2I; zmxQanM5JCMqMqGhBmoT29I7cC;xb;0;6F$a1S)stdMuoUKi5S>^Lacr`Gu2Xj~q$m zi65}7C89CB0i-l3^&9fMgWusqLcwhaU=f7+EPn5(xvTX@7(D*<*{!;vHKX&s(mi>9 zax**`8EIp?n}`l5e^<%wAyig9N~Bapi$4StOrV<yBt9oWM*@WyNxY}1lmj7>N-haz z0b2)OUz7aW$?=XINxi$16sc88sR7A{5-E9IAf-}#e%0Fpka`0k<t^@&%;0hVYgXyA z=Wo#U3>;k^>F%8GR(vWoMnoZyTxq|fBwY26N-1Is+{8Eb0B|CpOd?bm4B}xcax1iy z3~?!`*qXRUN%Y4-hYCchmB-VPUp_gK;}1JL^1?!?_p=SgpM4mCP$XseV|?Ds_T{&g ziEdL|iPvh_4!@yJ&*E^^;>MKrbEWqckF+ST78x63Ya*i0^DQJtI+G4F$WJDsCU^M9 z%{fRpZyXfd9*dJF5$AF667u0n?;Bi`Qco#T$0f5NIg+DdkK>OOsZcKOOOM~3P;7mF z0oxI8nFC?ZqM~f{P+`SH`IS#?(K%n~-Y`^UkAlE;&U`Muu7$vP=)UT0d?1wNvi)Wv z^h1Ep5DP5^5#gDTORfukG?HN_3{q~cMPYD|5?_ZZY>e%vY=;tgSb32g$&v6Kf5P@@ zwpGsOiXtn^V~P;-Alnc5{GiH7bm?`JUQZ9NZ(pPTe%^Y$p2JnaU|z08c&(H7YfqN$ zW%~}>NB1G{h=AjAwq5p^A2Mf721aW)2mqc$R^*j^LnH`ESGm;l2}dH^B!+;}LZr?l zqC^Lt9LX`+f;!xA{sr6Zu|+h1>xM07OX0N!@SN-U{A*%S#sDG{2o2A1>`kk6&24M+ z-~4)=o>$kZ_0DeQIh6K19Oa0$)wcI364z8(HGCD@SNQzEy?GKG92OrWQcVu|s~d@p zr{dh*Ln2)6ObCBY#z`HdI{rKW8SI@%lU~a*KL4u9st+g2$3A`}UdMDI`aeAO;Efmd zD9Ql~OcJIN{&fM{DQq8fs<2ELtA@{yyQy9uedB6<3IoS~JikqM`$`Y@=5#g&926SZ zu);96B6#0Ym=pW=&*Sk6DyR0ILXEjxF05O18WBAX7I{E;$(=iiO1NTSmR`Wbx&6l} ztE^%Jl3^68Dt!;Wj{y>WUOo(?Jl@Hc5N7-0k?<TJA)@aqQVmMvctwW9Gok`F0-D&m zVm>Rv+ohiyWSdJwpON=hV=~c0o528b*bS@or|xRd|NP8Wy>>@NkM`xXKmI+&@IAnE z1Dlt`R)NRWt4LkT<B59%*YO#p)B|jJ%stp8xRTU%k=7>MBo^#S6ALByh<@oLTujhM zoh+V;`R}d3#Mj`SNP0xAM06c{a7mq<<k%+;MNt``6+DhPYTZeYkRX6JnC`GPScg<N zZeja3^5~#=F+~OueJpz%f6h4_->+@f&u{98B)LqI$G+2A;ajc)qS^&ekxGxrEj-$! zNd4Te#;}%`$%bUtO^Q^z{9zRl1PQwdLQGM4AR<7X#};%_Bqtx{D#Y$a0gnNJg&ic! z=nS=ii9=Lm+r-yb?5&GNawJE{a}d#DHeWu!(xj}O2!)dgbDQ!R!`vj2{WcQO?C@R> zy?*tn2VPsJ|Nen>dU;byr?aH{7&v^nZeSU|CG1Y{{@j4)d~cLU)${oURWk|nSnq}T zoJxB{qmpdK6Tq18J_!8SktyI+*pmLJoHWjnaV}LH#)!(wbA=b;mI;$vX(4wnLp-iy zJ7sTKG?F7Zs9Sx2NZmn1ijP1(M|Q;}1_10)IOX*&lN-%}-fsVuE0;E3b>ADUy2GPL zn#(3DQGg2HBqhi49!uUMD>vd!fR>;4hz5px{FQ}1f5v-$GJN4T>xMVBW%bxVUVGw4 zlWwQ`kL?B=ykH|Do~$I4N2*9f0ZE{-ft?!+EZ;@t{!Q2uvR+e>lp0oHkvLx^<qeXf z+QZye5k+zPj8dv!iEyzz$3(IW6<Y-`Se<1L3)y71MFxzK@O9tEq&JoCH3YsR99_I9 z*i_o17Hld?Slrd?>)Q1h{hcRL%c`N#%IF~+7rgw*%|XsrL3iF48QK+;TPN4+E|9^m zfjp2PG`W+pll<2EmE@KPds+A#g+UZd;J8~Ggy13WVVH=1(%aknM^(0NBu4@qf6KN_ zc-sR!W_TP?u-XHNSU5&`jw2z``^Uf(Q#=Lk%_9aX`1}h|jbno<KaW+V0%ZI0N^flU zidR09E`EDSO3z-JURDjgf=5Fw^pQ*~&EO=O`StAqDT<KVw*!Wq%ZSA#L1+hngBxHb zybg1133HJ-$3S4;0f=%bZ_(9MWSx9Pw!qP%cQe~p*pjYh$?;w$$M++mk1M5q>&VS2 zs_~<TNEIr0rep6z4iaReiv(rZ$yD;K5;$<!S&qO!6sBTc!wpnyzA@%xg1g@ADxR}A z6<k!C*56qg*;7>jAZtcVLQRy3`Da{l^7MzBf|oaU>dq`h6(^MfS>{xEHC-wp;voT! zz9R_1!<?7pE?fkiB+Q|kDqaKbCHfBecL>;u*fW9Ei63J7G!ebmbl}O6fX6XxSA+!* zE84-6+Nt>9afpb<c6;OUvv`rkpyCwg;ACNwuo%dML=;+6(wv@%xCgLqU{JxER-Y~J zlWxyYuzX{-IQxlIaPDKF*I~ee?UJeh5DsC*%Nui>MtuZpqz}EJF8JrCw+63m?bJOv zpG_H#M1TNxJMG}$j&}wW8jTzBQd~qG){i^+lFE4#V>m|2W+pD#6e48p&)&!OFKj2g z2c|=EB+9CT6{&BqtyKiPc||g-TFh(e;p=X;A+{nZT>Zhmp_8EEUi4v-9$We6nkuiq zWle~5w}rq`Wzzk5r8}||tlXL{{``fG;u#B5`r_KO0FP9)cp&wovY=QE+e`+Ok8szm z&)(G-T=UZQpkYTBC)?y1HT~F+Y};Ln*eCE3lq9TaoHOu<0=yF;QQpAiT4IG3_IzZL zqwttiTuy8(?s1qnt1H=(2zxxj))LX>p64Al)pH;@lB2V;GYnUq9yW3kwW-{TD^flx z8XFI3Q6FCq%Fj6eTS6f$%sZGdAVq;ILtLSdx@)7WK<-L7VopQmj^X=d>&+?M<E!9z z+q~kfuXh&D<8alt9#2W&(3jMvCeEt^KulH2nAJz)Ow+!Ry%GJjdFz9lSGEKhkMyp- z9R8sJ(%W5Lnk2|47h*_^nNj>8?ii-s>%hdD+cP0~{{fE^W(PJ~#bI~3`{&p$YHRCH ziZo8uk$4@SXZtk~^@=<PF^6#umLns3n8$v@kL+?(u*DoCh<1nyw?SD+uObOd?udX0 zec{R#Zjd6;ay!T8J9|{Hq1|Jiqciy4vUG6%Zs3T(B4!3W!t?40Va2<2O`K0!4PS=^ z$ENdpr#{@IA8%|AM*4H6BbQrwV4D<XQI5bvOd#;%nX%#+rGq@TD>krXP*e_%1IKQ& zyWQ9eaU?jJv5&1bES<lne)r@^4&U=XLW)cRvD`>WavN{%q*=JiVN<fBn+!*2-9$+_ zFbaLadz2nORVK4FR<Vdit}g;y<^A{PqwC<o`mW*?Pp1P`SB2rK2q-RzEX`&>M4VSm z2n#ot56??qpTXY9$JwUe-k{H0xFOh@&IY@Bb10X?iS&jb4@AbP+f5dk?bZU0?%Wg1 zy<k^Y-cO)NcpUDE!46^`#89z@J<oPG+kbtBfA-`^Nb=cAsU0R`TUL9(;U4U5%SLTB zg1gA$PB!9Whz%D*b?1RhL@HdHHL1?DKaUt#1SsM9UGDUTaguzvN9h-vv&H|-z!3t& zMYWRv5sqvEG*U8@RV4rt2M!R<lH-if7+kpNO4uVf*cEakIeX|yRJJVg7(iV&2{)Ns zyLDA@qbljj+CjxioE5{#>;CWM{S#J)5hT}KVZS0<j&066@N*|e60Z7$B2~}hm?(zo z^z7~P9xdkOJOt|FF*~7HBoILm>q6iTRoehWlKmK<@Ow7G-Mv}#_<XQi>Gm!vUiCcZ zbJWH{QpOk<q^BW1!&Y@6EH+7|m-9?Qj^s!#iG2L6^}+I{Gy_R)yoNqV|Mz0yDr0iu z;vW$ZYgl6I)@HlNKkP<}d=9{i*e9>$d(gkp=CR;nm7D&Ms-4M^9G>Uxuaufs$s+15 zWLnN^aE6;@+h~u+ZYj1AVW0qWsBZ3(s1mR!OXAz>-2pXO&X0)l;yrJ670y}QF2TWo zMoI#O^hV74JXW6y%Z$<^k-Ufi8wL_qY^~D&^P#4oxjh@?bH4T`f8fAllg*pVdHIl! zyV;EJD%@cslvNHN5aTL?1ss=Yc4yVf&)|PI4r!reDK_;Wkvhot)qcs+m>iDQ4DZWk zvmaDSeUFHC+N7y$m6!Z+gM-cEa8=vg#pf9l-U?!`2M{1|I|y-Y@fO@s2{%|8Bav6; zo7eNc3Z8Gy7A{)K%BnDnT!Mt)IOGVxgU6~=VPWq>p387o4WA#!B~cFH9FkvhSd00Q zC`;9c(mQwP2<CS{kT7Nmfw_yUu_+j1ExJIdJV%2ktyR}f;2Lv6(zPC9yNvB%`I{z3 zawzgY6gD{{qBT;HB*iQsd?X0-%FC(Cq&!Emu~aPenx5$+0!RQ)NUrCiZ1ryux`Vu_ z2#G^JsN45-)>FEn)hqsj^Etl$SScyaqYPIG@Zf7{rQS#tk>~~l5J(8`M1YNWoyU(| z%ihRuoAuKhv%00zW4De<LOy1ct|OiRm6Os|ufV-~aw;#Na?0&#VBnJ8k6W^cYi?QO zh^yGnRcd#k#^gu{@=qzHZe$ykbIxH<dQQOm$KEy$!It}eDlI!QV)93Zh{Aiv&lrAA zCEr*+_XIz;@yg;j($F2|bFlqxTPJUpw+E*_(h^)?5&;c>V9>xL8}wAF2|(7k!dEc> z0oNs;kKW_lk=6Rk^P2VfkEiv&z1X2wY|4&H+PanY#H5=v!rcVPrW=<NG@ihNdKSkG zdIOk;ac8gN`Z}(dF@AtBnBeaWq#DKijpp<DKP1cNK3(uIEI;y7rD!YQ_{ypr33|lV z`Hm}d!)Ml60;QmovB~cl=5fGy*<<cX-d3P+XN+50XxrP-`btHe3)i=0^z|=q*C*Z6 zs1KQ2ug_etJ^1dE9j-8yIXBm}(lg<6V^vL}8_+N&)K>;1kV&xlI0MLkd$3u5Z&`=_ z=3>@8^B?2-S35PQ?sGzoA7*1}PZlzi{Wz2iArY7av5~-zNx0)ynWD`TneZH}Qb890 zxk1MOhYTwS@qxJ(`6mt{Gs|`lpZ{gDobEeEKCeEYl)79gdWFy&bd6TQhr8^MlOw^k z;-sRf$W|aCC{!`k9d`0KXv)TmXW2^R3o9Y*ZP5!m04j<$y(0`9Ia2zT*IM*HJk-Q3 zaqFVoxKG~EsLxu^5(0<-4RbCPR<&`E0b#2+>0T|x6eY(2LRirA!1CWHSA+p%v%WM$ zW#giKlQS=W^i*2k^jfFhoF+Ze>&F&JXK^$qr{ON!E@PKuC*qwUFmqlpU|_IelVAZ< zXE28)fGRXQP&F%3*JUZY_lLC-S?>QLQY#{oTzb5?`hh)sh0g(hLbCET7PjE;42-uC zRoNE#C+N8-C{nvj&A1@~iY;;i87@y^6~Tx^z_8tIu|KaDHl*~Kk2FQ=+|kVS*6<jn zGkk(`;tYUD5D*@Q!#gpb0o+M-0Ehqz#A`r4#GG3_kncVjj|uX~=z9^{Weg<q>bs&? zVps#8a9M+je`uGI%idBGyQ%SOm&DJW$3nI+fV;=C-D3&hZmwK2Euv9AUr$7rB+Kkx z2^>eUJ<66B6{lk(0g{=_d0C>{of`s52?=2ecy4Hn$HK&hhzNWB79zZ0Jd*CxuvUDu zx1Pq*T(=T3^g1@SXZ5!p+oVspqd^~kb8I7R0OW+*8}*qn05R)b+%S2L`44fOs;W{Z z5-<>HZbtX#*#j{E(gFW~7e`r{Da{$0Ohjcl@dgl9RACc+(5(!*+b(aWY$<7Lr$%>i zIQMJrk|t!_cnL6|OQcoO$Y#O>D;24k$+BDhhoAG`uax?kQ7i>;&JsyM2Agd2EbGh3 z&=6S@4DF4T#QX7Z711bYuqM11cT~Z=9~Ek38xY<FRAu4Fg<Hgu_kHGTef^&=Y}3<j zYtYkfVX%;!<(LN&0mu_k2um8~Hewm+!m5-5!5)S%;fX*1F&+rV1`U9e%e2(za>C7j zywnl(9?APIEjBnWpYdwtSd=91-O4XJ0a>|jUXuN677s?L0RG$XZq0cu8t}|z`;)3% zITM2XeQc*FQrn3tQzzlv2VBnz&nx#l2Q}=FS1`t7p+t^PcDcI*CP!1YT?Rx)B`D&M zv@{GJ1HC!@;-(J$i8~wh;d57WjvI)|MCYX*$ebr3c;H+Qw}(=lwXkq06G@U!d`5=6 zO3`^*=z+{@jyMnr9`X-6o5u^;8#(8(cD<mXOZ&br)Kg_a#Xia4E+o3f(pouraTx3E zH~uH9oH!~?U9OY_&S{ZhG;6W9ZXUm09YB&C%2yvCj}B8xEh#_8?4eV8AwXl5m;JyV zy*M}Os!<z(Ejbh?!B6DM%jz@zM*;^|X!|!9broslt0?8*?D-q?pI%dEipYutYOyZP z;B&x%fK4-&?7EW**{aC{VH4pgCy9>pL=3Qm9LQH6lmHSELp;JiY^0%P5J~AdPp0&% ztk%kyGRS_M0K>Z~V-*!pv`r#62)M{|$Z6nMu&ndLCKOhfAHnfmdF`k?ij$*WXFExG zYXA4%tW1u4PwtNtsYAkW72xKa)fZf(xSWUZv+hM$+(!u?5*TuP3^ar*N8IDl`MisI zaTLjZ3-RX$f5-0Z@o3zU@$@w>ZsTeit0RJZmP}u;L}(0v7!L$TTX@8tiJMff#(p4J zmJ7j!4SiOU=nNo|G!oz;NOq$>ID1h_|G$?z^y(H*dlV(@;0cH`QA^ETkkKkr#DpFq z<)n_jaxTThumh;IcZU=#vSs9PmDR`pitWU(q0oC{MkWW5I+%zqP^7j3J^_g|;E07C z_R=7dHzfBWFFlc>A-W58vf3?>aeo%7zT|yGW#fs|FcB4O_2_)I-u$@7@laix{`9XJ z^~bKS(=#n=9vkF+LjXA;0+8*&oF`loUde@|Bv8oDRU3&8N|#9F6*(eof)AN|KL#MO zRIyMgq_OPH$bLhj{q8rr^x9T0{J{-JQYHzC%1ugFqbYLlfFMW-HH#=DiNMCZ9+dZH z%;+Wr-47@Bw4`O&e$ICMyEhY)gYvYWQtB)s^%R@r$ar*ykMMlOp<uhYWUhjgr`-g( z0S@7HfKuqVMiy0&pj$Z+9+(8gfp~qb&^)%jydOn27B;5zxsPs$N-rIMQ$5RaaVaNz zE*t~Mtp-439*6`CNub+25vkIut)@~Y?)(oB;)0p$(gTr53leB-C5|}(kzYHHN%kMJ zTI+%OuCPS19_scr!Ch0Oq&If|u{U8xXt<l2n?N@n2anD&?_}8_mV5`^Rg&OqM5|4Z zom_IibwqSUTc`J-shx$%K^~o~NX;Xno>;zxt;#{gC3<kk>8*DXl{<JM3fLwH@?s?d z6LObA7lu7-3qOdY@M95>km@J)Ou|aJg@L?&feG?Cwat3w?Q8TA3?4PGqJ|YbVk6E2 zk=}#^kI-a(h%pH!RTIK0qMjcT9NfrU0yIX2WfBPm0=r{^7-TM3G7cs`TAtRAHgpBM zdi-FZ$Jd@GYT@8wirC1lT#^qjcE@cG`0oP($%g-q-J{#A50JBNm{mn1{(c^*odex! zr5?zgw&!PGa@?_G%YV^3yYJ+js21{Y_PAX1-E*+~=gNyTaP<a{$Kl@Sxf{`g`EY>_ zJW=daC=7+yg6Fx|Oc}%XiW3Fxn?jG&7+1d-&63(Nr*@P6tGgTZk*uzoeskz`*gXzo z7*Na@0f@*0f$N&JXrldf^WL-703a{2>CkF0SlAN?Z^eJy7=VBT8Dqj_vq{=!vxT9o zGZwZ7*RJd=?&wtdbN4pt6-_D451#gY10<*%0S;feA1WDNhX0Ki-FX?9qe0;_;5j(G z8tK8{e>1qoMH_t{$NGG|YP+YecqYAZ&(FT(IQquAS*Jg|L2qu)XkL_UB|0kZ-{Io? z?5zddMM1-gvpxB+!=7JUv@SFD?WL{73l?qc^L;fq(r<bIRj^?r0CE5*Tm>6(fzf#Q zSQI@R;k#VWm}&aq@^tSRk8an~Z*9=W-dLw=%H_F<_W>tjNc7TDCTti;*eu-$5l0f3 z*DtOH4&-a*4-|xEBgdtDw?<0a_*~|J7yywbK?NgmOqq2#w}h<U;YGWh-kh%wWY=@r zZEN&57H-t3E>DMztjI>X;p}b8VsG!LMg%g(-Q}(W7`p{KwF>HM!F#}qisWnXXso1* zT9}J-%}V~wo`@!L$DW^k$ua%rH7C~ab2W`aDnEUCYjH523;ILv+6EX>c?UQ*EPE%B z04ssXrnHK@j$qA>?AVnn(gmIu!MO`}=%a619n8F=VdU0VTYAR^@*`mnAelXG%aF%F zh`oG!c+MVz^LgCWt411Iy-h!QI^DsG@rYS(qEPwQ9@-owJ5OUX>zD;JM05p(und6A z5g{xyx=Wg1zzNLtAlv@c03aV?>x}(j0^xN4atZv=t(oYOSi<T9`TB(%E4-jK#bj4k z5bh*=Uqw5e9zO(-P%%*-l@>UL@8y=2ExJ#T?2`*E*|NWJ1z>Vac&9|tUBQ%4!j#(^ z5;-37;iod7q$=96`fQ=fZSlHH<mp{(Vzdc>Oxg4I$%*IdSf0-(+|>}&u1ggMyK@s< zL&bIB%IAi>wM4;gU+FASVeV_4qvt=)yJAxa@VrGk#_K`xJ#$CW;N<((4%Th&>Ko|E z6_wq?1%(U6`^YOHH+Ly2QiongK#IDqUfHpM`O_h}fJeD!oHc&o<L&x$cQ=IuI;sO` z%ucKu0Ev_6i0hSVEbMh)ujK}|_g6y*Yd^N1V4}#1!p>~<X}bZ$nVAW*F(*o${QJut zK}VK?Qqo*S0CE5WNR7EK9$A97TJt2<uWjv&5`uh@90-Xvd%~5oxSD()Sb$4TOQ66# z3-B(|UUk&ne$%a3@!8h3Md2!a&SJ?!B>*x-&)+8}o~arW7WwFPb^6=|8;Z^8Y!LlU ze%W69BCLt$Gi;F{a*kq|;=$7!Go##HuMjFCXU7tM&wH#j0+8sQP5XueuB#in?8(hN zsVt57N(H`eNm`WmExwy7Ny-(nUO##*lo8X;r#58PadnGK$eWsb#$5r~!fN4XENIcQ z7z7L;z%V`7I13rC0T3Ysa&Wuywcrvq!GFxCrb&FbA=B-iMdeB@kq07?7Kf}ZT$0vd zIe;rybOf(&^@@c)Kk(%)ovp`&u;MYynWh5php$<sf4~Zh4XLd5qTL9Lr(#mlHgV19 z@?y+&Fe!t?<U3hqisjsU_xEF0AGgKLnNs>KouqI3U8g>MVd(9_o&*ViOd){8Z6=3j zk7A<t!0T5B*T1yAxUJKR7Rg*r?%J*4OF2()l?EX{&*zlRcoa0Yd4+#kksdpJVS8MH zZ^Fu{2tbZu0Ew>wvv@p|pUWd}tRH%Cbz6UH7ZvipD&`c-ClR~_8y2jTO=RSIE@p{# zu5I&LzyDNv(^-oqfy0<{0q6XUXr21<1Do`$+ZsX;VT%I@t_>(vSiE+*IS|}5D&R3R z8L4@K?N6&|67SD;pZEibKOXir?1_Y%O$f`bxSDN%BMhDV;|f+-HD-zfc@^~M#}_%d zqw<JK07Ty734Bk7uy=A4Pwu%K)>_}5jX0BTHd!^)oQvKCs5wsA1wMd8r!~pTfSOGW z1HBQOg3RhgiR<z3UN_se4o^R}Hlx42B*k^eMDOO(9a91zQ&SB)1|X$`?JVB?9(Zk? z{`6gq!NY6Xird&D8Q{=X&c_RF`Btw4y;hT`8#J|hg<D?l8arcADhQv;**L43Ls+dL z2O?EU91URO@xxcI(qFlMUH?-X(nHKqjt+1X!H;n&WH0}YjRf$p^+b^dHPF;fbp6WC zO{XnvAK>sSUa)K9AtUS=e1BOduSIS8<a;-S9!bRG&ajG!qJO8!18Ed_AeKUkzYl1E zL#=h@oTZ)btG0>!RpYYZQYG$08<7W6KLH>()@Odm^A<-0xxTNiD`?A5Fx<l+A$C{0 z7h5Gg5DaWJ#;pz?yf6NGoxbnQRvqr(hI@0`m+rl?yVh)?u@nqd1y-UDCtpDl6ub3y zBXRF8<%-W1Ru)ZVNV9vd|LK_y&h&3L<zt-UhN%LO!~=1(jh-2Wgx5s#`P}&%f<<dn zLFgq6_W1721>{R&bHtSL;LTdFF-66P)^rs(bX+*^aj=6I3uEMggaCpnRG51{?k0W) zuUj?t-6fj_R&4ATW=~<XKksV-&C<}kg?&QUa(+0U)vo3=dE64B^_xpl-nSl4i*S|O zV5YbU&xK*FGaqfyC*9k$J1M#bZ>A-Q?(#s48Iqh0B~Tk%&vr~Tl6i--y(GzU=#^kF zk(ubF08(oRER$u<1r&oj-{=guA$<@|teo%eltvQ(;u`=#8S@inK;$@{<cD+1$*(Wi zpy#h?i<-lPiz&TzeZ2jga4TEU3Gr>z@2Z>xmCBdi{J6caIUALRiT>_O0HG%)d;%a- z`P>-*!8ukX8>7&(KK_>a;L_UW;Mq+b0dI;-m==e4*sSx3J$>EjQSs5WT?O|3i{Dt> z&d;cOZkY4Q5SH0&+H%K2AUQk~yxiWf>x$)DhE}(94UP2Wi+SJ28z%`Eg4+q#i7ct? zg2t|PZUvFy4QK&HIM_szo-7~YuADouZk_tbHvQSV*X!e@H*#x?M87RwjTa{c#?(~- z+)$UkcGc{q9s5<QBIE}WFr1u-1Q9b%<bg;P7Q2{HovVL;siXMj_H5vh3VL$5Tms0% z6#ybM+>Vm;A>qf8L;bBq8}%DZv~!$H`wq!0cKIb4kBDk=C-J%K6M_F13{?ow!T>ki ztMqy%$gg{~BN8)k$jW5HN<PY3A#}<CB;i27#w^xenn5H=fMXyD>o)~IUbZ=C?evNx zM#k>!Z$pz_M<~l(u_-%t)$<(%4j%^>EWwK@OaL}2tjGhorA&z1-1D^YdoG@Q@7i6z zcz)ZU^40KA=s}6x4O`}X&JSg|e*d%0+08$Bwj+DtlGG5J@u1^57Lex<KvKRcuCYk1 z_3g*o^#Azn7UrcI!VPI@DU+K`BB6x?F=N2boE4A-fMnVJwwfh{pJm%>0SXY-Vguz& zL_ZLd&(Y35NIH0BOE&28!ij83B2<=SXGWvKn#(FI2pYH$<isTYINJ$#Hs~Kc(H!tD zD9Ru4JONzJGS>EMcgYlTmxCw!JxBm`^{x(O&I8@!T*vK9kYBni;+G<u?Oq&Yyg2bd zrs&|g8G0Z<q=LMC10+T&KRpbg{Hh_C`*KThtUn+0b^9i%4}>^L>CrwFwv!(Fzb|wY z<~$JsM+%2^q^uqQ2y-CjesBZ;jVzhvM85jsNem<p*SGZqJM)E{Z*Tq-UXL)?ZSA0q zKYgyFjq{U+890h^!AE9SJmJ#nxMN@lBID;5ENRzYzJF8Xc}+JQ$RvrrJq%&V?DD{V zpH?O6Z!fNG-@l3hWbOO;hraXoYr`Nn)qZXAK*D%pr0_YDNxAu4f`k+qiEDfpkISs1 z-MJU@KxV?pTE6T`2qZH?_mdO1Zhviu)<gM7-Qr;>FCxgD#TCWptz;lf5VXsVouM=` zrSHc$D|qSpOo_)Q`z;%g0Fzjh*-t!>DVOn%kM2ZX>2XgFja6HJd3R&+xs4q~p3fy4 zGEYT3M<^yK+{pPH7sjOWwkAh-u`{p7Rah7(#CfSFHN!MwI+jCmU%G$oKy%9LD-7lt z_;zn5P0_<BxwY-uS38<G+`WtEW#M96$rh64GK6LIH1PGL)s}(|dnD}rt<y)(t&9F$ zrW$X&7FH0NxF7WW(sr`V*&8PGd2HS0hljhO8nN?`<Ae%}laKT-Uq~0je2$zCcF^ub zCP}87L_(p$!l5+B130;h3wKeUyJxLly}e71_UCpJ_C%F?A@Y4HpRDEfbX=L~6dPk@ z9Ku`~CPMY)%Tp7fDk}jB33FjdBH`2~5=w4Sj#x?``;3vYAIgjR*^e{@9Uc`2nIBQ( zb0b*3Av?-Rxy4Ir@nUK3*NsaM84|rBuLGY)7Of+P%w1jh;nL<F_MV2Bqm1r(XOCh9 zSEl}(we3FNhY11Mf$b8pNb@-c26!&QS@@c5vLIsUZ7^}Jr<--;tVeg(!U_-wl>;wh zuQT^?)LsA}s}JNK_gTCEi{u)t(28o!oHl=R@J5Rl40g**@5-}drAk945&{n>HsZ1b zHRAmlYzJ{KfJ>Kd*6B<LbShBFowy}szNnZXmP``nOR!l>mrPhrDOTjDAk61Dw}b@6 zAQInIiPvSBg@gl{S``+^bT;RBjzih+%qV<ZuMfMiUf;N~rO2C#G3E@$zOnfClvRRU z#zZt;R8td)g!1{q8Qu6jHk0$h#$Xgylo)<wO?&V5PSwK7%&j3oj{A$dJqLH+A*_6I z5b@$Y^STLbu|*r@)1wepy5g`J@csiH=k86D`d?A2TU+BPIUdJhqR-sbpznL5RqyEX zbZ#P>wp?eiaD)X7MF=b8K&-&wZUloor<pt+#-KF)_BH(r8{6~jF@?2#0w0%FhhS29 zRb3lzf~AZyEav;;z>&_<=%Tfm0rv7n*>Lk3tbMn{fKv&H{x0Q#)PQ<&5G?TS9xmjE zvHI|@@8808&BSkx0YZ%Ubrag0B++k$ol7x@xN|C^-Ta|*>&L!0Z|mrHmUhVEgJ^!r zbL4$spn+i}eh-7D^KZqT2PY%iz6ZY!KGVkE{nvXFfK2BfeXFR@3pfTm*=xc$CmZ(` zX5wjmuw-3Yvs#1+USEO)E@~(Ys<6U)ktXBEc-JPcONjPAyL#2=+4DE%p4;3pkjc_6 zqg}_mg}oGsz0xQNQXRgJGt~R?evr!0=*wHOJ6Xm!$lMZi!`(YHb8cTarW8Pu5LSax zVc8qG;d~1>4|xJtojrqPsG`g`o)5Kd*{--2DlB}z?vm&N6nEE^YSd@U-(GUhazxw$ zp5t=kBmv1eIz1j7o|51!!)a`G1=jMt(Y2n>R+PJW?6P9T2=DA8vh8D>1ohn|&3ai= zTIZG0Ty#x)azVD#uTrAd$0UHD`>{=AtZYI5wpskz5nM*%(Ch1lezJT^&x>0+1_yg` zBfTb@-B|_&yoXDz+Z+GLOm@%c-+iS<U)z=)zHVjb5CccS)cS!B5Su(NABRoyK;FGP z5G;$w(q25q&P{nAw$luN$ltbd<&t<Uo{26<bo(<XKo6}U20%CiJOU7tl!q2$8>j(u z=YiNo1K3-$f4)56u(@Qz18nE-jpW|nvGtlsU<^!zI4^=qAe-3iA<Q#yji2Dk<y(SR zw{!-heR)%21go4-?HrFLtMS%|SSt340Dzctm$y<A#b(2MUae2Ovti&D&u!~#YR~pD z(OxXcA3;?_ZE{|BS$UYbp7%o%R28_C{V?+!J6Vo9!r>|la2N@$d=0tawdS)DXxNev z*3^fvAg^K0-J3Pr94-M6uyEm$8|X7G0EwzTz_kH{-JIcN10bAhar%S@0>Y}sAeSR~ z3uidVnJa>Mj|#aAHak#ZDRFAc-aNS*!H(Tb7&H-3*7{^-_;j|znZNkLy=(QqJi9Gu z&yb!-f+A}{IE#$e0Dv^R9Fnaf#fZ7z$fBMBVF$Cqm+oITc*83#-CRm#XlIxNWd{jJ zvdgNv5*#J)uo6Y5vNU|ps?MRyo=S(n5#X4rG<(e-s}k$oS79ZY==KC%Y4X{E@6Tds z@973W?2D;`H^bo}S;_>1o7Ee!lI;LMU|6+$qbB&-R7K>rd$iw&+e6~fzNstn_{+Un zVmOB<L16+MDsMRNm`o;5B(%@}dTnt3n{Dik<i@=bw`A7T!ZIo>xTCQrG|BhvJ306{ zlLWP9?C%~}-_N1A+}J>_kOK*U?(!p!DycM4^pNymj~ZRll<B{Gd3uDsj^ahN>9T+! z$w60)*ex}jdH_lKfk<!wK*9zEA($&Mi!lgc)s~XRW_(Mvqs}(~VtwB1uUW};=1k2! zPlm9h*No>p@=OFk)|Lq^8F{n#9=9@$4UzA5(1RY!5dXIa?6s5o<OSQ`$3Jinp2QM3 z96JtKq|qc3u|<llFFvq7Sl60~axpy74<jy*wb#M|pdh^p3?{+^*n#3{>_r89&jqfp z<!6X`m>-GvW;a%PErA7t4SOBEN^fkZ{vSV+-Wk>kySO$+!Z}@OcU;y197uUH#Q>53 zh`sZtJ26l4jxua)JdpA`cmXbDI0BIe;#OHffdKHhW<*|7oC8V0`$0syd{2avFc8|$ z@pDrvKQHe~fHPKN$<IEzFO*uiNq8A};z|z0C9@TitA_1k>{a}Lb1}kl3_W?&Sy0JD zLPW>`PeV>{ysL8(f&w^e3;=%g`qjIxeqnoNbRa+M`|;#HK%86n4l;d9dU7;;^(&pd zoX-)=#$X{wC_StsQOX|kPB@TvIS&K_hgBA9S46rv5P9wn{|H4B?g!%Z{N0;3TL??u zZ{=k{q{qSLE?a`lxdAH+NaB42G(7&rzA(WLk~;}G3Gg*0(cph$Cj7A`32NS|wt$sd zrW|=JoF(!=z<0Uj#n|;X=DZdlW8%zgNAUd~b<3LG=QnlGK(AkP<$$1s#NNCbTe2?G zch2H=4p(6vzI_+Q*C_kem;e$m$(=FpDFu)OK#(jKk?JVX5O^TB#Q_9|TC5AQYY`P4 z360qmRyOIp`1j2y3A>4V0rTD^0AO>s%yt7Rmbber`O5orav{bV_9Zv_X|}Rlg40vM zW#A?8Zd%mV>A(5Sy0ArUFx~^e*M7_cIY9OUv3ofvgl5dn(csV=k|oCbkE|-5@yG_X zK9%iPN)__H50eJNYg0tBxTZBbc-ivw5N8TI6S@9Bdv5|}S5>9`|3%x`R=aIQMHwJT z-!O=PgSI$#D>y5P43NYigWB4D?O+d|-EDUxA`lr889-1586Y=-fG7@%3S_7ZA&@z# zp^{XkG9(a&kfiqiJ*RfQZ0<V0y-z}b40}J%dd|7SJ$0*U@BN;&-nHJv3#9`>TQ+`N zTUMd@%!jbD78ZqGr^I<a_Mig~B-pf?@o<hQDs5I*XO{rtIgoULV+eM{?U*bq0~An) zL7)LVAOj9$sF@HSWo%)+2rFNIY<EgEd`H})@JAy4xJJWr7+xc%Xh`#Fg|)smVYa(( z!IDzax!9Cf>*(d&v6jPnC6nWKOPof@)xI**uR--As-}JPdw0!SskXY0C^RJ?*%FTP z3d9@LMeXtP{@DHSF*kK=IC(6PaB=q?Ds($gt^qo<8JUVKW%6u`DVjMdqmH2D`G)|) zMS0fJ#e^dV3JJXjV!fdThvU3ezh+7FaC7D=^LQ$<nbWoEH{w4d`Pn*u>t(X%?>>`! z)RgDypFOL>#ipuR$YIAqDdUke{G@!<4<@=pC5v+Q@8|bV6Vbjw8C$OiNOT|*>3cAE zSZ@Tti8H+#{xd3^?3ZNq+A)7#w03@X&$>qxj+4xK{{x*pk6+!k<k1n5rB*xHbjo1Z z?;tcL6lrnrqTuH{pSc;9NpzdJ7|tyK45+)X0Fn^bWH5m=-pv34l0m#Sffr>DguMkB zB$2>;XAdC>NW6}s;KASFTe3ZNqr0R@d*~lMjMH?P#Kw&`ezz~%LI&<XN`i+1lB0h% zqyM5mE$rXxyh;5YV2q3jWO+aiefV6}_YRLHq=nfhoB5pAo;`8>r>?vI;j1UNuWim; z`q($_?0QUI$EM*;JMq~&@WywB^coo5MVae$KO>VXdmsl7^tNFxk34+<8z9jkJr|1K zXdbC|xYTFo_wRe&B%4l*#>J0JqIW>sfsk)Vr>4gfPV{`0HkJu{QSo75=DPUV4YK`q z$BDj|Y(*qp7KlD3(fR#0JT=s}^c*xW8T)0M^t_HFj}UrERlq{uKllvuBV3pmxblU) zp}14KV9H~s+}5?xORdKXoX{97>Pl5uw?5=POtb$D!^gG1_GzD389=^iZe&cR6#)u( z)d7H<YNSj|MYJqULZ2q!7^&k2uX@lOdeKxjq{>^zj4=d`KnrV103gH%hCmQ{+#PAz zo)CB#6yO}z9%^7kJ-N$dFWDU@`U_?M8%}a2|3FTJ$?m#YQ6bQH5Sg+O<=dnA>2amd zh9&xK=&m%lmVbVztSFk)0>qG$t*AxPn~Rq)j%)8SBi>7Y3z7J}r+s2&09k~dJBNN- zA43+_+;B5SuL6l+FI%p;tM&}@6-u5~ZuEmkO@efISm%&(Z!6KK1|cl)gkU{H`3h50 z5(ODqG!58fIYNJP3Uz&8cb@F;kZs~g0-H9fjlzO~g#wu>{T@U%S=n|A43K6BN27jP z&8<|_nuI_*NLDPu5j?r7(`iAn8nZr{IH`lzD`npMWt%EAl6s%k36=Se_sZ7CH{E0k zd}S!<Kwn5my}GILI-FzjUdmRkZ@GAe?<5$`?<%n1b<4FYA%IK~fJACn;>y$Bn0tta zej{NpSbOI6CfvMjx&CkU{9d~=fV^7&_*-OgdG}ORDttaI3mx@fHpw=|<H$137-M;s z&^X_nDux9hlL`RA$yGBi-57)>07PJ;@GUsueNV`ae%dBf_C9WsZL%Kw6p%p2u&J4k zLyK^b4`JC<?X*WyY~mldYIf;858*0!NZE~l&#DxDug2>=kO-f_oJR~)5GXK26&$NM zN+!$c#!mL-Jn4TlWq7#B@||~#NDsRM0%&k=gw&?JQO8XbI^&LR9L}omIaTN9mmbK3 zZc7ZZr$CK!3~vJOtE0yw;E=_oBKl=_JS`I`gU4UVdQx+YJr8;h%emA12+8DA#&@~T z-Z0-chAXli!+BjV%-pD|PvLN!<v_-FVcm*dFHjW@f{Qh!ekc`~y`rW!_EP5S__jRp ze>C|Z{lnYhozmDHuP^n?)wa>DgPtGJa~phk3#(#n+fV={412Xa2JrJCEOebmaQC%( zJsX(!pvL~2P|CuRl*{$n>$m$v%IoMGns1MC8a#7wc5Q?flIWfTiH34?96#`$6K-DY zj`;Bm)iX^@*KTnUF&7fsRDTaRp$9TA6jQVn-V6e9Zy+wUzO{W(wng3dqLarh`ingC z2PCM^-b(ooCfqq4mU}7tV~tSKrp?(}+^olZCs?dN(x=05TR4y=q)M7&GJM74VO&zW z-y63GwLkMQ*?(^LNtF4IyO}E_j*e5`y_pb}=MxOK7WVZ%;g-ej{Z~F%rppiZ{cuo( zlxo33;}#0!WucsVI@E+=VD9VDgiI{B4$A;R?UlXeDn0kPJnOei{-gAdU&58#Nl*b0 z2w#t9Q89>AlH;2^nDkc`Y;mTD`B@B%RXtI(7{d@&y2(DvmC$11%&u^el)&N7t5Sbc z-P!Kjp7SSrA7!()Zb~vqb91QJYqhX|ME{~E$d9^uj#|mKsa?S&0~jnrf*@hf<LUnK zejv>%t}k9mUdOZMHHRTBem?w8><RsP<hZU^=9%xu-=1^t3-ph_4MR6FuJr&Cjy;Kb zs-95U9-Q}k5b;0~m11EJgBP>RdNmE%U=JVxaZOzS!EKk3+9!ZV=y8|@Kx94Fob+s0 z?VcRI`jM=^>c)dTk{Ssfp$Bq)HGn8QRC*mBy=Ja^i^5e06n$>u0;sIwVC$j`;50}g zC<H4DAhuW!WkYH-d*bG4(Tpw&5^=A@zOTH_df9*2S&+SuuWBMZ44ecKgElqRa1R79 ztVqh0yH!=Y{W71i1=87^?Nwn>-lqjXI*oC$5@urAP?)Wr?cZ#i(+&W_3-OXX>$eMd zyg~M7d$Yr#P`f#YfKv%50uY;pb-L!@XRe>`-g?Q*VqOY7Ce`TL=?y|>06M(x0St$X zssa!O3+QVC0;3%mmIA%4bmu{H9b7*P^!%Va^UXqNQ%djT*(^291$^ndoZvi4%%?I{ zXi}FRNMRejN8;Zb1uj!*UW>yCIS}5+K{b@Q4NxZapn>YX7`rt;*ShqRWlwP-<l!ZO z9>IR*s2xXMJ~fnTD?Jc-9HsooFsUHC{nGnOqI%FM@LVc^q4hD=J^|5=Ydu&)kcGwE z1`ChkoUT=M9$zOQJ4Dy>wN*dQvz`~j#hMHofa|E4{#q|<tD$pNEw!L!NOzWyFT9Zr zg=dmXk>mnJJbDkrXJK)LIg*3T@UF<8+dHd(9QU?$X}{3|C=Vn>O~|Qv)<1>ya$(yG zG=DBe9*t7dc^zTud%=Nx>gV&_mnJN69}q!4RKVf8fL44Kiva;FxRnEf9`idDa_+eC zb1^P}1o0<Kh69iQ?~*9)T^+AH&t%}6y*?Jnjc^Q=<<t4j27!vQyy~_E4ZIPSWT;z@ z0$EsH^*fz4jXQ1^PqWCLX)m7ZKV^KtbA+F7#)v_g6@yFJmBYujZ@Z39zTtYSY#yoX zCS~1qG@k|j;t&DGdw=qPJ9zXoc^vkphBLe-gMpXM>(d%$Yn8={K_OvRUFmgrA3R16 zLe?~zaL}SQ-OV$wS?O7kLF7+H)KJ#&6OG+iP{*Z-*#a~T^e$-fh9JWvIU9opFE(2T zVmEB;mL}u8^iyu@biZHpu>0<BJKWnYo8?AA=QeiF`JC_8Iy-fI*EUa<3?Qe<(z<Ht zI;12|H(0M9e&Li&e>ZyS#vvhLAHF{wDo%q1^NwlN2PDyH{-*hfl&2k9wEJge^?rv{ z?q#`^4SN2x^sLBa`e$TM)T}0lcq(=Mi+3_(uZ13mh8b79sNngA1r`ip(Po}n0K=O) zmyOio8Z&8y+pw|U732T@ro+AB`}ep*E}E(e;swR~R2XK96It$opNGf)xJ?r!gU4$$ zubalRu$C^y<C>-5IB?@KSdZWR<Ea}Dy|7JOA6}b_eZ%K?y~MM&;)R4V>w%;~PLx~{ zFYc?~wwHSBgzXmMNiZF2Mvhzdygc*k6&7|?$5d%^4JVd8Z$Rfis0KFxR9Sq83ccV_ zU<{ZGx(GxEc{SdeUCfN+`iZx6lp(PHzPrb@uUhYdApmK2ul?b~@(ynAbMAA0ciH`A z%TY~qrE5|sAmmnfp+WlOU9zpOOwTu3@AMKoTswj3@9A(Z&B1~@+*kAO&<m&ZA30{~ z#>NFx`U|1O!I1q$o=RH6#2<}^Prw-M2ZCM(%bNJjo;UaUt)lC9ZN#JO{5<RH-(CGH zs@rmPc`8;4k5hd(0GJ45kPxidjyL{$Sv6kk6`(@u2?CB`I{&ZVFLQrvU+2v50J7%~ z?sE+fy!)Rw(H)@kqHn`-0+K@8NI+6=Q8Z)K>7jMJC(ru&L;sh8JpZl<-%=<mt{asW zDug7D{RAX$9o@F+@Qd0u9U>s{-Z5t@a^*XnQ%D)Sd+do0LZRe2M>}-Z=Su)6qVI#I zRl~=1)>YljL$V34)I@mP00_iu!N60gt%t?+A)&>=g1-->GBzMQ7v#@Zrt!vz>tUMs z$KKTLzVqv)?zXvW-6QKaISmGovnRH2PLoSniZ>~&^$$Ot?M@QeeyWwoW=Z*Q@l`j` zIa}v1$}_*-5V*fu^I);P<F~!fWdI!JvjON}O@?_qSnn-3ks|~mhsoY_VO#$o03=?A zOyI}GA8q)`NSXZnNhEqrC0^XvLCrx1z!R5C@z-dkiWNI1<XOM<F8WXGL}B4Iln>$1 z5-$)S9BurT2>HqB?rBV*bB_=mLjb`pY2HT4j=gztSt)$etkrJGLr=JH5P-a<1Q6@3 z4ffv8;bW$|k6a^RJzs^K4pSwodY8-g%(K4Mx_FN4L)^O`)5OjD8YYYyzaD!s1D?l0 z@<QG$5P92Z@go;#zMx03wKZ7Gd60w<hp@IPv}6kVWO1I4n^vWtW8isbp7~q9P#ST? z+GtT>N*$N4i@XN*CIA2f;Gz&idI6g(ELsR7WksRaC$C@Z#!T#U9jn*74V(I%8R&r& zAuMQiB^&Hzxex#Gbocoi7P-?6p>GyaKp1vVD)47yd*qoPAF8l^uI9i5tJ}t*sdR;R z_?YXUQXv3*K!d-pAzRu-_ZOk9!o-)bm}6Whk=IrVm`qFCE^d1O)#V@ql<sI)w=aBs z#fJN3FWmZ>lGAygugP#Xr3j`KM$^Sr%!||q4|cKn+U%+aN0y)nNOY^Zdy39KF5vj) zua>y^D<5}{ZQyWK+ykMM&tS9g`S$NrMREaJr&_Nle%JNn1@^}g<JuEhCV7aoer+nv zJl*q#d-L-(P`k=}e#n+=!v6P;nYQ5&5$*+$G<g2U*AU79Rj++L@8#U58V;mxGc_RB z>t<uwwb_K8=l*ddRsQ5{yRpgu@*LSmun%&rf<SMu*y!~%Q6Kj{;+_adyMs|7p*Cwn z${l}myF0Pj;r_7rVYgmsx!W@Sy#SCO2tXoo*$o3G1K;VxKb<3B3&L9Lx`&__>i+DL zXMS>B{D<M^>di^C2Cad#90|YITakcqs6t!s`|-35Wg4(7<oVcZV$PA*zAU)0u^}u5 z3lLjOr{%JEX*$a)U5m0NXDB|!mbbFbboK~v6qxbEA*Ke9>9r^C`Svm8$b&l%9!Z1) zX$m|<Y^$CF3348gg@uJ&u%UR*=wK1;pSy8kk*&ot@(e6L%(FhZCYEsTaIWhJt^Umq zXB@I;ZQol8EoyH3-I%tGN2q>efA-|T+oAMd=1IyBmh`(mDF8XeN|~fn-|Kf6tnHn! z1{eOE@5^#>$x~P?&zF50-EmB%4fEDxF<tg38u5yBaG${q=W9@kBX})gOWQ6t%vZDi z>u;92xqXkj?J@p+a~2jYS`y_87H-iC;z-qxoOH|Lc!xDh{I5CV&fe$Xgvj2<2ddR_ znQ!C%HtEz@4tL>NiWcCOHy9VRZF-mLN8}y!ms|y{sq?wE3cV!m2Lc`hcq5Ps&)_06 z9<@Jbkg-~Hw*B+lpZcuHWcs19M_4FvO1%`>#GO`yx&(3v3jhErW%0Xl%CSA)(opIQ zg^K?9mrLF4^B!_fZ9p1ty|4)WZ8tX*I{NB4DqJiw!R$hXu)?QsGUT=JE7pD^zJs`f zcvUxf6Y<v5>G1O4Q3FXJZy!B%Q<3_6pmgK*J8$5|qhY;THZBfssRP;4MUl+*(P7e@ z-otI5xeC1^p(K3II6Z#NQ=Kz;(Ttk(N==NPR&xd{fvzKP5Y*5=o{fU7aG@`HT)584 ztT10<J*vI6IggpV!acrW+jx#Ni5_NQ)z5s986tDvb0@mP#!M?0vI-D!aRm$O-aPB= z82Y2hd+Kld1Oj?mq%-~hB!EcNXEY3<?ZLpV)sV+iSZhlEK@uGO$j@dJ747cz=S*@# zQ_bMaId~vG3(JSFI22{mZ*gv>0fmWpz6KT)j@W*)Cx^0*MVFZxO+nA|c)XU<e<2%* zN%d+u6&bkWN!j;MhW_>EPI9CE+~fY-xz1}?@!0kd7KA-ym31-a1HV*;E+&-)XP&pI za^=G`-;E>2b{t?PLH0iWN47C}!^Drd+b5IdMrqfEno=5bEgrN#fA!fD)xmJ8`_?b! zxH;|1HePYxV)xnW?w5?tB)89b1&~l$d+?k+hdL1IccaH?55smIY*Gyegu((t&}csC z`Kh|bf!lBPWNobdG)ewo;-fHmY0@#lNbWm$7<A{&WFJ_JOsuNI*rJSj#KklFi;i%k z?p^NgU-qcm_5pPu49*OK9HP@=o>F9v;erc}n{>>&KlUc-K^dib8!=8<+8e=}8t(7G z9w$__hc{8OH_FR+<GGXFKi)Rm-8HMrJ+!jVty;0%J+@|ro7=g}jsEjO_pZyPxxZE> z;NUQ<Weq%bQseE2b|8c>Qre5)!a&<XAq1`vFia?`^9S312IU3xU2@sCKIZF>$!o-0 z%re=XDlCj?agh|gx1cIq6R*DzM*NZp^-CuAxiyb$*ggQF#mn(@Z`RX;EVO~68W0IU zx==Gq7B1oiCy!f{YeKfn{ZHucxHj#r@{J33=d2~O&cwa-W{`XQ>$4`hqkcBS-67!U z?&)=F1RlN1m%HV?G96d;Ef<*dx#^3Sy6@dJ&+R2{<P8FxM#NL+?-h0=+{&(joXTq- zo1@J-w2!%<QMN>O^!A@cc@Z6{i84P<ob$r6uf>UACJ`b24?i!yfXQP4KnzR(qQyA7 zxT`O-v4(3Ro^gAZyM6YW?HIy>Of%@49ZM#VzFCzALPX?4IzKVb`u{igZ<h5(3jV-L z<U|avtKv{Ag9_IziPMnBA+JMV@Uw}F-O}D(*C(*(6Ik^2ZUK*8J+E^CO0QedHvlYC z7cDKrTCXhYlB!bd;c=*iRd666Wn!(P`f*D}6?P?r@RvFIYXN{vko`rT^-oV6_@>GX zl*;UlTCFi*lLl`E7nnI`z9ufKZHagcR}9o#D2x?O*iv!#t9Nv{g)1I&FzQyKGf$JO zH?ROb)Q7Obg_EfCy(7=~0zBFV>2EmO)ER}|Dih`CSu}JWZpi#zSv-xqGO48DlPF$( z)_v~lx6KhK2sD=W2_!sNgrHG^h&O-U=U;zlb)Wmi{hjV_HGf`rZa}ifReOCUdYOe~ z00dhd*yd@#iGW0p@i@}gYB{dc@#}fkKYe-dU(iHdO<5S}ma+Cd^@|j7^9R7<+71LR zu3AUUucGPGDJ^|EM(X@iH@3TT{@CLleSG6q0*J3fk2l+@*DGE|01{?m=~$H;KVNom zp7UiL)T41lg_^1ioE{FOG+sYiXj^RZdn)wwo-3yp1i4!$5a_WW5jXFR^m;IPZ0!p7 zy<g9Fuhw;k6y8Vz*oMf$G+x-eA%(Zft4IqjqLhhw9j`TW<hZU^KTT6958Z{lM3ZAm zOX@2$tf8vb_}w!X&!vd-;K<hk6;TE#6oK>^EpNYcX5odH2|H596UVl@&r6MWg2Gyl zJ+aC4*8-4^fizwU(_yHN0bSp-1dvdI-XCK+S?hKDuiZLz_q>VE*Wd7VS<NI2@U$_V z+<q=CZNj12A+iHx2alQRem;4zd*Y#$+WdQiFqJ>byeHzrSpFD1uk-L&0??zYSGbO) zJ??Wqzh6zQik~L~AeHE(D$#8g7T>(oOV>37xd98l2A`L<LEq)#r+-%EJF*{Wf~>cT z09(ZdM?;Lm=NVk;D~Xa+d<Y^bjs*CUK!ZwQtg=7H$no5i<`{V+-?(#$o7}z5Jt82f zn}rq6WGgHt+Y-u#SBJ3t0>;pS>@M|6c-d||*Z*GDK{pX;VDLv&f#wdIm~m&XSr!NG zD?40ix!=BHZn@d7(`Mfrcoe<hb$F2QAk)f;w7hru0Dtm?ypi$KJJg$Ih8t4$s<HDE z<lK4Q#XOB>2oe<j@{fH&2p1b7n5@w8@TY%P<uKO1njpQ^AtWUCh}(dg60^y}LW1;O zLt2_X(AM})FB&Fm$kgPi6fqoug-{&@HzJLy#qL6-{mxX{Z~vx#^gw(^Li_Vb#sxY? zhCM}m78c)yH7m7+dSoBpjRE9;;wrf^;^gY~88@6;IQN+c32KtmXspeR9Q&aA^PDAa z<HIYJP1V=Ra~P1&^QDE41rTBQDtM0tqDR-PD2ezV{%(Q$;FUAnUgu0waiY)I@;6su zPxKHlbdH_?lkM=HCW<T?qu0D_$=%P~%*r5gt0r;3b;BWZ2^Lq)N^5wXLr?5sK#Fb% zHb77k=Q6lxD|+!vlT)r^Wt{f20+CbY(*JDQO1GebXcvH(EUa|P-N^|(uMj{u0}H_A z?A;VR_LKbqJY7h#VA*!Q0ia})NM@C<=h#bj(oGMz>)YDh!>d-fb*l{5;elYe0fSy| zIuC%unt$B_iO=NPAa7)vvbFy2UGuaKrn<i=`8(g2Bmj`G05Bdp#rIVc=p43Uv+v&| z%Mw1%WJ<5BKiH_ZvU;2{O2AVfnRv+FGQgI~3JZ-346*m~L2}hU<y&{!$!-b1;Z1oX zYH|B5^$hv>j8$&!qZ=TEl}vT6SwrK~cqepKwhg5W6>pPejomQg@H6@wZe)3$w9p_w zk43Ukuxj`lmREfLK6lhlXSypVE^>>zdrE@41PLI+DRkvQ!GZ&axh&BxTeEVx0BpJY z^@H8+Ter`3uNAPp_J<SQAp($31|+(jXXqJ3I|kNnj|=auc-;QX&#(+452Twl;l^7{ zO2-SbSRNv^P&sDJSzqiK8IS7#Nk6>r$_F?1;h-WV(`xo4buAnw`xo^}zjNMNSB&rd zzSF(hhp;T*fmao8-y7C}*tVcy$c=k6e112Z+b`AM?1IXh7QVrW%`>PRx8W-iD{P!! z%8!)kv={wpp}W6*sav~pOS)|eIC?8Q3w;g%#d0R}nGi@Gk_WV8S+BeEfiCxX5$&%y zYmz(q+IdC){z@-F1|D(fjUaacU;#BA7I4DnzxfPLu{^Zd53lwPYBt&dkD$>)a@$QD z2urAj1pt8W63^u)-lx!-I!t}akN5r0QKlLiI-RTy{1koe%s=$FFN~e<UU&Arcy|ln z7zb7lAfBgT0XYVc%cYO?irol68nPba=@KZ!`+)#g80$G>pWjDZ$JbQPv0%x-M!&*% z31)+D0SiNp2cW?miS<N+qtEaP!K$x!pqjmFS&th(qr;ta^Fj()nc}{R_d)223Ix4H zZ{qyV4fu~?;}++hAI}mO@;C~r)e$blMHL4HSgcTIk`DPW`A^rkVTk<&A|ERiZ*5yl z_DXDT=Hl~5Uo*GNZc(@*EoH&V0Ac9Edmvr0Oq77=G_S3d9kN@@=?mNT(BJJO!%;8? z5|=e$uNp(J-i-3WAbB4b{&AsuWc3OGNMH5F9{`34QTgX|Bw#SlBgllG3q2IsL(<lo z-__&(?XE6)*>$@L##3(1oQ0-Rfx*u;-{JCSZ?<IsIWydRxhfhpfJ`-SBQ1_d4XU7T zG!XIU^Cn!G7=T%2Tl#Oj>+)GeNDAVwwF{f19W>CE_V3gbO27myNG*3med8OxkkDsg z1;(-E@IBs6l|64anA3kH`>hQtk%Ba3>qQefAi0EI3kn3KmivxNr@4vqyWQ%QD@>@V z*VcV7k6|D4^C37@fsTJ|l`_CCyKjj*=B9${^Ba8#0=C-R-f;QP)zHtfMX>1YLj<7N zIrv$cYI!J5|N5%b+=h-eW{hDLkl_GH^(aSy)!V5iRQSCbHT$?Xyujk;Z(8KJkWO1T zMfDfpsT75O$0;m!@aXA9TBI!6%qK9L)?5}6PUx<cG6_0D6J@X34Z>FkfhSkrqe$^* zX<<SHnxWnsd5MVh)0Mj0zO={dSA{^qz+r1XAhZ>F6+WBG@F0PvR`K(HH>by)&}`S7 zEedJ<9OpD#*xZd*Zr2B7U$K{iq1ivmo~@grJO+=N^c+p<FZp7tjhvcGqH{#9Poa$v zED<WRVJGlLpc`Bo^n9FpqWkdA=4?$`A!q;vAuZYI0+NqhGtV7#;ndCH3|oXI!z$$< zgjKJP0(vD!?BbbM&(+`a%(O5khiRF!qR-Zs><?cr<oVwqUZjvLx$y3VZsC#vUc}dc zV7Mv>O&I`zqrX-NIC@UcuT-e2M~|m1?seZ$xa!k43OJG}vofB49OeoD$tI=X=Tcc- zACv6>Eu3>k*6U=WHL<&DN^KZLQV=fmUI2xTn7~Bas-{v9UI5ZloJG0G4;$BRCU{~} z^BtErr9zhJzsmM1tKSECDT$~WZ%|O^N%U5?U+2NkG5PoAdydg_&)tRR@yleZxmXb9 zAy$kh(|zN~C0JDJdye?miryVZUOvrTKc(F*UeZ%$L-kb<>b<~WSPR}8fQL7M)PT)s z?{Q=9UE+?trCn+a0*{u>J(=BSq}wT!3f?h*33)QIPy(ex_E$UB49r0C9!>h6${uYY zv;zw_W{%;rw-P?K^&S|fuGtNa$!G{)1>d0|+vl8#?wA`EK-wZ_oS4bpv>7J~jg={p z$KJTmz59w;<<C<JaY9|Vd_M3%Y;hxpvka&`rt??q!u-dlppX?>3P3kamOW2P@bmk? zv+?sz-pK3ZjhuYbEH`#qhg-d(PxTo=O^3;<3V}rCkMb^_Ec4zH_FAWUkGWmF?&`KB z>VwlMt+z@-95!z7KIn#uNpz4hiDh>g9`aiw#<f3x$D4(@hk7Bn_-WalppOM4Hj}`0 zGN@P*1*)^zBZ(K~MLR1Fr1ZY!;u%WIHC_ZQ7*H1FJGRa8*q^$7fqSQj_I<T^6y8sR zYG*<KX`045a75RC_%0m6`g2S+N5*^{ygz&|d(0`18pEbWw&ryr*$)}r=FS*5+x=-y zx7)OCW$BId^z;TjKUzXl#F_Zldt@pUEJI{BOj}ZhtB${AApLwK_VP%n-=;Y@HokVv zFxEpOnpyX1M_-I0*e9Q;$={w#VWfJDq@;R%<z7RIV?pEA>1CO4n~wX63psggd%XCG zQV@|BF{Gn_q_g}vpHvn6p`)j|z4debcY`{RZqf^4B~#lo`u<&XzV25wAMKHgPPwN! zq`LFGV^W=xMuM=`0iy=$M&7Dyt*=j*U4p;{X=L@Z6cV;tmG0H5Qm&-W-Syy7_pf)A zb5SbO6%CxyKoP%L0VxxIZMx1j@+loxsIKYdd6(Wf!UFrq{w>{BmcRn;;?g}5%zN28 z0nnkeSzhpkX#uM;{U;9$^a*K#%MCKt3AIwYsJwLiNdl6iub%4$`IO?8bm)*o2kr%l z&Z^HGybA)z`8F)dbw#WUz+N(Ecd>XPdqEK|-Gj;Id2sk8)7%BBA8`VaBCOTZQdDSo z5&!)9HGOVQXOH{O-*hQ-T6i4n1+dkYYlk#)C<JW!V^sxunrl3E=bD|F8+o4W0NJfk zf{~l{*u|JmX>H+LVuFwC5p9h`e7JZEl3T<#a|%uJJXk4LmXxU;CLk&5NA}g`F(mj- zo<z3`j=iMV&$@co1CYsUZO9Wn0@%=5^fTG#CaJiPXqd*WnakcBgLQoG71Q0H<}NAv zgxETcfD2i@Ql<>6OD8S~k}E2>h-Te8ety2z=RzQARy3lDhhtmY;r>?7@4NHP)C?vc zlP%`BaX=1+n{&DtFfgh?iG{?tPYLrUta-GbypWGyJ72^%<-g1DZmMpqxG;Ntg|^fw zabc0IC2nL(9muIc9f-`{!PWoykIJ6A3wg=M>wmTZIWNQ0RlSazI7zj$0s{dO%cz9s zP;6R)NU7lawehpvk}?gq&wxk)9)FtGBX3phna3J}x~2?{^`tp`Wx}*9qR4ZTJ#_2! ze|M*!uo*-ie6A+=*_zmWGOy}Obs6b~RbcU=EbeJtJKh|AmqtYh;UI0`;vG0t6g+P> z@+K4A>4HR`u_ce=gICQi+lw}QB|2Ygs}xT+$WGsd!dJi7|FAz^V?-fM?92)CkT?{3 zO;&N>YIUv!+EUG45bgWu#^Tz^?QU5hM^e<1eD8N%MLXtbpN%iT{DgS}20RBC^K<oi zM%e<{yYmjb>v$uBWD_`R3O4psEE&UHP~$-bjNv(F!(jNLkRdtlrb1w`t4aYBT=+Bz z$rbK47rp?nVS3Ly6xNbN3jC}}KBQH2E=(=%*Ky)5;(h$B{#PrQ`@$L<=ph3eJt#Az z0U{!;6MF1vxf_$Q^|CYXb01Py!F%Sbt-#c!?lWpJaDuPrV4g0~GPbstz=eej3=CE_ z99&ri|MR@-?t%k_3YoC3mwp?+ivyVys7Hx<LrlcK^V0i6FN7;|S?7m72P9*4h3@Gg z{}GQF!!=Di(p5S?Vi%ZuKP*}_TkjS^ln|DJ{^llZ<qhWS)(enYjwRkVKRh0&_q<Wr zT6>+>CJ7ShubH_6%C^X5R5W}d*^w3rcJwrwI@%i<8FV+~@49*yOhM0Mh<Y!;0s+|v z$iv44mXgwDxpxF7zN@T|r*DIBQLEr0){QU`&nds`p-_w&6iXxI{s!5_J2`l~NH(?7 z+myvy5>$Dz=v}0<3`s<k>Xx`M74dr5AnmX*)1;GTGW3Aw058K>07B$d7?PYk8lH<4 zd<V73opj2$?w8~pcb5bZnD7|Bf{YaI^^xfD!KAre*p#ZtX~gQ8?wdJ*XTb}?+zE#7 z;p$vViZkgMS1t7hoeMi>jJT!!l{+zj94A{*9hyQy98?N|$Cz>(@2So}l=i-vNKa=L z9vT1$5z-^fV<g9;mFEOZ(Vy$jX)e|X>pm_!b64CybNK4Ki7!pG`)sk~A^{*^*$4!r zM2k|}p4VP`h)m6<OuJhQ1)!I~dF>&Y&I_pn^nn0G>Ip!u(Q)KX%zs=3odTiA4~j>D zzpEulk|x7>t{U6QpLM<mkkQk^3_bKtWzd5>Hh+x)=+tXd3jmR5Bi*@DpLxSBxq;@2 z^|qIy^h27wra~(u664_~cn<>;SHpW7B0KQHuxENlIs*z95>x<_a2*QIp`1y2k(<x$ zoW!JB!yc^v)pXdv;U*<2cnBUVgf`K$sh2repP!R)<$K_PbYl<kczUg!OYzWEynqmD zIDqr0RrK1gV{_NtL9^t^ODS~3Vu(nR*L3@_o&>@e>8j$`A|0Y^tRt_O6||J?kU`@q zsP^>*U9#jR4@4z}y8`0{j$I37vvvNqozVOEYIQN*<kTGFKIYtjEFEU$8l^-}b>Q{T zyRp|T0OV9ovf#Oc8@D%}tLf~kW-SiTt{uCMHt1UK*mZZ%EWRiJshzURiwie$`b>-@ z4~&UXijSM;29FvDW1Ud;Os6maR-1DNK_=X}8Ba6Pfv^ejX#*hUuJju_SKHdD&)5Iu zVmseB`2vdikc$IwU~k$0LZG81;{w@aH9Pgu4>*vi3So7jLUUZDIo)4|Go#YyI@Sf9 zN+8j3R^DZI=@eeifq1LwVT8x}uKxLWZ7AeI{=~e71i#-1hUj?I)pPoR3o%FNr(ljr z>FYSzSqU`un5;<|H@w;Ynw^Mud%pfh7xUZ+j|?L4zM3~XQBoZ0J~&Y$-e-gWuRJ0L zq9bJS(OmHs-iVlM(2WiQhfU*+Wg?nX;t{*SHkvsQTm&q-=#9W6(F24RJZEWf-)i0j zys4<L)Tq)%3$8paC=)hfH=YZ+>MNIq&qrnDTgmhf??mCN=gYhY5><spexkwPgRPb0 z>9{P$$Ygp=$&<LKs1IRv*PoYMlLX;Uyb)rrgghVvP<%5aTX)>J*}3E3t~?rH9S94} z)vF4p9Qk;x8x|qNye-*o_>wBg_#rwTC_%$x)WhQxUzyHXQ`^*X*1G$lU?YDnPOO{M zP2^DiQw@6lVkZfkmLV)Nf9Nr0=y8$;WNpFwLf)c^xHoeQs?*UUl7VcBjs<{tevT9q z>Ja3CVLJkEDX~r_>f_#wxzWj~ySu&z;sGSx_Z(_2I1Q7@OMDKv4lZ=$cDz<VZ$DN2 zswN~@pj&(AFJlRaWGW=avtd!g!i0^WbEb~_?IiUdWe6*-e+I>b@vv(6xnw1HJm~{G zXclga@^KBCyWRs42V&X;0FZ?9BArzTpRdc~r9J1Ur2OuXx|>5-un7~<4R>zf>XYbQ zjY{GM6Y|8P@S^u*`kNJRKJgZXvBpC-OD%#uY`l|-C8veyuyC=e`WX5)_}4$SbENQk z5}iqHCcWAFjB^u^QOFux@bkEq31!|{Wmq<93xGgH`8KEGwiwhH1*zc>q5>~E<&EF0 z>+G@1Z=gAZHH8ZanUGBI9$5SpCoEaY8?Tej#0j!$bY65T{Pgwn`$r(3!5TsQ{*ELe zX~|KRe~1(F%(-a6UOT+m@v@!50}%%jC&Zy<D6MwDp;HcrajGpVDF6^5#{wQx03bNW z05G;O`NF=(KgY@k6msSMHqDN|Q`f=Wga61OEOO7&DZTOZ$-<(w8YvG03byK2{o3aa zP@|`JmSj3s^0L=ayH`j@4He&LRtzk1W3BwnM%g|)R~A-XZ8S`gt*@NG&jVi(C)lA@ zgvoaRBeg>=q)fK59s|tRDzQhh^>Xao0^0v9E220>_SboL-5mg=f<#Ym?zG86b{2aG zX;9&wAluX~x8XCg)PmLm2FHZ?uAf1Nvu5CqFZNyll_~)HifoS^yAEV?7FJxjxn992 z>01G37f%SGuosASqPK(Jtzk2?f=cvYj={W&&aq~dSHbg_6?6^10p2xw(WmT64bSq3 z7j?aq+;=9|+56xOEvh^>H6ZYFQhGz=1=*idw443#&*p>+CJq89g<Z4Y3#xU~UJZx6 zWTx?zw}rCj?;L5op`I1-2T;HlTD*sdxi<4I6jtRMmm#vE2Y-X=l+v6|>4B&cJ(&@e zdM)k=N4#8ALg42ytFYOzRCdsAvw>zY#mS+R$<|k)hsM3mdE<|FmE#SD0VLTn*I%oD z<gM}aT?7Qki)T$O0~p*FJx-LGJ59(Sd&`c_fygfQcjVM$%%r;#C'cwGv&roys3 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 diff --git a/install.md b/install.md index 20c957d8..5e768242 100644 --- a/install.md +++ b/install.md @@ -74,15 +74,13 @@ This page lists a few installation guides. <div class="row"> -<div class="col col-md-3 text-center"> -<a href="/vagrant"><img src="/images/vagrant.png" height=150 style="vertical-align:bottom"><b><p>On Vagrant</p></b></a> -</div> - <div class="col col-md-3 text-center"> <a href="/install_on_debian"><img height=150 src="/images/debian-logo.png" style="vertical-align:bottom"> <b><p>On Debian 9/Stretch</p></b></a> </div> +<div class="col col-md-3 text-center"> +<a href="/dev"><img src="/images/lxc.png" height=150 style="vertical-align:bottom"><b><p>Dev environment in LXD/LXC</p></b></a> </div> -<br> +</div> diff --git a/install_ar.md b/install_ar.md index 5411c784..65c5dde5 100644 --- a/install_ar.md +++ b/install_ar.md @@ -71,13 +71,13 @@ <div class="row"> -<div class="col col-md-3 text-center"> -<a href="/vagrant_fr"><img src="/images/vagrant.png" height=150 style="vertical-align:bottom"><b><p>على فاغرانت</p></b></a> -</div> - <div class="col col-md-3 text-center"> <a href="/install_on_debian_fr"><img height=150 src="/images/debian-logo.png" style="vertical-align:bottom"> <b><p>على ديبيان 9 / ستريتش</p></b></a> </div> +<div class="col col-md-3 text-center"> +<a href="/dev"><img src="/images/lxc.png" height=150 style="vertical-align:bottom"><b><p>Dev environment in LXD/LXC</p></b></a> +</div> + </div> diff --git a/install_es.md b/install_es.md index 0550dab8..3c3fb448 100644 --- a/install_es.md +++ b/install_es.md @@ -68,13 +68,14 @@ Esta página enumera varios tipos de instalaciones, clasificados por categorías <div class="row"> -<div class="col col-md-3 text-center"> -<a href="/vagrant_es"><img src="/images/vagrant.png" height=150 style="vertical-align:bottom"><b><p>Con Vagrant</p></b></a> -</div> - <div class="col col-md-3 text-center"> <a href="/install_on_debian_es"><img height=150 src="/images/debian-logo.png" style="vertical-align:bottom"> <b><p>Sur Debian 9/Stretch</p></b></a> </div> +<div class="col col-md-3 text-center"> +<a href="/dev"><img src="/images/lxc.png" height=150 style="vertical-align:bottom"><b><p>Dev environment in LXD/LXC</p></b></a> +</div> + + </div> diff --git a/install_fr.md b/install_fr.md index 21f08906..60612125 100644 --- a/install_fr.md +++ b/install_fr.md @@ -68,13 +68,13 @@ Cette page liste plusieurs types d’installations, classés par catégories. <div class="row"> -<div class="col col-md-3 text-center"> -<a href="/vagrant_fr"><img src="/images/vagrant.png" height=150 style="vertical-align:bottom"><b><p>Avec Vagrant</p></b></a> -</div> - <div class="col col-md-3 text-center"> <a href="/install_on_debian_fr"><img height=150 src="/images/debian-logo.png" style="vertical-align:bottom"> <b><p>Sur Debian 9/Stretch</p></b></a> </div> +<div class="col col-md-3 text-center"> +<a href="/dev"><img src="/images/lxc.png" height=150 style="vertical-align:bottom"><b><p>Environnement de dev avec LXD/LXC</p></b></a> +</div> + </div> diff --git a/install_it.md b/install_it.md index 1a1d18e4..8fa8f550 100644 --- a/install_it.md +++ b/install_it.md @@ -76,12 +76,12 @@ Questa pagina elenca alcune guide all'installazione. <div class="row"> <div class="col col-md-3 text-center"> -<a href="/vagrant"><img src="/images/vagrant.png" height=150 style="vertical-align:bottom"><b><p>Su Vagrant</p></b></a> +<a href="/install_on_debian"><img height=150 src="/images/debian-logo.png" style="vertical-align:bottom"> +<b><p>Su Debian 9/Stretch</p></b></a> </div> <div class="col col-md-3 text-center"> -<a href="/install_on_debian"><img height=150 src="/images/debian-logo.png" style="vertical-align:bottom"> -<b><p>Su Debian 9/Stretch</p></b></a> +<a href="/dev"><img src="/images/lxc.png" height=150 style="vertical-align:bottom"><b><p>Dev environment in LXD/LXC</p></b></a> </div> </div> diff --git a/troubleshooting_guide.md b/troubleshooting_guide.md index fec52ddb..50683619 100644 --- a/troubleshooting_guide.md +++ b/troubleshooting_guide.md @@ -5,7 +5,7 @@ You can consider this as some kind of administrator guide for troubleshooting or ## General notes ### Do not break YunoHost Best way to troubleshoot is to not have to troubleshoot because you have tested everything before deploying it on your server. -This means that everytime you want to try a new thing (non-official app, new specific config, package an app...), you should try it on a development or testing instance, *not* on your production server. For this, you can [set up a Vagrant box](vagrant), or for instance a [DigitalOcean droplet](install_on_vps) for 1 cent/hour. +This means that everytime you want to try a new thing (non-official app, new specific config, package an app...), you should try it on a development or testing instance, *not* on your production server. For this, you can [set up a virtualbox](install_on_virtualbox), or for instance a [DigitalOcean droplet](install_on_vps) for 1 cent/hour. Also: https://wiki.debian.org/DontBreakDebian diff --git a/troubleshooting_guide_fr.md b/troubleshooting_guide_fr.md index 31e516b7..2f107da0 100644 --- a/troubleshooting_guide_fr.md +++ b/troubleshooting_guide_fr.md @@ -5,7 +5,7 @@ Ce guide peut trouver son intérêt lors du débuggage d’une nouvelle applicat ## Notes générales ### Ne cassez pas YunoHost -La meilleure manière de ne pas avoir de pannes est de ne pas bricoler sur votre serveur. Cela signifie que dès que vous souhaitez essayer quelque chose de nouveau (application non officielle, nouvelle configuration personnalisée, création d’une nouvelle application), essayez d'abord cela sur un serveur de test et non de production. Pour faire cela, vous pouvez par exemple utiliser une [box Vagrant](vagrant_fr) ou un [droplet DigitalOcean](install_on_vps_fr) pour 1 centime/heure. +La meilleure manière de ne pas avoir de pannes est de ne pas bricoler sur votre serveur. Cela signifie que dès que vous souhaitez essayer quelque chose de nouveau (application non officielle, nouvelle configuration personnalisée, création d’une nouvelle application), essayez d'abord cela sur un serveur de test et non de production. Pour faire cela, vous pouvez par exemple utiliser une [virtualbox](install_on_virtualbox_fr) ou un [droplet DigitalOcean](install_on_vps_fr) pour 1 centime/heure. Vous pouvez aussi lire ceci si vous avez encore envie de bricoler sur votre instance YunoHost en production : https://wiki.debian.org/DontBreakDebian diff --git a/vagrant.md b/vagrant.md deleted file mode 100644 index fa165cdf..00000000 --- a/vagrant.md +++ /dev/null @@ -1,59 +0,0 @@ -# Vagrant and YunoHost - -*If you need testing some code, you should using directly [ynh-dev](https://github.com/yunohost/ynh-dev)* - -*Find other ways to install YunoHost **[here](/install)**.* - -<img src="/images/vagrant.png" width=250> - -**Prerequisite**: an x86 computer with VirtualBox installed and enough RAM capacity to be able to run a small virtual machine. - ---- - -## Initialization - -Create a project folder -```bash -mkdir YunoHost -cd YunoHost -``` - -The following command will initialize the project with a Yunohost image -```bash -vagrant box add yunohost/stretch-unstable https://build.yunohost.org/yunohost-stretch-unstable.box --provider virtualbox -vagrant init yunohost/stretch-unstable -``` - -You need to activate the network for the YunoHost instance. -```bash -sed -i 's/# config\.vm\.network "private_network"/config.vm.network "private_network"/' Vagrantfile``` - ---- - -## Run a vm - -Start the virtual machine -```bash -vagrant up -``` - -Connect to the started virtual machine -```bash -vagrant ssh -``` - -Upgrade the system -```bash -sudo apt update && sudo apt dist-upgrade -``` - -You can access to your vm with the ip 192.168.33.10 - -The IP addresses related to the boxes are set by default but can be changed in the network settings. - ---- - -*Once the installation is finished, you may want to proceed to post-installation: **[yunohost.org/postinstall](/postinstall)** * - - - diff --git a/vagrant_es.md b/vagrant_es.md deleted file mode 100644 index 2edf6375..00000000 --- a/vagrant_es.md +++ /dev/null @@ -1,60 +0,0 @@ -# Vagrant y YunoHost - -*Si necesitas una máquina virtual para testar tu código, es mejor utilizar directamente [ynh-dev](https://github.com/yunohost/ynh-dev)* - -*Encontrar otros medios de instalar Yunohost **[aquí](/install_es)**.* - -<img src="/images/vagrant.png" width=250> - -**Prerrequisitos** : Un ordenador x86 con VirtualBox instalado y bastante RAM disponible para iniciar una pequeña máquina virtual. - ---- - -## Inicio - -Crear una carpeta para el proyecto : -```bash -mkdir YunoHost -cd YunoHost -``` - -El comando siguiente iniciará el proyecto con una imagen básica de Yunohost -```bash -vagrant box add yunohost/stretch-unstable https://build.yunohost.org/yunohost-stretch-unstable.box --provider virtualbox -vagrant init yunohost/stretch-unstable -``` -Luego, tienes que activar la red para la instancia Yunohost : -```bash -sed -i 's/# config\.vm\.network "private_network"/config.vm.network "private_network"/' Vagrantfile -``` - ---- - -## Instalación - -Iniciar la máquina virtual -```bash -vagrant up -``` - -Conectarse a la máquina virtual iniciada -```bash -vagrant ssh -``` - -Actualizar el sistema. -```bash -apt update && apt dist-upgrade -``` - -Puedes acceder a tu VM vía el IP 192.168.33.10. - -Las direcciones IP están asignadas por defecto pero pueden ser cambiadas en los parámetros de red del Vagrantfile. - ---- - -*Una vez la instalación terminada, puedes proceder a la post-instalación : -**[yunohost.org/postinstall](/postinstall_es)** * - - - diff --git a/vagrant_fr.md b/vagrant_fr.md deleted file mode 100644 index ebb0da31..00000000 --- a/vagrant_fr.md +++ /dev/null @@ -1,59 +0,0 @@ -# Vagrant et YunoHost - -*Si vous avez besoin d’une vm pour tester du code, il vaut mieux utiliser directement [ynh-dev](https://github.com/yunohost/ynh-dev)* - -*Toutes les autres façons d’installer YunoHost sont listées **[ici](/install_fr)**.* - -<img src="/images/vagrant.png" width=250> - -**Prérequis** : Un ordinateur x86 avec VirtualBox installé et assez de RAM disponible pour lancer une petite machine virtuelle. - ---- - -## Initialisation - -Créer un dossier pour le projet : -```bash -mkdir YunoHost -cd YunoHost -``` - -La commande suivante va initialiser le projet avec une image YunoHost de base -```bash -vagrant box add yunohost/stretch-unstable https://build.yunohost.org/yunohost-stretch-unstable.box --provider virtualbox -vagrant init yunohost/stretch-unstable -``` -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 -``` - ---- - -## Installation - -Démarrer la machine virtuelle -```bash -vagrant up -``` - -Se connecter à la machine virtuelle démarrée -```bash -vagrant ssh -``` - -Mettre à jour le système. -```bash -apt update && apt dist-upgrade -``` - -Vous pouvez accéder à votre vm via l’ip 192.168.33.10. - -Les adresses IP sont assignées par défaut mais peuvent être changées dans les paramètres réseau du Vagrantfile. - ---- - -*Une fois l’installation terminée, vous pouvez procéder à la post-installation : **[yunohost.org/postinstall](/postinstall_fr)** * - - - From 044668b843b20cb3825be13bad18d026c0f0273a Mon Sep 17 00:00:00 2001 From: Jaxom99 <30865395+Jaxom99@users.noreply.github.com> Date: Tue, 15 Oct 2019 23:03:05 +0200 Subject: [PATCH 202/360] Update dns_config_fr.md add NB to avoid confusion with "domain.tld" --- dns_config_fr.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dns_config_fr.md b/dns_config_fr.md index 85038f10..ccba7b95 100644 --- a/dns_config_fr.md +++ b/dns_config_fr.md @@ -13,6 +13,7 @@ la configuration devrait être faite automatiquement. Si vous utilisez votre pro domaine via l'interface de votre registrar. ## Configuration DNS recommandée +NB : les exemples utilisent ici le texte `votre.domain.tld`, à remplacer par votre domaine (par exemple `www.yunohost.org`). YunoHost fournit une configuration DNS recommandée, accessible via : - la webadmin, dans Domaines > votre.domain.tld > Configuration DNS ; @@ -74,9 +75,9 @@ suivante : #### Quelques notes à propos de cette table -- Tous ces enregistrements ne sont pas nécessaires. Pour une installation minimale, seuls les enregistrements en gras sont nécessaires. +- Tous ces enregistrements ne sont pas nécessaires. Pour une installation minimale, seuls les enregistrements en gras sont nécessaires ; - Le point à la fin de `votre.domaine.tld.` est important ;) ; - `@` corresponds à `votre.domaine.tld`, et par ex. `muc` corresponds à `muc.votre.domaine.tld` ; -- Les valeurs montrées sont des valeurs d'exemple ! Référez-vous à la configuration générée chez vous pour savoir quelles valeurs utiliser. +- Les valeurs montrées ici sont des valeurs d'exemple ! Référez-vous à la configuration générée chez vous pour savoir quelles valeurs utiliser ; - Nous recommandons un [TTL](https://fr.wikipedia.org/wiki/Time_to_Live#Le_Time_to_Live_dans_le_DNS) de 3600 (1 heure). Mais vous pouvez utiliser une autre valeur si vous savez ce que vous faîtes ; - Ne mettez pas d'enregistrement IPv6 si vous n'êtes pas certains que l'IPv6 fonctionne sur votre serveur ! Vous aurez des problèmes avec Let's Encrypt si ce n'est pas le cas. From dde9f06cc6981b1d2e41a172b97b0d83ff2f22c5 Mon Sep 17 00:00:00 2001 From: Jaxom99 <30865395+Jaxom99@users.noreply.github.com> Date: Tue, 15 Oct 2019 23:07:28 +0200 Subject: [PATCH 203/360] Update dns_config.md add explanation of placeholder, to avoid typos and confusion --- dns_config.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/dns_config.md b/dns_config.md index c19c9f3b..6c331a83 100644 --- a/dns_config.md +++ b/dns_config.md @@ -5,22 +5,23 @@ DNS (domain name system) is a system that converts human-readable addresses easily accessible by human beings, and for some services like mail to work properly, DNS must be configured. -If you're using an [automatic domain](/dns_nohost_me) provided by the YunoHost Project, the configuration should be +If you're using a nohost.me / noho.st / ynh.fr domain, the configuration should be performed automatically. If you're using your own domain name (e.g. bought via a registrar), you should manually configure your domain on your registrar's interface. ## Recommended DNS configuration +NB: Examples here use the placeholder `your.domain.tld`, you have to replace it with your real domain, such as `www.yunohost.org`. YunoHost provides a recommended DNS configuration, available via : - the webadmin, in Domain > your.domain.tld > DNS configuration ; - or the command line, `yunohost domain dns-conf your.domain.tld` For specific needs or specific setups, and if you know what you're doing, you -might want or have to tweak these or add additional ones (e.g. to handle +might want or have to tweak these, or add additional ones (e.g. to handle subdomains). -The recommended configuration typically looks like this : +The recommended configuration typically looks like this: ```bash # @@ -51,7 +52,7 @@ mail._domainkey 3600 IN TXT "v=DKIM1; k=rsa; p=someHuuuuuuugeKey" _dmarc 3600 IN TXT "v=DMARC1; p=none" ``` -Though it might be easier to understand it if displayed like this : +Though it might be easier to understand it if displayed like this: | Type | Name | Value | @@ -76,7 +77,5 @@ Though it might be easier to understand it if displayed like this : - The dot at the end of `your.domain.tld.` is important ;) ; - `@` corresponds to `your.domain.tld`, and e.g. `muc` corresponds to `muc.your.domain.tld` ; - These are example values ! See your generated conf for the actual values you should use ; -- We recommend a [TTL](https://en.wikipedia.org/wiki/Time_to_live#DNS_records) of 3600 (1 hour). But you can use something else if you - know what you're doing ; -- Don't put an IPv6 record if you're not sure IPv6 really works on your server ! - You might have issues with Let's Encrypt if it doesn't. +- We recommend a [TTL](https://en.wikipedia.org/wiki/Time_to_live#DNS_records) of 3600 (1 hour). But you can use something else if you know what you're doing ; +- Don't put an IPv6 record if you're not sure IPv6 really works on your server! You might have issues with Let's Encrypt if it doesn't. From 44b8999f12dac50e928919d5082bcb04df7c8cfd Mon Sep 17 00:00:00 2001 From: Jaxom99 <30865395+Jaxom99@users.noreply.github.com> Date: Tue, 15 Oct 2019 23:09:55 +0200 Subject: [PATCH 204/360] Update dns_config.md restore automatic domain link --- dns_config.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dns_config.md b/dns_config.md index 6c331a83..8dcee614 100644 --- a/dns_config.md +++ b/dns_config.md @@ -5,7 +5,7 @@ DNS (domain name system) is a system that converts human-readable addresses easily accessible by human beings, and for some services like mail to work properly, DNS must be configured. -If you're using a nohost.me / noho.st / ynh.fr domain, the configuration should be +If you're using an [automatic domain](/dns_nohost_me) provided by the YunoHost Project, the configuration should be performed automatically. If you're using your own domain name (e.g. bought via a registrar), you should manually configure your domain on your registrar's interface. From a0ba3acac9ca88d96bdfa73fe1e7c9a2a1b4bedc Mon Sep 17 00:00:00 2001 From: Jaxom99 <30865395+Jaxom99@users.noreply.github.com> Date: Tue, 15 Oct 2019 23:14:08 +0200 Subject: [PATCH 205/360] Update dns_config_es.md add placeholder example --- dns_config_es.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dns_config_es.md b/dns_config_es.md index 879ed0e6..87797baf 100644 --- a/dns_config_es.md +++ b/dns_config_es.md @@ -6,6 +6,7 @@ Si utilizas un [dominio automático](/dns_nohost_me_es) provecho por el Proyecto ## Configuración DNS recomendada +_Nota: los ejemplos utilizan el marcador `tu.dominio.tld`, debe ser reemplazado por su propio dominio, como `www.yunohost.org`._ YunoHost provee una configuración DNS recomendada, accesible vía : - la webadmin, en Dominios > tu.dominio.tld > Configuración DNS ; From 312c83a81bf9612c7785ec5b1ed44895e1d5899c Mon Sep 17 00:00:00 2001 From: Jaxom99 <30865395+Jaxom99@users.noreply.github.com> Date: Tue, 15 Oct 2019 23:15:16 +0200 Subject: [PATCH 206/360] Update dns_config_fr.md typo + italique --- dns_config_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dns_config_fr.md b/dns_config_fr.md index ccba7b95..b6420b3f 100644 --- a/dns_config_fr.md +++ b/dns_config_fr.md @@ -13,7 +13,7 @@ la configuration devrait être faite automatiquement. Si vous utilisez votre pro domaine via l'interface de votre registrar. ## Configuration DNS recommandée -NB : les exemples utilisent ici le texte `votre.domain.tld`, à remplacer par votre domaine (par exemple `www.yunohost.org`). +_NB : les exemples utilisent ici le texte `votre.domaine.tld`, à remplacer par votre propre domaine (par exemple `www.yunohost.org`)._ YunoHost fournit une configuration DNS recommandée, accessible via : - la webadmin, dans Domaines > votre.domain.tld > Configuration DNS ; From 6eb307ed37306c300268b5c6ef7d59e917ad63e2 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alexandre.aubin@cern.ch> Date: Wed, 16 Oct 2019 17:18:27 +0200 Subject: [PATCH 207/360] Add logo with dark background, rouncorners --- images/logo_roundcorner.png | Bin 0 -> 9931 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/logo_roundcorner.png diff --git a/images/logo_roundcorner.png b/images/logo_roundcorner.png new file mode 100644 index 0000000000000000000000000000000000000000..96b2c25798cd425cf14e310f279addcb068e154f GIT binary patch literal 9931 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 JPDHLkV1i&h#329x literal 0 HcmV?d00001 From a422c7a905b4997038cdcbd777ea8d39f490fb18 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alexandre.aubin@cern.ch> Date: Wed, 16 Oct 2019 17:25:31 +0200 Subject: [PATCH 208/360] Use a different panel screenshot in users doc --- users.md | 2 +- users_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/users.md b/users.md index 1d7ea512..13141c40 100644 --- a/users.md +++ b/users.md @@ -15,7 +15,7 @@ You should be careful about who you give your server access to. In terms of secu The user portal, or SSO ----------------------- -<center><img src="images/home_panel.jpg" style="max-width: 650px; border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"></center> +<center><img src="images/user_panel.png" style="max-width: 650px; border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"></center> The user portal, also called the SSO for 'Single Sign On' allows user to browse easily between the different apps they have access to. In particular, the term 'Single Sign On' comes from the fact that user only need to log in the portal to automatically be logged to all apps that require authentication (or at least those who are integrated with the SSO/LDAP, since this is sometimes technically complicated or not possible at all). diff --git a/users_fr.md b/users_fr.md index 9e9055da..3b114f71 100644 --- a/users_fr.md +++ b/users_fr.md @@ -15,7 +15,7 @@ Vous devriez faire attention à qui vous donnez l'accès à votre serveur. En te Le portail utilisateur, ou SSO ----------------------- -<center><img src="images/home_panel.jpg" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"></center> +<center><img src="images/user_panel.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"></center> Le portail utilisateur, également appelé SSO pour 'Single Sign On', permet à l'utilisateur de naviguer facilement entre les différentes applications auxquelles il a accès. En particulier, le terme 'Single Sign On' vient du fait que l'utilisateur n'a qu'à se connecter au portail pour être automatiquement connecté à toutes les applications qui nécessitent une authentification (ou du moins celles qui sont intégrées avec le SSO/LDAP, car cela est parfois techniquement compliqué ou pas possible du tout). From 912307969d054057714f89b9f4379a968c80edfe Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alexandre.aubin@cern.ch> Date: Wed, 16 Oct 2019 17:41:26 +0200 Subject: [PATCH 209/360] Stupid typo @.@ --- whatsyunohost.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/whatsyunohost.md b/whatsyunohost.md index fea1c453..d1aad886 100644 --- a/whatsyunohost.md +++ b/whatsyunohost.md @@ -3,7 +3,7 @@ What is YunoHost? <img src="/images/YunoHost_logo_vertical.png" width=400> -YunoHost is an **operating system** aiming to simplify as much as possibly the administration of a **server** and therefore democratize [self-hosting](selfhosting), while making sure it stays reliable, secure, ethical and lightweight. It is a free software project maintained exclusively by volunteers. Technically, it can be seen as a distribution based on [Debian GNU/Linux](https://debian.org) and can be installed on [many kinds of hardware](install). +YunoHost is an **operating system** aiming to simplify as much as possible the administration of a **server** and therefore democratize [self-hosting](selfhosting), while making sure it stays reliable, secure, ethical and lightweight. It is a free software project maintained exclusively by volunteers. Technically, it can be seen as a distribution based on [Debian GNU/Linux](https://debian.org) and can be installed on [many kinds of hardware](install). Features -------- From 6418adbdeee201e1d7d1c06e63d6aaec7a2035fe Mon Sep 17 00:00:00 2001 From: Eauchat <34686393+eauchat@users.noreply.github.com> Date: Wed, 16 Oct 2019 22:12:40 +0000 Subject: [PATCH 210/360] Improved a bit doc assuming that email clients should configure themselves automatically --- email_configure_client.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/email_configure_client.md b/email_configure_client.md index 1d513bc0..710624a4 100644 --- a/email_configure_client.md +++ b/email_configure_client.md @@ -2,7 +2,11 @@ You can fetch and send emails using your YunoHost instance from desktop email clients such as Mozilla Thunderbird or on your smartphone with applications like K-9 Mail. -##### Generic settings +Normally, configuring your mail client should be automatic, but if the autoconfiguration fails, you can do it manually following the instructions bellow. + +### Generic settings + +Here are the element you should enter to manually configure your mail client (`domain.tld` refers to what's after the @ in your email address, and `username` what's before @). | Protocol | Port | Encryption | Authentication | Username | | :--: | :-: | :--: | :--: | :--: | @@ -11,7 +15,7 @@ You can fetch and send emails using your YunoHost instance from desktop email cl ### <img src="images/thunderbird.png" width=50> Configure Mozilla Thunderbird (on a desktop computer) -The automatic detection tool of Thunderbird does not work yet with YunoHost. You will need to set it up manually. To do so, add the account information, then select port 993 with SSL/TLS for IMAP, and port 587 with STARTTLS for SMTP. Afterwards select 'Normal Password' for Authentication and click on 'Advanced Config'. You will need to accept the certificate exceptions for fetching mails and after you send your first mail. Don't forget to remove the dot before the domain name. +To manually configure a new account in Thunderbird, add the account information, then select port 993 with SSL/TLS for IMAP, and port 587 with STARTTLS for SMTP. Afterwards select 'Normal Password' for Authentication and click on 'Advanced Config'. You may need to accept the certificate exceptions for fetching mails and after you send your first mail. Don't forget to remove the dot before the domain name. <img src="/images/thunderbird_config_1.png" width=900> <img src="/images/thunderbird_config_2.png" width=900> @@ -20,7 +24,7 @@ The automatic detection tool of Thunderbird does not work yet with YunoHost. You ### <img src="images/k9mail.png" width=50> Configure K-9 Mail (on Android) -Follow the following steps. (As for thunderbird, you might need to accept certificates at some points) +Follow the following steps. (As for Thunderbird, you might need to accept certificates at some points) <a href="/images/k9mail_config_1.png"><img src="/images/k9mail_config_1.png" width=200/></a> <a href="/images/k9mail_config_2.png"><img src="/images/k9mail_config_2.png" width=200/></a> From 6afbdad58fd75210362ee1103a9cfd963ac3cfba Mon Sep 17 00:00:00 2001 From: Eauchat <34686393+eauchat@users.noreply.github.com> Date: Thu, 17 Oct 2019 09:46:38 +0000 Subject: [PATCH 211/360] Translated changes to english page to french --- email_configure_client_fr.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/email_configure_client_fr.md b/email_configure_client_fr.md index af527712..3d1c8987 100644 --- a/email_configure_client_fr.md +++ b/email_configure_client_fr.md @@ -1,8 +1,12 @@ -## Configuration desktop email client +## Configurer un client mail Vous pouvez récupérer et envoyer des emails avec votre instance YunoHost grâce à des logiciels comme Mozilla Thunderbird, ou sur votre smartphone grâce à des applications comme K-9 Mail. -##### Réglages génériques +Normalement, votre client mail devrait recevoir la configuration automatiquement lorsque vous ajoutez un compte, mais si jamais cela ne fonctionne pas, il est possible de le faire manuellement en suivant les quelques étapes suivantes. + +### Réglages génériques + +Voici les éléments que vous devrez entrer pour configurer manuellement votre client mail (`domain.tld` fait référence à ce qui est après le @ dans votre adresse mail, et `nom_dutilisateur` ce qui est avant @). | Protocole | Port | Chiffrement | Authentification | Login | | :--: | :-: | :--: | :--: | :--: | @@ -11,7 +15,7 @@ Vous pouvez récupérer et envoyer des emails avec votre instance YunoHost grâc ### <img src="images/thunderbird.png" width=50> Configurer Mozilla Thunderbird -L'outil de détection automatique de Thunderbird ne fonctionne actuellement pas avec YunoHost. Il vous faudra remplir les champs manuellement. Commencez par remplir les informations de base (Nom, adresse et mot de passe), cliquez sur Continuer puis Configuration Manuelle. Enlevez le `.` avant le nom de domaine. Sélectionnez le port 993 avec SSL/TLS pour IMAP, et le port 587 avec STARTTLS pour SMTP. Sélectionnez 'Mot de passe normal' pour l'authentification. Testez la configuration puis validez. (Il vous faudra ensuite possiblement accepter des certificats pour que tout fonctionne correctement.) +Pour configurer manuellement un nouveau compte dans Thunderbird commencez par remplir les informations de base (Nom, adresse et mot de passe), cliquez sur Continuer puis Configuration Manuelle. Enlevez le `.` avant le nom de domaine. Sélectionnez le port 993 avec SSL/TLS pour IMAP, et le port 587 avec STARTTLS pour SMTP. Sélectionnez 'Mot de passe normal' pour l'authentification. Testez la configuration puis validez. (Il vous faudra ensuite possiblement accepter des certificats pour que tout fonctionne correctement.) <img src="/images/thunderbird_config_1.png" width=900> <img src="/images/thunderbird_config_2.png" width=900> From ff6ad5216553f7295a87405053f5ae912636dc69 Mon Sep 17 00:00:00 2001 From: Eauchat <34686393+eauchat@users.noreply.github.com> Date: Thu, 17 Oct 2019 10:23:16 +0000 Subject: [PATCH 212/360] Translated email client configuration document to spanish --- email_configure_client_es.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 email_configure_client_es.md diff --git a/email_configure_client_es.md b/email_configure_client_es.md new file mode 100644 index 00000000..2cbda3c6 --- /dev/null +++ b/email_configure_client_es.md @@ -0,0 +1,31 @@ +## Cómo configurar un cliente de correo electrónico + +Es posible de consultar y enviar correos de tu YunoHost con un cliente de correo electrónico como Mozilla Thunderbird o K-9 Mail en el teléfono. +Normalmente, al añadir tu cuenta en el cliente de correo se va a configurar automáticamente, pero por si acaso no funciona, puedes configurarlo manualmente. + +### Configuración general + +A continuación puedes encontrar los elementos a configurar en el cliente de correo (`domain.tld` es todo lo que es después de @ en tu dirección de correo, y `nombre_de_usuario` es lo que es antes del @). + +| Protocolo | Puerto | Seguridad | Autenticación | Nombre de usuario | +| :--: | :-: | :--: | :--: | :--: | +| IMAP | 993 | SSL/TLS | Normal password | `nombre_de_usuario` (sin `@domain.tld`) | +| SMTP | 587 | STARTTLS | Normal password | `nombre_de_usuario` (sin `@domain.tld`) | + +### <img src="images/thunderbird.png" width=50> Configurar Mozilla Thunderbird (en un ordenador) + +Para configurar manualmente un nuevo cuenta en Thunderbird, añadir las informaciones de la cuenta, y después seleccionar el puerto 993 con SSL/TLS para IMAP, y puerto 587 con STARTTLS para SMTP. Después seleccionar 'Normal Password' para Autenticación y haz click en el botón 'Advanced Config'. Se puede que tendrás que aceptar los certificados para que todo funciona normalmente. + +<img src="/images/thunderbird_config_1.png" width=900> +<img src="/images/thunderbird_config_2.png" width=900> + +* [Gestionar un alias para una dirección de correo electrónico](https://support.mozilla.org/es/kb/configurar-un-alias-para-una-direccin-de-correo-el) + +### <img src="images/k9mail.png" width=50> Configurar K-9 Mail (en Android) + +Seguir los pasos a continuación. (Como para Thunderbird, se puede que tendrás que aceptar los certificados para que funciona normalmente.) + +<a href="/images/k9mail_config_1.png"><img src="/images/k9mail_config_1.png" width=200/></a> +<a href="/images/k9mail_config_2.png"><img src="/images/k9mail_config_2.png" width=200/></a> +<a href="/images/k9mail_config_3.png"><img src="/images/k9mail_config_3.png" width=200/></a> +<a href="/images/k9mail_config_4.png"><img src="/images/k9mail_config_4.png" width=200/></a> From da3d8d107d19ac3382b5bfed24d855b6f38cbe6b Mon Sep 17 00:00:00 2001 From: Eauchat <34686393+eauchat@users.noreply.github.com> Date: Thu, 17 Oct 2019 15:46:16 +0000 Subject: [PATCH 213/360] Corrected small typos --- groups_and_permissions.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/groups_and_permissions.md b/groups_and_permissions.md index 6b89207d..6e1c6c4a 100644 --- a/groups_and_permissions.md +++ b/groups_and_permissions.md @@ -116,11 +116,11 @@ $ yunohost user permission list wordpress.admin: allowed: - yolo_crew - - john + - alice [...] ``` -Note that, for example, if we want to restrict permission for email so that only Bob, we should also remove `all_users` from the permission : +Note that, for example, if we want to restrict permission for email so that only Bob is allowed to email, we should also remove `all_users` from the permission : ```bash $ yunohost user permission update mail --remove all_users --add bob @@ -128,7 +128,7 @@ $ yunohost user permission update mail --remove all_users --add bob ### Notes for apps packagers -By default, installing an app creates the permission `$app.main` with `all_users` allowed by default. +By default, installing an app creates the permission `app.main` with `all_users` allowed by default. If you wish to make the application publicly available, instead of the old `unprotected_urls` mechanism, you should give access to the special groups `visitors`: From f26e70b1b96495094a72d64deab416a1926a386a Mon Sep 17 00:00:00 2001 From: yalh76 <yalh@yahoo.com> Date: Thu, 17 Oct 2019 20:09:31 +0200 Subject: [PATCH 214/360] Updating list --- apps_framasoft.md | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/apps_framasoft.md b/apps_framasoft.md index d9d591a5..926cd49f 100644 --- a/apps_framasoft.md +++ b/apps_framasoft.md @@ -11,7 +11,7 @@ | Framapic | Lutim | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/lutim_ynh) |  | | Framabin | PrivateBin | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-apps/zerobin_ynh) |  | | Frama.link | Lstu | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/lstu_ynh) |  | -| Framatube | Mediadrop | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/mediadrop_ynh) |  | +| Framatube | Peertube | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/peertube_ynh) |  | | Framanews | TinyTinyRSS | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-apps/ttrss_ynh) |  | | Framabee | Searx | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/searx_ynh) |  | | Framabag | Wallabag | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/wallabag_ynh) |  | @@ -26,15 +26,20 @@ | Framatalk | Jitsi Meet | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/jitsi_ynh) |  | | Framalistes | Mailman | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/mailman_ynh) |  | | | Sympa | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/alexAubin/sympa_ynh) |  | -| Framindmap | Wisemapping | Non packagé | | +| Framindmap | Wisemapping | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/mailman_ynh) |  | | Framavectoriel | SVG-Edit | Non packagé | | -| Framacarte | uMap | Non packagé | | -| Framaforms | WebForms? | Non packagé | | -| Framaestro | Framaestro | Non packagé | | -| Framavox | ? | Non packagé | | +| Framacarte | uMap | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/umap_ynh) | | +| Framaforms | Framaforms | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/framaforms_ynh) | | +| Framaestro | Framaestro | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/framaestro_ynh) | | +| Framavox | Loomio | Non packagé | | | Framagenda | (Agenda Nextcloud) | Non packagé | | -| Framagames | ? | Non packagé | | -| MyFrama | ? | Non packagé | | +| Framagames | Framagames | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/framagames_ynh) | | +| Framateam | Mattermost | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/mattermost_ynh) | | +| MyFrama | Shaarli | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/shaarli_ynh) | | +| Framaslides | Strut | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/strut_ynh) | | +| Framasites | Grav | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/grav_ynh) | | +| Framaclic | Matomo | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/matomo_ynh) | | +| Framatrad | ? | Non packagé | | ### Voir aussi From 852fedf70a185e3dd76b5682c59abb6710df1cf4 Mon Sep 17 00:00:00 2001 From: yalh76 <yalh@yahoo.com> Date: Thu, 17 Oct 2019 20:11:35 +0200 Subject: [PATCH 215/360] typo --- apps_framasoft.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps_framasoft.md b/apps_framasoft.md index 926cd49f..81969357 100644 --- a/apps_framasoft.md +++ b/apps_framasoft.md @@ -26,7 +26,7 @@ | Framatalk | Jitsi Meet | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/jitsi_ynh) |  | | Framalistes | Mailman | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/mailman_ynh) |  | | | Sympa | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/alexAubin/sympa_ynh) |  | -| Framindmap | Wisemapping | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/mailman_ynh) |  | +| Framindmap | Wisemapping | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/wisemapping_ynh) |  | | Framavectoriel | SVG-Edit | Non packagé | | | Framacarte | uMap | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/umap_ynh) | | | Framaforms | Framaforms | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/framaforms_ynh) | | From 7fc62fadae308ab4455bb3e38a11d4eebe7fc971 Mon Sep 17 00:00:00 2001 From: yalh76 <yalh@yahoo.com> Date: Thu, 17 Oct 2019 20:34:55 +0200 Subject: [PATCH 216/360] Update apps_framasoft.md Co-Authored-By: Alexandre Aubin <alex.aubin@mailoo.org> --- apps_framasoft.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps_framasoft.md b/apps_framasoft.md index 81969357..714a78b1 100644 --- a/apps_framasoft.md +++ b/apps_framasoft.md @@ -32,7 +32,7 @@ | Framaforms | Framaforms | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/framaforms_ynh) | | | Framaestro | Framaestro | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/framaestro_ynh) | | | Framavox | Loomio | Non packagé | | -| Framagenda | (Agenda Nextcloud) | Non packagé | | +| Framagenda | (Agenda Nextcloud) | c.f. Nextcloud | | | Framagames | Framagames | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/framagames_ynh) | | | Framateam | Mattermost | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/mattermost_ynh) | | | MyFrama | Shaarli | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/shaarli_ynh) | | From 1beaca90e40ab9f115e30998902fb8e06a5aea83 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Fri, 18 Oct 2019 00:58:41 +0200 Subject: [PATCH 217/360] Rework application catalog: no more official apps, handle the high quality apps, many small UI tweaks and code improvements --- apps.md | 275 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 166 insertions(+), 109 deletions(-) diff --git a/apps.md b/apps.md index 535eace8..92bda734 100644 --- a/apps.md +++ b/apps.md @@ -1,4 +1,4 @@ -# Apps +# Application catalog <span class="javascriptDisclaimer"> This page requires Javascript enabled to display properly :s. @@ -6,34 +6,49 @@ This page requires Javascript enabled to display properly :s. <br/> </span> +<!-- +Search bar +--> + <div class="input-group"> - <span class="input-group-addon" id="basic-addon1"><span class="glyphicon glyphicon-search"></span></span> - <input type="text" id="filter-app-cards" class="form-control" placeholder="Search for apps..." aria-describedby="basic-addon1"/> + <span id="basic-addon1" class="input-group-addon" ><span class="glyphicon glyphicon-search"></span></span> + <input id="filter-app-cards" type="text" class="form-control" placeholder="Search for apps..." aria-describedby="basic-addon1"/> <div class="input-group-btn"> <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> - <span id="app-cards-list-filter-text">Only official apps</span> <span class="caret"></span> + <span id="current-quality-filter" data-filter="decent">Only decent quality apps</span> <span class="caret"></span> </button> + <ul class="dropdown-menu"> - <li><a href="#" id="app-cards-list-validated">Only official apps</a></li> - <li><a href="#" id="app-cards-list-working">Only working apps</a></li> - <li><a href="#" id="app-cards-list-working-inprogress">In progress/not working apps</a></li> - <li><a href="#" id="app-cards-list-all-apps">All apps</a></li> + <li><a href="#" data-quality-filter="high">Only high quality apps</a></li> + <li><a href="#" data-quality-filter="decent">Only decent quality apps</a></li> + <li><a href="#" data-quality-filter="working">Only working apps</a></li> + <li><a href="#" data-quality-filter="none">All apps</a></li> </ul> </div> </div> <br /> -<div id="community-app-list-warrant" class="alert alert-danger"> - <p>Only apps tagged <span class="label label-success label-as-badge">validated</span> are officially supported by the package team. </p> - <p>Apps tagged <span class="label label-success label-as-badge">working</span>, <span class="label label-warning label-as-badge">inprogress</span>, <span class="label label-danger label-as-badge">notworking</span> are from community repository, you can test and use them **at your own risk**.</p> +<!-- +Disclaimers +--> - <p>Important: it's the application maintaineur that qualify his application as working, not the YunoHost core team. Install it at your own risks. We won't provide support for it.</p> +<div class="alert alert-info">The application packaging team will welcome your feedback! If you install an app and find issues or possible improvements, do not hesitate to contribute by reporting your issues directly on the code repositories.</div> + +<div id="bad-quality-apps-disclaimer" class="alert alert-warning"> + Applications with a level below or equal to 4 may be working, but they might be not well-integrated with YunoHost, or they do not respect the recommended packaging practices. </div> -<div class="alert alert-info">The packagers will appreciate your remarks. If you install them and find issues, or ideas for improvement, do not hesitate to file issues directly on their repositories project page.</div> -<div class="app-cards-list" id="app-cards-list"></div> +<div id="broken-apps-disclaimer" class="alert alert-danger"> + Applications with level 0, or flagged as <span class="label label-warning label-as-badge">inprogress</span>, <span class="label label-danger label-as-badge">notworking</span> are still in development or are know to not be working. **Do not install them** in a production environment! +</div> -<div class="alert alert-warning">If you don't find the app you are searching for, you can search it in community app repository (working, inprogress and not working apps) or fill the <a href="/apps_wishlist_en">apps wishlist</a>.</div> +<div id="app-cards-list" class="app-cards-list"></div> + +<div class="alert alert-warning">If you don't find the app you are looking for, you can try to look for a appname_ynh repository on Github or on the internet, or add it to the <a href="/apps_wishlist_en">apps wishlist</a>.</div> + +<!-- +Custom CSS for this page +--> <style> /*================================================= @@ -64,6 +79,7 @@ This page requires Javascript enabled to display properly :s. min-height: 1px; margin-right: 10px; margin-left: 10px; + border-radius: 3px; } /*===============================================*/ @@ -75,12 +91,17 @@ This page requires Javascript enabled to display properly :s. margin-bottom:5px; font-size:1.2em; } -.app-card .category { +.app-card .app-badges { height:35px; } -.app-card .category .label, .app-card-date-maintainer { - font-size:0.7em; +.app-card .app-badges .label, .app-card-date-maintainer { + font-size:0.6em; } + +.label-epic { + background-color: darkorchid; +} + .app-card-date-maintainer { text-align:right; max-height: 18px; @@ -108,6 +129,8 @@ This page requires Javascript enabled to display properly :s. } .app-card > .btn-group > .btn{ border-bottom:0; + font-size: 0.9em; + line-height: 1.58; } .app-card > .btn-group > .btn:first-child { border-left:0; @@ -122,12 +145,16 @@ This page requires Javascript enabled to display properly :s. /*===============================================*/ </style> +<!-- +App card template +--> + <script type="text/template" id="app-template2"> - <div class="app-card_{app_id} app-card panel panel-default"> + <div class="app-card_{app_id} app-card panel panel-default" data-quality="{app_quality}"> <div class="panel-body"> <h3>{app_name}</h3> - <div class="category"></div> + <div class="app-badges"></div> <div class="app-card-desc">{app_description}</div> </div> @@ -138,13 +165,18 @@ This page requires Javascript enabled to display properly :s. <div class="btn-group" role="group"> <a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Code</a> <a href="#/app_{app_id}_en" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a> - <a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_bootstrap} col-sm-4 active"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Install</a> + <a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_css_style} col-sm-4 active"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Install</a> </div> </div> </script> +<!-- +Javascript helpers +--> + <script> + function timeConverter(UNIX_timestamp) { var a = new Date(UNIX_timestamp*1000); var months = ['January','February','March','April','May','June','July','August','September','October','November','December']; @@ -159,19 +191,36 @@ function timeConverter(UNIX_timestamp) { return time; } + $(document).ready(function () { - // Hide warrant about community list - $('#community-app-list-warrant').hide(); - var filters = ["validated"]; + + // Hide warrant about states when we're using the default filter + $('#state-disclaimer').hide(); + var quality_filters = "decent"; function filter(){ - var filters_text = filters.map(function(el) { return '.app-' + el;}).join(', '); - var valThis = $('#filter-app-cards').val().toLowerCase(); - $('.app-card').each(function(){ - var text = $(this).find('h3').text().toLowerCase(); - (text.indexOf(valThis) >= 0 && $(this).find(filters_text).length > 0) ? $(this).show() : $(this).hide(); + + var current_quality_filter = $('#current-quality-filter').data("filter"); + var user_input_in_search_field = $('#filter-app-cards').val().toLowerCase(); + + $('.app-card').each(function() { + // This is where we actually define how apps are filtered: + // we look for the name of the app (h3) and try to find the user input + // + we check this app match the current quality filter + var app_name = $(this).find('h3').text().toLowerCase(); + if (app_name.indexOf(user_input_in_search_field) >= 0 && $(this).data("quality").indexOf(current_quality_filter) >= 0) + { + $(this).show(); + } + else + { + $(this).hide(); + } }); - (filters.indexOf("working") == -1) ?$('#community-app-list-warrant').hide():$('#community-app-list-warrant').show(); + + // Display or hide the disclaimers depending on the current filter... + ((current_quality_filter == "working") || (current_quality_filter == "none")) ? $("#bad-quality-apps-disclaimer").show() : $("#bad-quality-apps-disclaimer").hide(); + ((current_quality_filter == "none")) ? $("#broken-apps-disclaimer").show() : $("#broken-apps-disclaimer").hide(); } //================================================= @@ -179,81 +228,87 @@ $(document).ready(function () { //================================================= $('#filter-app-cards').keyup(filter); - $('#app-cards-list-validated').click(function(){ - filters = ["validated"]; - $('#app-cards-list-filter-text').text($('#app-cards-list-validated').text()); + $('a[data-quality-filter]').on("click", function(){ + $('#current-quality-filter').text($(this).text()); + $('#current-quality-filter').data("filter", $(this).data("quality-filter")); filter(); }); - $('#app-cards-list-working').click(function(){ - filters = ["validated", "working"]; - $('#app-cards-list-filter-text').text($('#app-cards-list-working').text()); - filter(); - }); - - $('#app-cards-list-working-inprogress').click(function(){ - filters = ["notworking", "inprogress"]; - $('#app-cards-list-filter-text').text($('#app-cards-list-working-inprogress').text()); - filter(); - }); - - $('#app-cards-list-all-apps').click(function(){ - filters = ["validated", "working", "inprogress", "notworking"]; - $('#app-cards-list-filter-text').text($('#app-cards-list-all-apps').text()); - filter(); - }); - //================================================= - //================================================= // Upload apps lists //================================================= - var app_list={}; - $.when( - $.getJSON('https://app.yunohost.org/community.json', {}, function(community) { - app_list.community = $.map(community, function(el) { return el; }); - }), - $.getJSON('https://app.yunohost.org/official.json', {}, function(official) { - app_list.official = $.map(official, function(el) { return el; }); - }) - ).then(function() { - app_list = app_list.official.concat(app_list.community); + var catalog = undefined; - // Sort alpha - app_list.sort(function(a, b){ - a_state = (a.state == "validated")?4:(a.state == "working")?3:(a.state == "inprogress")?2:1; - b_state = (b.state == "validated")?4:(b.state == "working")?3:(b.state == "inprogress")?2:1; + // Fetch application catalog + + $.getJSON('https://app.yunohost.org/apps.json', {}, function(data) { + + catalog = $.map(data, function(el) { return el; }); + + // Clarify high quality state, and level if undefined or inprogress or notworking... + + $.each(catalog, function(k, infos) { + if ((infos.level === undefined) || (infos.state === "inprogress") || (infos.state === "notworking")) { + infos.level = null; + } + if ((infos.high_quality === true) && (infos.level === 8)) { + infos.state = "high quality"; + } + }); + + // Sort apps according to their state and level... + + catalog.sort(function(a, b){ + a_state = (a.state === "high quality")?4:(a.level > 4)?3:(a.state > 0)?2:1; + b_state = (b.state === "high quality")?4:(b.level > 4)?3:(b.state > 0)?2:1; if (a_state < b_state || a_state == b_state && a.level < b.level || a_state == b_state && a.level == b.level && a.manifest.id > b.manifest.id) {return 1;} else if (a.manifest.id == b.manifest.id) {return 0;} return -1; }); - $.each(app_list, function(k, infos) { + + // Add the card for each app + + $.each(catalog, function(k, infos) { + app_id = infos.manifest.id; - app_install_bootstrap = "success"; - if (infos.state === "validated") { - app_state_bootstrap = "success"; - } else if (infos.state === "working") { - app_state_bootstrap = "success"; - } else if (infos.state === "inprogress") { - app_state_bootstrap = "warning"; - app_install_bootstrap = "danger"; - } else if (infos.state === "notworking") { - app_state_bootstrap = "danger"; - app_install_bootstrap = "danger"; - } - if (infos.level == null ) { - infos.level = '?'; - } - if (infos.level == 0 ) { - app_level_bootstrap = "danger"; - app_install_bootstrap = "danger"; - } else if (infos.level <= 2) { - app_level_bootstrap = "warning"; - app_install_bootstrap = "danger"; - } else if (infos.level >= 7) { - app_level_bootstrap = "success"; + + // Define what style to use for state, level and install button + // according to the app quality .... + + if (infos.state === "high quality") { + app_quality = "high,decent,working,none"; + app_state_css_style = "epic"; + app_install_css_style = "success"; + app_level_css_style = "epic"; + } else if (infos.level > 4) { + app_quality = "decent,working,none"; + app_state_css_style = "success"; + app_install_css_style = "success"; + app_level_css_style = "success"; + } else if (infos.level > 0) { + app_quality = "working,none"; + app_state_css_style = "success"; + app_install_css_style = "warning"; + app_level_css_style = "warning"; } else { - app_level_bootstrap = "default"; + app_quality = "none"; + if (infos.state === "working") { + app_state_css_style = "success"; + } + else if (infos.state === "inprogress") { + app_state_css_style = "warning"; + } + else { + app_state_css_style = "danger"; + } + app_install_css_style = "danger"; + app_level_css_style = "danger"; + } + + // If level is null, we wanna display '?' + if (infos.level == null) { + infos.level = '?'; } // Fill the template @@ -264,10 +319,12 @@ $(document).ready(function () { .replace(/{app_git}/g, infos.git.url) .replace('{app_branch}', infos.git.branch) .replace('{app_level}', infos.level) + .replace('{app_quality}', app_quality) .replace('{app_update}', timeConverter(infos.lastUpdate)) - .replace('{app_state_bootstrap}', app_state_bootstrap) - .replace('{app_install_bootstrap}', app_install_bootstrap); + .replace('{app_state_css_style}', app_state_css_style) + .replace('{app_install_css_style}', app_install_css_style); + // Handle the maintainer info if (infos.maintained == false) { html = html @@ -275,34 +332,34 @@ $(document).ready(function () { .replace('{maintained_icon}', 'warning-sign') .replace('{app_maintainer}', "Unmaintained") .replace('{maintained_help}', "This package is currently unmaintained. Feel free to propose yourself as the new maintainer !"); - } else { - if (infos.manifest.developer) { + } + else { html = html .replace('{maintained_state}', 'maintained') .replace('{maintained_icon}', 'user') - .replace('{app_maintainer}', infos.manifest.developer.name) .replace('{maintained_help}', "Current maintainer of this package"); - } - if (infos.manifest.maintainer) { - html = html - .replace('{maintained_state}', 'maintained') - .replace('{maintained_icon}', 'user') - .replace('{app_maintainer}', infos.manifest.maintainer.name) - .replace('{maintained_help}', "Current maintainer of this package");; - } - } + if ((infos.manifest.developer) && (infos.manifest.developer.name)) { + html = html.replace('{app_maintainer}', infos.manifest.developer.name); + } + else if ((infos.manifest.maintainer) && (infos.manifest.maintainer.name)) { + html = html.replace('{app_maintainer}', infos.manifest.maintainer.name); + } + else { + html = html.replace('{app_maintainer}', "???"); + } + } // Fill the template $('#app-cards-list').append(html); $('.app-card_'+ app_id).attr('id', 'app-card_'+ app_id); - $('.app-card_'+ app_id + ' .category').append(' <span class="label label-'+app_level_bootstrap+' label-as-badge">'+infos.level+'</span>'); - $('.app-card_'+ app_id + ' .category').append(' <span class="label label-'+app_state_bootstrap+' label-as-badge app-'+infos.state+'">'+infos.state+'</span>'); - if (infos.manifest.license && infos.manifest.license != 'free') { - $('.app-card_'+ app_id + ' .category').append(' <span class="label label-default">'+infos.manifest.license+'</span>'); + $('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_state_css_style+' label-as-badge app-'+infos.state+'">'+infos.state+'</span>'); + if ((infos.state === "high quality") || (infos.state === "working")) { + $('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_level_css_style+' label-as-badge">level '+infos.level+'</span>'); } }); + filter(); }); //================================================= From 7f3cd4a3964e9c8e209c309b96f946c24ddadf5e Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Fri, 18 Oct 2019 01:05:14 +0200 Subject: [PATCH 218/360] Have this called the application catalog on landpage --- index.md | 2 +- index_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/index.md b/index.md index 755bf5e4..4742bd5f 100644 --- a/index.md +++ b/index.md @@ -75,7 +75,7 @@ <div class="row cf"> <div class="col-md-7 text-right"> <h1>Install <small>applications to build your little corner of Internet</small></h1> - <p><br /><a href="/apps">Browse available apps</a></p> + <p><br /><a href="/apps">Browse the app catalog</a></p> </div> <div class="col-md-4"> <div class="feature-pic"> diff --git a/index_fr.md b/index_fr.md index e3ea6701..b2cdf980 100644 --- a/index_fr.md +++ b/index_fr.md @@ -72,7 +72,7 @@ <div class="row cf"> <div class="col-md-7 text-right"> <h1>Construisez <small>votre petit bout d'Internet en ajoutant des applications en quelques clics</small></h1> - <p><br /><a href="/apps">Parcourir les applications disponibles</a></p> + <p><br /><a href="/apps">Parcourir le catalogue d'applications</a></p> </div> <div class="col-md-4"> <div class="feature-pic"> From 067180f1e8f887165f6a195e0693f231986c4628 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Mon, 21 Oct 2019 02:13:09 +0200 Subject: [PATCH 219/360] Translate new apps.md to french --- apps.md | 1 + apps_fr.md | 302 +++++++++++++++++++++++++++++++++-------------------- 2 files changed, 188 insertions(+), 115 deletions(-) diff --git a/apps.md b/apps.md index 92bda734..70eff9be 100644 --- a/apps.md +++ b/apps.md @@ -234,6 +234,7 @@ $(document).ready(function () { filter(); }); + filter(); //================================================= // Upload apps lists diff --git a/apps_fr.md b/apps_fr.md index ea2df5b7..88bcd6f4 100644 --- a/apps_fr.md +++ b/apps_fr.md @@ -1,4 +1,4 @@ -# Apps +# Application catalog <span class="javascriptDisclaimer"> Cette page requiert que Javascript soit activé pour s'afficher correctement :s. @@ -6,34 +6,48 @@ Cette page requiert que Javascript soit activé pour s'afficher correctement :s. <br/> </span> +<!-- +Search bar +--> <div class="input-group"> - <span class="input-group-addon" id="basic-addon1"><span class="glyphicon glyphicon-search"></span></span> - <input type="text" id="filter-app-cards" class="form-control" placeholder="Rechercher des apps..." aria-describedby="basic-addon1"/> + <span id="basic-addon1" class="input-group-addon" ><span class="glyphicon glyphicon-search"></span></span> + <input id="filter-app-cards" type="text" class="form-control" placeholder="Rechercher des apps..." aria-describedby="basic-addon1"/> <div class="input-group-btn"> <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> - <span id="app-cards-list-filter-text">Apps officielles seulement</span> <span class="caret"></span> + <span id="current-quality-filter" data-filter="decent">Seulement les apps de qualité décente</span> <span class="caret"></span> </button> + <ul class="dropdown-menu"> - <li><a href="#" id="app-cards-list-validated">Apps officielles seulement</a></li> - <li><a href="#" id="app-cards-list-working">Apps "working" seulement</a></li> - <li><a href="#" id="app-cards-list-working-inprogress">Apps "in progress"/"not working"</a></li> - <li><a href="#" id="app-cards-list-all-apps">Toutes les apps</a></li> + <li><a href="#" data-quality-filter="high">Seulement les apps haute-qualité</a></li> + <li><a href="#" data-quality-filter="decent">Seulement les apps de qualité décente</a></li> + <li><a href="#" data-quality-filter="working">Seulement les apps fonctionelles</a></li> + <li><a href="#" data-quality-filter="none">Toutes les apps</a></li> </ul> </div> </div> <br /> -<div id="community-app-list-warrant" class="alert alert-danger"> - <p>Seules les apps marquées <span class="label label-success label-as-badge">validated</span> sont officiellement supportées par l'équipe de développement d'applications. </p> - <p>Les apps marquées <span class="label label-success label-as-badge">working</span>, <span class="label label-warning label-as-badge">inprogress</span>, <span class="label label-danger label-as-badge">notworking</span> sont des applications non officielles maintenues par la communauté, vous pouvez les tester et les utiliser **à vos risques et périls**.</p> +<!-- +Disclaimers +--> - <p>Important: c'est le mainteneur de l'application qui définit son application comme "working" et non pas l'équipe de développement d'applications de Yunohost. Installez ces apps à vos risques et périls. Nous ne fournissons pas de support pour elles.</p> +<div class="alert alert-info">L'équipe de packaging d'applications sera heureuse de recevoir vos commentaires! Si vous trouvez des problèmes ou des améliorations possibles en installant une app, n'hésitez pas à contribuer en créant un ticket (issue) directement sur le dépôt de code.</div> + +<div id="bad-quality-apps-disclaimer" class="alert alert-warning"> +Les applications avec un niveau inférieur ou égal à 4 peuvent fonctionner, mais ne seront pas forcément bien intégrées avec YunoHost, ou bien ne respectent pas les bonnes pratiques de packaging. </div> -<div class="alert alert-info">Les développeurs d'applications apprécieront vos remarques. Si vous installez leurs apps et trouvez des dysfonctionnement, ou si vous avez des idées d'amélioration, n'hésitez pas à créer des tickets directement sur les pages de dépots des projets.</div> -<div class="app-cards-list" id="app-cards-list"></div> +<div id="broken-apps-disclaimer" class="alert alert-danger"> +Les applications niveau 0, ou étiquettées <span class="label label-warning label-as-badge">inprogress</span>, <span class="label label-danger label-as-badge">notworking</span> sont toujours en cours de packaging ou sont connues pour être cassées. **Ne les installez pas** sur un serveur de production! +</div> -<div class="alert alert-warning">Si vous ne trouvez pas l'application que vous recherchez, vous pouvez la rechercher dans les apps communautaires (working, inprogress et notworking) ou remplir la <a href="/apps_wishlist_fr">liste d'apps souhaitées</a>.</div> +<div id="app-cards-list" class="app-cards-list"></div> + +<div class="alert alert-warning">Si vous ne trouvez pas une application précise que vous recherchez, vous pouvez chercher un dépôt nommé nomdelapp_ynh sur Github ou internet, ou bien l'ajouter à la <a href="/apps_wishlist">liste d'apps souhaitées</a>.</div> + +<!-- +Custom CSS for this page +--> <style> /*================================================= @@ -64,6 +78,7 @@ Cette page requiert que Javascript soit activé pour s'afficher correctement :s. min-height: 1px; margin-right: 10px; margin-left: 10px; + border-radius: 3px; } /*===============================================*/ @@ -75,12 +90,17 @@ Cette page requiert que Javascript soit activé pour s'afficher correctement :s. margin-bottom:5px; font-size:1.2em; } -.app-card .category { +.app-card .app-badges { height:35px; } -.app-card .category .label, .app-card-date-maintainer { - font-size:0.7em; +.app-card .app-badges .label, .app-card-date-maintainer { + font-size:0.6em; } + +.label-epic { + background-color: darkorchid; +} + .app-card-date-maintainer { text-align:right; max-height: 18px; @@ -89,6 +109,10 @@ Cette page requiert que Javascript soit activé pour s'afficher correctement :s. margin-top: -5px; } +.app-card .unmaintained { + color: #e0aa33; +} + .app-card-desc { height:100px; overflow: hidden; @@ -104,8 +128,10 @@ Cette page requiert que Javascript soit activé pour s'afficher correctement :s. } .app-card > .btn-group > .btn{ border-bottom:0; + font-size: 0.9em; + line-height: 1.58; } -.app-card > .btn-group > .btn:first-child { +.app-card > .btn-group > .btn:first-child { border-left:0; border-top-left-radius:0; } @@ -118,30 +144,38 @@ Cette page requiert que Javascript soit activé pour s'afficher correctement :s. /*===============================================*/ </style> +<!-- +App card template +--> + <script type="text/template" id="app-template2"> - <div class="app-card_{app_id} app-card panel panel-default"> + <div class="app-card_{app_id} app-card panel panel-default" data-quality="{app_quality}"> <div class="panel-body"> <h3>{app_name}</h3> - <div class="category"></div> + <div class="app-badges"></div> <div class="app-card-desc">{app_description}</div> </div> - <div class="app-card-date-maintainer"> - <span class="glyphicon glyphicon-refresh"></span> {app_update} - - <span class="glyphicon glyphicon-user"></span> {app_maintainer} + <span class="glyphicon glyphicon-refresh"></span> {app_update} - + <span title="{maintained_help}" class="{maintained_state}"><span class="glyphicon glyphicon-{maintained_icon}"></span> {app_maintainer}</span> </div> <div class="btn-group" role="group"> <a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Code</a> - <a href="#/app_{app_id}_fr" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a> - <a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_bootstrap} col-sm-4 active">Installer</a> + <a href="#/app_{app_id}_en" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a> + <a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_css_style} col-sm-4 active"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Installer</a> </div> - </div> + </div> </script> +<!-- +Javascript helpers +--> + <script> + function timeConverter(UNIX_timestamp) { var a = new Date(UNIX_timestamp*1000); var months = ['January','February','March','April','May','June','July','August','September','October','November','December']; @@ -156,19 +190,36 @@ function timeConverter(UNIX_timestamp) { return time; } + $(document).ready(function () { - // Hide warrant about community list - $('#community-app-list-warrant').hide(); - var filters = ["validated"]; + + // Hide warrant about states when we're using the default filter + $('#state-disclaimer').hide(); + var quality_filters = "decent"; function filter(){ - var filters_text = filters.map(function(el) { return '.app-' + el;}).join(', '); - var valThis = $('#filter-app-cards').val().toLowerCase(); - $('.app-card').each(function(){ - var text = $(this).find('h3').text().toLowerCase(); - (text.indexOf(valThis) >= 0 && $(this).find(filters_text).length > 0) ? $(this).show() : $(this).hide(); + + var current_quality_filter = $('#current-quality-filter').data("filter"); + var user_input_in_search_field = $('#filter-app-cards').val().toLowerCase(); + + $('.app-card').each(function() { + // This is where we actually define how apps are filtered: + // we look for the name of the app (h3) and try to find the user input + // + we check this app match the current quality filter + var app_name = $(this).find('h3').text().toLowerCase(); + if (app_name.indexOf(user_input_in_search_field) >= 0 && $(this).data("quality").indexOf(current_quality_filter) >= 0) + { + $(this).show(); + } + else + { + $(this).hide(); + } }); - (filters.indexOf("working") == -1) ?$('#community-app-list-warrant').hide():$('#community-app-list-warrant').show(); + + // Display or hide the disclaimers depending on the current filter... + ((current_quality_filter == "working") || (current_quality_filter == "none")) ? $("#bad-quality-apps-disclaimer").show() : $("#bad-quality-apps-disclaimer").hide(); + ((current_quality_filter == "none")) ? $("#broken-apps-disclaimer").show() : $("#broken-apps-disclaimer").hide(); } //================================================= @@ -176,81 +227,88 @@ $(document).ready(function () { //================================================= $('#filter-app-cards').keyup(filter); - $('#app-cards-list-validated').click(function(){ - filters = ["validated"]; - $('#app-cards-list-filter-text').text($('#app-cards-list-validated').text()); + $('a[data-quality-filter]').on("click", function(){ + $('#current-quality-filter').text($(this).text()); + $('#current-quality-filter').data("filter", $(this).data("quality-filter")); filter(); }); - - $('#app-cards-list-working').click(function(){ - filters = ["validated", "working"]; - $('#app-cards-list-filter-text').text($('#app-cards-list-working').text()); - filter(); - }); - - $('#app-cards-list-working-inprogress').click(function(){ - filters = ["notworking", "inprogress"]; - $('#app-cards-list-filter-text').text($('#app-cards-list-working-inprogress').text()); - filter(); - }); - - $('#app-cards-list-all-apps').click(function(){ - filters = ["validated", "working", "inprogress", "notworking"]; - $('#app-cards-list-filter-text').text($('#app-cards-list-all-apps').text()); - filter(); - }); - //================================================= - + + filter(); //================================================= // Upload apps lists //================================================= - var app_list={}; - $.when( - $.getJSON('https://app.yunohost.org/community.json', {}, function(community) { - app_list.community = $.map(community, function(el) { return el; }); - }), - $.getJSON('https://app.yunohost.org/official.json', {}, function(official) { - app_list.official = $.map(official, function(el) { return el; }); - }) - ).then(function() { - app_list = app_list.official.concat(app_list.community); - - // Sort alpha - app_list.sort(function(a, b){ - a_state = (a.state == "validated")?4:(a.state == "working")?3:(a.state == "inprogress")?2:1; - b_state = (b.state == "validated")?4:(b.state == "working")?3:(b.state == "inprogress")?2:1; + var catalog = undefined; + + // Fetch application catalog + + $.getJSON('https://app.yunohost.org/apps.json', {}, function(data) { + + catalog = $.map(data, function(el) { return el; }); + + // Clarify high quality state, and level if undefined or inprogress or notworking... + + $.each(catalog, function(k, infos) { + if ((infos.level === undefined) || (infos.state === "inprogress") || (infos.state === "notworking")) { + infos.level = null; + } + if ((infos.high_quality === true) && (infos.level === 8)) { + infos.state = "high quality"; + } + }); + + // Sort apps according to their state and level... + + catalog.sort(function(a, b){ + a_state = (a.state === "high quality")?4:(a.level > 4)?3:(a.state > 0)?2:1; + b_state = (b.state === "high quality")?4:(b.level > 4)?3:(b.state > 0)?2:1; if (a_state < b_state || a_state == b_state && a.level < b.level || a_state == b_state && a.level == b.level && a.manifest.id > b.manifest.id) {return 1;} else if (a.manifest.id == b.manifest.id) {return 0;} return -1; }); - $.each(app_list, function(k, infos) { + + // Add the card for each app + + $.each(catalog, function(k, infos) { + app_id = infos.manifest.id; - app_install_bootstrap = "success"; - if (infos.state === "validated") { - app_state_bootstrap = "success"; - } else if (infos.state === "working") { - app_state_bootstrap = "success"; - } else if (infos.state === "inprogress") { - app_state_bootstrap = "warning"; - app_install_bootstrap = "danger"; - } else if (infos.state === "notworking") { - app_state_bootstrap = "danger"; - app_install_bootstrap = "danger"; - } - if (infos.level == null ) { - infos.level = '?'; - } - if (infos.level == 0 ) { - app_level_bootstrap = "danger"; - app_install_bootstrap = "danger"; - } else if (infos.level <= 2) { - app_level_bootstrap = "warning"; - app_install_bootstrap = "danger"; - } else if (infos.level >= 7) { - app_level_bootstrap = "success"; + + // Define what style to use for state, level and install button + // according to the app quality .... + + if (infos.state === "high quality") { + app_quality = "high,decent,working,none"; + app_state_css_style = "epic"; + app_install_css_style = "success"; + app_level_css_style = "epic"; + } else if (infos.level > 4) { + app_quality = "decent,working,none"; + app_state_css_style = "success"; + app_install_css_style = "success"; + app_level_css_style = "success"; + } else if (infos.level > 0) { + app_quality = "working,none"; + app_state_css_style = "success"; + app_install_css_style = "warning"; + app_level_css_style = "warning"; } else { - app_level_bootstrap = "default"; + app_quality = "none"; + if (infos.state === "working") { + app_state_css_style = "success"; + } + else if (infos.state === "inprogress") { + app_state_css_style = "warning"; + } + else { + app_state_css_style = "danger"; + } + app_install_css_style = "danger"; + app_level_css_style = "danger"; + } + + // If level is null, we wanna display '?' + if (infos.level == null) { + infos.level = '?'; } // Fill the template @@ -261,35 +319,49 @@ $(document).ready(function () { .replace(/{app_git}/g, infos.git.url) .replace('{app_branch}', infos.git.branch) .replace('{app_level}', infos.level) + .replace('{app_quality}', app_quality) .replace('{app_update}', timeConverter(infos.lastUpdate)) - .replace('{app_state_bootstrap}', app_state_bootstrap) - .replace('{app_install_bootstrap}', app_install_bootstrap); + .replace('{app_state_css_style}', app_state_css_style) + .replace('{app_install_css_style}', app_install_css_style); - if (infos.manifest.developer) { - html = html - .replace('{app_maintainer}', infos.manifest.developer.name) - .replace('{app_mail}', infos.manifest.developer.email); + // Handle the maintainer info + if (infos.maintained == false) + { + html = html + .replace('{maintained_state}', 'unmaintained') + .replace('{maintained_icon}', 'warning-sign') + .replace('{app_maintainer}', "Unmaintained") + .replace('{maintained_help}', "This package is currently unmaintained. Feel free to propose yourself as the new maintainer !"); } - - if (infos.manifest.maintainer) { + else { html = html - .replace('{app_maintainer}', infos.manifest.maintainer.name) - .replace('{app_mail}', infos.manifest.maintainer.email); + .replace('{maintained_state}', 'maintained') + .replace('{maintained_icon}', 'user') + .replace('{maintained_help}', "Current maintainer of this package"); + + if ((infos.manifest.developer) && (infos.manifest.developer.name)) { + html = html.replace('{app_maintainer}', infos.manifest.developer.name); + } + else if ((infos.manifest.maintainer) && (infos.manifest.maintainer.name)) { + html = html.replace('{app_maintainer}', infos.manifest.maintainer.name); + } + else { + html = html.replace('{app_maintainer}', "???"); + } } // Fill the template $('#app-cards-list').append(html); $('.app-card_'+ app_id).attr('id', 'app-card_'+ app_id); - $('.app-card_'+ app_id + ' .category').append(' <span class="label label-'+app_level_bootstrap+' label-as-badge">'+infos.level+'</span>'); - $('.app-card_'+ app_id + ' .category').append(' <span class="label label-'+app_state_bootstrap+' label-as-badge app-'+infos.state+'">'+infos.state+'</span>'); - if (infos.manifest.license && infos.manifest.license != 'free') { - $('.app-card_'+ app_id + ' .category').append(' <span class="label label-default">'+infos.manifest.license+'</span>'); + $('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_state_css_style+' label-as-badge app-'+infos.state+'">'+infos.state+'</span>'); + if ((infos.state === "high quality") || (infos.state === "working")) { + $('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_level_css_style+' label-as-badge">niveau '+infos.level+'</span>'); } }); + filter(); }); - //================================================= + //================================================= }); </script> - From d96ae0c98ec32b5d4775a331644f087d6c34e1bb Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Mon, 21 Oct 2019 02:25:49 +0200 Subject: [PATCH 220/360] Brutally replace other translations with en version... --- apps_ar.md | 311 +++++++++++++++++++++++++++++++++-------------------- apps_es.md | 305 +++++++++++++++++++++++++++++++-------------------- apps_it.md | 288 +++++++++++++++++++++++++++++-------------------- 3 files changed, 554 insertions(+), 350 deletions(-) diff --git a/apps_ar.md b/apps_ar.md index d3b929bd..70eff9be 100644 --- a/apps_ar.md +++ b/apps_ar.md @@ -1,4 +1,4 @@ -# <div dir="rtl">التطبيقات</div> +# Application catalog <span class="javascriptDisclaimer"> This page requires Javascript enabled to display properly :s. @@ -6,34 +6,49 @@ This page requires Javascript enabled to display properly :s. <br/> </span> -<div dir="rtl" class="input-group"> - <span class="input-group-addon" id="basic-addon1"><span class="glyphicon glyphicon-search"></span></span> - <input type="text" id="filter-app-cards" class="form-control" placeholder="البحث عن تطبيقات ..." aria-describedby="basic-addon1"/> - <div dir="rtl" class="input-group-btn"> +<!-- +Search bar +--> + +<div class="input-group"> + <span id="basic-addon1" class="input-group-addon" ><span class="glyphicon glyphicon-search"></span></span> + <input id="filter-app-cards" type="text" class="form-control" placeholder="Search for apps..." aria-describedby="basic-addon1"/> + <div class="input-group-btn"> <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> - <span id="app-cards-list-filter-text">التطبيقات الرسمية فقط</span> <span class="caret"></span> + <span id="current-quality-filter" data-filter="decent">Only decent quality apps</span> <span class="caret"></span> </button> + <ul class="dropdown-menu"> - <li><a href="#" id="app-cards-list-validated">التطبيقات الرسمية فقط</a></li> - <li><a href="#" id="app-cards-list-working">التطبيقات "التي تعمل" فقط</a></li> - <li><a href="#" id="app-cards-list-working-inprogress">التطبيقات "الجاري العمل عليها"/"و التي لاتعمل"</a></li> - <li><a href="#" id="app-cards-list-all-apps">كافة التطبيقات</a></li> + <li><a href="#" data-quality-filter="high">Only high quality apps</a></li> + <li><a href="#" data-quality-filter="decent">Only decent quality apps</a></li> + <li><a href="#" data-quality-filter="working">Only working apps</a></li> + <li><a href="#" data-quality-filter="none">All apps</a></li> </ul> </div> </div> <br /> -<div dir="rtl" id="community-app-list-warrant" class="alert alert-danger"> - <p>إلّا التطبيقات المحددة بعلامة <span class="label label-success label-as-badge">validated</span> تعتبر مدعومة رسميا من طرف فريق التحزيم. </p> - <p>Les apps marquées <span class="label label-success label-as-badge">working</span>, <span class="label label-warning label-as-badge">inprogress</span>, <span class="label label-danger label-as-badge">notworking</span> sont des applications non officielles maintenues par la communauté, vous pouvez les tester et les utiliser **à vos risques et périls**.</p> +<!-- +Disclaimers +--> - <p>Important: c'est le mainteneur de l'application qui définit son application comme "working" et non pas l'équipe d'empaquetage de Yunohost. Installez ces apps à vos risques et périls. Nous ne fournissons pas de support pour elles.</p> +<div class="alert alert-info">The application packaging team will welcome your feedback! If you install an app and find issues or possible improvements, do not hesitate to contribute by reporting your issues directly on the code repositories.</div> + +<div id="bad-quality-apps-disclaimer" class="alert alert-warning"> + Applications with a level below or equal to 4 may be working, but they might be not well-integrated with YunoHost, or they do not respect the recommended packaging practices. </div> -<div dir="rtl"class="alert alert-info">إنّ فريق التحزيم سوف يأخذ بعين الإعتبار ملاحظاتكم. مثال، إن قمتم بتنصيب تطبيقاتهم و عارضتكم مشاكل أو إن كلمة عندكم أفكارا لتحسين التطبيقات، فلا تبخلوا التحو تذكرة مباشرة على صفحات مستودعات المشاريع نفسها</div> -<div class="app-cards-list" id="app-cards-list"></div> +<div id="broken-apps-disclaimer" class="alert alert-danger"> + Applications with level 0, or flagged as <span class="label label-warning label-as-badge">inprogress</span>, <span class="label label-danger label-as-badge">notworking</span> are still in development or are know to not be working. **Do not install them** in a production environment! +</div> -<div dir="rtl" class="alert alert-warning">إن لم تتمكنوا من العثور على التطبيق الذي تبحثون عنه هنا، يمكنكم البحث كذلك في مستودع تطبيقات المجتمع (التي تعمل، الجاري العمل عليها و التي لا تعمل) أو قوموا بإضافتها إلى <a href="/apps_wishlist_fr">قائمة التطبيقات المرغوب فيها</a>.</div> +<div id="app-cards-list" class="app-cards-list"></div> + +<div class="alert alert-warning">If you don't find the app you are looking for, you can try to look for a appname_ynh repository on Github or on the internet, or add it to the <a href="/apps_wishlist_en">apps wishlist</a>.</div> + +<!-- +Custom CSS for this page +--> <style> /*================================================= @@ -64,6 +79,7 @@ This page requires Javascript enabled to display properly :s. min-height: 1px; margin-right: 10px; margin-left: 10px; + border-radius: 3px; } /*===============================================*/ @@ -75,12 +91,17 @@ This page requires Javascript enabled to display properly :s. margin-bottom:5px; font-size:1.2em; } -.app-card .category { +.app-card .app-badges { height:35px; } -.app-card .category .label, .app-card-date-maintainer { - font-size:0.7em; +.app-card .app-badges .label, .app-card-date-maintainer { + font-size:0.6em; } + +.label-epic { + background-color: darkorchid; +} + .app-card-date-maintainer { text-align:right; max-height: 18px; @@ -89,6 +110,10 @@ This page requires Javascript enabled to display properly :s. margin-top: -5px; } +.app-card .unmaintained { + color: #e0aa33; +} + .app-card-desc { height:100px; overflow: hidden; @@ -104,8 +129,10 @@ This page requires Javascript enabled to display properly :s. } .app-card > .btn-group > .btn{ border-bottom:0; + font-size: 0.9em; + line-height: 1.58; } -.app-card > .btn-group > .btn:first-child { +.app-card > .btn-group > .btn:first-child { border-left:0; border-top-left-radius:0; } @@ -118,33 +145,41 @@ This page requires Javascript enabled to display properly :s. /*===============================================*/ </style> +<!-- +App card template +--> + <script type="text/template" id="app-template2"> - <div class="app-card_{app_id} app-card panel panel-default"> + <div class="app-card_{app_id} app-card panel panel-default" data-quality="{app_quality}"> <div class="panel-body"> <h3>{app_name}</h3> - <div class="category"></div> + <div class="app-badges"></div> <div class="app-card-desc">{app_description}</div> </div> - <div class="app-card-date-maintainer"> - <span class="glyphicon glyphicon-refresh"></span> {app_update} - - <span class="glyphicon glyphicon-user"></span> {app_maintainer} + <span class="glyphicon glyphicon-refresh"></span> {app_update} - + <span title="{maintained_help}" class="{maintained_state}"><span class="glyphicon glyphicon-{maintained_icon}"></span> {app_maintainer}</span> </div> <div class="btn-group" role="group"> - <a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> الشفرة</a> - <a href="#/app_{app_id}_fr" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> الدليل</a> - <a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_bootstrap} col-sm-4 active">تنصيب</a> + <a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Code</a> + <a href="#/app_{app_id}_en" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a> + <a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_css_style} col-sm-4 active"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Install</a> </div> - </div> + </div> </script> +<!-- +Javascript helpers +--> + <script> + function timeConverter(UNIX_timestamp) { var a = new Date(UNIX_timestamp*1000); - var months = ['جانفي','فيفري','مارس','أفريل','ماي','جوان','جويلية','أوت','سبتمبر','أكتوبر','نوفمبر','ديسمبر']; + var months = ['January','February','March','April','May','June','July','August','September','October','November','December']; var year = a.getFullYear(); var month = months[a.getMonth()]; var date = a.getDate(); @@ -156,19 +191,36 @@ function timeConverter(UNIX_timestamp) { return time; } + $(document).ready(function () { - // Hide warrant about community list - $('#community-app-list-warrant').hide(); - var filters = ["validated"]; + + // Hide warrant about states when we're using the default filter + $('#state-disclaimer').hide(); + var quality_filters = "decent"; function filter(){ - var filters_text = filters.map(function(el) { return '.app-' + el;}).join(', '); - var valThis = $('#filter-app-cards').val().toLowerCase(); - $('.app-card').each(function(){ - var text = $(this).find('h3').text().toLowerCase(); - (text.indexOf(valThis) >= 0 && $(this).find(filters_text).length > 0) ? $(this).show() : $(this).hide(); + + var current_quality_filter = $('#current-quality-filter').data("filter"); + var user_input_in_search_field = $('#filter-app-cards').val().toLowerCase(); + + $('.app-card').each(function() { + // This is where we actually define how apps are filtered: + // we look for the name of the app (h3) and try to find the user input + // + we check this app match the current quality filter + var app_name = $(this).find('h3').text().toLowerCase(); + if (app_name.indexOf(user_input_in_search_field) >= 0 && $(this).data("quality").indexOf(current_quality_filter) >= 0) + { + $(this).show(); + } + else + { + $(this).hide(); + } }); - (filters.indexOf("working") == -1) ?$('#community-app-list-warrant').hide():$('#community-app-list-warrant').show(); + + // Display or hide the disclaimers depending on the current filter... + ((current_quality_filter == "working") || (current_quality_filter == "none")) ? $("#bad-quality-apps-disclaimer").show() : $("#bad-quality-apps-disclaimer").hide(); + ((current_quality_filter == "none")) ? $("#broken-apps-disclaimer").show() : $("#broken-apps-disclaimer").hide(); } //================================================= @@ -176,120 +228,141 @@ $(document).ready(function () { //================================================= $('#filter-app-cards').keyup(filter); - $('#app-cards-list-validated').click(function(){ - filters = ["validated"]; - $('#app-cards-list-filter-text').text($('#app-cards-list-validated').text()); + $('a[data-quality-filter]').on("click", function(){ + $('#current-quality-filter').text($(this).text()); + $('#current-quality-filter').data("filter", $(this).data("quality-filter")); filter(); }); - $('#app-cards-list-working').click(function(){ - filters = ["validated", "working"]; - $('#app-cards-list-filter-text').text($('#app-cards-list-working').text()); - filter(); - }); - - $('#app-cards-list-working-inprogress').click(function(){ - filters = ["notworking", "inprogress"]; - $('#app-cards-list-filter-text').text($('#app-cards-list-working-inprogress').text()); - filter(); - }); - - $('#app-cards-list-all-apps').click(function(){ - filters = ["validated", "working", "inprogress", "notworking"]; - $('#app-cards-list-filter-text').text($('#app-cards-list-all-apps').text()); - filter(); - }); - //================================================= - + filter(); //================================================= // Upload apps lists //================================================= - var app_list={}; - $.when( - $.getJSON('https://app.yunohost.org/community.json', {}, function(community) { - app_list.community = $.map(community, function(el) { return el; }); - }), - $.getJSON('https://app.yunohost.org/official.json', {}, function(official) { - app_list.official = $.map(official, function(el) { return el; }); - }) - ).then(function() { - app_list = app_list.official.concat(app_list.community); - - // Sort alpha - app_list.sort(function(a, b){ - a_state = (a.state == "validated")?4:(a.state == "working")?3:(a.state == "inprogress")?2:1; - b_state = (b.state == "validated")?4:(b.state == "working")?3:(b.state == "inprogress")?2:1; + var catalog = undefined; + + // Fetch application catalog + + $.getJSON('https://app.yunohost.org/apps.json', {}, function(data) { + + catalog = $.map(data, function(el) { return el; }); + + // Clarify high quality state, and level if undefined or inprogress or notworking... + + $.each(catalog, function(k, infos) { + if ((infos.level === undefined) || (infos.state === "inprogress") || (infos.state === "notworking")) { + infos.level = null; + } + if ((infos.high_quality === true) && (infos.level === 8)) { + infos.state = "high quality"; + } + }); + + // Sort apps according to their state and level... + + catalog.sort(function(a, b){ + a_state = (a.state === "high quality")?4:(a.level > 4)?3:(a.state > 0)?2:1; + b_state = (b.state === "high quality")?4:(b.level > 4)?3:(b.state > 0)?2:1; if (a_state < b_state || a_state == b_state && a.level < b.level || a_state == b_state && a.level == b.level && a.manifest.id > b.manifest.id) {return 1;} else if (a.manifest.id == b.manifest.id) {return 0;} return -1; }); - $.each(app_list, function(k, infos) { + + // Add the card for each app + + $.each(catalog, function(k, infos) { + app_id = infos.manifest.id; - app_install_bootstrap = "success"; - if (infos.state === "validated") { - app_state_bootstrap = "success"; - } else if (infos.state === "working") { - app_state_bootstrap = "success"; - } else if (infos.state === "inprogress") { - app_state_bootstrap = "warning"; - app_install_bootstrap = "danger"; - } else if (infos.state === "notworking") { - app_state_bootstrap = "danger"; - app_install_bootstrap = "danger"; - } - if (infos.level == null ) { - infos.level = '?'; - } - if (infos.level == 0 ) { - app_level_bootstrap = "danger"; - app_install_bootstrap = "danger"; - } else if (infos.level <= 2) { - app_level_bootstrap = "warning"; - app_install_bootstrap = "danger"; - } else if (infos.level >= 7) { - app_level_bootstrap = "success"; + + // Define what style to use for state, level and install button + // according to the app quality .... + + if (infos.state === "high quality") { + app_quality = "high,decent,working,none"; + app_state_css_style = "epic"; + app_install_css_style = "success"; + app_level_css_style = "epic"; + } else if (infos.level > 4) { + app_quality = "decent,working,none"; + app_state_css_style = "success"; + app_install_css_style = "success"; + app_level_css_style = "success"; + } else if (infos.level > 0) { + app_quality = "working,none"; + app_state_css_style = "success"; + app_install_css_style = "warning"; + app_level_css_style = "warning"; } else { - app_level_bootstrap = "default"; + app_quality = "none"; + if (infos.state === "working") { + app_state_css_style = "success"; + } + else if (infos.state === "inprogress") { + app_state_css_style = "warning"; + } + else { + app_state_css_style = "danger"; + } + app_install_css_style = "danger"; + app_level_css_style = "danger"; + } + + // If level is null, we wanna display '?' + if (infos.level == null) { + infos.level = '?'; } // Fill the template html = $('#app-template2').html() .replace(/{app_id}/g, app_id) .replace(/{app_name}/g, infos.manifest.name) - .replace('{app_description}', infos.manifest.description.fr) + .replace('{app_description}', infos.manifest.description.en) .replace(/{app_git}/g, infos.git.url) .replace('{app_branch}', infos.git.branch) .replace('{app_level}', infos.level) + .replace('{app_quality}', app_quality) .replace('{app_update}', timeConverter(infos.lastUpdate)) - .replace('{app_state_bootstrap}', app_state_bootstrap) - .replace('{app_install_bootstrap}', app_install_bootstrap); + .replace('{app_state_css_style}', app_state_css_style) + .replace('{app_install_css_style}', app_install_css_style); - if (infos.manifest.developer) { - html = html - .replace('{app_maintainer}', infos.manifest.developer.name) - .replace('{app_mail}', infos.manifest.developer.email); + // Handle the maintainer info + if (infos.maintained == false) + { + html = html + .replace('{maintained_state}', 'unmaintained') + .replace('{maintained_icon}', 'warning-sign') + .replace('{app_maintainer}', "Unmaintained") + .replace('{maintained_help}', "This package is currently unmaintained. Feel free to propose yourself as the new maintainer !"); } - - if (infos.manifest.maintainer) { + else { html = html - .replace('{app_maintainer}', infos.manifest.maintainer.name) - .replace('{app_mail}', infos.manifest.maintainer.email); + .replace('{maintained_state}', 'maintained') + .replace('{maintained_icon}', 'user') + .replace('{maintained_help}', "Current maintainer of this package"); + + if ((infos.manifest.developer) && (infos.manifest.developer.name)) { + html = html.replace('{app_maintainer}', infos.manifest.developer.name); + } + else if ((infos.manifest.maintainer) && (infos.manifest.maintainer.name)) { + html = html.replace('{app_maintainer}', infos.manifest.maintainer.name); + } + else { + html = html.replace('{app_maintainer}', "???"); + } } // Fill the template $('#app-cards-list').append(html); $('.app-card_'+ app_id).attr('id', 'app-card_'+ app_id); - $('.app-card_'+ app_id + ' .category').append(' <span class="label label-'+app_level_bootstrap+' label-as-badge">'+infos.level+'</span>'); - $('.app-card_'+ app_id + ' .category').append(' <span class="label label-'+app_state_bootstrap+' label-as-badge app-'+infos.state+'">'+infos.state+'</span>'); - if (infos.manifest.license && infos.manifest.license != 'free') { - $('.app-card_'+ app_id + ' .category').append(' <span class="label label-default">'+infos.manifest.license+'</span>'); + $('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_state_css_style+' label-as-badge app-'+infos.state+'">'+infos.state+'</span>'); + if ((infos.state === "high quality") || (infos.state === "working")) { + $('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_level_css_style+' label-as-badge">level '+infos.level+'</span>'); } }); + filter(); }); - //================================================= + //================================================= }); </script> - diff --git a/apps_es.md b/apps_es.md index 99398de4..70eff9be 100644 --- a/apps_es.md +++ b/apps_es.md @@ -1,39 +1,54 @@ -# Apps +# Application catalog <span class="javascriptDisclaimer"> -Esta página requiere que Javascript esté activado para aparecer correctamente :s. +This page requires Javascript enabled to display properly :s. <br/> <br/> </span> +<!-- +Search bar +--> + <div class="input-group"> - <span class="input-group-addon" id="basic-addon1"><span class="glyphicon glyphicon-search"></span></span> - <input type="text" id="filter-app-cards" class="form-control" placeholder="Rechercher des apps..." aria-describedby="basic-addon1"/> + <span id="basic-addon1" class="input-group-addon" ><span class="glyphicon glyphicon-search"></span></span> + <input id="filter-app-cards" type="text" class="form-control" placeholder="Search for apps..." aria-describedby="basic-addon1"/> <div class="input-group-btn"> <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> - <span id="app-cards-list-filter-text">Apps oficiales únicamente</span> <span class="caret"></span> + <span id="current-quality-filter" data-filter="decent">Only decent quality apps</span> <span class="caret"></span> </button> + <ul class="dropdown-menu"> - <li><a href="#" id="app-cards-list-validated">Apps oficiales únicamente</a></li> - <li><a href="#" id="app-cards-list-working">Apps "working" únicamente</a></li> - <li><a href="#" id="app-cards-list-working-inprogress">Apps "in progress"/"not working"</a></li> - <li><a href="#" id="app-cards-list-all-apps">Todas las apps</a></li> + <li><a href="#" data-quality-filter="high">Only high quality apps</a></li> + <li><a href="#" data-quality-filter="decent">Only decent quality apps</a></li> + <li><a href="#" data-quality-filter="working">Only working apps</a></li> + <li><a href="#" data-quality-filter="none">All apps</a></li> </ul> </div> </div> <br /> -<div id="community-app-list-warrant" class="alert alert-danger"> - <p>Sólo las apps señaladas <span class="label label-success label-as-badge">validated</span> están oficialmente soportadas por el equipo de desarrollo de aplicaciones. </p> - <p>Las apps señaladas <span class="label label-success label-as-badge">working</span>, <span class="label label-warning label-as-badge">inprogress</span>, <span class="label label-danger label-as-badge">notworking</span> son aplicaciones que son oficiales, mantenidas por la comunidad, puedes testarlas y utilizarlas **por tu cuenta y riesgo**.</p> +<!-- +Disclaimers +--> - <p>Importante: son los que mantienen la aplicación quienes definen su propia aplicación cómo "working", no es el equipo de desarrollo de aplicaciones de Yunohost. Instala estas aplicaciones por tu cuenta y riesgo. No proponemos servicios de soporte para ellas.</p> +<div class="alert alert-info">The application packaging team will welcome your feedback! If you install an app and find issues or possible improvements, do not hesitate to contribute by reporting your issues directly on the code repositories.</div> + +<div id="bad-quality-apps-disclaimer" class="alert alert-warning"> + Applications with a level below or equal to 4 may be working, but they might be not well-integrated with YunoHost, or they do not respect the recommended packaging practices. </div> -<div class="alert alert-info">Los desarrolladores de aplicaciones te agradecerán tu comentarios. Si instalas sus apps y encuentras fallos, o si tienes ideas para mejorarlas, no dudes en crear tickets direactement en las páginas de depósitos de los proyectos.</div> -<div class="app-cards-list" id="app-cards-list"></div> +<div id="broken-apps-disclaimer" class="alert alert-danger"> + Applications with level 0, or flagged as <span class="label label-warning label-as-badge">inprogress</span>, <span class="label label-danger label-as-badge">notworking</span> are still in development or are know to not be working. **Do not install them** in a production environment! +</div> -<div class="alert alert-warning">Si no encuentras la aplicación que buscas, puedes buscarla en las aplicaciones comunitarias (working, inprogress y networking) o llenar la <a href="/apps_wishlist_en">lista de apps deseadas</a>.</div> +<div id="app-cards-list" class="app-cards-list"></div> + +<div class="alert alert-warning">If you don't find the app you are looking for, you can try to look for a appname_ynh repository on Github or on the internet, or add it to the <a href="/apps_wishlist_en">apps wishlist</a>.</div> + +<!-- +Custom CSS for this page +--> <style> /*================================================= @@ -64,6 +79,7 @@ Esta página requiere que Javascript esté activado para aparecer correctamente min-height: 1px; margin-right: 10px; margin-left: 10px; + border-radius: 3px; } /*===============================================*/ @@ -75,12 +91,17 @@ Esta página requiere que Javascript esté activado para aparecer correctamente margin-bottom:5px; font-size:1.2em; } -.app-card .category { +.app-card .app-badges { height:35px; } -.app-card .category .label, .app-card-date-maintainer { - font-size:0.7em; +.app-card .app-badges .label, .app-card-date-maintainer { + font-size:0.6em; } + +.label-epic { + background-color: darkorchid; +} + .app-card-date-maintainer { text-align:right; max-height: 18px; @@ -89,6 +110,10 @@ Esta página requiere que Javascript esté activado para aparecer correctamente margin-top: -5px; } +.app-card .unmaintained { + color: #e0aa33; +} + .app-card-desc { height:100px; overflow: hidden; @@ -104,8 +129,10 @@ Esta página requiere que Javascript esté activado para aparecer correctamente } .app-card > .btn-group > .btn{ border-bottom:0; + font-size: 0.9em; + line-height: 1.58; } -.app-card > .btn-group > .btn:first-child { +.app-card > .btn-group > .btn:first-child { border-left:0; border-top-left-radius:0; } @@ -118,30 +145,38 @@ Esta página requiere que Javascript esté activado para aparecer correctamente /*===============================================*/ </style> +<!-- +App card template +--> + <script type="text/template" id="app-template2"> - <div class="app-card_{app_id} app-card panel panel-default"> + <div class="app-card_{app_id} app-card panel panel-default" data-quality="{app_quality}"> <div class="panel-body"> <h3>{app_name}</h3> - <div class="category"></div> + <div class="app-badges"></div> <div class="app-card-desc">{app_description}</div> </div> - <div class="app-card-date-maintainer"> - <span class="glyphicon glyphicon-refresh"></span> {app_update} - - <span class="glyphicon glyphicon-user"></span> {app_maintainer} + <span class="glyphicon glyphicon-refresh"></span> {app_update} - + <span title="{maintained_help}" class="{maintained_state}"><span class="glyphicon glyphicon-{maintained_icon}"></span> {app_maintainer}</span> </div> <div class="btn-group" role="group"> <a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Code</a> - <a href="#/app_{app_id}_fr" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a> - <a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_bootstrap} col-sm-4 active">Installer</a> + <a href="#/app_{app_id}_en" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a> + <a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_css_style} col-sm-4 active"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Install</a> </div> - </div> + </div> </script> +<!-- +Javascript helpers +--> + <script> + function timeConverter(UNIX_timestamp) { var a = new Date(UNIX_timestamp*1000); var months = ['January','February','March','April','May','June','July','August','September','October','November','December']; @@ -156,19 +191,36 @@ function timeConverter(UNIX_timestamp) { return time; } + $(document).ready(function () { - // Hide warrant about community list - $('#community-app-list-warrant').hide(); - var filters = ["validated"]; + + // Hide warrant about states when we're using the default filter + $('#state-disclaimer').hide(); + var quality_filters = "decent"; function filter(){ - var filters_text = filters.map(function(el) { return '.app-' + el;}).join(', '); - var valThis = $('#filter-app-cards').val().toLowerCase(); - $('.app-card').each(function(){ - var text = $(this).find('h3').text().toLowerCase(); - (text.indexOf(valThis) >= 0 && $(this).find(filters_text).length > 0) ? $(this).show() : $(this).hide(); + + var current_quality_filter = $('#current-quality-filter').data("filter"); + var user_input_in_search_field = $('#filter-app-cards').val().toLowerCase(); + + $('.app-card').each(function() { + // This is where we actually define how apps are filtered: + // we look for the name of the app (h3) and try to find the user input + // + we check this app match the current quality filter + var app_name = $(this).find('h3').text().toLowerCase(); + if (app_name.indexOf(user_input_in_search_field) >= 0 && $(this).data("quality").indexOf(current_quality_filter) >= 0) + { + $(this).show(); + } + else + { + $(this).hide(); + } }); - (filters.indexOf("working") == -1) ?$('#community-app-list-warrant').hide():$('#community-app-list-warrant').show(); + + // Display or hide the disclaimers depending on the current filter... + ((current_quality_filter == "working") || (current_quality_filter == "none")) ? $("#bad-quality-apps-disclaimer").show() : $("#bad-quality-apps-disclaimer").hide(); + ((current_quality_filter == "none")) ? $("#broken-apps-disclaimer").show() : $("#broken-apps-disclaimer").hide(); } //================================================= @@ -176,120 +228,141 @@ $(document).ready(function () { //================================================= $('#filter-app-cards').keyup(filter); - $('#app-cards-list-validated').click(function(){ - filters = ["validated"]; - $('#app-cards-list-filter-text').text($('#app-cards-list-validated').text()); + $('a[data-quality-filter]').on("click", function(){ + $('#current-quality-filter').text($(this).text()); + $('#current-quality-filter').data("filter", $(this).data("quality-filter")); filter(); }); - $('#app-cards-list-working').click(function(){ - filters = ["validated", "working"]; - $('#app-cards-list-filter-text').text($('#app-cards-list-working').text()); - filter(); - }); - - $('#app-cards-list-working-inprogress').click(function(){ - filters = ["notworking", "inprogress"]; - $('#app-cards-list-filter-text').text($('#app-cards-list-working-inprogress').text()); - filter(); - }); - - $('#app-cards-list-all-apps').click(function(){ - filters = ["validated", "working", "inprogress", "notworking"]; - $('#app-cards-list-filter-text').text($('#app-cards-list-all-apps').text()); - filter(); - }); - //================================================= - + filter(); //================================================= // Upload apps lists //================================================= - var app_list={}; - $.when( - $.getJSON('https://app.yunohost.org/community.json', {}, function(community) { - app_list.community = $.map(community, function(el) { return el; }); - }), - $.getJSON('https://app.yunohost.org/official.json', {}, function(official) { - app_list.official = $.map(official, function(el) { return el; }); - }) - ).then(function() { - app_list = app_list.official.concat(app_list.community); - - // Sort alpha - app_list.sort(function(a, b){ - a_state = (a.state == "validated")?4:(a.state == "working")?3:(a.state == "inprogress")?2:1; - b_state = (b.state == "validated")?4:(b.state == "working")?3:(b.state == "inprogress")?2:1; + var catalog = undefined; + + // Fetch application catalog + + $.getJSON('https://app.yunohost.org/apps.json', {}, function(data) { + + catalog = $.map(data, function(el) { return el; }); + + // Clarify high quality state, and level if undefined or inprogress or notworking... + + $.each(catalog, function(k, infos) { + if ((infos.level === undefined) || (infos.state === "inprogress") || (infos.state === "notworking")) { + infos.level = null; + } + if ((infos.high_quality === true) && (infos.level === 8)) { + infos.state = "high quality"; + } + }); + + // Sort apps according to their state and level... + + catalog.sort(function(a, b){ + a_state = (a.state === "high quality")?4:(a.level > 4)?3:(a.state > 0)?2:1; + b_state = (b.state === "high quality")?4:(b.level > 4)?3:(b.state > 0)?2:1; if (a_state < b_state || a_state == b_state && a.level < b.level || a_state == b_state && a.level == b.level && a.manifest.id > b.manifest.id) {return 1;} else if (a.manifest.id == b.manifest.id) {return 0;} return -1; }); - $.each(app_list, function(k, infos) { + + // Add the card for each app + + $.each(catalog, function(k, infos) { + app_id = infos.manifest.id; - app_install_bootstrap = "success"; - if (infos.state === "validated") { - app_state_bootstrap = "success"; - } else if (infos.state === "working") { - app_state_bootstrap = "success"; - } else if (infos.state === "inprogress") { - app_state_bootstrap = "warning"; - app_install_bootstrap = "danger"; - } else if (infos.state === "notworking") { - app_state_bootstrap = "danger"; - app_install_bootstrap = "danger"; - } - if (infos.level == null ) { - infos.level = '?'; - } - if (infos.level == 0 ) { - app_level_bootstrap = "danger"; - app_install_bootstrap = "danger"; - } else if (infos.level <= 2) { - app_level_bootstrap = "warning"; - app_install_bootstrap = "danger"; - } else if (infos.level >= 7) { - app_level_bootstrap = "success"; + + // Define what style to use for state, level and install button + // according to the app quality .... + + if (infos.state === "high quality") { + app_quality = "high,decent,working,none"; + app_state_css_style = "epic"; + app_install_css_style = "success"; + app_level_css_style = "epic"; + } else if (infos.level > 4) { + app_quality = "decent,working,none"; + app_state_css_style = "success"; + app_install_css_style = "success"; + app_level_css_style = "success"; + } else if (infos.level > 0) { + app_quality = "working,none"; + app_state_css_style = "success"; + app_install_css_style = "warning"; + app_level_css_style = "warning"; } else { - app_level_bootstrap = "default"; + app_quality = "none"; + if (infos.state === "working") { + app_state_css_style = "success"; + } + else if (infos.state === "inprogress") { + app_state_css_style = "warning"; + } + else { + app_state_css_style = "danger"; + } + app_install_css_style = "danger"; + app_level_css_style = "danger"; + } + + // If level is null, we wanna display '?' + if (infos.level == null) { + infos.level = '?'; } // Fill the template html = $('#app-template2').html() .replace(/{app_id}/g, app_id) .replace(/{app_name}/g, infos.manifest.name) - .replace('{app_description}', infos.manifest.description.fr) + .replace('{app_description}', infos.manifest.description.en) .replace(/{app_git}/g, infos.git.url) .replace('{app_branch}', infos.git.branch) .replace('{app_level}', infos.level) + .replace('{app_quality}', app_quality) .replace('{app_update}', timeConverter(infos.lastUpdate)) - .replace('{app_state_bootstrap}', app_state_bootstrap) - .replace('{app_install_bootstrap}', app_install_bootstrap); + .replace('{app_state_css_style}', app_state_css_style) + .replace('{app_install_css_style}', app_install_css_style); - if (infos.manifest.developer) { - html = html - .replace('{app_maintainer}', infos.manifest.developer.name) - .replace('{app_mail}', infos.manifest.developer.email); + // Handle the maintainer info + if (infos.maintained == false) + { + html = html + .replace('{maintained_state}', 'unmaintained') + .replace('{maintained_icon}', 'warning-sign') + .replace('{app_maintainer}', "Unmaintained") + .replace('{maintained_help}', "This package is currently unmaintained. Feel free to propose yourself as the new maintainer !"); } - - if (infos.manifest.maintainer) { + else { html = html - .replace('{app_maintainer}', infos.manifest.maintainer.name) - .replace('{app_mail}', infos.manifest.maintainer.email); + .replace('{maintained_state}', 'maintained') + .replace('{maintained_icon}', 'user') + .replace('{maintained_help}', "Current maintainer of this package"); + + if ((infos.manifest.developer) && (infos.manifest.developer.name)) { + html = html.replace('{app_maintainer}', infos.manifest.developer.name); + } + else if ((infos.manifest.maintainer) && (infos.manifest.maintainer.name)) { + html = html.replace('{app_maintainer}', infos.manifest.maintainer.name); + } + else { + html = html.replace('{app_maintainer}', "???"); + } } // Fill the template $('#app-cards-list').append(html); $('.app-card_'+ app_id).attr('id', 'app-card_'+ app_id); - $('.app-card_'+ app_id + ' .category').append(' <span class="label label-'+app_level_bootstrap+' label-as-badge">'+infos.level+'</span>'); - $('.app-card_'+ app_id + ' .category').append(' <span class="label label-'+app_state_bootstrap+' label-as-badge app-'+infos.state+'">'+infos.state+'</span>'); - if (infos.manifest.license && infos.manifest.license != 'free') { - $('.app-card_'+ app_id + ' .category').append(' <span class="label label-default">'+infos.manifest.license+'</span>'); + $('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_state_css_style+' label-as-badge app-'+infos.state+'">'+infos.state+'</span>'); + if ((infos.state === "high quality") || (infos.state === "working")) { + $('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_level_css_style+' label-as-badge">level '+infos.level+'</span>'); } }); + filter(); }); - //================================================= + //================================================= }); </script> - diff --git a/apps_it.md b/apps_it.md index 236439c3..70eff9be 100644 --- a/apps_it.md +++ b/apps_it.md @@ -1,39 +1,54 @@ -# Apps +# Application catalog <span class="javascriptDisclaimer"> -Questa pagina richiede Javascript abilitato per essere correttamente mostrata :s. +This page requires Javascript enabled to display properly :s. <br/> <br/> </span> +<!-- +Search bar +--> + <div class="input-group"> - <span class="input-group-addon" id="basic-addon1"><span class="glyphicon glyphicon-search"></span></span> - <input type="text" id="filter-app-cards" class="form-control" placeholder="Search for apps..." aria-describedby="basic-addon1"/> + <span id="basic-addon1" class="input-group-addon" ><span class="glyphicon glyphicon-search"></span></span> + <input id="filter-app-cards" type="text" class="form-control" placeholder="Search for apps..." aria-describedby="basic-addon1"/> <div class="input-group-btn"> <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> - <span id="app-cards-list-filter-text">Solo app ufficiali</span> <span class="caret"></span> + <span id="current-quality-filter" data-filter="decent">Only decent quality apps</span> <span class="caret"></span> </button> + <ul class="dropdown-menu"> - <li><a href="#" id="app-cards-list-validated">Solo app ufficiali</a></li> - <li><a href="#" id="app-cards-list-working">Solo app funzionanti</a></li> - <li><a href="#" id="app-cards-list-working-inprogress">App in sviluppo/non funzionanti</a></li> - <li><a href="#" id="app-cards-list-all-apps">Tutte le app</a></li> + <li><a href="#" data-quality-filter="high">Only high quality apps</a></li> + <li><a href="#" data-quality-filter="decent">Only decent quality apps</a></li> + <li><a href="#" data-quality-filter="working">Only working apps</a></li> + <li><a href="#" data-quality-filter="none">All apps</a></li> </ul> </div> </div> <br /> -<div id="community-app-list-warrant" class="alert alert-danger"> - <p>Solo le app etichettate come <span class="label label-success label-as-badge">validate</span> sono ufficialmente supportate dalla squadra di packaging. </p> - <p>App etichettate come <span class="label label-success label-as-badge">funzionanti</span>, <span class="label label-warning label-as-badge">insviluppo</span>, <span class="label label-danger label-as-badge">nonfunzionanti</span> arrivano dai repository della comunità, puoi provare ed utilizzarle **a tuo rischio e pericolo**.</p> +<!-- +Disclaimers +--> - <p>Importante: è il mantenitore dell'applicazione che indica l'applicazione come funzionante, non il team base di YunoHost. Installale a tuo rischio e pericolo. Noi non forniamo supporto per queste app.</p> +<div class="alert alert-info">The application packaging team will welcome your feedback! If you install an app and find issues or possible improvements, do not hesitate to contribute by reporting your issues directly on the code repositories.</div> + +<div id="bad-quality-apps-disclaimer" class="alert alert-warning"> + Applications with a level below or equal to 4 may be working, but they might be not well-integrated with YunoHost, or they do not respect the recommended packaging practices. </div> -<div class="alert alert-info">I mantenitori apprezzeranno i tuoi consigli.Se le installi e incontri dei problemi, o idee per migliorarle, non esitare a segnalare la cosa direttamente nei rispettivi repository.</div> -<div class="app-cards-list" id="app-cards-list"></div> +<div id="broken-apps-disclaimer" class="alert alert-danger"> + Applications with level 0, or flagged as <span class="label label-warning label-as-badge">inprogress</span>, <span class="label label-danger label-as-badge">notworking</span> are still in development or are know to not be working. **Do not install them** in a production environment! +</div> -<div class="alert alert-warning">Se non trovi l'app che stai cercando, puoi provarla a cercarla nel repository delle app della comunità (funzionanti, in sviluppo, non funzionanti) o aggiungila alla <a href="/apps_wishlist_en">lista delle app dei desideri</a>.</div> +<div id="app-cards-list" class="app-cards-list"></div> + +<div class="alert alert-warning">If you don't find the app you are looking for, you can try to look for a appname_ynh repository on Github or on the internet, or add it to the <a href="/apps_wishlist_en">apps wishlist</a>.</div> + +<!-- +Custom CSS for this page +--> <style> /*================================================= @@ -64,6 +79,7 @@ Questa pagina richiede Javascript abilitato per essere correttamente mostrata :s min-height: 1px; margin-right: 10px; margin-left: 10px; + border-radius: 3px; } /*===============================================*/ @@ -75,12 +91,17 @@ Questa pagina richiede Javascript abilitato per essere correttamente mostrata :s margin-bottom:5px; font-size:1.2em; } -.app-card .category { +.app-card .app-badges { height:35px; } -.app-card .category .label, .app-card-date-maintainer { - font-size:0.7em; +.app-card .app-badges .label, .app-card-date-maintainer { + font-size:0.6em; } + +.label-epic { + background-color: darkorchid; +} + .app-card-date-maintainer { text-align:right; max-height: 18px; @@ -108,6 +129,8 @@ Questa pagina richiede Javascript abilitato per essere correttamente mostrata :s } .app-card > .btn-group > .btn{ border-bottom:0; + font-size: 0.9em; + line-height: 1.58; } .app-card > .btn-group > .btn:first-child { border-left:0; @@ -122,12 +145,16 @@ Questa pagina richiede Javascript abilitato per essere correttamente mostrata :s /*===============================================*/ </style> +<!-- +App card template +--> + <script type="text/template" id="app-template2"> - <div class="app-card_{app_id} app-card panel panel-default"> + <div class="app-card_{app_id} app-card panel panel-default" data-quality="{app_quality}"> <div class="panel-body"> <h3>{app_name}</h3> - <div class="category"></div> + <div class="app-badges"></div> <div class="app-card-desc">{app_description}</div> </div> @@ -136,18 +163,23 @@ Questa pagina richiede Javascript abilitato per essere correttamente mostrata :s <span title="{maintained_help}" class="{maintained_state}"><span class="glyphicon glyphicon-{maintained_icon}"></span> {app_maintainer}</span> </div> <div class="btn-group" role="group"> - <a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Codice</a> + <a href="{app_git}" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Code</a> <a href="#/app_{app_id}_en" target="_BLANK" type="button" class="btn btn-default col-sm-4"><span class="glyphicon glyphicon-book" aria-hidden="true"></span> Doc</a> - <a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_bootstrap} col-sm-4 active"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Installa</a> + <a href="https://install-app.yunohost.org/?app={app_id}" target="_BLANK" type="button" class="btn btn-{app_install_css_style} col-sm-4 active"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Install</a> </div> </div> </script> +<!-- +Javascript helpers +--> + <script> + function timeConverter(UNIX_timestamp) { var a = new Date(UNIX_timestamp*1000); - var months = ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre']; + var months = ['January','February','March','April','May','June','July','August','September','October','November','December']; var year = a.getFullYear(); var month = months[a.getMonth()]; var date = a.getDate(); @@ -159,19 +191,36 @@ function timeConverter(UNIX_timestamp) { return time; } + $(document).ready(function () { - // Hide warrant about community list - $('#community-app-list-warrant').hide(); - var filters = ["validated"]; + + // Hide warrant about states when we're using the default filter + $('#state-disclaimer').hide(); + var quality_filters = "decent"; function filter(){ - var filters_text = filters.map(function(el) { return '.app-' + el;}).join(', '); - var valThis = $('#filter-app-cards').val().toLowerCase(); - $('.app-card').each(function(){ - var text = $(this).find('h3').text().toLowerCase(); - (text.indexOf(valThis) >= 0 && $(this).find(filters_text).length > 0) ? $(this).show() : $(this).hide(); + + var current_quality_filter = $('#current-quality-filter').data("filter"); + var user_input_in_search_field = $('#filter-app-cards').val().toLowerCase(); + + $('.app-card').each(function() { + // This is where we actually define how apps are filtered: + // we look for the name of the app (h3) and try to find the user input + // + we check this app match the current quality filter + var app_name = $(this).find('h3').text().toLowerCase(); + if (app_name.indexOf(user_input_in_search_field) >= 0 && $(this).data("quality").indexOf(current_quality_filter) >= 0) + { + $(this).show(); + } + else + { + $(this).hide(); + } }); - (filters.indexOf("working") == -1) ?$('#community-app-list-warrant').hide():$('#community-app-list-warrant').show(); + + // Display or hide the disclaimers depending on the current filter... + ((current_quality_filter == "working") || (current_quality_filter == "none")) ? $("#bad-quality-apps-disclaimer").show() : $("#bad-quality-apps-disclaimer").hide(); + ((current_quality_filter == "none")) ? $("#broken-apps-disclaimer").show() : $("#broken-apps-disclaimer").hide(); } //================================================= @@ -179,81 +228,88 @@ $(document).ready(function () { //================================================= $('#filter-app-cards').keyup(filter); - $('#app-cards-list-validated').click(function(){ - filters = ["validated"]; - $('#app-cards-list-filter-text').text($('#app-cards-list-validated').text()); + $('a[data-quality-filter]').on("click", function(){ + $('#current-quality-filter').text($(this).text()); + $('#current-quality-filter').data("filter", $(this).data("quality-filter")); filter(); }); - $('#app-cards-list-working').click(function(){ - filters = ["validated", "working"]; - $('#app-cards-list-filter-text').text($('#app-cards-list-working').text()); - filter(); - }); - - $('#app-cards-list-working-inprogress').click(function(){ - filters = ["notworking", "inprogress"]; - $('#app-cards-list-filter-text').text($('#app-cards-list-working-inprogress').text()); - filter(); - }); - - $('#app-cards-list-all-apps').click(function(){ - filters = ["validated", "working", "inprogress", "notworking"]; - $('#app-cards-list-filter-text').text($('#app-cards-list-all-apps').text()); - filter(); - }); - //================================================= - + filter(); //================================================= // Upload apps lists //================================================= - var app_list={}; - $.when( - $.getJSON('https://app.yunohost.org/community.json', {}, function(community) { - app_list.community = $.map(community, function(el) { return el; }); - }), - $.getJSON('https://app.yunohost.org/official.json', {}, function(official) { - app_list.official = $.map(official, function(el) { return el; }); - }) - ).then(function() { - app_list = app_list.official.concat(app_list.community); + var catalog = undefined; - // Sort alpha - app_list.sort(function(a, b){ - a_state = (a.state == "validated")?4:(a.state == "working")?3:(a.state == "inprogress")?2:1; - b_state = (b.state == "validated")?4:(b.state == "working")?3:(b.state == "inprogress")?2:1; + // Fetch application catalog + + $.getJSON('https://app.yunohost.org/apps.json', {}, function(data) { + + catalog = $.map(data, function(el) { return el; }); + + // Clarify high quality state, and level if undefined or inprogress or notworking... + + $.each(catalog, function(k, infos) { + if ((infos.level === undefined) || (infos.state === "inprogress") || (infos.state === "notworking")) { + infos.level = null; + } + if ((infos.high_quality === true) && (infos.level === 8)) { + infos.state = "high quality"; + } + }); + + // Sort apps according to their state and level... + + catalog.sort(function(a, b){ + a_state = (a.state === "high quality")?4:(a.level > 4)?3:(a.state > 0)?2:1; + b_state = (b.state === "high quality")?4:(b.level > 4)?3:(b.state > 0)?2:1; if (a_state < b_state || a_state == b_state && a.level < b.level || a_state == b_state && a.level == b.level && a.manifest.id > b.manifest.id) {return 1;} else if (a.manifest.id == b.manifest.id) {return 0;} return -1; }); - $.each(app_list, function(k, infos) { + + // Add the card for each app + + $.each(catalog, function(k, infos) { + app_id = infos.manifest.id; - app_install_bootstrap = "success"; - if (infos.state === "validated") { - app_state_bootstrap = "success"; - } else if (infos.state === "working") { - app_state_bootstrap = "success"; - } else if (infos.state === "inprogress") { - app_state_bootstrap = "warning"; - app_install_bootstrap = "danger"; - } else if (infos.state === "notworking") { - app_state_bootstrap = "danger"; - app_install_bootstrap = "danger"; - } - if (infos.level == null ) { - infos.level = '?'; - } - if (infos.level == 0 ) { - app_level_bootstrap = "danger"; - app_install_bootstrap = "danger"; - } else if (infos.level <= 2) { - app_level_bootstrap = "warning"; - app_install_bootstrap = "danger"; - } else if (infos.level >= 7) { - app_level_bootstrap = "success"; + + // Define what style to use for state, level and install button + // according to the app quality .... + + if (infos.state === "high quality") { + app_quality = "high,decent,working,none"; + app_state_css_style = "epic"; + app_install_css_style = "success"; + app_level_css_style = "epic"; + } else if (infos.level > 4) { + app_quality = "decent,working,none"; + app_state_css_style = "success"; + app_install_css_style = "success"; + app_level_css_style = "success"; + } else if (infos.level > 0) { + app_quality = "working,none"; + app_state_css_style = "success"; + app_install_css_style = "warning"; + app_level_css_style = "warning"; } else { - app_level_bootstrap = "default"; + app_quality = "none"; + if (infos.state === "working") { + app_state_css_style = "success"; + } + else if (infos.state === "inprogress") { + app_state_css_style = "warning"; + } + else { + app_state_css_style = "danger"; + } + app_install_css_style = "danger"; + app_level_css_style = "danger"; + } + + // If level is null, we wanna display '?' + if (infos.level == null) { + infos.level = '?'; } // Fill the template @@ -264,45 +320,47 @@ $(document).ready(function () { .replace(/{app_git}/g, infos.git.url) .replace('{app_branch}', infos.git.branch) .replace('{app_level}', infos.level) + .replace('{app_quality}', app_quality) .replace('{app_update}', timeConverter(infos.lastUpdate)) - .replace('{app_state_bootstrap}', app_state_bootstrap) - .replace('{app_install_bootstrap}', app_install_bootstrap); + .replace('{app_state_css_style}', app_state_css_style) + .replace('{app_install_css_style}', app_install_css_style); + // Handle the maintainer info if (infos.maintained == false) { html = html .replace('{maintained_state}', 'unmaintained') .replace('{maintained_icon}', 'warning-sign') - .replace('{app_maintainer}', "Non mantenuto") - .replace('{maintained_help}', "Questo pacchetto attualmente non è mantenuto. Sentiti libero di proporti come nuovo mantenitore !"); - } else { - if (infos.manifest.developer) { + .replace('{app_maintainer}', "Unmaintained") + .replace('{maintained_help}', "This package is currently unmaintained. Feel free to propose yourself as the new maintainer !"); + } + else { html = html .replace('{maintained_state}', 'maintained') .replace('{maintained_icon}', 'user') - .replace('{app_maintainer}', infos.manifest.developer.name) - .replace('{maintained_help}', "Mantenitore attuale di questo pacchetto"); - } - if (infos.manifest.maintainer) { - html = html - .replace('{maintained_state}', 'maintained') - .replace('{maintained_icon}', 'user') - .replace('{app_maintainer}', infos.manifest.maintainer.name) - .replace('{maintained_help}', "Mantenitore attuale di questo pacchetto");; - } - } + .replace('{maintained_help}', "Current maintainer of this package"); + if ((infos.manifest.developer) && (infos.manifest.developer.name)) { + html = html.replace('{app_maintainer}', infos.manifest.developer.name); + } + else if ((infos.manifest.maintainer) && (infos.manifest.maintainer.name)) { + html = html.replace('{app_maintainer}', infos.manifest.maintainer.name); + } + else { + html = html.replace('{app_maintainer}', "???"); + } + } // Fill the template $('#app-cards-list').append(html); $('.app-card_'+ app_id).attr('id', 'app-card_'+ app_id); - $('.app-card_'+ app_id + ' .category').append(' <span class="label label-'+app_level_bootstrap+' label-as-badge">'+infos.level+'</span>'); - $('.app-card_'+ app_id + ' .category').append(' <span class="label label-'+app_state_bootstrap+' label-as-badge app-'+infos.state+'">'+infos.state+'</span>'); - if (infos.manifest.license && infos.manifest.license != 'free') { - $('.app-card_'+ app_id + ' .category').append(' <span class="label label-default">'+infos.manifest.license+'</span>'); + $('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_state_css_style+' label-as-badge app-'+infos.state+'">'+infos.state+'</span>'); + if ((infos.state === "high quality") || (infos.state === "working")) { + $('.app-card_'+ app_id + ' .app-badges').append(' <span class="label label-'+app_level_css_style+' label-as-badge">level '+infos.level+'</span>'); } }); + filter(); }); //================================================= From 02d5f0e4fa49ec9e8955e09b8ab6ed1226cfbe86 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Tue, 22 Oct 2019 15:30:02 +0200 Subject: [PATCH 221/360] Improve wording + encourage to provide feedback if autoconf fails --- email_configure_client.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/email_configure_client.md b/email_configure_client.md index 710624a4..6dd96dd2 100644 --- a/email_configure_client.md +++ b/email_configure_client.md @@ -2,7 +2,7 @@ You can fetch and send emails using your YunoHost instance from desktop email clients such as Mozilla Thunderbird or on your smartphone with applications like K-9 Mail. -Normally, configuring your mail client should be automatic, but if the autoconfiguration fails, you can do it manually following the instructions bellow. +Modern mail clients should be able to configure themselves automatically. If autoconfiguration fails, you can do it manually following the instructions below. (If the autoconfiguration fails though, it should be understood as a bug in YunoHost, and we would be glad to read your feedback to try to reproduce the issue on our side!) ### Generic settings From 5d527cd26daabc5ff744f7d6034d48d1585458f3 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Tue, 22 Oct 2019 15:32:22 +0200 Subject: [PATCH 222/360] Encourage people to give feedback if autoconf is failing --- email_configure_client_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/email_configure_client_fr.md b/email_configure_client_fr.md index 3d1c8987..81bd37bd 100644 --- a/email_configure_client_fr.md +++ b/email_configure_client_fr.md @@ -2,7 +2,7 @@ Vous pouvez récupérer et envoyer des emails avec votre instance YunoHost grâce à des logiciels comme Mozilla Thunderbird, ou sur votre smartphone grâce à des applications comme K-9 Mail. -Normalement, votre client mail devrait recevoir la configuration automatiquement lorsque vous ajoutez un compte, mais si jamais cela ne fonctionne pas, il est possible de le faire manuellement en suivant les quelques étapes suivantes. +Normalement, votre client mail devrait recevoir la configuration automatiquement lorsque vous ajoutez un compte. Si cela ne fonctionne pas, il est possible de le faire manuellement en suivant les quelques étapes suivantes. (Cependant, cela devrait être compris comme étant un bug dans YunoHost, et le cas échéant, c'est cool si vous nous notifiez du problème pour que nous puissions tenter de reproduire et corriger le problème !) ### Réglages génériques From 3747c991107c568811875719794415089273bc1b Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alexandre.aubin@cern.ch> Date: Tue, 22 Oct 2019 16:39:44 +0200 Subject: [PATCH 223/360] Update and merged outdated package_list_fr into dev documentation --- dev.md | 44 ++++++++++++++++++++++++++++++++++++++++++-- dev_fr.md | 39 +++++++++++++++++++++++++++++++++++++++ package_list_fr.md | 41 ----------------------------------------- 3 files changed, 81 insertions(+), 43 deletions(-) delete mode 100644 package_list_fr.md diff --git a/dev.md b/dev.md index 645915a6..45015d78 100644 --- a/dev.md +++ b/dev.md @@ -24,6 +24,46 @@ If you're looking for stuff to implement or fix, the bug-tracker is - You can also work on the other projects on which YunoHost is built (SSOwat, moulinette) in similar ways +### Overview of the 4 main pieces of YunoHost + +#### Moulinette + +It is a small "homemade" framework. [Its major role](https://moulinette.readthedocs.io/en/latest/actionsmap.html) +is to allow us to build both a web API and a command-line API from the same +Python code thanks to a YAML schema which we call +[the actionmap](https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/actionsmap/yunohost.yml). + +It handles other mechanisms like authentication, internationalization and +small technical utilitary functions (e.g. reading/writing json). + +Moulinette has its own documentation available [here](https://moulinette.readthedocs.io/en/latest/). + +#### Yunohost + +This piece is the very core of YunoHost. It contains: +- [the python code](https://github.com/YunoHost/yunohost/tree/stretch-unstable/src/yunohost) that manages users, domains, apps, services and other things +- [bash helpers](https://github.com/YunoHost/yunohost/tree/stretch-unstable/data/helpers.d) mainly used by application packagers to package applications +- [hooks](https://github.com/YunoHost/yunohost/tree/stretch-unstable/data/hooks) and [templates](https://github.com/YunoHost/yunohost/tree/stretch-unstable/data/templates) that are used to configure the various pieces of the ecosystem such as nginx, postfix, ... +- [internationalized strings](https://github.com/YunoHost/yunohost/tree/stretch-unstable/locales) +- [tests](https://github.com/YunoHost/yunohost/tree/stretch-unstable/src/yunohost/tests) + +#### SSOwat + +This is the single sign-on system of YunoHost. It both contains: +- [Lua scripts](https://github.com/YunoHost/ssowat) that are directly interfaced with nginx and handle all the "technical" aspects of authentication and route accesses +- the web [user portal](https://github.com/YunoHost/SSOwat/tree/stretch-unstable/portal) which is the interface used by YunoHost's end users to log in and browse installed apps + +SSOwat is configured through `/etc/ssowat/conf.json` which is generated by YunoHost. + +#### Yunohost-admin + +It is an *optional* dependency of YunoHost and corresponds to an interface for the web API created by YunoHost and Moulinette (c.f. the `yunohost-api` service). + +It essentially contains: +- [view templates](https://github.com/YunoHost/yunohost-admin/tree/stretch-unstable/src/views) +- corresponding [javascript controllers](https://github.com/YunoHost/yunohost-admin/tree/stretch-unstable/src/js/yunohost/controllers) that interact with the Yunohost API +- and [internationalized strings](https://github.com/YunoHost/yunohost-admin/tree/stretch-unstable/src/locales) + ### Working on the YunoHost Python/CLI core - Work in `/ynh-dev/yunohost/`. @@ -93,8 +133,8 @@ If you're looking for stuff to implement or fix, the bug-tracker is ##### Don't forget -- Each time you edit the actionsmap, you should restart the yunohost-api : - ```service yunohost-api restart``` +- Each time you edit the actionsmap or the python code, you should restart the yunohost-api : + ```systemctl restart yunohost-api``` (You'll need to retype your admin password in the web interface) - You might need to force-clear the cache of your browser sometimes to refresh diff --git a/dev_fr.md b/dev_fr.md index d161888c..49a3f883 100644 --- a/dev_fr.md +++ b/dev_fr.md @@ -26,6 +26,45 @@ bug tracker est [ici](https://github.com/yunohost/issues/issues) ! - Vous pouvez aussi travailler sur les autres projets liés sur lesquels s'appuie YunoHost (SSOwat, moulinette) de façon similaire. +### Vue d'ensemble des 4 morceaux principaux de YunoHost + +##### Moulinette + +C'est un petit framework "fait maison". [Son rôle principal](https://moulinette.readthedocs.io/en/latest/actionsmap.html) +est de permettre de construire une API Web et une API en ligne de commande à partir d'un même code Python et d'un schéma YAML que nous appelons +[l'actionmap] (https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/actionsmap/yunohost.yml). + +Il prend en charge d'autres mécanismes tels que l'authentification, l'internationalisation +et des petites fonctions utilitaires techniques (par ex. lecture/écriture de fichiers json). + +Moulinette dispose de sa propre documentation [ici](https://moulinette.readthedocs.io/en/latest/). + +##### Yunohost + +C'est le coeur même de YunoHost. Il contient : +- [le code python](https://github.com/YunoHost/yunohost/tree/stretch-unstable/src/yunohost) qui gère les utilisateurs, domaines, applications, services et autres +- des [helpers bash](https://github.com/YunoHost/yunohost/tree/stretch-unstable/data/helpers.d) principalement utilisés par les packageurs d'applications dans les scripts de ces applications +- des [hooks](https://github.com/YunoHost/yunohost/tree/stretch-unstable/data/hooks) et [templates](https://github.com/YunoHost/yunohost/tree/stretch-unstable/data/templates) qui sont utilisés pour configurer les différents éléments de l'écosystème tels que nginx, postfix, .... +- des [chaînes internationalisées](https://github.com/YunoHost/yunohost/tree/stretch-unstable/locales) +- des [tests](https://github.com/YunoHost/yunohost/tree/stretch-unstable/src/yunohost/tests) + +##### SSOwat + +C'est le système de connexion unique (single sign-on) de YunoHost. Il contient principalement: +- [du code LUA](https://github.com/YunoHost/ssowat) interfacé directement avec nginx et qui gère tous les aspects "techniques" de l'authentification et de la gestion des accès aux ressources. +- le [portail web utilisateur](https://github.com/YunoHost/SSOwat/tree/stretch-unstable/portal) qui est l'interface finale visible pour les utilisateurs de YunoHost + +SSOwat est configuré via `/etc/ssowat/conf.json` qui est généré par YunoHost. + +##### Yunohost-admin + +C'est une dépendance *optionnelle* de YunoHost et correspond à une interface pour l'API web créée par YunoHost et Moulinette (service `yunohost-api`). + +Il contient essentiellement : +- [des templates pour les vues](https://github.com/YunoHost/yunohost-admin/tree/stretch-unstable/src/views) +- les [contrôleurs javascript](https://github.com/YunoHost/yunohost-admin/tree/stretch-unstable/src/js/yunohost/controllers) correspondants, qui interagissent avec l'API Yunohost +- et es [chaînes internationalisées](https://github.com/YunoHost/yunohost-admin/tree/stretch-unstable/src/locales) + ### Travailler sur le cœur Python / ligne de commande - Allez dans `/ynh-dev/yunohost/`. diff --git a/package_list_fr.md b/package_list_fr.md deleted file mode 100644 index 4c8d53ce..00000000 --- a/package_list_fr.md +++ /dev/null @@ -1,41 +0,0 @@ -# Fonctionnement de YunoHost - -### Les branches de développement de YunoHost -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). - -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. - -### Paquets YunoHost -Avant d’aller plus loin, il convient de rappeler le rôle des différents paquets YunoHost. - -#### Paquet moulinette -La moulinette est un framework qui permet de créer une API web ainsi qu’une API en ligne de commande à partir d’un même code Python et d’un schéma en yaml. - -La ligne de commande `yunohost` est écrite avec ce framework, La moulinette est donc une dépendance de YunoHost. - -La moulinette est un code écrit par les développeurs YunoHost. À l’origine, la moulinette était fusionnée avec le code YunoHost, mais il a été décidé de scinder les deux afin de permettre l’utilisation de la moulinette pour d’autres projets. - -#### Paquet yunohost -Le paquet yunohost est le cœur de YunoHost, ce paquet contient depuis la version 2.3 (testing) le code du programme en ligne de commande `yunohost`. Il contient également des helpers qui peuvent être utilisées par les scripts des apps YunoHost, ainsi que les templates de configuration des dépendances de YunoHost. - -Note : à partir de la version 2.3 (testing), le code de la ligne de commande `yunohost` initialement dans le paquet moulinette-yunohost a été rapatrié dans le paquet yunohost. Un système 2.2 contient donc deux paquets au lieu d’un seul : yunohost et moulinette-yunohost. - -#### Paquet SSOwat -SSOwat est un système de Single Sign On pour Nginx écrit en Lua. C’est ce système qui génère l’interface que les utilisateurs YunoHost voient. Il permet de protéger des URLs et d’autoriser des utilisateurs à accéder ou non à ces ressources. - -SSOwat est comme la moulinette une dépendance de YunoHost, mais peut aussi être utilisée séparément sur d’autres projets. - -#### Paquet yunohost-admin (optionnel) -Ce paquet contient l’interface d’administration web de YunoHost, obligatoire dans la version 2.2, il est optionnel depuis la version 2.3 (testing). - -L’interface d’administration n’est en réalité qu’un client qui se connecte à l’API web généré par la moulinette et le paquet yunohost. - -Le service yunohost-api doit donc être start pour utiliser l’administration web. - -### 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 <a href='https://translate.yunohost.org/' target='_BLANK'>weblate</a>. Donc si effectivement vous savez traduire dans une autre langue, n’hésitez pas à y faire un tour. From 1bf97096af9b66dc7b1f9a887262fbb4ee79497a Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Sat, 26 Oct 2019 17:35:38 +0200 Subject: [PATCH 224/360] Try to clarify what to do for packagers removing the legacy permission stuff --- groups_and_permissions.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/groups_and_permissions.md b/groups_and_permissions.md index 6e1c6c4a..e1ff2932 100644 --- a/groups_and_permissions.md +++ b/groups_and_permissions.md @@ -126,7 +126,8 @@ Note that, for example, if we want to restrict permission for email so that only $ yunohost user permission update mail --remove all_users --add bob ``` -### Notes for apps packagers +Notes for apps packagers +------------------------ By default, installing an app creates the permission `app.main` with `all_users` allowed by default. @@ -143,3 +144,19 @@ ynh_permission_create --permission "admin" --url "/admin" --allowed "$admin_user ``` You don't need to take care of removing permissions or backing up/restoring them as it is handled by the core of YunoHost. + +### Migrating away from the legacy permission management + +When migrating/fixing an app still using the legacy permission system, it should be understood that the accesses are now to be managed by features from the core, outside the application scripts! + +Application scripts are only expected to: +- if relevant, during the install script, initialize the main permission of the app as public (`visitors`) or private (`all_users`) or only accessible to specific groups/users ; +- if relevant, create and initialize any other specific permission (e.g. to some admin interface) in the install script (and *maybe* in some migration happening in the upgrade script). + +Applications scripts should absolutely **NOT** mess up with any already-existing app accesses (including `unprotected`/`skipped_uris` settings) during any other case, as *it would reset any admin-defined access rule*! + +When migrating away from the legacy permission, you should: +- remove any management of `$is_public`-like or `$admin_user`-like setting, except for any manifest question meant to either *initialize* the app as public/private or specific permissions ; +- remove any management of `skipped_`, `unprotected_` and `protected_uris` (and `_regex`) settings that are now considered obsolete and deprecated. (N.B.: you should **explicitly delete them in the upgrade script**). Instead, you should now rely on the new `ynh_permission_*` helpers instead. If you do feel like you still need to use them, please contact the core team to provide your feedback and we'll figure out something ; +- remove any call to `yunohost app addaccess` and similar actions that are now obsolete and deprecated. + From d86b3fd994baa2b4b4ace3876063d9470885f69e Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Sun, 27 Oct 2019 12:25:20 +0100 Subject: [PATCH 225/360] Fix anchors / remove some unecessary stuff --- app_gogs_fr.md | 2 +- app_nextcloud.md | 13 ++++++------- app_nextcloud_fr.md | 12 ++++++------ app_nextcloud_keeweb_fr.md | 6 ------ app_peertube_fr.md | 10 +++------- app_pleroma_fr.md | 15 +++++++++------ app_sogo_fr.md | 4 ++-- 7 files changed, 27 insertions(+), 35 deletions(-) diff --git a/app_gogs_fr.md b/app_gogs_fr.md index 4b09de7b..3fae767f 100644 --- a/app_gogs_fr.md +++ b/app_gogs_fr.md @@ -6,7 +6,7 @@ Gogs est une forge logiciel minimaliste utilisant git. Gogs a été conçu pour Il est donc adapté à l'auto-hébergement d'une forge git. Pour utiliser pleinement la puissance de gogs vous devez avoir appréhender ce qu'est git et l'utilisation d'un [logiciel de gestion de versions](https://fr.wikipedia.org/wiki/Logiciel_de_gestion_de_versions). -## <a name=LiensUtiles>Liens utiles</a> +## Liens utiles - [Site Officiel - gogs.io](https://gogs.io) - [Dépot applications gogs pour YunoHost](https://github.com/YunoHost-Apps/gogs_ynh) - [Site officiel de l'outils git - git-scm.com](https://git-scm.com/) diff --git a/app_nextcloud.md b/app_nextcloud.md index 7da57a5b..ee87c4ae 100644 --- a/app_nextcloud.md +++ b/app_nextcloud.md @@ -9,18 +9,18 @@ Nextcloud is a file hosting service, many applications can be installed to offer it new features such as a calendar, a directory, notes and many others (you can find some applications in the [third-party applications](#AppsTiers) part but there are many others depending on your needs). -## Discovering the Nextcloud environment <a name="EnvironmentNextcloud"></a> +## Discovering the Nextcloud environment <a name="EnvironmentNextcloud" href=""></a> Due to the creation of Nextcloud, a database with third-party applications to install, this chapter will only concern the nextcloud database without added applications. More information on applications in the dedicated section or in the nextcloud application catalogue: [apps.nextcloud.com](https://apps.nextcloud.com). Nextcloud is before a cloud service (like Seafile and others), it allows synchronization and file sharing on the Internet and between several terminals (computers, smartphone) but also with several people. -## Mobile and computer client software <a name="ClientSoftware"></a> +## Mobile and computer client software <a name="ClientSoftware" href=""></a> There are client software for all platforms. You can find them on the official nextcloud website: https://nextcloud.com/install/#install-clients -## Useful Manipulations & Problems Encountered <a name="UtileManipulations"></a> +## Useful Manipulations & Problems Encountered <a name="UtileManipulations" href=""></a> -### Add storage space <a name="AddSpace"></a> +### Add storage space <a name="AddSpace" href=""></a> Solution I. allows you to add a link to a local or remote folder. Solution II. allows to move the main storage space of nextcloud. @@ -156,16 +156,15 @@ The options to disable (Off) are: Save and clean your caches (Cloudflare, browser,...) and that's it. -## Third Party Applications <a name="AppsTiers"></a> +## Third Party Applications <a name="AppsTiers" href=""></a> - [Calendrier](app_nextcloud_calendar) - [contact](app_nextcloud_contact) - [KeeWeb](app_nextcloud_keeweb) - [Carnet](app_nextcloud_carnet) -## Useful links <a name="UsefulLinks"></a> +## Useful links <a name="UsefulLinks" href=""></a> - Official website : [nextcloud.com](https://nextcloud.com/) - Application catalogue for nextcloud : [apps.nextcloud.com](https://apps.nextcloud.com/) - Find help and ask all your questions : [forum.yunohost.org](https://forum.yunohost.org/c/support) - diff --git a/app_nextcloud_fr.md b/app_nextcloud_fr.md index f9407585..186b1ec9 100644 --- a/app_nextcloud_fr.md +++ b/app_nextcloud_fr.md @@ -9,18 +9,18 @@ Nextcloud est un service d'hébergement de fichiers, de nombreuses applications peuvent être installées afin de lui offrir de nouvelles fonctionnalités tel qu'un agenda, un répertoire de contacts, des notes et pleins d'autres possibles (vous pouvez trouver quelques applications dans la partie [applications tiers](#AppsTiers) mais il en existe une multitude suivant vos besoins). -## Découverte de l'environnement de Nextcloud<a name="EnvironnementNextcloud"></a> +## Découverte de l'environnement de Nextcloud<a name="EnvironnementNextcloud" href=""></a> Du fait de la constitution de Nextcloud, une base avec des applications tiers à installer, ce chapitre ne concernera que la base de nextcloud sans applications ajoutés. Plus d'informations sur les applications dans la partie dédiée ou sur le catalogue d'application de nextcloud : [apps.nextcloud.com](https://apps.nextcloud.com). Nextcloud est avant tout un service de cloud (comme Seafile et d'autres logiciels), il permet une synchronisation et le partage de fichiers sur internet et entre plusieurs terminaux (ordinateurs, smartphone) mais aussi avec plusieurs personnes. -## Logiciels Clients<a name="LogicielsClients"></a> +## Logiciels Clients<a name="LogicielsClients" href=""></a> Il existe des logiciels clients pour de nombreux terminaux. Vous pouvez les retrouver sur le site de nextcloud : [nextcloud.com/install/#install-clients](https://nextcloud.com/install/#install-clients) -## Manipulations utiles & problèmes rencontrés<a name="ManipulationsUtiles"></a> +## Manipulations utiles & problèmes rencontrés<a name="ManipulationsUtiles" href=""></a> -### Ajouter de l'espace à Nextcloud<a name="AjoutEspace"></a> +### Ajouter de l'espace à Nextcloud<a name="AjoutEspace" href=""></a> La solution I. permet d'ajouter un lien vers un dossier local ou distant. La solution II. permet de déplacer l'espace de stockage principal de nextcloud. @@ -156,14 +156,14 @@ Les options à désactiver (Off) sont : Sauvegarder et nettoyer vos caches (Cloudflare, navigateur, ...) et le tour est joué. -## Applications Tiers<a name="AppsTiers"></a> +## Applications Tiers<a name="AppsTiers" href=""></a> + [Calendrier](app_nextcloud_calendar_fr) + [contact](app_nextcloud_contact_fr) + [KeeWeb](app_nextcloud_keeweb_fr) + [Carnet](app_nextcloud_carnet_fr) -## Quelques liens utiles<a name="liensutiles"></a> +## Quelques liens utiles<a name="liensutiles" href=""></a> + Site officiel : [nextcloud.com (en)](https://nextcloud.com/) + Catalogue d'application pour nextcloud : [apps.nextcloud.com](https://apps.nextcloud.com/) diff --git a/app_nextcloud_keeweb_fr.md b/app_nextcloud_keeweb_fr.md index 47b09e9a..21d25582 100644 --- a/app_nextcloud_keeweb_fr.md +++ b/app_nextcloud_keeweb_fr.md @@ -2,12 +2,8 @@ L'application Keeweb sur le catalogue de nextcloud - [apps.nextcloud.com/keeweb](https://apps.nextcloud.com/apps/keeweb) - - [Manipulations utiles et problèmes rencontrés](#ManipulationsUtiles) - - [Liens utiles](#liensutiles) - L'application KeeWeb est un gestionnaire de mots de passe incorporé à Nextcloud. Elle permet par exemple de lire un fichier de type KeePass (*.kdbx*) stocké sur votre instance Nextcloud. -## Manipulations utiles & problèmes rencontrés <a name="ManipulationsUtiles"></a> Mais il arrive parfois que Nextcloud ne laisse pas l'application prendre en charge ces fichiers, ce qui rend alors impossible leur lecture de KeeWeb. Pour remédier à cela, [une solution](https://github.com/jhass/nextcloud-keeweb/issues/34) existe. @@ -34,5 +30,3 @@ Puis ajouter dans ce fichier le texte suivent : Enregistrer le fichier (**CTRL** + **o**) et quitter nano (**CTRL** + **c**). A présent, le problème est corrigé. - -## Liens utiles <a name="liensutiles"></a> diff --git a/app_peertube_fr.md b/app_peertube_fr.md index fef9efb5..9737d206 100644 --- a/app_peertube_fr.md +++ b/app_peertube_fr.md @@ -1,20 +1,16 @@ -#<img src="/images/peertube_logo.png" alt="Logo de PeerTube"> PeerTube +# <img src="/images/peertube_logo.png" alt="Logo de PeerTube"> PeerTube -**Index** - - [Découverte de l'environnement de PeerTube](#EnvironnementPeerTube) - - [Quelques liens utiles](#liensutiles) [](https://install-app.yunohost.org/?app=peertube) PeerTube est une plateforme de streaming vidéo fédérée (ActivityPub) utilisant P2P (BitTorrent) directement dans le navigateur web, en utilisant WebTorrent. - -## Découverte de l'environnement de PeerTube <a name ="EnvironnementPeerTube"></a> +## Découverte de l'environnement de PeerTube Pour comprendre en quoi PeerTube propose une alternative à youtube, vous êtes invité à regarder le clip réalisé par l'association Framasoft (ci-dessous). Elle est elle même hébergé sur [framatube.org](https://framatube.org) <iframe width="560" height="315" sandbox="allow-same-origin allow-scripts" src="https://framatube.org/videos/embed/9db9f3f1-9b54-44ed-9e91-461d262d2205" frameborder="0" allowfullscreen></iframe> -## Quelques liens utiles <a name="liensutiles"></a> +## Quelques liens utiles - Site officiel de PeerTube - [joinpeertube.org](https://joinpeertube.org/fr/) - Dépot application PeerTube Yunohost - [github.com/YunoHost-Apps/peertube_ynh](https://github.com/YunoHost-Apps/peertube_ynh) diff --git a/app_pleroma_fr.md b/app_pleroma_fr.md index fd2236e1..7a4c5017 100644 --- a/app_pleroma_fr.md +++ b/app_pleroma_fr.md @@ -1,15 +1,17 @@ # <img src="/images/pleroma_logo.png" alt="logo de Pleroma"> Pleroma - - [Découverte de l'interface de Pleroma](#decouvertegeneralepleroma) | - - [Logiciels Clients pour mobile et ordinateur](#LogicielsClients) | - - [Liens utiles](#liensutiles) | + - [Découverte de l'interface de Pleroma](decouvertegeneralepleroma) + - [Logiciels Clients pour mobile et ordinateur](LogicielsClients) + - [Liens utiles](liensutiles) Pleroma est un réseau social décentralisé de micro-blogging qui propose une alternative à Twitter, le protocole Activy Pub qu'il utilise permet d'interagir avec le fediverse composé notamment de Mastodon, GNU Social, et d'autres. Il a l'avantage d'être plus léger que mastodon et se prête donc plus facilement à l'auto-hébergement. -## <a name="#decouvertegeneralepleroma">Découverte de l'interface de Pleroma</a> +## Découverte de l'interface de Pleroma <a href="" name="decouvertegeneralepleroma"></a> + Pour ceux et celles qui n'ont pas ou peu l'habitude des réseaux sociaux, voici en détail l'utilisation de chacune des fenêtres proposées. ### Accueil de l'interface + <img src="/images/capture_globale.png" alt="Capture écran accueil de Pleroma"> 1. Barre de menu @@ -34,7 +36,7 @@ Cet espace permet de choisir l'agencement de Pleroma, il est proposé deux agenc 6. Notifications On retrouve dans cette zone les messages où vous avez été cité, mais aussi les abonnements à votre compte. -## <a name="LogicielsClients"> Applications clients</a> +## Applications clients <a href="" name="LogicielsClients"></a> | Nom de l'applications | Plateforme | Multi-comptes | Autre réseaux supportés | Play Store | F-Droid | Apple Store | |---|---|---|---|---|---|---| @@ -43,7 +45,8 @@ On retrouve dans cette zone les messages où vous avez été cité, mais aussi l | Twidere | Android | Oui | Twitter, Mastodon | [play.google.com/org.mariotaku.twidere](https://play.google.com/store/apps/details?id=org.mariotaku.twidere) | [https://f-droid.org/org.mariotaku.twidere](https://f-droid.org/fr/packages/org.mariotaku.twidere/) | | Librem Social | Android | Non | ? | [play.google.com/one.librem.social](https://play.google.com/store/apps/details?id=one.librem.social&hl=fr) | [https://f-droid.org/one.librem.social](https://f-droid.org/fr/packages/one.librem.social) | | -## <a name="liensutiles">Quelques liens utiles</a> +## Quelques liens utiles <a href="" name="liensutiles"></a> + + Site officiel : [pleroma.social (En anglais)](https://pleroma.social) + Trouver d'autres instances de Pleroma : [fediverse.network/pleroma](https://fediverse.network/pleroma) + Trouver de l'aide et poser toutes vos questions : [forum.yunohost.org](https://forum.yunohost.org/c/support) \ No newline at end of file diff --git a/app_sogo_fr.md b/app_sogo_fr.md index 1ffd6bdc..86f5e6de 100644 --- a/app_sogo_fr.md +++ b/app_sogo_fr.md @@ -1,9 +1,9 @@ #  SOGo - - [Liens Utiles](#LiensUtiles) SOGo est un service de webmail pour votre serveur email, c'est une alternative à [RoundCube](app_roundcube). Il permet aussi la gestion des agendas et contacts présents sur le serveur. -## <a name="LiensUtiles">Quelques liens utiles</a> +## Quelques liens utiles + + Site officiel de SOGo : [sogo.nu](https://sogo.nu/a) + Dépot de l'application pour Yunohost : [github.com/YunoHost-Apps/sogo_ynh](https://github.com/YunoHost-Apps/sogo_ynh) + Trouver de l'aide et poser vos questions sur le [forum de Yunohost](https://forum.yunohost.org/c/support/apps) From d9774e46ae7c36a701d32899d4fb37a09ab0e5cd Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Sun, 27 Oct 2019 12:26:24 +0100 Subject: [PATCH 226/360] Imho this is not relevant to add a link to the forum here, there's already the 'Need help' button --- app_gogs_fr.md | 1 - app_nextcloud.md | 1 - app_nextcloud_fr.md | 1 - app_peertube_fr.md | 1 - app_pleroma_fr.md | 1 - app_sogo_fr.md | 1 - 6 files changed, 6 deletions(-) diff --git a/app_gogs_fr.md b/app_gogs_fr.md index 3fae767f..f793243e 100644 --- a/app_gogs_fr.md +++ b/app_gogs_fr.md @@ -10,4 +10,3 @@ Pour utiliser pleinement la puissance de gogs vous devez avoir appréhender ce q - [Site Officiel - gogs.io](https://gogs.io) - [Dépot applications gogs pour YunoHost](https://github.com/YunoHost-Apps/gogs_ynh) - [Site officiel de l'outils git - git-scm.com](https://git-scm.com/) - - [Trouver de l'aide et poser toutes vos questions : forum.yunohost.org](https://forum.yunohost.org/c/support/apps) diff --git a/app_nextcloud.md b/app_nextcloud.md index ee87c4ae..66ad3fb7 100644 --- a/app_nextcloud.md +++ b/app_nextcloud.md @@ -167,4 +167,3 @@ Save and clean your caches (Cloudflare, browser,...) and that's it. - Official website : [nextcloud.com](https://nextcloud.com/) - Application catalogue for nextcloud : [apps.nextcloud.com](https://apps.nextcloud.com/) - - Find help and ask all your questions : [forum.yunohost.org](https://forum.yunohost.org/c/support) diff --git a/app_nextcloud_fr.md b/app_nextcloud_fr.md index 186b1ec9..fb889026 100644 --- a/app_nextcloud_fr.md +++ b/app_nextcloud_fr.md @@ -167,4 +167,3 @@ Sauvegarder et nettoyer vos caches (Cloudflare, navigateur, ...) et le tour est + Site officiel : [nextcloud.com (en)](https://nextcloud.com/) + Catalogue d'application pour nextcloud : [apps.nextcloud.com](https://apps.nextcloud.com/) -+ Trouver de l'aide et poser toutes vos questions : [forum.yunohost.org](https://forum.yunohost.org/c/support) diff --git a/app_peertube_fr.md b/app_peertube_fr.md index 9737d206..e45454cd 100644 --- a/app_peertube_fr.md +++ b/app_peertube_fr.md @@ -14,4 +14,3 @@ Pour comprendre en quoi PeerTube propose une alternative à youtube, vous êtes - Site officiel de PeerTube - [joinpeertube.org](https://joinpeertube.org/fr/) - Dépot application PeerTube Yunohost - [github.com/YunoHost-Apps/peertube_ynh](https://github.com/YunoHost-Apps/peertube_ynh) - - Trouver de l'aide et poser toutes vos questions : [forum.yunohost.org](https://forum.yunohost.org/c/support) diff --git a/app_pleroma_fr.md b/app_pleroma_fr.md index 7a4c5017..fbc3b2d1 100644 --- a/app_pleroma_fr.md +++ b/app_pleroma_fr.md @@ -49,4 +49,3 @@ On retrouve dans cette zone les messages où vous avez été cité, mais aussi l + Site officiel : [pleroma.social (En anglais)](https://pleroma.social) + Trouver d'autres instances de Pleroma : [fediverse.network/pleroma](https://fediverse.network/pleroma) -+ Trouver de l'aide et poser toutes vos questions : [forum.yunohost.org](https://forum.yunohost.org/c/support) \ No newline at end of file diff --git a/app_sogo_fr.md b/app_sogo_fr.md index 86f5e6de..2ae3e848 100644 --- a/app_sogo_fr.md +++ b/app_sogo_fr.md @@ -6,4 +6,3 @@ SOGo est un service de webmail pour votre serveur email, c'est une alternative + Site officiel de SOGo : [sogo.nu](https://sogo.nu/a) + Dépot de l'application pour Yunohost : [github.com/YunoHost-Apps/sogo_ynh](https://github.com/YunoHost-Apps/sogo_ynh) - + Trouver de l'aide et poser vos questions sur le [forum de Yunohost](https://forum.yunohost.org/c/support/apps) From e4e210eb4071202dbc67a7482006638ddbe067a5 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 2 Nov 2019 15:03:39 +0000 Subject: [PATCH 227/360] xibo - a FLOSS digital signage solution --- apps_wishlist.md | 204 +++++++++++++++++++++++++++++++---------------- 1 file changed, 134 insertions(+), 70 deletions(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index e4ddd122..7e3a1a69 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -11,126 +11,190 @@ The following list is a compiled wishlist of applications that would be nice-to- - [List of awesome Node.js projects](https://github.com/sqreen/awesome-nodejs-projects) - [List of SIP softwares/applications](https://en.wikipedia.org/wiki/List_of_SIP_software#Free_and_open-source_license) - [10er10](https://github.com/dready92/10er10) -- [Ajenti](http://ajenti.org) / [github](https://github.com/ajenti/ajenti/) -- [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. / [github](https://github.com/akaunting/akaunting) +- [Airtime](https://www.sourcefabric.org/en/airtime/) +- [Ajenti](http://ajenti.org) +- [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. +- [aMule](https://github.com/amule-project/amule) +- [Anki](https://github.com/tsudoko/anki-sync-server) - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) -- [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) / [github](https://github.com/Bitmessage/PyBitmessage) +- [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) +- [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) +- [Bitwarden](https://bitwarden.com/) - [Beehive](https://github.com/muesli/beehive) -- [Bludit](https://www.bludit.com) / [github](https://github.com/bludit/bludit) +- [Bludit](https://www.bludit.com) - [Blynk](https://github.com/blynkkk/blynk-library) -- [Bookstack](https://www.bookstackapp.com/) / [github](https://github.com/BookStackApp/BookStack) +- [Bookstack](https://www.bookstackapp.com/) +- [Browsepass](http://techualization.blogspot.de/2013/09/introducing-browsepass-keepass-on-web.html) - [btcpayserver](https://github.com/btcpayserver/btcpayserver) +- [Candy](https://candy-chat.github.io/candy) +- [CardDavMate](https://www.inf-it.com/open-source/clients/carddavmate) - [cgit](http://git.zx2c4.com/cgit/about) -- [CheckUp](https://sourcegraph.github.io/checkup) / [github](https://github.com/sourcegraph/checkup) +- [CheckUp](https://sourcegraph.github.io/checkup) +- [Cloud torrent](https://github.com/jpillora/cloud-torrent) - [Cockpit](http://cockpit-project.org/) - [Commafeed](https://github.com/Athou/commafeed) -- [Converse.js](https://conversejs.org) / [github](https://github.com/jcbrand/converse.js) +- [Converse.js](https://conversejs.org) - [Cozy](https://github.com/cozy) +- [Cronkeep](https://github.com/cronkeep/cronkeep) - [Croodle](https://github.com/jelhan/croodle) Schedule a date or to do a poll on a general topics, with client-side encryption. +- [CumulusClips](http://cumulusclips.org) +- [Cyclos](https://www.cyclos.org) - [Darkwire.io](https://github.com/seripap/darkwire.io) +- [Deluge](http://deluge-torrent.org) (with WebUI) - [DirectoryLister](https://github.com/DirectoryLister/DirectoryLister) -- [eLabFTW](https://www.elabftw.net/) electronic lab notebook / [github](https://github.com/elabftw/elabftw) +- [DNSchain](https://github.com/okTurtles/dnschain) +- [eLabFTW](https://www.elabftw.net/) electronic lab notebook - [Emoncms](https://github.com/emoncms/emoncms) -- [ERPnext](https://erpnext.com/download) / [github](https://github.com/frappe/erpnext) -- [EteSync](https://www.etesync.com/) / [github](https://github.com/etesync) +- [ERPnext](https://erpnext.com/download) +- [EteSync](https://www.etesync.com/) +- [Ethersheet](https://github.com/ethersheet-collective/EtherSheet) +- [Fail2web](https://github.com/Sean-Der/fail2web) +- [Ferment](https://github.com/mmckegg/ferment) - [FEX](http://fex.rus.uni-stuttgart.de/) +- [FileTea](https://filetea.me) - [FitTrackee](https://github.com/SamR1/FitTrackee) +- [FlatPress](https://github.com/flatpressblog/flatpress) +- [FoOlSlide](http://foolcode.github.io/FoOlSlide/) Open source comicbook/manga management software - [Fossil](http://www.fossil-scm.org) -- [WebThings Gateway](https://iot.mozilla.org/gateway/) [github](https://github.com/mozilla-iot/) -- [Geneweb](https://geneweb.tuxfamily.org) / [github](https://github.com/geneweb/geneweb) -- [GetSimple CMS](http://get-simple.info) / [github](https://github.com/GetSimpleCMS/GetSimpleCMS) -- [Goaccess](https://goaccess.io) Web log analyser (replaces piwik without js tracking scripts) / [github](https://github.com/allinurl/goaccess) +- [Framaslides](https://framagit.org/framasoft/framaslides/) +- [Gateway](https://iot.mozilla.org/gateway/) +- [Geneweb](https://geneweb.tuxfamily.org) +- [GetSimple CMS](http://get-simple.info) +- [Git-annex](http://git-annex.branchable.com) +- [Gitit](https://github.com/jgm/gitit) +- [Goaccess](https://goaccess.io) Web log analyser (replaces piwik without js tracking scripts) - [Gollum](https://github.com/gollum/gollum) - [Goploader](https://github.com/Depado/goploader) - [Granary](https://github.com/snarfed/granary) - [Guacamole](http://guac-dev.org) -- [Habitica](https://habitica.com/) / [github](https://github.com/HabitRPG/habitica) +- [Habitica](https://habitica.com/) - [HackMD CE](https://github.com/hackmdio/hackmd) +- [Hackpad](https://github.com/dropbox/hackpad) - [Helpy](https://github.com/helpyio/helpy) -- [Hexo](https://hexo.io/) / [github](https://github.com/hexojs/hexo) -- [Icecast 2](http://www.icecast.org) / [gitlab](https://gitlab.xiph.org/xiph/icecast-server/) +- [Hexo](https://hexo.io/) +- [Hi Buddy](https://github.com/tOkeshu/hibuddy) (/!\ last update: 17 Feb 2015) +- [Huginn](https://github.com/cantino/huginn) +- [Hugo](http://gohugo.io) +- [Icecast 2](http://www.icecast.org) - [ikiwiki](http://ikiwiki.info) +- [img.bi](https://github.com/imgbi/img.bi) +- [InfCloud](https://www.inf-it.com/open-source/clients/infcloud) - [Invidious](https://github.com/omarroth/invidious) -- [Invoice Ninja](https://www.invoiceninja.com) / [github](https://github.com/invoiceninja/invoiceninja) -- [InvoicePlane](https://invoiceplane.com) / [github](https://github.com/InvoicePlane/InvoicePlane) -- [IPFS](https://ipfs.io) / [github](https://github.com/ipfs/ipfs) -- [Joplin](http://joplin.cozic.net/) / [github](https://github.com/laurent22/joplin) +- [Invoice Ninja](https://www.invoiceninja.com) +- [InvoicePlane](https://invoiceplane.com) +- [IPFS](https://ipfs.io) +- [Joplin](http://joplin.cozic.net/) - [Jellyfin](https://github.com/jellyfin) -- [JS Bin](http://jsbin.com/help/2-second-setup) / [github](https://github.com/jsbin/) -- [Kiwix](http://www.kiwix.org/) Offline wikipedia / [github](https://github.com/kiwix/) -- [Known](https://withknown.com) / [github](https://github.com/idno/known) -- [Koel](http://koel.phanan.net) / [github](https://github.com/phanan/koel) -- [Kontalk](https://kontalk.org) / [github](https://github.com/kontalk) -- [Koozip](http://koozic.net) / [github](https://github.com/DocMarty84/koozic) +- [JS Bin](http://jsbin.com/help/2-second-setup) +- [Kaiwa](http://getkaiwa.com) +- [Kin calendar](https://github.com/KinToday) +- [Kinto](https://github.com/Kinto/formbuilder) +- [Kiwix](http://www.kiwix.org/) Offline wikipedia +- [Known](https://withknown.com) +- [Koel](http://koel.phanan.net) +- [Kontalk](https://kontalk.org) +- [Koozip](http://koozic.net) +- [KrISS feed](https://github.com/tontof/kriss_feed) +- [Koken](http://koken.me) +- [Kune](https://en.wikipedia.org/wiki/Kune_%28software%29) - [L'atelier](https://github.com/jbl2024/latelier) -- [Lessy](https://lessy.io) / [github](https://github.com/lessy-community/lessy) +- [Lessy](https://lessy.io) +- [LibreNews-Server](https://librenews.io) - [LibreOffice Online](https://wiki.documentfoundation.org/ReleaseNotes/5.3/fr#LibreOffice_Online) -- [LiquidSoap](http://savonet.sourceforge.net/) / [github](https://github.com/savonet/liquidsoap) +- [LiquidSoap](http://savonet.sourceforge.net/) - [LocomotiveCMS](https://github.com/locomotivecms/engine) -- [Loomio](https://www.loomio.org) / [github](https://github.com/loomio/loomio/) -- [MaidSafe](http://maidsafe.net) / [github](https://github.com/maidsafe) -- [Mailpile](https://www.mailpile.is) / [github](https://github.com/mailpile/Mailpile) -- [Mailtrain](https://mailtrain.org/) / [github](https://github.com/Mailtrain-org/mailtrain) +- [Logstalgia](http://logstalgia.io) +- [Loomio](https://www.loomio.org) +- [MaidSafe](http://maidsafe.net) +- [Mailpile](https://www.mailpile.is) - [Mautic](https://github.com/mautic/mautic) -- [microblog.pub](https://microblog.pub) / [github](https://github.com/tsileo/microblog.pub) -- [Mirakel](http://mirakel.azapps.de/taskwarrior.html) / [github](https://github.com/GothenburgBitFactory/taskwarrior) (/!\ SSL-Warning) -- [Modoboa](http://modoboa.org) / [github](https://github.com/modoboa/) +- [MediaCrush](https://github.com/MediaCrush/MediaCrush) (/!\ last update: Jan 23, 2015) +- [microblog.pub](https://microblog.pub) +- [MinigalNano](https://github.com/sebsauvage/MinigalNano) (/!\ last update: Jun 24, 2016) +- [Mirakel](http://mirakel.azapps.de/taskwarrior.html) (/!\ SSL-Warning) +- [Modoboa](http://modoboa.org) - [MotionEye](https://github.com/ccrisan/motioneye) - [MPD](http://www.musicpd.org) -- [MyBB](https://mybb.com/) / [github](https://github.com/mybb) +- [MyBB](https://mybb.com/) - [Museek+](https://github.com/eLvErDe/museek-plus) - [Netrunner](https://github.com/mtgred/netrunner) -- [Nibbleblog](http://www.nibbleblog.com)/ [github](https://github.com/dignajar/nibbleblog) -- [Nuage](https://nuage.kerjean.me/login) / [github](https://github.com/mickael-kerjean/filestash) +- [Nibbleblog](http://www.nibbleblog.com) +- [Nuage](https://nuage.kerjean.me/login) - [Ombi](https://github.com/tidusjar/Ombi) -- [OpenBazaar](https://openbazaar.org) / [github](https://github.com/openbazaar) -- [openHAB](https://www.openhab.org/) - Smart home platform. / [github](https://github.com/openhab) +- [OpenBazaar](https://openbazaar.org) +- [openHAB](https://www.openhab.org/) - Smart home platform. +- [OpenJabNab](https://github.com/OpenJabNab/OpenJabNab) (/!\ last update: Apr 30, 2016) - [OpenProject](https://github.com/opf/openproject) - [OpenSourceBilling](https://github.com/vteams/open-source-billing) -- [OX Open-Xchange](https://www.open-xchange.com) Linux groupware solution / [github](https://github.com/open-xchange/) +- [OX Open-Xchange](https://www.open-xchange.com) Linux groupware solution - [Paperless](https://github.com/danielquinn/paperless) - [Paperwork](http://paperwork.rocks) -- [Passbolt](https://www.passbolt.com) Passwords manager / [github](https://github.com/passbolt) -- [Pelias](https://github.com/pelias/pelias)) -- [PHPList](http://www.phplist.com) / [github](https://github.com/phpList) -- [Phraseanet](https://docs.phraseanet.com/3.8/fr/index.html#) / [github](https://github.com/alchemy-fr/Phraseanet-Docs) -- [Pico](http://picocms.org) / [github](https://github.com/picocms/Pico) +- [Passbolt](https://www.passbolt.com) Passwords manager +- [pdfy](https://github.com/joepie91/pdfy) (/!\ last update: Aug 5, 2014) +- [Pelias](https://github.com/pelias/pelias) +- [Peps](https://github.com/MLstate/PEPS) +- [PHPList](http://www.phplist.com) +- [PHProxy](http://sourceforge.net/projects/poxy) +- [Phraseanet](https://docs.phraseanet.com/3.8/fr/index.html#) +- [Pico](http://picocms.org) +- [Pix](http://pix.toile-libre.org) - [Playmaker](https://github.com/NoMore201/playmaker) - [Privoxy](http://www.privoxy.org) - [ProcessMaker](http://www.processmaker.com) - [ProtonMail’s WebClient](https://github.com/ProtonMail/WebClient) - [PyLoad](https://github.com/pyload/pyload) -- [Pump.io](http://pump.io) / [github](https://github.com/pump-io/pump.io) +- [Pulse](https://source.ind.ie/project/pulse-swift/tree/master) +- [Pump.io](http://pump.io) - [qBittorrent](https://github.com/qbittorrent/qBittorrent) -- [racktables](http://racktables.org) / [github](https://github.com/RackTables/racktables) +- [racktables](http://racktables.org) +- [Race for the Galaxy](https://github.com/bnordli/rftg) - [Radarr](https://github.com/Radarr/Radarr) -- [Request Tracker](https://bestpractical.com) / [github](https://github.com/bestpractical/rt) -- [Restya](http://restya.com) / [github](https://github.com/RestyaPlatform/board/) -- [Retroshare](https://retroshare.cc/) / [github](https://github.com/RetroShare/RetroShare) +- [Redmine](https://www.redmine.org) +- [Request Tracker](https://bestpractical.com) +- [Respawn 2.0](https://github.com/broncowdd/respawn) ( /!\ last update: 2015) +- [Restya](http://restya.com) +- [Retroshare](http://retroshare.net/downloads.html) +- [SABnzbd](https://sabnzbd.org) - [ScenariChain-server](https://download.scenari.software/SCENARIchain-server/) +- [Scramble, Browser-based PGP web mail](https://github.com/dcposch/scramble) +- [Scribbleton](https://scribbleton.com) - [Scuttlebutt Pub](https://www.scuttlebutt.nz/contributing) -- [ShareLatex](https://www.sharelatex.com) / [github](https://github.com/overleaf/overleaf) -- [Shleuder](https://schleuder.org/) +- [ShareLatex](https://www.sharelatex.com) +- [Shleuder](http://schleuder2.nadir.org) +- [Simone](https://github.com/Kloadut/Simone) - [SocialHome](https://github.com/jaywink/socialhome) (Socialhome is best described as a federated personal profile with social networking functionality) (https://socialhome.network) -- [smokeping](https://packages.debian.org/buster/smokeping) / [github](https://github.com/oetiker/SmokePing) -- [Sonarr](https://sonarr.tv) / [github](https://github.com/Sonarr/Sonarr) -- [Stackedit](https://stackedit.io) / [github](https://github.com/benweet/stackedit) -- [StandardNotes](https://standardnotes.org) (a clean, simple, E2E-encrypted notes app) -- specifically, the server-side [StandardFile](https://standardfile.org) portion / [github](https://github.com/standardnotes/web) +- [Sonarr](https://sonarr.tv) +- [Stackedit](https://stackedit.io) +- [StandardNotes](https://standardnotes.org) (a clean, simple, E2E-encrypted notes app) -- specifically, the server-side [StandardFile](https://standardfile.org) portion. +- [Streama](https://github.com/dularion/streama) - [Streisand](https://github.com/jlund/streisand) - [Subspace](https://github.com/subspacecloud/subspace) (A simple WireGuard VPN server GUI) -- [Syspass](http://www.syspass.org/) / [github](https://github.com/nuxsmin/sysPass) -- [Taiga](https://taiga.io) / [github](https://github.com/taigaio/) -- [Taskwarrior](https://taskwarrior.org) / [github](https://github.com/GothenburgBitFactory/taskwarrior) -- [TMate](https://tmate.io/) / [github](https://github.com/tmate-io/tmate) +- [Syspass](http://www.syspass.org/) +- [Taiga](https://taiga.io) +- [Tania](http://gettania.org/) +- [Taskwarrior](https://taskwarrior.org) +- [TMate](https://tmate.io/) +- [TorChat](https://github.com/prof7bit/TorChat) +- [Torrent Tunes](https://github.com/tchoulihan/torrenttunes-client) +- [Total Respawn](https://github.com/broncowdd/TotalRespawn) - [Tracim](https://github.com/tracim/tracim) -- [Twister](http://twister.net.co) / [github](https://github.com/miguelfreitas/twister-core/) -- [TwitRSS.me](http://twitrss.me/) / [Github](https://github.com/ciderpunx/twitrssme) Scrapes Twitter to create RSS feeds. -- [Volumio](https://volumio.org) / [github](https://github.com/volumio) -- [WebODF](http://webodf.org) / [github](https://github.com/webodf/WebODF) -- [Wireguard](https://www.wireguard.com/) / [git](https://git.zx2c4.com/WireGuard/) -- [Xonotic](http://xonotic.org) / [gitlab](https://gitlab.com/xonotic) -- [YesWiki](https://yeswiki.net) / [github](https://github.com/YesWiki/yeswiki) +- [Twister](http://twister.net.co) +- [TwitRSS.me](http://twitrss.me/) ([Github](https://github.com/ciderpunx/twitrssme)) Scrapes Twitter to create RSS feeds. +- [Unvis](https://unv.is/) ([Github](https://github.com/lodjuret/unvis.it)) +- [Vaultier](http://www.vaultier.org) +- [Volumio](https://volumio.org) +- [Webmpc](https://github.com/ushis/webmpc) +- [WebODF](http://webodf.org) +- [webSync](http://furier.github.io/websync) +- [WebTorrent](https://github.com/feross/webtorrent) +- [Wisemapping](http://www.wisemapping.com) +- [Wireguard](https://www.wireguard.com/) +- [Xibo](https://github.com/xibosignage) +- [Xonotic](http://xonotic.org) +- [YesWiki](https://yeswiki.net) - [Zammad](https://github.com/zammad/zammad) - [ZeroTier](https://github.com/zerotier/ZeroTierOne) +- [ZNC](http://wiki.znc.in/ZNC) +- [Zone-project](https://github.com/descl/ZONE) - [Zoneminder](https://github.com/ZoneMinder/zoneminder) -- [Zulip](https://zulipchat.com/) / [github](https://github.com/zulip/zulip) +- [Zulip](https://zulipchat.com/) From 637ab2f7c625a8a8ef6b35c2e25a9d743146dbb8 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 2 Nov 2019 15:04:11 +0000 Subject: [PATCH 228/360] typo --- selfhosting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/selfhosting.md b/selfhosting.md index 8a6de915..1229e776 100644 --- a/selfhosting.md +++ b/selfhosting.md @@ -23,7 +23,7 @@ Why should you *not* host yourself ? - **Self-hosting requires some work and patience.** Hosting yourself is a bit like growing your own garden or vegetables: it requires work and patience. While YunoHost aims to do all the hard work for you, self-hosting still requires that you take time to learn and configure a few things to setup your server properly. You will also need to perform maintenance tasks (such as upgrades) from time to time, or to ask for support if some things break. -- **With great servers comes great responsibilities.** Operating a server means that you are responsible for the data you are hosting. Nobody will be able to recover them for you if they get lost. YunoHost provides backup features, which you should use regularly to backup the configurations and data you care about. You should also keep and eye on security news and recommendations so that your server or critical data don't get compromised. +- **With great servers comes great responsibilities.** Operating a server means that you are responsible for the data you are hosting. Nobody will be able to recover them for you if they get lost. YunoHost provides backup features, which you should use regularly to backup the configurations and data you care about. You should also keep an eye on security news and recommendations so that your server or critical data don't get compromised. - **Quality and performance probably won't be as good as premium services.** YunoHost (and most of the applications packaged for it) are free and open-source software, developed by communities of people in their free time and on the basis of best effort. There is no absolute guarantee that software will work in every possible circumstance. The performance of your self-hosted server is also related to its CPU and RAM, and to the available internet connectivity. From e60534fae3f0f7914b82250633d2ddd9044e2bc6 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 2 Nov 2019 15:04:26 +0000 Subject: [PATCH 229/360] Une toute petite correction d'accord. --- selfhosting_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/selfhosting_fr.md b/selfhosting_fr.md index 73ced063..0c4788b2 100644 --- a/selfhosting_fr.md +++ b/selfhosting_fr.md @@ -3,7 +3,7 @@ L'auto-hébergement L'auto-hébergement est le fait d'avoir et d'administrer son propre serveur, typiquement chez soi, pour héberger soi-même ses données personnelles et des services plutôt que de se reposer exclusivement sur des tiers. Par exemple, il est possible d'auto-héberger son blog de sorte qu'il "vive" dans une machine que vous contrôlez, au lieu qu'il soit sur l'ordinateur de quelqu'un d'autre (a.k.a. le Cloud) en échange d'argent, de publicités ou de données privées. -L'auto-hébergement implique de disposer d'un serveur. Un serveur est un ordinateur qui est destiné à être accessible sur le réseau en permanence, et n'a généralement pas d'écran ni de clavier puisqu'il est administré à distance. Contrairement à une croyance répandue, les serveurs ne sont pas nécessairement des machines énormes et extrêmement puissante : aujourd'hui, une petite carte ARM à ~30€ est adéquate pour de l'auto-hébergement. +L'auto-hébergement implique de disposer d'un serveur. Un serveur est un ordinateur qui est destiné à être accessible sur le réseau en permanence, et n'a généralement pas d'écran ni de clavier puisqu'il est administré à distance. Contrairement à une croyance répandue, les serveurs ne sont pas nécessairement des machines énormes et extrêmement puissantes: aujourd'hui, une petite carte ARM à ~30€ est adéquate pour de l'auto-hébergement. Pratiquer l'auto-hébergement ne rend pas "votre internet" plus sécurisé et ne fournit pas d'anonymat en tant que tel. L'objectif est généralement de pouvoir être autonome et au contrôle de ses services et de ses données - ce qui implique aussi d'en être responsable. From fdef41f0032fe8ef9dcaf6a0d81cab363a42031e Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 2 Nov 2019 15:04:38 +0000 Subject: [PATCH 230/360] Une petite correction orthographique. --- howtohostyourself_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/howtohostyourself_fr.md b/howtohostyourself_fr.md index 5785d604..a6627912 100644 --- a/howtohostyourself_fr.md +++ b/howtohostyourself_fr.md @@ -13,7 +13,7 @@ Vous pouvez vous héberger chez vous, sur une carte ARM ou un vieil ordinateur, Un VPN est un tunnel chiffré entre deux machines. En pratique, cela permet de faire "comme si" une machine était connectée depuis ailleurs. Ceci permet de s'auto-héberger à la maison tout en contournant les limitations du fournisseur d'accès internet. Voir aussi [le projet Brique Internet](https://labriqueinter.net/) et [la FFDN](https://www.ffdn.org/). -- **Avantages** : vous aurez un contrôle physique sur la machine, et le VPN permettra de cacher votre traffic vis-à-vis de votre FAI ainsi que de contourner ses limitations ; +- **Avantages** : vous aurez un contrôle physique sur la machine, et le VPN permettra de cacher votre trafic vis-à-vis de votre FAI ainsi que de contourner ses limitations ; - **Inconvénients** : il vous faudra payer des frais mensuels pour le VPN. ### Sur un serveur distant (VPS ou serveur dédié) From a9ead12d89401fac17748f30dfef4d7700391f24 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 2 Nov 2019 15:05:09 +0000 Subject: [PATCH 231/360] De petites corrections orthographiques. --- howtohostyourself_fr.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/howtohostyourself_fr.md b/howtohostyourself_fr.md index 5785d604..97360a88 100644 --- a/howtohostyourself_fr.md +++ b/howtohostyourself_fr.md @@ -13,7 +13,7 @@ Vous pouvez vous héberger chez vous, sur une carte ARM ou un vieil ordinateur, Un VPN est un tunnel chiffré entre deux machines. En pratique, cela permet de faire "comme si" une machine était connectée depuis ailleurs. Ceci permet de s'auto-héberger à la maison tout en contournant les limitations du fournisseur d'accès internet. Voir aussi [le projet Brique Internet](https://labriqueinter.net/) et [la FFDN](https://www.ffdn.org/). -- **Avantages** : vous aurez un contrôle physique sur la machine, et le VPN permettra de cacher votre traffic vis-à-vis de votre FAI ainsi que de contourner ses limitations ; +- **Avantages** : vous aurez un contrôle physique sur la machine, et le VPN permettra de cacher votre trafic vis-à-vis de votre FAI ainsi que de contourner ses limitations ; - **Inconvénients** : il vous faudra payer des frais mensuels pour le VPN. ### Sur un serveur distant (VPS ou serveur dédié) @@ -42,7 +42,7 @@ Vous pouvez louer un serveur privé virtuel ou une machine dédiée à des hébe </tr> <tr> <td style="text-align:center;">Coût mensuel</td> - <td style="text-align:center;" class="success">Negligeable<br><small>(electricité)</small></td> + <td style="text-align:center;" class="success">Négligeable<br><small>(electricité)</small></td> <td style="text-align:center;" class="warning">Autour de 5€ <br><small>(VPN)</small></td> <td style="text-align:center;" class="warning">À partir de ~3€ <br><small>(VPS)</small></td> </tr> @@ -71,13 +71,13 @@ Vous pouvez louer un serveur privé virtuel ou une machine dédiée à des hébe </tr> <tr> <td style="text-align:center;">RAM</td> - <td style="text-align:center;" class="warning" colspan="2">Generalement 500 Mo ou 1 Go</td> + <td style="text-align:center;" class="warning" colspan="2">Généralement 500 Mo ou 1 Go</td> <td style="text-align:center;" class="warning">En fonction du prix</td> </tr> <tr> <td style="text-align:center;">Connectivité internet</td> - <td style="text-align:center;" class="warning" colspan="2">Dépends de la connexion</td> - <td style="text-align:center;" class="success">Géneralement bonne</td> + <td style="text-align:center;" class="warning" colspan="2">Dépend de la connexion</td> + <td style="text-align:center;" class="success">Généralement bonne</td> </tr> </tbody> </table> From 41ee6a623c6f312851488cd7927161c91b0aaee8 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 2 Nov 2019 15:05:20 +0000 Subject: [PATCH 232/360] De petites corrections diverses. --- guidelines_fr.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/guidelines_fr.md b/guidelines_fr.md index 6083bc32..2cf70957 100644 --- a/guidelines_fr.md +++ b/guidelines_fr.md @@ -32,15 +32,15 @@ Ne faites pas ça. La réinstallation est une opération lourde et n'est pas une ## Faites des sauvegardes -Si vous hébergez des services et des données qui sont importants pour vos utilisateurs, il est important que vous mettiez en place une politique de sauvegarde. Les sauvegardes peuvent être facilement créées à partir de l'interface d'administration web - bien qu'elles ne puissent actuellement pas être téléchargées à partir de celle-ci (mais elles peuvent être téléchargées par d'autres moyens). Vous devez effectuer régulièrement des sauvegardes et les conserver dans un endroit sûr et physiquement différent de votre serveur. Plus d'infos dans [la documentation des sauvegardes](/backup) +Si vous hébergez des services et des données qui sont importants pour vos utilisateurs, il est important que vous mettiez en place une politique de sauvegarde. Les sauvegardes peuvent être facilement créées à partir de l'interface d'administration web - bien qu'elles ne puissent actuellement pas être téléchargées à partir de celle-ci (mais elles peuvent être téléchargées par d'autres moyens). Vous devez effectuer régulièrement des sauvegardes et les conserver dans un endroit sûr et physiquement différent de votre serveur. Plus d'infos dans [la documentation des sauvegardes](/backup). ## Lisez les emails envoyés à root -En tant qu'administrateur, vous devriez configurer un client de messagerie pour vérifier les e-mails envoyés à `root@your.domain.tld` (qui doit être un alias pour le premier utilisateur que vous avez ajouté) ou les transférer à une autre adresse que vous vérifiez activement. Ces courriels peuvent contenir des informations sur ce qu'il se passe sur votre serveur, comme les tâches périodiques automatisées. +En tant qu'administrateur, vous devriez configurer un client de messagerie pour vérifier les e-mails envoyés à `root@your.domain.tld` (qui doit être un alias pour le premier utilisateur que vous avez ajouté) ou les transférer à une autre adresse que vous vérifiez activement. Ces courriels peuvent contenir des informations sur ce qui se passe sur votre serveur, comme les tâches périodiques automatisées. ## YunoHost est un logiciel gratuit, maintenu par des bénévoles. -Enfin, gardez à l'esprit que YunoHost est un logiciel libre maintenu par des volontaires - et que le but de YunoHost (démocratiser l'auto-hébergement) n'est pas simple ! Le logiciel n'est fourni sans aucune garantie. L'équipe de bénévoles fait de son mieux pour maintenir et fournir la meilleure expérience possible - pourtant les fonctionnalités, les applications et YunoHost dans son ensemble sont loin d'être parfaits et vous ferez face tôt ou tard à de petit ou gros problèmes. Lorsque cela se produit, venez gentillement [demander de l'aide sur le chat ou le forum, ou signaler le problème](/help) :) ! +Enfin, gardez à l'esprit que YunoHost est un logiciel libre maintenu par des volontaires - et que le but de YunoHost (démocratiser l'auto-hébergement) n'est pas simple ! Le logiciel n'est fourni sans aucune garantie. L'équipe de bénévoles fait de son mieux pour maintenir et fournir la meilleure expérience possible - pourtant les fonctionnalités, les applications et YunoHost dans son ensemble sont loin d'être parfaits et vous ferez face tôt ou tard à de petit ou gros problèmes. Lorsque cela se produit, venez gentiment [demander de l'aide sur le chat ou le forum, ou signaler le problème](/help) :) ! Si vous aimez YunoHost et que vous voulez que le projet soit maintenu en vie et progresse, n'hésitez pas à laisser une note de remerciement et à [faire un don](https://liberapay.com/YunoHost) au projet et à en parler autour de vous ! From a9ef05aacb9376492916e1c919b0a563eaf62aaf Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 2 Nov 2019 15:05:29 +0000 Subject: [PATCH 233/360] De petites corrections diverses. --- ssh_fr.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ssh_fr.md b/ssh_fr.md index 68c9540f..fcb62dcf 100644 --- a/ssh_fr.md +++ b/ssh_fr.md @@ -2,7 +2,7 @@ ## Qu’est-ce que SSH ? -**SSH** est un acronyme 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 dans les terminaux de Linux et Mac OS / OSX. Sous Windows, il vous faudra utiliser le logiciel [MobaXterm](https://mobaxterm.mobatek.net/download-home-edition.html) (après l'avoir lancer, cliquer sur Session puis SSH). +**SSH** est un acronyme 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 dans les terminaux de Linux et Mac OS / OSX. Sous Windows, il vous faudra utiliser le logiciel [MobaXterm](https://mobaxterm.mobatek.net/download-home-edition.html) (après l'avoir lancé, cliquer sur Session puis SSH). ## Pendant l’installation de YunoHost @@ -28,7 +28,7 @@ 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. Si vous avez utilisé une image pré-installée (pour x86 ou cartes ARM), le password devrait être `yunohost`. <div class="alert alert-warning"> -Depuis YunoHost 3.4, après avoir effectué la postinstallation, il ne sera plus possible de se logguer avec l'utilisateur `root`. À la place, il vous faut **vous logguer avec l'utilisateur `admin` !**. Dans l'éventualité où le serveur LDAP serait cassé, rendant l'utilisateur `admin` inutilisable, vous devriez cependant pouvoir vous logguer avec l'utilisateur `root` depuis le réseau local. +Depuis YunoHost 3.4, après avoir effectué la postinstallation, il ne sera plus possible de se logguer avec l'utilisateur `root`. À la place, il vous faut **vous logguer avec l'utilisateur `admin` !** Dans l'éventualité où le serveur LDAP serait cassé, rendant l'utilisateur `admin` inutilisable, vous devriez cependant pouvoir vous logguer avec l'utilisateur `root` depuis le réseau local. </div> #### Changer le mot de passe root ! From b47678cf85aacc246ac94f29826fa1e8d14dbbbd Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 2 Nov 2019 15:05:38 +0000 Subject: [PATCH 234/360] Et encore de toutes petites corrections diverses. --- isp_box_config_fr.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/isp_box_config_fr.md b/isp_box_config_fr.md index 30e42fbb..866b38b0 100644 --- a/isp_box_config_fr.md +++ b/isp_box_config_fr.md @@ -1,6 +1,6 @@ # Configurer la redirection des ports -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. +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 œil à [cette page-ci](port_forwarding_fr). [Cette page-là](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. ### 0. Diagnostiquer les ports ouverts @@ -10,7 +10,7 @@ Une fois que vous aurez configuré la redirection, vous devriez pouvoir valider ### 1. Accéder à l'interface d'administration de votre box/routeur -L'interface d'administration est généralement accessible via http://192.168.0.1 ou http://192.168.1.1. +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). @@ -18,9 +18,9 @@ fournis par votre fournisseur d'accès internet (FAI). 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}'` + 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}'`. Une adresse IP locale ressemble généralement à `192.168.xx.yy`, ou `10.0.xx.yy`. From d1d732fa12163c0dd62cebc46d0bc36d5b9544fa Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 2 Nov 2019 15:05:48 +0000 Subject: [PATCH 235/360] De petites corrections diverses. --- users_fr.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/users_fr.md b/users_fr.md index 3b114f71..a3800f7d 100644 --- a/users_fr.md +++ b/users_fr.md @@ -15,14 +15,14 @@ Vous devriez faire attention à qui vous donnez l'accès à votre serveur. En te Le portail utilisateur, ou SSO ----------------------- -<center><img src="images/user_panel.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"></center> +<center><img src="images/home_panel.jpg" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"></center> Le portail utilisateur, également appelé SSO pour 'Single Sign On', permet à l'utilisateur de naviguer facilement entre les différentes applications auxquelles il a accès. En particulier, le terme 'Single Sign On' vient du fait que l'utilisateur n'a qu'à se connecter au portail pour être automatiquement connecté à toutes les applications qui nécessitent une authentification (ou du moins celles qui sont intégrées avec le SSO/LDAP, car cela est parfois techniquement compliqué ou pas possible du tout). Dans le portail, les utilisateurs peuvent également cliquer sur l'avatar en haut à gauche pour configurer d'autres paramètres tels que leur identité, les alias de messagerie, les transferts automatiques de courrier ou changer leur mot de passe. <div class="alert alert-info" markdown="1"> -Vous devez être conscient que le SSO ne peut être atteint que par le nom de domaine (i.e. `https://the.domain.tld/yunohost/sso`), et non pas en utilisant l'IP du serveur (i.e. `https://11.22.33.44/yunohost/sso`), contrairement à l'administrateur web ! C'est un peu déroutant dans certaines situations, mais est nécessaire pour des raisons techniques. Si vous êtes dans une situation où vous avez besoin d'accéder au SSO sans avoir votre DNS correctement configuré pour une raison quelconque, vous pouvez envisager de modifier votre `/etc/hosts` comme décrit dans [cette page](dns_local_nework). +Vous devez être conscient que le SSO ne peut être atteint que par le nom de domaine (i.e. `https://the.domain.tld/yunohost/sso`), et non pas en utilisant l'IP du serveur (i.e. `https://11.22.33.44/yunohost/sso`), contrairement à l'administrateur web ! C'est un peu déroutant dans certaines situations, mais c'est nécessaire pour des raisons techniques. Si vous êtes dans une situation où vous avez besoin d'accéder au SSO sans avoir votre DNS correctement configuré pour une raison quelconque, vous pouvez envisager de modifier votre `/etc/hosts` comme décrit dans [cette page](dns_local_nework). </div> Permissions d'accès aux applications From 378cc058c2dc4ae361ab6f5e4a395f1be89544f6 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 2 Nov 2019 15:05:57 +0000 Subject: [PATCH 236/360] De petites corrections diverses. --- apps_overview_fr.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps_overview_fr.md b/apps_overview_fr.md index 4050d256..bf396e31 100644 --- a/apps_overview_fr.md +++ b/apps_overview_fr.md @@ -1,7 +1,7 @@ Applications ============ -L'une des fonctionnalités principales de YunoHost est la possibilité d'installer facile des applications immédiatement utilisables. Pour donner des exemples d'application, il est possible d'installer un système de blog, un "cloud" (pour héberger et synchroniser des fichiers), un site web, un lecteur RSS, .... +L'une des fonctionnalités principales de YunoHost est la possibilité d'installer facilement des applications immédiatement utilisables. Pour donner des exemples d'application, il est possible d'installer un système de blog, un "cloud" (pour héberger et synchroniser des fichiers), un site web, un lecteur RSS, .... Les applications doivent être packagées manuellement par les packageurs/mainteneurs d'applications. Les applications peuvent être intégrées avec YunoHost pour gérer les mise à jour, la sauvegarde/restauration et l'intégration LDAP/SSO, entre autres. @@ -26,7 +26,7 @@ Des tests automatisés sont exécutés régulièrement pour tester l'intégratio Intégration LDAP / SSO ---------------------- -Les applications peuvent prendre en charge l'intégration avec le système LDAP / Single Sign On, de sorte que les utilisateurs qui se connectent au portail utilisateur peuvent être automatiquement authentifié sur toutes ces applications. Certaines applications ne le supportent pas car cette fonctionnalité n'est, soit pas implémentée en amont du logiciel de l'app, soit le mainteneur n'a pas encore travaillé sur cette partie. +Les applications peuvent prendre en charge l'intégration avec le système LDAP / Single Sign On, de sorte que les utilisateurs qui se connectent au portail utilisateur peuvent être automatiquement authentifiés sur toutes ces applications. Certaines applications ne le supportent pas car cette fonctionnalité n'est, soit pas implémentée en amont du logiciel de l'application, soit le mainteneur n'a pas encore travaillé sur cette partie. Applications multi-instances --------------------------- From 901bdcffc4efc2f701d986ee7d292ee67027dd1c Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 2 Nov 2019 15:07:36 +0000 Subject: [PATCH 237/360] Petites corrections/reformulations mineures. --- faq.md | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/faq.md b/faq.md index 7614f9cb..62781ad5 100644 --- a/faq.md +++ b/faq.md @@ -5,24 +5,24 @@ YunoHost packages are under free licenses GNU AGPL v.3. -YunoHost is based on Debian, so on licenses of Debian based elements. +YunoHost is based on Debian, so on Debian's components' licenses. -Applications and applications packages have their respectives licenses. +Applications and applications packages have their own licenses. -#### What is the goal of YunoHost? +#### What YunoHosts' goal? -We believe that decentralizing the Internet, and people taking back control and -responsability over their own data and services, is a crucial issue to guarantee +We believe that decentralizing the Internet, and empowering people to take control and +responsability back over their own data and services, is a crucial issue to guarantee a free and democratic society. The YunoHost project aims to democratize self-hosting. -It provides a software that aim to make it easy for people to run and -administrate their own server, with minimal knowledge and time required. +It provides a software that aims to make it easy for people to run and +administrate their own server, with minimal knowledge and required time. -#### But what does YunoHost *do* exactly? +#### But what does YunoHost exactly *do*? YunoHost may be called a distribution or an operating system, but it's actually "just" a simple layer added over the top of Debian, which does most of the hard @@ -31,28 +31,28 @@ work for you. For instance, if you wanted to install Wordpress, you would need to type a bunch of commands to create some users, setup a web server, setup a SQL server, download the wordpress archive, uncompress it, configure the web server, -configure the SQL database, and finally configure wordpress. YunoHost handle -the technical mess and "type all these commands for you", so that you can focus +configure the SQL database, and finally configure wordpress. YunoHost handles +the technical details and "types all these commands for you", so that you can focus on what really matters. More info on [this page](whatsyunohost) ! #### Can I host my own personnal website with YunoHost? -Yes ! Have a look at the [Custom Web app](https://github.com/YunoHost-Apps/my_webapp_ynh). +Yes! Have a look at the [Custom Web app](https://github.com/YunoHost-Apps/my_webapp_ynh). It provides an "empty shell" : after installing it, just upload your files (via SSH/SCP or SFTP) to the right location. You can have PHP and a SQL database if you need. -#### Can I host many independents websites with different domain names? +#### Can I host many independent websites with different domain names? -Yes ! YunoHost is multi-user and multi-domain. Some applications like *WordPress* or *Web App Multi Custom*, are multi-instances, which means that the application can be installed many times. +Yes! YunoHost is multi-user and multi-domain. Some applications like *WordPress* or *Web App Multi Custom*, are multi-instances, which means that the application can be installed many times. -#### Why can't I access to applications via the IP address? +#### Why can't I access applications via the IP address? -The [SSO](https://github.com/Kloadut/SSOwat/) (single sign-on) cannot properly authenticate users when they access your server with only its IP. If you really can't configure the DNS properly, you can temporarily work around it by [modifying the `hosts` file (last §)](dns_local_network_en) on your computer. +The [SSO](https://github.com/Kloadut/SSOwat/) (single sign-on) cannot properly authenticate users when they access your server with only its IP. If you really can't properly configure the DNS, you can temporarily work around it by [modifying the `hosts` file (last §)](dns_local_network_en) on your computer. #### What's YunoHost's business model? @@ -64,13 +64,13 @@ or stickers :P). Considering that a few contributors are investing a large amount of time in the project, we are thinking about ways to make the project sustainable. -This could be achieved via donations, public fundings, and a few contributors +This could be achieved via donations, crowdfunding, and a few contributors have professional activities related to YunoHost. -#### Can I make donations to the project? +#### Can I donate to the project? -Yes, you can ! YunoHost needs money to pay servers and domain names. We would +Yes, you can! YunoHost needs money to pay servers and domain names. We would also like contributors to be able to continue contributing rather than look for jobs elsewhere. @@ -98,17 +98,17 @@ and having some free time. Other than that, just doing what you can is already a It is described in [this document](yunohost_project_organization.md) :). -#### Will you port YunoHost to [insert favorite distro] ? +#### Will you port YunoHost to [insert favorite distro]? Short answer: No. We don't have the energy for it and this is irrelevant. <a data-toggle="collapse" data-target="#willyouportyunohost" href="#">Long answer</a> <div id="willyouportyunohost" class="collapse"> -<p>If you care about distrowars, or think 'Debian is dirty', you are not the public of YunoHost.</p> +<p>If you care about distrowars, or think 'Debian is dirty', then YunoHost is not for you.</p> -<p>YunoHost is aimed at non-tech people who just want their server to work. Debian has its flaws, but it's (one of?) the most widely known and used distribution for servers. It's stable. Most self-hosted softwares are one way or another compatible with Debian. It's easily hackable by anybody who's been doing a bit of CLI on their personal Ubuntu/Mint computer. There is no killer feature in other distributions that makes it relevant for YunoHost to switch or port it.</p> +<p>YunoHost is aimed at non-tech people who just want their server to work. Debian has its flaws, but it's (one of?) the most widely known and used distribution for servers. It's stable. Most self-hosted software are one way or another compatible with Debian. It's easily hackable by anybody who's been doing a bit of CLI on their personal Ubuntu/Mint computer. There is no killer feature in other distributions that makes it relevant for YunoHost to switch or port to it.</p> -<p>If this does not convince you, there are other projects running on other distributions or with different philosophy.</p> +<p>If this does not convince you, there are other projects running on other distributions or with different philosophies.</p> </div> @@ -127,5 +127,5 @@ Medium answer: Apps were packaged in .deb in the past. It was a nightmare. We're <p>YunoHost manipulates high-level abstractions (apps, domains, users, ...) and defines a standard setup (Nginx, Postfix, Metronome, SSOwat, ...) and, because of this, can handle the configuration for the user.</p> -<p>If you still think deb packages can be hacked to do this, see previous answers.</p> +<p>If you still think it's possible to handle everything by fiddling with .deb packages, see previous answers.</p> </div> From bce6ba10b338ec3a17fbe2b2f31f1dc0c6076db1 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 2 Nov 2019 15:07:54 +0000 Subject: [PATCH 238/360] ho tradotto la pagina della versione inglese. --- install_iso_it.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 install_iso_it.md diff --git a/install_iso_it.md b/install_iso_it.md new file mode 100644 index 00000000..dfec6cdd --- /dev/null +++ b/install_iso_it.md @@ -0,0 +1,37 @@ +# Installazione in un computer + +*Altri modi per installare YunoHost **[Clicca qui](/install_it)**.* + +### Requisiti + +<img src="/images/laptop.png" width=200> +<img src="/images/desktop.jpg"> +<img src="/images/nettop.jpg"> + +* Un computer con architettura x86: laptop, nettop, netbook, desktop. +Puoi usare qualsiasi computer con minimo 256mb di ram**. +* Un altro computer per leggere questa guida e per accedere al tuo server. +* un [buon ISP](/isp), possibilmente con una banda illimitata. +* una **chiavetta usb** da almeno 1gb **O** un classico **cd/dvd vuoto** +* ***casi particolari*** : se il tuo server non ha una scheda video, [prepara l'iso per fare il boot con la porta seriale}(https://github.com/luffah/debian-mkserialiso). + +--- + +## Installazione + + +<a class="btn btn-lg btn-default" href="/images">0. Scarica l'ISO di YunoHost</a> + +<a class="btn btn-lg btn-default" href="/burn_or_copy_iso">1. Scrivi l'immagine disco su una chiavetta usb</a> + +<a class="btn btn-lg btn-default" href="/boot_and_graphical_install">2. Accendi il computer facendo il boot da usb</a> + +<a class="btn btn-lg btn-default" href="/postinstall">3. Procedi con la prima configurazione (post-installation)</a> + +--- + +To connect directly to your computer or with [SSH](/ssh) (only on local network: +* User: **root** +* Password: **yunohost** + + From 68e312b2c0f1b8d2a16e35e0e19a7d1edb4ef052 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 2 Nov 2019 15:08:20 +0000 Subject: [PATCH 239/360] Added n8n.io to the list. --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index e4ddd122..ec19e465 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -79,6 +79,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [MPD](http://www.musicpd.org) - [MyBB](https://mybb.com/) / [github](https://github.com/mybb) - [Museek+](https://github.com/eLvErDe/museek-plus) +- [N8n.io](https://n8n.io) - [Netrunner](https://github.com/mtgred/netrunner) - [Nibbleblog](http://www.nibbleblog.com)/ [github](https://github.com/dignajar/nibbleblog) - [Nuage](https://nuage.kerjean.me/login) / [github](https://github.com/mickael-kerjean/filestash) From 4d85d86ba4fb3bfa8e2d6dbd65a82493341327c1 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 2 Nov 2019 15:10:58 +0000 Subject: [PATCH 240/360] Rajout de la ligne de code systemctl restart postfix --- isp_orange_fr.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/isp_orange_fr.md b/isp_orange_fr.md index 96c22706..56cabf4d 100644 --- a/isp_orange_fr.md +++ b/isp_orange_fr.md @@ -78,3 +78,8 @@ Si ils ne sont pas présents, installez-les : ```bash apt install libsasl2-modules sasl2-bin ``` + +Il est possible que postfix ne prenne pas en compte tout de suite vos modifications. Pour le forcer à le faire, exécutez +```bash +systemctl restart postfix +``` From 07116309592c7d23fc159029fb587d8798a8129b Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 2 Nov 2019 15:12:30 +0000 Subject: [PATCH 241/360] I added a line for Presentator (a FOSS UX design presentation and collaboration platform) app. --- apps_wishlist.md | 213 +++++++++++++++++++++++++++++++---------------- 1 file changed, 143 insertions(+), 70 deletions(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index e4ddd122..6157c2f3 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -11,126 +11,199 @@ The following list is a compiled wishlist of applications that would be nice-to- - [List of awesome Node.js projects](https://github.com/sqreen/awesome-nodejs-projects) - [List of SIP softwares/applications](https://en.wikipedia.org/wiki/List_of_SIP_software#Free_and_open-source_license) - [10er10](https://github.com/dready92/10er10) -- [Ajenti](http://ajenti.org) / [github](https://github.com/ajenti/ajenti/) -- [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. / [github](https://github.com/akaunting/akaunting) +- [Airtime](https://www.sourcefabric.org/en/airtime/) +- [Ajenti](http://ajenti.org) +- [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. +- [aMule](https://github.com/amule-project/amule) +- [Anki](https://github.com/dsnopek/anki-sync-server) is a powerful Open Source flashcard application, which helps you quickly and easily memorize facts over the long term utilizing a spaced repetition algorithm. - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) -- [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) / [github](https://github.com/Bitmessage/PyBitmessage) +- [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) +- [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) +- [Bitwarden](https://bitwarden.com/) - [Beehive](https://github.com/muesli/beehive) -- [Bludit](https://www.bludit.com) / [github](https://github.com/bludit/bludit) +- [Bludit](https://www.bludit.com) - [Blynk](https://github.com/blynkkk/blynk-library) -- [Bookstack](https://www.bookstackapp.com/) / [github](https://github.com/BookStackApp/BookStack) +- [Bookstack](https://www.bookstackapp.com/) +- [Browsepass](http://techualization.blogspot.de/2013/09/introducing-browsepass-keepass-on-web.html) - [btcpayserver](https://github.com/btcpayserver/btcpayserver) +- [Caisse Bliss](https://framagit.org/tykayn/caisse-bliss) +- [Candy](https://candy-chat.github.io/candy) +- [CardDavMate](https://www.inf-it.com/open-source/clients/carddavmate) - [cgit](http://git.zx2c4.com/cgit/about) -- [CheckUp](https://sourcegraph.github.io/checkup) / [github](https://github.com/sourcegraph/checkup) +- [CheckUp](https://sourcegraph.github.io/checkup) +- [Cloud torrent](https://github.com/jpillora/cloud-torrent) - [Cockpit](http://cockpit-project.org/) - [Commafeed](https://github.com/Athou/commafeed) -- [Converse.js](https://conversejs.org) / [github](https://github.com/jcbrand/converse.js) +- [Converse.js](https://conversejs.org) - [Cozy](https://github.com/cozy) +- [Cronkeep](https://github.com/cronkeep/cronkeep) - [Croodle](https://github.com/jelhan/croodle) Schedule a date or to do a poll on a general topics, with client-side encryption. +- [CumulusClips](http://cumulusclips.org) +- [Cyclos](https://www.cyclos.org) - [Darkwire.io](https://github.com/seripap/darkwire.io) +- [Deluge](http://deluge-torrent.org) (with WebUI) - [DirectoryLister](https://github.com/DirectoryLister/DirectoryLister) -- [eLabFTW](https://www.elabftw.net/) electronic lab notebook / [github](https://github.com/elabftw/elabftw) +- [DNSchain](https://github.com/okTurtles/dnschain) +- [eLabFTW](https://www.elabftw.net/) electronic lab notebook - [Emoncms](https://github.com/emoncms/emoncms) -- [ERPnext](https://erpnext.com/download) / [github](https://github.com/frappe/erpnext) -- [EteSync](https://www.etesync.com/) / [github](https://github.com/etesync) +- [ERPnext](https://erpnext.com/download) +- [EteSync](https://www.etesync.com/) +- [Ethersheet](https://github.com/ethersheet-collective/EtherSheet) +- [Fail2web](https://github.com/Sean-Der/fail2web) +- [Ferment](https://github.com/mmckegg/ferment) - [FEX](http://fex.rus.uni-stuttgart.de/) +- [FileTea](https://filetea.me) - [FitTrackee](https://github.com/SamR1/FitTrackee) +- [FlatPress](https://github.com/flatpressblog/flatpress) +- [Flarum](https://flarum.org/) +- [FoOlSlide](http://foolcode.github.io/FoOlSlide/) Open source comicbook/manga management software - [Fossil](http://www.fossil-scm.org) -- [WebThings Gateway](https://iot.mozilla.org/gateway/) [github](https://github.com/mozilla-iot/) -- [Geneweb](https://geneweb.tuxfamily.org) / [github](https://github.com/geneweb/geneweb) -- [GetSimple CMS](http://get-simple.info) / [github](https://github.com/GetSimpleCMS/GetSimpleCMS) -- [Goaccess](https://goaccess.io) Web log analyser (replaces piwik without js tracking scripts) / [github](https://github.com/allinurl/goaccess) +- [Framaslides](https://framagit.org/framasoft/framaslides/) +- [Gateway](https://iot.mozilla.org/gateway/) +- [Geneweb](https://geneweb.tuxfamily.org) +- [GetSimple CMS](http://get-simple.info) +- [Git-annex](http://git-annex.branchable.com) +- [Gitit](https://github.com/jgm/gitit) +- [Goaccess](https://goaccess.io) Web log analyser (replaces piwik without js tracking scripts) - [Gollum](https://github.com/gollum/gollum) - [Goploader](https://github.com/Depado/goploader) - [Granary](https://github.com/snarfed/granary) - [Guacamole](http://guac-dev.org) -- [Habitica](https://habitica.com/) / [github](https://github.com/HabitRPG/habitica) +- [Habitica](https://habitica.com/) - [HackMD CE](https://github.com/hackmdio/hackmd) +- [Hackpad](https://github.com/dropbox/hackpad) - [Helpy](https://github.com/helpyio/helpy) -- [Hexo](https://hexo.io/) / [github](https://github.com/hexojs/hexo) -- [Icecast 2](http://www.icecast.org) / [gitlab](https://gitlab.xiph.org/xiph/icecast-server/) +- [Hexo](https://hexo.io/) +- [Hi Buddy](https://github.com/tOkeshu/hibuddy) (/!\ last update: 17 Feb 2015) +- [Huginn](https://github.com/cantino/huginn) +- [Hugo](http://gohugo.io) +- [Icecast 2](http://www.icecast.org) - [ikiwiki](http://ikiwiki.info) +- [img.bi](https://github.com/imgbi/img.bi) +- [InfCloud](https://www.inf-it.com/open-source/clients/infcloud) - [Invidious](https://github.com/omarroth/invidious) -- [Invoice Ninja](https://www.invoiceninja.com) / [github](https://github.com/invoiceninja/invoiceninja) -- [InvoicePlane](https://invoiceplane.com) / [github](https://github.com/InvoicePlane/InvoicePlane) -- [IPFS](https://ipfs.io) / [github](https://github.com/ipfs/ipfs) -- [Joplin](http://joplin.cozic.net/) / [github](https://github.com/laurent22/joplin) +- [Invoice Ninja](https://www.invoiceninja.com) +- [InvoicePlane](https://invoiceplane.com) +- [IPFS](https://ipfs.io) +- [Joplin](http://joplin.cozic.net/) - [Jellyfin](https://github.com/jellyfin) -- [JS Bin](http://jsbin.com/help/2-second-setup) / [github](https://github.com/jsbin/) -- [Kiwix](http://www.kiwix.org/) Offline wikipedia / [github](https://github.com/kiwix/) -- [Known](https://withknown.com) / [github](https://github.com/idno/known) -- [Koel](http://koel.phanan.net) / [github](https://github.com/phanan/koel) -- [Kontalk](https://kontalk.org) / [github](https://github.com/kontalk) -- [Koozip](http://koozic.net) / [github](https://github.com/DocMarty84/koozic) +- [JS Bin](http://jsbin.com/help/2-second-setup) +- [Kaiwa](http://getkaiwa.com) +- [Kin calendar](https://github.com/KinToday) +- [Kinto](https://github.com/Kinto/formbuilder) +- [Kiwix](http://www.kiwix.org/) Offline wikipedia +- [Known](https://withknown.com) +- [Koel](http://koel.phanan.net) +- [Kontalk](https://kontalk.org) +- [Koozip](http://koozic.net) +- [KrISS feed](https://github.com/tontof/kriss_feed) +- [Koken](http://koken.me) +- [Kune](https://en.wikipedia.org/wiki/Kune_%28software%29) - [L'atelier](https://github.com/jbl2024/latelier) -- [Lessy](https://lessy.io) / [github](https://github.com/lessy-community/lessy) +- [Lessy](https://lessy.io) +- [LibreNews-Server](https://librenews.io) - [LibreOffice Online](https://wiki.documentfoundation.org/ReleaseNotes/5.3/fr#LibreOffice_Online) -- [LiquidSoap](http://savonet.sourceforge.net/) / [github](https://github.com/savonet/liquidsoap) +- [LiquidSoap](http://savonet.sourceforge.net/) - [LocomotiveCMS](https://github.com/locomotivecms/engine) -- [Loomio](https://www.loomio.org) / [github](https://github.com/loomio/loomio/) -- [MaidSafe](http://maidsafe.net) / [github](https://github.com/maidsafe) -- [Mailpile](https://www.mailpile.is) / [github](https://github.com/mailpile/Mailpile) -- [Mailtrain](https://mailtrain.org/) / [github](https://github.com/Mailtrain-org/mailtrain) +- [Logstalgia](http://logstalgia.io) +- [Loomio](https://www.loomio.org) +- [MagicMirror²](https://github.com/MichMich/MagicMirror) +- [MaidSafe](http://maidsafe.net) +- [Mailpile](https://www.mailpile.is) +- [Mailtrain](https://mailtrain.org/) - [Mautic](https://github.com/mautic/mautic) -- [microblog.pub](https://microblog.pub) / [github](https://github.com/tsileo/microblog.pub) -- [Mirakel](http://mirakel.azapps.de/taskwarrior.html) / [github](https://github.com/GothenburgBitFactory/taskwarrior) (/!\ SSL-Warning) -- [Modoboa](http://modoboa.org) / [github](https://github.com/modoboa/) +- [MediaCrush](https://github.com/MediaCrush/MediaCrush) (/!\ last update: Jan 23, 2015) +- [microblog.pub](https://microblog.pub) +- [MinigalNano](https://github.com/sebsauvage/MinigalNano) (/!\ last update: Jun 24, 2016) +- [Mirakel](http://mirakel.azapps.de/taskwarrior.html) (/!\ SSL-Warning) +- [Modoboa](http://modoboa.org) - [MotionEye](https://github.com/ccrisan/motioneye) - [MPD](http://www.musicpd.org) -- [MyBB](https://mybb.com/) / [github](https://github.com/mybb) +- [MyBB](https://mybb.com/) - [Museek+](https://github.com/eLvErDe/museek-plus) - [Netrunner](https://github.com/mtgred/netrunner) -- [Nibbleblog](http://www.nibbleblog.com)/ [github](https://github.com/dignajar/nibbleblog) -- [Nuage](https://nuage.kerjean.me/login) / [github](https://github.com/mickael-kerjean/filestash) +- [Nibbleblog](http://www.nibbleblog.com) +- [Nitter](https://github.com/zedeus/nitter) (Twitter front-end focused on privacy) +- [Nuage](https://nuage.kerjean.me/login) - [Ombi](https://github.com/tidusjar/Ombi) -- [OpenBazaar](https://openbazaar.org) / [github](https://github.com/openbazaar) -- [openHAB](https://www.openhab.org/) - Smart home platform. / [github](https://github.com/openhab) +- [OpenBazaar](https://openbazaar.org) +- [openHAB](https://www.openhab.org/) - Smart home platform. +- [OpenJabNab](https://github.com/OpenJabNab/OpenJabNab) (/!\ last update: Apr 30, 2016) - [OpenProject](https://github.com/opf/openproject) - [OpenSourceBilling](https://github.com/vteams/open-source-billing) -- [OX Open-Xchange](https://www.open-xchange.com) Linux groupware solution / [github](https://github.com/open-xchange/) +- [OX Open-Xchange](https://www.open-xchange.com) Linux groupware solution - [Paperless](https://github.com/danielquinn/paperless) - [Paperwork](http://paperwork.rocks) -- [Passbolt](https://www.passbolt.com) Passwords manager / [github](https://github.com/passbolt) -- [Pelias](https://github.com/pelias/pelias)) -- [PHPList](http://www.phplist.com) / [github](https://github.com/phpList) -- [Phraseanet](https://docs.phraseanet.com/3.8/fr/index.html#) / [github](https://github.com/alchemy-fr/Phraseanet-Docs) -- [Pico](http://picocms.org) / [github](https://github.com/picocms/Pico) +- [Passbolt](https://www.passbolt.com) Passwords manager +- [pdfy](https://github.com/joepie91/pdfy) (/!\ last update: Aug 5, 2014) +- [Pelias](https://github.com/pelias/pelias) +- [Peps](https://github.com/MLstate/PEPS) +- [PHPList](http://www.phplist.com) +- [PHProxy](http://sourceforge.net/projects/poxy) +- [Phraseanet](https://docs.phraseanet.com/3.8/fr/index.html#) +- [Pico](http://picocms.org) +- [Pix](http://pix.toile-libre.org) - [Playmaker](https://github.com/NoMore201/playmaker) +- [Presentator](https://presentator.io/) - [Privoxy](http://www.privoxy.org) - [ProcessMaker](http://www.processmaker.com) - [ProtonMail’s WebClient](https://github.com/ProtonMail/WebClient) +- [ProjeQtOr](https://www.projeqtor.org/en/product-en/downloads) - [PyLoad](https://github.com/pyload/pyload) -- [Pump.io](http://pump.io) / [github](https://github.com/pump-io/pump.io) +- [Pulse](https://source.ind.ie/project/pulse-swift/tree/master) +- [Pump.io](http://pump.io) - [qBittorrent](https://github.com/qbittorrent/qBittorrent) -- [racktables](http://racktables.org) / [github](https://github.com/RackTables/racktables) +- [racktables](http://racktables.org) +- [Race for the Galaxy](https://github.com/bnordli/rftg) - [Radarr](https://github.com/Radarr/Radarr) -- [Request Tracker](https://bestpractical.com) / [github](https://github.com/bestpractical/rt) -- [Restya](http://restya.com) / [github](https://github.com/RestyaPlatform/board/) -- [Retroshare](https://retroshare.cc/) / [github](https://github.com/RetroShare/RetroShare) +- [Redmine](https://www.redmine.org) +- [Request Tracker](https://bestpractical.com) +- [Respawn 2.0](https://github.com/broncowdd/respawn) ( /!\ last update: 2015) +- [Restya](http://restya.com) +- [Retroshare](http://retroshare.net/downloads.html) +- [SABnzbd](https://sabnzbd.org) +- [Samourai Dojo, Bitcoin coinjoin node] (https://github.com/Samourai-Wallet/samourai-dojo) - [ScenariChain-server](https://download.scenari.software/SCENARIchain-server/) +- [Scramble, Browser-based PGP web mail](https://github.com/dcposch/scramble) +- [Scribbleton](https://scribbleton.com) - [Scuttlebutt Pub](https://www.scuttlebutt.nz/contributing) -- [ShareLatex](https://www.sharelatex.com) / [github](https://github.com/overleaf/overleaf) -- [Shleuder](https://schleuder.org/) +- [ShareLatex](https://www.sharelatex.com) +- [Shleuder](http://schleuder2.nadir.org) +- [Simone](https://github.com/Kloadut/Simone) - [SocialHome](https://github.com/jaywink/socialhome) (Socialhome is best described as a federated personal profile with social networking functionality) (https://socialhome.network) -- [smokeping](https://packages.debian.org/buster/smokeping) / [github](https://github.com/oetiker/SmokePing) -- [Sonarr](https://sonarr.tv) / [github](https://github.com/Sonarr/Sonarr) -- [Stackedit](https://stackedit.io) / [github](https://github.com/benweet/stackedit) -- [StandardNotes](https://standardnotes.org) (a clean, simple, E2E-encrypted notes app) -- specifically, the server-side [StandardFile](https://standardfile.org) portion / [github](https://github.com/standardnotes/web) +- [Sonarr](https://sonarr.tv) +- [SpamGourmet](https://sourceforge.net/projects/spamgourmet/) +- [Stackedit](https://stackedit.io) +- [StandardNotes](https://standardnotes.org) (a clean, simple, E2E-encrypted notes app) -- specifically, the server-side [StandardFile](https://standardfile.org) portion. +- [Streama](https://github.com/dularion/streama) - [Streisand](https://github.com/jlund/streisand) - [Subspace](https://github.com/subspacecloud/subspace) (A simple WireGuard VPN server GUI) -- [Syspass](http://www.syspass.org/) / [github](https://github.com/nuxsmin/sysPass) -- [Taiga](https://taiga.io) / [github](https://github.com/taigaio/) -- [Taskwarrior](https://taskwarrior.org) / [github](https://github.com/GothenburgBitFactory/taskwarrior) -- [TMate](https://tmate.io/) / [github](https://github.com/tmate-io/tmate) +- [Syspass](http://www.syspass.org/) +- [Taiga](https://taiga.io) +- [Tania](http://gettania.org/) +- [Taskwarrior](https://taskwarrior.org) +- [TMate](https://tmate.io/) +- [TorChat](https://github.com/prof7bit/TorChat) +- [Torrent Tunes](https://github.com/tchoulihan/torrenttunes-client) +- [Total Respawn](https://github.com/broncowdd/TotalRespawn) - [Tracim](https://github.com/tracim/tracim) -- [Twister](http://twister.net.co) / [github](https://github.com/miguelfreitas/twister-core/) -- [TwitRSS.me](http://twitrss.me/) / [Github](https://github.com/ciderpunx/twitrssme) Scrapes Twitter to create RSS feeds. -- [Volumio](https://volumio.org) / [github](https://github.com/volumio) -- [WebODF](http://webodf.org) / [github](https://github.com/webodf/WebODF) -- [Wireguard](https://www.wireguard.com/) / [git](https://git.zx2c4.com/WireGuard/) -- [Xonotic](http://xonotic.org) / [gitlab](https://gitlab.com/xonotic) -- [YesWiki](https://yeswiki.net) / [github](https://github.com/YesWiki/yeswiki) +- [Twister](http://twister.net.co) +- [TwitRSS.me](http://twitrss.me/) ([Github](https://github.com/ciderpunx/twitrssme)) Scrapes Twitter to create RSS feeds. +- [Unvis](https://unv.is/) ([Github](https://github.com/lodjuret/unvis.it)) +- [Vaultier](http://www.vaultier.org) +- [Volumio](https://volumio.org) +- [Webmpc](https://github.com/ushis/webmpc) +- [WebODF](http://webodf.org) +- [webSync](http://furier.github.io/websync) +- [WebTorrent](https://github.com/feross/webtorrent) +- [Wisemapping](http://www.wisemapping.com) +- [Wireguard](https://www.wireguard.com/) +- [Xibo](https://github.com/xibosignage) +- [Xonotic](http://xonotic.org) +- [YesWiki](https://yeswiki.net) - [Zammad](https://github.com/zammad/zammad) - [ZeroTier](https://github.com/zerotier/ZeroTierOne) +- [ZNC](http://wiki.znc.in/ZNC) +- [Zone-project](https://github.com/descl/ZONE) - [Zoneminder](https://github.com/ZoneMinder/zoneminder) -- [Zulip](https://zulipchat.com/) / [github](https://github.com/zulip/zulip) +- [Zulip](https://zulipchat.com/) From 96bafc1cca9ead3e86e5a323c0c14926dbdb569d Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Sat, 2 Nov 2019 16:17:06 +0100 Subject: [PATCH 242/360] Fix Simone's mess --- apps_wishlist.md | 205 ++++++++++++++++------------------------------- 1 file changed, 71 insertions(+), 134 deletions(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index 7e3a1a69..3c4309a9 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -11,190 +11,127 @@ The following list is a compiled wishlist of applications that would be nice-to- - [List of awesome Node.js projects](https://github.com/sqreen/awesome-nodejs-projects) - [List of SIP softwares/applications](https://en.wikipedia.org/wiki/List_of_SIP_software#Free_and_open-source_license) - [10er10](https://github.com/dready92/10er10) -- [Airtime](https://www.sourcefabric.org/en/airtime/) -- [Ajenti](http://ajenti.org) -- [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. -- [aMule](https://github.com/amule-project/amule) -- [Anki](https://github.com/tsudoko/anki-sync-server) +- [Ajenti](http://ajenti.org) / [github](https://github.com/ajenti/ajenti/) +- [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. / [github](https://github.com/akaunting/akaunting) - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) -- [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) -- [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) -- [Bitwarden](https://bitwarden.com/) +- [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) / [github](https://github.com/Bitmessage/PyBitmessage) - [Beehive](https://github.com/muesli/beehive) -- [Bludit](https://www.bludit.com) +- [Bludit](https://www.bludit.com) / [github](https://github.com/bludit/bludit) - [Blynk](https://github.com/blynkkk/blynk-library) -- [Bookstack](https://www.bookstackapp.com/) -- [Browsepass](http://techualization.blogspot.de/2013/09/introducing-browsepass-keepass-on-web.html) +- [Bookstack](https://www.bookstackapp.com/) / [github](https://github.com/BookStackApp/BookStack) - [btcpayserver](https://github.com/btcpayserver/btcpayserver) -- [Candy](https://candy-chat.github.io/candy) -- [CardDavMate](https://www.inf-it.com/open-source/clients/carddavmate) - [cgit](http://git.zx2c4.com/cgit/about) -- [CheckUp](https://sourcegraph.github.io/checkup) -- [Cloud torrent](https://github.com/jpillora/cloud-torrent) +- [CheckUp](https://sourcegraph.github.io/checkup) / [github](https://github.com/sourcegraph/checkup) - [Cockpit](http://cockpit-project.org/) - [Commafeed](https://github.com/Athou/commafeed) -- [Converse.js](https://conversejs.org) +- [Converse.js](https://conversejs.org) / [github](https://github.com/jcbrand/converse.js) - [Cozy](https://github.com/cozy) -- [Cronkeep](https://github.com/cronkeep/cronkeep) - [Croodle](https://github.com/jelhan/croodle) Schedule a date or to do a poll on a general topics, with client-side encryption. -- [CumulusClips](http://cumulusclips.org) -- [Cyclos](https://www.cyclos.org) - [Darkwire.io](https://github.com/seripap/darkwire.io) -- [Deluge](http://deluge-torrent.org) (with WebUI) - [DirectoryLister](https://github.com/DirectoryLister/DirectoryLister) -- [DNSchain](https://github.com/okTurtles/dnschain) -- [eLabFTW](https://www.elabftw.net/) electronic lab notebook +- [eLabFTW](https://www.elabftw.net/) electronic lab notebook / [github](https://github.com/elabftw/elabftw) - [Emoncms](https://github.com/emoncms/emoncms) -- [ERPnext](https://erpnext.com/download) -- [EteSync](https://www.etesync.com/) -- [Ethersheet](https://github.com/ethersheet-collective/EtherSheet) -- [Fail2web](https://github.com/Sean-Der/fail2web) -- [Ferment](https://github.com/mmckegg/ferment) +- [ERPnext](https://erpnext.com/download) / [github](https://github.com/frappe/erpnext) +- [EteSync](https://www.etesync.com/) / [github](https://github.com/etesync) - [FEX](http://fex.rus.uni-stuttgart.de/) -- [FileTea](https://filetea.me) - [FitTrackee](https://github.com/SamR1/FitTrackee) -- [FlatPress](https://github.com/flatpressblog/flatpress) -- [FoOlSlide](http://foolcode.github.io/FoOlSlide/) Open source comicbook/manga management software - [Fossil](http://www.fossil-scm.org) -- [Framaslides](https://framagit.org/framasoft/framaslides/) -- [Gateway](https://iot.mozilla.org/gateway/) -- [Geneweb](https://geneweb.tuxfamily.org) -- [GetSimple CMS](http://get-simple.info) -- [Git-annex](http://git-annex.branchable.com) -- [Gitit](https://github.com/jgm/gitit) -- [Goaccess](https://goaccess.io) Web log analyser (replaces piwik without js tracking scripts) +- [WebThings Gateway](https://iot.mozilla.org/gateway/) [github](https://github.com/mozilla-iot/) +- [Geneweb](https://geneweb.tuxfamily.org) / [github](https://github.com/geneweb/geneweb) +- [GetSimple CMS](http://get-simple.info) / [github](https://github.com/GetSimpleCMS/GetSimpleCMS) +- [Goaccess](https://goaccess.io) Web log analyser (replaces piwik without js tracking scripts) / [github](https://github.com/allinurl/goaccess) - [Gollum](https://github.com/gollum/gollum) - [Goploader](https://github.com/Depado/goploader) - [Granary](https://github.com/snarfed/granary) - [Guacamole](http://guac-dev.org) -- [Habitica](https://habitica.com/) +- [Habitica](https://habitica.com/) / [github](https://github.com/HabitRPG/habitica) - [HackMD CE](https://github.com/hackmdio/hackmd) -- [Hackpad](https://github.com/dropbox/hackpad) - [Helpy](https://github.com/helpyio/helpy) -- [Hexo](https://hexo.io/) -- [Hi Buddy](https://github.com/tOkeshu/hibuddy) (/!\ last update: 17 Feb 2015) -- [Huginn](https://github.com/cantino/huginn) -- [Hugo](http://gohugo.io) -- [Icecast 2](http://www.icecast.org) +- [Hexo](https://hexo.io/) / [github](https://github.com/hexojs/hexo) +- [Icecast 2](http://www.icecast.org) / [gitlab](https://gitlab.xiph.org/xiph/icecast-server/) - [ikiwiki](http://ikiwiki.info) -- [img.bi](https://github.com/imgbi/img.bi) -- [InfCloud](https://www.inf-it.com/open-source/clients/infcloud) - [Invidious](https://github.com/omarroth/invidious) -- [Invoice Ninja](https://www.invoiceninja.com) -- [InvoicePlane](https://invoiceplane.com) -- [IPFS](https://ipfs.io) -- [Joplin](http://joplin.cozic.net/) +- [Invoice Ninja](https://www.invoiceninja.com) / [github](https://github.com/invoiceninja/invoiceninja) +- [InvoicePlane](https://invoiceplane.com) / [github](https://github.com/InvoicePlane/InvoicePlane) +- [IPFS](https://ipfs.io) / [github](https://github.com/ipfs/ipfs) +- [Joplin](http://joplin.cozic.net/) / [github](https://github.com/laurent22/joplin) - [Jellyfin](https://github.com/jellyfin) -- [JS Bin](http://jsbin.com/help/2-second-setup) -- [Kaiwa](http://getkaiwa.com) -- [Kin calendar](https://github.com/KinToday) -- [Kinto](https://github.com/Kinto/formbuilder) -- [Kiwix](http://www.kiwix.org/) Offline wikipedia -- [Known](https://withknown.com) -- [Koel](http://koel.phanan.net) -- [Kontalk](https://kontalk.org) -- [Koozip](http://koozic.net) -- [KrISS feed](https://github.com/tontof/kriss_feed) -- [Koken](http://koken.me) -- [Kune](https://en.wikipedia.org/wiki/Kune_%28software%29) +- [JS Bin](http://jsbin.com/help/2-second-setup) / [github](https://github.com/jsbin/) +- [Kiwix](http://www.kiwix.org/) Offline wikipedia / [github](https://github.com/kiwix/) +- [Known](https://withknown.com) / [github](https://github.com/idno/known) +- [Koel](http://koel.phanan.net) / [github](https://github.com/phanan/koel) +- [Kontalk](https://kontalk.org) / [github](https://github.com/kontalk) +- [Koozip](http://koozic.net) / [github](https://github.com/DocMarty84/koozic) - [L'atelier](https://github.com/jbl2024/latelier) -- [Lessy](https://lessy.io) -- [LibreNews-Server](https://librenews.io) +- [Lessy](https://lessy.io) / [github](https://github.com/lessy-community/lessy) - [LibreOffice Online](https://wiki.documentfoundation.org/ReleaseNotes/5.3/fr#LibreOffice_Online) -- [LiquidSoap](http://savonet.sourceforge.net/) +- [LiquidSoap](http://savonet.sourceforge.net/) / [github](https://github.com/savonet/liquidsoap) - [LocomotiveCMS](https://github.com/locomotivecms/engine) -- [Logstalgia](http://logstalgia.io) -- [Loomio](https://www.loomio.org) -- [MaidSafe](http://maidsafe.net) -- [Mailpile](https://www.mailpile.is) +- [Loomio](https://www.loomio.org) / [github](https://github.com/loomio/loomio/) +- [MaidSafe](http://maidsafe.net) / [github](https://github.com/maidsafe) +- [Mailpile](https://www.mailpile.is) / [github](https://github.com/mailpile/Mailpile) +- [Mailtrain](https://mailtrain.org/) / [github](https://github.com/Mailtrain-org/mailtrain) - [Mautic](https://github.com/mautic/mautic) -- [MediaCrush](https://github.com/MediaCrush/MediaCrush) (/!\ last update: Jan 23, 2015) -- [microblog.pub](https://microblog.pub) -- [MinigalNano](https://github.com/sebsauvage/MinigalNano) (/!\ last update: Jun 24, 2016) -- [Mirakel](http://mirakel.azapps.de/taskwarrior.html) (/!\ SSL-Warning) -- [Modoboa](http://modoboa.org) +- [microblog.pub](https://microblog.pub) / [github](https://github.com/tsileo/microblog.pub) +- [Mirakel](http://mirakel.azapps.de/taskwarrior.html) / [github](https://github.com/GothenburgBitFactory/taskwarrior) (/!\ SSL-Warning) +- [Modoboa](http://modoboa.org) / [github](https://github.com/modoboa/) - [MotionEye](https://github.com/ccrisan/motioneye) - [MPD](http://www.musicpd.org) -- [MyBB](https://mybb.com/) +- [MyBB](https://mybb.com/) / [github](https://github.com/mybb) - [Museek+](https://github.com/eLvErDe/museek-plus) - [Netrunner](https://github.com/mtgred/netrunner) -- [Nibbleblog](http://www.nibbleblog.com) -- [Nuage](https://nuage.kerjean.me/login) +- [Nibbleblog](http://www.nibbleblog.com)/ [github](https://github.com/dignajar/nibbleblog) +- [Nuage](https://nuage.kerjean.me/login) / [github](https://github.com/mickael-kerjean/filestash) - [Ombi](https://github.com/tidusjar/Ombi) -- [OpenBazaar](https://openbazaar.org) -- [openHAB](https://www.openhab.org/) - Smart home platform. -- [OpenJabNab](https://github.com/OpenJabNab/OpenJabNab) (/!\ last update: Apr 30, 2016) +- [OpenBazaar](https://openbazaar.org) / [github](https://github.com/openbazaar) +- [openHAB](https://www.openhab.org/) - Smart home platform. / [github](https://github.com/openhab) - [OpenProject](https://github.com/opf/openproject) - [OpenSourceBilling](https://github.com/vteams/open-source-billing) -- [OX Open-Xchange](https://www.open-xchange.com) Linux groupware solution +- [OX Open-Xchange](https://www.open-xchange.com) Linux groupware solution / [github](https://github.com/open-xchange/) - [Paperless](https://github.com/danielquinn/paperless) - [Paperwork](http://paperwork.rocks) -- [Passbolt](https://www.passbolt.com) Passwords manager -- [pdfy](https://github.com/joepie91/pdfy) (/!\ last update: Aug 5, 2014) -- [Pelias](https://github.com/pelias/pelias) -- [Peps](https://github.com/MLstate/PEPS) -- [PHPList](http://www.phplist.com) -- [PHProxy](http://sourceforge.net/projects/poxy) -- [Phraseanet](https://docs.phraseanet.com/3.8/fr/index.html#) -- [Pico](http://picocms.org) -- [Pix](http://pix.toile-libre.org) +- [Passbolt](https://www.passbolt.com) Passwords manager / [github](https://github.com/passbolt) +- [Pelias](https://github.com/pelias/pelias)) +- [PHPList](http://www.phplist.com) / [github](https://github.com/phpList) +- [Phraseanet](https://docs.phraseanet.com/3.8/fr/index.html#) / [github](https://github.com/alchemy-fr/Phraseanet-Docs) +- [Pico](http://picocms.org) / [github](https://github.com/picocms/Pico) - [Playmaker](https://github.com/NoMore201/playmaker) - [Privoxy](http://www.privoxy.org) - [ProcessMaker](http://www.processmaker.com) - [ProtonMail’s WebClient](https://github.com/ProtonMail/WebClient) - [PyLoad](https://github.com/pyload/pyload) -- [Pulse](https://source.ind.ie/project/pulse-swift/tree/master) -- [Pump.io](http://pump.io) +- [Pump.io](http://pump.io) / [github](https://github.com/pump-io/pump.io) - [qBittorrent](https://github.com/qbittorrent/qBittorrent) -- [racktables](http://racktables.org) -- [Race for the Galaxy](https://github.com/bnordli/rftg) +- [racktables](http://racktables.org) / [github](https://github.com/RackTables/racktables) - [Radarr](https://github.com/Radarr/Radarr) -- [Redmine](https://www.redmine.org) -- [Request Tracker](https://bestpractical.com) -- [Respawn 2.0](https://github.com/broncowdd/respawn) ( /!\ last update: 2015) -- [Restya](http://restya.com) -- [Retroshare](http://retroshare.net/downloads.html) -- [SABnzbd](https://sabnzbd.org) +- [Request Tracker](https://bestpractical.com) / [github](https://github.com/bestpractical/rt) +- [Restya](http://restya.com) / [github](https://github.com/RestyaPlatform/board/) +- [Retroshare](https://retroshare.cc/) / [github](https://github.com/RetroShare/RetroShare) - [ScenariChain-server](https://download.scenari.software/SCENARIchain-server/) -- [Scramble, Browser-based PGP web mail](https://github.com/dcposch/scramble) -- [Scribbleton](https://scribbleton.com) - [Scuttlebutt Pub](https://www.scuttlebutt.nz/contributing) -- [ShareLatex](https://www.sharelatex.com) -- [Shleuder](http://schleuder2.nadir.org) -- [Simone](https://github.com/Kloadut/Simone) +- [ShareLatex](https://www.sharelatex.com) / [github](https://github.com/overleaf/overleaf) +- [Shleuder](https://schleuder.org/) - [SocialHome](https://github.com/jaywink/socialhome) (Socialhome is best described as a federated personal profile with social networking functionality) (https://socialhome.network) -- [Sonarr](https://sonarr.tv) -- [Stackedit](https://stackedit.io) -- [StandardNotes](https://standardnotes.org) (a clean, simple, E2E-encrypted notes app) -- specifically, the server-side [StandardFile](https://standardfile.org) portion. -- [Streama](https://github.com/dularion/streama) +- [smokeping](https://packages.debian.org/buster/smokeping) / [github](https://github.com/oetiker/SmokePing) +- [Sonarr](https://sonarr.tv) / [github](https://github.com/Sonarr/Sonarr) +- [Stackedit](https://stackedit.io) / [github](https://github.com/benweet/stackedit) +- [StandardNotes](https://standardnotes.org) (a clean, simple, E2E-encrypted notes app) -- specifically, the server-side [StandardFile](https://standardfile.org) portion / [github](https://github.com/standardnotes/web) - [Streisand](https://github.com/jlund/streisand) - [Subspace](https://github.com/subspacecloud/subspace) (A simple WireGuard VPN server GUI) -- [Syspass](http://www.syspass.org/) -- [Taiga](https://taiga.io) -- [Tania](http://gettania.org/) -- [Taskwarrior](https://taskwarrior.org) -- [TMate](https://tmate.io/) -- [TorChat](https://github.com/prof7bit/TorChat) -- [Torrent Tunes](https://github.com/tchoulihan/torrenttunes-client) -- [Total Respawn](https://github.com/broncowdd/TotalRespawn) +- [Syspass](http://www.syspass.org/) / [github](https://github.com/nuxsmin/sysPass) +- [Taiga](https://taiga.io) / [github](https://github.com/taigaio/) +- [Taskwarrior](https://taskwarrior.org) / [github](https://github.com/GothenburgBitFactory/taskwarrior) +- [TMate](https://tmate.io/) / [github](https://github.com/tmate-io/tmate) - [Tracim](https://github.com/tracim/tracim) -- [Twister](http://twister.net.co) -- [TwitRSS.me](http://twitrss.me/) ([Github](https://github.com/ciderpunx/twitrssme)) Scrapes Twitter to create RSS feeds. -- [Unvis](https://unv.is/) ([Github](https://github.com/lodjuret/unvis.it)) -- [Vaultier](http://www.vaultier.org) -- [Volumio](https://volumio.org) -- [Webmpc](https://github.com/ushis/webmpc) -- [WebODF](http://webodf.org) -- [webSync](http://furier.github.io/websync) -- [WebTorrent](https://github.com/feross/webtorrent) -- [Wisemapping](http://www.wisemapping.com) -- [Wireguard](https://www.wireguard.com/) -- [Xibo](https://github.com/xibosignage) -- [Xonotic](http://xonotic.org) -- [YesWiki](https://yeswiki.net) +- [Twister](http://twister.net.co) / [github](https://github.com/miguelfreitas/twister-core/) +- [TwitRSS.me](http://twitrss.me/) / [Github](https://github.com/ciderpunx/twitrssme) Scrapes Twitter to create RSS feeds. +- [Volumio](https://volumio.org) / [github](https://github.com/volumio) +- [WebODF](http://webodf.org) / [github](https://github.com/webodf/WebODF) +- [Wireguard](https://www.wireguard.com/) / [git](https://git.zx2c4.com/WireGuard/) +- [Xibo](https://github.com/xibosignage) - A FLOSS digital signage solution (CMS?) +- [Xonotic](http://xonotic.org) / [gitlab](https://gitlab.com/xonotic) +- [YesWiki](https://yeswiki.net) / [github](https://github.com/YesWiki/yeswiki) - [Zammad](https://github.com/zammad/zammad) - [ZeroTier](https://github.com/zerotier/ZeroTierOne) -- [ZNC](http://wiki.znc.in/ZNC) -- [Zone-project](https://github.com/descl/ZONE) - [Zoneminder](https://github.com/ZoneMinder/zoneminder) -- [Zulip](https://zulipchat.com/) +- [Zulip](https://zulipchat.com/) / [github](https://github.com/zulip/zulip) From 370e220ac151fe4e9e9c8513632445f05f146d59 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Sat, 2 Nov 2019 16:23:38 +0100 Subject: [PATCH 243/360] Fix simone's mess --- users_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/users_fr.md b/users_fr.md index a3800f7d..11262b13 100644 --- a/users_fr.md +++ b/users_fr.md @@ -15,7 +15,7 @@ Vous devriez faire attention à qui vous donnez l'accès à votre serveur. En te Le portail utilisateur, ou SSO ----------------------- -<center><img src="images/home_panel.jpg" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"></center> +<center><img src="images/user_panel.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"></center> Le portail utilisateur, également appelé SSO pour 'Single Sign On', permet à l'utilisateur de naviguer facilement entre les différentes applications auxquelles il a accès. En particulier, le terme 'Single Sign On' vient du fait que l'utilisateur n'a qu'à se connecter au portail pour être automatiquement connecté à toutes les applications qui nécessitent une authentification (ou du moins celles qui sont intégrées avec le SSO/LDAP, car cela est parfois techniquement compliqué ou pas possible du tout). From 04f6709d1c99e15ffda82429311f86ff940a8413 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Sat, 2 Nov 2019 16:32:14 +0100 Subject: [PATCH 244/360] Fix Simone's mess --- apps_wishlist.md | 216 ++++++++++++++++------------------------------- 1 file changed, 73 insertions(+), 143 deletions(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index 6157c2f3..cb9d06b5 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -11,199 +11,129 @@ The following list is a compiled wishlist of applications that would be nice-to- - [List of awesome Node.js projects](https://github.com/sqreen/awesome-nodejs-projects) - [List of SIP softwares/applications](https://en.wikipedia.org/wiki/List_of_SIP_software#Free_and_open-source_license) - [10er10](https://github.com/dready92/10er10) -- [Airtime](https://www.sourcefabric.org/en/airtime/) -- [Ajenti](http://ajenti.org) -- [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. -- [aMule](https://github.com/amule-project/amule) -- [Anki](https://github.com/dsnopek/anki-sync-server) is a powerful Open Source flashcard application, which helps you quickly and easily memorize facts over the long term utilizing a spaced repetition algorithm. +- [Ajenti](http://ajenti.org) / [github](https://github.com/ajenti/ajenti/) +- [Akaunting](https://akaunting.com) Everything you need to manage your finances. Keep track of all of your payments, invoices, expenses, etc. / [github](https://github.com/akaunting/akaunting) - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) -- [Autoblog](https://github.com/mitsukarenai/Projet-Autoblog) (/!\ last update: Jan 27, 2015) -- [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) -- [Bitwarden](https://bitwarden.com/) +- [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) / [github](https://github.com/Bitmessage/PyBitmessage) - [Beehive](https://github.com/muesli/beehive) -- [Bludit](https://www.bludit.com) +- [Bludit](https://www.bludit.com) / [github](https://github.com/bludit/bludit) - [Blynk](https://github.com/blynkkk/blynk-library) -- [Bookstack](https://www.bookstackapp.com/) -- [Browsepass](http://techualization.blogspot.de/2013/09/introducing-browsepass-keepass-on-web.html) +- [Bookstack](https://www.bookstackapp.com/) / [github](https://github.com/BookStackApp/BookStack) - [btcpayserver](https://github.com/btcpayserver/btcpayserver) -- [Caisse Bliss](https://framagit.org/tykayn/caisse-bliss) -- [Candy](https://candy-chat.github.io/candy) -- [CardDavMate](https://www.inf-it.com/open-source/clients/carddavmate) - [cgit](http://git.zx2c4.com/cgit/about) -- [CheckUp](https://sourcegraph.github.io/checkup) -- [Cloud torrent](https://github.com/jpillora/cloud-torrent) +- [CheckUp](https://sourcegraph.github.io/checkup) / [github](https://github.com/sourcegraph/checkup) - [Cockpit](http://cockpit-project.org/) - [Commafeed](https://github.com/Athou/commafeed) -- [Converse.js](https://conversejs.org) +- [Converse.js](https://conversejs.org) / [github](https://github.com/jcbrand/converse.js) - [Cozy](https://github.com/cozy) -- [Cronkeep](https://github.com/cronkeep/cronkeep) - [Croodle](https://github.com/jelhan/croodle) Schedule a date or to do a poll on a general topics, with client-side encryption. -- [CumulusClips](http://cumulusclips.org) -- [Cyclos](https://www.cyclos.org) - [Darkwire.io](https://github.com/seripap/darkwire.io) -- [Deluge](http://deluge-torrent.org) (with WebUI) - [DirectoryLister](https://github.com/DirectoryLister/DirectoryLister) -- [DNSchain](https://github.com/okTurtles/dnschain) -- [eLabFTW](https://www.elabftw.net/) electronic lab notebook +- [eLabFTW](https://www.elabftw.net/) electronic lab notebook / [github](https://github.com/elabftw/elabftw) - [Emoncms](https://github.com/emoncms/emoncms) -- [ERPnext](https://erpnext.com/download) -- [EteSync](https://www.etesync.com/) -- [Ethersheet](https://github.com/ethersheet-collective/EtherSheet) -- [Fail2web](https://github.com/Sean-Der/fail2web) -- [Ferment](https://github.com/mmckegg/ferment) +- [ERPnext](https://erpnext.com/download) / [github](https://github.com/frappe/erpnext) +- [EteSync](https://www.etesync.com/) / [github](https://github.com/etesync) - [FEX](http://fex.rus.uni-stuttgart.de/) -- [FileTea](https://filetea.me) - [FitTrackee](https://github.com/SamR1/FitTrackee) -- [FlatPress](https://github.com/flatpressblog/flatpress) -- [Flarum](https://flarum.org/) -- [FoOlSlide](http://foolcode.github.io/FoOlSlide/) Open source comicbook/manga management software - [Fossil](http://www.fossil-scm.org) -- [Framaslides](https://framagit.org/framasoft/framaslides/) -- [Gateway](https://iot.mozilla.org/gateway/) -- [Geneweb](https://geneweb.tuxfamily.org) -- [GetSimple CMS](http://get-simple.info) -- [Git-annex](http://git-annex.branchable.com) -- [Gitit](https://github.com/jgm/gitit) -- [Goaccess](https://goaccess.io) Web log analyser (replaces piwik without js tracking scripts) +- [WebThings Gateway](https://iot.mozilla.org/gateway/) [github](https://github.com/mozilla-iot/) +- [Geneweb](https://geneweb.tuxfamily.org) / [github](https://github.com/geneweb/geneweb) +- [GetSimple CMS](http://get-simple.info) / [github](https://github.com/GetSimpleCMS/GetSimpleCMS) +- [Goaccess](https://goaccess.io) Web log analyser (replaces piwik without js tracking scripts) / [github](https://github.com/allinurl/goaccess) - [Gollum](https://github.com/gollum/gollum) - [Goploader](https://github.com/Depado/goploader) - [Granary](https://github.com/snarfed/granary) - [Guacamole](http://guac-dev.org) -- [Habitica](https://habitica.com/) +- [Habitica](https://habitica.com/) / [github](https://github.com/HabitRPG/habitica) - [HackMD CE](https://github.com/hackmdio/hackmd) -- [Hackpad](https://github.com/dropbox/hackpad) - [Helpy](https://github.com/helpyio/helpy) -- [Hexo](https://hexo.io/) -- [Hi Buddy](https://github.com/tOkeshu/hibuddy) (/!\ last update: 17 Feb 2015) -- [Huginn](https://github.com/cantino/huginn) -- [Hugo](http://gohugo.io) -- [Icecast 2](http://www.icecast.org) +- [Hexo](https://hexo.io/) / [github](https://github.com/hexojs/hexo) +- [Icecast 2](http://www.icecast.org) / [gitlab](https://gitlab.xiph.org/xiph/icecast-server/) - [ikiwiki](http://ikiwiki.info) -- [img.bi](https://github.com/imgbi/img.bi) -- [InfCloud](https://www.inf-it.com/open-source/clients/infcloud) - [Invidious](https://github.com/omarroth/invidious) -- [Invoice Ninja](https://www.invoiceninja.com) -- [InvoicePlane](https://invoiceplane.com) -- [IPFS](https://ipfs.io) -- [Joplin](http://joplin.cozic.net/) +- [Invoice Ninja](https://www.invoiceninja.com) / [github](https://github.com/invoiceninja/invoiceninja) +- [InvoicePlane](https://invoiceplane.com) / [github](https://github.com/InvoicePlane/InvoicePlane) +- [IPFS](https://ipfs.io) / [github](https://github.com/ipfs/ipfs) +- [Joplin](http://joplin.cozic.net/) / [github](https://github.com/laurent22/joplin) - [Jellyfin](https://github.com/jellyfin) -- [JS Bin](http://jsbin.com/help/2-second-setup) -- [Kaiwa](http://getkaiwa.com) -- [Kin calendar](https://github.com/KinToday) -- [Kinto](https://github.com/Kinto/formbuilder) -- [Kiwix](http://www.kiwix.org/) Offline wikipedia -- [Known](https://withknown.com) -- [Koel](http://koel.phanan.net) -- [Kontalk](https://kontalk.org) -- [Koozip](http://koozic.net) -- [KrISS feed](https://github.com/tontof/kriss_feed) -- [Koken](http://koken.me) -- [Kune](https://en.wikipedia.org/wiki/Kune_%28software%29) +- [JS Bin](http://jsbin.com/help/2-second-setup) / [github](https://github.com/jsbin/) +- [Kiwix](http://www.kiwix.org/) Offline wikipedia / [github](https://github.com/kiwix/) +- [Known](https://withknown.com) / [github](https://github.com/idno/known) +- [Koel](http://koel.phanan.net) / [github](https://github.com/phanan/koel) +- [Kontalk](https://kontalk.org) / [github](https://github.com/kontalk) +- [Koozip](http://koozic.net) / [github](https://github.com/DocMarty84/koozic) - [L'atelier](https://github.com/jbl2024/latelier) -- [Lessy](https://lessy.io) -- [LibreNews-Server](https://librenews.io) +- [Lessy](https://lessy.io) / [github](https://github.com/lessy-community/lessy) - [LibreOffice Online](https://wiki.documentfoundation.org/ReleaseNotes/5.3/fr#LibreOffice_Online) -- [LiquidSoap](http://savonet.sourceforge.net/) +- [LiquidSoap](http://savonet.sourceforge.net/) / [github](https://github.com/savonet/liquidsoap) - [LocomotiveCMS](https://github.com/locomotivecms/engine) -- [Logstalgia](http://logstalgia.io) -- [Loomio](https://www.loomio.org) -- [MagicMirror²](https://github.com/MichMich/MagicMirror) -- [MaidSafe](http://maidsafe.net) -- [Mailpile](https://www.mailpile.is) -- [Mailtrain](https://mailtrain.org/) +- [Loomio](https://www.loomio.org) / [github](https://github.com/loomio/loomio/) +- [MaidSafe](http://maidsafe.net) / [github](https://github.com/maidsafe) +- [Mailpile](https://www.mailpile.is) / [github](https://github.com/mailpile/Mailpile) +- [Mailtrain](https://mailtrain.org/) / [github](https://github.com/Mailtrain-org/mailtrain) - [Mautic](https://github.com/mautic/mautic) -- [MediaCrush](https://github.com/MediaCrush/MediaCrush) (/!\ last update: Jan 23, 2015) -- [microblog.pub](https://microblog.pub) -- [MinigalNano](https://github.com/sebsauvage/MinigalNano) (/!\ last update: Jun 24, 2016) -- [Mirakel](http://mirakel.azapps.de/taskwarrior.html) (/!\ SSL-Warning) -- [Modoboa](http://modoboa.org) +- [microblog.pub](https://microblog.pub) / [github](https://github.com/tsileo/microblog.pub) +- [Mirakel](http://mirakel.azapps.de/taskwarrior.html) / [github](https://github.com/GothenburgBitFactory/taskwarrior) (/!\ SSL-Warning) +- [Modoboa](http://modoboa.org) / [github](https://github.com/modoboa/) - [MotionEye](https://github.com/ccrisan/motioneye) - [MPD](http://www.musicpd.org) -- [MyBB](https://mybb.com/) +- [MyBB](https://mybb.com/) / [github](https://github.com/mybb) - [Museek+](https://github.com/eLvErDe/museek-plus) +- [N8n.io](https://n8n.io) - [Netrunner](https://github.com/mtgred/netrunner) -- [Nibbleblog](http://www.nibbleblog.com) -- [Nitter](https://github.com/zedeus/nitter) (Twitter front-end focused on privacy) -- [Nuage](https://nuage.kerjean.me/login) +- [Nibbleblog](http://www.nibbleblog.com)/ [github](https://github.com/dignajar/nibbleblog) +- [Nuage](https://nuage.kerjean.me/login) / [github](https://github.com/mickael-kerjean/filestash) - [Ombi](https://github.com/tidusjar/Ombi) -- [OpenBazaar](https://openbazaar.org) -- [openHAB](https://www.openhab.org/) - Smart home platform. -- [OpenJabNab](https://github.com/OpenJabNab/OpenJabNab) (/!\ last update: Apr 30, 2016) +- [OpenBazaar](https://openbazaar.org) / [github](https://github.com/openbazaar) +- [openHAB](https://www.openhab.org/) - Smart home platform. / [github](https://github.com/openhab) - [OpenProject](https://github.com/opf/openproject) - [OpenSourceBilling](https://github.com/vteams/open-source-billing) -- [OX Open-Xchange](https://www.open-xchange.com) Linux groupware solution +- [OX Open-Xchange](https://www.open-xchange.com) Linux groupware solution / [github](https://github.com/open-xchange/) - [Paperless](https://github.com/danielquinn/paperless) - [Paperwork](http://paperwork.rocks) -- [Passbolt](https://www.passbolt.com) Passwords manager -- [pdfy](https://github.com/joepie91/pdfy) (/!\ last update: Aug 5, 2014) -- [Pelias](https://github.com/pelias/pelias) -- [Peps](https://github.com/MLstate/PEPS) -- [PHPList](http://www.phplist.com) -- [PHProxy](http://sourceforge.net/projects/poxy) -- [Phraseanet](https://docs.phraseanet.com/3.8/fr/index.html#) -- [Pico](http://picocms.org) -- [Pix](http://pix.toile-libre.org) +- [Passbolt](https://www.passbolt.com) Passwords manager / [github](https://github.com/passbolt) +- [Pelias](https://github.com/pelias/pelias)) +- [PHPList](http://www.phplist.com) / [github](https://github.com/phpList) +- [Phraseanet](https://docs.phraseanet.com/3.8/fr/index.html#) / [github](https://github.com/alchemy-fr/Phraseanet-Docs) +- [Pico](http://picocms.org) / [github](https://github.com/picocms/Pico) - [Playmaker](https://github.com/NoMore201/playmaker) -- [Presentator](https://presentator.io/) +- [Presentator](https://presentator.io/) A design presentation and collaboration platform. - [Privoxy](http://www.privoxy.org) - [ProcessMaker](http://www.processmaker.com) - [ProtonMail’s WebClient](https://github.com/ProtonMail/WebClient) -- [ProjeQtOr](https://www.projeqtor.org/en/product-en/downloads) - [PyLoad](https://github.com/pyload/pyload) -- [Pulse](https://source.ind.ie/project/pulse-swift/tree/master) -- [Pump.io](http://pump.io) +- [Pump.io](http://pump.io) / [github](https://github.com/pump-io/pump.io) - [qBittorrent](https://github.com/qbittorrent/qBittorrent) -- [racktables](http://racktables.org) -- [Race for the Galaxy](https://github.com/bnordli/rftg) +- [racktables](http://racktables.org) / [github](https://github.com/RackTables/racktables) - [Radarr](https://github.com/Radarr/Radarr) -- [Redmine](https://www.redmine.org) -- [Request Tracker](https://bestpractical.com) -- [Respawn 2.0](https://github.com/broncowdd/respawn) ( /!\ last update: 2015) -- [Restya](http://restya.com) -- [Retroshare](http://retroshare.net/downloads.html) -- [SABnzbd](https://sabnzbd.org) -- [Samourai Dojo, Bitcoin coinjoin node] (https://github.com/Samourai-Wallet/samourai-dojo) +- [Request Tracker](https://bestpractical.com) / [github](https://github.com/bestpractical/rt) +- [Restya](http://restya.com) / [github](https://github.com/RestyaPlatform/board/) +- [Retroshare](https://retroshare.cc/) / [github](https://github.com/RetroShare/RetroShare) - [ScenariChain-server](https://download.scenari.software/SCENARIchain-server/) -- [Scramble, Browser-based PGP web mail](https://github.com/dcposch/scramble) -- [Scribbleton](https://scribbleton.com) - [Scuttlebutt Pub](https://www.scuttlebutt.nz/contributing) -- [ShareLatex](https://www.sharelatex.com) -- [Shleuder](http://schleuder2.nadir.org) -- [Simone](https://github.com/Kloadut/Simone) +- [ShareLatex](https://www.sharelatex.com) / [github](https://github.com/overleaf/overleaf) +- [Shleuder](https://schleuder.org/) - [SocialHome](https://github.com/jaywink/socialhome) (Socialhome is best described as a federated personal profile with social networking functionality) (https://socialhome.network) -- [Sonarr](https://sonarr.tv) -- [SpamGourmet](https://sourceforge.net/projects/spamgourmet/) -- [Stackedit](https://stackedit.io) -- [StandardNotes](https://standardnotes.org) (a clean, simple, E2E-encrypted notes app) -- specifically, the server-side [StandardFile](https://standardfile.org) portion. -- [Streama](https://github.com/dularion/streama) +- [smokeping](https://packages.debian.org/buster/smokeping) / [github](https://github.com/oetiker/SmokePing) +- [Sonarr](https://sonarr.tv) / [github](https://github.com/Sonarr/Sonarr) +- [Stackedit](https://stackedit.io) / [github](https://github.com/benweet/stackedit) +- [StandardNotes](https://standardnotes.org) (a clean, simple, E2E-encrypted notes app) -- specifically, the server-side [StandardFile](https://standardfile.org) portion / [github](https://github.com/standardnotes/web) - [Streisand](https://github.com/jlund/streisand) - [Subspace](https://github.com/subspacecloud/subspace) (A simple WireGuard VPN server GUI) -- [Syspass](http://www.syspass.org/) -- [Taiga](https://taiga.io) -- [Tania](http://gettania.org/) -- [Taskwarrior](https://taskwarrior.org) -- [TMate](https://tmate.io/) -- [TorChat](https://github.com/prof7bit/TorChat) -- [Torrent Tunes](https://github.com/tchoulihan/torrenttunes-client) -- [Total Respawn](https://github.com/broncowdd/TotalRespawn) +- [Syspass](http://www.syspass.org/) / [github](https://github.com/nuxsmin/sysPass) +- [Taiga](https://taiga.io) / [github](https://github.com/taigaio/) +- [Taskwarrior](https://taskwarrior.org) / [github](https://github.com/GothenburgBitFactory/taskwarrior) +- [TMate](https://tmate.io/) / [github](https://github.com/tmate-io/tmate) - [Tracim](https://github.com/tracim/tracim) -- [Twister](http://twister.net.co) -- [TwitRSS.me](http://twitrss.me/) ([Github](https://github.com/ciderpunx/twitrssme)) Scrapes Twitter to create RSS feeds. -- [Unvis](https://unv.is/) ([Github](https://github.com/lodjuret/unvis.it)) -- [Vaultier](http://www.vaultier.org) -- [Volumio](https://volumio.org) -- [Webmpc](https://github.com/ushis/webmpc) -- [WebODF](http://webodf.org) -- [webSync](http://furier.github.io/websync) -- [WebTorrent](https://github.com/feross/webtorrent) -- [Wisemapping](http://www.wisemapping.com) -- [Wireguard](https://www.wireguard.com/) -- [Xibo](https://github.com/xibosignage) -- [Xonotic](http://xonotic.org) -- [YesWiki](https://yeswiki.net) +- [Twister](http://twister.net.co) / [github](https://github.com/miguelfreitas/twister-core/) +- [TwitRSS.me](http://twitrss.me/) / [Github](https://github.com/ciderpunx/twitrssme) Scrapes Twitter to create RSS feeds. +- [Volumio](https://volumio.org) / [github](https://github.com/volumio) +- [WebODF](http://webodf.org) / [github](https://github.com/webodf/WebODF) +- [Wireguard](https://www.wireguard.com/) / [git](https://git.zx2c4.com/WireGuard/) +- [Xibo](https://github.com/xibosignage) - A FLOSS digital signage solution (CMS?) +- [Xonotic](http://xonotic.org) / [gitlab](https://gitlab.com/xonotic) +- [YesWiki](https://yeswiki.net) / [github](https://github.com/YesWiki/yeswiki) - [Zammad](https://github.com/zammad/zammad) - [ZeroTier](https://github.com/zerotier/ZeroTierOne) -- [ZNC](http://wiki.znc.in/ZNC) -- [Zone-project](https://github.com/descl/ZONE) - [Zoneminder](https://github.com/ZoneMinder/zoneminder) -- [Zulip](https://zulipchat.com/) +- [Zulip](https://zulipchat.com/) / [github](https://github.com/zulip/zulip) From 6be9758eb453e13ead24a26fa5a6488097b578a9 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sun, 3 Nov 2019 05:05:19 +0000 Subject: [PATCH 245/360] Updating step 2 to make it clear this step is required for a successful install. --- install_on_virtualbox.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/install_on_virtualbox.md b/install_on_virtualbox.md index 0dc98eac..3d693ba7 100644 --- a/install_on_virtualbox.md +++ b/install_on_virtualbox.md @@ -31,6 +31,8 @@ machine (old computer, ARM board, ...) or a VPS online. ## <small>2.</small> Change network settings +**NB:** You must carry out this step. If not, the install will fail. + Go to **Settings** > **Network**: <img src="/images/virtualbox_2.png" style="max-width:100%;border-radius: 5px;border: 1px solid rgba(0,0,0,0.15);box-shadow: 0 5px 15px rgba(0,0,0,0.35);"> From 71630b0f1494354f5b3e427f41acaf116bb8d136 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sun, 3 Nov 2019 06:36:04 +0000 Subject: [PATCH 246/360] =?UTF-8?q?imp=C3=A9ratif=20du=20verbe=201er=20gro?= =?UTF-8?q?upe,=20pas=20de=20S?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index_fr.md b/index_fr.md index b2cdf980..24ea75a8 100644 --- a/index_fr.md +++ b/index_fr.md @@ -27,7 +27,7 @@ <div class="boring-part" markdown="1"> - <h1><small>Avec</small> YunoHost<small>, gères facilement un serveur pour tes amis, ton asso, ton entreprise.</small> <a href="/whatsyunohost" style="font-size:0.6em;">En savoir plus</a></small></h1> + <h1><small>Avec</small> YunoHost<small>, gère facilement un serveur pour tes amis, ton asso, ton entreprise.</small> <a href="/whatsyunohost" style="font-size:0.6em;">En savoir plus</a></small></h1> <div class="home-panel"> <img src="/images/home_panel.jpg" /> From 7f50fb3641b34cc97594049eec9ca506f6791e1c Mon Sep 17 00:00:00 2001 From: Laurent Peuch <cortex@worlddomination.be> Date: Sun, 3 Nov 2019 13:02:26 +0100 Subject: [PATCH 247/360] [enh] add first version of news.md --- news.md | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 news.md diff --git a/news.md b/news.md new file mode 100644 index 00000000..3af75ddd --- /dev/null +++ b/news.md @@ -0,0 +1,49 @@ +# YunoHost News + +<div id="news"> +</div> + +<style> +.emoji { + height: 21px; +} + +blockquote p { + font-size: medium; +} +blockquote > p { + margin-top: 0; +} +</style> + +<script type="text/template" id="news-template"> + <article class="news"> + <h2><a target="_blank" href="{link}">{title}</a></h2> + + <div>{body}</div> + </article> + + <hr> +</script> + +<script> +$(document).ready(function() { + // FIXME, we need to enable CORS on forum.yunohost.org + // $.get("https://forum.yunohost.org/c/announcement.rss").success(function(data) { + $.get("/_pages/announcement.rss").success(function(data) { + $(data).find("item").each(function(_, item) { + var description = $(item).find("description"); + // yes this is a NIGHTMARE + var blockquote_content = $("<div>" + description[0].textContent + "</div>").find("blockquote")[0].innerHTML + // blockquote_content = blockquote_content.replace("<h1", "<h4"); + + html = $('#news-template').html() + .replace(/{title}/g, $(item).find("title").text()) + .replace(/{link}/g, $(item).find("link").text()) + .replace(/{body}/g, blockquote_content) + + $("#news").append(html); + }) + }) +}) +</script> From 14b44585c7558170199addd89cafedf08f551fd2 Mon Sep 17 00:00:00 2001 From: ilja <gitlab@spectraltheorem.be> Date: Mon, 4 Nov 2019 14:45:59 +0100 Subject: [PATCH 248/360] Adding Ubuntu Touch stuff Added mailclient config for Dekko Added Kaidan as mobile xmpp client for UT and Plasma Mobile Added how to add a new page in the ynh-docs and that using git is prefered if you need to upload files (I had to go on the chat now for the latter) --- XMPP.md | 1 + email_configure_client.md | 11 +++++++++++ images/dekko-app.png | Bin 0 -> 6966 bytes images/dekko_config_1.png | Bin 0 -> 84838 bytes images/dekko_config_2.png | Bin 0 -> 99372 bytes images/dekko_config_3.png | Bin 0 -> 158329 bytes images/dekko_config_4.png | Bin 0 -> 150527 bytes write_documentation.md | 4 ++++ 8 files changed, 16 insertions(+) create mode 100644 images/dekko-app.png create mode 100755 images/dekko_config_1.png create mode 100755 images/dekko_config_2.png create mode 100755 images/dekko_config_3.png create mode 100755 images/dekko_config_4.png diff --git a/XMPP.md b/XMPP.md index 5fb4a6ea..2cef78c0 100644 --- a/XMPP.md +++ b/XMPP.md @@ -37,6 +37,7 @@ You can connect to your YunoHost XMPP account in different ways. - [Conversations](https://conversations.im/) (Android) - [Movim under Android](https://movim.eu) - [Monal](https://itunes.apple.com/us/app/monal-free-xmpp-chat/id317711500?mt=8) (iOS) +- [Kaidan](https://github.com/KaidanIM/Kaidan) (Ubuntu Touch / Plasma Mobile) Here is an exhaustive list of XMPP clients : https://en.wikipedia.org/wiki/Comparison_of_XMPP_clients diff --git a/email_configure_client.md b/email_configure_client.md index 6dd96dd2..a2511674 100644 --- a/email_configure_client.md +++ b/email_configure_client.md @@ -30,3 +30,14 @@ Follow the following steps. (As for Thunderbird, you might need to accept certif <a href="/images/k9mail_config_2.png"><img src="/images/k9mail_config_2.png" width=200/></a> <a href="/images/k9mail_config_3.png"><img src="/images/k9mail_config_3.png" width=200/></a> <a href="/images/k9mail_config_4.png"><img src="/images/k9mail_config_4.png" width=200/></a> + +### <img src="images/dekko-app.png" width=50> Configure Dekko (on Ubuntu Touch) + +The first time you can simply choose "Add account". If you already have an account configured, tap the hamburger menu then tap the gear, choose Mail, Accounts and press the '+'-symbol. + +Then you choose IMAP. Fill in the fields and press Next. Now Dekko will look for the configuration. Check that all fields are correct. Make sure you have your yunohost username, NOT your mailadress and choose "Allow untrusted certificates". Do this for IMAP and SMTP and press Next. Dekko will now synchronise the account after which you are done. Congratz! + +<a href="/images/dekko_config_1.png"><img src="/images/dekko_config_1.png" width=200/></a> +<a href="/images/dekko_config_2.png"><img src="/images/dekko_config_2.png" width=200/></a> +<a href="/images/dekko_config_3.png"><img src="/images/dekko_config_3.png" width=200/></a> +<a href="/images/dekko_config_4.png"><img src="/images/dekko_config_4.png" width=200/></a> diff --git a/images/dekko-app.png b/images/dekko-app.png new file mode 100644 index 0000000000000000000000000000000000000000..2f7a75a627ac8c2f2fcfce0d7a61467124190a6d GIT binary patch literal 6966 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 Bxo7|Y literal 0 HcmV?d00001 diff --git a/images/dekko_config_1.png b/images/dekko_config_1.png new file mode 100755 index 0000000000000000000000000000000000000000..f30146f287fa10b76f85084db9a19e5804cbcd9d GIT binary patch literal 84838 zcmeFZX*`x~8!viSq{vVaNk}Onq0Dp0kjzu2GE`C|^Q=^oLPDYtl9?!ECP}GGk$Dc0 zDP!jKzn<sWd#w-q!~U|?{<8hv4{x5^b>G){o#%1<r{lh_sjfs#$xKNik*HOa6|_kt zGEowV;^wxk_zjQw2=O1t98am}Zo`k)Hmd*<iJhdPAgAm0e7xILSGRRpWO^!UZ`x)* zjthPP7IH!Rd0#NmS!Q1l*<&Ghe{00Et0$Mg8zyR5-al-{U|D=R=Y?NjAa%mWJq(_T zoPIIf7l%uHr|V2cZJ#Fe)*EFFeHDANc;d3Z*kzf^jFnAI+GIQb{Rw3avz8!n{QHxT zYvFf0;NPD)*4-=$|NgvOeA>tU-%Cns$SD5%(^09zqW`^Ec}k#C?!Q-iglwnz@5N1? zYW8&hy-$zj|MR7-I%sa<D$-^x=>|%zS*HCH6V#rbo^2f+n@O=!p8ho<YzH|wHk+H9 z2LuJ(<q9+keu9@fMP0aZ<#ReY-l!?XD9^@xd2aMqV<H8aoTgM<Y%C3lUr<n6>PR5R z!bImiF~{M)$?jt2ka>CYD_6GPSMZBGe%?lco})?r^y$-|K7HaUuzJJ3jsN6H-581h z)!XvAcn9Ug(;=)uDJfiY<L$fa<78^m^wJwLjYXO>&h2(_ae4jb&F#d*gGDYAfe}0g z9MaOPQXX@%PEIFR*Vgj(mzkv*=5XX+?+wOZ{qs&Iwrt%YtE)>tFfcIv^YiWu;{uwz ztF3jR&+9Tz-KBh;lXEL5h?-kBMbml-zyDa|{F`{$hwADB+}xD-Tg}DJ7a?Sx#Bzq7 z-sX3coNCX74*@$LeHk*$zqVID)97w<vu;4b(~+zf?Az$bHobcFis{6q9fvhycgV}j zU+a3eQ|Fah|Dy;CK>>lv(eKGxiKnUE+}!#)@~(E!+^@Z*z;WwTe1i+q+@{daR)$4R zN4L_jq%2Eq&Gl^I<m9aE?Pa5&Wxaz}6&Fj0yG}mbbIj-k-qrmv^U<S6-}!Dx*Tu<% zOi$ZC7k8#~C}i0$;qu{n`P$YKC*H6OJxB<c=q#|D`T5yxaWdv(uf*u_e|AoD25wzh zMWxY&N&NCybLvw`cR{l<ulwdz{{7?aZ#Y%8-&!|rF5g&}xMpjc<Mzkm>obvTmc%uF zCT3=f+2L=~Gc$hd+pJr&_FGt3JY`v~P(HLP<J_CA>+9=SmkyeH(xe|hezd*4vfISO zgmOGJUXzP%_wFqe6ckUNJsW9z5*~i%?_W34O|1OauU{RmX{f0wT)W2mJSOHqgeuj; z!LCBbzcXKshdz3w`O#H@jq2YI{ql4WGn0rNi;1aeW0|*SUIb6rXZ{Nnq-)(pde^5K zeEw83wiP+^XlrXX<X9?omAJpr9cs=rW+c|Huu#mOW`E%8*Ze|C%l(f&TeZD5-%{i> znqc$d*Hyo&uU~iQrRyu+rDV8ZVX>Kn)!L8C(6O<FynK1+m{N+=uKQ$HTeB3WdP>bN zUQC*>|FuOkNtJ;`+KWlZrkU%<`nhxGMBQf&y?_7Se&(l&r1vuYl`B`o76b$Y<nnA< z8nR3!oF+OLCOYzNtLc}_^RY^M1*pe}3w)NVeoq{0t-V6F9rU{otI6UZ9titvzc7Bz zX|n5_?GVM*tri_`uZa4tOA^PTt<5kmB6GWTD*fg9SjBJALIPfY?Z-O{j`wcO&&v}U z`;kdSdguImPpph@>~(k3Vi!ewdw!e{G7%9Gb>&D}96=oSs@7IUjabQBCVcm9-@aXU zM3hWUw#uKne_+7x)!AnW*aj(DiCcMjc`3cSI}5J=`PF#v!-o%jGeckg{?0C+UhMV# zJ-(vLc(I<Ejg5_T!S8mh+Tk$sjrBEqXXj%My*LoO#`!zS*O#x}4|{m&(xty+>DhEl zOaXxmJbMZ^3LQrpie0B9@9$3NBI;YhsrHVJ1Uy`R0fAegp*wf%*g+X%m?0UE5b*V@ znw6Cm`>|uxv~1EJWHwe48<}RlCn!>>#YykSYJT~%dTR>>ztb<xyq52|7tgFNbY6d5 zP*C%L@i_6z=Te^fwnLExI}e`jOOEq-e}DIpzQMt;WGe3nZoSv`{io)BHOjZ>or~9G zKY5aVW4X0_dZ7A&<VF8GcV2j}ENr8sJY{eHx@Y0q(c@p99Mf_BJ=s$#vFEti4p&!K zoZ(+qepOXfTco9>e>KE!xpwW^%r)PYg=08LsmrK<X}YPKd3bnqQ?<#5hlkyLB6scD zW&iWj&hf6o-AB})Hxw?K=-2){-CO3ZH?=0OVvoxEzOs@iASj4;;^X7<<+ZiA=+kDk zw6%AkjNTKu-eWDnn|Ch9f_y7Av+gf<=@Tb*r|W0Fub0_)Sa7}fNh*GELhZTe&cT|H z`Wz2^AEFT6yh);|N;vgTpIEZ_k+Iij^^elYt3P&-*dxDC?LU%!1x5L^rY0SqSxL$t z|1)dL^8((>PHvu_Bc5u)wjFn{YH4}uxRVUSoXs)f&ZkbF-s-V98Fb=uT}oc?j6+|= zrnh$8%-zMVN={Br!S(4rYs+nUR}F5ZdzQHU+3dYM_xU^5_3y8!7bd$OIF8iCD}}I@ z^m*6Q%B+%neSJ&ZXSd>SYrZ`b$?;sYdu!XNpS+9Z@ZrNu{1-^8tE-yjKHe>}^|4Y_ zalY&K(H9hylm_c!Bouwh1fzBcUHzf(OxRX;1NHt@htEje{tVONJ;nugiZ(Vjg{4Q% zYSEk-#g-5Dw^rHBvR~Y(;?3oHr%MCp3=9mu#>ue7c`uy1MSaawoOV<D_K;7Xl+~gH z$wOGBxb^np>NwUm!5Kfd?qIr!W^;<;s9XHEJ9o(bE-w#^wWQl*uDq$2u0p3Xzk1d9 zm(Qk6o7(bipQ*3<r#_31Kai1`sg-A=hn|54$Ii#6o*0(F%*>qNFjV_GFHiB(rNd_B zK0)u^iI$4@5bauvRb5@3s3H%8f<jRuzeFA%#3x6cmNPPn{;1*P$6oQ_0~rIi?#+k@ z24)ev9gdEUC7z2ksPQ#160RqA=>#zgO-~f`zHe<UXrQV{Iuki?kIhHZbIp&v@7eXT z%C}d(PcP43bsBHmiSyJvN=1vOij&PQAh5Hpu1?IuNI6NHMZ#qV^*&+VIlF$md;ic- zMB*m)P-PVG+uV9-FYs{5X)Z6dd96$o5C=q6m6F&DIB}av3*+sHC$<OMw4|Ajx8*Pi zT5ZE$kdfTxe(e;#)^-y|Ds@6)qOb2JcC#g#sJ)XD*`w~=RybUL@v-OZQX-pH9PNJU zqh?x&gm=EZvIQsY(~!fp&V1?{H*Sp4<S8%<Ukf;>6kJhJLArnc{yT>u)!^A+_HAjs zw6<AH2P0JVMh+Sq8+$FZU*;DUK5b&c($&?a+LZ|Cwd-v3$;v;2HF@jCtPBiyJ?6(4 z{(7#Wm{~TwkgJ}Q6GO#7BSXv1F<ddoG-Bw?x0Me&e3tTI|Hq(x=yoycoOwzQnQm>` zvh@P?qhYCs^L;a(Q00bX4YnQo#pyGR^89Yyk_(=Qii&!7V{q#pK9c}+W@rCQjtJGp z?DH}YS*4igf4A1}mdA-+nCcC=_~l7Iwz5s?8`TJI!(6NFyvL694-O{&h<{c6to<&~ z88<$FUrvsI-|gFfrhGT{?cKZgk!ljUY?^<m@I5koUS5-TbUr>l+ji`@Q(j(vdd#-# zoq#xQ#oA$uY?(ZFvmCu5uW1o|ettfB6+KZAg7-^|IW7M3r{4Ge)2D5Xjg9VQC$><~ ze7GFvt#7p#Ct@$k%N?A@^jb|WdQr#W9Ucqg_px3AmAA$vp7r{y9BXQ7YAE;h)pOYL zsq7{L*(QfVldC~o=q>`5ANzVY)<w|QUubgK|7tiuATFGEJx>!HtM|1LJb%6%FR%FW zg$f^<sGC^ZdnnKsCc6p^-&_hZqrT3~Te#_kLMh3vr(`=LBO}wkeTfFyW^M0oB<dUZ zQc_a-;c)3^n*~LkxSUo-+hI31GP3ru0G%V>wsR{s%#MA+J9rGTcpF{Q&X@bRp&`59 zImZFSdH1kLmPw%>I&VbE0de1TFA|rF-@yY1HklSVRaV}nXv9<VT1+)A$ohEi^PX4N zd&~ZgCdZLTi&MSF8?Q=9O1{R{W-0yVaDty-Ht}@O>x*CZut>VmRo$ai!sVkZeByx8 zeAea-+S=QP+|1||TW$!SI8jw`YfB?m%WL+VNLz`!W7OD5At6O;YcA9f3N3o{`{w9A zu2sq)Ja5%n23eo=rORl0F8~$OcE1KXG`d~U)5D6x?RP4^0$q3$$<EG>Io%g<#Jaak zN<B{6^p{Tvn+%^*u`c)B<m4lpH*cn+qa$f()bDaGjum(24rUSCeB{Ux>}{=Nz6A#z z7m>QD&1HvpzM+l%bdS@Blm4bvQ*-U-r_iTTp2AJvzYDlcUx?XP_H%svA-3?>7zsx7 z@wPXYX`_X%`X7+@@B0*baHu0dkBc6Vz2fGkEe+_(cl`a|x3w`j4u7reue#SiK5k;? zoF3*-7v%SNALsm73lCm!ieB+)R8&0Bl+oHTt@S4xtF!f=YHR&~MNIe%VjP`D;{=5Z zO@aX;GK}&lQS-ii%lt4>15mQ5!H46>!Gnnv@pJ?)z^V!f#yfg=h@(DhUT9iI7ZLyN zX*u0jX;|!Hn|gj@VZyj2uO-K_X1c}Td}T`ugY)knia1b!AJ<p^)Uc&Z=_aek(6O*& z1UGCV-QG(5zNgev?{iS1QiufrqIFM+*z@Pl8{S^g`TO^8UsKW<Qm*gqC&$kR6FaC# z{p!`LEaFbvaAP`OJU`JAv@QHL`!;Y2ITZKxr4hELPoG`@uo88hWVuxLJnC|$=h@e< zUsnJt6A15G+v`mqKYnyuo;#YGn|re79a`m4;;1q3=+nQe$L&yc{lJ?O&|bo2yaLc% zz;odmfgiNAw5$OObC{VZ?`}pp{DAu3H#r%MO&mE^YVDVl#7XKysd3NOOVv(l8`8}( z5vzARe!h%sx?e5B&<IVwDnaqVqlgG{85tQC86U}d=?)t@0^frVh`Nk30lC{x^+?T4 zbTZ=lfae(>2R;5yAMmGTqd9;6d{?<I8{lUZ>ZyS9m~Kq;C&7ZnBlO3ph90pe0de>J z{2WFiDJdz5ii%ouem1wVB15lv`Rdi!koJq(LJ@~v^5d$%e`IPEyG+b%OZ}jr^#PxK z_K*=)f~YJ(>f`$Xzt`7RMmi6UHpI&tX>8r@ceDM?Wk!$vnk;}UA933Iz*zx7$2;<< zT&H@fXGiLH?%VeO=;{Lc&-C=PCTFC$^Vl8WBa{8tw_NWjk<-`T1J2SnHb#k?0C1+I zWtFV>-I`5cT%z-tnVCJ6aLpQXrefsdZJAPdu;&=v{{2BHh$)=we)a*BJ9iFUxOQ!a z9NnWwk4Se<-O9+|C8MAiES@T>`fz`@fYm3u)xU!wh5#*vBI-M+sRbN<DwC0u6a8m& zbQDGGpx}uU1R=uRX-F@T0q8KBimRhkIJ`P;R`RJ)(}0Vf{IIC>#;POH_Wb?*3Gj~{ zN3KQRm~U(R?%lgStOwIcYt5XZ-#FBkKQhh{*Dc#v_Z;soF8J_e?uwsaPQ02^N%kSj z^})fxS;=G*@sk1qIpK|?<#ydgsU9bmR#p!3@@7<c=QVP*6*?a2>h2DWjSVK)?dQjw z;sQ|vI5vI5!~WOHmbTuyb&F{Az*!BYp01f6W>FO_D*edG?F!z!;c+taOZb-<SKx?Y z*D5(U<l1x+F#n~>ZbL)E7vLeNdv89L^8nnE9wqOzy>@=5{)FwOO>_(#WGa<Y<tY<m zPhS7tnfv&}rq!teG!HeQ=Wj&A9d&;N;v=D3@YDo71RNPe^-JPD&cj0`cy2WM8L<se zkofJoL|X(@RaB17O)2c|$hUn^{eUrjmkzWGP*rXR@~3_e*<{K-dE?RZU;4_VHx&c~ za!^n(S9iYjI4|#xgQp)>#LM3cT&-K5`>sI{TU>++Y6!8|V58M(HSgbV2H^eh+PsQ= z+vc7!?+3qrS%ab#ew{iX^ACEXDI94-yEM$RVF+fG0@cxfapn7~r!v0MWy@ncU!#Sn z`uqEB%9-|%ZNeJWe2qGx7q-Q$#BC>FBPiRGw6et`&%eKXa?JRBXXifbRf6#!J{x@p zZ9tBWOcKDbck6QyS^W&dO^_C_sm!~JoW=52mX^#L6BG$K0-yTX^^kjA1P@)Bxk#XV zqOtp~&$7il(~xbyaKqmI)0<<0g1ew>aOsPMhK9QHRiLSnzp%Rhm{#Q;&HmSR-QrA4 zOze2gfddB=%T9mi(IjY<y`!T%s+!AGPv-8=)Jb!5K#@6HEI&THg>DRV_ae^_rNQiH zwa+;Z{kPY9S<xRilX%aUv7mhD+UfvEIFHdoUfC)kA<>+wbEIY}<1m+Rm1FA_Yg;lN z4T+$`e1X3e+jjSD91-o2VPsfz%zgV-VR5qC*(RVLE7m_X6>|2OupCDyyO0pWnMl54 z&hANP?YNGal`x(6S>pWq?Hi62zstB`-dTrp+EShiA8;TWu?0!(@*e9`8|$<+!TWC~ zCtogXW!t$k-soEvo{tSr!Rwc9b_8Jn+}mVDyYCoxrB=HBF}0`sn@}ZnIBy2C$<TnO z{9Rg#F!qyo)%I6Vc=?8&lH9KA-L2zge>X!AxoyIy1Ui~?WAHRiph4ylW6%o%8B|tQ z0^}-yF<tr=eHVwgfB4%oF}|C5EfYRiKj=lMJxZreZ7y4xl$iV7N()@cWB)h@n=t|E z8bPCCe{Lla7z$4V+E>-11M-0}Z_mBHun8Xll0c>oW34LVaWe%x930}=lH^B^=$?x? zzWU_fjA}W1vWIimcB2A2YV=gpv=k{j)7DpK_n~H`Un(y5S@Xy_pZ<C3GiWrx4foUN zXbaqRn#6pOtk`NDHvPs@z3=O*t$djufKzl`g{f8y_F&tj-QVOnKXw<zWT*|4z`5l) z1^L;@l>M98Wkohhm7+vXo;<05j@t0rTpr5Zn}+&K-;H%J{G&rRj<VI7b3+;--30!< z;=JqkhYt$GMnNls{85EIkhkkzYU)vJ^jkOpvh<2X%gf5j0zNz&FR$Hl^w_bpLgkT( ziHZ7kiy*%GYvn+vijy+XVhA7(EcVWIij_EbbEDsn^s+{ceIR5Oh6h}Mz#8vC@}YJH zr5j|Q;*NO#?HlzyTDFf6<Q_P`=LvwgC~VgiaGQemeRVattP5ic2wwW(nD6A!w0<=u zQ33nveyKc4PpKEVxcZn;)@5KT>6E-YRSExgYU;bE;%`29a3<%t8Bqj)aw;1ecLwbf z`B8XC2~?>rR_Xzuempj^SUxU+vcw81#ydR^aC}NuRyMZ27m|X$zCMb+SMcNl+ifT^ z7HE{>5xiUhT!Bx8uI@=lNB}8b6YQqeFF>J71T=c*_J@PmLYdW#Ai`cFPqhk;>by#s z^wD@Gd`#)R7QLcLu?uwq*ZZEHvgYmy8U5P9i<XwR!FQiay6*zhJbqGZZ7A~m@ZZuO z5xsWz6*fbxv$}Y(zxBLti;L*rdf)ZiD9UK&KhKrv>S*ie{OP=2-XD41M-Cm5-($`? zllMesNov@WC;C5wHevUx#fa-=?#?NfxsxI4xF_>`IqMOP*bmsf=)Gw<hXe_<q-$Z2 zWpWF66-+5*Ot8J+`uXP)t~6libtghi&AAP-9-@nIh>IHutxG}c0I-z98NPuN$MJ>h zsz}>of<QnoqT97AA^PX8Pj>7jK5NVrG%TMMoomIoSS8&wFSMhCe95_f11y;~fy>65 z;f^29C?l!w_wQ$yJMowabq=C|aE&B40Cg2g6oI5X7bk}bpXxlxv#bercxbYC(z<~J z5Y|v@Ri4Bd`9%P?eCW`jiq=+<n(1w}dxfttEiX=mpdncRL>rxbk#EzYdT<^vz7G_f z^r*D?5{|axHG}mSl_c%V?gQ(FVB=dMIqUDYG>yJj)!n@xDiLaAxcb-M;ZL6id{5S> z>gr;#?ReYRvFK3uT<oc|w@3WQ^bD?fM?+?fo)lQZH#0q5f%CGHp8gKlb!AnR{4s&% z?DOa6Hxl$8Y{~WXnj34OLK}?UKl3UlIw0WJZH~w<IZ(bJ@1z&i>|<u;U}q;W@|je$ z<ycacQd#5L5R6vmThC7~E*ebWjO)31c#M6ux>I<xrh`@7DMcY$$1I$|<*|Vs&nWqG zhp2BqGL3&*C0b#bKYjhGfV-SMdpham%RX!nMNr~~BIm2btrAKNR3_-EGvn8<U3-XP zcmU7Tb78#kgK@)lXdi6=7iH-me`#+yD)Z;hAA+s|4f0>_k<6pH%9BbQgq{+2QtrKH zLj`wo4qxG}+(cSgoHC%6`4rRVwltGuGsy-#6jVJYP%BlK!uKua<#WdP7gpXXDZg2= zuCcp9Q9V+BBYJvWsAYNnH&wUDA~z2JpUwSvf@*EBi8&}7yZD5nTYBHFouPHb4nveB zrKNwqYsjP)X&4z9S>PcMP0VBNSLom=b&k-Ani`7Bb<Zn_US2AN&-&WBk;4f9T48p( zb#$)z9tMV_A?5WEtPqyw>kU`M$P$lvN|aB25fP<GK2yrBDRj1X-Ydc=q;~;f8Q%3W zp7+`W84o>U0Dxy`XKr1pS*iG`Q>Q3RjSO1DSOEQ>p14c{XqkiRoyj|O^~#m|AU2g? zUO0<{$oaPH=S%U(?Z?!w=Yza)(NlVXjJOv?$@r`?p$2^XIGkv!{6yr;nKMqme;lj- z)3UIrnX33;59x)Gv>_vx0n62%k|m|3Qm`8?@RseQcTS_bPz4Qstrtd88q~}OqUXbJ zLA%_4Y?6|@qe2hPO^TX=mV%KH^Kf0v0|@PeA%N}eufQRPT>z5x5ZWJM7oiDM;y>!X zdBkH{?z11J!8?z6oBLz>>f^6cV_Ct7AmJ)`d3og=F`LEyhH^^@Nryye<5VS{wwEtc z$kAOu^&)5}c&6x$0fkWKm&wV4jfqMr#sz#3UbQE8yG4A2&_P%ML|=uRN<L}u{J|>3 z8(HoMi<O0mu^n2Mp*&k)$Knl-+q2z0rS;47LaHvM937<5ydRHtDegpRRKltf22_Sw zDKpSib6fXS2pv#CsG<GKDkzW<f@+Mlu92~EdS=GJ>YmdI3Kwd_kMf^5A&(AdKib6E zk`EsN7#XF1^h3@P-H=G3H9>s#cO1oW^j>iZ^4U|{k{T=RZ8V(QEaY{PkB<f#KhA{F zGZT|AGP#@g?{9~YMW7o3TgfiW{6OX6o0*48rv%|0GTmL^tdyjJYJeWSa=l*PjZ*b_ z@!BB56V!eNxD*c*{#4l3C^+x8sj2CWztjDaD_@2j2yIAaZEiO>ztDcW``*i=$&Zu| z-Bk~a>IB7a#F1<vx6#zp40Y|e+LCq`nxX|1>uObdQU&OiR)L+V;kk38R(@a;J3fE@ zOcZ2@SP$}c*!g5+Wb}=W-v9a2>dw7;>0+wgI)x4wL1HNg&qPP8sF{li#B;1QJA`Jx z_yxFBhHtGyPmje2UZgB3DVYW%d$><T{Rs0kA$jKH<edKPwXyi+<Hy4_`M73_Bnu(w zEWAv3j*}PI@`6p=$vW0-8)T)WNzds%Ip8aKOW$(*u`G<8N8#b&mg<LW&zwE0=-?p8 zt)H<?M@I*Q)JEc^gI1=I(0Fe-8$>d~zx381u-($^h$WV`nvVxID9luw`@d)FWom$3 zH<6&<b7`@3R1l~lRSy!xrLRwKVbcS~lvLz&iP&{jpmPRc*+&)R6Gd_ONiTHMUBX=i z#Zq;RG9DOTd@pNoBu?$jnJOSJg76Y<C(vRNcQTwENPKO;H59#n1yLxJmA9d$BtDsO z8k*ugdUQL1cHzI$q38qA^`UYvO&UXKCaNsjg&a1WCRVzo;R$53{-H0Cgd+sdKnK+m z7auaN8;SD`_FemZURgt<X1c%1`I2?mVSSCy6F?JbAK&F(j%r#7Qx&Y#60BCSdskds z)!r^vKT96N2s_|qqr?!n4H+qq^Yd9XHTG?%az+ZzLArdxd+za6KICjH5Cy~{wrhU! zbYyLvo#`IQ++yP50}qauRjjQn3Q6B7Fe~*)<9szZFyLhI_*cTOg$rk4CmW-b5?}z* zUQD8Sk|x({tIxX#s}yie{QEC%njy0DMQ)Ag9Xqt>or{iqW%FI#MEcd5eLnTe^q)Vs z*tano+o>C?ojnWc8q5+_#PI6f{Wo2VbsY`>sA{p2grZ-*w(!ixnZ&+QN*Hoz^3{az zfI|B4taCK70sm$JSj2W^8W)^~*+JNRgoEQe)+`4UM%ZnH!GJfdDf3=wfKtTrMa5_4 z^ASi+#}4h<UbePiyt=m7>oH%Pc&tb|`GGV9Yr~vH@72EoC`Yead-b&FTbRqG*&YnI zEsXC)FS&*0WB&2sUdRSAkDfl=W@%};gH@7=fJ=C^LVGj@KL*{veukJtFdsrBa-KSK z)`Au%n_C2D4yT%#hDDUHC^)2~_T%MW1cr-wPj*j8L)gD*xA0iA$Nl?|gfVulEVzbI z{<Zs%9uEo&=PP7qqq)FQh1YshCs{p0C%gmN;~m^R&~K7Lc9`;^>Y`4bZGP$}>DO0! zHxdBZnE-a6M>i&&VI+zX_TZh{x8;MqA9S|4I6B^b_H3Vpr6r*X5rPW#^y}Q*_n@`Y zD^ul>HO5Et79*p7gfAXR`_?_ExFoSzHaRS5IR&oBFZ9Wr#a==wsJ~I$bHDH&UxdDS z7)PXTOPbyRd<5zkEfLTd_<$#B9Jg-W`m3w(1aa^n0T9R_ML&}n|J2ILIce9$1k{60 zBZsr;<?Vd~_1+;<$Mhe+(SdRQe(HaXh0-!>pQRa21ufm*FK><w^!1Un=yx(QCQoQm zzJx}zYu9Fi`N8f%6XI_C9Z@Pm5a6&g+tP3Aa#sT?65!GHUcyc}IXP<x?}R!Ei>ig} z-bFpw1J~Mf$sr!!1E<I`E%tx$f;}%hQys=V;m4mI=}$2$EwcG!BDbBU&?GBNs%7pR zDizLk_!Kw$dGC1!>6P&lErXDl2#<Skx7e$fFWEUc$@lEpgIjBivho8<LM018IgC*s zh`a}g4vBRDg?k$nl{^?Yzt5^0p>)1;nJ_ABZco$WA+$2IScETRQO9QwnK|uUi6ycP zD1}dq9pp_<<S}wW5?4`CNr5LGJH(Lp88i_8w>s>IhSRX$TXqT8Niq@^<;mZ?TCy7W z7tRS3enl$C0N`Xmi2UKg#T*t9aTmRL5U0!Lj9p1K=&!Q6`p1Bs2c7aO*9WSpf_{uZ zyn~Derwi<RsO{DB%PH^D6&g3_Bb<VQf~rB3b3o7~H&|tSo?G^!-R%*LQ*$py<l*M{ z_T$cX9qz&}ob-NFzE&L?9Zd-xGazA`9NjdI(UUV$z;)X|$6%chUIn%)Y{SSirbBm$ zhL~W1){Y{5^VY3RI0?xU_PXe<?A!c0{MW;i3F8eya0(h`&PXIFxA=>=m{>o41GlM` z!Znm<+h%NMe}rU)J?|~bFZ}&8=wRHUK(9zfM%D*3Zgbq&6#7zf<1)lYGC4Z?)xS3Y z+JCma8t>l8#<o$p7Bm`m%sAiLc5fYe=$4!6^Bh+@^N*3qRotawlpdQJD)n5{{p^o7 z87_Wne~yrGutay&4p+f9CnPwN5;v_(XY0-XB!xI%jK6A+m!~+UG$T_hkqdMw?)wM+ zv&(qfCOJBOt51(C%I!WqI)JvmZTt4dj=R3@(IVGbx6-m^Oz^*j9#4qagum_CUcNd* z1?@<;cW;!MKOpk&=I&9bUe*~|c*==rED$VklD_;Y05>EDek4U}6nTyRbSNAvkPsH$ zqZG{2*m1qkVQB)}-6m;$)oHYe+>f1IQqp9k{>IP*)|!+XHZY}8XQB@fP=QxnxNzY` z>u2hl#A9i)tYtWGQjAUB(2$Ar0;Umj>eQObuuW?gj_V>zXS!~x9~5DEzQ}{P;&J8; z5He7!=)n8;RYF&uMMo#V$iQv3m3bGNmDD^2V-iQMfSi;xSqg24Qi>0t%8&i0wesjL zEqVbk?B}94PT5`r?qbGm-hl_9z)|^9C5*rx&+$t_j(~^)PR*0oVqg@lY7c|->vOT) zxDHI+5BU5JUX1VvV2}bb-dLP8jaiNTwM$D&y5=&L)JSRp2E!=}3l3~AUHK<(KZDV+ zva%|xseOQQF0(u}v{I#c_Uzdf?N@lZSY&fMI~sg6v>B6k_HxHAUfuHVGbZFbLUSkF zIY}ugAtTrCug>PUPMN`)G03x;Kwty1G~v}q`mUQK{s|}WA(U%sc*JwqjGq_;A(4>d zU&MV8?yuS-X2B~>ht#4^ZuevNa+23^_yTF<set7)<nr*s3?y_Qd8Iy<mRX(N@=7C) z2A~%eU;x_!Cqo#D2eh>?!B&Gk$r^D#KG|>+C=xhj3kd?cUGSZ!NC>sPK5%oKm8|ey zmS%tW>>18OhhE6vqnVzY`ykTmr88i4?b4-J`uCDa?JDyD0o$1N?j2Rg&c!yXgu4q( z=EvVO!J<!}Kda39I)95e;XY$UguqDr7i;Mey)isCWJC4u>aYiL`~W$?Zb#P%`Z4kA z7Yaci1VdN>FTjnaXJ@yNz&TDQ=7bZ}Zxab0<5;eFHcM=-dDYglcU}pgSiXl?q!;!v z;)wSZCUE-;fXEleA_%gN$D#MW{`2SU&^s$38xaBlFia&#J08PrJi67T*%k($)WL3~ zPzrziSsIBOgw07tBFZhHN92@3B};3GhySRZmE#rg(?QHia4$gjjXwj5CS_iQ3Z)mq zr83@ERXJO5W)NWmdPO`MmGmzO#)gLM{QPuK$6#tU8?h8AL_Lc5G6dV`O4OHhqdabC zWMm`+2YyoAh#eBlAzY}LIxQ{N7Ux@nr_c6IbmU&7B7|hr;CS?SQCNGoRzOnN5uTG> z|Fg&GIRm9)tiS&Z4Hbz1Z#dz%!P>xV)|Y>0YnQXxww3$JAW}pFT}M<xg7IBf%$qkS zjNV$`g5JS_^j?+LlQ<MUOEh6-6+5ocGp&<I|4@O1c&F~BMUSq)Dbfo8NF~QELQfcZ zYHR`D>@Tk0m~rmJCo92BKB*Esie~iF8pkPLGerFehb#39NUJD-!9DbYgY4|=HNv<8 zte?#!!eHydNpGGHe=;K?u-JR*;{#VW=W#Y!3Qv)vO&gIXbz2LS4VWV#GF9Se_5c3; zVEgXF7r^3;?hhglAvaVTk>fa`Zc^@J$|LaWF`iH*d{z>Hlff1QBavTJgBDKuH2L|@ z0mPgF0vw2F7-%j4iL?0U1EI<U4@G|tIvy1L{P{y7@Ca=E5rV)CJf1^Gj*Jvf;e$I$ zK2bj8&gVBPQMY8uB_S?8yi!C+I3Rc+|M@*9ElvmuzIOhtPlR^}V)t6)D?A=t|FvzW zaOvn>&2VY&W#ZC5YI`FcdYDZY5yW~Ay9J$sukkkyV-AitOT9OcDCyBucO7teTU%R2 zT^(P&c1$#KP6zd9sgf4Ur)oLxobiwh$2~xdK|CY;a-j(xD{LClr?T7WLA{UQypr1Q zKVK~MeE!f^c;xxCu5JL`A@U=V4%d&5-MI2I)>mHaiY;`U)GuDseVf!{CC|Nj*Q`jd zh?F2L!k9P9%Vmi4C-Q^Fi2^6DG?4+06LFV4yoS@2tLx?U4Gpi`swz<{ZbNiPWv!2q zD5&rzm#cthNDx`5lDuXmqP<rsw`|$sG}W`8WIs|DLwm`=oCpGP!7@h|rG+E_m%SgH zzk}xJ`8cnc?Z}{haa(JG)pP>t0dYp5KUlyHt}gP7?3J!A{T(S$8BbW+c!$;LD%!u0 zx#lnJs)Igj@&3;CU%llrI3p3s{TD4P{IDBfyR5FSOc@1gml8H26fA2Ycdl)IW{2J% zR(pCA0gB<#cFjkGR5%(#=$g?_TjAY6y%o#vY;VV(6Z-C(OW&H@a_7A73iZ)b-nHTA zXgVx*v&3>?|Ni}YUv5deO_QMgHr2Ww1a{9pU+xd@7SW*%k+?@sed`kw4*&gHTAEUG zaR}g)bWxmb4WCGS-gOC&l-KC(HpqlEP{!bdW{w3J_8^5uq!Lg{&9Tps+-*@Vjn0Rs zL+B$RGV2xReb?@Sy^OTk!IIs#Z=cuNd@GZf!^^aL-{DzNPUN-29QRu6b|vLThI!BY z+>SqvzFZD7BHp4pkd(Wzex~CLNc?4^;;lS8i1Hg=^EvDY5pN+Z6X0O+)(hC}NLSxP zEJvtc=q$Y=k;njp{?(RqaQJIfV$lmOT42x=lR}61PCVKNU`B-Dj<(2KVAwoFh&nj+ z9R=431K1LTMl7F}iJwHs;y$Z?DFpseParAnh<X@#zB=^rW546&tGgf#^El+iynTBT zjcaIBWe6@Wa*w3;GZKt%OJ)&M&H<y$JS-ZRkag(ZV}z){z5tO32nu1xI`0-9Nf3Ja z01ns3jkVs5(JuF7cCbchR3y!@SuN1oGHOj*W6<5_F)@wMtBHUwtR~&FDMn@wA3h}3 z9=r0up+jU~DQ|kb7**eQbTETR`ss2j#z}jVNO;5_5vl}C+XMh*Xk;`jdLB_n&NENw zJ3P0L;JZ6W+M)85^=2=6syQR8g-kDRqbFhUZr-xx%pCLCzP*TI&p<8NNzg}xX9yvZ z@IqlG5sMKXP7l#9uj>}yq!$~atMHgpG~+izmqEhC5*ge<sE&vm-TyJET#oo193Od9 zdm>;;2-q-yhju+kO1c=jf&}Frsy)11IwDujb|NwhljI)Q^{}!%)GTCuNF)%!`Ss1M zuu7hZT=)Mcwb;m0VAqZFwEHzq)2Vx{h}0!jxSL2H8dGyX`>29YiC`VPtw^Jfvys)< zmD{dgzYeX32Fk^Ih@N^QF>`ZsEajV))>un?SwDLRbAKCLMb-)E3l7!$=4N`mG+jBg z><czFfhcwG$Fg*%OvR3b@=<QvCW~MKk!6M0K!ib*m6f?7i^8Qu2yzBR<^Vgp>~a5B zlAa4Y&}7`8aOa#4i;fP2_(3GW(%gl@Rf4+Ut`VG?NN6GWq4=Z}h4>+K0nkoxrwZSV zm0qvK6EL~3Cvq(7GI>8QL$TpNR29izoAOJ$u-eYa$LV+O9DRso=&xb(RX`<}xu#>_ zm&kh&iKFdA;M5-NKhyQMZA%&hm?ibWg9nLFG4h)RE4d-a<OKu<*1C40%JUP+kKXe0 zziSd+0y*%Ryd%M%CgK^`NhH$o<Hrd<7HJw<Bm*;AwzGdpyD|8Ypg>Vk=L%bLVD5Qs ztSyq;^&-SWxZAX}w21!w>Rz;hlg}jO;Z)X1v{{75g?mq5k(DLEurSRK2V^&}qZV=2 zsr%dr<ii3JhSg6e94B@FY4(8o_qALDlA4I@E%b{t&a1adc86@PK4V|9VWLuhLNOxy zP#_1Ijg{3QY~DYp@D{Cqq-`}EjOh`dAp#C~Sn`PJ`R~~42jZ2U7YwM9;$dfk1%gT4 z(Ed`xuJ&g-S74IrM}u^IYSe1|%u7~y?pW>t)FF^EN<Pyf-9E|l<T?5IrvbZfAc%M> z#PZx@)Y}9#5w`G}v)wAZ3q;n~%M^|~VxUC!oMr!hbHu&jr6c!ZbFGDfQ;QypdF$cB z9WRrT`cZ|T&_tcK<U%{Y+>mZ?{94D`?L@#nRVSI>ra5Kv?p;Y*h}THgS65e?k2WPC z@vf6|g!{V?w)Zv~nvcj9(n3Gb^OJ8M^28zY==My6&<_@NwDsr5nhOwph>Q`~SnS{u zWRwdy_8x2dk5XUMfFMA_#uld?>G*frT<El(3xqo&*@ZxUKhP~2BT77AGJB1Ca*Ds! zWREnbt?W>%vGO_pQ}Lf}NEgBXM7TgJVaD<M5FBK%0v7PuYSef{pl^dG5c)jfqR-kZ zgB6e=XO0a7_45?uM&!q8y}2HWN95gNWn{dE6GkYwM-#^DuR#%2oJ{^UW#&F#XHGyO zN(Ow+DbusgeAmx)<vJ~8%@WBE@X=L(JL~pbPE@qoW0eFqB1~SwLrZ^9;RgfSvgxG? zxPSue0r01WGH=h9FJBUQDUVLKOa##3d8m3BluF{%Z}THTA^GmBME?2Hr<-wcY=o93 z9t-ixFD@>w<FV&*1H-yEATlw6@Y(8DOL}B}mDWCpMIa{}$li9w(?5`2mx?$IJ&34t zC{`R?T-(qMg@~{tA!}pfaI!LAv9k*X133W14HSMF1jWW#(0j%BQ1?GceTLK*RHDvi zZKErS30#5buZrM^0*G5)>n$_Q95OaC8h~7B2taQmDC=$ecVq#9TLMJDPOAaAB8XzB z@;_3Twb~oLrJrFMguC7{6RPV1iJM8nCBsH?3A&$5TMI+r8NSHD^z5?DH)**)Z~C<% z)-Ruj4n}Ya;P|^CA++eGx2MWCSYZlnqou9E#-xLKWwdPY88woC(2x}{=CB!u9Y9t# zUh@Llts%k#Q0Qcy&N5&5C$*+v1F>r+V`~Bp>UUe2w*)<9HHCYBIZ-p_TMQ62qPsb+ zM-E{&b0|f%1`Q2i1TaqjeEFq57BL4hq<{Un0!2OMQu3=Bw^QCd74eh3=?)m2Mc2C< z$jJ&J<Vk@V@8<4a`ThIu1TOgQ9AaYUTBwo{K1spI4zSzW8L(m;x*TMB0m)-Zg_UhZ zKXU;$jNXC#WZqYCi<Eo$7MqMu$&-WJViz^`Vc!PT>CGZoh!CO7l3kc;Qi?$~D+!T7 zYN$I6h9*OD?Xui;F+GT#ju=vE9WDQeiI9T1<;ffcj>g}ARW`7(V0Pm;5#l+ttJCn7 z`+xqtgLAU^Z!cXll(nv6S6VovvTkmoh=SC;+#2!kK#KAaV!8zJSyJx40jL4Z4ho!> zmoE7O4!lqaJIovxU~sg&M{25O=D;CQRqpco0r_!q#g}KN7VD7T<rfmtJDc_V$rFFz z?Uu9?wY~~Nw+Io0qiHW8_HYF<NxHqxmp>{HrM8udimGMsy}re#Own{{de@5q?-x){ zgr;V8?`))a@ZVoSQ6hU(YH|n*rlrFFKgYr}5++CpY5wz58~D$Qi7~PNH#1`Y8^_Q7 z|4Ro1{GS^2`~P^YwKl_pYjD~2-<)DNEf6@`rmFpo8<;@*Uw<pd9gzT+7+t8zh3o(R z4^jDB8YpZ#^Y3E9393udgr;f+ve^*N#YuexrvV50lEex)gqSXggtm7Jt?mFPXOhVn zvD5JbA2gUlR7@-$Ss7@Uh!3~Ah;j;Be%#?jFlG|OW5gUd4jho1n8!tkMoc2CfPd4Z zDW$9&%Wf@@Mi8l0f(>+IebpV^Qoi#54%^O98gsuyI*9UUW_Mr<KqVtgU)y`S769M7 zR2Gz95+f0iRi+mfPV4JGG5U>Jzcde$EFD?i6AcA65kL^a7lr*uBEkOocf6B}qOMYl zl&TwuUiTh@AHbD3!#BACJ806s0^~h}52)B_PPa260HNdDTx}`glP8-kP7>?(^1;(S zE?In1bGYRsBG3Ey@#D8Fq00ndM4YpO=5|1eLfeUlL{*@yB2$u<UYpY)xH?8f0QoRj zxK7dNDX&6DruIyj8u$~U{(ld|rjksF52Oe>CVWb8HU*4V0%_$}X-hzxK}%&IK-wAi zk~gaV{z=CN`~`vYAh;kia27qh!9igx3@H~FXlblptON;@;&pyLpJO|lHZ9}753LEo z%90ucXCWBfW8e19afF6wTkrf=kOJL_)V2rEP!P)AYl^MJb3mgIIxO1r9Y6wrZU7ty zX^m!z$S%@Ngf&;;UVVhVu3Im3y@#dOdogBDB6l>V1`r%HhX_5PDa{3Nk9_t`fI$7n zCin-6^xe=<t->D|EHSsSp|rFdWcji;{TaqF3kwT>1SjWj_rnvS#PeIv+=UMi`tkGI z{Wr7hU0hB>-r7X+U0*u#I4mrWMQe#paVLg1h@luFPzdG?231iZ`&`DC6|u`EmjF_( z=M%(oh~Yf^?d`jF$$|4>Z9hUT7sT!$M%3WEd;my(V49VkeVmvtgWWMRbOzX?v{}Hz z-96rAq67N(Uv$G8OEW{-oYk--5ratgU}0tsgrgWPp0%o*qPb~ua*~L$fy82-kx+$^ z$(K7ECWlEls1OL>h<Y!dBxXg3Aupk=Bv?UvV51Q;!W0w~#1*i!F>Z=I>4uRv2<U;p z07R<d9lX@ku~f*C1UJR#;R^(P5O=w!c9=*>0)AmVV6okM`jlzBr*t3sCn9;=H>3~^ zCc*<m{vGqJsgD(L`P9_ZfRK<Hq#<8h*3f{igpZYSVRNa^ZvX)GgN-JszsG%7LYjpn zj}eHEaAj5JJP@EEHZ%5y0`R03tT<x24u?oEO3gVVEG#S(dk=I5;w1t33E@HSYvDgb zm`Bt<fS&8Aq<7779*y&z9j3-^lul`RO&k@j;|OxkRQ-OXd5ReHm2~5W-AvpKHd|y` zPU3?sv(i8!)-Aih!UDZWSLh$N70G~>m|<i<kSAt8a3KD}Jdxgo0G3t*JC_(rI%5)y ztw^X!$nOwC6tF2gkC@Oa>g8U7*a)t#l{0)s3<%4{LJzPO+S3363Y@{aN$cw?*IROe z0s~J$Uw{jNOQomtz{Vk2l>;DqV30XYS70a^;gfe>OM*}-bg9eUdoaQ+Lw+4$I}3zW z-nq|Sin6qBc(DmSz8?r{s`Ph13r(N=1TKQ-5ix3)U0;CwU|7MJkphSf%%J#WM^ESn zSYmmM{^g8?Djx#QRl0D29m=Ba&qZB&MPhIi13|8-yND4PVw7B$o18>2DU?aRd9qJX z$7KP%H<6ITk;j!Dcm-kW57)<qKsc>xY!s*;F>H2KrB}4NbcsV$lnEdBG{RW-E%aHp zT&$<N7*#C<_ziv%nW9eAji%!)37ZK72-O2;4gr~s3y=3Hig_;Z!W@qGfal<kW+Hc( z$GwKt*{LS`+?&IY%5DQYLs-ylkv*0ot&lZr`+sEt01r`;iTD7KPk_-K>a3ush#0ag z0$}hdkV{PpY{AMbEG(qug6ya|cabVOJB{^d9>s)fCnJM_wg$kvr=!n6o92WyCLwVo z?!uIb9GzY3zsF`j@L@YP24YEjmJ7LmM=BpeUB$7o%?aB_WIc#I1^HL@a2P{6>yT&O z>(^WhH;9kDzB;Qx=$I(}+&>m|(L50)fb&a?b_D8yH(MSFRo2Y0sMd~%f61$a&-?Xj zhG8~wIEj%)93T0^VMBj;AI!!)Rz8HTOV~g5{qM<<+K3#L;`+inSsrrZ6Y)&~jWxrG zYzZ?6{=aW;--{*zh1c!Rz}<ZLCc-8rhHG#HC?0iBc&@K5VOoG&OYCAy_DlEK;WikS zvHnET(tff_jGzk$;$b1Tz!Pgo(K`4RNy)tPm~OHkZxaARAc!~l568J*TJTd-SV8ky zu}8RWl++gYszNqIpqf|jI)#RYM#~0ZKoF$*U6EQ$*vl|=2zueWHqS_`874I)p{{P< zzTFLA8MDz3AaEo?auy3thZ={;XhPM6QIY<^8Oyn~tgK9oIT9oiobe-6E~w7?iRn~X zm!?m3bu<v`tubwdR-QE0t{slrO$aLPu_5>GS3;(Q+Cp98wX_Q*F$D_@A+`@h9mI<W zBOv-;&0O}+jMSYwKUFB<TkHdef-TRCsbIpn!-2u3*#})nE=e^)cV&5LDV`X32MI9C zYzpt~;>3LrS_fv3AK=dPPH`hWi9KiCoU#*jTnmX{me~xHxdD)G0F948MQ0f5aa@Rj z?GZ8m1g>F~ONS00PV;VK{HIyQhDcX7Lb=)I_hRhv#sPI+qj21H0v;KWq_{c0)exc} z4V!dE=rWI9+8q?rpUQRwMTeb0m`K6(Kf$ZgmNp~QcN?1^m0A7ClPARJOYj{zyOH`h zC9vnTXP%fFQDtyMlbewo85=ViAiIb7AoEG<7alC2Dtx__=*kw&DOyBE(sc!@onH5% zG0dfn^~G{*?ahz8lfBw=FJc0LM=J(xrY@`tO3Q9=U!4qdIcnyU6|ltvyRKuR^q+v+ z2rP;F(6RPFhUA`^#~M{f|7`y8Ls-KBnU_6)KLHOPeq9uTZjbK16YLN9*_Yyb5E&pu zR(t`2p;c+o7-8f<BniyRM#_R9+Sr%rv2XJ7s<A2f9e#e&rk)VLF+heO<e61*qVz1= zdpFDLvaqn|1}&pi_dz-{3Radt0D&K~UMz!4t(nFY==?#=n8Fb^L|%}!=EH{<&=|2# zj=#+*hZ2DKXJIAFLJ&wM0Skp&*~np3qT}g?{DxgZ$-o^hIt=$~*gXq*UrxScNEMhC z*Oj87qT-1ptHCQN)$D${0H3}qE*`|hw3gJ!`1lT5+7OFYyt~K_HffWV7mSJ!jUQGZ zD)>NZL`6+)2a1uwFKLY3zJGt0%5jd*u*6LOhLRp;pGlHPjUt+Q%%L21%CNE>!UsD+ zqWSm><HG?>HfnmjYn1dxR@i*wqUKIha?1X?6RaRBD@U#%d(=YC>DY^utEQbr%Z}L* z-Njt4rA0+Wfwi?oTy3)CqotIaDNmiErrRbJB-`<Ib^X(Dms+jWW3_Gf+@;uPS?l1Z zd6u1s`q}RuH?=q$Bk7(C?Pfx_;{wbAkG@+JC1ZnkQ^XH)AXcBA9P6PPA~_S#x#)?# zG=^$q>O_k#d-3^neG5$$e=~-3+ph_W#ndrVmzO`i)>G1M8{q5a_HKPX+t=OHAmP<) zCx(0D5yy+pmhoPGi+9RIq|$AE8R&N`H96LybFs}b#NF!~^x$tbF2$xG`WgChi3thK z2m(2*5LxL=mzM()OPn*av-7ZjP3RH>Fb0r@hgmpLJdxj7;$f?)`N+(7&AFhVKc|NE zdqJ<y@9)y8)rs3weU)VX_H8*EE7?9W5+!;gp|d##?I>vPiC0E<1tBt}10@tscn(Dv ze0|hnV>2VQ2GK(ZllleTaBJeSi^y=ZG9v|>lrYHhZ6_sCMm`cAiFdvXH6eJF4S(S& zBVVb<d=tiqS13n%4Ca=j-6ji1y55H}nz_jVo0^sP3^`nZhuZ;HwJ;mLxgBHT#fZ#8 z=vxgobB4_P7i90=Qb!z?o{jB%W`0)ry2tDvIIE@6k8hNHjg{)0*j#2cAC(3vzs^>n z4qXV*72Y@s5p3e3)tN8fCSbGtN{Tc~`%}vik<&Th0rK^YLG9&0#jBz-D#a#z$4uU7 z!pgf}cwAJpE%Wf#>bfC^(bB~p$4-%JZTyrsH<L&eM^**<_;<)dPYvs~i>&Hz00nfD z>k`VouAZ!eFBN!QXmi(`X?bnRH~Y--(zoh$t#GuQN1Lj<dfr|M!(830O~If;;oOMK zM!Rh<vQj)!J^-$E--WV@CyQ**wAj-RdE?te?CSM&pCt;Sc8~Rx78jOUHzwH3CuR)| z4PC+D)vybsqS7Kd@3}^$?o&AiX6{L+h4!S)Kn5?KA35&3^Z>iS+b4G4^^!*0q92$d zD>YNk=Z*Z5L~Mt7M;IiO)YO^IGMN^L&UX|!rx)(WSP~+Z&6Xi}l=eB(Uv4I%rP;K- zjz4q-=2mTOZQ2N{si^vM(S8@D_DgTB072S0b9h~Z%4WxyLL@q`vYdpRT06l}G#9g$ zi%*b;Y_(%C0FSD&^7OI^92P+~AT49Wj|B^$&`ml^7?|9++nI9n@jxo$<0fZb6tXlE z?YA&(Rn^o^`es3m(o<Cptl#pXukS)Zz4(zMO1)mQK^pa119cKpPE^-=Jbq^ymByjp z{Klp~Ss;Jvl+!n%*1zAlw&HFf(HBqf?4R3&dlDLo+(aR1{LVgJdi}4ZV==ba(3rsA zQ=`kfAHRj+%3R=#x!8g$r=if>Q_<FPd)^wFI2i#}a}*k`_Mf{Q;HKTLN=)2`BFxUG zJYn6AGQ6|kiZEkfQ(US!lbwzRw|0KR7?CbHl9*V_CsAZkO_}{5MgLy6odKphzQtWZ zPx3*?*{DDQd$YjS_t`70qK524V2Y`+9@t+uAKX8`l?5F|IN6*S@T)CuTK`oz5(`?n z@^u17sdsQDy@g@#-c-<(s7~NZ0|>2|9bE<2<J<-Iv$9U+k6$|n6~noB8uaI_!N|MG zqTgSs8lf(76KjWL_L7&C)k}Pv&$ym(k`g<<hoU#V_4)OSzK8YJvch8$-k|h~Zx^lg zVKm4v?4Na1u4e2(oN;&o_{Dq1r#AnDbpv}jr6~H`Xufxu{x#xQRDUbx6yy`c8Q3R$ ztpTZC20FSIU-*jEAo3^CC>>Q)R4ke*TX~D&566f=*IsV}6a#Gxl4o{?goL;jzmUM} z32cMO7Ka$l9aa3kmyQ{|<uceIBq>?aG^#{|e9(BDK66GYKSqQmxv#H}`>N<eW}(_~ zSC!YqP(Rm+6FQ)Cj{^<-+jA`M)wtkm2ws5ZIeMadvW6@sVX`F8y73gD4&dyxU}Bv3 zC;D+M1OXJ@@aNAnu#3{s+FEQRkZ|-GcPI>xjy5_{Zh#Z#*qJppo0STKw#atHV$NSz zGHDow(s002SVmlj4t+RMZmh4FpYkS|e-}2}^b<Ts?LXb?2mz(w%;5ot;mIGlc<Is) z*8)B+!k}HBOO_d}W;`GM?UD{`=J|s1wX=A6hI41q@yVnCM4cJhoeE7DdfKzBePv~D zc9x~_MdNNPx3a+L9_uW~*3U9IH~I%0QdLz|uwF}0sJh?Y8jOt@p8Afeh9Hri6ii~d zNiHJ#_|?V1(J>DeaY)U|`-_pLudtiW<Am#>4ZYkj?kV_L&S{Q<{rLN6#zKl;Q=Gex zPZ@gK?+00tItwd~10U{-i)plnk^>J<pX<at@udp$f=&i{`kx}3l-m1p=D7Ca#$UWz zbqEa9_0lRrphl&d@go{o77B-(314K7`^bJ<^u8_;%)xfM4F=`e6~7Et++M{`&%|Un zc^>Vlb>)lMLjyggyleY|jjxxs4E~Y#-=PJC1g)(hNr@Wyx9=vgM19bsDJ&m-_3Z09 zk!r&JVhza-0%jeBWzhtT<b>}#;Nj+0MXSXBgrA+o|NPBA@$Yc#v@77@=Wk#s9i)Et zZ8)D<8PF>xBbGx2V9vfXEB(TY@x|uI1J>>Nh^>45Sh$OG=xFz4=}A^HwmPXfymu?h zV{D8xjG^KNlP*qCCc25&TZTwoGJDA6ACL3@{durfLXqq8nbUOP!}g+H3sZ<`>Y2?= z!b3&b6E08+VjlYAM@(T34+8QQnwDf6=Dgo=bVt>+;rB#fvazP52TM^cLv!JnPef5w zMe_>pwsTz(+mE?29{r34pu@Sz;;FGP4e3S%z=$V1yO<yj_pD3090Xka*@E6eu&*ik zQDA*LBIz)Du9KXcoVDIr01J~AmhhU`r`LTX6cxEy<B8GRZl~{OVPR_`o11r`a<k2i za2WatXfBG`B{P992U3~wbz+SOm|thr>8>A#Gild}QIt$Gk5SJ3a7GsP>)+tl(UYQ9 zSzavP$dp;_r+pmQ+j?`;mbYF@GY&Q66cojobOetpl8SrwEFF+8`phRNjQS8%GN+&8 zsS4fp$Jg#qCJ+BTh222Rp$pk{wRMd+iO<Vy%*sTcxU60n!CPws(Fy17B@|V6=dy$Z z4h9B>s6-PyFna9A@0u?Z+Eb5X%2Rq}GF;y!{O<8&?QrU)v=cE$#Kk+Z10NF)vS<4D zPCUpbPhP=iDKz2Z1Utd?=DRUviSe;aj7dgy;$gnYDjG{;E{F^b?awEgBmpC^Bczu` z&b~VkaXxD{SYk3|8q(8plxrKJR9(^!b|ooUV5Z_t(@}~fB|ntda`nw56%VxaZvC{+ z-@dgV`;(2}iosqx<t9XV=c;IB+`P+j<F)PW?F&;6l|iN&%<l$<A&y+b%kfW19b7AG zTr07vj^Z(PI^usN$Z-eZBa55v0b*h563s#k2-DQLMXzgb<_BDFT%TtE-)r-v+b&zn z_@aRpSLyP{B}C?>F&_7{69XcpVw>aNHpPFyy>#;lpCP#X@N3U!-(CTphfBP|wj67S zzg@V7@yj>D-Px#8-}k$A_2=h)r55RWf%%6V^*VzDtEHh`SgFjg-sC2o2ZvJ8Ri$N= z6h}r;@ajA4eq=-~iOR_IS~d*Xi*~&~=o_P6^Gh6`-E9D$U03p?7o^$8FTp7Rl9FOQ zoy<GlTn-UCtH@n;b$$Fz{f`vU0Vr@?V~0P~)EJzjf14Ffvlof8?pF!Q)jTF9pxeU> zM8`Fk5EBy{UQ~Vzx6femX%o2-;<%Y0L9MS_V-aL&w4M6^g4q>V{Uajxpz#>Dn_+=n zOs9);<ePb-w{+zLhW!q6*(YT4bB{J$&M%hn=aRpV?z!3A^64p6)b~-Rm4~aTm$u`x zm&jNAVZ-c$>X|cPhvuhx<1SM1{OR$Wx`Im#FYMNk)Jl9%R#GB4(No&lMYCgvE*g$^ zQ_UDMAWw|j97bYXi==#krK5FrL;TU194LBQFTL{B3mMxD2OVZrjayMto-Q#AHBhQj zI~N{vo*DZoc`-r?cjP^0MW!^$uA&{2>E}ei4^C?U8GZ9xU1LSdW9i-bk-X=$hko5@ z`hF2{&NaKC(D(086^L^}Rh@6!htF;juuXKmYShUF5-m3`udcOq3h@mly{1L%VlnDc z*agEb=rytK!+V`ERo-D6K~1U3cuXozP*CtK@QkA;gi<@k9DH9KKY`_nyT%xkB4S@z z6m$w<K+G{(8KL8@SIPL2v~Gjz@y~P38{tV`ZB}=#x}Te<fYgD`;1#u47E${O+lc2N z^y0;Rrg=6Id!?aDE?GtWgalb+d)&0>ZSBoLuwY>}3No_4PDKy(kot}aIivB1z;cH+ z(}>`G1dlg}yNv(Rf3b68gcueE+%>mb9BVm)nsqU+GfLPtx^n^b>O9cV=<5TbqJ{-M z9_iPFpTXTf3E^(G5Fvl}5;`fz;fDwaUa;$Rte3i^Y(G`H7##v&oQ}Z7-(}mUwLgMW zMw<i2en=vWTK*&Z{PnUdG<9Ymta_yz^b8DznO2r>+UF{^(Egoc;avX{;`^?}WNG5M zuW|ZfSa|qLC}>YRAt)PRh&&?BxqbO4t<;=m(8>ipP@mzEW(=wqFrUDUkv3cnKO#~W z9vXT8M-dGBD0@Y=K~pAN+a}<RJRD$^YS*Q!+H>~UZOa&&{%Tv?on>&|yXEp)MljJ# zj+w4>_O1gU<~1R9_N{OoFZ_-?e_9FMTHkHjuQf=7X=4DC9x$@guJ~Km2K)~L!<1%& ze=wctvR@G&>S5{9@H4w9Tj;aS+Vryo4_Y}V`RBv#vGzB~_4RMAd_Qd4_PSEi0Q7Jk zUtH0ea;%Df4qw(#OnwM$;t#hnck%OSXnG*TiOlm=X~-LYtAWRFcZPinZj_AWA{H*H zs(K&97)V&Hu91Ao=;I!6W3G1Bfj#}qm%^+bK|+5_=o@Hhg%WHzsuS?ML29vUP*^Hy zE?|=ezJO#<zn~xVsp;K~K}4Poq`Fl<glyb;rGl7lET}kq^r#BpX4;$Ch<pH00)doR zhXe=zz_e@sY>_a&F{b%QoYz49bzI9?+kOt1%xT443S^C0+RH7ka|z2iEF8lFQ?E<A zIzr6hX8^u*;(}f0gp1V5_?wo=+Yz?iMJ>m6EDy467>1N$hgRJ6znQohavZ^}4y8i1 zwn121YVp_mx0k*#e|svBsBep}v^&M-Jr~+pJ&1r-h7zm$%hOf$S9PZ1#{+IkOqJ*m zEK^rf&>Wc0ERSG~_$HyK&Vnw72gcr^=iXc@YzaxB0_KM6mAB*rz=w`pZ`|#Nq3^Z~ zMGlonGY^6%=uKF>07hhmAhR^$3~AF5;}ZG=hBzzIt(*Bj*n7{Qtk3S>7h{aZnrN`1 zM#TasHV_M7iv@_%!2%egsDNMrR6vku)C4<%*Z>ufCSb!t5tS&4Vxii=f{1_!QdE#~ zJ`3~gIWNwhJ?F(fv(MiDOlBVA1NZ$aS6S=Zu4-~f9^-pzLJ^iweni(ZL2wT9FPNv? znF!B(?oJGxJLl;5GYhsZyYulS>s$^(ZN=WbOI`a|e9X{#eyMSH!Mdl8(&LrJ*T(C2 z<L%z-|IKcFEIAgmj{6t)>^)}bUxpTQFZFE9+tg?oGcq^W<Nbsf>%?5g=jixrsNdfP zdA$Fyq1BR$PyG)bjF2=iz_!?&zWFFBFPcx$kMll@BIM%B59W1jRQXQ;jx;VdGtsgy z?aBGTPN6z@@Qr7?(VW6g)PPQSD7p}&nzJE24f9OxKiv#3wXqaGI~bDy7ZiID*MICw zRfzHh8)$G#ar)%^?ZOJ`!62{dBhQBo9h&y6NAKQI^z}w4q_Vl!Q()z5<HmNJ&I1M1 zJz}%rWgGGZuB2Dm;vuaEP`_JFr_op)+?>tuI!+IC>iQJ*fdi*e;magUAJIp|YL<ze z@31c38DT2HTn;oC3Dx%|<<RD}pFEQJ{NRC+>)QuYSta(`hF`!Qm7sVx{%JW`8iDXM zM(@8YJ@@!0)HYPR3l?qsu$9%zXsB8}PyWUA#n2vRaX!cT|IHY8yqJHI)>*1X(Ad~@ z4{y}7+l_OcvFqKtmGO>GbBj#}y-#WOO8)r7!Rd=rLdlR3i>^E?8@GA$W)1N(&|*2J zWR>{cDKddPW)om#I=*@HH#2_uWf*rQ?G#%`$JD)xdp^NQ8grmyUyT)epT6DE6&+z7 zonEo)q-~2=AoDA#Kg&*K?VO=mT<(!g3`mSk@{{t;n{F?M2t5uLTZ-~%?Rcg3-+ymB zZ{9(+FU3B6q9IQyS}$Aw)VZJbBc*&Z#ne$6bPt}D*V;M_Ql_amIyanufhCU9y{U~H zX-HNd`nY{8@k@JdW36XiNWlU|?51tVqOQ68o|5K@2Up9r2RF;Fp`f>2zC4<x);=@z zZ@xC8V%OrH?%-Or*E@{du+fnI0YLY{LLGnKPtGXotE)S9=wNDPbrhmLgqMA>lKr$) z5H<EIn~;jBvuFQxrJ>5e+N-X}Y4Q=@;An6nsy%;y|1h*~TeogiQC9wi7VhlR@;A#D z4xBV;A&_QlRT8_6%fh<1)XvF36ovMm7O6HVWo2gG4Rc~!KSBB8Ui$?4#ttQ2`;Hwo zKCxpL6&IKB+|uvellSndurMQ~)8LBrSgvqh80@O=2&mAZzoLc?0C)CT+dCTAN#a*N zHbE<2S^w(&G&BAgTJ8mol+gI`slT6}S>ZTh?p&Dpr64TX7-v^>4;y}Y)Ze>ynG?kI zw9Vof>z7nlRsF=o0BFdG=npBJhXEsp?{j|6eL`_3*|)4$NY4T~jAv#AR`>QTr}>fX zx4`q0wY1)u&7LR8dNhNz+G@~XQS;bBtEcm2tHU}T7ZAT5%d_#wIMwR+p4;B7OXOc_ zr<3f97VdK+KcC1pz4~(PWkIX0*W6HaFOSdDAnEE{vhO$or*cT$*;5f$)Afq~n(<2R z+*vIt3MH(anj?>uuS@K$X&=fO5e2m5A2bvpn4$KEKS^DgS6DHXneTMDsC)8<n|++7 z8r;4gUsGI~@z>T&gSa3=-rKUP#(jY{506^BS-0+Ww{z{z)4KE6nU*60?wFT+0dvu4 z)t2Rd#!eMgbI7NQ63C~wHgU>XAG#e?EiFqvrk?$_EcA3(R!KJ9TO>%UV)yQ)peDS< z*maXSZ=cRk&Kn$Hb%LVCnnJUvw42|RLYpU$0JS&!ta>XQ$C^t66c-KO#5|Zt_0qmW z2iG@udkG$x6Sd#y6%9-dkIXMPIF8B6N^3!WN#vU6_VyHY;8+3uHdaoR`n3FVX7KVE z!7*G5<Lms&$75tmbBZq5kP03PH_8@x>E@pPal)}2J9g~4uHPG%iSbxE8{e-_$?{V% zO`2%v?w$ac+t1pgJieZu^qJ481D<hVe3Jp`Pr<d>riN~{LCjKK;7QQ_vXDKxne5PN z+OtZkDYXr{=zcyHn^cv)U~8YjRaI3rZ$tK!CX~fy(buXq+_PM_FE}6|oG!zTVk7}T zOXIhz3UT)i1qQ|luEm@u^s>lncg{<$4A_CcoQn!J=WrC8rUp(slrx5m)e$|O9q@c! zS67F7XrDmr)NnbM?z3oKsvJGzMhC*MkhUD93W_B7D|`L=sIb@X*Z!T*`^JFVj(XOM z0*B(y2hXsWHf=LAEeAb&uWiSV9#sm&$;WGw1gxh~gRdBk(K)fSeyXG2#wN}0^-8B9 zy~aB>Hr^?J0nfyg-{vNzV=H>|MwK`r3d4yTKc7aL5z87~U(>+W3!-B}&n|=c#?71Q z;5vw3pCqo2Bd#D6f%@83GhAu-T!|F{;P%<G$C3q!HBUM`nQ5Rj53r})84<bAda&tI z@?qj=vY47y(kB&PqLjZlEy7jw=xjcw5M*~tw5TQA+}vmjvUxj<SM{*4Fd8{i&8E2l zO$$xN3_f{sV~z#zAsAs8V&X`O5Ee0@w!P>zVqwqJbaav}7PIImoZ8}@YQWygjbuVv zlqIV1m*7Jkzu9dM;}ln2q$8EQ!jxL$Eg`+zX~~}zE{*zeb;}<V?hJbI^$!PTU2XX} zh2eX=rEXMEnAcCH82_Bs{-$%wAAWQDR;lF=SF73)xX(Y{MgLoT(5GL%Z~BiGKtbVu zo!d<EUg&f=?8=vxXRTnQ)@s}0?DhS>{+Im?gchzj>ruAJKlX#J77cv<_0PF8_ZheR z>3^L&`QLsB{SSsshlq;K^Yo~<FapF<pQ;WSG84ETcF3GE#_;}r7Fj5A*`0J9d&tZ4 z-l5oPmLi1}5{__WMK{vY?u_cFH>SDF0pcPTc^r$<<%xDJ!@+yUkF92b=o`sehKu3G zKmTOUKW2O)B4V}}O2PhKuO44oW7RS$tX8%gulhs3ez8;&(Ev$jA2-GQs%LK>g_~T= zqa{FUa$znm=jFRWMkx*5R%%f|!FZc-*_Vq+2Xm!Hqkj!f`8pug*Uf}vw#*I_tp`;_ z4B+Tp<34yAazIu9a#aKF6m_5Gr__xgFCk7@539#N8N^;q3z7>p@a$u^l`R)&<oxl$ zg9ia+iQRhm@a>)8vjJC^%{DeNIu@7Gv;YhGhn~}DYgG_f)A^XfhT2|ys-~?zY}jo2 zR-?IdceA_boo-ptyu0AepT){6P(+*WzDp=ybo#eHAncPm4@7$Bg870qcy6m!iuV=9 zbev9&n9GXp9~fv|cBN${d{ME|y#Lw{4uEVpSWMLS&c@753lXK6ejVx(c5wk8nD+Z| zDp(XS7J!SpzI1B26Q4TIt3USa8Nrhd=yQ31-ogtjBR}{IkzE4-O=sI6`XeKxR;3%a zc5nFw^>tqTS0muGWJxdj7(BswCO~%Vnnd*g1H9M!sY;7JTw+Tw?-|?j^9mJpu2+9l zQnD(E8VXmic4A<>eF|?KG2y52J{;~b4N1q+pS~{S@h|dP&4LsJyfu62j8w4Z_5@yJ zw2~yssRbYH(DIR+iufrWmulY$`vL-r_dAbQ>I|5<L8((F-j|tQH;!kBvGUgU7=9zJ z^==>gRelk6YaaRtoL8tpW7+fZO0UL{mQVA02q}+uCTG3Y@YGdtQB;QDifW*+k!qUz z81*QG^n))xUOBu+%h#{&hE9V5>`P63&F^nux_|lQ&onz;{{UT`Mdq41pRWt3tdQ<Q z3ku@hv$mp5O5>l@Wjb^Fe5f6D3}erpVutBa!}~2aefolLpCZ|M$pzK<^ya#d=aipm zR|n|o7KCq|TwPtQ<{5kX^n=3ct99MsN1j{D=Qk9<!}%XLFoZq`B92Dp*p)<=snt)t zX+qqUG=F6J&@%-G#vvxnEIxbgoX)lpSL?)WAA<*-MAc=U>jgZn^q|g^0S-s1h@O>O zQ~UX6KFsx6)l={3zD&(Gqvutg-?`G&En$!s88E>|TSs7xnHfnbMJ$5#*U#||r2ra% z2a4hWlu@YmvP6R(!&5qs=N0PcJ|}MTarwI7qjyXnW|D*V<+W1N^-&#J2qK``r1M6= za1xlJ&gGw7DOE-1hs$kVIYS)-aXiP@r6epsb-;i>n%Bp9FWTccVf72|qjQ&s4VVd= zOjKRO>({Rr7!II2iK*<c0Yo$q0K>xZ%MSWEJE-a2<5&L{7F;Z~EdiO005lIM{!5Ps z<lZz>;fr2er$*!mfr;^USu=66@bkw|AcoQZ*1vz!=0@DC)vw>YvFK%kKR-Oz`6&EK zHju^IFMT_27y2#wLgO`aOY1O9Je+SZzc(Hl@xaj*J}&>bwprR1CT$sHTONOQA-Fzo z{ihLsYxLy1FP(l}T<ieuO@g`4jvc1JsdddC$27QqyImP<Z7Lb_v|>?}b-Yk1VbP4n ze#kFp0H}>0f9Y8he^&;vq-meENV~Bn%bgk=Sb(mVcPIG09bNat4VA|T{iVS;$@v`+ z&3aU6c|;)!dLX?duvBeh_u*S7@8ycFZY?9(n#DB$TosMGyB!TPLNznb^<|r1erh#~ z1<Z@YF=@NbK347bz!z{6p$ghG&z#N^Sm(KiJMn?AV@&T+gRgEuWU}yL{<<Tya8lWG zvWf$3Gj0BxVvDNhTuT}0Hkmtnja>?WOn`B1N!Bc4`6BOM{B45mWJ|6|p~nGsjw4zR z;}S|$GY*ZNH8=bmqjYLznTqOQ48o;rqI}>c;`3}4hD=izY?E8c|5%Qyh=J;#`Z8io z@W^#tv@5*@)Vbw!QTpYCH-{Z+Kx?8-pEhFPst4RDFE&40?lRGQ-n<C3tq$13tRiHU zy%a&9=}f{j{j*BU=!YcITYpvVmp-~}6!WeVe0zwB+^l3YH9MW9A714m*ISbODoBUZ z7wP{pf+sHm*^Do(zCnbR9@^6bi+fH)z{9aHQ8X(SYW~B&pJb#n__^cBsFpj9W$2f% z<@)+Kbl<jhYmW0C^^V^vH5;3mg+imxWm}1^iQNP(DqRd1P(tS6zJp~?#1?xg=D}HX z&`e3c)gkRiCRJ{(`@BBoOJLfINOg>F(ac~nOCqa^t*l|ceRl7*z{^TEUz&Bnfd5~H zmc@-V4il?xK$N0<pzo@^q%nr;@;*#|&JFt0$_au_7v^N*(_6{O$HzxHM`?q2qj9H4 zMJ(=_@Y>fP8z-K0fdJ5^GiPo?trJevhUUsgMtCG#`;@#~J)XmU2J$02RJxg8s>w89 zJ^NYjMu;_#r?btyKG1F3`?=2+$dl&E;X6|{{3n;4!wCkAWaO$$o}4nX9160$1wA{r z+_2gMo(W}GEb6TlknRls-*!E5dU#^16Dwc->eNo)u)A33ZO=WX@{s-*8n+R*;DV$L zXNXsirMJ?5s#@n|@o7(?Yo2v@+kP9SppzcGrBA>e+bb!;H4$YM@$icb4x<7|JY0Ui zpOA;pm-P^PEY5H8@{Uq;>}<aBMIS~OFt3)wUVvO8M!nsus(x!l&zYBZq|#%O_H6y@ zp~~w}-C^i|416`b8a8;M>~wAF;GWiZ{R%+E_FcMs+VG6;sR8&rVldV%1npowe`Y^> z`(b=|RwNw%TZVsi!gD&<dZ5Qs9u>)Xj-h*pitYkfN6oW~2o7j_j|14D=~--kfgGwB z#Nxk*b||e-L}Su*GnT5Nf@KUwb!UM9MiBa3qIF;xit_RTcfN@5hKgX*h-Z*FK0Z4G zX(-UI5mN&a*4E}%chfj>qGpH$EbxT6B;^m*1N7j_jRQA1-Pf+(+4Q{m%O+o+P4DS; zbNSpb5D>NqS%GD#Aj&xwCf|<b)cw`pLu=wTHAbgjpfrgPmaO9~34-J0+fh=c-@k7u z>F_&yg$Q6SkTr*I<dFKQQ*~>Qd6TivUw=K2ZxAht$(ku=H`c8c#hSjMA>u6~wh$Kc zZqS3qykcY4!>FSdOajf#$W4oocnClb-%zA>D<rprfiHqoR>er9zXAf`Ki6b&Z1e56 zD;Tim7o@g2X3xiDf^y_A_)+2i%0g(yc`%;qqYFlDPVEr31$_&8hX_UmMPEAW(VHWy zVrx3r6KHGKebXPy!CXzyJSms(7o$^mCyb#y^aQ&14P}It<Sty51A?oneF2-yVX~Gf zXURa)VD02>gk@gn!}i0RRiVV9I1^~)%I8-*+V61$-4vq@{tg4*8b-VWgR9?{Cit;3 zAGO%M$}tEj_UP6}P=TuITtRiY0Iig=9U=w)-7h%ZDw^!JlALzCWd&lI2Pik<YRNS< z)CuDf)~4<1IeHpJy0i_f^w}Y^x}1!bfu!5DPalWaDQ*xCaJ_d{tvYSGG`mAsz|XGZ zmD2Crk%d8!4<di|7*rjFDbxO#{RBkKQMUkqB`}BuX&zr0t6Tz8ErE7nFSoVSGUVax zL$89|4pvM1LNmCjHQHj|(C1AbFZyrmW3uMb7ziZU2uwaibTu?x(9iwtfU(acd;nic z+305xe@8X_3?7-k?2@GBl!4(!k9xK@6ccf2mrb9yC<{=#N9W@~!!N}1DSSRB5HpCO zFB-%+UP8U&HREq~FOVfAZKR=fjNh8k0zKD#W`}Wgk7drP!nF9xuIFL?!kK-^9rE|J z%fuX#W_VsFt`~BaoV|LN1_=ANq{2j=Er&OjvFqzItG!P3-LZ=OdN5YlBNzDkfggW) zpBR_<+wmbub<^i1Y?2-ZyUn5^2iygVyK5yg*Bd`}QRiBXBrj2Ud+Go^DY4RyRQ4F# zyfIJLZ0$a)LzD+W;X(5jK}lq!x$0EeA_w%9GHwo}ZCPF;>P4-9I#%=Fx26#yQn0ZB z&~bzH>*f4{@L8bl%un-|W1>aTm*Om102-F0_la6b^Jj#yJlPi{T~-$Dq$vpn{^bxz zo<x24`g9mTxA^7QMHv^$DoD0K%_x3EWk}%0qUY98J-$_nXLh{(P{%w&y7E%H_U04) zI16WN^$X&2j!kV{y=cBb{2Ym+YzK**v!K3~B1mMT%8@YSirvczKR+G%YVR^=cbog0 z*t6;x?L})Z|D>d}GWYecn3{-v^{Tnhc(bcNps`5u%IAsPO$)GE`?ukjZ{<ZNW@=e9 zy8fflYSsvI*S7gi7adqLDbXew>YR;b|317&t^JTBMYbpGVGh(h^>NMhacl2?diyZ7 zVe2A-N#mc6jO^02d-pdMTEF;0D&#<Tpcbmh8S(xc5M{Nd;)vu0XYJEvA!RiwU6-ss zICw|6S3u3RqO~e?v@GTRO&vh_`v){xN7}y@R!yOT1s$)*T-rgQzstVV^*Qi&Oc;`s zOF6qEX48^5C4HDF8^}Z)P;RA%YW+HoxA$nJ)UDf~$nk#;i>|5p>u|%XipS^DHYzD9 z7JalbGxO`!HG8SsNu*$hxT_ob1(py!6U=W0Bpo`@wQpa?ex{G@hbyY+blKa2zf}hE zVh)|_00U|?G_SqI)polV$iuf>6a={;sxC|lIc{(LHTzCj`_IN_5IYkm8J4`bdZhkG zTYs-PB?$w3zuek?IQvHx9nEkM*rK43bs<G}uAj&;uh-%9vtbwsqc??x|7?EYR7=%S z3Xf&MVn0}qjrRd;UgNq$^JcEj7D5UxK8{pfGq;t<g=X$niX=z_p0-H4=H3F@4}bP| z*e?z<%z5mF{w*U-bAHiDmk;;P#!u7FtEL}aVNRv5>bOw#y$2h~<!>FWKh(56qil8i z-o0Gw_4&53yG{CrZTe0gzI`lf;xfmpkQN(~Z(Y0bmv?I03o9R=pgISvh)G}4`kQYw zPzux9T*_HE<-=B{X7ec)v<U1OGG4K*6j$GmsOfrMGjf-Sd-lu{J567YIR~Ons+)(_ zy#34PK)TMFSAWVjO)db>!Hm0({y0Hf<<Q|*c0T&+)?EmFRWe?xzlX!5fl!F=0Yydt z1-iDd@bJ79hZ}DE=^fG@Bt#HlaOa=c<#_-ouhh^eI=0zWdTQ*-p4%`@gmBp-=AR9< z3GZXILh30lbhfHZdMy&^Dz~d=K!2;(FtTf5J<ZB$g-Z^7W!yO|JZJWeEK6xA_-K*t zC$6H49h<r}GkUilcKditbSf~IQ2GuZUfsyi-9EHnW3EVAEjQSaG}40I8X2PEEWY5q znd-c_U(QJT)n**}U?SQ}9(ouHr#(sLqBNlFix%M8K6^HltAB2f%595#iZF?RezSdt z#r4s>#x6TJ=v!e$LyUhge+)$Kw!17gF?K;5gsCik%64=oMe6SZ=Z1>}Q_lpXAwB19 zM7pRWCL2Ltjr`O=pW>hkVHXgcb3s-yTTCBs3VrWOQ-8Hiky?niXW&cn6pAs6`#MpZ zzEuj-08Yot@PPFvhviFv`eo;CkLn03@a<^vXg3xgc?3s9b(!`OgwC9rjri-m<%b zn!h*yLl1`l2*xg@37L)>e@(t~|9&2Y*NDhVqsrJ5N~)d52hPnPYR@;DBUozR=RYmW z<4mPYt5&apt4>uO<O$4HZK^9kykfKG{ogxwWTE$@4dl~pUjF1SOB5BjZzu!h?X|Z3 zPvyQHu*&W5iL;dK&Nk1{D_vVJ$lmz-P^Hjh=s5h~TWGpWo2GoL#Hu~VhF&HCwWTDa zQK?;=^q56H2RN=4b(kq3eOqY6qM+)L0a`tN{8*YBxMEQ#4IVmFTHM2<muw?x|E-0~ z*)dcnnkh&3HhtREY$*;XWjnD{5cc5dwOb3~sr-yquqS0iQ&m99t!3w+ou)uX+H6gu z`%4?1R0p3VIy0Nv7E*7=&MQR4`S<&jX)yB8o@No%{?WEyWzV%xAvT*D3i~IQPQQKY z0Kqx>dnUM5g>n_cA~%Euh)N>*f*^69XEM+H_wM~!4}DIj84b;;6|Hyky34du>UPNn zy*qap2h_xp#9}YdCM~s6XHJX?sEZpo`2GZ?&T@~`pmOq=f8*OH@zH>(@6Ua*wWYO$ z0>9X+vrhfn5dPgGN}u4sC8)uLU>>ZPmwa%dYgAg80lM`X#5}6Hx;7?jdK!2A&MdoG zc72l%XJbiYHTO3)58Bk^mQSza8%j7xsrV{t9w8Mi5xIZpt0yBRG%ALw)vn?52Qdu@ z(MfN*f{fsQa^)}FOF{q8UNo$vPz<uum~R&CxOFE^b!^$+EetvzfWFmRIW1vi~i z{^!=Mc2~VyvDJu-g=2a`w3<@;_3mB2)^q&{UD_Iii}qv|!Pl?pFpie6C8Fa_fZEWZ z;TFZW8N`UCrNR31&p-7m&iC1NoZgQol~=m4#|}t$&Q6(!<<gW*3xpw*%EnOWU?lR4 z99Ze4{Z{qdhCfPZwoZK~W+%Pi<eNl%nU*gnfV@Pi#U+{0dx)}{Y9ves9~;ifNu+av zNMr*k+%5fw5+JL8^XFN6HvPg0kkRZ==MKJ;B?f4~4o2-w`cO97gm-7}h;*s!!c!;I zD(syRVqC_5yrE&EY%y&4_C$cdb+NAI;c?TXPm?ljS@}VLVCFl0)!|l8MDjstZ28DZ zU|srS`c<hRWyxNB`3ZLo3Ot+36E&r%64=cI!r=k<(L__ni>?D^9U}Sdq2)mjK@y+Y zZ{U3>L<E6oNz)5<QV+4-E7{oR$8OyU*BkHQv-mkt$NMEZ5J?l)-|O>KR82K@?U(i3 zc38vi1d>kF8YeOf$<mAki3|?RE5*)U3t4L~dcH3m+PC*Zk&7lou9((=R_e`9d%8Ab zgR8}PWd6hpRUrKBn{nS9XFftAo_)NMOJ4hB_eLBIVx~!so!da9OevML*3;D!1JiHc z22ewQc%3`4@0W;+I)Ck*5%P2`9Sv?6Jk&*P*c%O<U?$y<L5AAXAh=V!_#ZkHiDw8g zCvO2{&Ej+81;j6j>tecg>o!<%WWLxZbdX3W#)j*#<0dyZec@Whd;<1IkUnhk<V9RR zQsz<5o5Anzny-*2Xl6){s_9;{f)$K|3XQ>ZVk*?FjT+Ya=ra`5I%?_r7}igGw%2E5 zy*Q_cb<14RDiczqz9z|HJ*-0hnzX*chl3Lk_WgbP_9is>Tzwc1MwQ%%j#?}VauDUG z0+0K{KhHmeGI`FyQBy@M8L+1lKMzR@-g~#=7R!rk;V!MxzlR1z<YpSIO0GQs1FkPU z7>fq7Bmv<0>0VBx7X8ZhaZ0R#F{`Khie`nfNorjwD%6u}Ogi-(H3jpg@$bK%cz>y| zvnY5*m{t2#PE_hFn(jA09l|W!e#@?|sF=(^^lE7$54p|)uH%SV5lt&84NuGm1PjCR zdn4wfh+Gva=uTyRGw8)4!7Y}8>nf%6xh5xpS);sF%w5QdQ~uOICdJhO+!t=sOYH*= z<YT%GGgWOkw74gOg!SQ}_zl>_MfSmvkbwb^C|w^;IW@Qv*n0C^gUE<RpjUtcJ+>?n z{0Y~MYHdDs-(GA957&o;mJ^>?`|h!+bk%GThzkADsPi!#C*anxYm~>8vyBAno;dmI zp@Dkhk>GU{en@^)zD`PK`gws2I3p~r(4aI=!|{n3NSis!kRrG_dv;$PcQbktaXWoj z-j1j6IWammAzi6cBV`aXWqL!3YcH?(D@!232{E=>d}$wJ6>26ZVB~B%Sy=-eVlSV3 z<~-P7?{#avm$`f>?<48nlgY5;mNOPRWUgb0JD_e2-ljHb(R_+0M1J}z5a;O?mjNaC zl)S7k{p*KV(Q=<l<+<?`7g_o+WV^B*b>^Ra{41kXR6&zgN4pt4VIX;~Yn$JP$3{1; zb}_|eMC+?Pcp2h=Fi`C`z|6drsl3k~yIFq)l;oX&?j9tx*5H!y_bK0xmqnJASKo3p z==xQ+azpCJt%KU|*J|a1jKn+vZE$k_mcqdG1(C)5WXr5P@D*~6CS8CTw*ucavVl_- zPS&Rz-smTAz5crk_J+QD_pbWUk>8PL_{T17Wp<J&=gwuh=DX%yR-86sF^e6~9WHqW zKHW?RtHF8#R1rOXuKsOH@!y*wZ95h506ox$LzJCmmuK}DmlApHA*Z3~2g3p7Ea;VL zsk$ITI7QxZaq`I1yLo5&vhlvZ^2JHd1X@M-G|u7_)f$i{uDUTDQ#WQXwV57Tfq8cG z<O$h_Q>gp;7^wQ4s{bp!Zq8LgGfLK7vpkG{i?NngG`5U@ve}nCsc`OwZ~l)hDVu=r z>cl><hfrq$Uv{G#y)Tdi{=-x5-+z!#&b~+22LGt)WZ`~o)i=A@hxXj(fWqKU-XSM+ zZEbA>^K`GeOBGIyp~~_rqY_wF&?!y3%zu<J&MZ%Qx^dHgv;Y8(Y@~OxTQn6{1QrIf zjz*qyCGq#~y}GT26xp!x3Lk>5q|&W)&KYL!fy6=qb*i7VotMYAh<eI7@pYovm~Z~t zH-&5Tj)!yj!~BQnYpZ;AT4;_r0osJhOxrM7rQc|i3+l5e5{L=(ET~r~qo;l|IXp`x zJj>2WaM07^uJ0=SaKyWi2=acx_|7dUxz%E_UOFI7Df(Fc?DGEOv-mllg!l7rl^_H~ zGm^GM7BA=TgAxQ!p_fQ3Ck8qbKB%<eS<6pb?Q9tGVs9wLo}1O?988DUtN|M%&gqh< z?m$K|6mdn!`pZ_Jx1&R}T7D;DfX9jzZ|~IR|6N^#AU6H(T{Eg*9ra#EV2hZIIC(R} zi&p_TI9+=AohSjH6+;2Jl$ey$7KazN(0EsaKbv12pvS;X&&Xiah|%6Ary&`$Qh*kY zMs=50dKCCvRv5U~6HEi=6mU@(<@2Qa`b=y26r&D;0zbE&Pw|6YWd(td;6uh?Y3x&! zjj&;cR0gKVr>G|_i#bNuOteBA8-p^_0)?Q{AL&fY^W?6HrU&99x1wcjR@n3=pw+Cu zVVMNY;~BHaM%G;NeW=I`kPTKeOdv_vMQ@k5sKP#Tt?fH^wxHc--xnBV?1N#GOqSB% zEg&xrpVysRUzy>JSL0fDjvT*{7zGg^p$L3!(LZF2`PQ!fb37*?QyRCb;1q!EOhPL7 z=f!k*VLvRfz{Jph_W23%vLV8;<tF5V?+Q`)1VbKF6JgdjBL4l7ov5Q*>{wg3Zx@mQ zuMWhiF#8Y-cU4rlTnbO5T5s?&P2-iBAfe8|h3vn7|Df<Jy@(bDeM;YfFIuib;lT3f zimzHAh3xMC$H;^J2ilJRl2Ek_j{g!H{l8Suc{krL@Z3Jj{7qy3=A(yd3I_NYb(``- z==Zag&04iOGjelm(V5s+Cz`C*vyb<8b^BpubgZqbwbg0wPCqF2{~_#8n;Gq_2Tz&S zPOsfy$7NodmO2M1hyFV4*6XDOab@Z8TP73-RroD+)^&dVTpUUNQ)F!$wXLT(zpAK+ zBR&-J>Gt#Ii+o)W$OgjYlAbjY9ALYeK)njb+y=fFZ-|UT6qjFJF~C<gMQb2W=yE2a zH=x7{=RB#Iu|Kt3?qGV0iG(zS-#Oipb6hivN(P=921y|hnR>$8fwULBw!O@C;{*7Y zL*j(__uIeU`42S_UMS3y(&aqX6lCWf2|pS9{32pI${9N}+f|=Ft)KKL;%?E}+bBM1 zSET1b?$Fw@W!XP{7A=7q3N3<=q&^P6V^_6e%!0O5XdDBcNBxBF+Ngpi0YN^-YOzYw zCTG5T{B^lJ#PKkl`f1M_*C(JN{$;PV`zhl1r5rHY?>t4z3JzX+*dcbnYq?H^gH-71 zdI_*cLN&g$Kdg)GN>uHoPvXnmGM+^2Ufk0jY8B{Xx@z7(pFcm?eo-|?GfVFB!D>N- z;8yumT$L)?+Rw5EYued7-NKpYQ-!6MC<i1pEbr`6ctX80X@;TSSM)oAsDK;Q(*JxK zmk~au(#_Ai*nfO5y-NuMWiEZ$2};HrSw$MXT9m^?L9n5U6evMtpvN9}=+p_}?0)%p znqA4IS5;B@;4*)XZ=R<%F8NqVQ=zD!2<$ilG8p1Aj9w!GMs2~F-?t(^|C#9APQAv2 zK3ryDwf6R4oPJ}&2VNU1bUUs2-n|x?m>paz3alASLFz4fn)d8g^?(SjIQyc&WeAzs z3r<l|a`v!t+=4E0vQHnUOH-vZ&UczT^!(|^E2TT?&>;)ok~Ht~_2@n9&-X@)M02rm z>VfO?u8HXjc}g<mcya!IWk6v8JveF^oHY^-DxvQ@Kb_`+`iW*~0z6*pswj`(N2wQx z5(`iUFI-6F@^V2~dz-Oa1~E=yaZKs^7N${^V0|T(Wag$q0n2D(EZp7QLki-;>pp*e z`*?XUuj3$50jET1vZaeICbTBiC>ptzMtJP9o%9hK?m19Cxp2%3zdo0NnTOi<v6GC~ zDf=&?6Bl-shN3seHv-<I#s4~(>sSJsA_){(6UH6MSTbh_!l-xqzSJtyg%XG8d|(Q2 z{?nHxbXhiTMT%Iq=F6KVNAPuF;UK2x%R6alv*-b{iIEXQho}tTd28EvE#-?9R(tVW zYq7tkL#A+qC+zOx?z0BljNUS6)F>lb<ulnko>OMEQ0<44e{*Gx5H6K6`6SW=JK7mh ztOc!qIHQOBhds<HQ;Gr)@lEaRp}{Kz@W*pOO)T9LseeFJX7u?+8#g8qVu7M4Vde&x zuh-($RJWYka+b8{)Wz|foYFG&PYp>``(`&h-8`p6&LuE{I2fj;b|))LBZ{>|FYZcx z)Klv}zA%YLUimzYv*mn4IZ&+(*-9?Vf>qH6fH|SIYPU~rn9AM9$6kKZn-2E;wNjCo zd3OMBHy5ikDM8XD^GnZSx@=4S!*aOs-#d5KxO`trZs5z3uG-i0R}aE056T+U%c%jI zT~3@=ZM1#rt||ZxabXMYSZv<XZfKl@fD(ZtIEAz+teL$X^X{L#rxw(PbIlC{j7GAW z2B{y{^PtreSBPHNO9?Y7J>UO4d~NE>OGZVq9$jsNl%{iE4pZ@kz1}-BzwVq$wU2jd zRF5<7o$N~G+;b7!8Tew(h#)5BTB>3o&V3^prkF0mE|}MHOehsC49@J$e4_V|TNqo( zdF0&z{yd-=8Ij{$HSLVW5}%2pQ6Q#jc;c+p6um-T0NEwPzdJGE;22vUd2(W<!A2Oh zZstue@x@n80@yo@ak$5*a{-hRlH3T6sMimW)C=fjb0#;}83L$UI_=Wr7)a7{=A)i> z$B|)fWb`7}jh80pD2Iu00WE`*j+P|gpk{E`)lX*uI?AfrTI5Ma<Sa0cPr?LBgo#U8 zlRO-&4PYX0qQM|uIW(BGP^Pp^Hu1(YY%|8ZpgPY4E{;WiYq04X$DZ57i^SM;0NE9E zP|P5P0j^W=@S3wVAa>Y`5q!)GVq~`B_x)K<JSg#ipf}a4mDoP+>wG#2bhKMFr9WCg z;KCJjT2F8VIwh8m6KZMvGMXqkJ5eta_eQD3ReE<904!Br2n%0)zX~>6>;PiXDBgG< z=@4Bkm;?u-KV)5Zm4j*1WW#+hUI10vf!naEtOE5whV8~5-VYrmP#G)5fur%p*t|sC zhbTZ&dB{2W<f7M4QyAO$z_H7BZ;#%`DH~$#V3GdCSD;IRg`NvUAjlo3P_tqgg4%+| zBun}d5R6rx_4+^|T+SpkHa1GYfwg-{m~SXeN=t|W3{W)4>@7+Kj9B7Y6*3QD564A6 zTv96yUBobmS(p!V6BA!~v#f;Z?hJ#}?<_fNewB03JBR^4<Lot`#XVWwauDT2Bc4_r zG$=J|u-jcuCAjOogpRFW>`W2s`T6<|)LVcW0hr>w^D;wDY@5;iIc;*wXk$mTpdI2s z(`X3J4J$3~Ari9P)<?{q?_onEkm~wq;g_IcfM7yJD1}pT^||jm%UpQ#8}`vRZTCrz zJrn<3{JHU`61_rvS!b+Cu*n$nY}iQNoooh7rf`D~2fy-&(w9C@c^(qaIe;y8X=OVW z*Lv0j>%z>vVn`ARPm9t2Foyz%WY2#LL?d{(UM7%BI6HIE(bXYIa	oqpVMTqJQDx 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 A-T(jq literal 0 HcmV?d00001 diff --git a/images/dekko_config_2.png b/images/dekko_config_2.png new file mode 100755 index 0000000000000000000000000000000000000000..28596b16f9b65e4ae3badf73ee3ca3c961ce0224 GIT binary patch literal 99372 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 Fe*ohq!-)U@ literal 0 HcmV?d00001 diff --git a/images/dekko_config_3.png b/images/dekko_config_3.png new file mode 100755 index 0000000000000000000000000000000000000000..670635933352c0376d5ba0937cac0b57e34b554f GIT binary patch literal 158329 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�)1oiQgs<dIponO2QOFw#J+}{KY!Og1oL_Hfx7G| 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%0A!e+b2=<MXCnaT)A9tmCB)xH3T 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 literal 0 HcmV?d00001 diff --git a/images/dekko_config_4.png b/images/dekko_config_4.png new file mode 100755 index 0000000000000000000000000000000000000000..bf4b26d12667adf04987489ac087248c600139cc GIT binary patch literal 150527 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 literal 0 HcmV?d00001 diff --git a/write_documentation.md b/write_documentation.md index 3f052067..3bfa3a26 100644 --- a/write_documentation.md +++ b/write_documentation.md @@ -6,12 +6,16 @@ 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. +To create a new page, you can enter the URL and edit the page from there. + Once edited, you are able to submit your change by filling an email address. ## Via GitHub The YunoHost documentation is managed through a [git repository](https://github.com/YunoHost/doc). You can send pull-requests. +Because the online editor doesn't support uploading files, using git is the prefered way if you need to upload media (e.g. images). + ## Syntax This page uses the markdown syntax, please refer to the [documentation](https://guides.github.com/features/mastering-markdown/) for further information. From 53b94280588294b6fca6543ca95f2c0b120e0ab1 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Mon, 4 Nov 2019 22:04:20 +0100 Subject: [PATCH 249/360] Propagate Kaidan to french page --- XMPP_fr.md | 1 + 1 file changed, 1 insertion(+) diff --git a/XMPP_fr.md b/XMPP_fr.md index e38c6300..594f2151 100644 --- a/XMPP_fr.md +++ b/XMPP_fr.md @@ -36,6 +36,7 @@ Il existe différents types de clients pour se connecter à XMPP. * [Conversations](https://conversations.im/) (Android) * [Movim sous Android](https://movim.eu) * [Monal](https://itunes.apple.com/us/app/monal-free-xmpp-chat/id317711500?mt=8) (iOS) +- [Kaidan](https://github.com/KaidanIM/Kaidan) (Ubuntu Touch / Plasma Mobile) Voici une liste plus exhaustive des clients XMPP : https://fr.wikipedia.org/wiki/Liste_de_clients_XMPP From 2fa8c796c9292dc20a066ab1bdff283e3af60739 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Mon, 4 Nov 2019 22:06:46 +0100 Subject: [PATCH 250/360] Propagate Dekko instructions to french page --- email_configure_client_fr.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/email_configure_client_fr.md b/email_configure_client_fr.md index 81bd37bd..8e6cd5b4 100644 --- a/email_configure_client_fr.md +++ b/email_configure_client_fr.md @@ -30,3 +30,14 @@ Suivez les instructions suivantes. (Comme pour Thunderbird, il vous faudra peut- <a href="/images/k9mail_config_2.png"><img src="/images/k9mail_config_2.png" width=200/></a> <a href="/images/k9mail_config_3.png"><img src="/images/k9mail_config_3.png" width=200/></a> <a href="/images/k9mail_config_4.png"><img src="/images/k9mail_config_4.png" width=200/></a> + +### <img src="images/dekko-app.png" width=50> Configure Dekko (on Ubuntu Touch) + +La première fois, vous pouvez simplement choisir "Ajouter un compte". Si vous avez déjà un compte configuré, appuyez sur le menu hamburger puis sur le rouage, choisissez Courrier, Comptes et appuyez sur le symbole " + ". + +Sélectionnez ensuite IMAP. Remplissez les champs et appuyez sur Suivant. Dekko va ensuite chercher la configuration. Vérifiez que tous les champs sont corrects. Assurez-vous d'avoir votre nom d'utilisateur yunohost, PAS votre adresse e-mail et choisissez "Autoriser les certificats non fiables". Faites ceci pour IMAP et SMTP et appuyez sur Suivant. Dekko va ensuite synchroniser le compte après quoi vous aurez terminé. Félicitations ! + +<a href="/images/dekko_config_1.png"><img src="/images/dekko_config_1.png" width=200/></a> +<a href="/images/dekko_config_2.png"><img src="/images/dekko_config_2.png" width=200/></a> +<a href="/images/dekko_config_3.png"><img src="/images/dekko_config_3.png" width=200/></a> +<a href="/images/dekko_config_4.png"><img src="/images/dekko_config_4.png" width=200/></a> From bda187f6feb0b08339a5dda4dcbfe0b9a834756c Mon Sep 17 00:00:00 2001 From: Laurent Peuch <cortex@worlddomination.be> Date: Thu, 7 Nov 2019 18:08:24 +0100 Subject: [PATCH 251/360] [mod] use discours real url for news --- news.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/news.md b/news.md index 3af75ddd..a3975fc3 100644 --- a/news.md +++ b/news.md @@ -29,8 +29,7 @@ blockquote > p { <script> $(document).ready(function() { // FIXME, we need to enable CORS on forum.yunohost.org - // $.get("https://forum.yunohost.org/c/announcement.rss").success(function(data) { - $.get("/_pages/announcement.rss").success(function(data) { + $.get("https://forum.yunohost.org/c/announcement.rss").success(function(data) { $(data).find("item").each(function(_, item) { var description = $(item).find("description"); // yes this is a NIGHTMARE From ef277e21a9f035714a6783d82c10990e4c00b04e Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Fri, 8 Nov 2019 15:13:34 +0000 Subject: [PATCH 252/360] =?UTF-8?q?Bonjour=20je=20viens=20de=20tester=20su?= =?UTF-8?q?r=20mon=20instance=20et=20j'ai=20du=20cr=C3=A9er=20le=20r?= =?UTF-8?q?=C3=A9pertoire=20pour=20que=20=C3=A7a=20marche=20=3D)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backup_fr.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/backup_fr.md b/backup_fr.md index 1b3e0bc2..aa556b13 100644 --- a/backup_fr.md +++ b/backup_fr.md @@ -107,14 +107,16 @@ Ensuite, **à la place de** `yunohost tools postinstall`, réalisez la restaurat yunohost backup restore <nom_d'archive> ``` -Note: si votre archive n'est pas dans `/home/yunohost.backup/archives`, vous pouvez spécifier où elle se trouve comme ceci : +Note: si votre archive n'est pas dans `/home/yunohost.backup/archives`, vous pouvez créer le répertoire et déplacer l'archive comme ceci : ```bash -yunohost backup restore /path/to/<archivename> +mkdir /home/yunohost.backup +mkdir /home/yunohost.backup/archives +mv /path/to/<archivename> /home/yunohost.backup/archives/ +yunohost backup restore <nom_d'archive> ``` - Pour aller plus loin -------------------- From fbc4e767aa21bd89a945e88167ebc4c33a954e13 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Fri, 8 Nov 2019 16:18:38 +0100 Subject: [PATCH 253/360] Propagate to english page --- backup.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/backup.md b/backup.md index 4ed38931..e69b5771 100644 --- a/backup.md +++ b/backup.md @@ -106,10 +106,12 @@ One specific feature is the ability to restore a full archive *instead* of the p yunohost backup restore <archivename> ``` -Note: If your archive isn't in `/home/yunohost.backup/archives`, you can specify where it is like this : +Note: If your archive isn't in `/home/yunohost.backup/archives`, you can create the directory, move the archive into it, and restore it like this: ```bash -yunohost backup restore /path/to/<archivename> +mkdir -p /home/yunohost.backup/archives +mv /path/to/<archivename> /home/yunohost.backup/archives/ +yunohost backup restore <archivename> ``` ## To go futher From 489ae9a38180bde8820fa939a33bc9581a95bd81 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Fri, 8 Nov 2019 16:32:40 +0100 Subject: [PATCH 254/360] Improve instructions --- backup_fr.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/backup_fr.md b/backup_fr.md index aa556b13..a76077de 100644 --- a/backup_fr.md +++ b/backup_fr.md @@ -110,9 +110,8 @@ yunohost backup restore <nom_d'archive> Note: si votre archive n'est pas dans `/home/yunohost.backup/archives`, vous pouvez créer le répertoire et déplacer l'archive comme ceci : ```bash -mkdir /home/yunohost.backup -mkdir /home/yunohost.backup/archives -mv /path/to/<archivename> /home/yunohost.backup/archives/ +mkdir -p /home/yunohost.backup/archives +mv /chemin/vers/<nom_d'archive> /home/yunohost.backup/archives/ yunohost backup restore <nom_d'archive> ``` From b26536a94447eb61323f4547e9f12c9bdc043754 Mon Sep 17 00:00:00 2001 From: Wingysam <wingysam@gmail.com> Date: Mon, 11 Nov 2019 08:37:51 -0500 Subject: [PATCH 255/360] Burn or Copy ISO: Change dd instructions from /dev/sdb to /dev/sdz --- burn_or_copy_iso.md | 4 ++-- burn_or_copy_iso_fr.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/burn_or_copy_iso.md b/burn_or_copy_iso.md index 13e365b8..f24af473 100644 --- a/burn_or_copy_iso.md +++ b/burn_or_copy_iso.md @@ -28,10 +28,10 @@ Put your USB stick on, select your YunoHost ISO and click "OK" ### With `dd` If you know your way around command line, you may also flash your USB stick with -`dd`. Assuming your USB stick is `/dev/sdb` (be careful !!), you may run : +`dd`. Assuming your USB stick is `/dev/sdz` (be careful !!), you may run : ```bash -dd if=/path/to/yunohost.iso of=/dev/sdb +dd if=/path/to/yunohost.iso of=/dev/sdz ``` --- diff --git a/burn_or_copy_iso_fr.md b/burn_or_copy_iso_fr.md index 4fd5aab6..c2849fbe 100644 --- a/burn_or_copy_iso_fr.md +++ b/burn_or_copy_iso_fr.md @@ -28,11 +28,11 @@ Branchez votre clef USB, selectionnez l'ISO YunoHost puis cliquez sur 'OK' ### Avec `dd` Si vous êtes familier avec la ligne de commande, il est possible de flasher la -clef USB avec `dd`. En supposant que votre clef USB soit `/dev/sdb` (faites +clef USB avec `dd`. En supposant que votre clef USB soit `/dev/sdz` (faites attention !!), vous pouvez exécuter : ```bash -dd if=/chemin/de/yunohost.iso of=/dev/sdb +dd if=/chemin/de/yunohost.iso of=/dev/sdz ``` --- From 6b6e9a9eed2a27ded10dbd23dd2065dac7e8a8fc Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sun, 17 Nov 2019 18:15:26 +0000 Subject: [PATCH 256/360] =?UTF-8?q?J'ai=20indiqu=C3=A9=20le=20lien=20v?= =?UTF-8?q?ers=20le=20t=C3=A9l=C3=A9chargement=20de=20la=20Raspbian=20Stre?= =?UTF-8?q?tch=20Lite,=20car=20il=20n'y=20=C3=A9tait=20plus!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install_on_raspberry_fr.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/install_on_raspberry_fr.md b/install_on_raspberry_fr.md index beb34373..3290b24f 100644 --- a/install_on_raspberry_fr.md +++ b/install_on_raspberry_fr.md @@ -45,7 +45,8 @@ Nous déconseillons l'installation manuelle car elle est plus technique et plus 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. </div> -0. Installez Raspbian Stretch 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. +Le lien vers la Raspbian Stretch Lite est ici: https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2019-04-09/ 1. Connectez-vous en ssh au Raspberry Pi avec l'utilisateur pi. Définissez un mot de passe root avec ```bash From 99d4c7db6077cc8a46cac66aa7f795110f5b0c7e Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Sun, 17 Nov 2019 20:10:59 +0100 Subject: [PATCH 257/360] Propagate change to english version --- install_on_raspberry.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install_on_raspberry.md b/install_on_raspberry.md index a6f0090f..fa204721 100644 --- a/install_on_raspberry.md +++ b/install_on_raspberry.md @@ -45,7 +45,7 @@ We do not recommend the manual installation because it is more technical and lon 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). </div> -0. Install Raspbian Stretch 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/)). The Raspbian Stretch Lite can be found here: https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2019-04-09/ 1. Connect to your Raspberry Pi with the user `pi`. Set the root password with ```bash From 51a04bbeb3dfb1b5c1212df15aebb9ea5c722539 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Thu, 21 Nov 2019 07:10:30 +0000 Subject: [PATCH 258/360] Added command to set the new domain as the main domain --- dns_nohost_me.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dns_nohost_me.md b/dns_nohost_me.md index 3f0a0b71..2452f9fc 100644 --- a/dns_nohost_me.md +++ b/dns_nohost_me.md @@ -48,6 +48,9 @@ yunohost dyndns subscribe -d whateveryouwant.nohost.me # Update the DNS conf yunohost dyndns update + +# Set it as the main domain +yunohost tools maindomain --new-domain whateveryouwant.nohost.me ``` #### Retrieve a nohost.me, noho.st or ynh.fr domain From 997b6b61c7d7ceb8724ce1becb67b20a73e91fa3 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Tue, 26 Nov 2019 14:35:41 +0000 Subject: [PATCH 259/360] Adding "Rolisteam" --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index cb9d06b5..44bb611c 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -106,6 +106,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [qBittorrent](https://github.com/qbittorrent/qBittorrent) - [racktables](http://racktables.org) / [github](https://github.com/RackTables/racktables) - [Radarr](https://github.com/Radarr/Radarr) +- [Rolisteam server](http://www.rolisteam.org/) / [github](https://github.com/Rolisteam/rolisteam) - [Request Tracker](https://bestpractical.com) / [github](https://github.com/bestpractical/rt) - [Restya](http://restya.com) / [github](https://github.com/RestyaPlatform/board/) - [Retroshare](https://retroshare.cc/) / [github](https://github.com/RetroShare/RetroShare) From 40b4a0a70d1a980334a45ecc4dfbb71cb216f708 Mon Sep 17 00:00:00 2001 From: tituspijean <tituspijean@outlook.com> Date: Thu, 28 Nov 2019 20:56:20 +0100 Subject: [PATCH 260/360] [add] non-latin characters in domain names Based on [this thread](https://forum.yunohost.org/t/my-umlaut-broke-my-instance/9666). --- domains.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/domains.md b/domains.md index 31f724a5..f9527a1d 100644 --- a/domains.md +++ b/domains.md @@ -9,6 +9,11 @@ The domain chosen during the postinstall is defined as the main domain of the se Finally, take note that, in the context of YunoHost, there is no hierarchy between the domains it knows. In the previous example, you may add a third domain `foo.yolo.com` - but it would be considered as a domain independent of `yolo.com`. +Non-latin characters +----------------- + +If your domain has special, non-latin characters, you need to use its [internationalized version](https://en.wikipedia.org/wiki/Internationalized_domain_name) through [Punycode](https://en.wikipedia.org/wiki/Punycode). You can use [this converter](https://www.charset.org/punycode), and use the converted domain name in your YunoHost configuration. + DNS configuration ----------------- From cf8b681496098bf0ba31a2ea9ba5886083484618 Mon Sep 17 00:00:00 2001 From: tituspijean <tituspijean@outlook.com> Date: Thu, 28 Nov 2019 21:01:49 +0100 Subject: [PATCH 261/360] [add] non-latin characters in domain names _fr --- domains_fr.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/domains_fr.md b/domains_fr.md index d58fcd35..862466ce 100644 --- a/domains_fr.md +++ b/domains_fr.md @@ -9,6 +9,11 @@ Le domaine choisi lors de la postinstall est défini comme le domaine principal Enfin, il faut noter que, dans le contexte de YunoHost, il n'y a pas de hiérarchie entre les domaines qu'il connaît. Dans l'exemple précédent, on peut ajouter un troisième domaine `foo.yolo.com` - mais il serait considéré comme un domaine indépendant de `yolo.com`. +Caractères non latins +----------------- + +Si votre domain contient des caractères spéciaux, non latins, vous devez utiliser sa [version internationalisée](https://fr.wikipedia.org/wiki/Nom_de_domaine_internationalis%C3%A9) en [Punycode](https://fr.wikipedia.org/wiki/Punycode). Vous pouvez utiliser [ce convertisseur](hhttps://www.charset.org/punycode), et utiliser le nom de domaine converti dans YunoHost. + Configuration DNS ----------------- From d0f2bfd189c2a7d53b3016cd0dbf29c4aa7f050a Mon Sep 17 00:00:00 2001 From: Gofannon <17145502+Gofannon@users.noreply.github.com> Date: Thu, 28 Nov 2019 21:20:03 +0100 Subject: [PATCH 262/360] Typo --- domains_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domains_fr.md b/domains_fr.md index 862466ce..b4dd22bc 100644 --- a/domains_fr.md +++ b/domains_fr.md @@ -12,7 +12,7 @@ Enfin, il faut noter que, dans le contexte de YunoHost, il n'y a pas de hiérarc Caractères non latins ----------------- -Si votre domain contient des caractères spéciaux, non latins, vous devez utiliser sa [version internationalisée](https://fr.wikipedia.org/wiki/Nom_de_domaine_internationalis%C3%A9) en [Punycode](https://fr.wikipedia.org/wiki/Punycode). Vous pouvez utiliser [ce convertisseur](hhttps://www.charset.org/punycode), et utiliser le nom de domaine converti dans YunoHost. +Si votre domain contient des caractères spéciaux, non latins, vous devez utiliser sa [version internationalisée](https://fr.wikipedia.org/wiki/Nom_de_domaine_internationalis%C3%A9) en [Punycode](https://fr.wikipedia.org/wiki/Punycode). Vous pouvez utiliser [ce convertisseur](https://www.charset.org/punycode), et utiliser le nom de domaine converti dans YunoHost. Configuration DNS ----------------- From e1d9ff9073f825e97ca64ff6572d1f99fe910c2b Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Fri, 29 Nov 2019 17:19:14 +0100 Subject: [PATCH 263/360] Propagate to french version --- dns_nohost_me_fr.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dns_nohost_me_fr.md b/dns_nohost_me_fr.md index 8183af16..a4d9d913 100644 --- a/dns_nohost_me_fr.md +++ b/dns_nohost_me_fr.md @@ -39,6 +39,9 @@ yunohost dyndns subscribe -d cequevousvoulez.nohost.me # Mettre à jour la configuration DNS yunohost dyndns update + +# Le définir comme nouveau domain principal +yunohost tools maindomain --new-domain whateveryouwant.nohost.me ``` ### Récupérer un domaine nohost.me, noho.st ou ynh.fr From 6baa1f5b17da37775cb70a9c5a809b45b11a12d7 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Fri, 29 Nov 2019 17:20:47 +0100 Subject: [PATCH 264/360] Update faq.md --- faq.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/faq.md b/faq.md index 62781ad5..bd38b583 100644 --- a/faq.md +++ b/faq.md @@ -10,7 +10,7 @@ YunoHost is based on Debian, so on Debian's components' licenses. Applications and applications packages have their own licenses. -#### What YunoHosts' goal? +#### What's YunoHost goal? We believe that decentralizing the Internet, and empowering people to take control and responsability back over their own data and services, is a crucial issue to guarantee @@ -64,7 +64,7 @@ or stickers :P). Considering that a few contributors are investing a large amount of time in the project, we are thinking about ways to make the project sustainable. -This could be achieved via donations, crowdfunding, and a few contributors +This could be achieved via donations, grants, and a few contributors have professional activities related to YunoHost. From 0a2ce43992a5a6f18c0a5056205ca883cb81e50c Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Fri, 29 Nov 2019 17:23:02 +0100 Subject: [PATCH 265/360] Propagate https://github.com/YunoHost/yunohost/pull/855 --- groups_and_permissions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/groups_and_permissions.md b/groups_and_permissions.md index e1ff2932..443d977c 100644 --- a/groups_and_permissions.md +++ b/groups_and_permissions.md @@ -134,7 +134,7 @@ By default, installing an app creates the permission `app.main` with `all_users` If you wish to make the application publicly available, instead of the old `unprotected_urls` mechanism, you should give access to the special groups `visitors`: ```bash -ynh_permission_update --permission "main" --remove "all_users" --add "visitors" +ynh_permission_update --permission "main" --add "visitors" ``` If you wish to create a custom permission for your app (e.g. to restrict access to an admin interface) you may use the following helpers: From 5ad3108c549d61a74ad893426ed9c2be0d931947 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Fri, 29 Nov 2019 18:19:53 +0000 Subject: [PATCH 266/360] I added a line for https://easyappointments.org/ --- apps_wishlist.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index 44bb611c..39124308 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -29,6 +29,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Croodle](https://github.com/jelhan/croodle) Schedule a date or to do a poll on a general topics, with client-side encryption. - [Darkwire.io](https://github.com/seripap/darkwire.io) - [DirectoryLister](https://github.com/DirectoryLister/DirectoryLister) +- [EasyAppointments](https://easyappointments.org/) Online appointment booker (similar to Doodle) - [eLabFTW](https://www.elabftw.net/) electronic lab notebook / [github](https://github.com/elabftw/elabftw) - [Emoncms](https://github.com/emoncms/emoncms) - [ERPnext](https://erpnext.com/download) / [github](https://github.com/frappe/erpnext) @@ -106,7 +107,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [qBittorrent](https://github.com/qbittorrent/qBittorrent) - [racktables](http://racktables.org) / [github](https://github.com/RackTables/racktables) - [Radarr](https://github.com/Radarr/Radarr) -- [Rolisteam server](http://www.rolisteam.org/) / [github](https://github.com/Rolisteam/rolisteam) - [Request Tracker](https://bestpractical.com) / [github](https://github.com/bestpractical/rt) - [Restya](http://restya.com) / [github](https://github.com/RestyaPlatform/board/) - [Retroshare](https://retroshare.cc/) / [github](https://github.com/RetroShare/RetroShare) From 2aaec3ce3494e694d9c84afc0bc59cbe4ea40465 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sat, 30 Nov 2019 21:32:47 +0000 Subject: [PATCH 267/360] Typo inpacter ->impacter --- packaging_apps_trap_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging_apps_trap_fr.md b/packaging_apps_trap_fr.md index aff67345..0ad71544 100644 --- a/packaging_apps_trap_fr.md +++ b/packaging_apps_trap_fr.md @@ -36,7 +36,7 @@ Ou ignorer complètement les signaux de sorties concernés. trap "" ERR ``` -Dans ce dernier cas, le signal d'interruption n'aura aucun effet sur le shell. Cela peux être utile pour une commande dont la sortie en erreur ne doit pas inpacter le déroulement du script d'installation. +Dans ce dernier cas, le signal d'interruption n'aura aucun effet sur le shell. Cela peux être utile pour une commande dont la sortie en erreur ne doit pas impacter le déroulement du script d'installation. ### Stopper le script d'installation et nettoyer avant de quitter. En cas d'erreur du script d'installation, trap doit nous permettre de stopper l'installation, puis de nettoyer les fichiers résiduels partiellement installés avant de quitter le script. From 51e4dccf21cb0ff4f9c33769634b2274bc7c43b6 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Thu, 5 Dec 2019 21:07:44 +0000 Subject: [PATCH 268/360] Added Gancio - a shared agenda for local communities (with activitypub support) --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index 44bb611c..5dfff59f 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -37,6 +37,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [FitTrackee](https://github.com/SamR1/FitTrackee) - [Fossil](http://www.fossil-scm.org) - [WebThings Gateway](https://iot.mozilla.org/gateway/) [github](https://github.com/mozilla-iot/) +- [Gancio](https://gancio.org/) / [framagit](https://framagit.org/les/gancio) - [Geneweb](https://geneweb.tuxfamily.org) / [github](https://github.com/geneweb/geneweb) - [GetSimple CMS](http://get-simple.info) / [github](https://github.com/GetSimpleCMS/GetSimpleCMS) - [Goaccess](https://goaccess.io) Web log analyser (replaces piwik without js tracking scripts) / [github](https://github.com/allinurl/goaccess) From 969a1446c49d32e1acc5ce272348692b38aff2ff Mon Sep 17 00:00:00 2001 From: toitoinebzh <toitoinebzh@laposte.net> Date: Sat, 7 Dec 2019 21:36:09 +0100 Subject: [PATCH 269/360] add doc for fluxbb --- app_fluxbb.md | 7 +++++++ app_fluxbb_fr.md | 5 +++++ 2 files changed, 12 insertions(+) create mode 100644 app_fluxbb.md create mode 100644 app_fluxbb_fr.md diff --git a/app_fluxbb.md b/app_fluxbb.md new file mode 100644 index 00000000..01ad77cc --- /dev/null +++ b/app_fluxbb.md @@ -0,0 +1,7 @@ +#FluxBB + +FluxBB is fast, light, user-friendly forum software for your website. + +FluxBB is designed as a lighter, faster alternative to some of the traditional feature heavy forum applications. It is easy to use and has a proven track record of stability and security making it an ideal choice of forum for your website. + +[Website](https://fluxbb.org/) \ No newline at end of file diff --git a/app_fluxbb_fr.md b/app_fluxbb_fr.md new file mode 100644 index 00000000..2c20f2ae --- /dev/null +++ b/app_fluxbb_fr.md @@ -0,0 +1,5 @@ +#FluxBB + +FluxBB est un forum de discussions écrit en PHP rapide et léger. + +[Site internet](https://fluxbb.org/) \ No newline at end of file From e12a1a32b4dba64490d0172f93b78147ff335e2f Mon Sep 17 00:00:00 2001 From: toitoinebzh <toitoinebzh@laposte.net> Date: Sat, 7 Dec 2019 21:44:31 +0100 Subject: [PATCH 270/360] add doc for blogotext --- app_blogotext.md | 11 +++++++++++ app_blogotext_fr.md | 11 +++++++++++ 2 files changed, 22 insertions(+) create mode 100644 app_blogotext.md create mode 100644 app_blogotext_fr.md diff --git a/app_blogotext.md b/app_blogotext.md new file mode 100644 index 00000000..d60c73f9 --- /dev/null +++ b/app_blogotext.md @@ -0,0 +1,11 @@ +#BlogoText + +This is BlogoText, the lightweight SQLite Blog-Engine. +Features + + * Blog with comments and RSS feeds + * Links sharing + * RSS Reader + * Images/Files uploading and sharing + * JSON/ZIP/HTML import-export; WordPress import + * Support Addons diff --git a/app_blogotext_fr.md b/app_blogotext_fr.md new file mode 100644 index 00000000..00aa4782 --- /dev/null +++ b/app_blogotext_fr.md @@ -0,0 +1,11 @@ +#BlogoText + +Ceci est BlogoText, un moteur de blog léger. +Caractéristiques + + * Blog avec commentaires et flux RSS + * Partage de liens + * Lecteur RSS + * Téléversement et partage d'images/fichiers + * import-export au format JSON/ZIP/HTML; import WordPress + * Support Addons From 133b18a97d57df20b4c5d78062657768bbf1c0d7 Mon Sep 17 00:00:00 2001 From: toitoinebzh <toitoinebzh@laposte.net> Date: Sat, 7 Dec 2019 21:48:17 +0100 Subject: [PATCH 271/360] add doc for webtrees --- app_webtrees.md | 8 ++++++++ app_webtrees_fr.md | 7 +++++++ 2 files changed, 15 insertions(+) create mode 100644 app_webtrees.md create mode 100644 app_webtrees_fr.md diff --git a/app_webtrees.md b/app_webtrees.md new file mode 100644 index 00000000..d3c9e776 --- /dev/null +++ b/app_webtrees.md @@ -0,0 +1,8 @@ +#Webtrees + +webtrees is the web's leading online collaborative genealogy application. + + * It works from standard GEDCOM files, and is therefore compatible with every major desktop application. + * It aims to to be efficient and effective by using the right combination of third-party tools, design techniques and open standards. + +webtrees allows you to view and edit your genealogy on your website. It has full editing capabilities, full privacy functions, and supports imedia such as photos and document images. As an online program, it fosters extended family participation and good ancestral recording habits, as it simplifies the process of collaborating with others working on your family lines. Your latest information is always on your web site and available for others to see, defined by viewing rules you set. \ No newline at end of file diff --git a/app_webtrees_fr.md b/app_webtrees_fr.md new file mode 100644 index 00000000..ca030140 --- /dev/null +++ b/app_webtrees_fr.md @@ -0,0 +1,7 @@ +#Webtrees + +webtrees est le chef de file sur le Web des logiciels de généalogie conversationnels en ligne. C'est un logiciel Open Source et il coûte zéro $ - oui, totalement GRATUIT ! + +Vous n'avez besoin que d'un serveur web avec PHP et MySQL. + +Il exploite les fichiers de généalogie au format GEDCOM standard, par conséquent, il est compatible avec toutes les applications de bureau majeures; il vise à être efficient et efficace en utilisant la bonne combinaison d'outils tiers, des techniques de conception et des normes d'ouverture standards. \ No newline at end of file From 6a420a0933f54ffc035c35db930ce7eec221bf5a Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 9 Dec 2019 14:56:25 +0000 Subject: [PATCH 272/360] Add Gancio --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index 44bb611c..5dfff59f 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -37,6 +37,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [FitTrackee](https://github.com/SamR1/FitTrackee) - [Fossil](http://www.fossil-scm.org) - [WebThings Gateway](https://iot.mozilla.org/gateway/) [github](https://github.com/mozilla-iot/) +- [Gancio](https://gancio.org/) / [framagit](https://framagit.org/les/gancio) - [Geneweb](https://geneweb.tuxfamily.org) / [github](https://github.com/geneweb/geneweb) - [GetSimple CMS](http://get-simple.info) / [github](https://github.com/GetSimpleCMS/GetSimpleCMS) - [Goaccess](https://goaccess.io) Web log analyser (replaces piwik without js tracking scripts) / [github](https://github.com/allinurl/goaccess) From fe97dc2ca68349ae6ab357c8ff3a538f31d9f56d Mon Sep 17 00:00:00 2001 From: Eauchat <34686393+eauchat@users.noreply.github.com> Date: Wed, 11 Dec 2019 12:15:49 +0000 Subject: [PATCH 273/360] Added couchdb and transpay --- apps_wishlist.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index 5dfff59f..48b26b63 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -25,6 +25,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Cockpit](http://cockpit-project.org/) - [Commafeed](https://github.com/Athou/commafeed) - [Converse.js](https://conversejs.org) / [github](https://github.com/jcbrand/converse.js) +- [Couchdb](https://couchdb.apache.org/) databases creation and management - [Cozy](https://github.com/cozy) - [Croodle](https://github.com/jelhan/croodle) Schedule a date or to do a poll on a general topics, with client-side encryption. - [Darkwire.io](https://github.com/seripap/darkwire.io) @@ -127,6 +128,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Taskwarrior](https://taskwarrior.org) / [github](https://github.com/GothenburgBitFactory/taskwarrior) - [TMate](https://tmate.io/) / [github](https://github.com/tmate-io/tmate) - [Tracim](https://github.com/tracim/tracim) +- [Transpay](https://gitlab.kokakiwi.net/transposees/transpay) receive and manage donations - [Twister](http://twister.net.co) / [github](https://github.com/miguelfreitas/twister-core/) - [TwitRSS.me](http://twitrss.me/) / [Github](https://github.com/ciderpunx/twitrssme) Scrapes Twitter to create RSS feeds. - [Volumio](https://volumio.org) / [github](https://github.com/volumio) From 26a6434e723297d155757e60c474cb514beee50b Mon Sep 17 00:00:00 2001 From: Thatoo <Thatoo@users.noreply.github.com> Date: Wed, 11 Dec 2019 16:26:47 +0100 Subject: [PATCH 274/360] Add Epicyon --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index 5dfff59f..a11b8b23 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -33,6 +33,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Emoncms](https://github.com/emoncms/emoncms) - [ERPnext](https://erpnext.com/download) / [github](https://github.com/frappe/erpnext) - [EteSync](https://www.etesync.com/) / [github](https://github.com/etesync) +- [Epicyon](https://epicyon.net/) / [gitlab](https://gitlab.com/bashrc2/epicyon) - [FEX](http://fex.rus.uni-stuttgart.de/) - [FitTrackee](https://github.com/SamR1/FitTrackee) - [Fossil](http://www.fossil-scm.org) From 9becedeb98deaf96d921595edc154a3a7e3bf2cd Mon Sep 17 00:00:00 2001 From: Eauchat <34686393+eauchat@users.noreply.github.com> Date: Wed, 11 Dec 2019 23:26:51 +0000 Subject: [PATCH 275/360] Removed transpay Sorry, I don't know how I managed to miss that transpay is already packaged for yunohost :) --- apps_wishlist.md | 1 - 1 file changed, 1 deletion(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index 48b26b63..4481ff97 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -128,7 +128,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Taskwarrior](https://taskwarrior.org) / [github](https://github.com/GothenburgBitFactory/taskwarrior) - [TMate](https://tmate.io/) / [github](https://github.com/tmate-io/tmate) - [Tracim](https://github.com/tracim/tracim) -- [Transpay](https://gitlab.kokakiwi.net/transposees/transpay) receive and manage donations - [Twister](http://twister.net.co) / [github](https://github.com/miguelfreitas/twister-core/) - [TwitRSS.me](http://twitrss.me/) / [Github](https://github.com/ciderpunx/twitrssme) Scrapes Twitter to create RSS feeds. - [Volumio](https://volumio.org) / [github](https://github.com/volumio) From deb57787c70729de05bd0dd61d7159df94f08a86 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 16 Dec 2019 23:28:49 +0000 Subject: [PATCH 276/360] Hi, i have suggested adding the Citadel groupware platform to the yunohost pantheon. I am in no doubt it would be a perfect platform for home hosting. --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index a11b8b23..2cb46705 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -22,6 +22,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [btcpayserver](https://github.com/btcpayserver/btcpayserver) - [cgit](http://git.zx2c4.com/cgit/about) - [CheckUp](https://sourcegraph.github.io/checkup) / [github](https://github.com/sourcegraph/checkup) +- [citadel-suite - Debian](https://packages.debian.org/stretch/citadel-suite) / [citadel easyinstall - citadel.org](http://www.citadel.org/doku.php?id=installation:easyinstall:easyinstall) Citadel is a complete and feature-rich open source groupware platform. Directly descending from a well known C/PM BBS system, it has a venerable [history](http://www.citadel.org/doku.php?id=documentation:citadel_past_present_and_future#citadel.past.present.and.future) - [Cockpit](http://cockpit-project.org/) - [Commafeed](https://github.com/Athou/commafeed) - [Converse.js](https://conversejs.org) / [github](https://github.com/jcbrand/converse.js) From 7908abaf82a1e7c5e889f246642979b7cf28a9a1 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Tue, 17 Dec 2019 12:58:34 +0000 Subject: [PATCH 277/360] Added Thredded forum server --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index a11b8b23..7344e0f2 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -128,6 +128,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Taskwarrior](https://taskwarrior.org) / [github](https://github.com/GothenburgBitFactory/taskwarrior) - [TMate](https://tmate.io/) / [github](https://github.com/tmate-io/tmate) - [Tracim](https://github.com/tracim/tracim) +- [Thredded](https://thredded.org/) / [github](https://github.com/thredded/thredded) - [Twister](http://twister.net.co) / [github](https://github.com/miguelfreitas/twister-core/) - [TwitRSS.me](http://twitrss.me/) / [Github](https://github.com/ciderpunx/twitrssme) Scrapes Twitter to create RSS feeds. - [Volumio](https://volumio.org) / [github](https://github.com/volumio) From bcc080ec8997f0e323df0b02f22a29b0c2d735b2 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Tue, 17 Dec 2019 18:43:03 +0000 Subject: [PATCH 278/360] Added some words to the "Via GitHub" page --- write_documentation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/write_documentation.md b/write_documentation.md index 3bfa3a26..0d4937f7 100644 --- a/write_documentation.md +++ b/write_documentation.md @@ -12,7 +12,7 @@ Once edited, you are able to submit your change by filling an email address. ## Via GitHub -The YunoHost documentation is managed through a [git repository](https://github.com/YunoHost/doc). You can send pull-requests. +The YunoHost documentation is managed through a [git repository](https://github.com/YunoHost/doc). You can send pull-requests, and do not forget to report your issues. Because the online editor doesn't support uploading files, using git is the prefered way if you need to upload media (e.g. images). From 2a1ee687a0a8b4a0468e1435ef845b20ac69d874 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sun, 22 Dec 2019 12:22:59 +0000 Subject: [PATCH 279/360] Corrected some typos --- certificate.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/certificate.md b/certificate.md index aff35a2c..49b514fd 100644 --- a/certificate.md +++ b/certificate.md @@ -18,8 +18,8 @@ from the web administration interface or from the command line. ### Install a Let's Encrypt certificate Before attempting to install a Let's Encrypt certificate, you should make sure -that your DNS is correctly configured (votre.domaine.tld should point to -your server's IP) and that your domain is accessible though HTTP from outside +that your DNS is correctly configured (your.domain.tld should point to +your server's IP) and that your domain is accessible through HTTP from outside your local network (i.e. at least port 80 should be forwarded to your server). #### From the web administration interface From 875b5081861d5e3ed3c2a678efe0d3b827d466fb Mon Sep 17 00:00:00 2001 From: lops <xhetact@mykolab.com> Date: Tue, 24 Dec 2019 17:13:18 +0100 Subject: [PATCH 280/360] Avoid confusion with Ynh KeeWeb app --- app_nextcloud_keeweb.md | 2 +- app_nextcloud_keeweb_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app_nextcloud_keeweb.md b/app_nextcloud_keeweb.md index 75a1e146..85f4adee 100644 --- a/app_nextcloud_keeweb.md +++ b/app_nextcloud_keeweb.md @@ -1,4 +1,4 @@ -# The KeeWeb application +# The KeeWeb application for NextCloud The KeeWeb application is a password manager integrated into Nextcloud. For example, it allows you to read a KeePass file (*.kdbx*) stored on your Nextcloud instance. But sometimes Nextcloud does not let the application support these files, which makes it impossible to read them from KeeWeb. To remedy this, diff --git a/app_nextcloud_keeweb_fr.md b/app_nextcloud_keeweb_fr.md index 21d25582..76bb8ee5 100644 --- a/app_nextcloud_keeweb_fr.md +++ b/app_nextcloud_keeweb_fr.md @@ -1,4 +1,4 @@ -# L'application KeeWeb +# L'application KeeWeb pour NextCloud L'application Keeweb sur le catalogue de nextcloud - [apps.nextcloud.com/keeweb](https://apps.nextcloud.com/apps/keeweb) From 710f7b3919c8e6877ff7a832793a79befec175ce Mon Sep 17 00:00:00 2001 From: lops <xhetact@mykolab.com> Date: Tue, 24 Dec 2019 17:19:47 +0100 Subject: [PATCH 281/360] Change url to main readme + add scan step --- app_nextcloud_keeweb.md | 8 +++++++- app_nextcloud_keeweb_fr.md | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/app_nextcloud_keeweb.md b/app_nextcloud_keeweb.md index 85f4adee..a6039426 100644 --- a/app_nextcloud_keeweb.md +++ b/app_nextcloud_keeweb.md @@ -2,7 +2,7 @@ The KeeWeb application is a password manager integrated into Nextcloud. For example, it allows you to read a KeePass file (*.kdbx*) stored on your Nextcloud instance. But sometimes Nextcloud does not let the application support these files, which makes it impossible to read them from KeeWeb. To remedy this, -[a solution](https://github.com/jhass/nextcloud-keeweb/issues/34) exists. +[a solution](https://github.com/jhass/nextcloud-keeweb/blob/master/README.md#mimetype-detection) exists. Go to the Nextcloud configuration directory: @@ -26,4 +26,10 @@ Then add in this file the following text: Save the file (**CTRL** + **o**) and exit nano (**CTRL** + **c**). +Then run a scan by executing next command as root: + +```bash +sudo -u nextcloud php /var/www/nextcloud/occ files:scan --all +``` + Now the problem is fixed. diff --git a/app_nextcloud_keeweb_fr.md b/app_nextcloud_keeweb_fr.md index 76bb8ee5..cded19d4 100644 --- a/app_nextcloud_keeweb_fr.md +++ b/app_nextcloud_keeweb_fr.md @@ -29,4 +29,10 @@ Puis ajouter dans ce fichier le texte suivent : Enregistrer le fichier (**CTRL** + **o**) et quitter nano (**CTRL** + **c**). +Ensuite lancer un scan en tant que root: + +```bash +sudo -u nextcloud php /var/www/nextcloud/occ files:scan --all +``` + A présent, le problème est corrigé. From c0c75f976c1c835055377daf726caddce8daacb9 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Wed, 25 Dec 2019 23:42:19 +0000 Subject: [PATCH 282/360] Change Guacamole URL --- apps_wishlist.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index a11b8b23..621224cd 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -45,7 +45,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Gollum](https://github.com/gollum/gollum) - [Goploader](https://github.com/Depado/goploader) - [Granary](https://github.com/snarfed/granary) -- [Guacamole](http://guac-dev.org) +- [Guacamole](http://guacamole.apache.org/) - [Habitica](https://habitica.com/) / [github](https://github.com/HabitRPG/habitica) - [HackMD CE](https://github.com/hackmdio/hackmd) - [Helpy](https://github.com/helpyio/helpy) From a57e91ed84423af33af1d884027f8a40e2bc3d95 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 30 Dec 2019 09:10:22 +0000 Subject: [PATCH 283/360] Put Joplin on proper alphabetical order --- apps_wishlist.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index a11b8b23..1213d584 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -56,9 +56,9 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Invoice Ninja](https://www.invoiceninja.com) / [github](https://github.com/invoiceninja/invoiceninja) - [InvoicePlane](https://invoiceplane.com) / [github](https://github.com/InvoicePlane/InvoicePlane) - [IPFS](https://ipfs.io) / [github](https://github.com/ipfs/ipfs) -- [Joplin](http://joplin.cozic.net/) / [github](https://github.com/laurent22/joplin) - [Jellyfin](https://github.com/jellyfin) - [JS Bin](http://jsbin.com/help/2-second-setup) / [github](https://github.com/jsbin/) +- [Joplin](http://joplin.cozic.net/) / [github](https://github.com/laurent22/joplin) - [Kiwix](http://www.kiwix.org/) Offline wikipedia / [github](https://github.com/kiwix/) - [Known](https://withknown.com) / [github](https://github.com/idno/known) - [Koel](http://koel.phanan.net) / [github](https://github.com/phanan/koel) From 7fb46569fbf2ab99d5bf7849b764ff2a810d52fb Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Tue, 31 Dec 2019 02:50:08 +0000 Subject: [PATCH 284/360] Added Webhooks.site request. --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index a11b8b23..390a5390 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -132,6 +132,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [TwitRSS.me](http://twitrss.me/) / [Github](https://github.com/ciderpunx/twitrssme) Scrapes Twitter to create RSS feeds. - [Volumio](https://volumio.org) / [github](https://github.com/volumio) - [WebODF](http://webodf.org) / [github](https://github.com/webodf/WebODF) +- [Webhook.site](https://docs.webhook.site/) / [github](https://github.com/fredsted/webhook.site) - [Wireguard](https://www.wireguard.com/) / [git](https://git.zx2c4.com/WireGuard/) - [Xibo](https://github.com/xibosignage) - A FLOSS digital signage solution (CMS?) - [Xonotic](http://xonotic.org) / [gitlab](https://gitlab.com/xonotic) From 9825136c3b8c4305a617190a28a1c69f52cf42de Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Thu, 2 Jan 2020 18:37:46 +0000 Subject: [PATCH 285/360] Petite faute de grammaire --- packaging_apps_levels_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging_apps_levels_fr.md b/packaging_apps_levels_fr.md index f6bca8d1..843c5f46 100644 --- a/packaging_apps_levels_fr.md +++ b/packaging_apps_levels_fr.md @@ -99,7 +99,7 @@ YEP à respecter pour atteindre le niveau 4: ### Niveau 5 **L'application ne présente aucune erreur dans [Package linter](https://github.com/YunoHost/package_linter).** -*Il peux y avoir des faux positifs dans Package linter. Ces situations seront gérées au cas par cas.* +*Il peut y avoir des faux positifs dans Package linter. Ces situations seront gérées au cas par cas.* YEP à respecter pour atteindre le niveau 5: - *[YEP 1.3](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-13---indiquer-la-licence-associ%C3%A9e-au-paquet---valid%C3%A9--auto--working-) : Indiquer la licence associée au paquet* From a23af1db40207f920e941ee010dcf50dca11fdc9 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Thu, 2 Jan 2020 23:17:47 +0000 Subject: [PATCH 286/360] i've fixed a typo and added additional information. --- apps_wishlist.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index d92ec047..4da0049b 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -117,7 +117,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [ScenariChain-server](https://download.scenari.software/SCENARIchain-server/) - [Scuttlebutt Pub](https://www.scuttlebutt.nz/contributing) - [ShareLatex](https://www.sharelatex.com) / [github](https://github.com/overleaf/overleaf) -- [Shleuder](https://schleuder.org/) +- [Schleuder](https://schleuder.org/schleuder/docs/concept.html)(Schleuder is a gpg-enabled mailing list manager with resending capabilities.) - [SocialHome](https://github.com/jaywink/socialhome) (Socialhome is best described as a federated personal profile with social networking functionality) (https://socialhome.network) - [smokeping](https://packages.debian.org/buster/smokeping) / [github](https://github.com/oetiker/SmokePing) - [Sonarr](https://sonarr.tv) / [github](https://github.com/Sonarr/Sonarr) From 694f220cbd625a823b81341ef6b993b0b2737685 Mon Sep 17 00:00:00 2001 From: ljf <ljf+git@grimaud.me> Date: Sun, 5 Jan 2020 17:51:35 +0100 Subject: [PATCH 287/360] [enh] Add a guide to gain access on a broken yunohost --- noaccess_fr.md | 147 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 noaccess_fr.md diff --git a/noaccess_fr.md b/noaccess_fr.md new file mode 100644 index 00000000..392eb502 --- /dev/null +++ b/noaccess_fr.md @@ -0,0 +1,147 @@ +# Récupérer l'accès à son YunoHost +Si vous avez perdu l'accès à votre YunoHost qui était auparavant fonctionnel, cette page est faite pour vous. + +Il existe de nombreuses causes pouvant empécher totalement ou partiellement d'accéder en administrateur à un serveur YunoHost. Dans de nombreux cas, un des moyens d'accès est inaccessible, mais les autres sont fonctionnels. + +Cette page va vous aider à diagnostiquer, obtenir un accés et si besoin réparer votre système. + +## Liste de causes pouvant empécher l'accès à un serveur YunoHost +Ci-dessous une liste de causes courantes de pannes: + + +### Vous avez perdu votre mot de passe administrateur +Si vous arrivez à afficher la page web d'administration (forcer le raffraichissement avec CTRL + F5 pour être sur) et que vous n'arrivez pas à vous connectez. Vous avez probablement un mot de passe érroné. + +Dans ce cas, à moins d'avoir un accès root actif (en SSH par exemple) auquel cas vous pouvez changer le mot de passe de l'utilisateur admin, vous allez devoir opérer passer en mode rescue. + +### Vous avez une erreur de certificat qui vous empèche d'accéder à la webadmin + +Si vous n'avez jamais activé Let's Encrypt ou que vous accéder à la web admin via une IP ou un domaine locale, vous pouvez accepter le certificat invalide exceptionnellement à condition d'être sur une connexion internet sûre (pas avec Tor Browser par exemple). + +Pour y parvenir, il faut aller sur la page d'administration web en utilisant la navigation privée, votre navigateur devrait vous autoriser d'ajouter une exception temporaire pour accéder à la page. + +### Vous avez accés en SSH mais pas à la Web admin ou inversement + +#### Vous avez été banni temporairement +Votre serveur YunoHost inclu un pare-feu qui banni les IP qui échouent plusieurs fois à se connecter. Dans certains cas, il peut s'agir d'un programme (nextcloud-client) qui est configuré avec un ancien mot de passe ou d'un utilisateur qui utilise la même IP que vous. + +Si vous avez été banni en tentant d'accéder à une page web, seul les pages web sont innaccessibles, vous devriez donc pouvoir accéder au serveur en SSH. De même, si vous avez été banni en SSH vous devriez pouvoir accéder à la webadmin. + +Si vous avez été banni à la fois en SSH et à la webadmin, vous pouvez essayer d'accéder à votre serveur avec une autre IP, par exemple en utilisant la 4G d'un smartphone ou en utilisant Tor Browser. + +NB: le banissement dure en général quelques minutes. Le bannissement n'est actif qu'en IPv4. + +#### Vous n'avez plus d'espace disque... +... et votre serveur web nginx qui distribue les pages de la web admin ou votre serveur SSH ne fonctionne plus. + +Pour vérifier si vous avez de l'espace disque, vous pouvez le faire de puis la web admin TODO ou avec la commande `df -h`. + +Si une de vos partition est remplie à 100%, il faut identifier ce qui prend de la place sur votre système et faire de la place. + +Attention, dans certains cas il peut s'agir d'erreur qui arrive tellement souvent qu'elles remplissent les fichiers de logs et votre système avec. + +A partir de la web admin vous pouvez relancer le service SSH. De même en SSH, vous pouvez redémarrer le serveur web nginx avec la commande `yunohost service start nginx` + +#### Vous manquez de RAM et n'avez pas de swap +... et votre serveur web nginx qui distribue les pages de la web admin ou votre serveur SSH a été tués aléatoirement. + +Quand votre serveur n'a plus de ram, il est obligé d'écrire sur le disque dans la swap, si il n'y en a pas, dans ce cas il doit tuer un des processus pour faire de l'espace. + +Vous pouvez vérifier que vous n'avez plus beaucoup de ram via la web admin ou en SSH via la commande `free -m`. + +Pour régler cette situation, vous pouvez soit: + +* optimiser votre serveur pour qu'il utilise moins de ram (suppression arrêt de services inutiles) +* ajouter de la ram +* ajouter un fichier de swap + +A partir de la web admin vous pouvez relancer le service SSH. De même en SSH, vous pouvez redémarrer le serveur web nginx avec la commande `yunohost service start nginx` + +#### Vous avez installé une app qui a cassé votre configuration web +Si vous avez installé une app de mauvaise qualité, celle-ci peut échouer à l'installation et laisser des bouts de configuration qui vont empécher le redémarrage de votre serveur web nginx qui vous permet d'accéder à la web admin. + +Dans ce cas, il faut accéder en SSH et essayer de terminer la suppresion de l'app. Si elle est déjà supprimée, il faut enlever manuellement les résidus de configuration. + +#### Votre serveur est accessible en IPv6 mais pas en IPv4 ou inversement +Dans un tel cas, il est possible que vous arriviez à accéder à votre web admin en IPv6 mais pas en SSH potentiellement en IPv4 par défaut... + +Dans ce cas il faut résoudre votre problème de connectivité. + +Dans certains cas une mise à jour de votre box a activé l'ipv6, entrainant des problèmes de configuration au niveau de votre nom de domaine. + +### Votre VPN a expiré ou ne se monte plus +Si vous utilisez un VPN a IP fixe, peut être que celui-ci est arrivé à expiration ou que l'infrastructure de votre fournisseur est en difficulté. + +Dans ce cas, vous pouvez peut être accéder à votre serveur avec son IP locale s'agissant probablement d'un serveur auto-hébergé chez-vous. + +Pour connaitre votre ip locale, certaines BOX propose une cartographie du réseau en cours avec les équipements connectés. Sinon, en ligne de commande avec linux: +``` +sudo arp-scan --local +``` + +Vous pouvez aussi essayer avec le domaine `yunohost.local` si il n'y a qu'un seul YunoHost sur votre réseau. + +Il faut voir avec votre fournisseur de VPN pour renouveller le VPN et mettre à jour les paramètre de l'app VPN Client. + +TODO + +### Votre routeur ne redirige plus vers votre serveur +Si votre routeur a été remis à zéro ou mis à jour, votre configuration de redirection de port pourrait avoir disparu. De même, l'ipv6 ou le hairpining pourrait avoir été activé. + +Typiquement si en tapant votre IP publique vous tombez sur votre box, c'est soit le hairpinning soit la redirectiond e port qui est manquante. + +### Votre serveur ping avec son IP, mais pas avec le nom de domaine +#### Votre nom de domaine a expiré +Si votre nom de domaine expire il ne redirigera plus vers votre serveur. + +Vous pouvez vérifier que votre nom de domaine a expiré en vous connectant sur l'interface de votre registrar ou en utilisant le whois par exemple via la commande `whois NOM_DE_DOMAINE`. + +Dans ce cas il faut renouveller le nom de domaine (si ile st encore temps. + +#### Votre nom de domaine est mal configuré +Si votre serveur ping avec son ip mais ne ping pas avec le nom de domaine alors il y a un problème de configuration au niveau du champs A. + +Si c'est un nom de domaine fournit par YunoHost, lancez +``` +yunohost dyndns update +``` + +Si c'est un autre nom de domaine, il faut mettre à jour votre ipv4 et votre ipv6 dans l'interface de votre registrar. + +Attention, si votre IP change régulièrement il faut mettre en place un script qui se lance régulièrement pour mettre à jour votre IP. + +#### Votre nom de domaine noho.st, nohost.me, ynh.fr est inacessible suite à une panne de l'infra YunoHost +Il arrive environ trois fois par an que l'infra de YunoHost soit en panne suite à une coupure de courant ou à un problème d'administration système. + +Vérifiez sur le forum si d'autre sont signalez le même problème. + +### Vous avez perdu l'accès en IPv4 mais vous avez accès en IPv6 ou inversement + +Dans ce cas, il faut tenter d'accéder en SSH avec l'autre IP et essayer de comprendre pourquoi le réseau en IPv4 ou en IPv6 a disparu. + +Si ce n'est pas lié à une erreur de configuration réseau sur votre système, il peut être nécessaire d'appeller votre fournisseur de serveur ou d'accès à internet pour vérifier que le problème n'ets pas chez eux. + +### Vous avez perdu l'accès en IPv4 (ET en IPv6 le cas échéant) +Vous pouvez le vérifier en tentant de faire des ping sur votre serveur en IPv4 et en IPv6. + +Dans ce cas, vous devriez essayer de brancher un clavier/écran sur votre serveur ou d'y accéder par VNC si c'est un serveur distant. + +#### Vous pouvez vous connecter avec l'utilisateur admin et le mot de passe +A partir de là vous devriez diagnostiquer votre problème réseau le réparer ou si ce n'est pas lié au système contacter le support de votre fournisseur de serveur ou de connexion Internet. + +#### Votre serveur est coincé au démarrage +Dans certains cas, votre serveur peut rester coincer au démarrage. Il peut s'agir d'un problème suite à l'installation d'un nouveau kernel. Essayez de choisir un autre kernel avec VNC ou avec l'écran lors du boot. + +Si vous êtes en grub rescue, dans ce cas il peut s'agir d'un problème de configuration de grub ou d'un disque corrompu. + +Dans ce cas il faut accéder au disque avec un autre système (mode rescue du fournisseur, live usb, lire la carte SD ou le disque dur avec un autre ordinateur) et essayer de vérifier l'intégrité des partitions avec smartctl, fsck et mount. + +Si les disques sont corrompus et difficile à monter, il faut sauvegarder les données et potentiellement refaire un formattage/réinstaller et/ou changer le disque. Si on arrive à monter le disque, il est possible d'utiliser systemd-nspawn pour entrer dans la base de donnée. + +Sinon, relancer grub-update et grub-install en chroot ou avec systemd-nspawn. + +#### L'accès en VNC ou via écran ne fonctionne pas +Dans ce cas il peut s'agir d'un problème matèriel sur votre serveur physique ou d'un problème d'hyperviseur si c'est un VPS. + +Si c'est une machine loué contacter le support de votre fournisseur. Sinon essayez de dépanner votre machine en retirant les composants qui peuvent être en panne. + From 9ae8c9ed82b20fa37040f15ebefbb129f6803c23 Mon Sep 17 00:00:00 2001 From: ljf <ljf+git@grimaud.me> Date: Sun, 5 Jan 2020 17:59:48 +0100 Subject: [PATCH 288/360] [enh] Remove a title level --- noaccess_fr.md | 48 +++++++++++++++++++++++------------------------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/noaccess_fr.md b/noaccess_fr.md index 392eb502..b1309a95 100644 --- a/noaccess_fr.md +++ b/noaccess_fr.md @@ -3,26 +3,24 @@ Si vous avez perdu l'accès à votre YunoHost qui était auparavant fonctionnel, Il existe de nombreuses causes pouvant empécher totalement ou partiellement d'accéder en administrateur à un serveur YunoHost. Dans de nombreux cas, un des moyens d'accès est inaccessible, mais les autres sont fonctionnels. -Cette page va vous aider à diagnostiquer, obtenir un accés et si besoin réparer votre système. +Cette page va vous aider à diagnostiquer, obtenir un accés et si besoin réparer votre système. Les pannes les plus courrantes sont priorisées de haut en bas. Il vous suffit de tester chaque hypothèse. -## Liste de causes pouvant empécher l'accès à un serveur YunoHost -Ci-dessous une liste de causes courantes de pannes: - - -### Vous avez perdu votre mot de passe administrateur +## Vous avez perdu votre mot de passe administrateur Si vous arrivez à afficher la page web d'administration (forcer le raffraichissement avec CTRL + F5 pour être sur) et que vous n'arrivez pas à vous connectez. Vous avez probablement un mot de passe érroné. -Dans ce cas, à moins d'avoir un accès root actif (en SSH par exemple) auquel cas vous pouvez changer le mot de passe de l'utilisateur admin, vous allez devoir opérer passer en mode rescue. +Dans ce cas, à moins d'avoir un accès root actif (en SSH par exemple) auquel cas vous pouvez changer le mot de passe de l'utilisateur admin, vous allez devoir opérer en mode rescue. -### Vous avez une erreur de certificat qui vous empèche d'accéder à la webadmin +TODO + +## Vous avez une erreur de certificat qui vous empèche d'accéder à la webadmin Si vous n'avez jamais activé Let's Encrypt ou que vous accéder à la web admin via une IP ou un domaine locale, vous pouvez accepter le certificat invalide exceptionnellement à condition d'être sur une connexion internet sûre (pas avec Tor Browser par exemple). Pour y parvenir, il faut aller sur la page d'administration web en utilisant la navigation privée, votre navigateur devrait vous autoriser d'ajouter une exception temporaire pour accéder à la page. -### Vous avez accés en SSH mais pas à la Web admin ou inversement +## Vous avez accés en SSH mais pas à la Web admin ou inversement -#### Vous avez été banni temporairement +### Vous avez été banni temporairement Votre serveur YunoHost inclu un pare-feu qui banni les IP qui échouent plusieurs fois à se connecter. Dans certains cas, il peut s'agir d'un programme (nextcloud-client) qui est configuré avec un ancien mot de passe ou d'un utilisateur qui utilise la même IP que vous. Si vous avez été banni en tentant d'accéder à une page web, seul les pages web sont innaccessibles, vous devriez donc pouvoir accéder au serveur en SSH. De même, si vous avez été banni en SSH vous devriez pouvoir accéder à la webadmin. @@ -31,7 +29,7 @@ Si vous avez été banni à la fois en SSH et à la webadmin, vous pouvez essaye NB: le banissement dure en général quelques minutes. Le bannissement n'est actif qu'en IPv4. -#### Vous n'avez plus d'espace disque... +### Vous n'avez plus d'espace disque... ... et votre serveur web nginx qui distribue les pages de la web admin ou votre serveur SSH ne fonctionne plus. Pour vérifier si vous avez de l'espace disque, vous pouvez le faire de puis la web admin TODO ou avec la commande `df -h`. @@ -42,7 +40,7 @@ Attention, dans certains cas il peut s'agir d'erreur qui arrive tellement souven A partir de la web admin vous pouvez relancer le service SSH. De même en SSH, vous pouvez redémarrer le serveur web nginx avec la commande `yunohost service start nginx` -#### Vous manquez de RAM et n'avez pas de swap +### Vous manquez de RAM et n'avez pas de swap ... et votre serveur web nginx qui distribue les pages de la web admin ou votre serveur SSH a été tués aléatoirement. Quand votre serveur n'a plus de ram, il est obligé d'écrire sur le disque dans la swap, si il n'y en a pas, dans ce cas il doit tuer un des processus pour faire de l'espace. @@ -57,19 +55,19 @@ Pour régler cette situation, vous pouvez soit: A partir de la web admin vous pouvez relancer le service SSH. De même en SSH, vous pouvez redémarrer le serveur web nginx avec la commande `yunohost service start nginx` -#### Vous avez installé une app qui a cassé votre configuration web +### Vous avez installé une app qui a cassé votre configuration web Si vous avez installé une app de mauvaise qualité, celle-ci peut échouer à l'installation et laisser des bouts de configuration qui vont empécher le redémarrage de votre serveur web nginx qui vous permet d'accéder à la web admin. Dans ce cas, il faut accéder en SSH et essayer de terminer la suppresion de l'app. Si elle est déjà supprimée, il faut enlever manuellement les résidus de configuration. -#### Votre serveur est accessible en IPv6 mais pas en IPv4 ou inversement +### Votre serveur est accessible en IPv6 mais pas en IPv4 ou inversement Dans un tel cas, il est possible que vous arriviez à accéder à votre web admin en IPv6 mais pas en SSH potentiellement en IPv4 par défaut... Dans ce cas il faut résoudre votre problème de connectivité. Dans certains cas une mise à jour de votre box a activé l'ipv6, entrainant des problèmes de configuration au niveau de votre nom de domaine. -### Votre VPN a expiré ou ne se monte plus +## Votre VPN a expiré ou ne se monte plus Si vous utilisez un VPN a IP fixe, peut être que celui-ci est arrivé à expiration ou que l'infrastructure de votre fournisseur est en difficulté. Dans ce cas, vous pouvez peut être accéder à votre serveur avec son IP locale s'agissant probablement d'un serveur auto-hébergé chez-vous. @@ -85,20 +83,20 @@ Il faut voir avec votre fournisseur de VPN pour renouveller le VPN et mettre à TODO -### Votre routeur ne redirige plus vers votre serveur +## Votre routeur ne redirige plus vers votre serveur Si votre routeur a été remis à zéro ou mis à jour, votre configuration de redirection de port pourrait avoir disparu. De même, l'ipv6 ou le hairpining pourrait avoir été activé. Typiquement si en tapant votre IP publique vous tombez sur votre box, c'est soit le hairpinning soit la redirectiond e port qui est manquante. -### Votre serveur ping avec son IP, mais pas avec le nom de domaine -#### Votre nom de domaine a expiré +## Votre serveur ping avec son IP, mais pas avec le nom de domaine +### Votre nom de domaine a expiré Si votre nom de domaine expire il ne redirigera plus vers votre serveur. Vous pouvez vérifier que votre nom de domaine a expiré en vous connectant sur l'interface de votre registrar ou en utilisant le whois par exemple via la commande `whois NOM_DE_DOMAINE`. Dans ce cas il faut renouveller le nom de domaine (si ile st encore temps. -#### Votre nom de domaine est mal configuré +### Votre nom de domaine est mal configuré Si votre serveur ping avec son ip mais ne ping pas avec le nom de domaine alors il y a un problème de configuration au niveau du champs A. Si c'est un nom de domaine fournit par YunoHost, lancez @@ -110,26 +108,26 @@ Si c'est un autre nom de domaine, il faut mettre à jour votre ipv4 et votre ipv Attention, si votre IP change régulièrement il faut mettre en place un script qui se lance régulièrement pour mettre à jour votre IP. -#### Votre nom de domaine noho.st, nohost.me, ynh.fr est inacessible suite à une panne de l'infra YunoHost +### Votre nom de domaine noho.st, nohost.me, ynh.fr est inacessible suite à une panne de l'infra YunoHost Il arrive environ trois fois par an que l'infra de YunoHost soit en panne suite à une coupure de courant ou à un problème d'administration système. Vérifiez sur le forum si d'autre sont signalez le même problème. -### Vous avez perdu l'accès en IPv4 mais vous avez accès en IPv6 ou inversement +## Vous avez perdu l'accès en IPv4 mais vous avez accès en IPv6 ou inversement Dans ce cas, il faut tenter d'accéder en SSH avec l'autre IP et essayer de comprendre pourquoi le réseau en IPv4 ou en IPv6 a disparu. Si ce n'est pas lié à une erreur de configuration réseau sur votre système, il peut être nécessaire d'appeller votre fournisseur de serveur ou d'accès à internet pour vérifier que le problème n'ets pas chez eux. -### Vous avez perdu l'accès en IPv4 (ET en IPv6 le cas échéant) +## Vous avez perdu l'accès en IPv4 (ET en IPv6 le cas échéant) Vous pouvez le vérifier en tentant de faire des ping sur votre serveur en IPv4 et en IPv6. Dans ce cas, vous devriez essayer de brancher un clavier/écran sur votre serveur ou d'y accéder par VNC si c'est un serveur distant. -#### Vous pouvez vous connecter avec l'utilisateur admin et le mot de passe +### Vous pouvez vous connecter avec l'utilisateur admin et le mot de passe A partir de là vous devriez diagnostiquer votre problème réseau le réparer ou si ce n'est pas lié au système contacter le support de votre fournisseur de serveur ou de connexion Internet. -#### Votre serveur est coincé au démarrage +### Votre serveur est coincé au démarrage Dans certains cas, votre serveur peut rester coincer au démarrage. Il peut s'agir d'un problème suite à l'installation d'un nouveau kernel. Essayez de choisir un autre kernel avec VNC ou avec l'écran lors du boot. Si vous êtes en grub rescue, dans ce cas il peut s'agir d'un problème de configuration de grub ou d'un disque corrompu. @@ -140,7 +138,7 @@ Si les disques sont corrompus et difficile à monter, il faut sauvegarder les do Sinon, relancer grub-update et grub-install en chroot ou avec systemd-nspawn. -#### L'accès en VNC ou via écran ne fonctionne pas +### L'accès en VNC ou via écran ne fonctionne pas Dans ce cas il peut s'agir d'un problème matèriel sur votre serveur physique ou d'un problème d'hyperviseur si c'est un VPS. Si c'est une machine loué contacter le support de votre fournisseur. Sinon essayez de dépanner votre machine en retirant les composants qui peuvent être en panne. From 7dba38c70d5f3b21917f8a4d9dd93ebffd7f8ef9 Mon Sep 17 00:00:00 2001 From: ljf <ljf+git@grimaud.me> Date: Sun, 5 Jan 2020 21:18:54 +0100 Subject: [PATCH 289/360] [fix] Orthographe --- noaccess_fr.md | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/noaccess_fr.md b/noaccess_fr.md index b1309a95..059fc32a 100644 --- a/noaccess_fr.md +++ b/noaccess_fr.md @@ -3,31 +3,31 @@ Si vous avez perdu l'accès à votre YunoHost qui était auparavant fonctionnel, Il existe de nombreuses causes pouvant empécher totalement ou partiellement d'accéder en administrateur à un serveur YunoHost. Dans de nombreux cas, un des moyens d'accès est inaccessible, mais les autres sont fonctionnels. -Cette page va vous aider à diagnostiquer, obtenir un accés et si besoin réparer votre système. Les pannes les plus courrantes sont priorisées de haut en bas. Il vous suffit de tester chaque hypothèse. +Cette page va vous aider à diagnostiquer, obtenir un accès et si besoin réparer votre système. Les pannes les plus courantes sont priorisées de haut en bas. Il vous suffit de tester chaque hypothèse. ## Vous avez perdu votre mot de passe administrateur -Si vous arrivez à afficher la page web d'administration (forcer le raffraichissement avec CTRL + F5 pour être sur) et que vous n'arrivez pas à vous connectez. Vous avez probablement un mot de passe érroné. +Si vous arrivez à afficher la page web d'administration (forcer le rafraîchissement avec CTRL + F5 pour être sur) et que vous n'arrivez pas à vous connectez. Vous avez probablement un mot de passe erroné. Dans ce cas, à moins d'avoir un accès root actif (en SSH par exemple) auquel cas vous pouvez changer le mot de passe de l'utilisateur admin, vous allez devoir opérer en mode rescue. TODO -## Vous avez une erreur de certificat qui vous empèche d'accéder à la webadmin +## Vous avez une erreur de certificat qui vous empêche d'accéder à la webadmin Si vous n'avez jamais activé Let's Encrypt ou que vous accéder à la web admin via une IP ou un domaine locale, vous pouvez accepter le certificat invalide exceptionnellement à condition d'être sur une connexion internet sûre (pas avec Tor Browser par exemple). Pour y parvenir, il faut aller sur la page d'administration web en utilisant la navigation privée, votre navigateur devrait vous autoriser d'ajouter une exception temporaire pour accéder à la page. -## Vous avez accés en SSH mais pas à la Web admin ou inversement +## Vous avez accès en SSH mais pas à la Web admin ou inversement ### Vous avez été banni temporairement -Votre serveur YunoHost inclu un pare-feu qui banni les IP qui échouent plusieurs fois à se connecter. Dans certains cas, il peut s'agir d'un programme (nextcloud-client) qui est configuré avec un ancien mot de passe ou d'un utilisateur qui utilise la même IP que vous. +Votre serveur YunoHost inclut un pare-feu qui banni les IP qui échouent plusieurs fois à se connecter. Dans certains cas, il peut s'agir d'un programme (nextcloud-client) qui est configuré avec un ancien mot de passe ou d'un utilisateur qui utilise la même IP que vous. -Si vous avez été banni en tentant d'accéder à une page web, seul les pages web sont innaccessibles, vous devriez donc pouvoir accéder au serveur en SSH. De même, si vous avez été banni en SSH vous devriez pouvoir accéder à la webadmin. +Si vous avez été banni en tentant d'accéder à une page web, seul les pages web sont inaccessibles, vous devriez donc pouvoir accéder au serveur en SSH. De même, si vous avez été banni en SSH vous devriez pouvoir accéder à la webadmin. Si vous avez été banni à la fois en SSH et à la webadmin, vous pouvez essayer d'accéder à votre serveur avec une autre IP, par exemple en utilisant la 4G d'un smartphone ou en utilisant Tor Browser. -NB: le banissement dure en général quelques minutes. Le bannissement n'est actif qu'en IPv4. +NB: le bannissement dure en général quelques minutes. Le bannissement n'est actif qu'en IPv4. ### Vous n'avez plus d'espace disque... ... et votre serveur web nginx qui distribue les pages de la web admin ou votre serveur SSH ne fonctionne plus. @@ -58,35 +58,35 @@ A partir de la web admin vous pouvez relancer le service SSH. De même en SSH, v ### Vous avez installé une app qui a cassé votre configuration web Si vous avez installé une app de mauvaise qualité, celle-ci peut échouer à l'installation et laisser des bouts de configuration qui vont empécher le redémarrage de votre serveur web nginx qui vous permet d'accéder à la web admin. -Dans ce cas, il faut accéder en SSH et essayer de terminer la suppresion de l'app. Si elle est déjà supprimée, il faut enlever manuellement les résidus de configuration. +Dans ce cas, il faut accéder en SSH et essayer de terminer la suppression de l'app. Si elle est déjà supprimée, il faut enlever manuellement les résidus de configuration. ### Votre serveur est accessible en IPv6 mais pas en IPv4 ou inversement Dans un tel cas, il est possible que vous arriviez à accéder à votre web admin en IPv6 mais pas en SSH potentiellement en IPv4 par défaut... Dans ce cas il faut résoudre votre problème de connectivité. -Dans certains cas une mise à jour de votre box a activé l'ipv6, entrainant des problèmes de configuration au niveau de votre nom de domaine. +Dans certains cas une mise à jour de votre box a activé l'ipv6, entraînant des problèmes de configuration au niveau de votre nom de domaine. ## Votre VPN a expiré ou ne se monte plus Si vous utilisez un VPN a IP fixe, peut être que celui-ci est arrivé à expiration ou que l'infrastructure de votre fournisseur est en difficulté. Dans ce cas, vous pouvez peut être accéder à votre serveur avec son IP locale s'agissant probablement d'un serveur auto-hébergé chez-vous. -Pour connaitre votre ip locale, certaines BOX propose une cartographie du réseau en cours avec les équipements connectés. Sinon, en ligne de commande avec linux: +Pour connaître votre ip locale, certaines BOX propose une cartographie du réseau en cours avec les équipements connectés. Sinon, en ligne de commande avec linux: ``` sudo arp-scan --local ``` Vous pouvez aussi essayer avec le domaine `yunohost.local` si il n'y a qu'un seul YunoHost sur votre réseau. -Il faut voir avec votre fournisseur de VPN pour renouveller le VPN et mettre à jour les paramètre de l'app VPN Client. +Il faut voir avec votre fournisseur de VPN pour renouveler le VPN et mettre à jour les paramètre de l'app VPN Client. TODO ## Votre routeur ne redirige plus vers votre serveur Si votre routeur a été remis à zéro ou mis à jour, votre configuration de redirection de port pourrait avoir disparu. De même, l'ipv6 ou le hairpining pourrait avoir été activé. -Typiquement si en tapant votre IP publique vous tombez sur votre box, c'est soit le hairpinning soit la redirectiond e port qui est manquante. +Typiquement si en tapant votre IP publique vous tombez sur votre box, c'est soit le hairpinning soit la redirection de port qui est manquante. ## Votre serveur ping avec son IP, mais pas avec le nom de domaine ### Votre nom de domaine a expiré @@ -94,7 +94,7 @@ Si votre nom de domaine expire il ne redirigera plus vers votre serveur. Vous pouvez vérifier que votre nom de domaine a expiré en vous connectant sur l'interface de votre registrar ou en utilisant le whois par exemple via la commande `whois NOM_DE_DOMAINE`. -Dans ce cas il faut renouveller le nom de domaine (si ile st encore temps. +Dans ce cas il faut renouveler le nom de domaine (si ile st encore temps. ### Votre nom de domaine est mal configuré Si votre serveur ping avec son ip mais ne ping pas avec le nom de domaine alors il y a un problème de configuration au niveau du champs A. @@ -108,7 +108,7 @@ Si c'est un autre nom de domaine, il faut mettre à jour votre ipv4 et votre ipv Attention, si votre IP change régulièrement il faut mettre en place un script qui se lance régulièrement pour mettre à jour votre IP. -### Votre nom de domaine noho.st, nohost.me, ynh.fr est inacessible suite à une panne de l'infra YunoHost +### Votre nom de domaine noho.st, nohost.me, ynh.fr est inaccessible suite à une panne de l'infra YunoHost Il arrive environ trois fois par an que l'infra de YunoHost soit en panne suite à une coupure de courant ou à un problème d'administration système. Vérifiez sur le forum si d'autre sont signalez le même problème. @@ -117,7 +117,7 @@ Vérifiez sur le forum si d'autre sont signalez le même problème. Dans ce cas, il faut tenter d'accéder en SSH avec l'autre IP et essayer de comprendre pourquoi le réseau en IPv4 ou en IPv6 a disparu. -Si ce n'est pas lié à une erreur de configuration réseau sur votre système, il peut être nécessaire d'appeller votre fournisseur de serveur ou d'accès à internet pour vérifier que le problème n'ets pas chez eux. +Si ce n'est pas lié à une erreur de configuration réseau sur votre système, il peut être nécessaire d’appeler votre fournisseur de serveur ou d'accès à internet pour vérifier que le problème n'est pas chez eux. ## Vous avez perdu l'accès en IPv4 (ET en IPv6 le cas échéant) Vous pouvez le vérifier en tentant de faire des ping sur votre serveur en IPv4 et en IPv6. @@ -134,12 +134,11 @@ Si vous êtes en grub rescue, dans ce cas il peut s'agir d'un problème de confi Dans ce cas il faut accéder au disque avec un autre système (mode rescue du fournisseur, live usb, lire la carte SD ou le disque dur avec un autre ordinateur) et essayer de vérifier l'intégrité des partitions avec smartctl, fsck et mount. -Si les disques sont corrompus et difficile à monter, il faut sauvegarder les données et potentiellement refaire un formattage/réinstaller et/ou changer le disque. Si on arrive à monter le disque, il est possible d'utiliser systemd-nspawn pour entrer dans la base de donnée. +Si les disques sont corrompus et difficile à monter, il faut sauvegarder les données et potentiellement refaire un formatage/réinstaller et/ou changer le disque. Si on arrive à monter le disque, il est possible d'utiliser systemd-nspawn pour entrer dans la base de donnée. Sinon, relancer grub-update et grub-install en chroot ou avec systemd-nspawn. ### L'accès en VNC ou via écran ne fonctionne pas -Dans ce cas il peut s'agir d'un problème matèriel sur votre serveur physique ou d'un problème d'hyperviseur si c'est un VPS. +Dans ce cas il peut s'agir d'un problème matériel sur votre serveur physique ou d'un problème d'hyperviseur si c'est un VPS. Si c'est une machine loué contacter le support de votre fournisseur. Sinon essayez de dépanner votre machine en retirant les composants qui peuvent être en panne. - From f3db648b60abcd6a88f288f6573a7fbb1f2d25b5 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Fri, 10 Jan 2020 02:19:30 +0000 Subject: [PATCH 290/360] Added Virgin Media to UK ISP list and some data. --- isp.md | 1 + 1 file changed, 1 insertion(+) diff --git a/isp.md b/isp.md index 25590358..d84d9e87 100644 --- a/isp.md +++ b/isp.md @@ -19,6 +19,7 @@ A list of French and Belgian ISPs is available on the [french page](/isp_fr). | 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 | +| Virgin Media | Yes | - | - | - | No | No | ### Brazil | Service provider | Box (modem/router) | uPnP available | Port 25 openable | [Hairpinning](http://en.wikipedia.org/wiki/Hairpinning) | Customizable reverse DNS | Fix IP | From c62fef7fb420c56c58c9640d3a1e676007b32a81 Mon Sep 17 00:00:00 2001 From: Moul <moul@moul.re> Date: Sat, 11 Jan 2020 11:51:12 +0100 Subject: [PATCH 291/360] =?UTF-8?q?[enh]=20Email:=20Add=20links=20and=20?= =?UTF-8?q?=C2=A7=20to=20the=20blacklist=20forms?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admindoc.md | 1 + admindoc_fr.md | 2 +- email.md | 5 +++++ email_fr.md | 7 ++++++- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/admindoc.md b/admindoc.md index ab86a0b5..f4937dbb 100644 --- a/admindoc.md +++ b/admindoc.md @@ -29,6 +29,7 @@ * [Applications](/apps_overview) * [Domains, DNS and certificates](/domains) * [Email](/email) + * [Forms to remove its IP address from the black lists](/blacklist_forms) * [XMPP](/XMPP) * [Backup](/backup) * [Updating the system](/update) and [apps](/app_update) diff --git a/admindoc_fr.md b/admindoc_fr.md index 14b60248..2f186795 100644 --- a/admindoc_fr.md +++ b/admindoc_fr.md @@ -29,6 +29,7 @@ * [Les applications](/apps_overview_fr) * [Les domaines, la configuration DNS et les certificats](/domains_fr) * [Les emails](/email_fr) + * [Formulaires pour enlever son adresse IP des listes noires](/blacklist_forms_fr) * [XMPP](/XMPP_fr) * [Les sauvegardes](/backup_fr) * [Mettre à jour le système](/update_fr) et [les applications](/app_update_fr) @@ -53,4 +54,3 @@ * [Guide de dépannage](/troubleshooting_guide_fr) * [Débloquer une IP dans Fail2ban](/fail2ban_fr) * [Changer le mot de passe d’administration](/change_admin_password_fr) - * [Formulaires pour enlever son IP des listes noires](/blacklist_forms_fr) diff --git a/email.md b/email.md index 9aab2850..63525b4c 100644 --- a/email.md +++ b/email.md @@ -37,6 +37,11 @@ What happens if my server becomes unavailable ? If your server becomes unavailable, emails sent to your server will stay in a pending queue on the sender's side for as long as ~5 days. The sender's hoster will regularly try to resend the email, until it drops it if it was unable to send it. +## Forms to remove its IP address from the blacklist +It is possible that the sent emails from your YunoHost instance are considered as spam by the big email services. +Is it possible that the IP address from your server have been previously been used to sent spam or that these email services consider your server as a spam sender. +To ensure that your servers’ IP address isn’t into this blacklists and to remove it from them, follow this [link](/blacklist_forms). + Migrating email from an email provider to a YunoHost instance ------------------------------------------------------------- diff --git a/email_fr.md b/email_fr.md index 662804fe..e1c2ca08 100644 --- a/email_fr.md +++ b/email_fr.md @@ -3,7 +3,7 @@ Emails YunoHost est livré avec un écosystème complet de serveur mail, vous permettant d'héberger votre propre serveur de messagerie, et donc d'avoir vos propres adresses email dans `quelquechose@votre.domaine.tld`. -Cet écosystème comprends un serveur SMTP (postfix), un serveur IMAP (Dovecot), un antispam (rspamd) et une configuration DKIM. +Cet écosystème comprend un serveur SMTP (postfix), un serveur IMAP (Dovecot), un antispam (rspamd) et une configuration DKIM. S'assurer que votre configuration est correcte ------------------------------- @@ -37,6 +37,11 @@ Que se passe-t-il si mon serveur devient indisponible ? Si votre serveur devient indisponible, les courriels envoyés à votre serveur resteront dans une file d'attente du côté de l'expéditeur pendant environ 5 jours. L'hébergeur de l'expéditeur tentera régulièrement de renvoyer le courrier, jusqu'à ce qu'il le jette s'il n'a pas pu l'envoyer. +## Formulaires pour enlever son adresse IP des listes noires +Il est possible que les emails envoyés depuis votre instance YunoHost soient considérés comme du spam par les grands services de mails. +Il est possible que l’adresse IP de votre serveur a autrefois été utilisé pour envoyé du spam ou que ces services de mails considèrent votre serveur comme émetteur de spams. +Pour s’assurer que l’adresse IP de votre serveur n’est pas dans ces listes et pour l’enlever dans le cas échéant suivez ce [lien](/blacklist_forms_fr). + Pour aller plus loin -------------------- From b9f38c8c885e67b96afd0017f92f04404f637735 Mon Sep 17 00:00:00 2001 From: Jaxom99 <30865395+Jaxom99@users.noreply.github.com> Date: Wed, 15 Jan 2020 22:09:43 +0100 Subject: [PATCH 292/360] Added the .nobackup tip --- backup.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/backup.md b/backup.md index e69b5771..9cffbdd6 100644 --- a/backup.md +++ b/backup.md @@ -149,6 +149,9 @@ You can follow this tutorial on the forum to setup Borg between two servers : <h Alternatively, the app Archivist allows to setup a similar system : <https://forum.yunohost.org/t/new-app-archivist/3747> +#### Avoiding the backup of some folders +If needed, you can specify that some `/home/user` folders are left out of the `yunohost backup` command, by creating a blank file named `.nobackup` in them. + #### Full backup with `dd` If you are using an ARM board, another method for doing a full backup can be to create an image of the SD card. For this, poweroff your ARM board, get the SD card in your computer then create a full image with something like : From 1218c29b8d53776aeee84bf5e0151c1be69d56a5 Mon Sep 17 00:00:00 2001 From: Jaxom99 <30865395+Jaxom99@users.noreply.github.com> Date: Wed, 15 Jan 2020 22:12:40 +0100 Subject: [PATCH 293/360] ajout fonctionnement .nobackup --- backup_fr.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/backup_fr.md b/backup_fr.md index a76077de..d59078b2 100644 --- a/backup_fr.md +++ b/backup_fr.md @@ -151,6 +151,9 @@ Vous pouvez suivre ce tutoriel sur le forum pour mettre en place Borg entre deux Il existe aussi l'application Archivist qui permet un système similaire : https://forum.yunohost.org/t/new-app-archivist/3747 +#### Evier de sauvegarder certains dossiers +Si besoin, vous pouvez spécifier que certains dossiers `home` d'utilisateurs ne soient pas sauvegardés par la commande `yunohost backup`, en créant à la racine un fichier vide nommé `.nobackup`. + #### Backup complet avec `dd` Si vous êtes sur une carte ARM, une autre méthode pour créer une sauvegarde complète consiste à créer une image (copie) de la carte SD. Pour cela, éteignez votre serveur, insérez la carte SD dans votre ordinateur et créez une image avec une commande comme : From 2192aee983628ed4636af06ac341c91d46214e44 Mon Sep 17 00:00:00 2001 From: Bram <cortex@worlddomination.be> Date: Thu, 16 Jan 2020 11:35:59 +0100 Subject: [PATCH 294/360] change url to solution for keeweb-nextcloud --- app_nextcloud_keeweb_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app_nextcloud_keeweb_fr.md b/app_nextcloud_keeweb_fr.md index cded19d4..9a99f973 100644 --- a/app_nextcloud_keeweb_fr.md +++ b/app_nextcloud_keeweb_fr.md @@ -5,7 +5,7 @@ L'application Keeweb sur le catalogue de nextcloud - [apps.nextcloud.com/keeweb] L'application KeeWeb est un gestionnaire de mots de passe incorporé à Nextcloud. Elle permet par exemple de lire un fichier de type KeePass (*.kdbx*) stocké sur votre instance Nextcloud. Mais il arrive parfois que Nextcloud ne laisse pas l'application prendre en charge ces fichiers, ce qui rend alors impossible leur lecture de KeeWeb. Pour remédier à cela, -[une solution](https://github.com/jhass/nextcloud-keeweb/issues/34) existe. +[une solution](https://github.com/jhass/nextcloud-keeweb/blob/master/README.md#mimetype-detection) existe. Se rendre dans le répertoire de configuration de Nextcloud : From 9847c05022f564b03f8889826d8f12e58d6fc7d1 Mon Sep 17 00:00:00 2001 From: Jaxom99 <30865395+Jaxom99@users.noreply.github.com> Date: Fri, 17 Jan 2020 10:00:37 +0100 Subject: [PATCH 295/360] update phrasing --- backup_fr.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backup_fr.md b/backup_fr.md index d59078b2..116d6a43 100644 --- a/backup_fr.md +++ b/backup_fr.md @@ -151,8 +151,8 @@ Vous pouvez suivre ce tutoriel sur le forum pour mettre en place Borg entre deux Il existe aussi l'application Archivist qui permet un système similaire : https://forum.yunohost.org/t/new-app-archivist/3747 -#### Evier de sauvegarder certains dossiers -Si besoin, vous pouvez spécifier que certains dossiers `home` d'utilisateurs ne soient pas sauvegardés par la commande `yunohost backup`, en créant à la racine un fichier vide nommé `.nobackup`. +#### Eviter de sauvegarder certains dossiers +Si besoin, vous pouvez spécifier que certains dossiers `home` d'utilisateurs ne soient pas sauvegardés par la commande `yunohost backup`, en créant un fichier vide nommé `.nobackup` à l'intérieur. #### Backup complet avec `dd` From 69a9efce83945753ea76965cd688b92accb72692 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sun, 19 Jan 2020 13:06:56 +0000 Subject: [PATCH 296/360] =?UTF-8?q?mise=20en=20francais=20de=20=C2=ABOn=20?= =?UTF-8?q?an=20ARM=20board=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install_fr.md b/install_fr.md index 60612125..a6ceeac1 100644 --- a/install_fr.md +++ b/install_fr.md @@ -33,7 +33,7 @@ Cette page liste plusieurs types d’installations, classés par catégories. </div> <div class="col col-md-3 text-center"> -<a href="/install_on_arm_board"><img src="/images/olinuxino.jpg" height=150 style="vertical-align:bottom; padding:20px"><b><p>On an ARM board</p></b></a> +<a href="/install_on_arm_board"><img src="/images/olinuxino.jpg" height=150 style="vertical-align:bottom; padding:20px"><b><p>Sur une carte ARM</p></b></a> </div> <div class="col col-md-3 text-center"> From 82a18abbe939212c39fbfc981fab56ae7f1d3027 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Wed, 22 Jan 2020 23:34:29 +0000 Subject: [PATCH 297/360] Added Joplin-web to wishlist! --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index 4da0049b..b540d867 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -62,6 +62,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Jellyfin](https://github.com/jellyfin) - [JS Bin](http://jsbin.com/help/2-second-setup) / [github](https://github.com/jsbin/) - [Joplin](http://joplin.cozic.net/) / [github](https://github.com/laurent22/joplin) +- [Joplin-web](https://github.com/foxmask/joplin-web) / [github](https://github.com/foxmask/joplin-web) - [Kiwix](http://www.kiwix.org/) Offline wikipedia / [github](https://github.com/kiwix/) - [Known](https://withknown.com) / [github](https://github.com/idno/known) - [Koel](http://koel.phanan.net) / [github](https://github.com/phanan/koel) From ce3ee5fc79eac7a5869393225a60844e4d4e1236 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Allan=20Nordh=C3=B8y?= <epost@anotheragency.no> Date: Tue, 28 Jan 2020 07:31:15 +0100 Subject: [PATCH 298/360] What [en] page reworked --- whatsyunohost.md | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/whatsyunohost.md b/whatsyunohost.md index d1aad886..6ed0efd3 100644 --- a/whatsyunohost.md +++ b/whatsyunohost.md @@ -3,34 +3,34 @@ What is YunoHost? <img src="/images/YunoHost_logo_vertical.png" width=400> -YunoHost is an **operating system** aiming to simplify as much as possible the administration of a **server** and therefore democratize [self-hosting](selfhosting), while making sure it stays reliable, secure, ethical and lightweight. It is a free software project maintained exclusively by volunteers. Technically, it can be seen as a distribution based on [Debian GNU/Linux](https://debian.org) and can be installed on [many kinds of hardware](install). +YunoHost is an **operating system** aiming for the simplest administration of a **server**, and therefore democratize [self-hosting](selfhosting), while making sure it stays reliable, secure, ethical and lightweight. It is a copylefted libre software project maintained exclusively by volunteers. Technically, it can be seen as a distribution based on [Debian GNU/Linux](https://debian.org) and can be installed on [many kinds of hardware](install). Features -------- -- <img src="/images/icon-debian.png" width=32 style="margin-right:5px"> based on Debian ; -- <img src="/images/icon-tools.png" width=32 style="margin-right:5px" width=64> administrate your server through a **friendly web interface** ; -- <img src="/images/icon-package.png" width=32 style="margin-right:5px"> deploy **applications in just a few clicks** ; -- <img src="/images/icon-users.png" width=32 style="margin-right:5px"> manage **users** <small>(based on LDAP)</small>; -- <img src="/images/icon-globe.png" width=32 style="margin-right:5px"> manage **domain names** ; -- <img src="/images/icon-medic.png" width=32 style="margin-right:5px"> create and restore **backups** ; -- <img src="/images/icon-door.png" width=32 style="margin-right:5px"> connect to all apps simultaneously through the **user portal** <small>(nginx, SSOwat)</small> ; -- <img src="/images/icon-mail.png" width=32 style="margin-right:5px"> includes a **full email stack** <small>(Postfix, Dovecot, Rspamd, DKIM)</small> ; -- <img src="/images/icon-messaging.png" width=32 style="margin-right:5px"> ... as well as **an instant messaging server** <small>(XMPP)</small> ; -- <img src="/images/icon-lock.png" width=32 style="margin-right:5px"> manages **SSL certificates** <small>(based on Let's Encrypt)</small> ; -- <img src="/images/icon-shield.png" width=32 style="margin-right:5px"> ... and **security systems** <small>(fail2ban, yunohost-firewall)</small> ; +- <img src="/images/icon-debian.png" width=32 style="margin-right:5px"> Based on Debian ; +- <img src="/images/icon-tools.png" width=32 style="margin-right:5px" width=64> Administrate your server through a **friendly web interface** ; +- <img src="/images/icon-package.png" width=32 style="margin-right:5px"> Deploy **apps in just a few clicks** ; +- <img src="/images/icon-users.png" width=32 style="margin-right:5px"> Manage **users** <small>(based on LDAP)</small>; +- <img src="/images/icon-globe.png" width=32 style="margin-right:5px"> Manage **domain names** ; +- <img src="/images/icon-medic.png" width=32 style="margin-right:5px"> Create and restore **backups** ; +- <img src="/images/icon-door.png" width=32 style="margin-right:5px"> Connect to all apps simultaneously through the **user portal** <small>(NGINX, SSOwat)</small> ; +- <img src="/images/icon-mail.png" width=32 style="margin-right:5px"> Includes a **full e-mail stack** <small>(Postfix, Dovecot, Rspamd, DKIM)</small> ; +- <img src="/images/icon-messaging.png" width=32 style="margin-right:5px"> … as well as **an instant messaging server** <small>(XMPP)</small> ; +- <img src="/images/icon-lock.png" width=32 style="margin-right:5px"> Manages **SSL certificates** <small>(based on Let's Encrypt)</small> ; +- <img src="/images/icon-shield.png" width=32 style="margin-right:5px"> … and **security systems** <small>(fail2ban, yunohost-firewall)</small> ; Origin ------ YunoHost was created in February 2012 after something like this: - <blockquote><p>"Shit, I'm too lazy to reconfigure my mail server... Beudbeud, how were you able to get your little server running with LDAP?"</p> + <blockquote><p>"Shit, I'm too lazy to reconfigure my mail server… Beudbeud, how were you able to get your little server running with LDAP?"</p> <small>Kload, February 2012</small></blockquote> -All that was needed was an administration interface for Beudbeud's server to make something usable, so Kload decided to develop one. Finally, after automating several configurations and packaging in some web apps, YunoHost v1 was finished. +All that was needed was an admin interface for Beudbeud's server to make something usable, so Kload decided to develop one. Finally, after automating several configs and packaging in some web apps, YunoHost v1 was finished. -Noting the growing enthusiasm around YunoHost and around self-hosting in general, the original developers along with new contributors decided to start work on version 2, more extensible, more powerful, more easy-to-use, and one that makes a nice cup of fair-trade coffee for the elves of Lapland. +Noting the growing enthusiasm around YunoHost and around self-hosting in general, the original developers along with new contributors decided to start work on version 2, a more extensible, more powerful, more easy-to-use, and at that, one that makes a nice cup of fair-trade coffee for the elves of Lapland. The name **YunoHost** comes from the jargon "Y U NO Host". The [Internet meme](https://en.wikipedia.org/wiki/Internet_meme) should illustrate it: <div class="text-center"><img style="border-radius: 5px; box-shadow: 0 5px 15px rgba(0,0,0,0.15);" src="/images/dude_yunohost.jpg"></div> @@ -40,14 +40,14 @@ What YunoHost is not? Even if YunoHost can handle multiple domains and multiple users, it is **not meant to be a mutualized system**. -First, the software is too young, not tested at large scale and thus probably not optimized to be put in production for hundreds of users at the same time. With that said, we do not want to lead the software in that direction. Virtualization democratizes, and its usage is recommended since it is a more leaktight way to achieve mutualization than a "full-stack" system like YunoHost. +First, the software is too young, not tested at scale and thus probably not optimized well enough for hundreds of users at the same time. With that said, we do not want to lead the software in that direction. Virtualization democratizes, and its usage is recommended since it is a more watertight way to achieve mutualization than a "full-stack" system like YunoHost. -You can host your friends, your family and your company safely and with ease, but you must **trust your users**, and they must 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. +You can host your friends, your family and your company safely and with ease, but you must **trust your users**, and they must trust you above all. If you want to provide YunoHost services for unknown persons anyway, a full VPS per user will be just fine, and we believe a better way to go. -Art Works +Artworks --------- -Black and white YunoHost png logo done by ToZz (400 × 400 px): +Black and white YunoHost PNG logo by ToZz (400 × 400 px): <a href="/images/ynh_logo_black_300dpi.png"><img src="/images/ynh_logo_black_300dpi.png" width=220></a> From 9456b265b84366627b2467827ea5438644f34b55 Mon Sep 17 00:00:00 2001 From: Damien Picard <dam.pic@free.fr> Date: Wed, 29 Jan 2020 00:14:43 +0100 Subject: [PATCH 299/360] =?UTF-8?q?[fr]=20Replace=20i.e.=20by=20c.-=C3=A0-?= =?UTF-8?q?d.=20(that=20is,=20id=20est=20by=20c=E2=80=99est-=C3=A0-dire)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To avoid anglicism. --- certificate_fr.md | 2 +- guidelines_fr.md | 2 +- jessie_stretch_migration_fr.md | 2 +- postinstall_fr.md | 2 +- users_fr.md | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/certificate_fr.md b/certificate_fr.md index fe18d4d5..d32a8341 100644 --- a/certificate_fr.md +++ b/certificate_fr.md @@ -19,7 +19,7 @@ Pour éviter cette confusion, il est possible d’obtenir un certificat, reconnu Avant de chercher à installer un certificat Let's Encrypt, assurez vous que votre DNS est correctement configuré (votre.domaine.tld doit pointer sur l'IP de votre serveur) et que votre site est accessible en HTTP depuis l'extérieur -(i.e. qu'au moins le port 80 est correctement redirigé vers votre serveur). +(c.-à-d. qu'au moins le port 80 est correctement redirigé vers votre serveur). #### Via l'interface d'administration web diff --git a/guidelines_fr.md b/guidelines_fr.md index 2cf70957..70987966 100644 --- a/guidelines_fr.md +++ b/guidelines_fr.md @@ -44,5 +44,5 @@ Enfin, gardez à l'esprit que YunoHost est un logiciel libre maintenu par des vo Si vous aimez YunoHost et que vous voulez que le projet soit maintenu en vie et progresse, n'hésitez pas à laisser une note de remerciement et à [faire un don](https://liberapay.com/YunoHost) au projet et à en parler autour de vous ! -Pour finir, puisque YunoHost est un projet de logiciel libre, vous êtes légitime et bienvenu pour [venir contribuer](/contribute) au projet, que ce soit sur les aspects techniques (i.e. code) et moins techniques (comme par exemple contribuer à cette documentation ;)) ! +Pour finir, puisque YunoHost est un projet de logiciel libre, vous êtes légitime et bienvenu pour [venir contribuer](/contribute) au projet, que ce soit sur les aspects techniques (c.-à-d. code) et moins techniques (comme par exemple contribuer à cette documentation ;)) ! diff --git a/jessie_stretch_migration_fr.md b/jessie_stretch_migration_fr.md index fbb173cb..548b6235 100644 --- a/jessie_stretch_migration_fr.md +++ b/jessie_stretch_migration_fr.md @@ -12,7 +12,7 @@ L'objectif cette page est de décrire le processus de migration d'une instance e - 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). La configuration des webmails comme Rainloop doit également être mise à jour, en passant par l'interface d'administration dédiée. -- 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. +- 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, c.-à-d. pas besoin d'ajouter `--ignore-system` pour ne pas backuper le système. ## Procédure de migration diff --git a/postinstall_fr.md b/postinstall_fr.md index c12dcc85..d02cee89 100644 --- a/postinstall_fr.md +++ b/postinstall_fr.md @@ -57,7 +57,7 @@ votre navigateur ou la ligne de commande, alors félicitations ! - 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 / +- Si vous utilisez votre propre nom de domaine (c.-à-d. 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 diff --git a/users_fr.md b/users_fr.md index 11262b13..931551a4 100644 --- a/users_fr.md +++ b/users_fr.md @@ -22,7 +22,7 @@ Le portail utilisateur, également appelé SSO pour 'Single Sign On', permet à Dans le portail, les utilisateurs peuvent également cliquer sur l'avatar en haut à gauche pour configurer d'autres paramètres tels que leur identité, les alias de messagerie, les transferts automatiques de courrier ou changer leur mot de passe. <div class="alert alert-info" markdown="1"> -Vous devez être conscient que le SSO ne peut être atteint que par le nom de domaine (i.e. `https://the.domain.tld/yunohost/sso`), et non pas en utilisant l'IP du serveur (i.e. `https://11.22.33.44/yunohost/sso`), contrairement à l'administrateur web ! C'est un peu déroutant dans certaines situations, mais c'est nécessaire pour des raisons techniques. Si vous êtes dans une situation où vous avez besoin d'accéder au SSO sans avoir votre DNS correctement configuré pour une raison quelconque, vous pouvez envisager de modifier votre `/etc/hosts` comme décrit dans [cette page](dns_local_nework). +Vous devez être conscient que le SSO ne peut être atteint que par le nom de domaine (c.-à-d. `https://the.domain.tld/yunohost/sso`), et non pas en utilisant l'IP du serveur (c.-à-d. `https://11.22.33.44/yunohost/sso`), contrairement à l'administrateur web ! C'est un peu déroutant dans certaines situations, mais c'est nécessaire pour des raisons techniques. Si vous êtes dans une situation où vous avez besoin d'accéder au SSO sans avoir votre DNS correctement configuré pour une raison quelconque, vous pouvez envisager de modifier votre `/etc/hosts` comme décrit dans [cette page](dns_local_nework). </div> Permissions d'accès aux applications From ad3f7a6905a875a6cfe9c5cb7d6dd53dcdc8add5 Mon Sep 17 00:00:00 2001 From: Damien Picard <dam.pic@free.fr> Date: Wed, 29 Jan 2020 00:25:33 +0100 Subject: [PATCH 300/360] =?UTF-8?q?[fr]=20Replace=20"."=20by=20"=C2=B7"=20?= =?UTF-8?q?as=20interpunct?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- selfhosting_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/selfhosting_fr.md b/selfhosting_fr.md index 0c4788b2..0fc5c17e 100644 --- a/selfhosting_fr.md +++ b/selfhosting_fr.md @@ -16,7 +16,7 @@ Pourquoi s'auto-héberger ? - **Vous souhaitez apprendre comment fonctionnent les ordinateurs et Internet.** Opérer son propre serveur est un bon contexte pour apprendre les mécanismes de base au cœur des systèmes d'exploitations (OS) et d'Internet. Il vous faudra possiblement toucher à la ligne de commande et à des morceaux de configuration réseau et DNS. -- **Vous voulez explorer de nouvelles possibilités et personnaliser votre espace.** Avez-vous déjà rêvé d'avoir votre propre serveur Minecraft pour vos ami.e.s, ou un client IRC ou XMPP persistent ? Avec votre propre serveur, vous pouvez manuellement installer et faire tourner n'importe quel programme et personnaliser chaque morceau. +- **Vous voulez explorer de nouvelles possibilités et personnaliser votre espace.** Avez-vous déjà rêvé d'avoir votre propre serveur Minecraft pour vos ami·e·s, ou un client IRC ou XMPP persistent ? Avec votre propre serveur, vous pouvez manuellement installer et faire tourner n'importe quel programme et personnaliser chaque morceau. Pourquoi ne *pas* s'auto-héberger ? ----------------------------------- From a2984495e279bbde1b0d2b07adcf88798aca0f93 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Thu, 30 Jan 2020 11:02:54 +0000 Subject: [PATCH 301/360] Typos --- faq.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/faq.md b/faq.md index bd38b583..6b83f90b 100644 --- a/faq.md +++ b/faq.md @@ -1,7 +1,7 @@ # Frequently Asked Questions -#### Under which licence is YunoHost distributed? +#### Under which license is YunoHost distributed? YunoHost packages are under free licenses GNU AGPL v.3. @@ -13,7 +13,7 @@ Applications and applications packages have their own licenses. #### What's YunoHost goal? We believe that decentralizing the Internet, and empowering people to take control and -responsability back over their own data and services, is a crucial issue to guarantee +responsibility back over their own data and services, is a crucial issue to guarantee a free and democratic society. The YunoHost project aims to democratize self-hosting. @@ -30,14 +30,14 @@ work for you. For instance, if you wanted to install Wordpress, you would need to type a bunch of commands to create some users, setup a web server, setup a SQL server, -download the wordpress archive, uncompress it, configure the web server, -configure the SQL database, and finally configure wordpress. YunoHost handles +download the Wordpress archive, uncompress it, configure the web server, +configure the SQL database, and finally configure Wordpress. YunoHost handles the technical details and "types all these commands for you", so that you can focus on what really matters. More info on [this page](whatsyunohost) ! -#### Can I host my own personnal website with YunoHost? +#### Can I host my own personal website with YunoHost? Yes! Have a look at the [Custom Web app](https://github.com/YunoHost-Apps/my_webapp_ynh). It provides an "empty shell" : after installing it, just upload your files From 1b8beb783dcfb4a51d5a20843d6721d2141cb499 Mon Sep 17 00:00:00 2001 From: Mellerin <36613276+Mellerin@users.noreply.github.com> Date: Mon, 3 Feb 2020 07:28:22 +0100 Subject: [PATCH 302/360] Update app_yunofav_fr.md Fix invalid url --- app_yunofav_fr.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app_yunofav_fr.md b/app_yunofav_fr.md index 087b1b50..c5cedf46 100644 --- a/app_yunofav_fr.md +++ b/app_yunofav_fr.md @@ -1,5 +1,5 @@ # Yunofav : (non officiel) Page de liens favoris pour Yunohost -page d'accueil : https://github.com/YunoHost-Apps/yunofav_ynh_ynh +page d'accueil : https://github.com/YunoHost-Apps/yunofav_ynh -Fonctionnalité : Crée une page pour vos liens préférés, en utilisant les tuiles Yunohost look and feel. \ No newline at end of file +Fonctionnalité : Crée une page pour vos liens préférés, en utilisant les tuiles Yunohost look and feel. From e1053405e85867a69da9208a1a493f7efbf99438 Mon Sep 17 00:00:00 2001 From: Mellerin <36613276+Mellerin@users.noreply.github.com> Date: Mon, 3 Feb 2020 07:34:24 +0100 Subject: [PATCH 303/360] Update app_yunofav_fr.md essai de traduction FR de "look and feel" --- app_yunofav_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app_yunofav_fr.md b/app_yunofav_fr.md index 087b1b50..025368c4 100644 --- a/app_yunofav_fr.md +++ b/app_yunofav_fr.md @@ -2,4 +2,4 @@ page d'accueil : https://github.com/YunoHost-Apps/yunofav_ynh_ynh -Fonctionnalité : Crée une page pour vos liens préférés, en utilisant les tuiles Yunohost look and feel. \ No newline at end of file +Fonctionnalité : Crée une page pour vos liens préférés, en utilisant le style et le fonctionnement des tuiles Yunohost. From 50f0c5dfb635e7c5d2e37665ec6d437f09769b88 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sun, 9 Feb 2020 16:35:20 +0000 Subject: [PATCH 304/360] =?UTF-8?q?#=C3=9Cbersetzung=20der=20Administrator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- howtohostyourself_de.md | 83 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 howtohostyourself_de.md diff --git a/howtohostyourself_de.md b/howtohostyourself_de.md new file mode 100644 index 00000000..d764b8e3 --- /dev/null +++ b/howtohostyourself_de.md @@ -0,0 +1,83 @@ +# So hosten Sie selbst ? + +Sie können zu Hause (auf einem kleinen Computer) oder auf einem Remote-Server hosten. Jede Lösung hat ihre Vor- und Nachteile: + +### Zu Hause, zum Beispiel auf einem Einplatinencomputer oder einem alten Computer + +Sie können zu Hause mit einem Einplatinencomputer oder einem überarbeiteten regulären Computer, der mit Ihrem Heimrouter verbunden ist, hosten. + +- **Pros** : Sie haben die physische Kontrolle über die Maschine und müssen nur die Hardware kaufen; +- **Cons** : Sie müssen [Ihre Internet-Router manuell konfigurieren](isp_box_config) und [sind möglicherweise von Ihrem Internet-Service-Provider eingeschränkt](isp). + +### Zu Hause hinter einem VPN + +Ein VPN ist ein verschlüsselter Tunnel zwischen zwei Computern. In der Praxis sieht es so aus, als ob Sie direkt vor Ort mit Ihrem Server verbunden wären, aber tatsächlich verbinden Sie sich von einem anderen Ort im Internet. Auf diese Weise können Sie weiterhin zu Hause hosten und gleichzeitig mögliche Einschränkungen Ihres Internetdienstanbieters umgehen. Siehe auch [das Internet Cube-Projekt](https://internetcu.be/) und [der FFDN](https://www.ffdn.org/). + +- **Pros** : Sie haben die physische Kontrolle über den Computer, und das VPN verbirgt Ihren Datenverkehr vor Ihrem ISP und ermöglicht es Ihnen, seine Einschränkungen zu umgehen; +- **Cons** : Sie müssen ein monatliches Abonnement für das VPN bezahlen. + +### Auf einem Remote-Server (VPS oder dedizierter Server) + +Sie können einen virtuellen privaten Server oder eine dedizierte Maschine von [associative](https://db.ffdn.org/) oder von anderen kommerziellen "Cloud"-Anbietern mieten. + +- **Pros** : Ihr Server und seine Internetverbindung sind schnell; +- **Cons** : Sie müssen ein monatliches Abonnement bezahlen und haben keine physische Kontrolle über Ihren Server. + +### Summary + +<table class="table"> + <thead> + <tr> + <th></th> + <th style="text-align:center;">Zu Hause<br><small>(z.B. Einplatinencomputer, alter Computer)</small></th> + <th style="text-align:center;">Zu Hause<br>hinter einem VPN</th> + <th style="text-align:center;">Auf einem Remote-Server<br>(VPS oder dediziert)</th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align:center;">Hardware Kosten</td> + <td style="text-align:center;" class="warning" colspan="2">etwa 50€ <br><small>(z.B. ein Raspberry Pi)</small></td> + <td style="text-align:center;" class="success">keine</td> + </tr> + <tr> + <td style="text-align:center;">Monatliche Kosten</td> + <td style="text-align:center;" class="success">Unerheblich<br><small>(Stromkosten)</small></td> + <td style="text-align:center;" class="warning">etwa 5€ <br><small>(VPN)</small></td> + <td style="text-align:center;" class="warning">ab ~3€ <br><small>(VPS)</small></td> + </tr> + <tr> + <td style="text-align:center;">Physikalische Kontrolle<br>der Machine</td> + <td style="text-align:center;" class="success">Ja</td> + <td style="text-align:center;" class="success">Ja</td> + <td style="text-align:center;" class="danger">Nein</td> + </tr> + <tr> + <td style="text-align:center;">Manuelles Port <br>Routing erforderlich</td> + <td style="text-align:center;" class="warning">Ja</td> + <td style="text-align:center;" class="success">Nein</td> + <td style="text-align:center;" class="success">Nein</td> + </tr> + <tr> + <td style="text-align:center;">Mögliche ISP-Einschränkungen</td> + <td style="text-align:center;" class="danger">Ja <br><small>(siehe [hier](/isp))</small></td> + <td style="text-align:center;" class="success">Per VPN umgangen</td> + <td style="text-align:center;" class="success">Normalerweise nein</td> + </tr> + <tr> + <td style="text-align:center;">CPU</td> + <td style="text-align:center;" class="warning" colspan="2">Typischerweise ~1 GHz</td> + <td style="text-align:center;" class="success">~2 GHz <br><small>(Digital Ocean droplet)</small></td> + </tr> + <tr> + <td style="text-align:center;">RAM</td> + <td style="text-align:center;" class="warning" colspan="2">In der Regel 500 MB oder 1 GB</td> + <td style="text-align:center;" class="warning">abhängig von den Serverkosten</td> + </tr> + <tr> + <td style="text-align:center;">Internetverbindung</td> + <td style="text-align:center;" class="warning" colspan="2">Hängt von Ihrer Internetverbindung ab</td> + <td style="text-align:center;" class="success">Normalerweise ziemlich gut</td> + </tr> + </tbody> +</table> From 30fa6854a2c62f77c46cc8915c4c524fbe1c5544 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sun, 9 Feb 2020 18:03:28 +0000 Subject: [PATCH 305/360] Edit wishlist with Opencart script. --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index b540d867..49ed9908 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -91,6 +91,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Nuage](https://nuage.kerjean.me/login) / [github](https://github.com/mickael-kerjean/filestash) - [Ombi](https://github.com/tidusjar/Ombi) - [OpenBazaar](https://openbazaar.org) / [github](https://github.com/openbazaar) +- [OpenCart](https://www.opencart.com) / [github](https://github.com/opencart/opencart) - [openHAB](https://www.openhab.org/) - Smart home platform. / [github](https://github.com/openhab) - [OpenProject](https://github.com/opf/openproject) - [OpenSourceBilling](https://github.com/vteams/open-source-billing) From d4e8f322c98a39ed5fe807eb6a021843ea26cd11 Mon Sep 17 00:00:00 2001 From: Mellerin <36613276+Mellerin@users.noreply.github.com> Date: Mon, 10 Feb 2020 07:23:43 +0100 Subject: [PATCH 306/360] fix TOC links rewrite anchors in order to fix TOC which links to non-existing pages --- app_pleroma_fr.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app_pleroma_fr.md b/app_pleroma_fr.md index fbc3b2d1..939e5fec 100644 --- a/app_pleroma_fr.md +++ b/app_pleroma_fr.md @@ -1,12 +1,12 @@ # <img src="/images/pleroma_logo.png" alt="logo de Pleroma"> Pleroma - - [Découverte de l'interface de Pleroma](decouvertegeneralepleroma) - - [Logiciels Clients pour mobile et ordinateur](LogicielsClients) - - [Liens utiles](liensutiles) + - [Découverte de l'interface de Pleroma](#decouvertegeneralepleroma) + - [Logiciels Clients pour mobile et ordinateur](#LogicielsClients) + - [Liens utiles](#liensutiles) Pleroma est un réseau social décentralisé de micro-blogging qui propose une alternative à Twitter, le protocole Activy Pub qu'il utilise permet d'interagir avec le fediverse composé notamment de Mastodon, GNU Social, et d'autres. Il a l'avantage d'être plus léger que mastodon et se prête donc plus facilement à l'auto-hébergement. -## Découverte de l'interface de Pleroma <a href="" name="decouvertegeneralepleroma"></a> +## <a name="decouvertegeneralepleroma"></a>Découverte de l'interface de Pleroma Pour ceux et celles qui n'ont pas ou peu l'habitude des réseaux sociaux, voici en détail l'utilisation de chacune des fenêtres proposées. @@ -36,7 +36,7 @@ Cet espace permet de choisir l'agencement de Pleroma, il est proposé deux agenc 6. Notifications On retrouve dans cette zone les messages où vous avez été cité, mais aussi les abonnements à votre compte. -## Applications clients <a href="" name="LogicielsClients"></a> +## <a name="LogicielsClients"></a>Applications clients | Nom de l'applications | Plateforme | Multi-comptes | Autre réseaux supportés | Play Store | F-Droid | Apple Store | |---|---|---|---|---|---|---| @@ -45,7 +45,7 @@ On retrouve dans cette zone les messages où vous avez été cité, mais aussi l | Twidere | Android | Oui | Twitter, Mastodon | [play.google.com/org.mariotaku.twidere](https://play.google.com/store/apps/details?id=org.mariotaku.twidere) | [https://f-droid.org/org.mariotaku.twidere](https://f-droid.org/fr/packages/org.mariotaku.twidere/) | | Librem Social | Android | Non | ? | [play.google.com/one.librem.social](https://play.google.com/store/apps/details?id=one.librem.social&hl=fr) | [https://f-droid.org/one.librem.social](https://f-droid.org/fr/packages/one.librem.social) | | -## Quelques liens utiles <a href="" name="liensutiles"></a> +## <a name="liensutiles"></a>Quelques liens utiles + Site officiel : [pleroma.social (En anglais)](https://pleroma.social) + Trouver d'autres instances de Pleroma : [fediverse.network/pleroma](https://fediverse.network/pleroma) From c3510fc8e0381e13d7b55f09e013b8dc6305465e Mon Sep 17 00:00:00 2001 From: Mellerin <36613276+Mellerin@users.noreply.github.com> Date: Mon, 10 Feb 2020 07:30:40 +0100 Subject: [PATCH 307/360] Update app_pleroma_fr.md --- app_pleroma_fr.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app_pleroma_fr.md b/app_pleroma_fr.md index 939e5fec..7ac71aa4 100644 --- a/app_pleroma_fr.md +++ b/app_pleroma_fr.md @@ -1,8 +1,8 @@ # <img src="/images/pleroma_logo.png" alt="logo de Pleroma"> Pleroma - - [Découverte de l'interface de Pleroma](#decouvertegeneralepleroma) - - [Logiciels Clients pour mobile et ordinateur](#LogicielsClients) - - [Liens utiles](#liensutiles) + - [Découverte de l'interface de Pleroma](#d%C3%A9couverte-de-linterface-de-pleroma) + - [Logiciels Clients pour mobile et ordinateur](#applications-clients-) + - [Liens utiles](#liens-utiles) Pleroma est un réseau social décentralisé de micro-blogging qui propose une alternative à Twitter, le protocole Activy Pub qu'il utilise permet d'interagir avec le fediverse composé notamment de Mastodon, GNU Social, et d'autres. Il a l'avantage d'être plus léger que mastodon et se prête donc plus facilement à l'auto-hébergement. From 6b56c47823e5138bbf92e5c2343eea7b905079c8 Mon Sep 17 00:00:00 2001 From: Mellerin <36613276+Mellerin@users.noreply.github.com> Date: Mon, 10 Feb 2020 07:39:32 +0100 Subject: [PATCH 308/360] Update app_pleroma_fr.md --- app_pleroma_fr.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app_pleroma_fr.md b/app_pleroma_fr.md index 7ac71aa4..4f8f0a91 100644 --- a/app_pleroma_fr.md +++ b/app_pleroma_fr.md @@ -1,12 +1,12 @@ # <img src="/images/pleroma_logo.png" alt="logo de Pleroma"> Pleroma - [Découverte de l'interface de Pleroma](#d%C3%A9couverte-de-linterface-de-pleroma) - - [Logiciels Clients pour mobile et ordinateur](#applications-clients-) - - [Liens utiles](#liens-utiles) + - [Logiciels Clients pour mobile et ordinateur](#applications-clients) + - [Liens utiles](#quleques-liens-utiles) Pleroma est un réseau social décentralisé de micro-blogging qui propose une alternative à Twitter, le protocole Activy Pub qu'il utilise permet d'interagir avec le fediverse composé notamment de Mastodon, GNU Social, et d'autres. Il a l'avantage d'être plus léger que mastodon et se prête donc plus facilement à l'auto-hébergement. -## <a name="decouvertegeneralepleroma"></a>Découverte de l'interface de Pleroma +## Découverte de l'interface de Pleroma Pour ceux et celles qui n'ont pas ou peu l'habitude des réseaux sociaux, voici en détail l'utilisation de chacune des fenêtres proposées. @@ -28,7 +28,7 @@ Pour ceux et celles qui n'ont pas ou peu l'habitude des réseaux sociaux, voici C'est ici le centre ~~du monde~~ de Pleroma, vous pourrez y voir les différentes publications de vos contacts ou qui circulent sur l'instance ainsi que les re-toots et qui a publié. 4. Le journal -Cette zone permet de voir les différentes publications des comptes que vous suivez mais aussi l'ensemble des publications visibles sur votre instance. Vous trouverez aussi les messages privés et les notifications où vous trouverez tous vos toots et les publications où vous avez été cité. +Cette zone permet de voir les différentes publications des comptes que vous suivez mais aussi l'ensemble des publications visibles sur votre instance. Vous trouverez ahttps://github.com/Mellerin/doc/blob/master/app_pleroma_fr.md#applications-clients-ussi les messages privés et les notifications où vous trouverez tous vos toots et les publications où vous avez été cité. 5. Interface utilisateur·trice Cet espace permet de choisir l'agencement de Pleroma, il est proposé deux agencements : un spécifique à Pleroma et un fork (une copie) de l'agencement de Mastodon, selon vos préférences d'usages et de visualisations ; à vous de faire votre choix. @@ -36,7 +36,7 @@ Cet espace permet de choisir l'agencement de Pleroma, il est proposé deux agenc 6. Notifications On retrouve dans cette zone les messages où vous avez été cité, mais aussi les abonnements à votre compte. -## <a name="LogicielsClients"></a>Applications clients +## Applications clients | Nom de l'applications | Plateforme | Multi-comptes | Autre réseaux supportés | Play Store | F-Droid | Apple Store | |---|---|---|---|---|---|---| @@ -45,7 +45,7 @@ On retrouve dans cette zone les messages où vous avez été cité, mais aussi l | Twidere | Android | Oui | Twitter, Mastodon | [play.google.com/org.mariotaku.twidere](https://play.google.com/store/apps/details?id=org.mariotaku.twidere) | [https://f-droid.org/org.mariotaku.twidere](https://f-droid.org/fr/packages/org.mariotaku.twidere/) | | Librem Social | Android | Non | ? | [play.google.com/one.librem.social](https://play.google.com/store/apps/details?id=one.librem.social&hl=fr) | [https://f-droid.org/one.librem.social](https://f-droid.org/fr/packages/one.librem.social) | | -## <a name="liensutiles"></a>Quelques liens utiles +## Quelques liens utiles + Site officiel : [pleroma.social (En anglais)](https://pleroma.social) + Trouver d'autres instances de Pleroma : [fediverse.network/pleroma](https://fediverse.network/pleroma) From 4d77cad9c9f679a57cec89a6b18f1a54888706b3 Mon Sep 17 00:00:00 2001 From: Mellerin <36613276+Mellerin@users.noreply.github.com> Date: Mon, 10 Feb 2020 08:26:07 +0100 Subject: [PATCH 309/360] fix app_pleroma_fr.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix : liens dans la TOC changes : éternels accords, inclusif avec "⋅e", etc. ajout qq liens --- app_pleroma_fr.md | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/app_pleroma_fr.md b/app_pleroma_fr.md index 4f8f0a91..44a4cdb1 100644 --- a/app_pleroma_fr.md +++ b/app_pleroma_fr.md @@ -2,39 +2,40 @@ - [Découverte de l'interface de Pleroma](#d%C3%A9couverte-de-linterface-de-pleroma) - [Logiciels Clients pour mobile et ordinateur](#applications-clients) - - [Liens utiles](#quleques-liens-utiles) + - [Liens utiles](#quelques-liens-utiles) -Pleroma est un réseau social décentralisé de micro-blogging qui propose une alternative à Twitter, le protocole Activy Pub qu'il utilise permet d'interagir avec le fediverse composé notamment de Mastodon, GNU Social, et d'autres. Il a l'avantage d'être plus léger que mastodon et se prête donc plus facilement à l'auto-hébergement. +Pleroma est un réseau social décentralisé de micro-blogging qui propose une alternative à Twitter, le protocole [Activy Pub](https://en.wikipedia.org/wiki/ActivityPub) qu'il utilise permet d'interagir avec le [fediverse](https://fediverse.party/en/fediverse) composé notamment de Mastodon, GNU Social, et d'autres. Il a l'avantage d'être plus léger que mastodon et se prête donc plus facilement à l'auto-hébergement. ## Découverte de l'interface de Pleroma -Pour ceux et celles qui n'ont pas ou peu l'habitude des réseaux sociaux, voici en détail l'utilisation de chacune des fenêtres proposées. +Pour celles et ceux qui n'ont pas ou peu l'habitude des réseaux sociaux, voici en détail l'utilisation de chacune des fenêtres proposées : ### Accueil de l'interface <img src="/images/capture_globale.png" alt="Capture écran accueil de Pleroma"> 1. Barre de menu - + <img src="/images/capture_menu_gauche.png" alt="Capture du bouton à gauche de la barre de menu"> Le bouton à gauche portant le nom de l'instance dans la capture ci-dessus *Meta - Pleroma* renvoie vers la page d'accueil de l'instance. Dans le cas où vous êtes connecté cela vous renverra vers la visualisation de votre *journal*, si ce n'est pas le cas vers *Le réseau connu*. - + <img src="/images/capture_menu_droite.png" alt="Capture des boutons à droite de la barre de menu"> Si vous êtes connecté vous aurez trois boutons, si vous ne l'êtes pas il n'y en aura que deux. Dans l'ordre de gauche à droite : - + <img src="/images/capture_menu_droite_chercher_utilisateur.png" alt="Capture bouton chercher un/e utilisateur.trice"> Permet d'ajouter de nouveaux utilisateurs et nouvelles utilisatrices afin de les suivre et ainsi vous abonner à leurs publications. Il est possible de rechercher un·e utilisateur·trice avec seulement son pseudonyme (par exemple : *yunohost*) ou alors sous la forme @pseudonyme@instance.domaine (par exemple : *@yunohost@mastodon.social*) - + <img src="/images/capture_menu_droite_preferences.png" alt="Capture bouton préférences"> Permet d'accéder aux paramétres d'affichages de votre session. /!\ Si vous n'êtes pas connecté·e les modifications effectuées ne seront valables qu'un temps (jusqu'à ce que les cookies de fonctionnement soient effacés). + + <img src="/images/capture_menu_gauche.png" alt="Capture du bouton à gauche de la barre de menu"> Le bouton à gauche portant le nom de l'instance - dans la capture ci-dessus *Meta - Pleroma* - renvoie vers la page d'accueil de l'instance. Dans le cas où vous êtes connecté⋅e cela vous renverra vers la visualisation de votre *journal*, si ce n'est pas le cas vers *Le réseau connu*. + + <img src="/images/capture_menu_droite.png" alt="Capture des boutons à droite de la barre de menu"> Si vous êtes connecté⋅e vous aurez trois boutons, si vous ne l'êtes pas il n'y en aura que deux. Dans l'ordre, de gauche à droite : + + <img src="/images/capture_menu_droite_chercher_utilisateur.png" alt="Capture bouton chercher un⋅e utilisateur⋅trice"> Permet d'ajouter de nouveaux utilisateurs et nouvelles utilisatrices afin de les suivre et ainsi vous abonner à leurs publications. Il est possible de rechercher un·e utilisateur·trice avec seulement son pseudonyme (par exemple : *yunohost*) ou alors sous la forme @pseudonyme@instance.domaine (par exemple : *@yunohost@mastodon.social*) + + <img src="/images/capture_menu_droite_preferences.png" alt="Capture bouton préférences"> Permet d'accéder aux paramétres d'affichages de votre session. + /!\ Si vous n'êtes pas connecté·e les modifications effectuées ne seront valables qu'un temps (jusqu'à ce que les cookies de fonctionnement soient effacés). + <img src="/images/capture_menu_droite_deconnexion.png" alt="Capture Déconnexion"> Permet de se déconnecter de l'instance. Si vous n'êtes pas sur votre ordinateur personnel pensez-y ! 2. Espace de Publications / Fenêtre de connexion -<img src="/images/capture_espace_connexion.png" alt="Fenêtre de connexion à la place de la zone de publications"> Si vous êtes connecté·e cet espace vous permet de publier vos messages et d'y joindre un média (images, GIF, vidéos, etc). Vous êtes limité dans le nombre de caractères, avec Pleroma la limitation est définie par l'administrateur·trice de l'instance. Si vous avez des questions envoyez lui un message. +<img src="/images/capture_espace_connexion.png" alt="Fenêtre de connexion à la place de la zone de publications"> Si vous êtes connecté·e cet espace vous permet de publier vos messages et d'y joindre un média (images, GIF, vidéos, etc). Vous êtes limité⋅e dans le nombre de caractères, avec Pleroma la limitation est définie par l'administrateur·trice de l'instance. Si vous avez des questions envoyez lui un message. 3. Fenêtre de visualisations C'est ici le centre ~~du monde~~ de Pleroma, vous pourrez y voir les différentes publications de vos contacts ou qui circulent sur l'instance ainsi que les re-toots et qui a publié. 4. Le journal -Cette zone permet de voir les différentes publications des comptes que vous suivez mais aussi l'ensemble des publications visibles sur votre instance. Vous trouverez ahttps://github.com/Mellerin/doc/blob/master/app_pleroma_fr.md#applications-clients-ussi les messages privés et les notifications où vous trouverez tous vos toots et les publications où vous avez été cité. +Cette zone permet de voir les différentes publications des comptes que vous suivez mais aussi l'ensemble des publications visibles sur votre instance. Vous trouverez aussi les messages privés et les notifications où vous trouverez tous vos toots et les publications où vous avez été cité⋅e. 5. Interface utilisateur·trice Cet espace permet de choisir l'agencement de Pleroma, il est proposé deux agencements : un spécifique à Pleroma et un fork (une copie) de l'agencement de Mastodon, selon vos préférences d'usages et de visualisations ; à vous de faire votre choix. 6. Notifications -On retrouve dans cette zone les messages où vous avez été cité, mais aussi les abonnements à votre compte. +On retrouve dans cette zone les messages où vous avez été cité⋅e, mais aussi les abonnements à votre compte. ## Applications clients From c7dc127a8ce8d13186240dd5715d56f9bbff4746 Mon Sep 17 00:00:00 2001 From: Mellerin <36613276+Mellerin@users.noreply.github.com> Date: Mon, 10 Feb 2020 08:31:43 +0100 Subject: [PATCH 310/360] add missing capture_menu_gauche.png --- images/capture_menu_gauche.png | Bin 0 -> 1038 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/capture_menu_gauche.png diff --git a/images/capture_menu_gauche.png b/images/capture_menu_gauche.png new file mode 100644 index 0000000000000000000000000000000000000000..842e8a70fe4282d2bac73caec48661038f29de7e GIT binary patch literal 1038 zcmeAS@N?(olHy`uVBq!ia0vp^6M@)>g9%7pHd<!_q&N#aB8wRq_zr_G<MI3zDGUtE z2RvOILn`LHonxE*I6|cDek_~Vnk2~?*}0Ep--@U$UJ<IwGAm>yFXKUjoaq+-4;VZ+ zblTxxqw&jW8w5C(l$nZ2gy!Ym+#z8TmU@4S`B$+`IzP2Hs)tSDe!jBAUS$5_=XI84 zOahxep3dKSf4((al676}JBE(6m0Q<6{3>5>n<{hU*#(=){6%W=Pkii7%&eJU{8J(Q zljFH3&2vt&TjG#7&RrT7GW9v%!>60R6~A&nyf5UtuFttFN9C0vr<N}}Ev6+N0Hm+x z*Gs+EYP0+!{k~W|>(Zh1Z$HcKITbv4t}%nslgis1Qge4WrHZ-Cc<QYu?9Id=u`Ar@ zbc|Q1u~8}8e*41v#w8UYI<IoBJg?srb4SkCnt?%H?s|K3B(L#a^VsLJoUiKnZ#nda zeHrT?mbvob+cICC+Ozqo!6Gl&+K0C)9b#&8=l6$~25&tr{A~N8JcsqKzsv~lTEE_M zS#8;Lr)%c~3jVjqHkmUxSl$p`D_yf?@wS&zFRrjQJYxU+NaXm}hn0JKGjemd8fq;s zx|!cw&c`4lXE}9J-Hn~;v3ENJ#Sh%s5y_`~>DjxFk7tQ%o7}y<F8Fz%O7Y!$JaeNM zoWFbhmfPj0+hH>`w9f8cEm!1x$BNa{xAQVIoLUn-??~33(wk5AFYEAXPAg!2o1gsg z+xe|2A!b#RkGCc7DV@pj)9LIjgF|-m3Vic?&#hZtZnkc>o%gPvwtNh-@6N9~p2V{B zfRTsd=SsGk{i5<SnK~AoD>&WwvT?%+5r>r_pQnaApRm?OZ&|-k^z)plGV4vWU026k zs;ZYz)_WvS#9H^=_GOWHQG^d8`vf_b&&)~gnmQA9ZgxBnm~>Q)@7sg>91W_uC!bAJ zTbny8>qeHfFQc=+?O)BK{Lflt?;G8A3bNT#ZzFRoxx%6~_v9VPV|Uu?5)Lr^Pv=>2 z`4yx1hT``POWUU&O1SoleU?GSwz<#FyKfJaVE7Sx;?mtB*0#XxI*xTI%_7^La^4H> z&ad5}%DZ{5;-b%wyPj(=k22Jf+7)hk`qiboI^Xqn1#CSXBp0ydsa=2KVS{6Lp8q^` z@ydmV7xx`)|DRX!=XNRA&GW_y0v|54$#?wB5|kCxUlkS7Q!e#!t$vKP)ob?j_j4;Y z&zy60S6S))0}ZkJc1MXHdzBX_dSKVn64AMLmv8v?KIz5pU;5L;fBklQBu8x8hh~Z| i`x%}#Kbu+ehkt?k{{L!4!Z(2#oWax8&t;ucLK6T~_Ux1Z literal 0 HcmV?d00001 From e89cabce38ecf535af2899d015288818471a78b8 Mon Sep 17 00:00:00 2001 From: karottenbaum <karottenbaum@users.noreply.github.com> Date: Mon, 10 Feb 2020 12:25:32 +0100 Subject: [PATCH 311/360] Translate 'delete' key --- boot_and_graphical_install.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boot_and_graphical_install.md b/boot_and_graphical_install.md index c20fe280..de3b7dec 100644 --- a/boot_and_graphical_install.md +++ b/boot_and_graphical_install.md @@ -12,7 +12,7 @@ The wireless connections are not supported yet, and if you use intermediate rout ## <small>2.</small> Boot on CD / USB stick Boot up your server with the USB stick or a CD-ROM inserted, and select it as **bootable device** by pressing one of the following keys (hardware specific): -```<ESC>```, ```<F9>```, ```<F10>```, ```<F11>```, ```<F12>``` or ```<SUPPR>``` +```<ESC>```, ```<F9>```, ```<F10>```, ```<F11>```, ```<F12>``` or ```<DEL>``` ## <small>3.</small> Launch graphical installation From 6c4cb4e7418139ee86a0129d3d583096b9687556 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sun, 16 Feb 2020 13:21:13 +0000 Subject: [PATCH 312/360] Add Draw.io --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index b540d867..9a2bd371 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -31,6 +31,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Croodle](https://github.com/jelhan/croodle) Schedule a date or to do a poll on a general topics, with client-side encryption. - [Darkwire.io](https://github.com/seripap/darkwire.io) - [DirectoryLister](https://github.com/DirectoryLister/DirectoryLister) +- [Draw.io](https://github.com/jgraph/drawio) : a diagram online creator - [EasyAppointments](https://easyappointments.org/) Online appointment booker (similar to Doodle) - [eLabFTW](https://www.elabftw.net/) electronic lab notebook / [github](https://github.com/elabftw/elabftw) - [Emoncms](https://github.com/emoncms/emoncms) From d04ca2273af39c40eb7db1310a8f86427d4ee8bf Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Thu, 27 Feb 2020 20:52:04 +0000 Subject: [PATCH 313/360] Remind that the ci process relies on the content of the check_process file and explain how to monitor the CI results. --- packaging_apps_ci.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packaging_apps_ci.md b/packaging_apps_ci.md index 0167b354..0401e0df 100644 --- a/packaging_apps_ci.md +++ b/packaging_apps_ci.md @@ -27,6 +27,9 @@ To ease your usage of this CI, a small script can be used to copy your apps to y Copy this [script](https://raw.githubusercontent.com/YunoHost/CI_package_check/master/dev_CI/Send%20CI%20dev.sh) into your usual working directory and fill it with your info. +Make sure the content of your `check_process` file is correct then transfer your files. +When your files have been transfered, you can monitor the CI pipeline on https://ci-apps-dev.yunohost.org. + --- # Other continuous integration servers From 75f4a59067be0420a92e0754b7e18f73ff3c47d6 Mon Sep 17 00:00:00 2001 From: MyNameIsTroll <31790025+MyNameIsTroll@users.noreply.github.com> Date: Wed, 4 Mar 2020 10:25:55 +0100 Subject: [PATCH 314/360] add (Lemmy) I've added the Lemmy app to the list. --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index 50828a51..0d07b1bb 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -70,6 +70,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Kontalk](https://kontalk.org) / [github](https://github.com/kontalk) - [Koozip](http://koozic.net) / [github](https://github.com/DocMarty84/koozic) - [L'atelier](https://github.com/jbl2024/latelier) +- [Lemmy](https://dev.lemmy.ml) / [github](https://github.com/dessalines/lemmy) A federated alternative to reddit. - [Lessy](https://lessy.io) / [github](https://github.com/lessy-community/lessy) - [LibreOffice Online](https://wiki.documentfoundation.org/ReleaseNotes/5.3/fr#LibreOffice_Online) - [LiquidSoap](http://savonet.sourceforge.net/) / [github](https://github.com/savonet/liquidsoap) From cbb6920c8ce7ee7d4bdeecb8991ec2247f9e8e28 Mon Sep 17 00:00:00 2001 From: Kay0u <pierre.moltess@gmail.com> Date: Tue, 10 Mar 2020 23:41:04 +0100 Subject: [PATCH 315/360] adding more information for migration --- groups_and_permissions.md | 123 +++++++++++++++++++++++++++++++++++++- 1 file changed, 121 insertions(+), 2 deletions(-) diff --git a/groups_and_permissions.md b/groups_and_permissions.md index 443d977c..4b28d3ee 100644 --- a/groups_and_permissions.md +++ b/groups_and_permissions.md @@ -129,7 +129,7 @@ $ yunohost user permission update mail --remove all_users --add bob Notes for apps packagers ------------------------ -By default, installing an app creates the permission `app.main` with `all_users` allowed by default. +Installing an app creates the permission `app.main` with `all_users` allowed by default. If you wish to make the application publicly available, instead of the old `unprotected_urls` mechanism, you should give access to the special groups `visitors`: @@ -158,5 +158,124 @@ Applications scripts should absolutely **NOT** mess up with any already-existing When migrating away from the legacy permission, you should: - remove any management of `$is_public`-like or `$admin_user`-like setting, except for any manifest question meant to either *initialize* the app as public/private or specific permissions ; - remove any management of `skipped_`, `unprotected_` and `protected_uris` (and `_regex`) settings that are now considered obsolete and deprecated. (N.B.: you should **explicitly delete them in the upgrade script**). Instead, you should now rely on the new `ynh_permission_*` helpers instead. If you do feel like you still need to use them, please contact the core team to provide your feedback and we'll figure out something ; -- remove any call to `yunohost app addaccess` and similar actions that are now obsolete and deprecated. +For example, in the upgrade script if you used the `protected_uris` key before, you may use this code in the `DOWNWARD COMPATIBILITY` section: +```bash +protected_uris=$(ynh_app_setting_get --app=$app --key=protected_uris) +# Unused with the permission system +if [ ! -z "$protected_uris" ]; then + ynh_app_setting_delete --app=$app --key=protected_uris +fi +``` + +- remove any call to `yunohost app addaccess` and similar actions that are now obsolete and deprecated. +- if your app use LDAP and support filter, use the filter `'(&(objectClass=posixAccount)(permission=cn=YOUR_APP.main,ou=permission,dc=yunohost,dc=org))'` to allow users who have this permission. (A complete documentation of LDAP [here](https://moulinette.readthedocs.io/en/latest/ldap.html) if you want to undestand how it works with YunoHost) + +Here an example of how to migrate the code from legacy to new permission system: [example](https://github.com/YunoHost/example_ynh/pull/111/files) + +#### Specific case: regex protection + +If you still need to use regex to protect or unprotect urls, you can't use the new permission system (for now). + +But you can create a fake permission and use hooks to handle if there is a change in this faked permission. + +In the install script, create the fake permission (with no url): + +`ynh_permission_create --permission="create poll" --allowed="visitors"` + +Then use the legacy protection: + +```bash +# Make app public if necessary +if [ $is_public -eq 1 ] +then + if [ "$path_url" == "/" ]; then + # If the path is /, clear it to prevent any error with the regex. + path_url="" + fi + # Modify the domain to be used in a regex + domain_regex=$(echo "$domain" | sed 's@-@.@g') + ynh_app_setting_set --app=$app --key=unprotected_regex --value="$domain_regex$path_url/create_poll.php?.*$","$domain_regex$path_url/adminstuds.php?.*" +else + ynh_permission_update --permission="create poll" --remove="visitors" +fi +``` + +In this example, if the app is public the group `visitors` has access to the permission `create poll`, the group is removed from this permission otherwise. + +Then create two files in the directory `hooks` at the root of the git repository: `post_app_addaccess` and `post_app_removeaccess`. In these hooks, you'll remove or readd the regex protection if the `visitors` group is add or remove from this permission: + +`post_app_addaccess`: + +```bash +#!/bin/bash + +# Source app helpers +source /usr/share/yunohost/helpers + +app=$1 +added_users=$2 +permission=$3 +added_groups=$4 + +if [ "$app" == __APP__ ]; then + if [ "$permission" = "create poll" ]; then # The fake permission "create poll" is modifed. + if [ "$added_groups" = "visitors" ]; then # As is it a fake permission we can only grant/remove the "visitors" group. + domain=$(ynh_app_setting_get --app=$app --key=domain) + path_url=$(ynh_app_setting_get --app=$app --key=path) + + if [ "$path_url" == "/" ]; then + # If the path is /, clear it to prevent any error with the regex. + path_url="" + fi + # Modify the domain to be used in a regex + domain_regex=$(echo "$domain" | sed 's@-@.@g') + ynh_app_setting_set --app=$app --key=unprotected_regex --value="$domain_regex$path_url/create_poll.php?.*$","$domain_regex$path_url/adminstuds.php?.*" + + # Sync the is_public variable according to the permission + ynh_app_setting_set --app=$app --key=is_public --value=1 + + yunohost app ssowatconf + else + ynh_print_warn --message="This app doesn't support this authorisation, you can only add or remove visitors group." + fi + fi +fi +``` + +`post_app_removeaccess` + +```bash +#!/bin/bash + +# Source app helpers +source /usr/share/yunohost/helpers + +app=$1 +removed_users=$2 +permission=$3 +removed_groups=$4 + +if [ "$app" == __APP__ ]; then + if [ "$permission" = "create poll" ]; then # The fake permission "create poll" is modifed. + if [ "$removed_groups" = "visitors" ]; then # As is it a fake permission we can only grant/remove the "visitors" group. + + # We remove the regex, no more protection is needed. + ynh_app_setting_delete --app=$app --key=unprotected_regex + + # Sync the is_public variable according to the permission + ynh_app_setting_set --app=$app --key=is_public --value=0 + + yunohost app ssowatconf + else + ynh_print_warn --message="This app doesn't support this authorisation, you can only add or remove visitors group." + fi + fi +fi +``` + +Don't forget to replace `__APP__` during the install/upgrade script. + +Here some apps that use this specific case: [Lutim](https://github.com/YunoHost-Apps/lutim_ynh/pull/44/files) and [Opensondage](https://github.com/YunoHost-Apps/opensondage_ynh/pull/59/files) + +If you have any questions, please contact someone from the apps-group. \ No newline at end of file From f807812d5ef6eb6bfd4209beea11927fd9e01c8c Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 16 Mar 2020 22:09:19 +0000 Subject: [PATCH 316/360] tradotto --- index_it.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index_it.md b/index_it.md index abc4c5e8..970605f6 100644 --- a/index_it.md +++ b/index_it.md @@ -18,7 +18,7 @@ <span class="yolo 10" style="color: #FF5050;">dude, Y U NO Host?!</span> <span class="yolo 11" style="color: #66FF33;">Keep calm and host yourself</span> </p> - <button class="btn btn-primary btn-lg btn-block yolobtn">Scusa?</button> + <button class="btn btn-primary btn-lg btn-block yolobtn">COSA?</button> </div> <div class="main-links hidden-xs"> From 1fb85a2b63db980fddb1b1ee8974413d532e855d Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 16 Mar 2020 22:11:21 +0000 Subject: [PATCH 317/360] worth adding ygg --- apps_wishlist.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index 0d07b1bb..3a792b6c 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -31,7 +31,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Croodle](https://github.com/jelhan/croodle) Schedule a date or to do a poll on a general topics, with client-side encryption. - [Darkwire.io](https://github.com/seripap/darkwire.io) - [DirectoryLister](https://github.com/DirectoryLister/DirectoryLister) -- [Draw.io](https://github.com/jgraph/drawio) : a diagram online creator - [EasyAppointments](https://easyappointments.org/) Online appointment booker (similar to Doodle) - [eLabFTW](https://www.elabftw.net/) electronic lab notebook / [github](https://github.com/elabftw/elabftw) - [Emoncms](https://github.com/emoncms/emoncms) @@ -70,7 +69,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Kontalk](https://kontalk.org) / [github](https://github.com/kontalk) - [Koozip](http://koozic.net) / [github](https://github.com/DocMarty84/koozic) - [L'atelier](https://github.com/jbl2024/latelier) -- [Lemmy](https://dev.lemmy.ml) / [github](https://github.com/dessalines/lemmy) A federated alternative to reddit. - [Lessy](https://lessy.io) / [github](https://github.com/lessy-community/lessy) - [LibreOffice Online](https://wiki.documentfoundation.org/ReleaseNotes/5.3/fr#LibreOffice_Online) - [LiquidSoap](http://savonet.sourceforge.net/) / [github](https://github.com/savonet/liquidsoap) @@ -93,7 +91,6 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Nuage](https://nuage.kerjean.me/login) / [github](https://github.com/mickael-kerjean/filestash) - [Ombi](https://github.com/tidusjar/Ombi) - [OpenBazaar](https://openbazaar.org) / [github](https://github.com/openbazaar) -- [OpenCart](https://www.opencart.com) / [github](https://github.com/opencart/opencart) - [openHAB](https://www.openhab.org/) - Smart home platform. / [github](https://github.com/openhab) - [OpenProject](https://github.com/opf/openproject) - [OpenSourceBilling](https://github.com/vteams/open-source-billing) @@ -148,3 +145,4 @@ The following list is a compiled wishlist of applications that would be nice-to- - [ZeroTier](https://github.com/zerotier/ZeroTierOne) - [Zoneminder](https://github.com/ZoneMinder/zoneminder) - [Zulip](https://zulipchat.com/) / [github](https://github.com/zulip/zulip) +- [Yggdrasil](https://yggdrasil-network.github.io/) / [github](https://github.com/yggdrasil-network/yggdrasil-go) From 4909a829bcbea407c904369e96e7c026d7637ff2 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 16 Mar 2020 22:11:52 +0000 Subject: [PATCH 318/360] Erreur mineure de conjugaison --- ssh_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ssh_fr.md b/ssh_fr.md index fcb62dcf..124dac3b 100644 --- a/ssh_fr.md +++ b/ssh_fr.md @@ -64,7 +64,7 @@ ssh -p 2244 admin@votre.domaine.tld ``` <div class="alert alert-info"> -Si vous êtes connecté en tant qu'`admin` et souhaité devenir `root` pour plus de confort (par exemple, ne pas avoir à taper `sudo` à chaque commande), vous pouvez devenir `root` en tapant `sudo su`. +Si vous êtes connecté en tant qu'`admin` et souhaitez devenir `root` pour plus de confort (par exemple, ne pas avoir à taper `sudo` à chaque commande), vous pouvez devenir `root` en tapant `sudo su`. </div> ## Quels utilisateurs ? From 39b817f56caadf69b0c3772c22d350f4c22fa172 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Mon, 16 Mar 2020 23:20:58 +0100 Subject: [PATCH 319/360] Fix simone mess --- apps_wishlist.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index 3a792b6c..ad106cd0 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -31,6 +31,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Croodle](https://github.com/jelhan/croodle) Schedule a date or to do a poll on a general topics, with client-side encryption. - [Darkwire.io](https://github.com/seripap/darkwire.io) - [DirectoryLister](https://github.com/DirectoryLister/DirectoryLister) +- [Draw.io](https://github.com/jgraph/drawio) : a diagram online creator - [EasyAppointments](https://easyappointments.org/) Online appointment booker (similar to Doodle) - [eLabFTW](https://www.elabftw.net/) electronic lab notebook / [github](https://github.com/elabftw/elabftw) - [Emoncms](https://github.com/emoncms/emoncms) @@ -69,6 +70,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Kontalk](https://kontalk.org) / [github](https://github.com/kontalk) - [Koozip](http://koozic.net) / [github](https://github.com/DocMarty84/koozic) - [L'atelier](https://github.com/jbl2024/latelier) +- [Lemmy](https://dev.lemmy.ml) / [github](https://github.com/dessalines/lemmy) A federated alternative to reddit. - [Lessy](https://lessy.io) / [github](https://github.com/lessy-community/lessy) - [LibreOffice Online](https://wiki.documentfoundation.org/ReleaseNotes/5.3/fr#LibreOffice_Online) - [LiquidSoap](http://savonet.sourceforge.net/) / [github](https://github.com/savonet/liquidsoap) @@ -91,6 +93,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Nuage](https://nuage.kerjean.me/login) / [github](https://github.com/mickael-kerjean/filestash) - [Ombi](https://github.com/tidusjar/Ombi) - [OpenBazaar](https://openbazaar.org) / [github](https://github.com/openbazaar) +- [OpenCart](https://www.opencart.com) / [github](https://github.com/opencart/opencart) - [openHAB](https://www.openhab.org/) - Smart home platform. / [github](https://github.com/openhab) - [OpenProject](https://github.com/opf/openproject) - [OpenSourceBilling](https://github.com/vteams/open-source-billing) From def301e70091fda40e931413cb5d95a078c4b049 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 16 Mar 2020 22:32:36 +0000 Subject: [PATCH 320/360] Added some info for Italian speakers. It doesnt say there is a English version --- install_on_raspberry_it.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 install_on_raspberry_it.md diff --git a/install_on_raspberry_it.md b/install_on_raspberry_it.md new file mode 100644 index 00000000..b25eaf7a --- /dev/null +++ b/install_on_raspberry_it.md @@ -0,0 +1,13 @@ +# Installa YunoHost su Raspberry Pi + +*Consulta la guida completa in inglese [qui](https://yunohost.org/#/install_on_raspberry_en)* + +Questa pagina non è ancora stata creata, puoi modificarla premendo ```<ESC>``` sulla tua tastiera o cliccando il pulsante "Modifica" in basso a destra del tuo schermo. Potrai vedere l'anteprima delle tue modifiche premendo ancora ```<ESC>``` o cliccando il pulsante "Anteprima". + +** Nota: ** Devi fornire un indirizzo email per confermare le tue modifiche. + +###Sintassi + +Questa pagina usa la sintassi markdown, per favore fai riferimento alla documentazione per ulteriori informazioni: + +http://daringfireball.net/projects/markdown/syntax From 0917c5a3bb149e691c79f62e91d46c6c3d9aaba0 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 16 Mar 2020 22:34:33 +0000 Subject: [PATCH 321/360] =?UTF-8?q?#=C3=9Cbersetzung=20der=20Administrator?= =?UTF-8?q?=20-=20Dokumentation=20ins=20Deutsche.=20-=20#Translation=20of?= =?UTF-8?q?=20the=20Administrator=20documentation=20into=20German.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- selfhosting_de.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 selfhosting_de.md diff --git a/selfhosting_de.md b/selfhosting_de.md new file mode 100644 index 00000000..1574ed3a --- /dev/null +++ b/selfhosting_de.md @@ -0,0 +1,30 @@ +Self-Hosting +============ + +Self-Hosting ist das Hosten von Daten oder Software auf eigener IT-Infrastruktur. +Ihren eigenen Server zu Hause zu haben und zu verwalten, um Ihre persönlichen Daten und Dienste selbst zu hosten, anstatt sich ausschließlich auf Dritte zu verlassen. Beispielsweise können Sie Ihren Blog selbst hosten, sodass er auf einem Computer "lebt", über den Sie die Kontrolle haben, anstatt ihn im Austausch gegen Geld, Werbung oder private Daten auf dem Computer eines anderen Benutzers (a.k.a. The Cloud) zu haben. + +Self-Hosting bedeutet, einen Server zu besitzen. Ein Server ist ein Computer, auf den in der Regel rund um die Uhr im Netzwerk zugegriffen werden kann und der normalerweise keinen Bildschirm oder keine Tastatur hat (stattdessen wird er ferngesteuert). Entgegen der landläufigen Meinung ist ein Server nicht unbedingt ein riesiger und besonders leistungsfähiger Computer: Heutzutage ist ein kleines Board (Einplatinencomputer) mit ~ 40 € für das Self-Hosting ausreichend. + +Beim Self-Hosting geht es nicht darum, "Ihr Internet" sicherer zu machen, und es bietet auch keine Anonymität an sich. Stattdessen geht es darum, autonom zu sein und Ihre Dienste und Daten zu kontrollieren - was auch bedeutet, dafür verantwortlich zu sein. + +Warum sollten Sie selbst hosten? +------------------------------ + +- **Sie glauben an ein freies, offenes und dezentrales Internet.** In einem zentralisierten Internet können private Unternehmen und Behörden Personen ausspähen, analysieren und beeinflussen, indem sie diktieren, wie Sie sich miteinander verbinden, und indem sie Inhalte filtern. Yunohost wird von einer Community entwickelt, die an ein offenes und dezentrales Internet glaubt, und wir hoffen, dass Sie dies auch tun! + +- **Sie möchten die Kontrolle über Ihre Daten und Dienste haben.** Ihre Bilder, Chatnachrichten, der Browserverlauf und der Text, den Sie für die Schule schreiben, haben auf dem Server eines anderen Benutzers (a.k.a. The Cloud) nichts zu suchen. Sie sind Teil Ihres Privatlebens, aber auch Teil des Lebens Ihrer Familie, Ihres Partners und so weiter. Diese Daten sollten von * Ihnen * verwaltet werden, nicht von einem zufälligen Unternehmen in den USA, dass Ihre Daten analysieren und die Ergebnisse verkaufen möchte. + +- **Sie möchten lernen, wie Computer und das Internet funktionieren.** Der Betrieb eines eigenen Servers ist ein guter Kontext, um die grundlegenden Mechanismen von Betriebssystemen und dem Internet zu verstehen. Möglicherweise müssen Sie sich mit der Befehlszeilenschnittstelle, der Netzwerkarchitektur, der DNS-Konfiguration und mit SSH usw. befassen. + +- **Sie möchten neue Möglichkeiten erkunden und Dinge anpassen.** Haben Sie jemals davon geträumt, einen Minecraft-Server für Ihre Freunde oder einen dauerhaften IRC- oder XMPP-Client zu betreiben? Mit Ihrem eigenen Server können Sie praktisch jedes gewünschte Programm manuell installieren, ausführen und jedes Bit anpassen. + +Warum Sie vllt. *nicht* selbst hosten sollten? +------------------------------------ + +- **Self-Hosting erfordert etwas Arbeit und Geduld.** Selbst einen Server zu betreiben, ist ein bisschen wie das anlegen eines eigenen Gartens oder der anbau von Gemüse: Es erfordert Arbeit und Geduld. Während YunoHost versucht, die harte Arbeit für Sie zu erledigen, müssen Sie sich für das Self-Hosting noch einige Zeit nehmen, um einige Dinge zu lernen und zu konfigurieren, um Ihren Server richtig einzurichten. Sie müssen auch von Zeit zu Zeit Wartungsaufgaben (wie z. B. Upgrades) ausführen oder um Support-Unterstützung bitten, wenn Probleme auftreten. + +- **Mit den eigenen tollen Servern geht eine große Verantwortung einher.** Der Betrieb eines Servers bedeutet, dass Sie für die von Ihnen gehosteten Daten verantwortlich sind. Niemand kann sie für Sie wiederherstellen, wenn sie verloren gehen. YunoHost bietet Sicherungsfunktionen, die Sie regelmäßig verwenden sollten, um die gewünschten Konfigurationen und Daten zu sichern. Sie sollten auch die Sicherheitsnachrichten und -empfehlungen im Auge behalten, damit Ihr Server oder Ihre kritischen Daten nicht gefährdet werden. + +- **Qualität und Leistung sind wahrscheinlich nicht so gut wie Premium-Services.** YunoHost (und die meisten dafür bereitgestellten Anwendungen) sind kostenlose und Open-Source-Software, die in den jeweiligen Communitys von Menschen in ihrer Freizeit und auf der Grundlage bester Bemühungen entwickelt werden. Es gibt keine absolute Garantie dafür, dass Software unter allen möglichen Umständen funktioniert. Die Leistung Ihres selbst gehosteten Servers hängt auch von dessen CPU und RAM sowie der verfügbaren Internetverbindung ab. + From 127b97b98ad79a7d4d8088f88a231fd786743d92 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Mon, 16 Mar 2020 23:38:05 +0100 Subject: [PATCH 322/360] Update install_on_raspberry_it.md --- install_on_raspberry_it.md | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/install_on_raspberry_it.md b/install_on_raspberry_it.md index b25eaf7a..b2f88cb0 100644 --- a/install_on_raspberry_it.md +++ b/install_on_raspberry_it.md @@ -1,13 +1,3 @@ # Installa YunoHost su Raspberry Pi *Consulta la guida completa in inglese [qui](https://yunohost.org/#/install_on_raspberry_en)* - -Questa pagina non è ancora stata creata, puoi modificarla premendo ```<ESC>``` sulla tua tastiera o cliccando il pulsante "Modifica" in basso a destra del tuo schermo. Potrai vedere l'anteprima delle tue modifiche premendo ancora ```<ESC>``` o cliccando il pulsante "Anteprima". - -** Nota: ** Devi fornire un indirizzo email per confermare le tue modifiche. - -###Sintassi - -Questa pagina usa la sintassi markdown, per favore fai riferimento alla documentazione per ulteriori informazioni: - -http://daringfireball.net/projects/markdown/syntax From 5f42c427943accf9d836932d43811ceffb021eb2 Mon Sep 17 00:00:00 2001 From: YunoHost Bot <yunohost-bot@users.noreply.github.com> Date: Mon, 16 Mar 2020 23:39:26 +0100 Subject: [PATCH 323/360] =?UTF-8?q?[Anonymous=20contrib]=20Cest=20un=20sup?= =?UTF-8?q?er=20tuto.=20Bravo=20et=20merci.=20On=20pallie=20quelque-chose.?= =?UTF-8?q?..et=20non=20:=20pallie=20=C3=A0=20quelque-chose....=20(#1202)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Cest un super tuto. Bravo et merci. On pallie quelque-chose...et non : pallie à quelque-chose.... * Fix simone mess Co-authored-by: Yunobot <simone@yunohost.org> Co-authored-by: Alexandre Aubin <alex.aubin@mailoo.org> --- backup_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backup_fr.md b/backup_fr.md index 116d6a43..00cbe694 100644 --- a/backup_fr.md +++ b/backup_fr.md @@ -1,7 +1,7 @@ Sauvegarder son serveur et ses apps =================================== -Dans le contexte de l'auto-hébergement, les sauvegardes (backup) sont un élément important pour palier à des événements inattendus (incendies, corruption de base de données, perte d'accès au serveur, serveur compromis, ...). La politique de sauvegardes à mettre en place dépend de l'importance des services et des données que vous gérez. Par exemple, sauvegarder un serveur de test aura peu d'intérêt, tandis que vous voudrez être très prudent si vous gérez des données critiques pour une association ou une entreprise - et dans ce genre de cas, vous souhaiterez stocker les sauvegardes *dans un endroit différent*. +Dans le contexte de l'auto-hébergement, les sauvegardes (backup) sont un élément important pour palier les événements inattendus (incendies, corruption de base de données, perte d'accès au serveur, serveur compromis, ...). La politique de sauvegardes à mettre en place dépend de l'importance des services et des données que vous gérez. Par exemple, sauvegarder un serveur de test aura peu d'intérêt, tandis que vous voudrez être très prudent si vous gérez des données critiques pour une association ou une entreprise - et dans ce genre de cas, vous souhaiterez stocker les sauvegardes *dans un endroit différent*. Les sauvegardes avec YunoHost ----------------------------- From 8d8692bea062301ac6036121b6da58ce85c82f56 Mon Sep 17 00:00:00 2001 From: YunoHost Bot <yunohost-bot@users.noreply.github.com> Date: Mon, 16 Mar 2020 23:40:25 +0100 Subject: [PATCH 324/360] =?UTF-8?q?#=C3=9Cbersetzung=20der=20Administrator?= =?UTF-8?q?=20-=20Dokumentation=20ins=20Deutsche.=20-=20#Translation=20of?= =?UTF-8?q?=20the=20Administrator=20documentation=20into=20German.=20(#120?= =?UTF-8?q?3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Yunobot <simone@yunohost.org> --- whatsyunohost_de.md | 57 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 whatsyunohost_de.md diff --git a/whatsyunohost_de.md b/whatsyunohost_de.md new file mode 100644 index 00000000..74f436f3 --- /dev/null +++ b/whatsyunohost_de.md @@ -0,0 +1,57 @@ +Was ist YunoHost? +================= + +<img src="/images/YunoHost_logo_vertical.png" width=400> + +YunoHost ist ein **Betriebssystem**, das auf die einfachste Verwaltung eines **Servers** abzielt und daher das [Self-Hosting](Selfhosting) demokratisiert, wobei sichergestellt wird, dass es zuverlässig, sicher, ethisch einwandfrei und leichtgewichtig bleibt. Es ist ein Copylefted-Libre-Softwareprojekt, das ausschließlich von Freiwilligen betrieben wird. Technisch gesehen kann es als eine Distribution angesehen werden, die auf [Debian GNU / Linux](https://debian.org) basiert und auf [vielen Arten von Hardware](install) installiert werden kann. + +Features +-------- + +- <img src="/images/icon-debian.png" width=32 style="margin-right:5px"> Basierend auf Debian ; +- <img src="/images/icon-tools.png" width=32 style="margin-right:5px" width=64> Verwalten Sie Ihren Server über eine **benutzerfreundliche Weboberfläche** ; +- <img src="/images/icon-package.png" width=32 style="margin-right:5px"> Bereitstellen von **Apps mit nur wenigen Klicks** ; +- <img src="/images/icon-users.png" width=32 style="margin-right:5px"> Verwalten Sie **Benutzer** <small>(basierend auf LDAP)</small> ; +- <img src="/images/icon-globe.png" width=32 style="margin-right:5px"> Verwalten Sie Ihre **Domainnamen** ; +- <img src="/images/icon-medic.png" width=32 style="margin-right:5px"> Erstellen und Wiederherstellen von **Backups** ; +- <img src="/images/icon-door.png" width=32 style="margin-right:5px"> Stellen Sie über das **Benutzerportal** <small>(NGINX, SSOwat)</small> gleichzeitig eine Verbindung zu allen Apps her ; +- <img src="/images/icon-mail.png" width=32 style="margin-right:5px"> Enthält einen **vollständigen E-Mail-Stack** <small>(Postfix, Dovecot, Rspamd, DKIM)</small> ; +- <img src="/images/icon-messaging.png" width=32 style="margin-right:5px"> … sowie **einen Instant Messaging Server** <small>(XMPP)</small> ; +- <img src="/images/icon-lock.png" width=32 style="margin-right:5px"> Verwaltet **SSL-Zertifikate** <small>(basierend auf Let's Encrypt)</small> ; +- <img src="/images/icon-shield.png" width=32 style="margin-right:5px"> … und **Sicherheitssysteme** <small>(fail2ban, yunohost-firewall)</small> ; + +Ursprung +------ + +YunoHost wurde im Februar 2012 aus folgender Situation heraus erstellt: + + <blockquote><p>"Scheiße, ich bin zu faul, um meinen Mailserver neu zu konfigurieren ... Beudbeud, wie hast Du deinen kleinen Server mit LDAP zum Laufen gebracht?"</p><small> Kload, Februar 2012</small></blockquote> + +Alles, was benötigt wurde, war eine Administrationsoberfläche für Beudbeud's Server, um etwas nutzbar zu machen, also entschied sich Kload, eine zu entwickeln. Schließlich wurde YunoHost v1, nach der Automatisierung mehrerer Konfigurationen und der Paketierung in einigen Webanwendungen, fertiggestellt. + +Angesichts der wachsenden Begeisterung für YunoHost und für das Selbst-Hosting im Allgemeinen beschlossen die ursprünglichen Entwickler zusammen mit neuen Mitarbeitern, mit der Arbeit an Version 2 zu beginnen, einer erweiterbaren, leistungsfähigeren, benutzerfreundlicheren und damit einfacheren Version eine schöne Tasse Fairtrade-Kaffee für die Elfen von Lappland. + +Der Name **YunoHost** stammt aus dem Jargon "Y U NO Host". Das [Internet meme](https://en.wikipedia.org/wiki/Internet_meme) sollte dies veranschaulichen: +<div class="text-center"><img style="border-radius: 5px; box-shadow: 0 5px 15px rgba(0,0,0,0.15);" src="/images/dude_yunohost.jpg"></div> + +Was YunoHost nicht ist? +--------------------- + +Selbst wenn YunoHost mehrere Domains und mehrere Benutzer verwalten kann, ist es **nicht als ein mutualisiertes System gedacht**. + +Erstens ist die Software noch sehr jung, nicht auf ihre Skalierbarkeit getestet und daher wahrscheinlich nicht gut genug optimiert für Hunderte von Benutzern gleichzeitig. Vor diesem Hintergrund möchten wir die Software nicht in diese Richtung lenken. Die Virtualisierung demokratisiert sich und ihre Verwendung wird empfohlen, da sie eine wasserdichtere Methode zur Erzielung von Gegenseitigkeit darstellt als ein "Full-Stack"-System wie YunoHost. + +Sie können Ihre Freunde, Ihre Familie und Ihr Unternehmen sicher und problemlos aufnehmen, aber Sie müssen **Ihren Benutzern vertrauen**, und diese müssen vor allem Ihnen vertrauen. Wenn Sie ohnehin YunoHost-Dienste für unbekannte Personen bereitstellen möchten, ist ein vollständiger VPS pro Benutzer in Ordnung, und wir glauben, dass dies ein besserer Weg ist. + +Artworks +--------- + +Schwarz und Weiss YunoHost PNG logo by ToZz (400 × 400 px): + +<a href="/images/ynh_logo_black_300dpi.png"><img src="/images/ynh_logo_black_300dpi.png" width=220></a> + +<a href="/images/ynh_logo_white_300dpi.png"><img src="/images/ynh_logo_white_300dpi.png" width=220></a> + +Zum download Klicken. + +Licence: CC-BY-SA 4.0 From 2c63a782045222969e0958030629c0b5f376425c Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Mon, 16 Mar 2020 22:42:44 +0000 Subject: [PATCH 325/360] Jai le meme probleme que https://zythom.fr/2020/02/dialogue-avec-le-support-free/ Cest penible... --- isp_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isp_fr.md b/isp_fr.md index 53d0930f..1e8a3900 100644 --- a/isp_fr.md +++ b/isp_fr.md @@ -18,7 +18,7 @@ Tous les fournisseurs d’accès à Internet [membres de la Fédération French | **[UPnP](https://fr.wikipedia.org/wiki/Universal_Plug_and_Play)** | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | **[Port 25 ouvrable](email_fr)**<br> (fermé par défaut) | ✔ | ✔ | ✔ | ✘ | ✔ | ✔ | | **[Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning)** | ✔ | ✔ | ✔/✘ | ✔ (depuis la Livebox 4) | ✔ | ✔ | -| **[Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup)<br>personnalisable ** | ✔ | ✔ (sauf IPv6) | … | ✘ | ✘ | ✘ | +| **[Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup)<br>personnalisable ** | ✔ | ✔ (sauf IPv6) pas de support | … | ✘ | ✘ | ✘ | | **[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)** | … | ✘ | … | … | … | … | From 9c4a7026b89f4a4a78b806c8f8fa0c272d412662 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Tue, 17 Mar 2020 12:49:54 +0000 Subject: [PATCH 326/360] add a mindmapping software --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index ad106cd0..84ef23d2 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -149,3 +149,4 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Zoneminder](https://github.com/ZoneMinder/zoneminder) - [Zulip](https://zulipchat.com/) / [github](https://github.com/zulip/zulip) - [Yggdrasil](https://yggdrasil-network.github.io/) / [github](https://github.com/yggdrasil-network/yggdrasil-go) +- [WiseMapping](http://www.wisemapping.com/inyourserver.html) / [developpement](https://bitbucket.org/wisemapping/wisemapping-open-source) \ No newline at end of file From 4bac16827a4eb76239335aafab977b78afc8d749 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Thu, 19 Mar 2020 12:31:27 +0000 Subject: [PATCH 327/360] added omeka s --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index ad106cd0..82e3812a 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -92,6 +92,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Nibbleblog](http://www.nibbleblog.com)/ [github](https://github.com/dignajar/nibbleblog) - [Nuage](https://nuage.kerjean.me/login) / [github](https://github.com/mickael-kerjean/filestash) - [Ombi](https://github.com/tidusjar/Ombi) +- [Omeka S](https://github.com/omeka/omeka-s) - [OpenBazaar](https://openbazaar.org) / [github](https://github.com/openbazaar) - [OpenCart](https://www.opencart.com) / [github](https://github.com/opencart/opencart) - [openHAB](https://www.openhab.org/) - Smart home platform. / [github](https://github.com/openhab) From dcdf9522e64f93e5f312bea187e530d7beb1971f Mon Sep 17 00:00:00 2001 From: Kayou <pierre.moltess@gmail.com> Date: Mon, 23 Mar 2020 00:53:37 +0100 Subject: [PATCH 328/360] https://github.com/YunoHost/yunohost/pull/894 --- groups_and_permissions.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/groups_and_permissions.md b/groups_and_permissions.md index 4b28d3ee..7d8070b0 100644 --- a/groups_and_permissions.md +++ b/groups_and_permissions.md @@ -134,7 +134,7 @@ Installing an app creates the permission `app.main` with `all_users` allowed by If you wish to make the application publicly available, instead of the old `unprotected_urls` mechanism, you should give access to the special groups `visitors`: ```bash -ynh_permission_update --permission "main" --add "visitors" +ynh_permission_update --permission "main" --add "all_users" "visitors" ``` If you wish to create a custom permission for your app (e.g. to restrict access to an admin interface) you may use the following helpers: @@ -181,7 +181,7 @@ But you can create a fake permission and use hooks to handle if there is a chang In the install script, create the fake permission (with no url): -`ynh_permission_create --permission="create poll" --allowed="visitors"` +`ynh_permission_create --permission="create poll" --allowed "visitors" "all_users"` Then use the legacy protection: @@ -278,4 +278,4 @@ Don't forget to replace `__APP__` during the install/upgrade script. Here some apps that use this specific case: [Lutim](https://github.com/YunoHost-Apps/lutim_ynh/pull/44/files) and [Opensondage](https://github.com/YunoHost-Apps/opensondage_ynh/pull/59/files) -If you have any questions, please contact someone from the apps-group. \ No newline at end of file +If you have any questions, please contact someone from the apps-group. From ffd82d1c8f91109f64141978b21f4ff6c442eda8 Mon Sep 17 00:00:00 2001 From: Kayou <pierre.moltess@gmail.com> Date: Thu, 26 Mar 2020 21:32:50 +0100 Subject: [PATCH 329/360] Update groups_and_permissions.md --- groups_and_permissions.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/groups_and_permissions.md b/groups_and_permissions.md index 4b28d3ee..d08c3231 100644 --- a/groups_and_permissions.md +++ b/groups_and_permissions.md @@ -159,6 +159,7 @@ When migrating away from the legacy permission, you should: - remove any management of `$is_public`-like or `$admin_user`-like setting, except for any manifest question meant to either *initialize* the app as public/private or specific permissions ; - remove any management of `skipped_`, `unprotected_` and `protected_uris` (and `_regex`) settings that are now considered obsolete and deprecated. (N.B.: you should **explicitly delete them in the upgrade script**). Instead, you should now rely on the new `ynh_permission_*` helpers instead. If you do feel like you still need to use them, please contact the core team to provide your feedback and we'll figure out something ; For example, in the upgrade script if you used the `protected_uris` key before, you may use this code in the `DOWNWARD COMPATIBILITY` section: + ```bash protected_uris=$(ynh_app_setting_get --app=$app --key=protected_uris) @@ -278,4 +279,4 @@ Don't forget to replace `__APP__` during the install/upgrade script. Here some apps that use this specific case: [Lutim](https://github.com/YunoHost-Apps/lutim_ynh/pull/44/files) and [Opensondage](https://github.com/YunoHost-Apps/opensondage_ynh/pull/59/files) -If you have any questions, please contact someone from the apps-group. \ No newline at end of file +If you have any questions, please contact someone from the apps-group. From bbbe87418eee988855fa4ee14bc5943d27565030 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Fri, 27 Mar 2020 02:36:14 +0100 Subject: [PATCH 330/360] Update groups_and_permissions.md --- groups_and_permissions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/groups_and_permissions.md b/groups_and_permissions.md index fbeed2ef..b24c1f09 100644 --- a/groups_and_permissions.md +++ b/groups_and_permissions.md @@ -134,7 +134,7 @@ Installing an app creates the permission `app.main` with `all_users` allowed by If you wish to make the application publicly available, instead of the old `unprotected_urls` mechanism, you should give access to the special groups `visitors`: ```bash -ynh_permission_update --permission "main" --add "all_users" "visitors" +ynh_permission_update --permission "main" --add visitors ``` If you wish to create a custom permission for your app (e.g. to restrict access to an admin interface) you may use the following helpers: From b400ba3bbe87198a5759d1e79c0e6b9f2b04181f Mon Sep 17 00:00:00 2001 From: Aeris One <aeris@e.email> Date: Fri, 27 Mar 2020 22:48:51 +0100 Subject: [PATCH 331/360] Remove old application lists --- packaging_apps_guidelines.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging_apps_guidelines.md b/packaging_apps_guidelines.md index b9607d37..0c606a94 100644 --- a/packaging_apps_guidelines.md +++ b/packaging_apps_guidelines.md @@ -113,7 +113,7 @@ These deposits have several functions: * indicate the state of operation of the packet; * indicate information about the support of a package. -For the `official.json` and` community.json` lists maintained by the project team, registration is on [the git apps repository](https://github.com/YunoHost/apps). Other non-official lists may exists (including those for non-free apps for example), see more about that in the [community forum](https//forum.yunohost.org). +For the `apps.json` list maintained by the project team, registration is on [the git apps repository](https://github.com/YunoHost/apps). Other non-official lists may exists (including those for non-free apps for example), see more about that in the [community forum](https//forum.yunohost.org). #### YEP 1.3 ##### Indicate the license associated with the package | draft | AUTO | WORKING | From 343dcaf505c82d47b6b1350f1cb895e89f3ec59e Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alexandre.aubin@cern.ch> Date: Sat, 28 Mar 2020 01:55:03 +0100 Subject: [PATCH 332/360] Now permissions are managed from the webadmin as well --- groups_and_permissions.md | 5 ++++- images/button_to_go_to_permission_interface.png | Bin 0 -> 18969 bytes 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 images/button_to_go_to_permission_interface.png diff --git a/groups_and_permissions.md b/groups_and_permissions.md index b24c1f09..752b2698 100644 --- a/groups_and_permissions.md +++ b/groups_and_permissions.md @@ -1,7 +1,10 @@ User groups and permissions =========================== -Warning : for now, these features are only available through the command line (c.f. `yunohost user group --help` and `yunohost user permission --help`) +You can access the group and permissions management interface from the webadmin +by going into the 'Users' section and clicking the corresponding button: + + Managing groups --------------- diff --git a/images/button_to_go_to_permission_interface.png b/images/button_to_go_to_permission_interface.png new file mode 100644 index 0000000000000000000000000000000000000000..65b998d9ca7cabd718b1dc18e20674a9647cbefd GIT binary patch literal 18969 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%0A@HO`Vt}iM!t_ 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 SA2p2t0000<MNUMnLSTY~Z?`f4 literal 0 HcmV?d00001 From 07ba4249e27ef9293a67d558ba840fefa240b1cc Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alexandre.aubin@cern.ch> Date: Sat, 28 Mar 2020 01:55:19 +0100 Subject: [PATCH 333/360] Update small section to point to new group and permission page --- users_fr.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/users_fr.md b/users_fr.md index 931551a4..dbb273f6 100644 --- a/users_fr.md +++ b/users_fr.md @@ -25,10 +25,11 @@ Dans le portail, les utilisateurs peuvent également cliquer sur l'avatar en hau Vous devez être conscient que le SSO ne peut être atteint que par le nom de domaine (c.-à-d. `https://the.domain.tld/yunohost/sso`), et non pas en utilisant l'IP du serveur (c.-à-d. `https://11.22.33.44/yunohost/sso`), contrairement à l'administrateur web ! C'est un peu déroutant dans certaines situations, mais c'est nécessaire pour des raisons techniques. Si vous êtes dans une situation où vous avez besoin d'accéder au SSO sans avoir votre DNS correctement configuré pour une raison quelconque, vous pouvez envisager de modifier votre `/etc/hosts` comme décrit dans [cette page](dns_local_nework). </div> -Permissions d'accès aux applications ---------------- +Gestion des groupes d'utilisateurs et permissions +--------------------------- + +Voir [cette page de documentation dédiée](groups_and_permissions). -L'accès aux applications peut être limité à certains utilisateurs seulement. Ceci peut être configuré via la webadmin dans Applications > (une application) > Accès, ou de la même manière via la ligne de commande `yunohost app addaccess`, `removeaccess` et `clearaccess`. Accès SSH ---------- From 0d5165a604e364f119896d577a2411115105c98f Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Sat, 28 Mar 2020 06:52:25 +0100 Subject: [PATCH 334/360] Many typo or broken links / outdated info --- app_piwigo_fr.md | 4 ++-- chat_rooms.md | 2 +- chat_rooms_fr.md | 2 +- faq.md | 2 +- faq_de.md | 2 +- faq_fr.md | 2 +- troubleshooting_guide.md | 7 +++---- troubleshooting_guide_fr.md | 8 +++----- users.md | 2 +- users_fr.md | 2 +- whatsyunohost_de.md | 2 +- 11 files changed, 16 insertions(+), 19 deletions(-) diff --git a/app_piwigo_fr.md b/app_piwigo_fr.md index ada13e24..1c5b704a 100644 --- a/app_piwigo_fr.md +++ b/app_piwigo_fr.md @@ -13,8 +13,8 @@ Les extensions rendent Piwigo facilement personnalisable. Cerise sur le gâteau, ## Fonctionnalités -En plus des [fonctionnalités principales](Piwigo) de Piwigo, ce paquet propose également: - +En plus des [fonctionnalités principales](http://piwigo.org/basics/features) de Piwigo, ce paquet propose également: + * une intégration avec le système de gestion des utilisateurs et le SSO de Yunohost : * installation privée : limitée aux utilisateurs de YunoHost * installation publique : diff --git a/chat_rooms.md b/chat_rooms.md index f4844f5c..19c1ab2b 100644 --- a/chat_rooms.md +++ b/chat_rooms.md @@ -10,7 +10,7 @@ You could join those chat rooms using : #### Help and support chatroom -There is a [support](support_fr) chatroom for YunoHost users mutual support and help. +There is a [support](help_fr) chatroom for YunoHost users mutual support and help. - IRC: **#yunohost** on irc.freenode.net ; - Matrix: **#freenode_#yunohost:matrix.org** ; diff --git a/chat_rooms_fr.md b/chat_rooms_fr.md index 249d49f1..30dde1aa 100644 --- a/chat_rooms_fr.md +++ b/chat_rooms_fr.md @@ -9,7 +9,7 @@ Vous pouvez rejoindre ces salons avec: #### Salon d'entraide et de support -Le salon d’[entraide](support_fr) est là pour permettre aux utilisateurs de YunoHost de s'aider mutuellement. +Le salon d’[entraide](help_fr) est là pour permettre aux utilisateurs de YunoHost de s'aider mutuellement. - IRC : **#yunohost** sur irc.freenode.net (voir kiwiirc ci-dessus) - Matrix : **#freenode_#yunohost:matrix.org** - XMPP : **[support@conference.yunohost.org](xmpp:support@conference.yunohost.org?join)** diff --git a/faq.md b/faq.md index 6b83f90b..06a77692 100644 --- a/faq.md +++ b/faq.md @@ -95,7 +95,7 @@ and having some free time. Other than that, just doing what you can is already a #### What's YunoHost's political model? -It is described in [this document](yunohost_project_organization.md) :). +It is described in [this document](project_organization) :). #### Will you port YunoHost to [insert favorite distro]? diff --git a/faq_de.md b/faq_de.md index 5a1928e1..2f131cd5 100644 --- a/faq_de.md +++ b/faq_de.md @@ -72,7 +72,7 @@ Es ist ein weit verbreitetes Missverständnis, dass Neulinge bei offenen Softwar #### Was sind YunoHost organisatorische Grundsätze ? -Das beschreiben wir in [diesem Dokument](yunohost_project_organization) :). +Das beschreiben wir in [diesem Dokument](project_organization) :). #### Werdet ihr YunoHosts für [Lieblingsdistribution hier einfügen] portieren ? diff --git a/faq_fr.md b/faq_fr.md index 22b4d10c..cac06172 100644 --- a/faq_fr.md +++ b/faq_fr.md @@ -88,7 +88,7 @@ pouvez, c’est déjà trop cool ! #### Quel est le modèle politique de YunoHost ? -Il est décrit dans [ce document](yunohost_project_organization) :). +Il est décrit dans [ce document](project_organization) :). diff --git a/troubleshooting_guide.md b/troubleshooting_guide.md index 50683619..7bb35784 100644 --- a/troubleshooting_guide.md +++ b/troubleshooting_guide.md @@ -9,10 +9,9 @@ This means that everytime you want to try a new thing (non-official app, new spe Also: https://wiki.debian.org/DontBreakDebian -### Use non-official apps with caution -While it's tempting to install every [non-official apps](https://yunohost.org/#/apps_in_progress_en) please don't. Even if the app is marked as ready. Before testing an app you should read at least part of the package source code. Install, remove and upgrade script should be present. -Keep in mind that when you install an app, you execute code on your server with root privileges. -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. +### Do not install bad quality apps + +Even if it can be tempting to install every [apps](https://yunohost.org/#/apps), be careful to their quality level as a bad quality app can ultimately break your server. If you absolutely wish to install such an app, at least try to do it on a test server or check if issues has been posted to this app's Github repository or on the [forum](http://forum.yunohost.org/). ### Check the official documentation Answer to your question may be already in [the documentation](https://yunohost.org/#/docs_en). diff --git a/troubleshooting_guide_fr.md b/troubleshooting_guide_fr.md index 2f107da0..6a0f1e12 100644 --- a/troubleshooting_guide_fr.md +++ b/troubleshooting_guide_fr.md @@ -9,11 +9,9 @@ La meilleure manière de ne pas avoir de pannes est de ne pas bricoler sur votre Vous pouvez aussi lire ceci si vous avez encore envie de bricoler sur votre instance YunoHost en production : https://wiki.debian.org/DontBreakDebian -### Utilisez les applications non-officielles avec attention -Bien que ce soit tentant d’installer toutes les [applications non officielles](https://yunohost.org/#/apps_in_progress_fr), s’il vous plaît ne le faites pas, même si l’application est indiquée comme prête. -Avant de tester, vous devriez lire au moins le code source de l’application et vérifier que les fichiers d’installation, de suppression et de mise à jour sont bien présents. -Garder à l’esprit que quand vous installez une application, vous exécutez du code avec des droits root. De mon expérience, certaines applications sont excellentes, d’autres peuvent casser votre instance YunoHost et certaines ne sont plus maintenues. Alors, avant d’installer, regardez les problèmes rencontrés (issues dans GitHub), le [Forum](http://forum.yunohost.org/) -et [le salon de discussion Yunohost](support_fr) pour voir si d’autres ont eu des problèmes avec l’application. +### N'installez pas d'applications de mauvaise qualité + +Bien que ce soit tentant d’installer toutes les [applications](https://yunohost.org/#/apps), faites attention à leur niveau de qualité car une mauvaise application peut casser votre serveur. Si la qualité d'une application laisse à désirez mais que vous souhaitez tout de même absolument l'installer, essayez de faire ça sur un serveur de test, ou vérifiez au minimum si des problèmes ont été remontés sur le dépôt Github associé ou bien sur le [forum](http://forum.yunohost.org/). ### Vérifier la documentation officielle Les réponses à vos questions existent peut être déjà dans [la documentation](docs_fr). diff --git a/users.md b/users.md index cccdaf76..a570d767 100644 --- a/users.md +++ b/users.md @@ -22,7 +22,7 @@ The user portal, also called the SSO for 'Single Sign On' allows user to browse In the portal, users can also click on the avatar in the top-left to configure some other settings such as their identify, mail aliases, automatic mail forwards, or change their password. <div class="alert alert-info" markdown="1"> -You should be aware that the SSO can only be reached through the actual domain name (i.e. `https://the.domain.tld/yunohost/sso`), and NOT by just using the IP of the server (i.e. `https://11.22.33.44/yunohost/sso`), contrarily to the webadmin ! This is a bit confusing but is necessary for technical reason. If you are in a situation where you need to access the SSO without having your DNS properly configured for some reason, you might consider tweaking your `/etc/hosts` as described in [this page](dns_local_nework). +You should be aware that the SSO can only be reached through the actual domain name (i.e. `https://the.domain.tld/yunohost/sso`), and NOT by just using the IP of the server (i.e. `https://11.22.33.44/yunohost/sso`), contrarily to the webadmin ! This is a bit confusing but is necessary for technical reason. If you are in a situation where you need to access the SSO without having your DNS properly configured for some reason, you might consider tweaking your `/etc/hosts` as described in [this page](dns_local_network). </div> User groups and permissions diff --git a/users_fr.md b/users_fr.md index dbb273f6..c52522dc 100644 --- a/users_fr.md +++ b/users_fr.md @@ -22,7 +22,7 @@ Le portail utilisateur, également appelé SSO pour 'Single Sign On', permet à Dans le portail, les utilisateurs peuvent également cliquer sur l'avatar en haut à gauche pour configurer d'autres paramètres tels que leur identité, les alias de messagerie, les transferts automatiques de courrier ou changer leur mot de passe. <div class="alert alert-info" markdown="1"> -Vous devez être conscient que le SSO ne peut être atteint que par le nom de domaine (c.-à-d. `https://the.domain.tld/yunohost/sso`), et non pas en utilisant l'IP du serveur (c.-à-d. `https://11.22.33.44/yunohost/sso`), contrairement à l'administrateur web ! C'est un peu déroutant dans certaines situations, mais c'est nécessaire pour des raisons techniques. Si vous êtes dans une situation où vous avez besoin d'accéder au SSO sans avoir votre DNS correctement configuré pour une raison quelconque, vous pouvez envisager de modifier votre `/etc/hosts` comme décrit dans [cette page](dns_local_nework). +Vous devez être conscient que le SSO ne peut être atteint que par le nom de domaine (c.-à-d. `https://the.domain.tld/yunohost/sso`), et non pas en utilisant l'IP du serveur (c.-à-d. `https://11.22.33.44/yunohost/sso`), contrairement à l'administrateur web ! C'est un peu déroutant dans certaines situations, mais c'est nécessaire pour des raisons techniques. Si vous êtes dans une situation où vous avez besoin d'accéder au SSO sans avoir votre DNS correctement configuré pour une raison quelconque, vous pouvez envisager de modifier votre `/etc/hosts` comme décrit dans [cette page](dns_local_network). </div> Gestion des groupes d'utilisateurs et permissions diff --git a/whatsyunohost_de.md b/whatsyunohost_de.md index 74f436f3..226b6a0f 100644 --- a/whatsyunohost_de.md +++ b/whatsyunohost_de.md @@ -3,7 +3,7 @@ Was ist YunoHost? <img src="/images/YunoHost_logo_vertical.png" width=400> -YunoHost ist ein **Betriebssystem**, das auf die einfachste Verwaltung eines **Servers** abzielt und daher das [Self-Hosting](Selfhosting) demokratisiert, wobei sichergestellt wird, dass es zuverlässig, sicher, ethisch einwandfrei und leichtgewichtig bleibt. Es ist ein Copylefted-Libre-Softwareprojekt, das ausschließlich von Freiwilligen betrieben wird. Technisch gesehen kann es als eine Distribution angesehen werden, die auf [Debian GNU / Linux](https://debian.org) basiert und auf [vielen Arten von Hardware](install) installiert werden kann. +YunoHost ist ein **Betriebssystem**, das auf die einfachste Verwaltung eines **Servers** abzielt und daher das [Self-Hosting](selfhosting) demokratisiert, wobei sichergestellt wird, dass es zuverlässig, sicher, ethisch einwandfrei und leichtgewichtig bleibt. Es ist ein Copylefted-Libre-Softwareprojekt, das ausschließlich von Freiwilligen betrieben wird. Technisch gesehen kann es als eine Distribution angesehen werden, die auf [Debian GNU / Linux](https://debian.org) basiert und auf [vielen Arten von Hardware](install) installiert werden kann. Features -------- From 7fd17c3eb64c0ce0102b107a6218895ca7486976 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Sat, 28 Mar 2020 06:54:10 +0100 Subject: [PATCH 335/360] Reuniformize links --- OVH_fr.md | 6 +- XMPP.md | 2 +- XMPP_es.md | 2 +- XMPP_fr.md | 2 +- admin_es.md | 2 +- admin_fr.md | 2 +- admindoc_fr.md | 94 +++++++++++------------ app_jappix_fr.md | 2 +- app_nextcloud.md | 2 +- app_nextcloud_fr.md | 10 +-- app_transmission_fr.md | 2 +- apps.md | 2 +- apps_ar.md | 2 +- apps_es.md | 2 +- apps_it.md | 2 +- apps_overview.md | 2 +- apps_overview_fr.md | 2 +- apps_wishlist.md | 2 +- apps_wishlist_fr.md | 2 +- backup_fr.md | 2 +- boot_and_graphical_install_fr.md | 2 +- certificate_custom_fr.md | 4 +- certificate_es.md | 2 +- certificate_fr.md | 2 +- change_admin_password_fr.md | 2 +- chat_rooms.md | 2 +- chat_rooms_fr.md | 2 +- collabora_en.md | 2 +- collabora_fr.md | 2 +- commandline_es.md | 2 +- contribute.md | 2 +- contribute_ar.md | 10 +-- contribute_fr.md | 12 +-- contributordoc.md | 8 +- contributordoc_fr.md | 36 ++++----- diagnostic_fr.md | 6 +- dns.md | 6 +- dns_config_es.md | 2 +- dns_config_fr.md | 2 +- dns_dynamicip.md | 8 +- dns_dynamicip_fr.md | 8 +- dns_es.md | 10 +-- dns_fr.md | 10 +-- docs.md | 8 +- docs_ar.md | 10 +-- docs_de.md | 8 +- docs_fr.md | 14 ++-- docs_it.md | 10 +-- domains_fr.md | 4 +- email_es.md | 10 +-- email_fr.md | 2 +- email_migration.md | 2 +- email_migration_fr.md | 2 +- faq.md | 2 +- faq_de.md | 2 +- faq_fr.md | 2 +- filezilla_fr.md | 2 +- hardware_es.md | 2 +- hardware_fr.md | 2 +- index.md | 2 +- index_ar.md | 10 +-- index_de.md | 4 +- index_es.md | 2 +- index_fr.md | 14 ++-- index_it.md | 4 +- index_oc.md | 26 +++---- install_ar.md | 14 ++-- install_es.md | 16 ++-- install_fr.md | 14 ++-- install_iso_es.md | 12 +-- install_iso_fr.md | 12 +-- install_iso_it.md | 2 +- install_manually_es.md | 2 +- install_on_arm_board.md | 8 +- install_on_arm_board_es.md | 22 +++--- install_on_arm_board_fr.md | 22 +++--- install_on_debian_fr.md | 6 +- install_on_raspberry_es.md | 16 ++-- install_on_raspberry_fr.md | 16 ++-- install_on_raspberry_it.md | 2 +- install_on_virtualbox_es.md | 6 +- install_on_virtualbox_fr.md | 4 +- install_on_vps_es.md | 6 +- install_on_vps_fr.md | 6 +- isp.md | 4 +- isp_box_config.md | 8 +- isp_box_config_es.md | 10 +-- isp_box_config_fr.md | 10 +-- isp_es.md | 14 ++-- isp_fr.md | 14 ++-- isp_free_fr.md | 6 +- isp_orange_fr.md | 2 +- isp_sfr_fr.md | 2 +- packaging_apps.md | 22 +++--- packaging_apps_arguments_management.md | 2 +- packaging_apps_arguments_management_fr.md | 2 +- packaging_apps_fr.md | 24 +++--- packaging_apps_guidelines.md | 6 +- packaging_apps_guidelines_fr.md | 6 +- packaging_apps_hooks_fr.md | 2 +- packaging_apps_manifest.md | 4 +- packaging_apps_manifest_fr.md | 4 +- packaging_apps_multiinstance.md | 6 +- packaging_apps_multiinstance_fr.md | 6 +- packaging_apps_scripts.md | 2 +- packaging_apps_scripts_fr.md | 2 +- packaging_apps_start.md | 4 +- packaging_apps_start_fr.md | 4 +- packaging_apps_virtualbox_fr.md | 6 +- postinstall_es.md | 16 ++-- postinstall_fr.md | 16 ++-- security_fr.md | 6 +- selfhosting_ru.md | 4 +- ssh.md | 2 +- ssh_es.md | 6 +- ssh_fr.md | 4 +- ssh_it.md | 2 +- troubleshooting_guide.md | 14 ++-- troubleshooting_guide_fr.md | 16 ++-- use_case_non-profit_organisations.md | 2 +- use_case_non-profit_organisations_fr.md | 2 +- use_case_non-profit_organisations_oc.md | 2 +- whatsyunohost_ar.md | 6 +- whatsyunohost_fr.md | 2 +- 124 files changed, 444 insertions(+), 444 deletions(-) diff --git a/OVH_fr.md b/OVH_fr.md index 92df9c1f..303626bd 100644 --- a/OVH_fr.md +++ b/OVH_fr.md @@ -10,16 +10,16 @@ Cliquez sur l'onglet **Zone DNS**, puis sur **Ajouter une entrée**: <img src="/images/ovh_dns_zone.png" width=800> -Il suffit maintenant d'ajouter les redirections DNS comme indiqué dans la [configuration DNS standard](/dns_config_fr). +Il suffit maintenant d'ajouter les redirections DNS comme indiqué dans la [configuration DNS standard](/dns_config). ###IP dynamique -[Tutoriel plus général sur l’IP dynamique](dns_dynamicip_fr). +[Tutoriel plus général sur l’IP dynamique](/dns_dynamicip). Cette partie est à suivre, que si votre IP est dynamique. -Pour savoir si votre fournisseur d’accès internet vous fournit une IP dynamique [voir ici](/isp_fr). +Pour savoir si votre fournisseur d’accès internet vous fournit une IP dynamique [voir ici](/isp). Commencez par créer un identifiant DynHost. diff --git a/XMPP.md b/XMPP.md index 2cef78c0..f549d01d 100644 --- a/XMPP.md +++ b/XMPP.md @@ -53,7 +53,7 @@ XMPP chats can be made secure and private using [OMEMO] encryption (https://xmpp To create a chatroom (multi-user chat) on your YunoHost server, use the identifier `chatroomname@muc.yourdomain.tld`. -For this to work you need to [add the corresponding `muc.` DNS record](dns_config_fr) in the DNS configuration. +For this to work you need to [add the corresponding `muc.` DNS record](/dns_config) in the DNS configuration. ## VoIP and videoconferences diff --git a/XMPP_es.md b/XMPP_es.md index 228b941f..76f45f25 100644 --- a/XMPP_es.md +++ b/XMPP_es.md @@ -43,7 +43,7 @@ Es posible cifrar tu conversaciones XMPP con la ayuda de [OMEMO](https://xmpp.or Para crear un salón de discusión (Multi-user chat) en tu servidor Yunohost, utiliza el ID nombredelsalon@muc.dominio.tld (donde dominio.tld es el dominio principal de tu servidor). -Si utilizas un nombre de dominio personal, es necesario [añadir una redirección de tipo CNAME para el subdominio `muc.`](dns_config_es) en tu servidor DNS. +Si utilizas un nombre de dominio personal, es necesario [añadir una redirección de tipo CNAME para el subdominio `muc.`](/dns_config) en tu servidor DNS. ### VoIP y videoconferencias diff --git a/XMPP_fr.md b/XMPP_fr.md index 594f2151..0273219f 100644 --- a/XMPP_fr.md +++ b/XMPP_fr.md @@ -52,7 +52,7 @@ Il est possible de rendre les conversations plus sécurisées et privées en les Pour créer un salon de discussion (Multi-user chat) sur votre serveur Yunohost utilisez l’identifiant nomsalon@muc.domaine.tld (où domaine.tld est le domaine principal de votre serveur). -Si vous utilisez un nom de domaine personnel, il est nécessaire d’[ajouter une redirection de type CNAME pour le sous domaine `muc.`](dns_config_fr) au niveau de votre serveur DNS. +Si vous utilisez un nom de domaine personnel, il est nécessaire d’[ajouter une redirection de type CNAME pour le sous domaine `muc.`](/dns_config) au niveau de votre serveur DNS. ## VoIP et visioconférence diff --git a/admin_es.md b/admin_es.md index dc6bea60..573adb3b 100644 --- a/admin_es.md +++ b/admin_es.md @@ -1,6 +1,6 @@ # La interfaz de administración web -Yunohost tiene una interfaz gráfica de administración. El otro método consiste en utilizar la [linea de comando](/commandline_es). +Yunohost tiene una interfaz gráfica de administración. El otro método consiste en utilizar la [linea de comando](/commandline). ### Acceso diff --git a/admin_fr.md b/admin_fr.md index ec8476e5..5601de0f 100644 --- a/admin_fr.md +++ b/admin_fr.md @@ -1,6 +1,6 @@ # L’interface d’administration web -YunoHost est fourni avec une interface graphique d’administration. L’autre méthode est d’utiliser la [ligne de commande](/commandline_fr). +YunoHost est fourni avec une interface graphique d’administration. L’autre méthode est d’utiliser la [ligne de commande](/commandline). ### Accès diff --git a/admindoc_fr.md b/admindoc_fr.md index 2f186795..d248a210 100644 --- a/admindoc_fr.md +++ b/admindoc_fr.md @@ -1,56 +1,56 @@ # Documentation pour les administrateurs YunoHost * Découvrir l'auto-hébergement - * [Qu'est-ce que l'auto-hébergement](/selfhosting_fr) - * [Qu'est-ce que YunoHost](/whatsyunohost_fr) - * [Essayer YunoHost](/try_fr) - * [Choisir son mode d'hébergement](howtohostyourself_fr) - * [Matériel compatible](/hardware_fr) - * [À propos des fournisseurs d'accès internet](/isp_fr) -* [Guide d’installation](/install_fr) - * [Sur un ordinateur "standard"](/install_iso_fr) - * [Sur un serveur dédié ou virtuel (VPS)](/install_on_vps_fr) - * [Sur un Raspberry Pi](/install_on_raspberry_fr) - * [Sur une carte ARM](/install_on_arm_board_fr) - * [Sur Debian](/install_on_debian_fr) - * [Sur VirtualBox](/install_on_virtualbox_fr) + * [Qu'est-ce que l'auto-hébergement](/selfhosting) + * [Qu'est-ce que YunoHost](/whatsyunohost) + * [Essayer YunoHost](/try) + * [Choisir son mode d'hébergement](/howtohostyourself) + * [Matériel compatible](/hardware) + * [À propos des fournisseurs d'accès internet](/isp) +* [Guide d’installation](/install) + * [Sur un ordinateur "standard"](/install_iso) + * [Sur un serveur dédié ou virtuel (VPS)](/install_on_vps) + * [Sur un Raspberry Pi](/install_on_raspberry) + * [Sur une carte ARM](/install_on_arm_board) + * [Sur Debian](/install_on_debian) + * [Sur VirtualBox](/install_on_virtualbox) * Finaliser son installation - * [Post-installation](/postinstall_fr) - * [Configurer les redirections de port](/isp_box_config_fr) - * [Configurer les enregistrements DNS](/dns_config_fr) - * [Installer un certificat SSL](/certificate_fr) - * [Diagnostic du bon fonctionnement du YunoHost](/diagnostic_fr) + * [Post-installation](/postinstall) + * [Configurer les redirections de port](/isp_box_config) + * [Configurer les enregistrements DNS](/dns_config) + * [Installer un certificat SSL](/certificate) + * [Diagnostic du bon fonctionnement du YunoHost](/diagnostic) * Apprendre à connaitre YunoHost - * [Vue d'ensemble de YunoHost](/overview_fr) - * [Conseil généraux](/guidelines_fr) - * [L'interface d'administration web](/admin_fr) - * [SSH](/ssh_fr) et [l'administration en ligne de commande](/commandline_fr) - * [Les utilisateurs et le SSO](/users_fr) - * [Les applications](/apps_overview_fr) - * [Les domaines, la configuration DNS et les certificats](/domains_fr) - * [Les emails](/email_fr) - * [Formulaires pour enlever son adresse IP des listes noires](/blacklist_forms_fr) - * [XMPP](/XMPP_fr) - * [Les sauvegardes](/backup_fr) - * [Mettre à jour le système](/update_fr) et [les applications](/app_update_fr) - * [La sécurité](/security_fr) + * [Vue d'ensemble de YunoHost](/overview) + * [Conseil généraux](/guidelines) + * [L'interface d'administration web](/admin) + * [SSH](/ssh) et [l'administration en ligne de commande](/commandline) + * [Les utilisateurs et le SSO](/users) + * [Les applications](/apps_overview) + * [Les domaines, la configuration DNS et les certificats](/domains) + * [Les emails](/email) + * [Formulaires pour enlever son adresse IP des listes noires](/blacklist_forms) + * [XMPP](/XMPP) + * [Les sauvegardes](/backup) + * [Mettre à jour le système](/update) et [les applications](/app_update) + * [La sécurité](/security) * Pour aller plus loin * Noms de domaine - * [Nom de domaine en noho.st / nohost.me / ynh.fr](/dns_nohost_me_fr) - * [Configurer un DNS dynamique avec une adresse IP dynamique](/dns_dynamicip_fr) - * [DNS et installation d’une application sur un sous-domaine](/dns_subdomains_fr) - * [Utiliser le résolveur DNS local](/dns_resolver_fr) - * [Gérer les enregistrements DNS chez OVH](/OVH_fr) + * [Nom de domaine en noho.st / nohost.me / ynh.fr](/dns_nohost_me) + * [Configurer un DNS dynamique avec une adresse IP dynamique](/dns_dynamicip) + * [DNS et installation d’une application sur un sous-domaine](/dns_subdomains) + * [Utiliser le résolveur DNS local](/dns_resolver) + * [Gérer les enregistrements DNS chez OVH](/OVH) * Notes à propos de certains fournisseurs d'accès à Internet - * [SFR](/isp_sfr_fr) - * [Orange](/isp_orange_fr) - * [Free](/isp_free_fr) + * [SFR](/isp_sfr) + * [Orange](/isp_orange) + * [Free](/isp_free) * [Échanger des fichiers avec son serveur à l'aide d'une interface graphique](/filezilla) - * [Modifier l'apparence du portail utilisateur](/theming_fr) - * [Ajouter un stockage externe](/external_storage_fr) - * [Migrer ses emails vers YunoHost](/email_migration_fr) - * [YunoHost avec un service caché Tor](/torhiddenservice_fr) - * [Utilisation de certificats autres que Let's Encrypt](/certificate_custom_fr) -* [Guide de dépannage](/troubleshooting_guide_fr) - * [Débloquer une IP dans Fail2ban](/fail2ban_fr) - * [Changer le mot de passe d’administration](/change_admin_password_fr) + * [Modifier l'apparence du portail utilisateur](/theming) + * [Ajouter un stockage externe](/external_storage) + * [Migrer ses emails vers YunoHost](/email_migration) + * [YunoHost avec un service caché Tor](/torhiddenservice) + * [Utilisation de certificats autres que Let's Encrypt](/certificate_custom) +* [Guide de dépannage](/troubleshooting_guide) + * [Débloquer une IP dans Fail2ban](/fail2ban) + * [Changer le mot de passe d’administration](/change_admin_password) diff --git a/app_jappix_fr.md b/app_jappix_fr.md index e9b0fd2d..aa044fe2 100644 --- a/app_jappix_fr.md +++ b/app_jappix_fr.md @@ -1,3 +1,3 @@ #<img src="/images/jappix.png">Jappix -Jappix est un client web [XMPP](/XMPP_fr). +Jappix est un client web [XMPP](/XMPP). diff --git a/app_nextcloud.md b/app_nextcloud.md index 66ad3fb7..44bfa713 100644 --- a/app_nextcloud.md +++ b/app_nextcloud.md @@ -37,7 +37,7 @@ Finally click on the check mark to validate the folder. #### II. Migrate Nextcloud data to a larger partition -**Note**: The following assumes that you have a hard disk mounted on `/media/storage`. Refer to[this article](/external_storage_en) to prepare your system. +**Note**: The following assumes that you have a hard disk mounted on `/media/storage`. Refer to[this article](/external_storage) to prepare your system. **Note**: Replace `nextcloud` with the name of its instance, if you have several Nextcloud apps installed. diff --git a/app_nextcloud_fr.md b/app_nextcloud_fr.md index fb889026..4fcfa6f2 100644 --- a/app_nextcloud_fr.md +++ b/app_nextcloud_fr.md @@ -37,7 +37,7 @@ Enfin cliquer sur la coche pour valider le dossier. #### II. Migrer les données de Nextcloud dans une partition plus grosse -**Remarque** : Ce qui suit suppose que vous avez un disque dur monté sur `/media/stockage`. Référez-vous à [cet article](/external_storage_fr) pour préparer votre système. +**Remarque** : Ce qui suit suppose que vous avez un disque dur monté sur `/media/stockage`. Référez-vous à [cet article](/external_storage) pour préparer votre système. **Remarque** : Remplacez `nextcloud` par le nom de son instance, si vous avez plusieurs apps Nextcloud installées. @@ -158,10 +158,10 @@ Sauvegarder et nettoyer vos caches (Cloudflare, navigateur, ...) et le tour est ## Applications Tiers<a name="AppsTiers" href=""></a> - + [Calendrier](app_nextcloud_calendar_fr) - + [contact](app_nextcloud_contact_fr) - + [KeeWeb](app_nextcloud_keeweb_fr) - + [Carnet](app_nextcloud_carnet_fr) + + [Calendrier](/app_nextcloud_calendar) + + [contact](/app_nextcloud_contact) + + [KeeWeb](/app_nextcloud_keeweb) + + [Carnet](/app_nextcloud_carnet) ## Quelques liens utiles<a name="liensutiles" href=""></a> diff --git a/app_transmission_fr.md b/app_transmission_fr.md index cb94f3bb..fb7f1e75 100644 --- a/app_transmission_fr.md +++ b/app_transmission_fr.md @@ -27,7 +27,7 @@ scp -r /votre/fichier/ root@votre-domaine.org:/home/yunohost.transmission/comple ``` ##### Comment télécharger un répertoire entier ? -Une fois connecté en [SSH](ssh_fr), placez-vous dans le répertoire de téléchargement et zippez le répertoire : +Une fois connecté en [SSH](/ssh), placez-vous dans le répertoire de téléchargement et zippez le répertoire : ```bash cd /home/yunohost.transmission/completed zip -r votre_archive.zip [dossier] diff --git a/apps.md b/apps.md index 70eff9be..7b5ff79b 100644 --- a/apps.md +++ b/apps.md @@ -44,7 +44,7 @@ Disclaimers <div id="app-cards-list" class="app-cards-list"></div> -<div class="alert alert-warning">If you don't find the app you are looking for, you can try to look for a appname_ynh repository on Github or on the internet, or add it to the <a href="/apps_wishlist_en">apps wishlist</a>.</div> +<div class="alert alert-warning">If you don't find the app you are looking for, you can try to look for a appname_ynh repository on Github or on the internet, or add it to the <a href="/apps_wishlist">apps wishlist</a>.</div> <!-- Custom CSS for this page diff --git a/apps_ar.md b/apps_ar.md index 70eff9be..7b5ff79b 100644 --- a/apps_ar.md +++ b/apps_ar.md @@ -44,7 +44,7 @@ Disclaimers <div id="app-cards-list" class="app-cards-list"></div> -<div class="alert alert-warning">If you don't find the app you are looking for, you can try to look for a appname_ynh repository on Github or on the internet, or add it to the <a href="/apps_wishlist_en">apps wishlist</a>.</div> +<div class="alert alert-warning">If you don't find the app you are looking for, you can try to look for a appname_ynh repository on Github or on the internet, or add it to the <a href="/apps_wishlist">apps wishlist</a>.</div> <!-- Custom CSS for this page diff --git a/apps_es.md b/apps_es.md index 70eff9be..7b5ff79b 100644 --- a/apps_es.md +++ b/apps_es.md @@ -44,7 +44,7 @@ Disclaimers <div id="app-cards-list" class="app-cards-list"></div> -<div class="alert alert-warning">If you don't find the app you are looking for, you can try to look for a appname_ynh repository on Github or on the internet, or add it to the <a href="/apps_wishlist_en">apps wishlist</a>.</div> +<div class="alert alert-warning">If you don't find the app you are looking for, you can try to look for a appname_ynh repository on Github or on the internet, or add it to the <a href="/apps_wishlist">apps wishlist</a>.</div> <!-- Custom CSS for this page diff --git a/apps_it.md b/apps_it.md index 70eff9be..7b5ff79b 100644 --- a/apps_it.md +++ b/apps_it.md @@ -44,7 +44,7 @@ Disclaimers <div id="app-cards-list" class="app-cards-list"></div> -<div class="alert alert-warning">If you don't find the app you are looking for, you can try to look for a appname_ynh repository on Github or on the internet, or add it to the <a href="/apps_wishlist_en">apps wishlist</a>.</div> +<div class="alert alert-warning">If you don't find the app you are looking for, you can try to look for a appname_ynh repository on Github or on the internet, or add it to the <a href="/apps_wishlist">apps wishlist</a>.</div> <!-- Custom CSS for this page diff --git a/apps_overview.md b/apps_overview.md index 7e825725..16cbe218 100644 --- a/apps_overview.md +++ b/apps_overview.md @@ -21,7 +21,7 @@ The full list of application (official and community) can be browsed at [this pa Integration and quality levels ------------------------------ -Automated tests are being ran regularly to test the integration and quality of all official apps, as well as community apps who were declared to be 'working'. The result is a level between 0 and 7, whose meaning is detailed on [this page](/packaging_apps_levels_fr). Some tests results may also be available [on this dashboard](https://dash.yunohost.org/appci/branch/stable). +Automated tests are being ran regularly to test the integration and quality of all official apps, as well as community apps who were declared to be 'working'. The result is a level between 0 and 7, whose meaning is detailed on [this page](/packaging_apps_levels). Some tests results may also be available [on this dashboard](https://dash.yunohost.org/appci/branch/stable). LDAP / SSO integration ---------------------- diff --git a/apps_overview_fr.md b/apps_overview_fr.md index bf396e31..8aa7b904 100644 --- a/apps_overview_fr.md +++ b/apps_overview_fr.md @@ -21,7 +21,7 @@ La liste des applications existantes (officielles et communautaires) peut être Niveaux d'intégration et de qualité ------------------------------ -Des tests automatisés sont exécutés régulièrement pour tester l'intégration et la qualité de toutes les applications officielles, ainsi que les applications communautaires qui ont été déclarées "working". Le résultat est un niveau entre 0 et 7, dont la signification est détaillée sur [cette page](/packaging_apps_levels_fr). Certains résultats de tests peuvent également être disponibles sur [ce tableau de bord](https://dash.yunohost.org/appci/branch/stable). +Des tests automatisés sont exécutés régulièrement pour tester l'intégration et la qualité de toutes les applications officielles, ainsi que les applications communautaires qui ont été déclarées "working". Le résultat est un niveau entre 0 et 7, dont la signification est détaillée sur [cette page](/packaging_apps_levels). Certains résultats de tests peuvent également être disponibles sur [ce tableau de bord](https://dash.yunohost.org/appci/branch/stable). Intégration LDAP / SSO ---------------------- diff --git a/apps_wishlist.md b/apps_wishlist.md index ad106cd0..c4fa90b4 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -1,6 +1,6 @@ # Apps wishlist -<div class="alert alert-info">Before to add an app in wishlist please check your app is not already in official or community list: see the <a href="/apps_en">apps list</a></div> +<div class="alert alert-info">Before to add an app in wishlist please check your app is not already in official or community list: see the <a href="/apps">apps list</a></div> The following list is a compiled wishlist of applications that would be nice-to-have. diff --git a/apps_wishlist_fr.md b/apps_wishlist_fr.md index 28616ea0..88160e7b 100644 --- a/apps_wishlist_fr.md +++ b/apps_wishlist_fr.md @@ -1,3 +1,3 @@ # Apps souhaitées -La liste des applications souhaitées n’est maintenue qu’en <a href="/apps_wishlist_en">version anglaise</a>. Merci de vous y référer. +La liste des applications souhaitées n’est maintenue qu’en <a href="/apps_wishlist">version anglaise</a>. Merci de vous y référer. diff --git a/backup_fr.md b/backup_fr.md index 00cbe694..2dd77ff4 100644 --- a/backup_fr.md +++ b/backup_fr.md @@ -64,7 +64,7 @@ Télécharger et téléverser des sauvegardes Après avoir créé des sauvegardes, il est possible de les lister et de les inspecter grâce aux vues correspondantes dans la webadmin, ou via `yunohost backup list` et `yunohost backup info <nom_d'archive>` depuis la ligne de commande. Par défaut, les sauvegardes sont stockées dans `/home/yunohost.backup/archives/`. -À l'heure actuelle, la solution la plus accessible pour récupérer les sauvegardes est d'utiliser le programme FileZilla comme expliqué dans [cette page](/filezilla_fr). +À l'heure actuelle, la solution la plus accessible pour récupérer les sauvegardes est d'utiliser le programme FileZilla comme expliqué dans [cette page](/filezilla). Une autre solution alternative consiste à installer une application comme Nextcloud et à la configurer pour être en mesure d'accéder aux fichiers dans `/home/yunohost.backup/archives/` depuis un navigateur web. diff --git a/boot_and_graphical_install_fr.md b/boot_and_graphical_install_fr.md index daf928cd..96f1287d 100644 --- a/boot_and_graphical_install_fr.md +++ b/boot_and_graphical_install_fr.md @@ -46,5 +46,5 @@ identifiants suivants : ## <small>5.</small> Procéder à la post-installation -<a class="btn btn-lg btn-default" href="/postinstall_fr">Documentation de la post-installation</a> +<a class="btn btn-lg btn-default" href="/postinstall">Documentation de la post-installation</a> diff --git a/certificate_custom_fr.md b/certificate_custom_fr.md index f5a78030..31e19901 100644 --- a/certificate_custom_fr.md +++ b/certificate_custom_fr.md @@ -1,4 +1,4 @@ -**Note :** depuis la version 2.5, Yunohost intègre la gestion automatisée de certificats Let's Encrypt. Vous pouvez donc facilement et gratuitement [installer un certificat Let's Encrypt](certificate_fr). Le document suivant décrit la méthodologie pour installer un certificat, payant, d'une autre autorité de certification (**Gandi**, **RapidSSL**, **StartSSL**, **Cacert**). +**Note :** depuis la version 2.5, Yunohost intègre la gestion automatisée de certificats Let's Encrypt. Vous pouvez donc facilement et gratuitement [installer un certificat Let's Encrypt](/certificate). Le document suivant décrit la méthodologie pour installer un certificat, payant, d'une autre autorité de certification (**Gandi**, **RapidSSL**, **StartSSL**, **Cacert**). ### Ajout d’un certificat signé par une autorité (autre que Let's Encrypt) @@ -18,7 +18,7 @@ pscp -P 22 CERTIFICAT.crt admin@DOMAIN.TLD:ssl.crt pscp -P 22 CLE.key admin@DOMAIN.TLD:ssl.key ``` -Dès lors que les fichiers sont sur le serveur, le reste du travail se fera sur celui-ci. En [ssh](https://yunohost.org/#/ssh_fr) ou en local. +Dès lors que les fichiers sont sur le serveur, le reste du travail se fera sur celui-ci. En [ssh](/ssh) ou en local. Tout d’abord, créez un dossier pour stocker les certificats obtenus. diff --git a/certificate_es.md b/certificate_es.md index 16e12ca9..f68b07e6 100644 --- a/certificate_es.md +++ b/certificate_es.md @@ -11,7 +11,7 @@ Esta pantalla equivale a que te pidan ** ¿ Confías en el servidor que aloja es Para evitar esta confusión, es posible obtener un certificado, reconocido directamente por los navegadores, firmado por una autoridad « conocida » : **Let's Encrypt**, **Gandi**, **RapidSSL**, **StartSSL**, **Cacert**. -**Let's Encrypt** propone certificados gratuitos. Desde la versión 2.5, Yunohost permite instalar directamente tales certificados desde la interfaz de administración o la línea de comandos. El resto del documento detalla la instalación y la firma de este tipo de certificado. También puedes [instalar un certificado de otra autoridad que Let's Encrypt](/certificate_custom_es). +**Let's Encrypt** propone certificados gratuitos. Desde la versión 2.5, Yunohost permite instalar directamente tales certificados desde la interfaz de administración o la línea de comandos. El resto del documento detalla la instalación y la firma de este tipo de certificado. También puedes [instalar un certificado de otra autoridad que Let's Encrypt](/certificate_custom). ### Instalar un certificado Let's Encrypt diff --git a/certificate_fr.md b/certificate_fr.md index d32a8341..6aeef3d5 100644 --- a/certificate_fr.md +++ b/certificate_fr.md @@ -12,7 +12,7 @@ Cela peut effrayer vos utilisateurs (à juste titre). Pour éviter cette confusion, il est possible d’obtenir un certificat, reconnu directement par les navigateurs, signé par une autorité « connue » : **Let's Encrypt**, **Gandi**, **RapidSSL**, **StartSSL**, **Cacert**. -**Let's Encrypt** propose des certificats gratuits. Depuis la version 2.5, YunoHost permet d'installer directement un tel certificat depuis l'interface d'administration ou la ligne de commande. La suite du document détaille l'installation et la gestion d'un tel certificat. Vous pouvez également [installer un certificat d'une autre autorité que Let's Encrypt](/certificate_custom_fr). +**Let's Encrypt** propose des certificats gratuits. Depuis la version 2.5, YunoHost permet d'installer directement un tel certificat depuis l'interface d'administration ou la ligne de commande. La suite du document détaille l'installation et la gestion d'un tel certificat. Vous pouvez également [installer un certificat d'une autre autorité que Let's Encrypt](/certificate_custom). ### Installer un certificat Let's Encrypt diff --git a/change_admin_password_fr.md b/change_admin_password_fr.md index 3554ba80..f92f7c71 100644 --- a/change_admin_password_fr.md +++ b/change_admin_password_fr.md @@ -9,7 +9,7 @@ Le mot de passe d’administration actuel est **requis** pour effectuer cette mo ##Administration web -Premièrement, connectez-vous à [l’administration web](/admin_fr). +Premièrement, connectez-vous à [l’administration web](/admin). Puis allez dans la section `Outils` > `Changer le mot de passe d’administration`. diff --git a/chat_rooms.md b/chat_rooms.md index 19c1ab2b..2ac36abf 100644 --- a/chat_rooms.md +++ b/chat_rooms.md @@ -10,7 +10,7 @@ You could join those chat rooms using : #### Help and support chatroom -There is a [support](help_fr) chatroom for YunoHost users mutual support and help. +There is a [support](/help) chatroom for YunoHost users mutual support and help. - IRC: **#yunohost** on irc.freenode.net ; - Matrix: **#freenode_#yunohost:matrix.org** ; diff --git a/chat_rooms_fr.md b/chat_rooms_fr.md index 30dde1aa..e382d234 100644 --- a/chat_rooms_fr.md +++ b/chat_rooms_fr.md @@ -9,7 +9,7 @@ Vous pouvez rejoindre ces salons avec: #### Salon d'entraide et de support -Le salon d’[entraide](help_fr) est là pour permettre aux utilisateurs de YunoHost de s'aider mutuellement. +Le salon d’[entraide](/help) est là pour permettre aux utilisateurs de YunoHost de s'aider mutuellement. - IRC : **#yunohost** sur irc.freenode.net (voir kiwiirc ci-dessus) - Matrix : **#freenode_#yunohost:matrix.org** - XMPP : **[support@conference.yunohost.org](xmpp:support@conference.yunohost.org?join)** diff --git a/collabora_en.md b/collabora_en.md index cd3af0c8..504fe174 100644 --- a/collabora_en.md +++ b/collabora_en.md @@ -1,5 +1,5 @@ # Install Collabora with Nextcloud, using Docker -**Note :** This walkthrough is based on a Debian 8 instance, and has not been tested since version 3 upgrade of Yunohost. As a prerequisite, you must have configured your domains and sub-domains in the DNS, in compliance with : [DNS](/dns_en), [Sub-domain install of an app](/dns_subdomains_en), [DNS settings](/dns_config_en) and [noho.st / nohost.me / ynh.fr domains](/dns_nohost_me)). +**Note :** This walkthrough is based on a Debian 8 instance, and has not been tested since version 3 upgrade of Yunohost. As a prerequisite, you must have configured your domains and sub-domains in the DNS, in compliance with : [DNS](/dns), [Sub-domain install of an app](/dns_subdomains), [DNS settings](/dns_config) and [noho.st / nohost.me / ynh.fr domains](/dns_nohost_me)). ### 0. Install Nextcloud diff --git a/collabora_fr.md b/collabora_fr.md index 29f352c2..a9af6a57 100644 --- a/collabora_fr.md +++ b/collabora_fr.md @@ -1,6 +1,6 @@ # Installer Collabora avec Nextcloud via Docker -**Note :** la marche à suivre detaillée est réalisée ici à partir d’une instance Yunohost sur Debian 8 (celle-ci n'a pas été testée suite à la migration vers la version 3 de Yunohost). Ces instructions ont pour pré-requis que les domaines/sous-domaines sont correctement configurés au niveau des DNS et de votre instance Yunohost (voir [DNS](/dns_fr), [DNS et installation d’une application sur un sous-domaine](/dns_subdomains_fr), [Configurer les enregistrements DNS](/dns_config_fr) et [Nom de domaine en noho.st / nohost.me / ynh.fr](/dns_nohost_me_fr)). +**Note :** la marche à suivre detaillée est réalisée ici à partir d’une instance Yunohost sur Debian 8 (celle-ci n'a pas été testée suite à la migration vers la version 3 de Yunohost). Ces instructions ont pour pré-requis que les domaines/sous-domaines sont correctement configurés au niveau des DNS et de votre instance Yunohost (voir [DNS](/dns), [DNS et installation d’une application sur un sous-domaine](/dns_subdomains), [Configurer les enregistrements DNS](/dns_config) et [Nom de domaine en noho.st / nohost.me / ynh.fr](/dns_nohost_me)). ### 0. Installer Nextcloud diff --git a/commandline_es.md b/commandline_es.md index 3b829818..83db3878 100644 --- a/commandline_es.md +++ b/commandline_es.md @@ -2,7 +2,7 @@ La interfaz de línea de comandos (CLI) es, en informática, la manera original (y más técnica) de interactuar con un ordenador. Está generalmente considera como más completa, más potente y eficaz que las interfaces gráficas, aunque sea más difícil de aprenderla. -En el contexto de Yunohost, o de la administración de sistemas en general, la línea de comandos comúnmente se utiliza después de haberse [conectado en SSH](/ssh_es). +En el contexto de Yunohost, o de la administración de sistemas en general, la línea de comandos comúnmente se utiliza después de haberse [conectado en SSH](/ssh). <div class="alert alert-info" markdown="1"> Proveer un tutorial completo sobre la línea de comandos saldría del marco de la documentación de Yunohost : por eso, refiérete a totorales como [éste](https://www.fing.edu.uy/inco/cursos/sistoper/recursosLaboratorio/tutorial0.pdf) o [éste (en)](http://linuxcommand.org/). Pero no te preocupes : no hace falta ser un experto para comenzar a utilizarla ! diff --git a/contribute.md b/contribute.md index fd10e976..04dc45d1 100644 --- a/contribute.md +++ b/contribute.md @@ -11,7 +11,7 @@ YunoHost depends exclusively on the participation of people like you. <span class="glyphicon glyphicon-heart"></span> Spread the word </div> <div class="col col-md-8" markdown="1"> -Talk about software freedom, [self-hosting](selfhosting_en) and YunoHost to your relatives and at your work. We rely on Datalove evangelists like you <3 +Talk about software freedom, [self-hosting](/selfhosting) and YunoHost to your relatives and at your work. We rely on Datalove evangelists like you <3 </div> </div> diff --git a/contribute_ar.md b/contribute_ar.md index 499d5e56..0a810ce5 100644 --- a/contribute_ar.md +++ b/contribute_ar.md @@ -11,7 +11,7 @@ <span class="glyphicon glyphicon-heart"></span> تحدثوا عن المشروع مِن حولكم </div> <div class="col col-md-8" markdown="1"> -تحدثوا عن البرمجيات الحرّة، تحدثوا عن واي يونوهوست YunoHost مع أقربائكم و زملائكم في العمل. حدّثوهم عن [الإستضافة الذاتية](/selfhosting_fr)، نحن بحاجة و واثقون مِن قدرات محبي البيانات مثلكم 3></div> +تحدثوا عن البرمجيات الحرّة، تحدثوا عن واي يونوهوست YunoHost مع أقربائكم و زملائكم في العمل. حدّثوهم عن [الإستضافة الذاتية](/selfhosting)، نحن بحاجة و واثقون مِن قدرات محبي البيانات مثلكم 3></div> </div> --- @@ -33,7 +33,7 @@ <span class="glyphicon glyphicon-user"></span> ساعدوا المستخدمِين </div> <div class="col col-md-8" markdown="1"> -Notre support est communautaire et s’appuie sur des contributeurs comme vous. Venez simplement sur le [salon d'aide](/help_fr), ou tentez de répondre aux questions du <a href="https://forum.yunohost.org/" target="_blank">Forum</a>. Vous pouvez aussi organiser des <a href="https://hackstub.netlib.re/wiki/index.php?title=Atelier_3_avenir%28s%29_d%27internet_-_Introduction_%C3%A0_Yunohost_et_la_brique_internet" target="_blank">ateliers de formation</a>. +Notre support est communautaire et s’appuie sur des contributeurs comme vous. Venez simplement sur le [salon d'aide](/help), ou tentez de répondre aux questions du <a href="https://forum.yunohost.org/" target="_blank">Forum</a>. Vous pouvez aussi organiser des <a href="https://hackstub.netlib.re/wiki/index.php?title=Atelier_3_avenir%28s%29_d%27internet_-_Introduction_%C3%A0_Yunohost_et_la_brique_internet" target="_blank">ateliers de formation</a>. </div> </div> @@ -45,7 +45,7 @@ Notre support est communautaire et s’appuie sur des contributeurs comme vous. </div> <div dir="rtl" class="col col-md-8" markdown="1"> Vous pouvez vous impliquer dans le développement de YunoHost peu importe votre niveau. Administrateurs système, développeurs web, designers et pythonistes <a href="https://github.com/YunoHost" target="_blank">sont les bienvenus</a>.<br> -Découvrez [comment contribuer](/dev_fr), et rejoignez-nous sur le [salon de discussion](xmpp:dev@conference.yunohost.org?join) et la <a href="http://list.yunohost.org/cgi-bin/mailman/listinfo/contrib">mailing-list</a> ! +Découvrez [comment contribuer](/dev), et rejoignez-nous sur le [salon de discussion](xmpp:dev@conference.yunohost.org?join) et la <a href="http://list.yunohost.org/cgi-bin/mailman/listinfo/contrib">mailing-list</a> ! </div> </div> @@ -67,7 +67,7 @@ Découvrez [comment contribuer](/dev_fr), et rejoignez-nous sur le [salon de dis <span class="glyphicon glyphicon-edit"></span> أكتبوا </div> <div class="col col-md-8" markdown="1"> -ساهموا في تحسين هذا الدليل و ذلك [باقتراح صفحات جديدة](/write_documentation_fr) أو بترجمة صفحاته إلى لغتكم. +ساهموا في تحسين هذا الدليل و ذلك [باقتراح صفحات جديدة](/write_documentation) أو بترجمة صفحاته إلى لغتكم. </div> </div> @@ -78,7 +78,7 @@ Découvrez [comment contribuer](/dev_fr), et rejoignez-nous sur le [salon de dis <span class="glyphicon glyphicon-gift"></span> ساهموا في التحزيم </div> <div class="col col-md-8" markdown="1"> -Étendez les capacités de YunoHost en [packageant de nouveaux services et applications web](/packaging_apps_fr). Jetez un œil à [ce qui a déjà été fait](/apps_fr) ! +Étendez les capacités de YunoHost en [packageant de nouveaux services et applications web](/packaging_apps). Jetez un œil à [ce qui a déjà été fait](/apps) ! <br> Un [salon de développement](xmpp:dev@conference.yunohost.org?join) et une <a href="http://list.yunohost.org/cgi-bin/mailman/listinfo/apps">mailing-list</a> est également disponible. </div> diff --git a/contribute_fr.md b/contribute_fr.md index 279b1efb..825b47d4 100644 --- a/contribute_fr.md +++ b/contribute_fr.md @@ -11,7 +11,7 @@ YunoHost dépend entièrement de la participation de gens comme vous. <span class="glyphicon glyphicon-heart"></span> Passez le mot </div> <div class="col col-md-8" markdown="1"> -Parlez de logiciel libre, d’[auto-hébergement](/selfhosting_fr), de YunoHost à vos proches et à votre travail. Nous comptons sur des évangélistes du Datalove comme vous <3 +Parlez de logiciel libre, d’[auto-hébergement](/selfhosting), de YunoHost à vos proches et à votre travail. Nous comptons sur des évangélistes du Datalove comme vous <3 </div> </div> @@ -33,7 +33,7 @@ Nous avons besoin de tester YunoHost profondément. Si vous trouvez un bug, essa <span class="glyphicon glyphicon-user"></span> Aidez les utilisateurs </div> <div class="col col-md-8" markdown="1"> -Notre support est communautaire et s’appuie sur des contributeurs comme vous. Venez simplement sur le [salon d'aide](/help_fr), ou tentez de répondre aux questions du <a href="https://forum.yunohost.org/" target="_blank">Forum</a>. Vous pouvez aussi organiser des <a href="https://hackstub.netlib.re/wiki/index.php?title=Atelier_3_avenir%28s%29_d%27internet_-_Introduction_%C3%A0_Yunohost_et_la_brique_internet" target="_blank">ateliers de formation</a>. +Notre support est communautaire et s’appuie sur des contributeurs comme vous. Venez simplement sur le [salon d'aide](/help), ou tentez de répondre aux questions du <a href="https://forum.yunohost.org/" target="_blank">Forum</a>. Vous pouvez aussi organiser des <a href="https://hackstub.netlib.re/wiki/index.php?title=Atelier_3_avenir%28s%29_d%27internet_-_Introduction_%C3%A0_Yunohost_et_la_brique_internet" target="_blank">ateliers de formation</a>. </div> </div> @@ -45,7 +45,7 @@ Notre support est communautaire et s’appuie sur des contributeurs comme vous. </div> <div class="col col-md-8" markdown="1"> Vous pouvez vous impliquer dans le développement de YunoHost peu importe votre niveau. Administrateurs système, développeurs web, designers et pythonistes <a href="https://github.com/YunoHost" target="_blank">sont les bienvenus</a>.<br> -Découvrez [comment contribuer](/dev_fr), et rejoignez-nous sur le [salon de discussion](xmpp:dev@conference.yunohost.org?join) et la <a href="http://list.yunohost.org/cgi-bin/mailman/listinfo/contrib">mailing-list</a> ! +Découvrez [comment contribuer](/dev), et rejoignez-nous sur le [salon de discussion](xmpp:dev@conference.yunohost.org?join) et la <a href="http://list.yunohost.org/cgi-bin/mailman/listinfo/contrib">mailing-list</a> ! </div> </div> @@ -67,7 +67,7 @@ Participez en rendant les interfaces de YunoHost disponibles dans votre langue. <span class="glyphicon glyphicon-edit"></span> Écrivez </div> <div class="col col-md-8" markdown="1"> -Améliorez cette documentation en [proposant de nouvelles pages](/write_documentation_fr) ou en traduisant les existantes dans votre langue. +Améliorez cette documentation en [proposant de nouvelles pages](/write_documentation) ou en traduisant les existantes dans votre langue. </div> </div> @@ -78,7 +78,7 @@ Améliorez cette documentation en [proposant de nouvelles pages](/write_document <span class="glyphicon glyphicon-gift"></span> Packagez </div> <div class="col col-md-8" markdown="1"> -Étendez les capacités de YunoHost en [packageant de nouveaux services et applications web](/packaging_apps_fr). Jetez un œil à [ce qui a déjà été fait](/apps_fr) ! +Étendez les capacités de YunoHost en [packageant de nouveaux services et applications web](/packaging_apps). Jetez un œil à [ce qui a déjà été fait](/apps) ! </div> </div> @@ -86,5 +86,5 @@ Améliorez cette documentation en [proposant de nouvelles pages](/write_document <br> <br> -<p class="lead" markdown="1">Dans tous les cas, venez discuter avec nous sur [le salon de développement](/chat_rooms_fr) :-)</p> +<p class="lead" markdown="1">Dans tous les cas, venez discuter avec nous sur [le salon de développement](/chat_rooms) :-)</p> diff --git a/contributordoc.md b/contributordoc.md index 55a9ca68..9fb24915 100644 --- a/contributordoc.md +++ b/contributordoc.md @@ -7,23 +7,23 @@ * [Apps wishlist](/apps_wishlist) * [General introduction to app packaging](/packaging_apps_start) * [Technical introduction to app packaging](/packaging_apps) - * [Setting up a dev environment with VirtualBox](packaging_apps_virtualbox_fr) + * [Setting up a dev environment with VirtualBox](/packaging_apps_virtualbox) * [Manifest](packaging_apps_manifest) * [Scripts](packaging_apps_scripts) * [Arguments management](packaging_apps_arguments_management) * [Nginx configuration](packaging_apps_nginx_conf) * [Multi-instance](packaging_apps_multiinstance) * [Helpers](packaging_apps_helpers) - * [Trap usage](packaging_apps_trap_fr) + * [Trap usage](/packaging_apps_trap) * [Adding your app to the community list](https://github.com/YunoHost/Apps/#contributing) * Quality tests * [Package linter](https://github.com/YunoHost/package_linter) * [Package check](https://github.com/YunoHost/package_check) - * [Applications levels](packaging_apps_levels_fr) + * [Applications levels](/packaging_apps_levels) * [App Continuous Integration](https://ci-apps.yunohost.org) * [App CI dashboard](https://dash.yunohost.org/appci/branch/stable) * [App Continuous Integration for packagers](/packaging_apps_ci) - * [YEP - YunoHost Enhancement Proposals](packaging_apps_guidelines_fr) + * [YEP - YunoHost Enhancement Proposals](/packaging_apps_guidelines) * [Contributing to the YunoHost core](/dev) * [Setting up a dev environment with ynh-dev](https://github.com/YunoHost/ynh-dev/blob/master/README.md) * [Deb build chain](https://github.com/YunoHost/vinaigrette/blob/master/README.md) diff --git a/contributordoc_fr.md b/contributordoc_fr.md index 9e928bb1..0b37388b 100644 --- a/contributordoc_fr.md +++ b/contributordoc_fr.md @@ -1,30 +1,30 @@ # Guide du contributeur -* [Liste des façons de contribuer à YunoHost](/contribute_fr) -* [Écrire de la documentation](/write_documentation_fr) -* [Salons de discussion](/chat_rooms_fr) +* [Liste des façons de contribuer à YunoHost](/contribute) +* [Écrire de la documentation](/write_documentation) +* [Salons de discussion](/chat_rooms) * Packaging d'application - * [Liste d'apps souhaitées par la communauté](/apps_wishlist_fr) - * [Introduction générale au packaging d'apps](/packaging_apps_start_fr) - * [Introduction technique au packaging d'apps](/packaging_apps_fr) - * [Déployer un environnement de développement avec VirtualBox](packaging_apps_virtualbox_fr) - * [Manifest](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) - * [Fonctions utiles](packaging_apps_helpers_fr) - * [Utilisation de 'trap'](packaging_apps_trap_fr) + * [Liste d'apps souhaitées par la communauté](/apps_wishlist) + * [Introduction générale au packaging d'apps](/packaging_apps_start) + * [Introduction technique au packaging d'apps](/packaging_apps) + * [Déployer un environnement de développement avec VirtualBox](/packaging_apps_virtualbox) + * [Manifest](/packaging_apps_manifest) + * [Scripts](/packaging_apps_scripts) + * [Gestion des arguments](/packaging_apps_arguments_management) + * [Configuration nginx](/packaging_apps_nginx_conf) + * [Multi-instance](/packaging_apps_multiinstance) + * [Fonctions utiles](/packaging_apps_helpers) + * [Utilisation de 'trap'](/packaging_apps_trap) * [Ajouter son application à la liste community](https://github.com/YunoHost/Apps/#contributing) * Tests de qualité * [Package linter](https://github.com/YunoHost/package_linter) * [Package check](https://github.com/YunoHost/package_check) - * [Niveaux des applications](packaging_apps_levels_fr) + * [Niveaux des applications](/packaging_apps_levels) * [Intégration continue des apps](https://ci-apps.yunohost.org) * [Tableau de bord du CI des apps](https://dash.yunohost.org/appci/branch/stable) * [Intégration continue pour packagers](/packaging_apps_ci) - * [YEP - YunoHost Enhancement Proposals](packaging_apps_guidelines_fr) -* [Contribuer à la partie "core" de YunoHost](/dev_fr) + * [YEP - YunoHost Enhancement Proposals](/packaging_apps_guidelines) +* [Contribuer à la partie "core" de YunoHost](/dev) * [Déployer un environnement de dev avec ynh-dev](https://github.com/YunoHost/ynh-dev/blob/master/README.md) * [Construction des paquets debian](https://github.com/YunoHost/vinaigrette/blob/master/README.md) * [Feuilles de route du projet](https://github.com/YunoHost/issues/milestones?direction=asc&sort=title&state=open) @@ -32,4 +32,4 @@ * [x86 ISO](https://github.com/YunoHost/cd_build) * [Images Raspberry Pi](https://github.com/YunoHost/rpi-image) * [Autres images pour cartes ARM](https://github.com/YunoHost/arm-images) -* [Utiliser l'API YunoHost en dehors de la webadmin](/admin_api_fr) +* [Utiliser l'API YunoHost en dehors de la webadmin](/admin_api) diff --git a/diagnostic_fr.md b/diagnostic_fr.md index d3cd00c5..f0cd0f34 100644 --- a/diagnostic_fr.md +++ b/diagnostic_fr.md @@ -1,6 +1,6 @@ # Diagnostic du bon fonctionnement de YunoHost -Si vous avez réussi l’[installation](/install_fr) de YunoHost et passé l’étape de [post-installation](/postinstall_fr), vous avez probablement un **serveur fonctionnel**. +Si vous avez réussi l’[installation](/install) de YunoHost et passé l’étape de [post-installation](/postinstall), vous avez probablement un **serveur fonctionnel**. ### <small>1.</small> Essayer @@ -24,7 +24,7 @@ Si vous avez optez pour un nom de domaine se terminant par <b>.nohost.me</b> ou Cette étape n’est pas nécessaire si vous possédez un nom de domaine en <b>.nohost.me</b> ou un <b>.noho.st</b> </div> -Rendez-vous sur https://www.whatsmydns.net/, entrez votre nom de domaine dans le champ prévu à cet effet et cliquez sur `Search`. Si vous ne voyez pas votre adresse IP, ou s’il y a des croix rouges par endroit, cela signifie que vous avez probablement mal configuré votre [DNS](/dns_fr). +Rendez-vous sur https://www.whatsmydns.net/, entrez votre nom de domaine dans le champ prévu à cet effet et cliquez sur `Search`. Si vous ne voyez pas votre adresse IP, ou s’il y a des croix rouges par endroit, cela signifie que vous avez probablement mal configuré votre [DNS](/dns). --- @@ -48,7 +48,7 @@ Vous pouvez également rediriger les ports manuellement vers l’adresse IP loca Si le serveur est accessible de l’extérieur, mais inatteignable via son nom de domaine dans votre réseau local, votre box/routeur ne fait probablement pas correctement de <a href="https://fr.wikipedia.org/wiki/Hairpinning" target="_blank">hairpinning</a>. -Voici un [tutoriel](dns_local_network_fr) pour pouvoir accéder à son serveur en réseau local et contourner le problème de hairpinning. Le tutoriel propose en première solution de mettre en place une redirection avec le DNS de la box et en seconde solution de modifier le fichier `hosts` des **clients** pour indiquer qu’il doit accéder au **serveur** via son IP locale. La première solution est préférable car il ne nécessite pas de modifier le fichier `hosts` sur chacun des clients du réseau local. +Voici un [tutoriel](/dns_local_network) pour pouvoir accéder à son serveur en réseau local et contourner le problème de hairpinning. Le tutoriel propose en première solution de mettre en place une redirection avec le DNS de la box et en seconde solution de modifier le fichier `hosts` des **clients** pour indiquer qu’il doit accéder au **serveur** via son IP locale. La première solution est préférable car il ne nécessite pas de modifier le fichier `hosts` sur chacun des clients du réseau local. ___ diff --git a/dns.md b/dns.md index 6d2bc471..6194d6c7 100644 --- a/dns.md +++ b/dns.md @@ -27,7 +27,7 @@ You have several choices here. Note that you can mix and match solutions if you **This is the recommended option if you are just starting out with self-hosting.** 2. You can use the DNS service offered by your **registrar** (Gandi, NameCheap, BookMyName or others) to configure your domain name. Here is the [standard DNS configuration](/dns_config). The DNS service of your router can also be used, more info on [how to setup a local domain](dns_local_network). -You can also check out these pages for specific [registrar](/registrar_en) documentation: [OVH](https://www.ovh.co.uk/index.xml), [Gandi](http://gandi.net), [NameCheap](http://namecheap.com) or [BookMyName](http://bookmyname.com). +You can also check out these pages for specific [registrar](/registrar) documentation: [OVH](https://www.ovh.co.uk/index.xml), [Gandi](http://gandi.net), [NameCheap](http://namecheap.com) or [BookMyName](http://bookmyname.com). **Warning**: If you choose this option, you will have more configuration possibilities, but nothing will be done for you. For example, if you want to use `webmail.my-server.org`, you must add it manually to the DNS records with your registrar. @@ -35,8 +35,8 @@ You can also check out these pages for specific [registrar](/registrar_en) docum **Warning**: If you choose this option, all configuration options will be done automatically, you will retain a good deal of flexibility, but if your server gets knocked offline you will run into many problems. **Choose this only if you are certain.** -4. Once your DNS service is running, your server can use it but it needs to be configured, this is the [DNS resolver](/dns_resolver_en). +4. Once your DNS service is running, your server can use it but it needs to be configured, this is the [DNS resolver](/dns_resolver). ### Dynamic IP -If the global IP address is changing follow this [tutorial](dns_dynamicip_en). +If the global IP address is changing follow this [tutorial](/dns_dynamicip). diff --git a/dns_config_es.md b/dns_config_es.md index 87797baf..55bf2d6f 100644 --- a/dns_config_es.md +++ b/dns_config_es.md @@ -2,7 +2,7 @@ DNS (sistema de nombre de dominios) es un elemento esencial de Internet que permite convertir direcciones comprensibles por seres humanos (los nombres de dominio) en direcciones comprensibles por la máquina (los IPs). Para que tu servidor esté fácilemente por otros seres humanos, y para que servicios como el mail funcionen correctamente, es preciso configurar la zona DNS de tu dominio. -Si utilizas un [dominio automático](/dns_nohost_me_es) provecho por el Proyecto Yunohost, la configuración debería ser automática. Si quieres utilizar tu propio nombre de dominio (comprado a un registrar), hay que configurar manualmente tu proprio nombre de dominio vía la interfaz de tu registrar. +Si utilizas un [dominio automático](/dns_nohost_me) provecho por el Proyecto Yunohost, la configuración debería ser automática. Si quieres utilizar tu propio nombre de dominio (comprado a un registrar), hay que configurar manualmente tu proprio nombre de dominio vía la interfaz de tu registrar. ## Configuración DNS recomendada diff --git a/dns_config_fr.md b/dns_config_fr.md index b6420b3f..42a50c2b 100644 --- a/dns_config_fr.md +++ b/dns_config_fr.md @@ -7,7 +7,7 @@ votre serveur soit facilement accessible par d'autres êtres humains, et pour que certains services comme le mail fonctionnent correctement, il est nécessaire de configurer la zone DNS de votre domaine. -Si vous utilisez un [domaine automatique](/dns_nohost_me_fr) fourni par le Projet Yunohost, +Si vous utilisez un [domaine automatique](/dns_nohost_me) fourni par le Projet Yunohost, la configuration devrait être faite automatiquement. Si vous utilisez votre propre nom de domaine (e.g. acheté chez un registrar), il vous faut configurer manuellement votre domaine via l'interface de votre registrar. diff --git a/dns_dynamicip.md b/dns_dynamicip.md index 19860435..9d4223a5 100644 --- a/dns_dynamicip.md +++ b/dns_dynamicip.md @@ -6,7 +6,7 @@ This tutorial aim to get around dynamic IP issue which is: when the IP public ad The method proposed here consists of automatizing the fact the box annonces its global IP adress change to the dynamic DNS, so that the DNS zone will automatically be updated. -If you own a domain name at **OVH**, you may go to step 4 and follow this [tutorial](OVH_fr), given that OVH proposes a DynDNS service. +If you own a domain name at **OVH**, you may go to step 4 and follow this [tutorial](/OVH), given that OVH proposes a DynDNS service. #### 1. Create an account to a Dynamic DNS service Here are sites which offer a DynDNS service free of charge: @@ -20,14 +20,14 @@ Here are sites which offer a DynDNS service free of charge: Register to one of them. It should provide you with one (or more) IP address to reach the service, and a login (that you may be able to self-define). #### 2. Move the DNS zones -Copy the [DNS zones](dns_config), except for the NS fields, from the [registrar](registrar_en) where you bought your domain name from to the dynamic DNS service you registrer at in step 1. +Copy the [DNS zones](dns_config), except for the NS fields, from the [registrar](/registrar) where you bought your domain name from to the dynamic DNS service you registrer at in step 1. #### 3. Switch the management of your domain name to the dynamic DNS server -This step consists in declaring to your [registrar](registrar_en) that the DNS service will now be managed by the DynDNS service provider. +This step consists in declaring to your [registrar](/registrar) that the DNS service will now be managed by the DynDNS service provider. For this, fisrt declare in the NS field(s) the IP address provided by the DynDNS service. -Then, remove any other item in the [DNS zones](dns_config) (except the previous NS fields), from the [registrar](registrar_en). +Then, remove any other item in the [DNS zones](dns_config) (except the previous NS fields), from the [registrar](/registrar). #### 4. Configure the client This client could be your ISP-box, or a package installed on your server, such as `ddclient`. diff --git a/dns_dynamicip_fr.md b/dns_dynamicip_fr.md index 1e13f279..33589f54 100644 --- a/dns_dynamicip_fr.md +++ b/dns_dynamicip_fr.md @@ -8,7 +8,7 @@ Après avoir mis en place la solution proposée dans ce tutoriel, la redirection La méthode qui sera mise en place consiste à rendre automatique le fait que la box annonce au DNS dynamique qu’elle a changée d’adresse IP publique, et qu’ensuite la zone DNS soit automatiquement changée. -Si vous possédez un nom de domaine chez **OVH**, vous pouvez aller à l’étape 4 et suivre ce [tutoriel](OVH_fr) étant donné qu’OVH propose un service de DynDNS. +Si vous possédez un nom de domaine chez **OVH**, vous pouvez aller à l’étape 4 et suivre ce [tutoriel](/OVH) étant donné qu’OVH propose un service de DynDNS. #### 1. Créer un compte pour un service de DNS dynamique @@ -22,13 +22,13 @@ Voici des sites qui proposent un service de DynDNS gratuitement : Créer un compte chez l’un d’eux. #### 2. Déplacer les zones DNS -Déplacer les [zones DNS](dns_config), à l’exception des champs NS, du [bureau d’enregistrement](registrar_en) où vous avez acheté votre nom de domaine vers le DNS dynamique où vous avez créé un compte à l’étape 1. +Déplacer les [zones DNS](dns_config), à l’exception des champs NS, du [bureau d’enregistrement](/registrar) où vous avez acheté votre nom de domaine vers le DNS dynamique où vous avez créé un compte à l’étape 1. #### 3. Basculer la gestion de votre nom de domaine vers le serveur DNS dynamique -Cette étape consiste à faire savoir au [bureau d’enregistrement](registrar_en) que le service de DNS sera assuré par le service de DynDNS. +Cette étape consiste à faire savoir au [bureau d’enregistrement](/registrar) que le service de DNS sera assuré par le service de DynDNS. Redirigez le champ NS vers l’adresse IP donnée par le service de DynDNS. -Ensuite, supprimez les [zones DNS](dns_config), à l’exception des champs NS, du [bureau d’enregistrement](registrar_en). +Ensuite, supprimez les [zones DNS](dns_config), à l’exception des champs NS, du [bureau d’enregistrement](/registrar). #### 4. Créer un identifiant de DNS dynamique Sur le service de DNS dynamique créer un identifiant qui sera entré dans un client de DNS dynamique. diff --git a/dns_es.md b/dns_es.md index 14261ac2..60e01694 100644 --- a/dns_es.md +++ b/dns_es.md @@ -25,18 +25,18 @@ También existen **tipos** de registros DNS, lo que significa que un dominio pue Tienes varias opciones. Nota que puedes cumular estas soluciones si posees varios dominios : por ejemplo, puedes tener `mi-servidor.nohost.me` utilizando la solución **1.**, et `mi-servidor.org` utilizando la solución **2.**, redirigiéndolos hacia el mismo servidor YunoHost. -1. Puedes utilizar [el servicio DNS de YunoHost](/dns_nohost_me_es), que configurará él mismo los DNS de tu instancia YunoHost. Pero en este caso, tienes que elegir un dominio terminando por `.nohost.me`, `.noho.st` o `.ynh.fr`, lo que puede tener inconvenientes (tendrás direcciones email tales como `juan@mi-servidor.noho.st`). +1. Puedes utilizar [el servicio DNS de YunoHost](/dns_nohost_me), que configurará él mismo los DNS de tu instancia YunoHost. Pero en este caso, tienes que elegir un dominio terminando por `.nohost.me`, `.noho.st` o `.ynh.fr`, lo que puede tener inconvenientes (tendrás direcciones email tales como `juan@mi-servidor.noho.st`). **Es el método recomendado si estás debutando.** -2. Puedes utilizar el servicio de DNS de tu **registrar** (Gandi, OVH, BookMyName u otro) para configurar tus nombres de dominio. Ésta es la [configuración DNS estándar](/dns_config_es). También es posible utilizar una redirección DNS local, más información sobre cómo [Acceder a su servidor desde la red local](/dns_local_network_es). -También puedes consultar las documentaciones específicas a estas varias [oficinas de registro](/registrar_es) : [Gandi](http://gandi.net), [OVH](/OVH_fr) o [BookMyName](http://bookmyname.com). +2. Puedes utilizar el servicio de DNS de tu **registrar** (Gandi, OVH, BookMyName u otro) para configurar tus nombres de dominio. Ésta es la [configuración DNS estándar](/dns_config). También es posible utilizar una redirección DNS local, más información sobre cómo [Acceder a su servidor desde la red local](/dns_local_network). +También puedes consultar las documentaciones específicas a estas varias [oficinas de registro](/registrar) : [Gandi](http://gandi.net), [OVH](/OVH) o [BookMyName](http://bookmyname.com). **Atención** : Si eliges este modo de funcionamiento, tendrás más flexibilidad, pero nada será automático. Por ejemplo si quieres utilizar `webmail.mi-servidor.org`, tendrás que añadirlo manualmente en la interfaz de tu registrar. 3. Tu instancia tiene un servicio DNS, lo que quiere decir que configura automáticamente sus registros DNS y que es posible delegarle la administración de estos registros. Por eso, tienes que indicar al **registrar** que es tu instancia Yunohost que es el servidor DNS de tu nombre de dominio creando un registro glue (a menudo denominado **glue record**) apuntando hacia la IP de tu instancia Yunohost. <br><br>**Atención** : Si eliges este modo de funcionamiento, todas las configuraciones serán automatizadas, tendrás mucha flexibilidad pero la pérdida de tu servidor potencialmente traerá muchos problemas. **Elige este método si estás muy seguro de los que estás haciendo.** -4. Una vez que tu servicio DNS está operacional, tu servidor puede utilizarlo pero hay que configurarlo, es el [revolvedor DNS](/dns_resolver_es). +4. Una vez que tu servicio DNS está operacional, tu servidor puede utilizarlo pero hay que configurarlo, es el [revolvedor DNS](/dns_resolver). ### IP Dinámica -Si la dirección IP pública cambia, sigue este [tutorial](dns_dynamicip_es). +Si la dirección IP pública cambia, sigue este [tutorial](/dns_dynamicip). diff --git a/dns_fr.md b/dns_fr.md index ef806aad..725b57f4 100644 --- a/dns_fr.md +++ b/dns_fr.md @@ -27,18 +27,18 @@ Il existe également des **types** d’enregistrement DNS, ce qui veut dire qu Plusieurs choix s’offrent à vous. Notez que vous pouvez cumuler ces solutions si vous possédez plusieurs domaines : par exemple vous pouvez avoir `mon-serveur.nohost.me` en utilisant la solution **1.**, et `mon-serveur.org` en utilisant la solution **2.**, redirigeant vers le même serveur YunoHost. -1. Vous pouvez utiliser [le service de DNS de YunoHost](/dns_nohost_me_fr), qui s’occupera de configurer tout seul les DNS de votre instance YunoHost. Vous devrez en revanche choisir un domaine se terminant par `.nohost.me`, `.noho.st` ou `.ynh.fr`, ce qui peut être inconvenant (vous aurez alors des adresses email telles que `jean@mon-serveur.noho.st`). +1. Vous pouvez utiliser [le service de DNS de YunoHost](/dns_nohost_me), qui s’occupera de configurer tout seul les DNS de votre instance YunoHost. Vous devrez en revanche choisir un domaine se terminant par `.nohost.me`, `.noho.st` ou `.ynh.fr`, ce qui peut être inconvenant (vous aurez alors des adresses email telles que `jean@mon-serveur.noho.st`). **C’est la méthode recommandée si vous débutez.** -2. Vous pouvez utiliser le service de DNS de votre **registrar** (Gandi, OVH, BookMyName ou autre) pour configurer vos noms de domaine. Voici la [configuration DNS standard](/dns_config_fr). Il est aussi possible d'utiliser une redirection DNS locale, plus d'infos sur comment [Accéder à son serveur depuis le réseau local](/dns_local_network_fr). -Vous pouvez également consulter les documentations spécifiques à ces différents [bureaux d’enregistrement](/registrar_fr) : [Gandi](http://gandi.net), [OVH](/OVH_fr) ou [BookMyName](http://bookmyname.com). +2. Vous pouvez utiliser le service de DNS de votre **registrar** (Gandi, OVH, BookMyName ou autre) pour configurer vos noms de domaine. Voici la [configuration DNS standard](/dns_config). Il est aussi possible d'utiliser une redirection DNS locale, plus d'infos sur comment [Accéder à son serveur depuis le réseau local](/dns_local_network). +Vous pouvez également consulter les documentations spécifiques à ces différents [bureaux d’enregistrement](/registrar) : [Gandi](http://gandi.net), [OVH](/OVH) ou [BookMyName](http://bookmyname.com). **Attention** : Si vous choisissez ce mode de fonctionnement, vous aurez plus de flexibilité, mais rien ne sera automatique. Par exemple si vous souhaitez utiliser `webmail.mon-serveur.org`, vous devrez l’ajouter manuellement chez votre registrar. 3. Votre instance YunoHost possède un service DNS, ce qui veut dire qu’il configure automatiquement ses enregistrements DNS, et qu’il est possible de lui en déléguer la gestion. Pour ce faire, vous devez indiquer au **registrar** que c’est votre instance YunoHost qui est le serveur DNS de votre nom de domaine en créant un enregistrement glue (souvent appelé **glue record**) pointant vers l’IP de votre instance YunoHost. <br><br>**Attention** : Si vous choisissez ce mode de fonctionnement, toutes les configurations seront automatiques, vous disposerez d’une grande flexibilité, mais la perte de votre serveur entraînera potentiellement beaucoup d’ennuis. **Choisissez cette méthode si vous êtes sûr de vous.** -4. Une fois votre service DNS opérationnel, votre serveur peut l’utiliser mais il faut le configurer, c’est le [résolveur DNS](/dns_resolver_fr). +4. Une fois votre service DNS opérationnel, votre serveur peut l’utiliser mais il faut le configurer, c’est le [résolveur DNS](/dns_resolver). ### IP Dynamique -Si l’adresse IP publique change, suivez ce [tutoriel](dns_dynamicip_fr). +Si l’adresse IP publique change, suivez ce [tutoriel](/dns_dynamicip). diff --git a/docs.md b/docs.md index 9518991a..5dd8fa41 100644 --- a/docs.md +++ b/docs.md @@ -19,13 +19,13 @@ YunoHost's documentation has 2 different sections: </div> * Project's life: - * [Frequently asked questions](/faq_en) + * [Frequently asked questions](/faq) * [Project organization](/project_organization) * [Blog](https://forum.yunohost.org/c/announcement) * [Forum](https://forum.yunohost.org) - * [Chat rooms](/chat_rooms_en) - * [Communication](/communication_en) + * [Chat rooms](/chat_rooms) + * [Communication](/communication) * [Support / Help](/help) * Use example: - * [YunoHost for non-profit organisations](/use_case_non-profit_organisations_en) + * [YunoHost for non-profit organisations](/use_case_non-profit_organisations) diff --git a/docs_ar.md b/docs_ar.md index 59be5db6..ae7479ad 100644 --- a/docs_ar.md +++ b/docs_ar.md @@ -7,7 +7,7 @@ <div class="row text-center"> <div dir="rtl" class="col col-md-4 col-md-offset-1"> -<a class="btn btn-primary btn-lg" href="/admindoc_fr"><span class="glyphicon glyphicon-lock"></span> دليل المدير</a> +<a class="btn btn-primary btn-lg" href="/admindoc"><span class="glyphicon glyphicon-lock"></span> دليل المدير</a> <p><small class="text-muted">يتطرق إلى طريقة التنصيب و إدارة السيرفر و التطبيقات</small></p> </div> @@ -19,13 +19,13 @@ </div> * Project's life: - * [Frequently asked questions](/faq_en) + * [Frequently asked questions](/faq) * [Project organization](/project_organization) * [Blog](https://forum.yunohost.org/c/announcement) * [Forum](https://forum.yunohost.org) - * [Chat rooms](/chat_rooms_en) - * [Communication](/communication_en) + * [Chat rooms](/chat_rooms) + * [Communication](/communication) * [Support / Help](/help) * استخدم مثال: - * [YunoHost للمنظمات غير الهادفة للربح](/use_case_non-profit_organisations_en) + * [YunoHost للمنظمات غير الهادفة للربح](/use_case_non-profit_organisations) diff --git a/docs_de.md b/docs_de.md index e3a73f0d..e8f57252 100644 --- a/docs_de.md +++ b/docs_de.md @@ -19,13 +19,13 @@ Die YunoHost Dokumentation ist in 2 Bereiche aufgeteilt: </div> * Das Projektleben: - * [Häufig gestellte Fragen](/faq_en) + * [Häufig gestellte Fragen](/faq) * [Projektorganisation](/project_organization) * [Blog](https://forum.yunohost.org/c/announcement) * [Forum](https://forum.yunohost.org) - * [Chaträume](/chat_rooms_en) - * [Kommunikation](/communication_en) + * [Chaträume](/chat_rooms) + * [Kommunikation](/communication) * [Support / Hilfe](/help) * Verwenden Sie ein Beispiel: - * [YunoHost für gemeinnützige Organisationen](/use_case_non-profit_organisations_en) + * [YunoHost für gemeinnützige Organisationen](/use_case_non-profit_organisations) diff --git a/docs_fr.md b/docs_fr.md index 7469efce..f8c7b56f 100644 --- a/docs_fr.md +++ b/docs_fr.md @@ -7,25 +7,25 @@ La documentation de YunoHost s’articule autour de deux sections : <div class="row text-center"> <div class="col col-md-4 col-md-offset-1"> -<a class="btn btn-primary btn-lg" href="/admindoc_fr"><span class="glyphicon glyphicon-lock"></span> Guide de l’administrateur</a> +<a class="btn btn-primary btn-lg" href="/admindoc"><span class="glyphicon glyphicon-lock"></span> Guide de l’administrateur</a> <p><small class="text-muted">Incluant l’installation, la gestion du serveur et des applications</small></p> </div> <div class="col col-md-4 col-md-offset-1"> -<a class="btn btn-danger btn-lg" href="/contributordoc_fr"><span class="glyphicon glyphicon-heart"></span> Guide du contributeur</a> +<a class="btn btn-danger btn-lg" href="/contributordoc"><span class="glyphicon glyphicon-heart"></span> Guide du contributeur</a> <p><small class="text-muted">Qui contient tout ce que vous devez savoir à propos de nous et de notre manière de travailler</small></p> </div> </div> * Vie du projet : - * [Foire aux questions](/faq_fr) - - [Organisation du projet](project_organization_fr) + * [Foire aux questions](/faq) + - [Organisation du projet](/project_organization) * [Blog](https://forum.yunohost.org/c/announcement) - [Forum](https://forum.yunohost.org) - - [Salons de discussions](/chat_rooms_fr) + - [Salons de discussions](/chat_rooms) * [Communication extérieure](/communication) - * [Support / Aide](/help_fr) + * [Support / Aide](/help) * Exemple d'utilisation: - * [YunoHost pour les organisations à but non lucratif](/use_case_non-profit_organisations_fr) + * [YunoHost pour les organisations à but non lucratif](/use_case_non-profit_organisations) diff --git a/docs_it.md b/docs_it.md index f7cdcd9a..89535377 100644 --- a/docs_it.md +++ b/docs_it.md @@ -19,13 +19,13 @@ La documentazione di YunoHost ha 2 differenti sezioni: </div> * Vita del progetto : - * [Frequently asked questions](/faq_en) + * [Frequently asked questions](/faq) * [Project organization](/project_organization) * [Blog](https://forum.yunohost.org/c/announcement) * [Forum](https://forum.yunohost.org) - * [Chat rooms](/chat_rooms_en) - * [Communication](/communication_en) - * [Supporto / Aiuto](/help_it) + * [Chat rooms](/chat_rooms) + * [Communication](/communication) + * [Supporto / Aiuto](/help) * Usa l'esempio: - * [YunoHost per le organizzazioni senza scopo di lucro](/use_case_non-profit_organisations_en) + * [YunoHost per le organizzazioni senza scopo di lucro](/use_case_non-profit_organisations) diff --git a/domains_fr.md b/domains_fr.md index b4dd22bc..f03b6e4b 100644 --- a/domains_fr.md +++ b/domains_fr.md @@ -3,7 +3,7 @@ Domaines, configuration DNS et certificats YunoHost permet de gérer et de servir plusieurs domaines sur un même serveur. Vous pouvez donc héberger, par exemple, un blog et un Nextcloud sur un premier domaine `yolo.com`, et un client de messagerie web sur un second domaine `swag.nohost.me`. Chaque domaine est automatiquement configuré pour pouvoir gérer des services web, des courriels et une messagerie instantannée XMPP. -Les domaines peuvent être gérés dans la section 'Domaine' de la webadmin, ou via la catégorie `yunohost domain` de la ligne de commande. Chaque fois que vous ajoutez un domaine, il est supposé que vous avez acheté (ou en tout cas que vous contrôliez) le domaine, de sorte que vous puissiez gérer la [configuration DNS](dns) ce celui-ci. Une exception concerne les [domaines en `.nohost.me`, `.noho.st` et `ynh.fr`](/dns_nohost_me_fr) qui sont offerts par le Projet YunoHost, et peuvent être directement intégrés avec YunoHost grâce à une configuration dynDNS automatique. (Pour limiter les abus et les coûts, une instance ne peut avoir qu'un seul domaine offert à la fois). +Les domaines peuvent être gérés dans la section 'Domaine' de la webadmin, ou via la catégorie `yunohost domain` de la ligne de commande. Chaque fois que vous ajoutez un domaine, il est supposé que vous avez acheté (ou en tout cas que vous contrôliez) le domaine, de sorte que vous puissiez gérer la [configuration DNS](dns) ce celui-ci. Une exception concerne les [domaines en `.nohost.me`, `.noho.st` et `ynh.fr`](/dns_nohost_me) qui sont offerts par le Projet YunoHost, et peuvent être directement intégrés avec YunoHost grâce à une configuration dynDNS automatique. (Pour limiter les abus et les coûts, une instance ne peut avoir qu'un seul domaine offert à la fois). Le domaine choisi lors de la postinstall est défini comme le domaine principal du serveur : c'est là que le SSO et l'interface d'administration web seront disponibles. Le domaine principal peut être modifié ultérieurement via la webadmin dans Domaines > (le domaine) > Définir par défaut, ou avec la ligne de commande `yunohost tools maindomain`. @@ -24,7 +24,7 @@ YunoHost peut générer une configuration DNS recommandée pour chaque domaine, Certificats SSL/HTTPS ---------------------- -Un autre aspect important de la configuration des domaines est le certificat SSL/HTTPS. YunoHost est intégré avec Let's Encrypt, de sorte qu'une fois que votre serveur est correctement accessible depuis n'importe qui sur Internet via le nom de domaine, l'administrateur peut demander l'installation d'un certificat Let's Encrypt. Voir la documentation sur les [certificats](certificate_fr) pour plus d'informations. +Un autre aspect important de la configuration des domaines est le certificat SSL/HTTPS. YunoHost est intégré avec Let's Encrypt, de sorte qu'une fois que votre serveur est correctement accessible depuis n'importe qui sur Internet via le nom de domaine, l'administrateur peut demander l'installation d'un certificat Let's Encrypt. Voir la documentation sur les [certificats](/certificate) pour plus d'informations. Sous-chemins vs. domaines individuels par application ----------------------------------------------------- diff --git a/email_es.md b/email_es.md index bedac75d..6bb8628f 100644 --- a/email_es.md +++ b/email_es.md @@ -11,9 +11,9 @@ Asegurarse de que la configuración esté correcta Los emails son un ecosistema complicado y una multitud de detalles puedes impedir que funcionen correctamente. Para validar que tu configuración es correcta : -- si te alojas en casa y que no tienes VPN, asegúrate de que [tu proveedor de Internet no esté bloqueando el puerto 25](isp_es) ; -- redirige los puertos siguiendo [esta documentación](isp_box_config_es) ; -- configura con cuidado los registros DNS del correo electrónico siguiendo [esta documentación](dns_config_es) ; +- si te alojas en casa y que no tienes VPN, asegúrate de que [tu proveedor de Internet no esté bloqueando el puerto 25](/isp) ; +- redirige los puertos siguiendo [esta documentación](/isp_box_config) ; +- configura con cuidado los registros DNS del correo electrónico siguiendo [esta documentación](/dns_config) ; - testa tu configuración utilizando [Mail-tester.com](https://mail-tester.com) <small>(cuidado : sólo 3 tests por dominio y por día están autorizados)</small> ; Una nota de al menos 8~9/10 es un objetivo razonable. @@ -21,7 +21,7 @@ Una nota de al menos 8~9/10 es un objetivo razonable. Clientes de mensajería ------------- -Para interactuar con el servidor de mail, o sea leer y mandar emails, puedes instalar un cliente web como Roundcube o Rainloop en tu servidor - o configurar un cliente de Desktop o móvil como descrito en [esta página][cette page](email_configure_client_es). +Para interactuar con el servidor de mail, o sea leer y mandar emails, puedes instalar un cliente web como Roundcube o Rainloop en tu servidor - o configurar un cliente de Desktop o móvil como descrito en [esta página][cette page](/email_configure_client). Los clientes Desktop o móvil tienen la ventaja de copiar tu emails en el equipo, así permitiendo la consulta desconectada de tus mensajes, y cierta protección frente a la posibilidad de un servidor averiado. @@ -40,5 +40,5 @@ Si tu servidor se pone indisponible, los correos electrónicos mandados a tu ser Más información -------------------- -- Existe una página de documentación para [migrar sus emails desde un proveedor de mensajería hacia una instancia Yunohost](email_migration_es). +- Existe una página de documentación para [migrar sus emails desde un proveedor de mensajería hacia una instancia Yunohost](/email_migration). - Para profundizar tu comprensión del correo electrónico y de sus protocolos, aquí tienes una [conferencia muy interesante](http://www.iletaitunefoisinternet.fr/lemail-par-benjamin-sonntag/index.html)(en francés). diff --git a/email_fr.md b/email_fr.md index e1c2ca08..3d259db2 100644 --- a/email_fr.md +++ b/email_fr.md @@ -40,7 +40,7 @@ Si votre serveur devient indisponible, les courriels envoyés à votre serveur r ## Formulaires pour enlever son adresse IP des listes noires Il est possible que les emails envoyés depuis votre instance YunoHost soient considérés comme du spam par les grands services de mails. Il est possible que l’adresse IP de votre serveur a autrefois été utilisé pour envoyé du spam ou que ces services de mails considèrent votre serveur comme émetteur de spams. -Pour s’assurer que l’adresse IP de votre serveur n’est pas dans ces listes et pour l’enlever dans le cas échéant suivez ce [lien](/blacklist_forms_fr). +Pour s’assurer que l’adresse IP de votre serveur n’est pas dans ces listes et pour l’enlever dans le cas échéant suivez ce [lien](/blacklist_forms). Pour aller plus loin diff --git a/email_migration.md b/email_migration.md index ed3be717..74b9388e 100644 --- a/email_migration.md +++ b/email_migration.md @@ -1,6 +1,6 @@ # Migrating email from an email provider to a YunoHost instance -*[Documentation linked to YunoHost email](/email_fr)*. +*[Documentation linked to YunoHost email](/email)*. Migration of his emails from a server to an other can be done with two recommended tools: ImapSync or Larch. diff --git a/email_migration_fr.md b/email_migration_fr.md index 0fa655b9..7e0151c6 100644 --- a/email_migration_fr.md +++ b/email_migration_fr.md @@ -1,6 +1,6 @@ # Migrer ses emails d'un ancien serveur mail vers YunoHost -*[Documentation en rapport avec l’email de YunoHost](/email_fr)*. +*[Documentation en rapport avec l’email de YunoHost](/email)*. La migration des emails d’un serveur à un autre peut se faire via deux outils recommandés : ImapSync ou Larch. diff --git a/faq.md b/faq.md index 06a77692..197a7b3d 100644 --- a/faq.md +++ b/faq.md @@ -52,7 +52,7 @@ Yes! YunoHost is multi-user and multi-domain. Some applications like *WordPress* #### Why can't I access applications via the IP address? -The [SSO](https://github.com/Kloadut/SSOwat/) (single sign-on) cannot properly authenticate users when they access your server with only its IP. If you really can't properly configure the DNS, you can temporarily work around it by [modifying the `hosts` file (last §)](dns_local_network_en) on your computer. +The [SSO](https://github.com/Kloadut/SSOwat/) (single sign-on) cannot properly authenticate users when they access your server with only its IP. If you really can't properly configure the DNS, you can temporarily work around it by [modifying the `hosts` file (last §)](/dns_local_network) on your computer. #### What's YunoHost's business model? diff --git a/faq_de.md b/faq_de.md index 2f131cd5..a2640231 100644 --- a/faq_de.md +++ b/faq_de.md @@ -40,7 +40,7 @@ Ja ! YunoHost ermöglicht das Anlegen mehrerer Benutzer und Domain-Namen. Manche #### Wieso kann ich Anwendungen nicht über die IP-Adresse erreichen ? -Die [SSO](https://github.com/Kloadut/SSOwat/) (Single Sign-on) Technik kann Benutzer nicht richtig authentifizieren, wenn sie auf den Server nur über die IP zugreifen. Wenn Sie keine Möglichkeit haben, die DNS korrekt zu konfigurieren, können Sie als temporäre Notlösung [die `Hosts` Datei (letztes §)](dns_local_network_en) auf Ihrem Computer modifizieren. +Die [SSO](https://github.com/Kloadut/SSOwat/) (Single Sign-on) Technik kann Benutzer nicht richtig authentifizieren, wenn sie auf den Server nur über die IP zugreifen. Wenn Sie keine Möglichkeit haben, die DNS korrekt zu konfigurieren, können Sie als temporäre Notlösung [die `Hosts` Datei (letztes §)](/dns_local_network) auf Ihrem Computer modifizieren. #### Was ist das Geschäftsmodell von YunoHost ? diff --git a/faq_fr.md b/faq_fr.md index cac06172..9308206d 100644 --- a/faq_fr.md +++ b/faq_fr.md @@ -49,7 +49,7 @@ On peut tout à fait héberger plusieurs sites web car YunoHost est multi-domain #### Pourquoi je ne peux pas accéder à mes applications avec l’adresse IP ? -Pour des raisons techniques, le [SSO](https://github.com/YunoHost/SSOwat/) ne permet pas aux utilisateurs de se connecter à l’espace utilisateur lorsque l’on accède au serveur uniquement avec l’IP. Si vous ne pouvez réellement pas configurer un nom de domaine, une solution temporaire peut être de modifier le [fichier `hosts` (dernier §)](dns_local_network_fr) de son ordinateur. +Pour des raisons techniques, le [SSO](https://github.com/YunoHost/SSOwat/) ne permet pas aux utilisateurs de se connecter à l’espace utilisateur lorsque l’on accède au serveur uniquement avec l’IP. Si vous ne pouvez réellement pas configurer un nom de domaine, une solution temporaire peut être de modifier le [fichier `hosts` (dernier §)](/dns_local_network) de son ordinateur. #### Quel est le modèle économique de YunoHost ? diff --git a/filezilla_fr.md b/filezilla_fr.md index 6fa48eca..1eb993e6 100644 --- a/filezilla_fr.md +++ b/filezilla_fr.md @@ -50,7 +50,7 @@ Installez le programme et lancez *Filezilla*.  -2. Dans le panneau de droite, vous pouvez aller dans `/home/yunohost.backup/archives/` pour trouver les archives de [sauvegardes](/backup_fr). +2. Dans le panneau de droite, vous pouvez aller dans `/home/yunohost.backup/archives/` pour trouver les archives de [sauvegardes](/backup).  diff --git a/hardware_es.md b/hardware_es.md index e10c13f5..7fb2556d 100644 --- a/hardware_es.md +++ b/hardware_es.md @@ -5,7 +5,7 @@ YunoHost puede ser instalado en este hardware : - 'Viejos' ordenadores de escritorio ou portátiles ; - Servidores remotos, también llamado Virtual Private Servers (VPS). -Los guías de instalación se encuentran en [esta página](/install_es). +Los guías de instalación se encuentran en [esta página](/install). ### Configuración minimal diff --git a/hardware_fr.md b/hardware_fr.md index 389cf301..93b7ebe8 100644 --- a/hardware_fr.md +++ b/hardware_fr.md @@ -5,7 +5,7 @@ YunoHost peut être installé sur les types de matériel suivant : - 'Vieux' ordinateurs de bureau ou portables ; - Serveurs distants, aussi appelé Virtual Private Servers (VPS). -Les guides d'installations peuvent être trouvés sur [cette page](/install_fr). +Les guides d'installations peuvent être trouvés sur [cette page](/install). ### Configuration minimale diff --git a/index.md b/index.md index 4742bd5f..4e960d64 100644 --- a/index.md +++ b/index.md @@ -93,7 +93,7 @@ <div class="col-md-4 col-md-offset-4 button-list"> <a class="btn btn-lg btn-block btn-info" href="/docs"><span class="glyphicon glyphicon-book"></span> Documentation</a> - <a class="btn btn-lg btn-block btn-danger btn-support" href="/help_fr"><span class="glyphicon glyphicon-comment"></span> Forum and chat</a> + <a class="btn btn-lg btn-block btn-danger btn-support" href="/help"><span class="glyphicon glyphicon-comment"></span> Forum and chat</a> <a class="btn btn-lg btn-block btn-success" href="/contribute"><span class="glyphicon glyphicon-heart"></span> Get involved</a> <a class="btn btn-lg btn-block btn-primary" href="https://donate.yunohost.org/" style="background-color: #ffd236; border-color: #ffd236;"><span class="glyphicon glyphicon-usd"></span> Donate</a> </div> diff --git a/index_ar.md b/index_ar.md index 3a495680..ba1d79d0 100644 --- a/index_ar.md +++ b/index_ar.md @@ -20,7 +20,7 @@ <div dir="auto" class="main-links hidden-xs"> <a href="/whatsyunohost">عن واي يونوهوست</a> <span class="colored-bar">•</span> <a href="https://forum.yunohost.org/c/announcement" target="_blank">آخر المستجدات</a> <span class="colored-bar">•</span> - <a href="/docs_ar">المستندات</a> <span class="colored-bar">•</span> + <a href="/docs">المستندات</a> <span class="colored-bar">•</span> <a href="https://donate.yunohost.org/">تبرع/a> </div> @@ -64,7 +64,7 @@ </div> <div class="col-md-7 text-right"> <h1>استمتعوا <small>بتطبيقات الويب الخاصة بكم و انْشِئُوا موطنكم الصغير على الإنترنت</small></h1> - <p><br /><a href="/apps_ar">قائمة التطبيقات المتوفرة</a></p> + <p><br /><a href="/apps">قائمة التطبيقات المتوفرة</a></p> </div> </div> @@ -88,17 +88,17 @@ <div class="col-md-4 button-list"> <a class="btn btn-lg btn-block btn-primary" href="/whatsyunohost">ما هو YunoHost</a> - <a class="btn btn-lg btn-block btn-info" href="/docs_ar">الدليل</a> + <a class="btn btn-lg btn-block btn-info" href="/docs">الدليل</a> <a class="btn btn-lg btn-block btn-success" href="/contribute">كيف يمكنكم المساهمة</a> <a class="btn btn-lg btn-block btn-warning" href="https://forum.yunohost.org" target="_blank">المنتدى</a> <a class="btn btn-lg btn-block btn-default" href="chat_rooms" target="_blank">غُرف المحادثة</a> <a class="btn btn-lg btn-block btn-danger" href="https://forum.yunohost.org/c/announcement">آخر الأخبار</a> - <a class="btn btn-lg btn-block btn-danger btn-support" href="/help_ar">المساعدة</a> + <a class="btn btn-lg btn-block btn-danger btn-support" href="/help">المساعدة</a> </div> <div class="col-md-7 text-right"> <h1>إكتشفوا <small>قدرات خادمكم، ولماذا يهمكم الأمر</small></h1> - <p><br /><a href="/docs_ar">إطلعوا على الدليل</a></p> + <p><br /><a href="/docs">إطلعوا على الدليل</a></p> </div> </div> diff --git a/index_de.md b/index_de.md index b324ad47..be0557bd 100644 --- a/index_de.md +++ b/index_de.md @@ -92,9 +92,9 @@ Self-Hosting für alle ermöglicht.</small></h1> <a class="btn btn-lg btn-block btn-info" href="/docs">Dokumentation</a> <a class="btn btn-lg btn-block btn-success" href="/contribute">Mach mit!</a> <a class="btn btn-lg btn-block btn-warning" href="https://forum.yunohost.org/" target="_blank">Forum</a> - <a class="btn btn-lg btn-block btn-default" href="chat_rooms_de" target="_blank">Chat</a> + <a class="btn btn-lg btn-block btn-default" href="/chat_rooms" target="_blank">Chat</a> <a class="btn btn-lg btn-block btn-danger" href="https://forum.yunohost.org/c/announcement">Neuste Nachrichten</a> - <a class="btn btn-lg btn-block btn-danger btn-support" href="/help_de">Hilfe</a> + <a class="btn btn-lg btn-block btn-danger btn-support" href="/help">Hilfe</a> </div> <div class="col-md-7 text-right"> <h1>Entdecke <small> die Möglichkeiten, die Du mit einem eigenen Server hast<br> – und warum Self-Hosting Sinn macht.</small></h1> diff --git a/index_es.md b/index_es.md index b408427d..a63a7942 100644 --- a/index_es.md +++ b/index_es.md @@ -91,7 +91,7 @@ <a class="btn btn-lg btn-block btn-info" href="/docs">Documentación</a> <a class="btn btn-lg btn-block btn-success" href="/contribute">Colaborar</a> <a class="btn btn-lg btn-block btn-warning" href="https://forum.yunohost.org/" target="_blank">Foro</a> - <a class="btn btn-lg btn-block btn-default" href="chat_rooms_en" target="_blank">Salas de chat</a> + <a class="btn btn-lg btn-block btn-default" href="/chat_rooms" target="_blank">Salas de chat</a> <a class="btn btn-lg btn-block btn-danger" href="https://forum.yunohost.org/c/announcement">Últimas noticias</a> <a class="btn btn-lg btn-block btn-danger btn-support" href="/help">Ayuda</a> </div> diff --git a/index_fr.md b/index_fr.md index 24ea75a8..a1bd6461 100644 --- a/index_fr.md +++ b/index_fr.md @@ -17,9 +17,9 @@ </div> <div class="main-links hidden-xs"> - <a href="/whatsyunohost_fr">À propos</a> <span class="colored-bar">•</span> + <a href="/whatsyunohost">À propos</a> <span class="colored-bar">•</span> <a href="https://forum.yunohost.org/c/announcement" target="_blank">Dernières nouvelles</a> <span class="colored-bar">•</span> - <a href="/docs_fr">Documentation</a> <span class="colored-bar">•</span> + <a href="/docs">Documentation</a> <span class="colored-bar">•</span> <a href="https://donate.yunohost.org/">Faire un don</a> </div> @@ -34,8 +34,8 @@ </div> <div class="call-to-action"> - <a class="btn btn-primary btn-lg" href="/try_fr">Essayer</a> - <a class="btn btn-success btn-lg" href="/install_fr">Installer</a> + <a class="btn btn-primary btn-lg" href="/try">Essayer</a> + <a class="btn btn-success btn-lg" href="/install">Installer</a> <h2 style="margin-top: 0"><small><a href="https://forum.yunohost.org/c/announcement">Dernières nouvelles</a></small></h2> </div> @@ -44,7 +44,7 @@ <div class="row cf"> <div class="col-md-7 text-right"> <h1>Installez <small>votre serveur simplement, vous avez déjà tout ce qu’il faut à la maison</small></h1> - <p><a href="/hardware_fr">Voir les prérequis</a></p> + <p><a href="/hardware">Voir les prérequis</a></p> </div> <div class="col-md-4"> <div class="feature-pic"> @@ -63,7 +63,7 @@ </div> <div class="col-md-7"> <h1>Gérez <small>votre serveur depuis une interface web simple et propre</small></h1> - <p><br /><a href="/try_fr">Essayez l’interface d’administration</a></p> + <p><br /><a href="/try">Essayez l’interface d’administration</a></p> </div> </div> @@ -90,7 +90,7 @@ <div class="col-md-4 col-md-offset-4 button-list"> <a class="btn btn-lg btn-block btn-info" href="/docs"><span class="glyphicon glyphicon-book"></span> Documentation</a> - <a class="btn btn-lg btn-block btn-danger btn-support" href="/help_fr"><span class="glyphicon glyphicon-comment"></span> Forum et chat</a> + <a class="btn btn-lg btn-block btn-danger btn-support" href="/help"><span class="glyphicon glyphicon-comment"></span> Forum et chat</a> <a class="btn btn-lg btn-block btn-success" href="/contribute"><span class="glyphicon glyphicon-heart"></span> Contribuer</a> <a class="btn btn-lg btn-block btn-primary" href="https://donate.yunohost.org/" style="background-color: #ffd236; border-color: #ffd236;"><span class="glyphicon glyphicon-usd"></span> Faire un don</a> </div> diff --git a/index_it.md b/index_it.md index 970605f6..45d2019c 100644 --- a/index_it.md +++ b/index_it.md @@ -92,9 +92,9 @@ <a class="btn btn-lg btn-block btn-info" href="/docs">Documentazione</a> <a class="btn btn-lg btn-block btn-success" href="/contribute">Contribuisci</a> <a class="btn btn-lg btn-block btn-warning" href="https://forum.yunohost.org/" target="_blank">Forum</a> - <a class="btn btn-lg btn-block btn-default" href="chat_rooms_en" target="_blank">Chat</a> + <a class="btn btn-lg btn-block btn-default" href="/chat_rooms" target="_blank">Chat</a> <a class="btn btn-lg btn-block btn-danger" href="https://forum.yunohost.org/c/announcement">Ultime notizie</a> - <a class="btn btn-lg btn-block btn-danger btn-support" href="/help_fr">Supporto</a> + <a class="btn btn-lg btn-block btn-danger btn-support" href="/help">Supporto</a> </div> <div class="col-md-7 text-right"> <h1>Esplora <small>cosa puoi fare con un server, e perché è importante</small></h1> diff --git a/index_oc.md b/index_oc.md index 194bf8e2..600c81c9 100644 --- a/index_oc.md +++ b/index_oc.md @@ -17,9 +17,9 @@ </div> <div class="main-links hidden-xs"> - <a href="/whatsyunohost_fr">A prepaus</a> <span class="colored-bar">•</span> + <a href="/whatsyunohost">A prepaus</a> <span class="colored-bar">•</span> <a href="https://forum.yunohost.org/c/announcement" target="_blank">Darrièras novèlas</a> <span class="colored-bar">•</span> - <a href="/docs_fr">Documentacion</a> + <a href="/docs">Documentacion</a> </div> </div><!-- teasing-part --> @@ -33,8 +33,8 @@ </div> <div class="call-to-action"> - <a class="btn btn-primary btn-lg" href="/try_fr">Ensajar</a> - <a class="btn btn-success btn-lg" href="/install_fr">Installar</a> + <a class="btn btn-primary btn-lg" href="/try">Ensajar</a> + <a class="btn btn-success btn-lg" href="/install">Installar</a> <p class="text-muted"><small><a href="https://forum.yunohost.org/t/yunohost-3-6-release-sortie-de-yunohost-3-6/8359">YunoHost v3.6</a></small></p> </div> @@ -43,7 +43,7 @@ <div class="row cf"> <div class="col-md-7"> <h1>Installatz <small>vòstre servidor simplament, avètz ja tot çò que cal a l’ostal</small></h1> - <p><a href="/hardware_fr">Far veire los requistes</a></p> + <p><a href="/hardware">Far veire los requistes</a></p> </div> <div class="col-md-4"> <div class="feature-pic"> @@ -62,7 +62,7 @@ </div> <div class="col-md-7 text-right"> <h1>Profitatz <small>de vòstras aplicacions web e fabricatz vòstre canton d’Internet</small></h1> - <p><br /><a href="/apps_fr">Lista de las aplicacions disponiblas</a></p> + <p><br /><a href="/apps">Lista de las aplicacions disponiblas</a></p> </div> </div> @@ -71,7 +71,7 @@ <div class="row cf"> <div class="col-md-7"> <h1>Gerissètz <small>vòstre servidor coma volgatz : via web, mobil o en linha de comanda</small></h1> - <p><br /><a href="/try_fr">Ensajar l’interfàcia d’administracion</a></p> + <p><br /><a href="/try">Ensajar l’interfàcia d’administracion</a></p> </div> <div class="col-md-4"> <div class="feature-pic"> @@ -85,18 +85,18 @@ <div class="row cf"> <div class="col-md-4 button-list"> - <a class="btn btn-lg btn-block btn-primary" href="/whatsyunohost_fr">Qu’es aquò YunoHost ?</a> - <a class="btn btn-lg btn-block btn-info" href="/docs_fr">Documentacion</a> - <a class="btn btn-lg btn-block btn-success" href="/contribute_fr">Cossí contribuir</a> + <a class="btn btn-lg btn-block btn-primary" href="/whatsyunohost">Qu’es aquò YunoHost ?</a> + <a class="btn btn-lg btn-block btn-info" href="/docs">Documentacion</a> + <a class="btn btn-lg btn-block btn-success" href="/contribute">Cossí contribuir</a> <a class="btn btn-lg btn-block btn-warning" href="https://forum.yunohost.org" target="_blank">Forum</a> - <a class="btn btn-lg btn-block btn-default" href="chat_rooms_fr" target="_blank">Salas de discussions</a> + <a class="btn btn-lg btn-block btn-default" href="/chat_rooms" target="_blank">Salas de discussions</a> <a class="btn btn-lg btn-block btn-danger" href="https://forum.yunohost.org/c/announcement">Darrièras novèlas</a> - <a class="btn btn-lg btn-block btn-danger btn-support" href="/help_fr">Assisténcia</a> + <a class="btn btn-lg btn-block btn-danger btn-support" href="/help">Assisténcia</a> </div> <div class="col-md-7 text-right"> <h1>Exploratz <small>las possibilitats de vòstre servidor, e aprenètz perque es important</small></h1> - <p><br /><a href="/docs_fr">Legir la documentacion</a></p> + <p><br /><a href="/docs">Legir la documentacion</a></p> </div> </div> diff --git a/install_ar.md b/install_ar.md index 65c5dde5..67afb69a 100644 --- a/install_ar.md +++ b/install_ar.md @@ -14,11 +14,11 @@ <div class="row"> <div class="col col-md-3 text-center"> -<a href="/try_fr"><img height=150 src="/images/logo.png" style="vertical-align:bottom"><b><p>الخادوم التجريبي</p></b></a> +<a href="/try"><img height=150 src="/images/logo.png" style="vertical-align:bottom"><b><p>الخادوم التجريبي</p></b></a> </div> <div class="col col-md-3 text-center"> -<a href="/install_on_virtualbox_fr"><img src="/images/virtualbox.png" height=150 style="vertical-align:bottom"><b><p>التجريب على خادوم إفتراضي</p></b></a> +<a href="/install_on_virtualbox"><img src="/images/virtualbox.png" height=150 style="vertical-align:bottom"><b><p>التجريب على خادوم إفتراضي</p></b></a> </div> </div> @@ -32,15 +32,15 @@ <div class="row"> <div class="col col-md-3 text-center"> -<a href="/install_on_raspberry_fr"><img src="/images/raspberrypi.jpg" height=150 style="vertical-align:bottom"><b><p>على راسبيري باي</p></b></a> +<a href="/install_on_raspberry"><img src="/images/raspberrypi.jpg" height=150 style="vertical-align:bottom"><b><p>على راسبيري باي</p></b></a> </div> <div class="col col-md-3 text-center"> -<a href="/install_on_arm_board_fr"><img src="/images/cubieboard2.png" height=150 style="vertical-align:bottom"><b><p dir="rtl">على بطاقة أي أر آم ARM</p></b></a> +<a href="/install_on_arm_board"><img src="/images/cubieboard2.png" height=150 style="vertical-align:bottom"><b><p dir="rtl">على بطاقة أي أر آم ARM</p></b></a> </div> <div class="col col-md-3 text-center"> -<a href="/install_iso_fr"><img src="/images/computer.png" height=150 style="vertical-align:bottom"><b><p>على حاسوب عادي</p></b></a> +<a href="/install_iso"><img src="/images/computer.png" height=150 style="vertical-align:bottom"><b><p>على حاسوب عادي</p></b></a> </div> </div> @@ -58,7 +58,7 @@ <div class="row"> <div class="block-center text-center"> -<a href="/install_on_vps_fr"><img src="/images/vps.png" height=150 style="vertical-align:bottom; text-align:center"><b><p dir="rtl">على خادوم مُستضاف أو خادوم إفتراضي خاص (VPS)</p></b></a> +<a href="/install_on_vps"><img src="/images/vps.png" height=150 style="vertical-align:bottom; text-align:center"><b><p dir="rtl">على خادوم مُستضاف أو خادوم إفتراضي خاص (VPS)</p></b></a> </div> </div> @@ -72,7 +72,7 @@ <div class="row"> <div class="col col-md-3 text-center"> -<a href="/install_on_debian_fr"><img height=150 src="/images/debian-logo.png" style="vertical-align:bottom"> +<a href="/install_on_debian"><img height=150 src="/images/debian-logo.png" style="vertical-align:bottom"> <b><p>على ديبيان 9 / ستريتش</p></b></a> </div> diff --git a/install_es.md b/install_es.md index 3c3fb448..cb16720a 100644 --- a/install_es.md +++ b/install_es.md @@ -1,6 +1,6 @@ # Guía de instalación -Existen varias maneras de instalar YunoHost. El método y el hardware difieren un poco si quieres instalarlo en tu casa o en acceso remoto : **[ver el hardware compatible](/hardware_es)** +Existen varias maneras de instalar YunoHost. El método y el hardware difieren un poco si quieres instalarlo en tu casa o en acceso remoto : **[ver el hardware compatible](/hardware)** Esta página enumera varios tipos de instalaciones, clasificados por categorías. @@ -11,11 +11,11 @@ Esta página enumera varios tipos de instalaciones, clasificados por categorías <div class="row"> <div class="col col-md-3 text-center"> -<a href="/try_es"><img height=150 src="/images/logo.png" style="vertical-align:bottom"><b><p>Servidor de demo</p></b></a> +<a href="/try"><img height=150 src="/images/logo.png" style="vertical-align:bottom"><b><p>Servidor de demo</p></b></a> </div> <div class="col col-md-3 text-center"> -<a href="/install_on_virtualbox_es"><img src="/images/virtualbox.png" height=150 style="vertical-align:bottom"><b><p>Probar en una máquina virtual</p></b></a> +<a href="/install_on_virtualbox"><img src="/images/virtualbox.png" height=150 style="vertical-align:bottom"><b><p>Probar en una máquina virtual</p></b></a> </div> </div> @@ -29,15 +29,15 @@ Esta página enumera varios tipos de instalaciones, clasificados por categorías <div class="row"> <div class="col col-md-3 text-center"> -<a href="/install_on_raspberry_es"><img src="/images/raspberrypi.jpg" height=150 style="vertical-align:bottom"><b><p>En un Raspberry Pi</p></b></a> +<a href="/install_on_raspberry"><img src="/images/raspberrypi.jpg" height=150 style="vertical-align:bottom"><b><p>En un Raspberry Pi</p></b></a> </div> <div class="col col-md-3 text-center"> -<a href="/install_on_arm_board_es"><img src="/images/olinuxino.jpg" height=150 style="vertical-align:bottom; padding:20px"><b><p>En un ARM board</p></b></a> +<a href="/install_on_arm_board"><img src="/images/olinuxino.jpg" height=150 style="vertical-align:bottom; padding:20px"><b><p>En un ARM board</p></b></a> </div> <div class="col col-md-3 text-center"> -<a href="/install_iso_es"><img src="/images/computer.png" height=150 style="vertical-align:bottom"><b><p>En un ordenador estándar</p></b></a> +<a href="/install_iso"><img src="/images/computer.png" height=150 style="vertical-align:bottom"><b><p>En un ordenador estándar</p></b></a> </div> </div> @@ -55,7 +55,7 @@ Esta página enumera varios tipos de instalaciones, clasificados por categorías <div class="row"> <div class="block-center text-center"> -<a href="/install_on_vps_es"><img src="/images/vps.png" height=150 style="vertical-align:bottom; text-align:center"><b><p>En un servidor dedicado o virtual (VPS)</p></b></a> +<a href="/install_on_vps"><img src="/images/vps.png" height=150 style="vertical-align:bottom; text-align:center"><b><p>En un servidor dedicado o virtual (VPS)</p></b></a> </div> </div> @@ -69,7 +69,7 @@ Esta página enumera varios tipos de instalaciones, clasificados por categorías <div class="row"> <div class="col col-md-3 text-center"> -<a href="/install_on_debian_es"><img height=150 src="/images/debian-logo.png" style="vertical-align:bottom"> +<a href="/install_on_debian"><img height=150 src="/images/debian-logo.png" style="vertical-align:bottom"> <b><p>Sur Debian 9/Stretch</p></b></a> </div> diff --git a/install_fr.md b/install_fr.md index a6ceeac1..7521f412 100644 --- a/install_fr.md +++ b/install_fr.md @@ -1,6 +1,6 @@ # Guide d’installation -Il existe plusieurs manières d’installer YunoHost. La méthode d’installation diffère légèrement si vous souhaitez l’installer chez vous ou à distance, et du matériel utilisé : **[voir le matériel compatible](/hardware_fr)** +Il existe plusieurs manières d’installer YunoHost. La méthode d’installation diffère légèrement si vous souhaitez l’installer chez vous ou à distance, et du matériel utilisé : **[voir le matériel compatible](/hardware)** Cette page liste plusieurs types d’installations, classés par catégories. @@ -11,11 +11,11 @@ Cette page liste plusieurs types d’installations, classés par catégories. <div class="row"> <div class="col col-md-3 text-center"> -<a href="/try_fr"><img height=150 src="/images/logo.png" style="vertical-align:bottom"><b><p>Serveur de démo</p></b></a> +<a href="/try"><img height=150 src="/images/logo.png" style="vertical-align:bottom"><b><p>Serveur de démo</p></b></a> </div> <div class="col col-md-3 text-center"> -<a href="/install_on_virtualbox_fr"><img src="/images/virtualbox.png" height=150 style="vertical-align:bottom"><b><p>Essayer dans une machine virtuelle</p></b></a> +<a href="/install_on_virtualbox"><img src="/images/virtualbox.png" height=150 style="vertical-align:bottom"><b><p>Essayer dans une machine virtuelle</p></b></a> </div> </div> @@ -29,7 +29,7 @@ Cette page liste plusieurs types d’installations, classés par catégories. <div class="row"> <div class="col col-md-3 text-center"> -<a href="/install_on_raspberry_fr"><img src="/images/raspberrypi.jpg" height=150 style="vertical-align:bottom"><b><p>Sur un Raspberry Pi</p></b></a> +<a href="/install_on_raspberry"><img src="/images/raspberrypi.jpg" height=150 style="vertical-align:bottom"><b><p>Sur un Raspberry Pi</p></b></a> </div> <div class="col col-md-3 text-center"> @@ -37,7 +37,7 @@ Cette page liste plusieurs types d’installations, classés par catégories. </div> <div class="col col-md-3 text-center"> -<a href="/install_iso_fr"><img src="/images/computer.png" height=150 style="vertical-align:bottom"><b><p>Sur un ordinateur standard</p></b></a> +<a href="/install_iso"><img src="/images/computer.png" height=150 style="vertical-align:bottom"><b><p>Sur un ordinateur standard</p></b></a> </div> </div> @@ -55,7 +55,7 @@ Cette page liste plusieurs types d’installations, classés par catégories. <div class="row"> <div class="block-center text-center"> -<a href="/install_on_vps_fr"><img src="/images/vps.png" height=150 style="vertical-align:bottom; text-align:center"><b><p>Sur un serveur dédié ou virtuel (VPS)</p></b></a> +<a href="/install_on_vps"><img src="/images/vps.png" height=150 style="vertical-align:bottom; text-align:center"><b><p>Sur un serveur dédié ou virtuel (VPS)</p></b></a> </div> </div> @@ -69,7 +69,7 @@ Cette page liste plusieurs types d’installations, classés par catégories. <div class="row"> <div class="col col-md-3 text-center"> -<a href="/install_on_debian_fr"><img height=150 src="/images/debian-logo.png" style="vertical-align:bottom"> +<a href="/install_on_debian"><img height=150 src="/images/debian-logo.png" style="vertical-align:bottom"> <b><p>Sur Debian 9/Stretch</p></b></a> </div> diff --git a/install_iso_es.md b/install_iso_es.md index 91de3195..51b5889d 100644 --- a/install_iso_es.md +++ b/install_iso_es.md @@ -1,6 +1,6 @@ # Instalación en un ordenador -*Encontrar otros medios de instalar Yunohost **[aquí](/install_es)**.* +*Encontrar otros medios de instalar Yunohost **[aquí](/install)**.* ## Prerrequisitos @@ -10,7 +10,7 @@ * Un ordenador compatible x86 dedicado a YunoHost : portátil, netbook, ordenador de escritorio. Puedes reutilizar calquiera máquina con **256 Mo de RAM mínimo** * Otro ordenador para examinar esta guía y acceder a tu servidor -* Un [proveedor de Internet ético](/isp_es), de preferencia con acceso de buena velocidad (ascendente) +* Un [proveedor de Internet ético](/isp), de preferencia con acceso de buena velocidad (ascendente) * Una **memoria USB** con capacidad mínima de 1Go **O** un **CD en blanco** estándar * ***Casos particulares*** : si tu servidor no tiene tarjeta gráfica, hay que preparar un iso que se inicie sobre el puerto de serie](https://github.com/luffah/debian-mkserialiso). @@ -18,13 +18,13 @@ ## Etapas de instalación -<a class="btn btn-lg btn-default" href="/images_es">0. Descargar la imagen ISO</a> +<a class="btn btn-lg btn-default" href="/images">0. Descargar la imagen ISO</a> -<a class="btn btn-lg btn-default" href="/burn_or_copy_iso_es">1. Copiar la imagen ISO</a> +<a class="btn btn-lg btn-default" href="/burn_or_copy_iso">1. Copiar la imagen ISO</a> -<a class="btn btn-lg btn-default" href="/boot_and_graphical_install_es">2. Encender e instalar</a> +<a class="btn btn-lg btn-default" href="/boot_and_graphical_install">2. Encender e instalar</a> -<a class="btn btn-lg btn-default" href="/postinstall_es">3. Post-instalación</a> +<a class="btn btn-lg btn-default" href="/postinstall">3. Post-instalación</a> --- diff --git a/install_iso_fr.md b/install_iso_fr.md index 043b5198..85bddef8 100644 --- a/install_iso_fr.md +++ b/install_iso_fr.md @@ -1,6 +1,6 @@ # Installation sur ordinateur -*Trouvez d’autres moyens d’installer YunoHost **[ici](/install_fr)**.* +*Trouvez d’autres moyens d’installer YunoHost **[ici](/install)**.* ## Prérequis @@ -10,7 +10,7 @@ * Un matériel compatible x86 dédié à YunoHost : portable, netbook, ordinateur. Vous pouvez réutiliser n’importe quelle machine avec **256 Mo de RAM minimum** * 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 de téléversement (débit montant) +* Un [fournisseur d’accès correct](/isp), de préférence avec une bonne vitesse de téléversement (débit montant) * Une **clé USB** d’une capacité minimum d’1Go **OU** un **CD vierge** standard * ***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). @@ -18,13 +18,13 @@ ## Étapes d’installation -<a class="btn btn-lg btn-default" href="/images_fr">0. Télécharger l'image ISO de YunoHost</a> +<a class="btn btn-lg btn-default" href="/images">0. Télécharger l'image ISO de YunoHost</a> -<a class="btn btn-lg btn-default" href="/burn_or_copy_iso_fr">1. Flasher l’image ISO sur une clef USB</a> +<a class="btn btn-lg btn-default" href="/burn_or_copy_iso">1. Flasher l’image ISO sur une clef USB</a> -<a class="btn btn-lg btn-default" href="/boot_and_graphical_install_fr">2. Démarrer la machine et installer YunoHost</a> +<a class="btn btn-lg btn-default" href="/boot_and_graphical_install">2. Démarrer la machine et installer YunoHost</a> -<a class="btn btn-lg btn-default" href="/postinstall_fr">3. Effectuer la configuration initiale (post-installation)</a> +<a class="btn btn-lg btn-default" href="/postinstall">3. Effectuer la configuration initiale (post-installation)</a> --- diff --git a/install_iso_it.md b/install_iso_it.md index dfec6cdd..b16d068e 100644 --- a/install_iso_it.md +++ b/install_iso_it.md @@ -1,6 +1,6 @@ # Installazione in un computer -*Altri modi per installare YunoHost **[Clicca qui](/install_it)**.* +*Altri modi per installare YunoHost **[Clicca qui](/install)**.* ### Requisiti diff --git a/install_manually_es.md b/install_manually_es.md index c5120e0a..8f273361 100644 --- a/install_manually_es.md +++ b/install_manually_es.md @@ -8,7 +8,7 @@ curl https://install.yunohost.org | bash <small>*(Si `curl` no está instalado en tu sistema, tal vez tendrás que instalarlo con `apt install curl`. De otro modo, si el comando no muestra nada, puedes intentar `apt install ca-certificates`)*</small> -Cuando la instalación esté terminada, habrá que [**proceder a la post-instalación**](/postinstall_es) +Cuando la instalación esté terminada, habrá que [**proceder a la post-instalación**](/postinstall) --- diff --git a/install_on_arm_board.md b/install_on_arm_board.md index f6f70aa9..9703b54f 100644 --- a/install_on_arm_board.md +++ b/install_on_arm_board.md @@ -43,10 +43,10 @@ YunoHost doesn't yet support ARM64 boards. For more information, see [this issue <a class="btn btn-lg btn-default" href="https://www.armbian.com/download/">0. Download the ARMbian image for your board</a> -<a class="btn btn-lg btn-default" href="/copy_image_fr">1. Flash the SD card with the image</a> +<a class="btn btn-lg btn-default" href="/copy_image">1. Flash the SD card with the image</a> -<a class="btn btn-lg btn-default" href="/plug_and_boot_fr">2. Plug & boot</a> +<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Plug & boot</a> -<a class="btn btn-lg btn-default" href="/ssh_fr">3. Connect to your server with SSH</a> +<a class="btn btn-lg btn-default" href="/ssh">3. Connect to your server with SSH</a> -<a class="btn btn-lg btn-default" href="/install_manually_fr">4. Follow the generic install procedure</a> +<a class="btn btn-lg btn-default" href="/install_manually">4. Follow the generic install procedure</a> diff --git a/install_on_arm_board_es.md b/install_on_arm_board_es.md index 26477bf7..8a3d5278 100644 --- a/install_on_arm_board_es.md +++ b/install_on_arm_board_es.md @@ -1,6 +1,6 @@ # Instalar Yunohost en una tarjeta ARM -*Encontrar otros medios de instalar Yunohost **[aquí](/install_es)**.* +*Encontrar otros medios de instalar Yunohost **[aquí](/install)**.* <center> <img src="/images/olinuxino.jpg" width=250 style="padding-bottom:20px"> @@ -19,21 +19,21 @@ YunoHost todavía no es compatible con las tarjetas ARM64. Para obtener más inf - Un adaptador de corriente para alimentar la tarjeta ; - Una tarjeta microSD : al menos **8 Go** y **Clase 10** (por ejemplo una [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ; - Un cable ethernet/RJ-45 para conectar la carte con el router / caja internet. (Con el Raspberry Pi 0, puedes conectar tu tarjeta con un cable OTG y un adaptador Wifi USB.) -- Un [proveedor de Internet ético](/isp_es), de preferencia con una buena velocidad de upload. +- Un [proveedor de Internet ético](/isp), de preferencia con una buena velocidad de upload. --- ## Instalación con la imagen pre-instalada (recomendada) -<a class="btn btn-lg btn-default" href="/images_es">0. Descargar la imagen pre-instalada para tu tarjeta ARM</a><br><small>Si no existe una imagen dedicada a tu tarjeta, puedes seguir la sección "Instalación encima de ARMbian".</small> +<a class="btn btn-lg btn-default" href="/images">0. Descargar la imagen pre-instalada para tu tarjeta ARM</a><br><small>Si no existe una imagen dedicada a tu tarjeta, puedes seguir la sección "Instalación encima de ARMbian".</small> -<a class="btn btn-lg btn-default" href="/copy_image_es">1. Poner la imagen en tu tarjeta SD</a> +<a class="btn btn-lg btn-default" href="/copy_image">1. Poner la imagen en tu tarjeta SD</a> -<a class="btn btn-lg btn-default" href="/plug_and_boot_es">2. Conectar y encender</a> +<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Conectar y encender</a> -<a class="btn btn-lg btn-default" href="/ssh_es">3. Conectarse en SSH</a> +<a class="btn btn-lg btn-default" href="/ssh">3. Conectarse en SSH</a> -<a class="btn btn-lg btn-default" href="/postinstall_es">4. Proceder a la post-instalación</a> +<a class="btn btn-lg btn-default" href="/postinstall">4. Proceder a la post-instalación</a> --- @@ -41,11 +41,11 @@ YunoHost todavía no es compatible con las tarjetas ARM64. Para obtener más inf <a class="btn btn-lg btn-default" href="https://www.armbian.com/download/">0. Descargar la imagen ARMbian para tu tarjeta ARM</a> -<a class="btn btn-lg btn-default" href="/copy_image_es">1. Poner la imagen en tu tarjeta SD</a> +<a class="btn btn-lg btn-default" href="/copy_image">1. Poner la imagen en tu tarjeta SD</a> -<a class="btn btn-lg btn-default" href="/plug_and_boot_es">2. Conectar y encender</a> +<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Conectar y encender</a> -<a class="btn btn-lg btn-default" href="/ssh_es">3. Conectarse en SSH</a> +<a class="btn btn-lg btn-default" href="/ssh">3. Conectarse en SSH</a> -<a class="btn btn-lg btn-default" href="/install_manually_es">4. Proceder a la post-instalación genérica</a> +<a class="btn btn-lg btn-default" href="/install_manually">4. Proceder a la post-instalación genérica</a> diff --git a/install_on_arm_board_fr.md b/install_on_arm_board_fr.md index 02f207cd..68be4675 100644 --- a/install_on_arm_board_fr.md +++ b/install_on_arm_board_fr.md @@ -1,6 +1,6 @@ # Installer YunoHost sur carte ARM -*Toutes les autres façons d’installer YunoHost sont listées **[ici](/install_fr)**.* +*Toutes les autres façons d’installer YunoHost sont listées **[ici](/install)**.* <center> <img src="/images/olinuxino.jpg" width=250 style="padding-bottom:20px"> @@ -19,21 +19,21 @@ YunoHost ne supporte pour le moment pas les cartes ARM64. Pour plus d'informatio - 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. +- Un [fournisseur d’accès correct](/isp), de préférence avec une bonne vitesse d’upload. --- ## Installation avec l'image pré-installée (recommandée) -<a class="btn btn-lg btn-default" href="/images_fr">0. Télécharger l'image pré-installée pour votre carte ARM</a><br><small>Si il n'existe pas d'image pré-installée pour votre carte, vous pouvez suivre la section "Installation par dessus ARMbian".</small> +<a class="btn btn-lg btn-default" href="/images">0. Télécharger l'image pré-installée pour votre carte ARM</a><br><small>Si il n'existe pas d'image pré-installée pour votre carte, vous pouvez suivre la section "Installation par dessus ARMbian".</small> -<a class="btn btn-lg btn-default" href="/copy_image_fr">1. Flasher la carte SD avec l'image</a> +<a class="btn btn-lg btn-default" href="/copy_image">1. Flasher la carte SD avec l'image</a> -<a class="btn btn-lg btn-default" href="/plug_and_boot_fr">2. Brancher la carte et la laisser démarrer</a> +<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Brancher la carte et la laisser démarrer</a> -<a class="btn btn-lg btn-default" href="/ssh_fr">3. Se connecter en SSH sur le serveur</a> +<a class="btn btn-lg btn-default" href="/ssh">3. Se connecter en SSH sur le serveur</a> -<a class="btn btn-lg btn-default" href="/postinstall_fr">4. Effectuer la configuration initiale (post-installation)</a> +<a class="btn btn-lg btn-default" href="/postinstall">4. Effectuer la configuration initiale (post-installation)</a> --- @@ -41,11 +41,11 @@ YunoHost ne supporte pour le moment pas les cartes ARM64. Pour plus d'informatio <a class="btn btn-lg btn-default" href="https://www.armbian.com/download/">0. Télécharger l'image ARMbian pour votre carte ARM</a> -<a class="btn btn-lg btn-default" href="/copy_image_fr">1. Flasher la carte SD avec l'image</a> +<a class="btn btn-lg btn-default" href="/copy_image">1. Flasher la carte SD avec l'image</a> -<a class="btn btn-lg btn-default" href="/plug_and_boot_fr">2. Brancher & démarrer</a> +<a class="btn btn-lg btn-default" href="/plug_and_boot">2. Brancher & démarrer</a> -<a class="btn btn-lg btn-default" href="/ssh_fr">3. Se connecter en SSH</a> +<a class="btn btn-lg btn-default" href="/ssh">3. Se connecter en SSH</a> -<a class="btn btn-lg btn-default" href="/install_manually_fr">4. Suivre la procédure d'installation générique</a> +<a class="btn btn-lg btn-default" href="/install_manually">4. Suivre la procédure d'installation générique</a> diff --git a/install_on_debian_fr.md b/install_on_debian_fr.md index 4b05905e..eaa21951 100644 --- a/install_on_debian_fr.md +++ b/install_on_debian_fr.md @@ -1,6 +1,6 @@ # Installation sur Debian -*Trouvez d’autres moyens d’installer YunoHost **[ici](/install_fr)**.* +*Trouvez d’autres moyens d’installer YunoHost **[ici](/install)**.* ## Prérequis @@ -18,7 +18,7 @@ Sur une plateforme ARM, un VPS, un serveur dédié, un ordinateur x86 standard, ## Étapes d’installation -<a class="btn btn-lg btn-default" href="/install_manually_fr">1. Installer manuellement</a> +<a class="btn btn-lg btn-default" href="/install_manually">1. Installer manuellement</a> -<a class="btn btn-lg btn-default" href="/postinstall_fr">2. Post-installation</a> +<a class="btn btn-lg btn-default" href="/postinstall">2. Post-installation</a> diff --git a/install_on_raspberry_es.md b/install_on_raspberry_es.md index 902c8ab1..b4fd51bf 100644 --- a/install_on_raspberry_es.md +++ b/install_on_raspberry_es.md @@ -1,6 +1,6 @@ # Instalar YunoHost en un Raspberry Pi -*Encontrar otros medios de instalar Yunohost **[aquí](/install_es)**.* +*Encontrar otros medios de instalar Yunohost **[aquí](/install)**.* <center> <img src="/images/raspberrypi.jpg" width=300 style="padding-bottom:20px"> @@ -17,21 +17,21 @@ Antes de alojar tu propio servidor en tu casa, te recomendamos que consultes las - Un adaptador de corriente para alimentar la tarjeta ; - Una tarjeta microSD : al menos **8 Go** y **Clase 10** (por ejemplo una [Transcend 300x](http://www.amazon.fr/Transcend-microSDHC-adaptateur-TS32GUSDU1E-Emballage/dp/B00CES44EO)) ; - Un cable ethernet/RJ-45 para conectar la tarjeta con tu enrutador o tu caja internet. (Con el Raspberry Pi 0, puedes conectar tu tarjeta con un cable OTG y un adaptador Wifi USB.) -- Un [proveedor de Internet ético](/isp_es), de preferencia con buena velocidad de upload. +- Un [proveedor de Internet ético](/isp), de preferencia con buena velocidad de upload. --- ## Instalación con la imagen pre-instalada (recomendada) -<a class="btn btn-lg btn-default" href="/images_es">1. Descargar la imagen para Raspberry Pi</a> +<a class="btn btn-lg btn-default" href="/images">1. Descargar la imagen para Raspberry Pi</a> -<a class="btn btn-lg btn-default" href="/copy_image_es">2. Poner la imagen en tu tarjeta SD</a> +<a class="btn btn-lg btn-default" href="/copy_image">2. Poner la imagen en tu tarjeta SD</a> -<a class="btn btn-lg btn-default" href="/plug_and_boot_es">3. Conectar y encender</a> +<a class="btn btn-lg btn-default" href="/plug_and_boot">3. Conectar y encender</a> -<a class="btn btn-lg btn-default" href="/ssh_es">4. Conectarse en SSH</a> +<a class="btn btn-lg btn-default" href="/ssh">4. Conectarse en SSH</a> -<a class="btn btn-lg btn-default" href="/postinstall_es">5. Proceder a la post-instalación</a> +<a class="btn btn-lg btn-default" href="/postinstall">5. Proceder a la post-instalación</a> --- @@ -56,5 +56,5 @@ sudo passwd root 3. Desconéctate et reconéctate con el usuario root esta vez. -4. Sigue con el <a href="/install_manually_es">procedimiento de instalación manual genérico</a>. +4. Sigue con el <a href="/install_manually">procedimiento de instalación manual genérico</a>. diff --git a/install_on_raspberry_fr.md b/install_on_raspberry_fr.md index 3290b24f..c3fd6452 100644 --- a/install_on_raspberry_fr.md +++ b/install_on_raspberry_fr.md @@ -1,6 +1,6 @@ # Installer YunoHost sur Raspberry Pi -*Toutes les autres façons d’installer YunoHost sont listées **[ici](/install_fr)**.* +*Toutes les autres façons d’installer YunoHost sont listées **[ici](/install)**.* <center> <img src="/images/raspberrypi.jpg" width=300 style="padding-bottom:20px"> @@ -17,21 +17,21 @@ Avant d'héberger un serveur chez vous, il est recommandé de prendre connaissan - 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. +- Un [fournisseur d’accès correct](/isp), de préférence avec une bonne vitesse d’upload. --- ## Installation avec l'image pré-installée (recommandée) -<a class="btn btn-lg btn-default" href="/images_fr">1. Télécharger l'image pour Raspberry Pi</a> +<a class="btn btn-lg btn-default" href="/images">1. Télécharger l'image pour Raspberry Pi</a> -<a class="btn btn-lg btn-default" href="/copy_image_fr">2. Flasher la carte SD avec l'image</a> +<a class="btn btn-lg btn-default" href="/copy_image">2. Flasher la carte SD avec l'image</a> -<a class="btn btn-lg btn-default" href="/plug_and_boot_fr">3. Brancher la carte et la laisser démarrer</a> +<a class="btn btn-lg btn-default" href="/plug_and_boot">3. Brancher la carte et la laisser démarrer</a> -<a class="btn btn-lg btn-default" href="/ssh_fr">4. Se connecter en SSH sur le serveur</a> +<a class="btn btn-lg btn-default" href="/ssh">4. Se connecter en SSH sur le serveur</a> -<a class="btn btn-lg btn-default" href="/postinstall_fr">5. Effectuer la configuration initiale (post-installation)</a> +<a class="btn btn-lg btn-default" href="/postinstall">5. Effectuer la configuration initiale (post-installation)</a> --- @@ -57,5 +57,5 @@ sudo passwd root 3. Déconnectez-vous et reconnectez-vous avec l'utilisateur root cette fois. -4. Poursuivez avec la <a href="/install_manually_fr">procédure d'installation manuelle générique</a>. +4. Poursuivez avec la <a href="/install_manually">procédure d'installation manuelle générique</a>. diff --git a/install_on_raspberry_it.md b/install_on_raspberry_it.md index b2f88cb0..1b3ca866 100644 --- a/install_on_raspberry_it.md +++ b/install_on_raspberry_it.md @@ -1,3 +1,3 @@ # Installa YunoHost su Raspberry Pi -*Consulta la guida completa in inglese [qui](https://yunohost.org/#/install_on_raspberry_en)* +*Consulta la guida completa in inglese [qui](/install_on_raspberry)* diff --git a/install_on_virtualbox_es.md b/install_on_virtualbox_es.md index be31c3d2..9a6260d6 100644 --- a/install_on_virtualbox_es.md +++ b/install_on_virtualbox_es.md @@ -1,13 +1,13 @@ # Instalar YunoHost en VirtualBox -*Encontrar otros medios de instalar Yunohost **[aquí](/install_es)**.* +*Encontrar otros medios de instalar Yunohost **[aquí](/install)**.* ## Prerrequisitos <img src="/images/virtualbox.png" width=200> * Un ordenador x86 con VirtualBox instalado y bastante RAM disponible para iniciar una pequeña máquina virtual. -* La última **imagen ISO YunoHost** estable, disponible [aquí](/images_es). +* La última **imagen ISO YunoHost** estable, disponible [aquí](/images). <div class="alert alert-warning" markdown="1"> N.B. : Instalar YunoHost en VirtualBox es útil para probar la distribución. Para realmente autoalojarse a largo plazo, probablement necesitarás una máquina virtual (viejo ordenador, tarjeta ARM...) o un VPS. @@ -73,4 +73,4 @@ Si te encuentras con el error "VT-x is not available", probablement hay que acti Después del reinicio, la máquina debería proponerte de efectuar la post-instalación : -<a class="btn btn-lg btn-default" href="/postinstall_es">Documentación de post-instalación</a> +<a class="btn btn-lg btn-default" href="/postinstall">Documentación de post-instalación</a> diff --git a/install_on_virtualbox_fr.md b/install_on_virtualbox_fr.md index f83a3151..d99807af 100644 --- a/install_on_virtualbox_fr.md +++ b/install_on_virtualbox_fr.md @@ -1,13 +1,13 @@ # Installer YunoHost sur VirtualBox -*Trouvez d’autres moyens d’installer YunoHost **[ici](/install_fr)**.* +*Trouvez d’autres moyens d’installer YunoHost **[ici](/install)**.* ## Prérequis <img src="/images/virtualbox.png" width=200> * 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](/images_fr). +* La dernière **image ISO YunoHost** stable, disponible [ici](/images). <div class="alert alert-warning" markdown="1"> N.B. : Installer YunoHost dans une VirtualBox est utile pour tester la diff --git a/install_on_vps_es.md b/install_on_vps_es.md index 0263d71f..f6eb2eb7 100644 --- a/install_on_vps_es.md +++ b/install_on_vps_es.md @@ -1,6 +1,6 @@ # Instalación en un servidor dedicado -*Encontrar otros medios de instalar Yunohost **[aquí](/install_es)**.* +*Encontrar otros medios de instalar Yunohost **[aquí](/install)**.* ## Prerrequisitos @@ -14,7 +14,7 @@ ## Etapas de instalación -<a class="btn btn-lg btn-default" href="/install_manually_es">1. Instalar manualmente</a> +<a class="btn btn-lg btn-default" href="/install_manually">1. Instalar manualmente</a> -<a class="btn btn-lg btn-default" href="/postinstall_es">2. Post-instalación</a> +<a class="btn btn-lg btn-default" href="/postinstall">2. Post-instalación</a> diff --git a/install_on_vps_fr.md b/install_on_vps_fr.md index 9194d9b7..a0924cb8 100644 --- a/install_on_vps_fr.md +++ b/install_on_vps_fr.md @@ -1,6 +1,6 @@ # Installation sur un serveur dédié -*Trouvez d’autres moyens d’installer YunoHost **[ici](/install_fr)**.* +*Trouvez d’autres moyens d’installer YunoHost **[ici](/install)**.* ## Prérequis @@ -14,6 +14,6 @@ ## Étapes d’installation -<a class="btn btn-lg btn-default" href="/install_manually_fr">1. Installer manuellement</a> +<a class="btn btn-lg btn-default" href="/install_manually">1. Installer manuellement</a> -<a class="btn btn-lg btn-default" href="/postinstall_fr">2. Effectuer la configuration initiale (post-installation)</a> +<a class="btn btn-lg btn-default" href="/postinstall">2. Effectuer la configuration initiale (post-installation)</a> diff --git a/isp.md b/isp.md index d84d9e87..ba3f8626 100644 --- a/isp.md +++ b/isp.md @@ -1,12 +1,12 @@ # Internet service providers -<a class="btn btn-lg btn-default" href="/isp_box_config_en"> Main configuration box</a> +<a class="btn btn-lg btn-default" href="/isp_box_config"> Main configuration box</a> Here is a non-comprehensive list of internet service providers by country, which contains criteria about tolerance to self-hosting. A "no" may cause problems for using your server or may require you to make additional configuration changes. Status in brackets indicates the default behavior. -A list of French and Belgian ISPs is available on the [french page](/isp_fr). +A list of French and Belgian ISPs is available on the [french page](/isp). ### USA | Service provider | Box (modem/router) | uPnP available | Port 25 openable | [Hairpinning](http://en.wikipedia.org/wiki/Hairpinning) | Customizable reverse DNS | Fix IP | diff --git a/isp_box_config.md b/isp_box_config.md index 465a82eb..883889c0 100644 --- a/isp_box_config.md +++ b/isp_box_config.md @@ -28,16 +28,16 @@ In your router admin interface, look for something like 'router configuration' o 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. * Web: 80 <small>(HTTP)</small>, 443 <small>(HTTPS)</small> -* [SSH](/ssh_en): 22 -* [XMPP](/XMPP_en): 5222 <small>(clients)</small>, 5269 <small>(servers)</small> -* [Email](/email_en): 25, 587 <small>(SMTP)</small>, 993 <small>(IMAP)</small> +* [SSH](/ssh): 22 +* [XMPP](/XMPP): 5222 <small>(clients)</small>, 5269 <small>(servers)</small> +* [Email](/email): 25, 587 <small>(SMTP)</small>, 993 <small>(IMAP)</small> If you use both a modem and a router, then you need to do the following: 1. first on the modem (the box closest to the internet) create rules to forward the above ports to your router; 2. then on the router (the box between the modem and your devices) create rules to forward the above ports to the static IP address for your server. <div class="alert alert-warning" markdown="1"> -<span class="glyphicon glyphicon-warning-sign"></span> 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. +<span class="glyphicon glyphicon-warning-sign"></span> 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) for more info. </div> ## Automatic port forwarding / UPnP diff --git a/isp_box_config_es.md b/isp_box_config_es.md index dc239ef0..3d5b93f3 100644 --- a/isp_box_config_es.md +++ b/isp_box_config_es.md @@ -1,6 +1,6 @@ # Configurar la redirección de los puertos -Si te estás auto-alojando en casa y sin VPN, tienes que redirigirse los puertos de tu router (caja/box). Si quieres una explicación sencilla de lo que es y por qué necesitas redirigir los puertos, puedes echar un vistazo a [esta página](port_forwarding_es). [Esta página](https://www.testdevelocidad.es/configuraciones/abrir-correctamente-los-puertos-router/) también propone explicaciones detalladas sobre el funcionamiento de los puertos, y las etapas de configuración para un router genérico. +Si te estás auto-alojando en casa y sin VPN, tienes que redirigirse los puertos de tu router (caja/box). Si quieres una explicación sencilla de lo que es y por qué necesitas redirigir los puertos, puedes echar un vistazo a [esta página](/port_forwarding). [Esta página](https://www.testdevelocidad.es/configuraciones/abrir-correctamente-los-puertos-router/) también propone explicaciones detalladas sobre el funcionamiento de los puertos, y las etapas de configuración para un router genérico. ### 0. Diagnosticar los puertos abiertos @@ -29,12 +29,12 @@ En la interfaz de administración de tu router/caja/box, tienes que encontrar un Luego tienes que redirigir cada uno de los puertos listados a continuación hacia la IP local de tu router para que los varios servicios de Yunohost funcionen. Para cada uno de ellos, una redirección 'TCP' es necesaria. En algunas interfaces, tal vez encontrarás referencias a un puerto 'externo' y un puerto 'interno' : en nuestro caso, se trata del mismo número de puerto, que sea interno o externo. * Web: 80 <small>(HTTP)</small>, 443 <small>(HTTPS)</small> -* [SSH](/ssh_es): 22 -* [XMPP](/XMPP_es): 5222 <small>(clients)</small>, 5269 <small>(servers)</small> -* [Email](/email_es): 25, 587 <small>(SMTP)</small>, 993 <small>(IMAP)</small> +* [SSH](/ssh): 22 +* [XMPP](/XMPP): 5222 <small>(clients)</small>, 5269 <small>(servers)</small> +* [Email](/email): 25, 587 <small>(SMTP)</small>, 993 <small>(IMAP)</small> <div class="alert alert-warning" markdown="1"> -<span class="glyphicon glyphicon-warning-sign"></span> Algunos proveedores de acceso a Internet bloquean el puerto 25 (mail SMTP) por defecto para luchar con el spam. Otros (más escasos) no permiten utilizar libremente los puertos 80/443. Dependiendo de tu proveedor, puede ser posible de abrir estos puertos en la interfaz... Ver [esta página](isp_es) por más informaciones. +<span class="glyphicon glyphicon-warning-sign"></span> Algunos proveedores de acceso a Internet bloquean el puerto 25 (mail SMTP) por defecto para luchar con el spam. Otros (más escasos) no permiten utilizar libremente los puertos 80/443. Dependiendo de tu proveedor, puede ser posible de abrir estos puertos en la interfaz... Ver [esta página](/isp) por más informaciones. </div> ## Redirección automática / UPnP diff --git a/isp_box_config_fr.md b/isp_box_config_fr.md index 866b38b0..31b38b1d 100644 --- a/isp_box_config_fr.md +++ b/isp_box_config_fr.md @@ -1,6 +1,6 @@ # Configurer la redirection des ports -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 œil à [cette page-ci](port_forwarding_fr). [Cette page-là](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. +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 œil à [cette page-ci](/port_forwarding). [Cette page-là](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. ### 0. Diagnostiquer les ports ouverts @@ -33,12 +33,12 @@ 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 <small>(HTTP)</small>, 443 <small>(HTTPS)</small> -* [SSH](/ssh_fr): 22 -* [XMPP](/XMPP_fr): 5222 <small>(clients)</small>, 5269 <small>(servers)</small> -* [Email](/email_en): 25, 587 <small>(SMTP)</small>, 993 <small>(IMAP)</small> +* [SSH](/ssh): 22 +* [XMPP](/XMPP): 5222 <small>(clients)</small>, 5269 <small>(servers)</small> +* [Email](/email): 25, 587 <small>(SMTP)</small>, 993 <small>(IMAP)</small> <div class="alert alert-warning" markdown="1"> -<span class="glyphicon glyphicon-warning-sign"></span> 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. +<span class="glyphicon glyphicon-warning-sign"></span> 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) pour plus d'informations. </div> ## Redirection automatique / UPnP diff --git a/isp_es.md b/isp_es.md index e0c42cf0..fed12f76 100644 --- a/isp_es.md +++ b/isp_es.md @@ -1,8 +1,8 @@ # Proveedores de acceso a Internet -<a class="btn btn-lg btn-default" href="/isp_box_config_es"> Configuración general del router</a> +<a class="btn btn-lg btn-default" href="/isp_box_config"> Configuración general del router</a> -Aquí tienes una lista (no exhaustiva) de proveedores de acceso a Internet por país, con criterios de compatibilidad con el [self-hosting](selfhosting_es). +Aquí tienes una lista (no exhaustiva) de proveedores de acceso a Internet por país, con criterios de compatibilidad con el [self-hosting](/selfhosting). Un « **no** » puede implicar problemas de utilización del servidor o puede obligarte a hacer configuraciones adicionales. El estatus entre paréntesis indica el comportamiento por defecto. @@ -14,14 +14,14 @@ Todos los proveedores de acceso a Internet [miembros de la Federación French Da * ✔ : sí * ✘ : no -| Proveedor de acceso | OVH | [Free](/isp_free_fr) | [SFR](/isp_sfr_fr) | [Orange](/isp_orange_fr) | Bouygues<br>Télécom | Darty | +| Proveedor de acceso | OVH | [Free](/isp_free) | [SFR](/isp_sfr) | [Orange](/isp_orange) | Bouygues<br>Télécom | Darty | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | **Box/router** | Personal/OVH Télécom | Freebox | Neufbox | Livebox | Bbox | Dartybox | | **[UPnP](https://fr.wikipedia.org/wiki/Universal_Plug_and_Play)** | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | -| **[Puerto 25 que se abre](email_fr)**<br> (cerrado por defecto) | ✔ | ✔ | ✔ | ✘ | ✔ | ✔ | +| **[Puerto 25 que se abre](/email)**<br> (cerrado por defecto) | ✔ | ✔ | ✔ | ✘ | ✔ | ✔ | | **[Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning)** | ✔ | ✔ | ✔/✘ | ✘ | ✔ | ✔ | | **[Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup)<br>personalizable ** | ✔ | ✔ (excepto IPv6) | … | ✘ | ✘ | ✘ | -| **[IP fija](/dns_dynamicip_es)** | ✔ | ✔ | ✔/✘ | ✘ | ✔ | ✔ | +| **[IP fija](/dns_dynamicip)** | ✔ | ✔ | ✔/✘ | ✘ | ✔ | ✔ | | **[IPv6](https://fr.wikipedia.org/wiki/IPv6)** | ✔ | ✔ | ✔ | ✔ | … | … | | **[No listado en el DUL](https://en.wikipedia.org/wiki/Dialup_Users_List)** | … | ✘ | … | … | … | … | Para obtener una lista más completa y precisa, refiérete a la muy buena documentación (fr) de [wiki.auto-hebergement.fr](http://wiki.auto-hebergement.fr/fournisseurs/fai#d%C3%A9tail_des_fai). @@ -30,7 +30,7 @@ Para obtener una lista más completa y precisa, refiérete a la muy buena docume ### Bélgica -| Proveedor de acceso | Box/ router | uPnP activable | [Puerto 25 que se abre](email_fr)| [Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning) | [Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) | IP fija | +| Proveedor de acceso | Box/ router | uPnP activable | [Puerto 25 que se abre](/email)| [Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning) | [Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) | IP fija | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | **Proximus** | BBox2 | sí (activado) | sí | **no** | **no** | **no** | | | BBox3 | sí (activado) | sí | **no** | **no** | **no** | @@ -40,7 +40,7 @@ Para obtener una lista más completa y precisa, refiérete a la muy buena docume ### Costa de Marfil -| Proveedor de acceso | Box/ router | uPnP activable | [Puerto 25 que se abre](email_fr)| [Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning) | [Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) | IP fija | +| Proveedor de acceso | Box/ router | uPnP activable | [Puerto 25 que se abre](/email)| [Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning) | [Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) | IP fija | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | **Orange** | Livebox2 | sí (activado) | no | **no** | **no** | **no** | | **Moov** | | sí (activado) | | | | | diff --git a/isp_fr.md b/isp_fr.md index 1e8a3900..35e6d8be 100644 --- a/isp_fr.md +++ b/isp_fr.md @@ -1,8 +1,8 @@ # Fournisseurs d’accès à Internet -<a class="btn btn-lg btn-default" href="/isp_box_config_fr"> Configuration générale box</a> +<a class="btn btn-lg btn-default" href="/isp_box_config"> Configuration générale box</a> -Voici une liste non exhaustive des fournisseurs d’accès à Internet par pays, contenant les critères de tolérance à l’[auto-hébergement](selfhosting_fr). +Voici une liste non exhaustive des fournisseurs d’accès à Internet par pays, contenant les critères de tolérance à l’[auto-hébergement](/selfhosting). Un « **non** » peut entraîner des problèmes d’utilisation de votre serveur ou peut vous obliger à faire des configurations supplémentaires. Le statut entre parenthèses indique le comportement par défaut. @@ -12,14 +12,14 @@ Tous les fournisseurs d’accès à Internet [membres de la Fédération French * ✔ : oui * ✘ : non -| Fournisseur d’accès | OVH | [Free](/isp_free_fr) | [SFR](/isp_sfr_fr) | [Orange](/isp_orange_fr) | Bouygues<br>Télécom | Darty | +| Fournisseur d’accès | OVH | [Free](/isp_free) | [SFR](/isp_sfr) | [Orange](/isp_orange) | Bouygues<br>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)**<br> (fermé par défaut) | ✔ | ✔ | ✔ | ✘ | ✔ | ✔ | +| **[Port 25 ouvrable](/email)**<br> (fermé par défaut) | ✔ | ✔ | ✔ | ✘ | ✔ | ✔ | | **[Hairpinning](http://fr.wikipedia.org/wiki/Hairpinning)** | ✔ | ✔ | ✔/✘ | ✔ (depuis la Livebox 4) | ✔ | ✔ | | **[Reverse DNS](https://en.wikipedia.org/wiki/Reverse_DNS_lookup)<br>personnalisable ** | ✔ | ✔ (sauf IPv6) pas de support | … | ✘ | ✘ | ✘ | -| **[IP fixe](/dns_dynamicip_fr)** | ✔ | ✔ | ✔/✘ | ✘ | ✔ | ✔ | +| **[IP fixe](/dns_dynamicip)** | ✔ | ✔ | ✔/✘ | ✘ | ✔ | ✔ | | **[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). @@ -28,7 +28,7 @@ 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 | +| Fournisseur d’accès | Box/ routeur | uPnP activable | [Port 25 ouvrable](/email)| [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** | @@ -38,7 +38,7 @@ Pour une liste plus complète et précise, référez-vous à la très bonne docu ### 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 | +| Fournisseur d’accès | Box/ routeur | uPnP activable | [Port 25 ouvrable](/email)| [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é) | | | | | diff --git a/isp_free_fr.md b/isp_free_fr.md index 59242ee9..58ebb590 100644 --- a/isp_free_fr.md +++ b/isp_free_fr.md @@ -1,6 +1,6 @@ # Free -*Trouvez la liste d’autres fournisseurs d’accès Internet **[ici](/isp_fr)**.* +*Trouvez la liste d’autres fournisseurs d’accès Internet **[ici](/isp)**.* #### Accès à l’administration de la box (v5/v6) @@ -14,13 +14,13 @@ Allez à l’adresse : [mafreebox.free.fr](http://mafreebox.free.fr/) puis authe #### Ouverture des ports -[Liste des ports à ouvrir](/isp_box_config_fr). +[Liste des ports à ouvrir](/isp_box_config). ##### Freebox ≤ v5 Cela se passe dans la section *Ma Freebox / Configurer mon routeur*. Il faut : -- Rediriger les [ports à ouvrir](/isp_box_config_fr) vers l'adresse locale de votre serveur YunoHost. +- Rediriger les [ports à ouvrir](/isp_box_config) vers l'adresse locale de votre serveur YunoHost. - Définir une DMZ vers votre serveur YunoHost. La présence conjointe de ces deux règles permettent d'accéder à votre serveur de l'extérieur comme de l'intérieur de votre réseau local. diff --git a/isp_orange_fr.md b/isp_orange_fr.md index 56cabf4d..1c80f9fe 100644 --- a/isp_orange_fr.md +++ b/isp_orange_fr.md @@ -1,5 +1,5 @@ # Orange -*Trouvez la liste d’autres fournisseurs d’accès Internet **[ici](/isp_fr)**.* +*Trouvez la liste d’autres fournisseurs d’accès Internet **[ici](/isp)**.* #### Le courrier électronique diff --git a/isp_sfr_fr.md b/isp_sfr_fr.md index a163878f..9b159b56 100644 --- a/isp_sfr_fr.md +++ b/isp_sfr_fr.md @@ -1,5 +1,5 @@ #SFR -*Trouvez la liste d’autres fournisseurs d’accès Internet **[ici](/isp_fr)**.* +*Trouvez la liste d’autres fournisseurs d’accès Internet **[ici](/isp)**.* #### Accès à l’administration de la box * Allez à cette adresse : http://192.168.1.1. * Authentifiez-vous, soit en appuyant sur le bouton de la box pendant 5 secondes soit avec les identifiants d’administration. diff --git a/packaging_apps.md b/packaging_apps.md index dee9331a..5da09827 100644 --- a/packaging_apps.md +++ b/packaging_apps.md @@ -6,7 +6,7 @@ The purpose of this document is to teach you how to package an application for Y To package an application, here are the requirements: * An account on a git server (e.g. [GitHub](https://github.com/)) to publish the application; * Basic knowledge of `git`, bash shell and other programming stuff; -* A testing [virtual machine or a distant server](/install_en), or a development environement, [ynh-dev](https://github.com/yunohost/ynh-dev) or [VirtualBox](/packaging_apps_virtualbox_fr), to package and test the package. +* A testing [virtual machine or a distant server](/install), or a development environement, [ynh-dev](https://github.com/yunohost/ynh-dev) or [VirtualBox](/packaging_apps_virtualbox), to package and test the package. ### Content A YunoHost package is composed of: @@ -21,21 +21,21 @@ A YunoHost package is composed of: feel free to use it as a framework. ## Manifest -<a class="btn btn-lg btn-default" href="packaging_apps_manifest_en">Manifest</a> +<a class="btn btn-lg btn-default" href="/packaging_apps_manifest">Manifest</a> ## Scripts -<a class="btn btn-lg btn-default" href="packaging_apps_scripts_en">Scripts</a> +<a class="btn btn-lg btn-default" href="/packaging_apps_scripts">Scripts</a> ### Architecture and arguments Since YunoHost has a unified architecture, you will be able to guess most of the settings you need. But if you need variable ones, like the domain or web path, you will have to ask the administrator at installation (see `arguments` section in the manifest above). -<a class="btn btn-lg btn-default" href="packaging_apps_arguments_management_en">Arguments management</a> +<a class="btn btn-lg btn-default" href="/packaging_apps_arguments_management">Arguments management</a> ### Nginx configuration -<a class="btn btn-lg btn-default" href="packaging_apps_nginx_conf_en">Nginx configuration</a> +<a class="btn btn-lg btn-default" href="/packaging_apps_nginx_conf">Nginx configuration</a> ### Multi-instance -<a class="btn btn-lg btn-default" href="packaging_apps_multiinstance_en">Multi-instance</a> +<a class="btn btn-lg btn-default" href="/packaging_apps_multiinstance">Multi-instance</a> ### Hooks YunoHost provides a hook system, which is accessible via the packager's script callbacks in command line. @@ -46,7 +46,7 @@ The scripts have to be placed in the `hooks` repository at the root of the YunoH Take a look at the [Nextcloud package](https://github.com/YunoHost-Apps/nextcloud_ynh/) for a working example. ### Helpers -<a class="btn btn-lg btn-default" href="packaging_apps_helpers_en">Helpers</a> +<a class="btn btn-lg btn-default" href="/packaging_apps_helpers">Helpers</a> ### Registering a log file @@ -85,7 +85,7 @@ In order to test your package, you can execute your script standalone as `admin` su - admin -c "/bin/bash /path/to/my/script my_arg1 my_arg2" ``` -Or you can use [command line](/commandline_en): +Or you can use [command line](/commandline): ```bash yunohost app install /path/to/my/app/package ``` @@ -97,14 +97,14 @@ yunohost app install https://github.com/author/my_app_package.git ### Packaging best practices Here is a list of best practices for application install scripts: * scripts should use `sudo cp -a ../sources/. $final_path` instead of `sudo cp -a ../sources/* $final_path`; -* install script must contain support in case of script errors to delete residuals files thanks to `set -e` and [trap](packaging_apps_trap_fr); +* install script must contain support in case of script errors to delete residuals files thanks to `set -e` and [trap](/packaging_apps_trap); * 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 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). +To be define the quality of a package, it'll obtained a [level](/packaging_apps_levels), determined according to somes criteria of installation and according to respect to [package guidelines](packaging_apps_guidelines). ### Package script checker <a class="btn btn-lg btn-default" href="https://github.com/YunoHost/package_checker">Package checker</a> @@ -124,7 +124,7 @@ A continuous integration server is available for packagers who want to test thei * 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. -* If your application is released under a free software license, you may ask the YunoHost app team to integrate your application to the [app repository](https://github.com/YunoHost/apps) (c.f. also the [app list](apps_en)). You can add your application even if it is not stable or working yet : the current state can be specified to `notworking`, `inprogress`, or `working`. +* If your application is released under a free software license, you may ask the YunoHost app team to integrate your application to the [app repository](https://github.com/YunoHost/apps) (c.f. also the [app list](/apps)). You can add your application even if it is not stable or working yet : the current state can be specified to `notworking`, `inprogress`, or `working`. * If your application is *not* free software, then in the future, a non-official list might be created to handle them but is non-existent yet. diff --git a/packaging_apps_arguments_management.md b/packaging_apps_arguments_management.md index e967af6b..130e3de4 100644 --- a/packaging_apps_arguments_management.md +++ b/packaging_apps_arguments_management.md @@ -1,4 +1,4 @@ -<a class="btn btn-lg btn-default" href="packaging_apps_en">Application packaging</a> +<a class="btn btn-lg btn-default" href="/packaging_apps">Application packaging</a> ## Arguments management #### Retrieve arguments in the install script from manifest diff --git a/packaging_apps_arguments_management_fr.md b/packaging_apps_arguments_management_fr.md index 28471773..5d66e707 100644 --- a/packaging_apps_arguments_management_fr.md +++ b/packaging_apps_arguments_management_fr.md @@ -1,4 +1,4 @@ -<a class="btn btn-lg btn-default" href="packaging_apps_fr">Packaging d’application</a> +<a class="btn btn-lg btn-default" href="/packaging_apps">Packaging d’application</a> ## Gestion des arguments #### Récupérer les arguments du manifeste dans le script d’installation diff --git a/packaging_apps_fr.md b/packaging_apps_fr.md index 7e06bae8..df480230 100644 --- a/packaging_apps_fr.md +++ b/packaging_apps_fr.md @@ -6,10 +6,10 @@ Ce document a pour but de vous apprendre à packager une application pour YunoHo Pour packager une application, voici les prérequis : * Un compte sur un serveur git comme [GitHub](https://github.com/) pour pouvoir ensuite publier l’application ; * Maîtriser un minimum `git`, le Shell et d’autres notions de programmation ; -* Une [machine virtuelle ou sur un serveur distant](/install_fr) ou un environnement de développement, [ynh-dev](https://github.com/yunohost/ynh-dev) ou [VirtualBox](/packaging_apps_virtualbox_fr), pour packager et tester son paquet. +* Une [machine virtuelle ou sur un serveur distant](/install) ou un environnement de développement, [ynh-dev](https://github.com/yunohost/ynh-dev) ou [VirtualBox](/packaging_apps_virtualbox), pour packager et tester son paquet. -Si vous ne comprenez pas ces prérequis, ou si vous ne savez pas comment écrire du code, consulter d'abord l'[introduction au packaging](/packaging_apps_start_fr). +Si vous ne comprenez pas ces prérequis, ou si vous ne savez pas comment écrire du code, consulter d'abord l'[introduction au packaging](/packaging_apps_start). ### Contenu Un paquet YunoHost est composé : @@ -23,27 +23,27 @@ Un paquet YunoHost est composé : <a class="btn btn-lg btn-default" href="https://github.com/YunoHost/example_ynh">Paquet de base</a> n’hésitez pas à vous en servir comme base de travail. ## Manifeste -<a class="btn btn-lg btn-default" href="packaging_apps_manifest_fr">Manifeste</a> +<a class="btn btn-lg btn-default" href="/packaging_apps_manifest">Manifeste</a> ## Les scripts -<a class="btn btn-lg btn-default" href="packaging_apps_scripts_fr">Scripts</a> +<a class="btn btn-lg btn-default" href="/packaging_apps_scripts">Scripts</a> ### Architecture et arguments Comme les instances de YunoHost possèdent une architecture unifiée, vous serez capable de deviner la plupart des réglages nécessaires. Mais si vous avez besoin de réglages spécifiques, comme le nom de domaine ou un chemin web pour configurer l’application, vous devrez les demander aux administrateurs lors de l’installation (voir la section `arguments` dans le § **Manifeste** ci-dessus). -<a class="btn btn-lg btn-default" href="packaging_apps_arguments_management_fr">Gestion des arguments</a> +<a class="btn btn-lg btn-default" href="/packaging_apps_arguments_management">Gestion des arguments</a> ### Configuration Nginx -<a class="btn btn-lg btn-default" href="packaging_apps_nginx_conf_fr">Configuration Nginx</a> +<a class="btn btn-lg btn-default" href="/packaging_apps_nginx_conf">Configuration Nginx</a> ### Multi-instance -<a class="btn btn-lg btn-default" href="packaging_apps_multiinstance_fr">Multi-instance</a> +<a class="btn btn-lg btn-default" href="/packaging_apps_multiinstance">Multi-instance</a> ### Hooks -<a class="btn btn-lg btn-default" href="packaging_apps_hooks_fr">Hooks</a> +<a class="btn btn-lg btn-default" href="/packaging_apps_hooks">Hooks</a> ### Commandes pratiques -<a class="btn btn-lg btn-default" href="packaging_apps_helpers_fr">Commandes pratiques</a> +<a class="btn btn-lg btn-default" href="/packaging_apps_helpers">Commandes pratiques</a> ### 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`. @@ -79,14 +79,14 @@ Ces informations seront utilisées pour permettre de filtrer les logs en relatio ### 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` ; -* Votre script d’installation contient une gestion en cas d’erreurs du script pour supprimer les fichiers résiduels à l’aide de `set -e` et de [trap](/packaging_apps_trap_fr) ; +* Votre script d’installation contient une gestion en cas d’erreurs du script pour supprimer les fichiers résiduels à l’aide de `set -e` et de [trap](/packaging_apps_trap) ; * 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 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). +Pour mesurer la qualité d'un paquet, celui-ci obtiendra un [niveau](/packaging_apps_levels), déterminé en fonction de divers critères d'installation et selon le respect des [règles de packaging](/packaging_apps_guidelines). ### Script de vérification du paquet <a class="btn btn-lg btn-default" href="https://github.com/YunoHost/package_checker">Vérificateur de paquets</a> @@ -106,7 +106,7 @@ Un serveur d'intégration continue est a disposition des packagers désirant tes * 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). -* Si votre paquet et l'application qu'il contient sont sous licence libre, faites une demande d’ajout de votre application dans le [dépôt des applications](https://github.com/YunoHost/apps) (voir aussi [la liste des apps](apps_fr)). Vous pouvez ajouter une application même si celle-ci n'est pour le moment pas fonctionelle : l'état d'avancement peut être `notworking`, `inprogress` ou `working`. +* Si votre paquet et l'application qu'il contient sont sous licence libre, faites une demande d’ajout de votre application dans le [dépôt des applications](https://github.com/YunoHost/apps) (voir aussi [la liste des apps](/apps)). Vous pouvez ajouter une application même si celle-ci n'est pour le moment pas fonctionelle : l'état d'avancement peut être `notworking`, `inprogress` ou `working`. * Si votre application n'est *pas* sous licence libre, il se peut qu'une liste non-officielle soit créée pour gérer ces applications. Ce n'est pour l'instant pas le cas. diff --git a/packaging_apps_guidelines.md b/packaging_apps_guidelines.md index 0c606a94..41fe5afb 100644 --- a/packaging_apps_guidelines.md +++ b/packaging_apps_guidelines.md @@ -164,7 +164,7 @@ Adding an app to the [YunoHost-Apps organization](https://github.com/YunoHost-Ap 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. +Transfer Procedure: Ask the [chat room](/chat_rooms) 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 @@ -221,7 +221,7 @@ Keep your code as easy as possible, keep everything a script needs directly into #### 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). +The manifest allows to describe an app so that YunoHost can apply the good treatments. For more information see [dedicated documentation](/packaging_apps_manifest). #### YEP 2.2 ##### Using bash for main scripts | validated | Home | WORKING | @@ -287,7 +287,7 @@ It is advisable to make the scripts as generic as possible, a good way to do thi 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) +* consult [helpers documentation](/packaging_apps_helpers) * explore [helpers directory](https://github.com/YunoHost/yunohost/tree/unstable/data/helpers.d) #### YEP 2.13 diff --git a/packaging_apps_guidelines_fr.md b/packaging_apps_guidelines_fr.md index 4048f777..847367d4 100644 --- a/packaging_apps_guidelines_fr.md +++ b/packaging_apps_guidelines_fr.md @@ -165,7 +165,7 @@ L'ajout d'une app sur l'[organisation YunoHost-Apps](https://github.com/YunoHost 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. -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. +Procédure de transfert : demander sur le [salon de discussion `Apps`](/chat_rooms) à ê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 @@ -222,7 +222,7 @@ Gardez votre code aussi simple que possible, gardez tout ce dont un script a bes #### 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). +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](/packaging_apps_manifest). #### YEP 2.2 ##### Utiliser bash pour les scripts principaux | validé | auto | WORKING | @@ -289,7 +289,7 @@ Il est conseillé de rendre les scripts le plus générique possible, un bon moy 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) +* consulter [la documentation des helpers](/packaging_apps_helpers) * explorer [le répertoire des helpers](https://github.com/YunoHost/yunohost/tree/unstable/data/helpers.d) #### YEP 2.13 diff --git a/packaging_apps_hooks_fr.md b/packaging_apps_hooks_fr.md index 76578e28..c81dc654 100644 --- a/packaging_apps_hooks_fr.md +++ b/packaging_apps_hooks_fr.md @@ -115,7 +115,7 @@ 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). +Les variables utilisables dans ces scripts sont les mêmes que celles disponibles dans [les scripts d'actions associés](/packaging_apps_scripts). Example: pour `post_app_install` les variables sont les mêmes que pour le script `install` diff --git a/packaging_apps_manifest.md b/packaging_apps_manifest.md index d757bdba..f4407aa1 100644 --- a/packaging_apps_manifest.md +++ b/packaging_apps_manifest.md @@ -1,4 +1,4 @@ -<a class="btn btn-lg btn-default" href="packaging_apps_en">Application packaging</a> +<a class="btn btn-lg btn-default" href="/packaging_apps">Application packaging</a> ## Manifest The `manifest.json` file defines the app's constants, a bunch of values that YunoHost needs to identify the app and install it correctly. It looks like this: @@ -71,7 +71,7 @@ The `manifest.json` file defines the app's constants, a bunch of values that Yun - **requirements**: dependency of the application package to a Debian YunoHost package version. For instance, "yunohost": ">> 2.3.12", `yunohost` package version must be up to `2.3.12`. -* [**multi_instance**](packaging_apps_multiinstance_en): it defines app's ability to be installed multiple times. +* [**multi_instance**](/packaging_apps_multiinstance): it defines app's ability to be installed multiple times. * **services**: services needed by the application among `nginx`, `php5-fpm`, `mysql`, `uwsgi`, `metronome`, `postfix`, `dovecot`… diff --git a/packaging_apps_manifest_fr.md b/packaging_apps_manifest_fr.md index 72791575..50a9c611 100644 --- a/packaging_apps_manifest_fr.md +++ b/packaging_apps_manifest_fr.md @@ -1,4 +1,4 @@ -<a class="btn btn-lg btn-default" href="packaging_apps_fr">Packaging d’application</a> +<a class="btn btn-lg btn-default" href="/packaging_apps">Packaging d’application</a> ## Manifeste Le fichier `manifest.json` définit les constantes de l’application, un ensemble de valeurs dont YunoHost a besoin pour identifier l’application et l’installer correctement. Voici un exemple : @@ -71,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) : 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`… diff --git a/packaging_apps_multiinstance.md b/packaging_apps_multiinstance.md index 7f847ba5..03bc6680 100644 --- a/packaging_apps_multiinstance.md +++ b/packaging_apps_multiinstance.md @@ -1,4 +1,4 @@ -<a class="btn btn-lg btn-default" href="packaging_apps_en">Application packaging</a> +<a class="btn btn-lg btn-default" href="/packaging_apps">Application packaging</a> ### Multi-instance Multi-instance is application capacity to be installed several times. @@ -6,7 +6,7 @@ Multi-instance is application capacity to be installed several times. #### Scripts When YunoHost installs the application, it passes `$YNH_APP_INSTANCE_NAME` var to the script, set to value `id__n` with the application `id` coming from the manifest and `n` being an integer incremented each time a new instance of the application is installed. -**E.g.** in the roundcube script, database is called `roundcube`, the install directory `roundcube` and the [Nginx configuration](packaging_apps_nginx_conf_en) `roundcube`. This way, the second instance of roundcube will not conflict with the first one, and will be installed in the `roundcube__2` database, in the `roundcube__2`directory, and with the `roundcube__2` Nginx configuration. +**E.g.** in the roundcube script, database is called `roundcube`, the install directory `roundcube` and the [Nginx configuration](/packaging_apps_nginx_conf) `roundcube`. This way, the second instance of roundcube will not conflict with the first one, and will be installed in the `roundcube__2` database, in the `roundcube__2`directory, and with the `roundcube__2` Nginx configuration. Retrieve app identifier (including the multi-instance id): ```bash @@ -14,7 +14,7 @@ app=$YNH_APP_INSTANCE_NAME ``` #### Manifest -Set `multi_instance` variable to `true` in the [manifest](packaging_apps_manifest_en): +Set `multi_instance` variable to `true` in the [manifest](/packaging_apps_manifest): ```json "multi_instance": true, ``` diff --git a/packaging_apps_multiinstance_fr.md b/packaging_apps_multiinstance_fr.md index d652343a..58a6809b 100644 --- a/packaging_apps_multiinstance_fr.md +++ b/packaging_apps_multiinstance_fr.md @@ -1,4 +1,4 @@ -<a class="btn btn-lg btn-default" href="packaging_apps_fr">Packaging d’application</a> +<a class="btn btn-lg btn-default" href="/packaging_apps">Packaging d’application</a> ### Multi-instances Le multi-instance est la capacité d’une application à être installée plusieurs fois. @@ -6,7 +6,7 @@ Le multi-instance est la capacité d’une application à être installée plusi #### Scripts Lorsque YunoHost installe l’application, il passe au script dans la variable `$YNH_APP_INSTANCE_NAME` la valeur `id__n` avec l’identifiant de l’application `id` provenant du manifeste et `n` un nombre incrémentée à chaque nouvelle instance de l’application. -**Par exemple** : dans le script roundcube, il faut nommer la base de données `roundcube`, le dossier d’installation `roundcube` et la [configuration Nginx](packaging_apps_nginx_conf_fr) `roundcube`. De cette manière, la seconde installation de roundcube ne rentrera pas en conflit avec la première, et sera installée dans la base de données `roundcube__2`, dans le répertoire `roundcube__2`, et avec la configuration Nginx `roundcube__2`. +**Par exemple** : dans le script roundcube, il faut nommer la base de données `roundcube`, le dossier d’installation `roundcube` et la [configuration Nginx](/packaging_apps_nginx_conf) `roundcube`. De cette manière, la seconde installation de roundcube ne rentrera pas en conflit avec la première, et sera installée dans la base de données `roundcube__2`, dans le répertoire `roundcube__2`, et avec la configuration Nginx `roundcube__2`. Récupération de l'identifiant de l'app (incluant l'id multi-instance) : @@ -15,7 +15,7 @@ app=$YNH_APP_INSTANCE_NAME ``` #### Manifeste -Passer la variable `multi_instance` à `true` dans le [manifeste](packaging_apps_manifest_fr) : +Passer la variable `multi_instance` à `true` dans le [manifeste](/packaging_apps_manifest) : ```json "multi_instance": true, ``` diff --git a/packaging_apps_scripts.md b/packaging_apps_scripts.md index 78592f57..7d5c4a88 100644 --- a/packaging_apps_scripts.md +++ b/packaging_apps_scripts.md @@ -1,4 +1,4 @@ -<a class="btn btn-lg btn-default" href="packaging_apps_en">Application packaging</a> +<a class="btn btn-lg btn-default" href="/packaging_apps">Application packaging</a> ## Scripts diff --git a/packaging_apps_scripts_fr.md b/packaging_apps_scripts_fr.md index d17dde86..8854f287 100644 --- a/packaging_apps_scripts_fr.md +++ b/packaging_apps_scripts_fr.md @@ -1,4 +1,4 @@ -<a class="btn btn-lg btn-default" href="packaging_apps_fr">Packaging d’application</a> +<a class="btn btn-lg btn-default" href="/packaging_apps">Packaging d’application</a> ## Les scripts diff --git a/packaging_apps_start.md b/packaging_apps_start.md index 9cbecf34..7f4e99de 100644 --- a/packaging_apps_start.md +++ b/packaging_apps_start.md @@ -43,7 +43,7 @@ Scripts used during application packaging are simply a series of bash commands. A [bash](https://en.wikipedia.org/wiki/Bash_%28Unix_shell%29) command is a line of text that will be interpreted by the computer and will produce a result. This is commonly refered to as a command line. -You can ony interact with your server through the command line as it does not provide a graphical interface. Usual access is through [ssh](/ssh_en). +You can ony interact with your server through the command line as it does not provide a graphical interface. Usual access is through [ssh](/ssh). Package scripts are therefore a series of bash commands as if you had typed them directly in the ssh console. @@ -53,7 +53,7 @@ To know what you can write in a bash script, you should start reading this [simp Before starting the packaging process, you need to successfully install the application. The script will only perform what you instruct it 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. +Once completed, you need to read a little bit more documentation about application packaging. [This one is more technical](/packaging_apps) but now you should understand all the wizardry. ### HELP! NEED BACKUP! diff --git a/packaging_apps_start_fr.md b/packaging_apps_start_fr.md index cb64df10..0d8c3ce8 100644 --- a/packaging_apps_start_fr.md +++ b/packaging_apps_start_fr.md @@ -37,7 +37,7 @@ Les scripts d'un package d'application sont simplement des commandes bash les un #### ... Et c'est quoi une commande bash ? Une commande [bash](https://fr.wikipedia.org/wiki/Bourne-Again_shell) c'est une ligne de texte qui sera interprétée et produira un résultat. C'est ce qu'on a l'habitude d'appeler la ligne de commande. -Or puisque votre serveur, sur lequel est installé YunoHost, ne dispose pas d'une interface graphique, vous n'avez que la ligne de commande de disponible. Vous l'atteignez en général après vous être connecté avec [ssh](/ssh_fr). +Or puisque votre serveur, sur lequel est installé YunoHost, ne dispose pas d'une interface graphique, vous n'avez que la ligne de commande de disponible. Vous l'atteignez en général après vous être connecté avec [ssh](/ssh). Les scripts d'un package ne sont donc qu'une succession de commandes bash, comme si vous les aviez tapées directement dans la console ssh pour installer l'application. @@ -47,7 +47,7 @@ Pour savoir quoi écrire dans un script bash, je vous conseille de commencer par Avant d'envisager de faire un package d'application, il faut réussir à installer correctement la dites application. Car le script ne fera que ce que vous lui direz de faire. -Ensuite, il faut aller lire (et oui encore) la documentation sur le packaging, mais la vrai cette fois, [celle qui emploie des mots bizarres](/packaging_apps_fr). +Ensuite, il faut aller lire (et oui encore) la documentation sur le packaging, mais la vrai cette fois, [celle qui emploie des mots bizarres](/packaging_apps). Mais maintenant vous devriez les comprendre tout ces mots étranges. Mais heureusement, vous n'êtes pas seul pour affronter cette épreuve titanesque, il y a d'autres packageurs que vous pouvez venir rencontrer sur le [forum](https://forum.yunohost.org/c/apps-packaging) et sur le [salon de discussion](xmpp:apps@conference.yunohost.org?join). diff --git a/packaging_apps_virtualbox_fr.md b/packaging_apps_virtualbox_fr.md index 1aadff27..e046139f 100644 --- a/packaging_apps_virtualbox_fr.md +++ b/packaging_apps_virtualbox_fr.md @@ -9,7 +9,7 @@ Il y a principalement deux raisons pour préférer l'usage d'un serveur virtuel - Vous pouvez torturer à loisir un serveur virtuel sans courir le risque de le casser, puisque vous pourrez toujours restaurer un état précédent. Alors qu'il serait dommage de casser son propre serveur ! - Un serveur virtuel sera restauré avant de travailler dessus, pour garder en permanence un système sans résidus d'une précédente installation. Cela permet de se rapprocher au plus près d'une première installation par un utilisateur. -Nous parlerons ici de VirtualBox, pour son approche graphique facile à utiliser. Si vous préférez une interface en ligne de commande pour la gestion de la machine virtuelle, tournez-vous de préférence vers [ynh-dev](/dev_fr). +Nous parlerons ici de VirtualBox, pour son approche graphique facile à utiliser. Si vous préférez une interface en ligne de commande pour la gestion de la machine virtuelle, tournez-vous de préférence vers [ynh-dev](/dev). ## Installer VirtualBox @@ -20,12 +20,12 @@ Quel que soit votre système, il ne devrait pas être nécessaire d'installer l' ## Installer YunoHost sur VirtualBox -Suivez simplement la documentation idoine pour l'[installation sur VirtualBox](/install_on_virtualbox_fr) puis la documentation sur la [post-installation](/postinstall_fr). +Suivez simplement la documentation idoine pour l'[installation sur VirtualBox](/install_on_virtualbox) puis la documentation sur la [post-installation](/postinstall). Lors de la post-installation, il est inutile d'utiliser un nom de domaine en `.nohost.me` ou `.noho.st`, votre serveur virtuel ne sera pas accessible depuis l'extérieur de votre réseau local. Nous préférerons l'usage d'un faux nom de domaine qui restera cantonné au réseau local. Par exemple, `yunohost.packaging`. -Ce nom de domaine n'étant enregistré dans aucun serveur DNS, on l'enregistrera dans le fichier `hosts` de l'ordinateur qui y accédera. Voir la documentation sur le [DNS local](/dns_local_network_fr). +Ce nom de domaine n'étant enregistré dans aucun serveur DNS, on l'enregistrera dans le fichier `hosts` de l'ordinateur qui y accédera. Voir la documentation sur le [DNS local](/dns_local_network). Votre serveur virtuel est à présent installé. Avant de commencer à l'utiliser, nous allons voir comment créer un premier instantané et comment les utiliser. diff --git a/postinstall_es.md b/postinstall_es.md index 015515f4..7cb92da2 100644 --- a/postinstall_es.md +++ b/postinstall_es.md @@ -32,14 +32,14 @@ Es el nombre de dominio que permitirá el acceso a tu servidor así como al port * YunoHost te propone un DNS dinámico, proveando nombres de dominio del tipo *midominio.nohost.me*, *midominio.noho.st* o *midominio.ynh.fr*. Si no posees un nombre de dominio y/o que quieres aprovechar de este servicio, elige un dominio terminando con `.nohost.me`, `.noho.st` o `.ynh.fr`. Si no está utlizado ya, el dominio automáticamente estará vinculado a tu servidor Yunohost, y no tendrás más etapas de configuración. -* Si, en cambio, dominas la noción de **DNS**, puedes utilizar tu propio nombre de dominio. En este caso, refiérete a la página [yunohost.org/dns](/dns_es) por más información. +* Si, en cambio, dominas la noción de **DNS**, puedes utilizar tu propio nombre de dominio. En este caso, refiérete a la página [yunohost.org/dns](/dns) por más información. -* Si no tienes nombre de dominio y que no quieres uno que acabe con *.nohost.me*, *.noho.st* ou *.ynh.fr*, puedes utilizar un dominio local. Más información sobre cómo [acceder a tu servidor desde la red local](/dns_local_network_es). +* Si no tienes nombre de dominio y que no quieres uno que acabe con *.nohost.me*, *.noho.st* ou *.ynh.fr*, puedes utilizar un dominio local. Más información sobre cómo [acceder a tu servidor desde la red local](/dns_local_network). ### Contraseña de administración -Es la contraseña que permitirá acceder a la [interfaz de administración](/admin_es) de tu servidor. También podrás utilizarla para conectarte remotamente vía **SSH**, o vía **SFTP** para transferir archivos. +Es la contraseña que permitirá acceder a la [interfaz de administración](/admin) de tu servidor. También podrás utilizarla para conectarte remotamente vía **SSH**, o vía **SFTP** para transferir archivos. De manera general, ésta es la **llave de entrada en tu sistema**, pues piensa en **[elegirla atentamente](https://es.wikihow.com/escoger-una-contrase%C3%B1a-segura)**. @@ -54,10 +54,10 @@ Si llegas aquí después de haber visto “Yunohost fue instalado con éxito" de ### ¿ Y ahora ? -- Si te auto-alojas en casa y sin VPN, tienes que asegurarte que [los puertos de tu caja internet estén redirigidos](isp_box_config_es) ; +- Si te auto-alojas en casa y sin VPN, tienes que asegurarte que [los puertos de tu caja internet estén redirigidos](/isp_box_config) ; - Si utilizas tu propio nombre de dominio (i.e. que no sea un nohost.me / - noho.st), tienes que [configurar el nombre de dominio según la configuración recomendada](dns_config_es) ; -- Si no puedes configurar el nombre de dominio de momento (porque todavía no lo has comprado, ou porque es un dominio test), puedes solucionar temporalmente el problema con las instrucciones del último párrafo [aquí](dns_local_network_es) ; -- No te asustes demasiado por [la advertencia a propósito del certificado](certificate_es), tendrás la posibilidad de obtener un certificado Let's Encrypt :). -- Echa un vistazo a las [aplicaciones disponibles](apps_es) ! + noho.st), tienes que [configurar el nombre de dominio según la configuración recomendada](/dns_config) ; +- Si no puedes configurar el nombre de dominio de momento (porque todavía no lo has comprado, ou porque es un dominio test), puedes solucionar temporalmente el problema con las instrucciones del último párrafo [aquí](/dns_local_network) ; +- No te asustes demasiado por [la advertencia a propósito del certificado](/certificate), tendrás la posibilidad de obtener un certificado Let's Encrypt :). +- Echa un vistazo a las [aplicaciones disponibles](/apps) ! diff --git a/postinstall_fr.md b/postinstall_fr.md index d02cee89..7b912a8e 100644 --- a/postinstall_fr.md +++ b/postinstall_fr.md @@ -33,14 +33,14 @@ C’est le nom de domaine qui permettra l’accès à votre serveur ainsi qu’a * YunoHost propose un service de DNS dynamique fournissant des noms de domaine de type *mondomaine.nohost.me*, *mondomaine.noho.st* ou *mondomaine.ynh.fr*. Si vous ne possédez pas de nom de domaine et/ou que vous souhaitez profiter de ce service, choisissez un domaine se terminant en `.nohost.me`, `.noho.st` ou `.ynh.fr`. S'il n'est pas déjà utilisé, le domaine sera automatiquement rattaché à votre serveur YunoHost, et vous n’aurez pas d’étape de configuration supplémentaire. -* Si en revanche vous maîtrisez la notion de **DNS**, vous pouvez utiliser votre propre nom de domaine. Dans ce cas, référez-vous à la page [yunohost.org/dns](/dns_fr) pour plus d’informations. +* Si en revanche vous maîtrisez la notion de **DNS**, vous pouvez utiliser votre propre nom de domaine. Dans ce cas, référez-vous à la page [yunohost.org/dns](/dns) pour plus d’informations. -* Si vous n'avez pas de nom de domaine et que vous n'en voulez pas en *mondomaine.nohost.me*, *mondomaine.noho.st* ou *mondomaine.ynh.fr*, vous pouvez utilisez un domaine local. Plus d'infos sur comment [accéder à son serveur depuis le réseau local](/dns_local_network_fr). +* Si vous n'avez pas de nom de domaine et que vous n'en voulez pas en *mondomaine.nohost.me*, *mondomaine.noho.st* ou *mondomaine.ynh.fr*, vous pouvez utilisez un domaine local. Plus d'infos sur comment [accéder à son serveur depuis le réseau local](/dns_local_network). ### Mot de passe d’administration -C’est le mot de passe qui vous permettra d’accéder à l’[interface d’administration](/admin_fr) de votre serveur. Vous pourrez également l’utiliser pour vous connecter à distance via **SSH**, ou en **SFTP** pour transférer des fichiers. +C’est le mot de passe qui vous permettra d’accéder à l’[interface d’administration](/admin) de votre serveur. Vous pourrez également l’utiliser pour vous connecter à distance via **SSH**, ou en **SFTP** pour transférer des fichiers. De manière générale, c’est la **clé d’entrée à votre système**, pensez donc à la **[choisir attentivement](http://www.commentcamarche.net/faq/8275-choisir-un-bon-mot-de-passe)**. @@ -56,16 +56,16 @@ votre navigateur ou la ligne de commande, alors félicitations ! ### 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) ; + de bien [rediriger les ports de votre box internet](/isp_box_config) ; - Si vous utilisez votre propre nom de domaine (c.-à-d. pas un nohost.me / noho.st), il vous faut [configurer le nom de domaine d'après la configuration - recommandée](dns_config_fr) ; + recommandée](/dns_config) ; - 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) ; + paragraphe [ici](/dns_local_network) ; - Ne soyez pas trop effrayé par [l'avertissement à propos du - certificat](certificate_fr), vous aurez probablement la possibilité + certificat](/certificate), vous aurez probablement la possibilité d'installer un certificat Let's Encrypt :). -- Jetez un oeil aux [applications disponibles](apps_fr) ! +- Jetez un oeil aux [applications disponibles](/apps) ! diff --git a/security_fr.md b/security_fr.md index 16af38ea..8d9c94e2 100644 --- a/security_fr.md +++ b/security_fr.md @@ -11,9 +11,9 @@ Deux points sont néanmoins importants à noter : * 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](/help_fr).* +*Si vous avez besoin de conseil, n’hésitez pas à [nous demander](/help).* -*Pour discuter d'une faille de sécurité, contactez l'[équipe sécurité de YunoHost](/security_team_fr).* +*Pour discuter d'une faille de sécurité, contactez l'[équipe sécurité de YunoHost](/security_team).* --- @@ -178,7 +178,7 @@ sudo yunohost settings set security.ssh.compatibility -v modern ### Désactivation de l’API YunoHost -YunoHost est administrable via une **API HTTP**, servie sur le port 6787 par défaut (seulement sur `localhost`). 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. +YunoHost est administrable via une **API HTTP**, servie sur le port 6787 par défaut (seulement sur `localhost`). 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)** en SSH. ```bash sudo systemctl disable yunohost-api diff --git a/selfhosting_ru.md b/selfhosting_ru.md index 07881197..40f82c63 100644 --- a/selfhosting_ru.md +++ b/selfhosting_ru.md @@ -4,11 +4,11 @@ **Свой хостинг** - это сервер, расположенный у вас дома и предназначенный для размещения информации для личных нужд. #### Обязанности администратора -Свой хостинг создает для вас определенные обязанности, если вы хотите разместить на нём сайт, [e-mail](email_en), а также запустить [систему мгновенных сообщений](XMPP), ваш сервер должен работать и оставаться онлайн 24/7. +Свой хостинг создает для вас определенные обязанности, если вы хотите разместить на нём сайт, [e-mail](/email), а также запустить [систему мгновенных сообщений](XMPP), ваш сервер должен работать и оставаться онлайн 24/7. Распространенные проблемы, по причине которых сервер может быть недоступен включают в себя: отсутствие электроэнергии, потеря доступа к Интернету, итд. -К примеру, если вы используете [e-mail](email_en) и ваш сервер по какой-то причине становится недоступен, отправленные на него сообщения будут отправлены снова только по прошествии от 3 до 7 дней. +К примеру, если вы используете [e-mail](/email) и ваш сервер по какой-то причине становится недоступен, отправленные на него сообщения будут отправлены снова только по прошествии от 3 до 7 дней. #### Минусы своего хостинга * Медленная передача данных. При использовании ADSL, скорость загрузки составляет 1/10 от скорости закачки. К примеру при скорости загрузки 1Мб/с скорость загрузки будет около 100Кб/с; diff --git a/ssh.md b/ssh.md index 05073dbe..68084a69 100644 --- a/ssh.md +++ b/ssh.md @@ -95,4 +95,4 @@ yunohost user ssh list-keys <username> N.B. : `fail2ban` will ban your IP for 10 mimutes if you perform 5 failed login attempts. If you need to unban the IP, have a look at the page about [fail2ban](/fail2ban) -A more extensive discussion about security & SSH can be found on the [dedicated page](security_en). +A more extensive discussion about security & SSH can be found on the [dedicated page](/security). diff --git a/ssh_es.md b/ssh_es.md index 6b09207c..2cb0cba8 100644 --- a/ssh_es.md +++ b/ssh_es.md @@ -45,7 +45,7 @@ Si sólo conoces el IP de tu servidor : ssh admin@111.222.333.444 ``` -Luego, entra la contraseña de administración que has elegido durante la post-instalación [post-installation](postinstall_es). +Luego, entra la contraseña de administración que has elegido durante la post-instalación [post-installation](/postinstall). Si has configurado tus DNS (o modificar tu `/etc/hosts`), puedes utilizar tu nombre de dominio : @@ -86,6 +86,6 @@ yunohost user ssh list-keys <username> ## SSH y seguridad -N.B. : `fail2ban` proscribirá tu IP durante 10 minutos si fracasas más de 5 veces consecutivas en identificarte. Si esto ocurre y que quieres re-validar tu IP, puedes echar un vistazo a la página [fail2ban](/fail2ban_es) +N.B. : `fail2ban` proscribirá tu IP durante 10 minutos si fracasas más de 5 veces consecutivas en identificarte. Si esto ocurre y que quieres re-validar tu IP, puedes echar un vistazo a la página [fail2ban](/fail2ban) -Encontrarás explicaciones más completa sobre la seguridad y SSH en [la página dedicada](security_es). +Encontrarás explicaciones más completa sobre la seguridad y SSH en [la página dedicada](/security). diff --git a/ssh_fr.md b/ssh_fr.md index 124dac3b..dbc8243f 100644 --- a/ssh_fr.md +++ b/ssh_fr.md @@ -90,6 +90,6 @@ yunohost user ssh list-keys <username> ## SSH et sécurité -N.B. : `fail2ban` bannira votre IP pour 10 minutes si vous échouez plus de 5 fois à vous identifier. Pour débannir une IP, vous pouvez regarder la page sur [fail2ban](/fail2ban_fr) +N.B. : `fail2ban` bannira votre IP pour 10 minutes si vous échouez plus de 5 fois à vous identifier. Pour débannir une IP, vous pouvez regarder la page sur [fail2ban](/fail2ban) -Une discussion plus complète de la sécurité et de SSH peut être trouvée sur [la page dédiée](security_fr). +Une discussion plus complète de la sécurité et de SSH peut être trouvée sur [la page dédiée](/security). diff --git a/ssh_it.md b/ssh_it.md index 5206a2d3..b172629c 100644 --- a/ssh_it.md +++ b/ssh_it.md @@ -89,4 +89,4 @@ yunohost user ssh list-keys <username> N.B.: `fail2ban` bannerà il tuo IP per 10 minuti nel caso di almeno 5 tentativi di accesso falliti. Se devi togliere il ban al tuo IP leggi la pagina relativa [fail2ban](/fail2ban) -Una discussione più approfondita relativa a sicurezza & SSH è su [questa pagina](security_en). +Una discussione più approfondita relativa a sicurezza & SSH è su [questa pagina](/security). diff --git a/troubleshooting_guide.md b/troubleshooting_guide.md index 7bb35784..f1d85a0b 100644 --- a/troubleshooting_guide.md +++ b/troubleshooting_guide.md @@ -11,16 +11,16 @@ Also: https://wiki.debian.org/DontBreakDebian ### Do not install bad quality apps -Even if it can be tempting to install every [apps](https://yunohost.org/#/apps), be careful to their quality level as a bad quality app can ultimately break your server. If you absolutely wish to install such an app, at least try to do it on a test server or check if issues has been posted to this app's Github repository or on the [forum](http://forum.yunohost.org/). +Even if it can be tempting to install every [apps](/apps), be careful to their quality level as a bad quality app can ultimately break your server. If you absolutely wish to install such an app, at least try to do it on a test server or check if issues has been posted to this app's Github repository or on the [forum](http://forum.yunohost.org/). ### Check the official documentation -Answer to your question may be already in [the documentation](https://yunohost.org/#/docs_en). +Answer to your question may be already in [the documentation](/docs). ### Check the command line help -Learn how to use the [YunoHost commands](https://yunohost.org/#/commandline) like a pro. +Learn how to use the [YunoHost commands](/commandline) like a pro. ## Upgrade -Problems often occur 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](/app_update). **Check if some processes are using old libraries** @@ -54,7 +54,7 @@ $ yunohost app upgrade -u https://github.com/user/someapp_ynh app_name ``` ## Services -YunoHost uses a bunch of software to accomplish its purpose. Most of theses software are registered as service in Debian. [More info](https://yunohost.org/#/whatsyunohost_fr). +YunoHost uses a bunch of software to accomplish its purpose. Most of theses software are registered as service in Debian. [More info](/whatsyunohost). ### Check services status 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. @@ -81,7 +81,7 @@ All services should be enabled and running. Except glances (optional). If some a - **Postfix**: SMTP email server, used to send email - **Postgrey**: greylisting policy server, if you use YunoHost email, you should [learn more about greylisting](http://en.wikipedia.org/wiki/Greylisting) - **Slapd**: LDAP server, used for authentification (SSO and apps) -- [**SSH**](/ssh_en): Secure Shell +- [**SSH**](/ssh): Secure Shell - [**SSOwat**](https://github.com/Kloadut/SSOwat/): an simple sign-on - **YunoHost-API**: YunoHost web administration @@ -275,7 +275,7 @@ There is no logfile for application install so when you install an app, keep the ``` ## Applications -This part is more for packager or to understand the link between Nginx and webapps. First, you should know [how to package a new app](https://yunohost.org/#/packaging_apps_en). +This part is more for packager or to understand the link between Nginx and webapps. First, you should know [how to package a new app](/packaging_apps). When troubleshooting an application issue can occur at several levels. There is a wide variety of applications and their deployment to YunoHost will depending on the programming language of the app. We will deal here with the most commons cases. Applications configurations are not treated because it completely differs according to the application. diff --git a/troubleshooting_guide_fr.md b/troubleshooting_guide_fr.md index 6a0f1e12..15969124 100644 --- a/troubleshooting_guide_fr.md +++ b/troubleshooting_guide_fr.md @@ -5,22 +5,22 @@ Ce guide peut trouver son intérêt lors du débuggage d’une nouvelle applicat ## Notes générales ### Ne cassez pas YunoHost -La meilleure manière de ne pas avoir de pannes est de ne pas bricoler sur votre serveur. Cela signifie que dès que vous souhaitez essayer quelque chose de nouveau (application non officielle, nouvelle configuration personnalisée, création d’une nouvelle application), essayez d'abord cela sur un serveur de test et non de production. Pour faire cela, vous pouvez par exemple utiliser une [virtualbox](install_on_virtualbox_fr) ou un [droplet DigitalOcean](install_on_vps_fr) pour 1 centime/heure. +La meilleure manière de ne pas avoir de pannes est de ne pas bricoler sur votre serveur. Cela signifie que dès que vous souhaitez essayer quelque chose de nouveau (application non officielle, nouvelle configuration personnalisée, création d’une nouvelle application), essayez d'abord cela sur un serveur de test et non de production. Pour faire cela, vous pouvez par exemple utiliser une [virtualbox](/install_on_virtualbox) ou un [droplet DigitalOcean](/install_on_vps) pour 1 centime/heure. Vous pouvez aussi lire ceci si vous avez encore envie de bricoler sur votre instance YunoHost en production : https://wiki.debian.org/DontBreakDebian ### N'installez pas d'applications de mauvaise qualité -Bien que ce soit tentant d’installer toutes les [applications](https://yunohost.org/#/apps), faites attention à leur niveau de qualité car une mauvaise application peut casser votre serveur. Si la qualité d'une application laisse à désirez mais que vous souhaitez tout de même absolument l'installer, essayez de faire ça sur un serveur de test, ou vérifiez au minimum si des problèmes ont été remontés sur le dépôt Github associé ou bien sur le [forum](http://forum.yunohost.org/). +Bien que ce soit tentant d’installer toutes les [applications](/apps), faites attention à leur niveau de qualité car une mauvaise application peut casser votre serveur. Si la qualité d'une application laisse à désirez mais que vous souhaitez tout de même absolument l'installer, essayez de faire ça sur un serveur de test, ou vérifiez au minimum si des problèmes ont été remontés sur le dépôt Github associé ou bien sur le [forum](http://forum.yunohost.org/). ### Vérifier la documentation officielle -Les réponses à vos questions existent peut être déjà dans [la documentation](docs_fr). +Les réponses à vos questions existent peut être déjà dans [la documentation](/docs). ### Vérifier l’aide dans les commandes en ligne -Vous pouvez apprendre à utiliser les [commandes YunoHost](/commandline_fr) +Vous pouvez apprendre à utiliser les [commandes YunoHost](/commandline) ## 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). +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). **Vérifier si un processus utilise une ancienne librairie** @@ -58,7 +58,7 @@ $ yunohost app upgrade -u https://github.com/user/someapp_ynh app_name ``` ## Les services -YunoHost utilise toute une série de logiciels pour fonctionner. La plupart de ces logiciels sont déclarés comme des services dans Debian [plus d’info](whatsyunohost_fr). +YunoHost utilise toute une série de logiciels pour fonctionner. La plupart de ces logiciels sont déclarés comme des services dans Debian [plus d’info](/whatsyunohost). ### Vérifier le statut des services 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. @@ -86,7 +86,7 @@ Voici une petite description de leurs fonctions respectives : - **Postgrey** : serveur de listes grises, si vous utilisez YunoHost pour les mails, vous devriez regarder un peu plus sur cette question. [En apprendre plus sur les listes grises](http://en.wikipedia.org/wiki/Greylisting) - **Slapd** : serveur LDAP, utilisé pour l’authentification (SSO and apps) -- [**SSH**](/ssh_en) : Secure Shell, utilisé pour l’accès distant au serveur. +- [**SSH**](/ssh) : Secure Shell, utilisé pour l’accès distant au serveur. - [**SSOwat**](https://github.com/Kloadut/SSOwat/) : gestionnaire simple d’authentification. - **YunoHost-API** : administration web de YunoHost @@ -290,7 +290,7 @@ Il n’y a pas de fichier de log créé lorsque vous installez une application. ## Applications Cette partie concerne plus les créateurs d’applications YunoHost mais permet néanmoins de comprendre le lien entre Nginx et les applications web. -Premièrement, vous devez savoir [comment créer un paquet pour une nouvelle application](packaging_apps_fr). +Premièrement, vous devez savoir [comment créer un paquet pour une nouvelle application](/packaging_apps). Quand vous bricolez une application, des erreurs peuvent avoir lieu selon certains niveaux d’importance. Il y a une grande variété d’applications et le déploiement de celles-ci va dépendre du langage de programmation de l’application. Nous allons voir ici les « cas classiques ». diff --git a/use_case_non-profit_organisations.md b/use_case_non-profit_organisations.md index 146494b0..f16fdf53 100644 --- a/use_case_non-profit_organisations.md +++ b/use_case_non-profit_organisations.md @@ -201,4 +201,4 @@ But for production, localy stored backup are not enough, so you will need to imp ## Conclusion YunoHost can cover 99% of the needs of non-profit organizations, allowing them to own and protect their data, choose applications they want to use. -And if one is not available, they can [package it for YunoHost](https://yunohost.org/#/contributordoc), it's very simple. +And if one is not available, they can [package it for YunoHost](/contributordoc), it's very simple. diff --git a/use_case_non-profit_organisations_fr.md b/use_case_non-profit_organisations_fr.md index 2409f3e8..5e95773f 100644 --- a/use_case_non-profit_organisations_fr.md +++ b/use_case_non-profit_organisations_fr.md @@ -200,4 +200,4 @@ Mais pour la production, la sauvegarde stockée localement ne suffit pas, vous d ## Conclusion YunoHost peut couvrir 99% des besoins des organisations à but non lucratif, leur permettant de posséder et de protéger leurs données, de choisir les applications qu'elles souhaitent utiliser. -Et s’ils ne sont pas disponibles, ils peuvent [les packager pour YunoHost](https://yunohost.org/#/contributordoc), c’est très simple. +Et s’ils ne sont pas disponibles, ils peuvent [les packager pour YunoHost](/contributordoc), c’est très simple. diff --git a/use_case_non-profit_organisations_oc.md b/use_case_non-profit_organisations_oc.md index 3dc63891..946b3a54 100644 --- a/use_case_non-profit_organisations_oc.md +++ b/use_case_non-profit_organisations_oc.md @@ -200,4 +200,4 @@ Mas per la produccion, la salvagarda gardada localament basta pas, vos cal emple ## Conclusion YunoHost pòt cumplir 99% dels besonhs de las organizacions sens tòca lucrativa, en lor permetent de téner e protegir lors donadas, de causir las aplicacions que vòlon utilizar. -E se son pas disponiblas, pòdon [crear un paquet per YunoHost](https://yunohost.org/#/contributordoc), es fòrça simple. +E se son pas disponiblas, pòdon [crear un paquet per YunoHost](/contributordoc), es fòrça simple. diff --git a/whatsyunohost_ar.md b/whatsyunohost_ar.md index f6634cb6..d1776397 100644 --- a/whatsyunohost_ar.md +++ b/whatsyunohost_ar.md @@ -64,16 +64,16 @@ Constatant l’engouement croissant autour de YunoHost et de l’auto-hébergeme 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. +Le tout est bien entendu **entièrement libre**. La philosophie de l’[الإستضافة الذاتية](/selfhosting) étant à nos yeux incompatible avec tout autre modèle de développement logiciel. -لا تتردّدوا في زيارة صفحة « [ساهموا](/contribute_ar) ». +لا تتردّدوا في زيارة صفحة « [ساهموا](/contribute) ». </div> --- ###<div dir="rtl"> الأمان</div> -لقد بُذِلت كل المجهودات مِن أجل تأمين واي يونوهوست YunoHost و **تعمية و تشفير البروتوكولات** . بإمكانكم الإطلاع على الشرح بتفاصيليه [هنا](/security_fr). +لقد بُذِلت كل المجهودات مِن أجل تأمين واي يونوهوست YunoHost و **تعمية و تشفير البروتوكولات** . بإمكانكم الإطلاع على الشرح بتفاصيليه [هنا](/security). </div> --- diff --git a/whatsyunohost_fr.md b/whatsyunohost_fr.md index dcec435b..48b6550a 100644 --- a/whatsyunohost_fr.md +++ b/whatsyunohost_fr.md @@ -3,7 +3,7 @@ Qu'est-ce que YunoHost ? <img src="/images/YunoHost_logo_vertical.png" width=400> -YunoHost est un **système d’exploitation** qui vise à simplifier autant que possible l'administration d'un **serveur** pour ainsi démocratiser [l’auto-hébergement](selfhosting_fr) tout en restant fiable, sécurisé, éthique et léger. C'est un projet de logiciel libre maintenu exclusivement par des bénévoles. Techniquement, il peut être vu comme une distribution basé sur [Debian GNU/Linux](https://debian.org) et peut s'installer sur [de nombreux types de matériel](install_fr). +YunoHost est un **système d’exploitation** qui vise à simplifier autant que possible l'administration d'un **serveur** pour ainsi démocratiser [l’auto-hébergement](/selfhosting) tout en restant fiable, sécurisé, éthique et léger. C'est un projet de logiciel libre maintenu exclusivement par des bénévoles. Techniquement, il peut être vu comme une distribution basé sur [Debian GNU/Linux](https://debian.org) et peut s'installer sur [de nombreux types de matériel](/install). Fonctionnalités --------------- From e41e91b37f8859d20ff840a9e93825e2c711d436 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Sat, 28 Mar 2020 07:13:50 +0100 Subject: [PATCH 336/360] No need to have this page now with the new Simone auto-fallback to english --- apps_wishlist_fr.md | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 apps_wishlist_fr.md diff --git a/apps_wishlist_fr.md b/apps_wishlist_fr.md deleted file mode 100644 index 88160e7b..00000000 --- a/apps_wishlist_fr.md +++ /dev/null @@ -1,3 +0,0 @@ -# Apps souhaitées - -La liste des applications souhaitées n’est maintenue qu’en <a href="/apps_wishlist">version anglaise</a>. Merci de vous y référer. From 1d25c263ae4ca366e938f949b4762e51caef874a Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sun, 29 Mar 2020 01:20:21 +0000 Subject: [PATCH 337/360] le lien est mort :( --- email_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/email_fr.md b/email_fr.md index e1c2ca08..2a5ae7b7 100644 --- a/email_fr.md +++ b/email_fr.md @@ -47,4 +47,4 @@ Pour aller plus loin -------------------- - Il existe une page de documentation pour [migrer ses emails d'un fournisseur de messagerie vers une instance YunoHost](email_migration). -- Pour approfondir votre compréhension du courriel et de ses protocoles, voici une [conférence éclairante](https://www.iletaitunefoisinternet.fr/post/7-email-sonntag/)(en français). +- Pour approfondir votre compréhension du courriel et de ses protocoles, voici une [conférence éclairante](https://www.iletaitunefoisinternet.fr/post/7-email-sonntag/)(en français). lien cassé.... From fb885da9b81a8f38ad27adbf8b8cb67fbc50c4ef Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sun, 29 Mar 2020 16:58:55 +0000 Subject: [PATCH 338/360] Fixed english typos/grammatical mistakes --- security.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/security.md b/security.md index b2cff099..8884ccab 100644 --- a/security.md +++ b/security.md @@ -1,6 +1,6 @@ # Security -YunoHost has been developed to provide the best security without too much complication. Every protocol used in YunoHost are **encrypted**, only password's hashs are stored and by default each user is able to access to his personal directory only. +YunoHost has been developed to provide the best security without too much complication. Every protocol used in YunoHost is **encrypted**, only password's hashes are stored and by default each user is able to access his personal directory only. Two things remain important to note: @@ -40,33 +40,33 @@ nano /etc/ssh/sshd_config PasswordAuthentication no ``` -Save and restart SSH daemon. +Save and restart the SSH daemon. ```bash systemctl restart ssh ``` --- -### Modify SSH port +### Modify the SSH port -To prevent SSH connection attempts by robots that scan the Internet for any servers with SSH accessible, you can change the SSH port. +To prevent SSH connection attempts by robots that scan the Internet for any server with SSH enabled, you can change the SSH port. -**On your server**, edit the ssh configuration file, in order to modify SSH port. +**On your server**, edit the ssh configuration file, in order to modify the SSH port. ```bash nano /etc/ssh/sshd_config ``` -**Search line "Port" and replace** port number (by default 22) by another not used number +**Search the line "Port" and replace** port number (by default 22) by another unused number ```bash # What ports, IPs and protocols we listen for Port 22 # to replace by 9777 for example ``` -**Open the port** in firewall (you can use `-6` option to deny ipv4 connection) +**Open the port** in the firewall (you can use `-6` option to deny ipv4 connection) ```bash yunohost firewall allow TCP 9777 ``` -Save and restart SSH daemon. Switch over to the new port by restarting SSH. +Save and restart the SSH daemon. Switch over to the new port by restarting SSH. ```bash systemctl restart ssh ``` @@ -86,7 +86,7 @@ To do that you need to create the configuration file `my_ssh_port.conf` with the nano /etc/fail2ban/jail.d/my_ssh_port.conf ``` -and you can fill it with +and you can then fill it in with ```bash [sshd] @@ -114,7 +114,7 @@ ssh -p <new_ssh_port_number> admin@<your_yunohost_server> ### Change the user authorized to connect via SSH -To avoid multiple forced login attempts to admin by robots, change the authorized user who can connect. +To avoid multiple forced login attempts to the admin account by robots, change the authorized user who can connect. <div class="alert alert-info" markdown="1"> In the case of a key authentication, a brute force attack has no chance of succeeding. This step is not really useful in this case. @@ -124,8 +124,8 @@ In the case of a key authentication, a brute force attack has no chance of succe ```bash sudo adduser user_name ``` -Choose a strong password, since this user will be responsible to obtain root privileges. -Add the user to sudo group to allow him/her to perform maintenance tasks that require root privileges. +Choose a strong password, since this user will be responsible with obtaining root privileges. +Add the user to the sudo group to allow him/her to perform maintenance tasks that require root privileges. ```bash sudo adduser user_name sudo ``` @@ -140,7 +140,7 @@ 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. +Save and restart the SSH daemon. ```bash systemctl restart ssh ``` @@ -148,9 +148,9 @@ systemctl restart ssh ### Change cipher compatibility configuration -The default TLS configuration for services tend to offer a good compatibility to support old devices. You can tune this policy for specific services like SSH and NGINX. By default, the NGINX configuration follows the [intermediate compatibility recommendation](https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28default.29) from Mozilla. You can choose to switch to the 'modern' configuration which uses more recent security recommendations, but decreases the compatibility, which may be an issue for your users and visitors using older devices. More details about the compatibility can be found on [this page](https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility). +The default TLS configuration for services tends to offer good compatibility to support old devices. You can tune this policy for specific services like SSH and NGINX. By default, the NGINX configuration follows the [intermediate compatibility recommendation](https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28default.29) from Mozilla. You can choose to switch to the 'modern' configuration which uses more recent security recommendations, but decreases the compatibility, which may be an issue for your users and visitors using older devices. More details about the compatibility can be found on [this page](https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility). -Changing the compatibility level is not definitive and can be reverted if it doesn't feet your environment. +Changing the compatibility level is not definitive and can be reverted if it doesn't fit with your environment. **On your server**, change the policy for NGINX ```bash @@ -162,8 +162,8 @@ sudo yunohost settings set security.nginx.compatibility -v modern sudo yunohost settings set security.ssh.compatibility -v modern ``` -### Disable YunoHost API -YunoHost administration is accessible through an **HTTP API**, served on the 6787 port by default (only on `localhost`). It can be used to administrate a lot of things on your server, so malicious actors can also use it to damage your server. The best thing to do, if you know how to use the [command-line interface](/commandline), is to deactivate the `yunohost-api` service. +### Disable the YunoHost API +YunoHost administration is accessible through an **HTTP API**, served on the 6787 port by default (only on `localhost`). It can be used to administer a lot of things on your server, so malicious actors can also use it to damage your server. 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 systemctl disable yunohost-api From 2ea08ef1e3d88f853bed54b7219a60b2585d92ab Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Sun, 29 Mar 2020 21:18:30 +0200 Subject: [PATCH 339/360] Attempt to add travis tests (+ autolinter script for links) --- .travis.yml | 5 +++++ tests/dead_links.sh | 19 +++++++++++++++++++ tests/uniformize_links.sh | 13 +++++++++++++ tests/unreferenced_pages.sh | 25 +++++++++++++++++++++++++ 4 files changed, 62 insertions(+) create mode 100644 .travis.yml create mode 100644 tests/dead_links.sh create mode 100644 tests/uniformize_links.sh create mode 100644 tests/unreferenced_pages.sh diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..ec7369c8 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,5 @@ +language: bash + +script: + - bash tests/dead_links.sh + - bash tests/unreferenced_pages.sh diff --git a/tests/dead_links.sh b/tests/dead_links.sh new file mode 100644 index 00000000..f51cec96 --- /dev/null +++ b/tests/dead_links.sh @@ -0,0 +1,19 @@ +returncode=0 + +# Find all markdown links and generate a list of filename.md:N:linktarget (with N the line number) +for LINK in $(grep -nr -o -E "\]\(\/?(\w|-)+\)" ./*.md | tr -d ']()/') +do + PAGE=$(echo $LINK | awk -F: '{print $3}') + [ -e "$PAGE.md" ] || echo "This link looks dead (page doesn't exist in english?) $LINK" + [ -e "$PAGE.md" ] || returncode=1 +done + +# Find all HTML/href links and generate a list of filename.md:N:linktarget (with N the line number) +for LINK in $(grep -nr -o -E 'href="\/?(\w|-)+\"' ./*.md | sed -E 's@href="/?@@g' | tr -d '"') +do + PAGE=$(echo $LINK | awk -F: '{print $3}') + [ -e "$PAGE.md" ] || echo "This link looks dead (page doesn't exist in english?) $LINK" + [ -e "$PAGE.md" ] || returncode=1 +done + +exit $returncode diff --git a/tests/uniformize_links.sh b/tests/uniformize_links.sh new file mode 100644 index 00000000..4a4e76be --- /dev/null +++ b/tests/uniformize_links.sh @@ -0,0 +1,13 @@ +for FILE in $(ls *.md); +do + # Replace markdown links with full url ... we only need the relative url + sed -i -E 's@\(https://yunohost.org/#/(\w+)\)@(/\1)@g' $FILE + + # Replace (/foo_fr) to (foo) + sed -i -E 's@\(\/?((\w|-)+)_(en|fr|es|it|ar|de|oc)\)@(/\1)@g' $FILE + + # Replace href="/foo_fr" to href="foo" + sed -i -E 's@href="/?((\w|-)+)_(en|fr|es|it|ar|de|oc)"@href="/\1"@g' $FILE; +done + +git checkout project_organization.md project_organization_fr.md diff --git a/tests/unreferenced_pages.sh b/tests/unreferenced_pages.sh new file mode 100644 index 00000000..21c72119 --- /dev/null +++ b/tests/unreferenced_pages.sh @@ -0,0 +1,25 @@ + + +MARKDOWN_TARGETS=$(grep -nr -o -E "\]\(\/?(\w|-)+\)" ./*.md | tr -d ']()/' | awk -F: '{print $3}' | sort | uniq) +HTML_TARGETS=$(grep -nr -o -E 'href="\/?(\w|-)+\"' ./*.md | sed -E 's@href="/?@@g' | tr -d '"' | awk -F: '{print $3}' | sort | uniq) + +ALL_TARGETS=$(echo $MARKDOWN_TARGETS $HTML_TARGETS) + +PAGES=$(ls *.md | sed -E 's/(_(fr|it|de|ar|oc|es|ru))?.md//g' | sort | uniq) + +returncode=0 + +for PAGE in $PAGES +do + if [[ $PAGE == "index" ]] || [[ $PAGE == "README" ]] || [[ $PAGE == "default" ]] + then + continue + fi + if ! echo $ALL_TARGETS | grep -q $PAGE + then + returncode=1 + echo "The following page is not referenced by any other page :( -> $PAGE" + fi +done + +exit $returncode From ffe15295d9e53e73c05ec7166af0326896b359dd Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Sun, 29 Mar 2020 22:18:12 +0200 Subject: [PATCH 340/360] Fix dead links --- app_nextcloud_calendar.md | 1 + app_nextcloud_carnet.md | 1 + app_nextcloud_contact.md | 1 + certificate_custom.md | 1 + isp_free.md | 1 + isp_orange.md | 1 + isp_sfr.md | 1 + packaging_apps_hooks.md | 1 + packaging_apps_trap.md | 1 + packaging_apps_virtualbox.md | 1 + tests/uniformize_links.sh | 4 +++- 11 files changed, 13 insertions(+), 1 deletion(-) create mode 120000 app_nextcloud_calendar.md create mode 120000 app_nextcloud_carnet.md create mode 120000 app_nextcloud_contact.md create mode 100644 certificate_custom.md create mode 100644 isp_free.md create mode 100644 isp_orange.md create mode 100644 isp_sfr.md create mode 100644 packaging_apps_hooks.md create mode 100644 packaging_apps_trap.md create mode 100644 packaging_apps_virtualbox.md diff --git a/app_nextcloud_calendar.md b/app_nextcloud_calendar.md new file mode 120000 index 00000000..7800f978 --- /dev/null +++ b/app_nextcloud_calendar.md @@ -0,0 +1 @@ +default.md \ No newline at end of file diff --git a/app_nextcloud_carnet.md b/app_nextcloud_carnet.md new file mode 120000 index 00000000..7800f978 --- /dev/null +++ b/app_nextcloud_carnet.md @@ -0,0 +1 @@ +default.md \ No newline at end of file diff --git a/app_nextcloud_contact.md b/app_nextcloud_contact.md new file mode 120000 index 00000000..7800f978 --- /dev/null +++ b/app_nextcloud_contact.md @@ -0,0 +1 @@ +default.md \ No newline at end of file diff --git a/certificate_custom.md b/certificate_custom.md new file mode 100644 index 00000000..29b129cb --- /dev/null +++ b/certificate_custom.md @@ -0,0 +1 @@ +Unfortunately, this page only exists [in french here](certificate_custom_fr) for now. diff --git a/isp_free.md b/isp_free.md new file mode 100644 index 00000000..e97c35fb --- /dev/null +++ b/isp_free.md @@ -0,0 +1 @@ +Unfortunately, this page only exists [in french here](isp_free_fr) for now. diff --git a/isp_orange.md b/isp_orange.md new file mode 100644 index 00000000..c89a3e28 --- /dev/null +++ b/isp_orange.md @@ -0,0 +1 @@ +Unfortunately, this page only exists [in french here](isp_orange_fr) for now. diff --git a/isp_sfr.md b/isp_sfr.md new file mode 100644 index 00000000..e5002600 --- /dev/null +++ b/isp_sfr.md @@ -0,0 +1 @@ +Unfortunately, this page only exists [in french here](isp_sfr_fr) for now. diff --git a/packaging_apps_hooks.md b/packaging_apps_hooks.md new file mode 100644 index 00000000..748cc17d --- /dev/null +++ b/packaging_apps_hooks.md @@ -0,0 +1 @@ +Unfortunately, this page only exists [in french here](packaging_apps_hooks_fr) for now. diff --git a/packaging_apps_trap.md b/packaging_apps_trap.md new file mode 100644 index 00000000..e129d61c --- /dev/null +++ b/packaging_apps_trap.md @@ -0,0 +1 @@ +Unfortunately, this page only exists [in french here](packaging_apps_trap_fr) for now. diff --git a/packaging_apps_virtualbox.md b/packaging_apps_virtualbox.md new file mode 100644 index 00000000..c47bbfae --- /dev/null +++ b/packaging_apps_virtualbox.md @@ -0,0 +1 @@ +Unfortunately, this page only exists [in french here](packaging_apps_virtualbox_fr) for now. diff --git a/tests/uniformize_links.sh b/tests/uniformize_links.sh index 4a4e76be..9a5ab061 100644 --- a/tests/uniformize_links.sh +++ b/tests/uniformize_links.sh @@ -1,5 +1,7 @@ for FILE in $(ls *.md); -do +do + grep -q "Unfortunately, this page only exists" $FILE && continue + # Replace markdown links with full url ... we only need the relative url sed -i -E 's@\(https://yunohost.org/#/(\w+)\)@(/\1)@g' $FILE From 7de2493dca32db3c3e43981fa22255af6a2d073d Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Mon, 30 Mar 2020 00:25:55 +0200 Subject: [PATCH 341/360] Fix code block syntax breaking rendering... + add test --- .travis.yml | 1 + app_spip.md | 4 ++-- app_spip_fr.md | 2 +- noaccess_fr.md | 4 ++-- tests/check_code_block_syntax.sh | 17 +++++++++++++++++ 5 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 tests/check_code_block_syntax.sh diff --git a/.travis.yml b/.travis.yml index ec7369c8..18a27402 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,3 +3,4 @@ language: bash script: - bash tests/dead_links.sh - bash tests/unreferenced_pages.sh + - bash tests/check_code_block_syntax.sh diff --git a/app_spip.md b/app_spip.md index fb51d7ab..880b41e6 100644 --- a/app_spip.md +++ b/app_spip.md @@ -20,7 +20,7 @@ $ sudo yunohost app install https://github.com/YunoHost-Apps/spip_ynh.git_ynh.gi ##### Update -``` +```bash sudo yunohost app upgrade --verbose spip -u https://github.com/YunoHost-Apps/spip_ynh.git_ynh.git ``` @@ -30,4 +30,4 @@ Access the administration of the site by entering the following address in your https://www.domain.tld/spip/ecrire -Make a "forgotten password" request to change your password, you will receive an email telling you how to change your password. \ No newline at end of file +Make a "forgotten password" request to change your password, you will receive an email telling you how to change your password. diff --git a/app_spip_fr.md b/app_spip_fr.md index b765947e..78310855 100644 --- a/app_spip_fr.md +++ b/app_spip_fr.md @@ -20,7 +20,7 @@ $ sudo yunohost app install https://github.com/YunoHost-Apps/spip_ynh.git #### Mise à jour -``` +```bash $ sudo yunohost app upgrade --verbose spip -u https://github.com/YunoHost-Apps/spip_ynh.git ``` diff --git a/noaccess_fr.md b/noaccess_fr.md index 059fc32a..94d19af8 100644 --- a/noaccess_fr.md +++ b/noaccess_fr.md @@ -73,7 +73,7 @@ Si vous utilisez un VPN a IP fixe, peut être que celui-ci est arrivé à expira Dans ce cas, vous pouvez peut être accéder à votre serveur avec son IP locale s'agissant probablement d'un serveur auto-hébergé chez-vous. Pour connaître votre ip locale, certaines BOX propose une cartographie du réseau en cours avec les équipements connectés. Sinon, en ligne de commande avec linux: -``` +```bash sudo arp-scan --local ``` @@ -100,7 +100,7 @@ Dans ce cas il faut renouveler le nom de domaine (si ile st encore temps. Si votre serveur ping avec son ip mais ne ping pas avec le nom de domaine alors il y a un problème de configuration au niveau du champs A. Si c'est un nom de domaine fournit par YunoHost, lancez -``` +```bash yunohost dyndns update ``` diff --git a/tests/check_code_block_syntax.sh b/tests/check_code_block_syntax.sh new file mode 100644 index 00000000..62e83a0f --- /dev/null +++ b/tests/check_code_block_syntax.sh @@ -0,0 +1,17 @@ +returncode=0 +for FILE in $(ls *.md) +do + NB_OPENING=$(grep -E "^ *\`\`\` *\w+ *$" $FILE | wc -l) + NB_CLOSE=$(grep -E "^ *\`\`\` *$" $FILE | wc -l) + if [[ "$NB_OPENING" != "$NB_CLOSE" ]] + then + echo "There are some mistakes in code block syntax in $FILE ..." + returncode=1 + fi +done + +if [[ $returncode == 1 ]] +then + echo "Make sure that all the code block in the problematic files do specific the language in the opening backticks (for example, \`\`\`bash). Otherwise, rendering in the actual website will be broken because of a bug in markdown parsing lib..." + exit 1 +fi From 6c459ef23ffdd93b8bbc5457a86c50a1aaef2389 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Mon, 30 Mar 2020 01:27:51 +0200 Subject: [PATCH 342/360] Update donation link --- faq.md | 2 +- faq_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/faq.md b/faq.md index 197a7b3d..48517168 100644 --- a/faq.md +++ b/faq.md @@ -74,7 +74,7 @@ Yes, you can! YunoHost needs money to pay servers and domain names. We would also like contributors to be able to continue contributing rather than look for jobs elsewhere. -You can donate on [Liberapay](https://liberapay.com/yunohost). +You can donate using [our donation interface](https://donate.yunohost.org) If you can, you can also make in-kind contributions, like servers (some of our infrastructure relies on servers from a few associations). diff --git a/faq_fr.md b/faq_fr.md index 9308206d..7fe65a1b 100644 --- a/faq_fr.md +++ b/faq_fr.md @@ -67,7 +67,7 @@ Il est question de financement par dons ou subventions, certains contributeurs m Oui, c'est possible ! YunoHost a besoin de payer des serveurs et noms de domaine, par ailleurs nous souhaiterions pouvoir permettre aux développeurs principaux de continuer à développer YunoHost plutôt que de chercher un emploi ailleurs. -Pour faire un don ça se passe via notre [Liberapay](https://liberapay.com/YunoHost) +Pour faire un don ça se passe via [notre interface de don](https://donate.yunohost.org) Si vous le pouvez, vous pouvez aussi faire des contributions en nature (une partie de notre infrastructure vient d'associations qui nous fournissent des serveurs). From 36a18a096b065f008d77a302ab1550defa6e6492 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Mon, 30 Mar 2020 01:52:15 +0200 Subject: [PATCH 343/360] Update framasoft app list --- apps_framasoft.md | 49 +------------------------------------------- apps_framasoft_fr.md | 48 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 48 deletions(-) create mode 100644 apps_framasoft_fr.md diff --git a/apps_framasoft.md b/apps_framasoft.md index 714a78b1..b8965af1 100644 --- a/apps_framasoft.md +++ b/apps_framasoft.md @@ -1,48 +1 @@ -# Équivalence avec les applications Framasoft - -| App Framasoft | Équivalent | Package | Status | -| :---: | :---: | :---: | :---: | -| Framapad | Etherpad + mypads | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/etherpad_mypads_ynh) |  | -| Framadrive | Nextcloud | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-apps/nextcloud_ynh) |  | -| Framagit | GitLab | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/gitlab_ynh) |  | -| | Gogs | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/gogs_ynh) |  | -| Framadrop | Lufi | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/lufi_ynh) |  | -| Framapiaf | Mastodon | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/mastodon_ynh) |  | -| Framapic | Lutim | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/lutim_ynh) |  | -| Framabin | PrivateBin | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-apps/zerobin_ynh) |  | -| Frama.link | Lstu | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/lstu_ynh) |  | -| Framatube | Peertube | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/peertube_ynh) |  | -| Framanews | TinyTinyRSS | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-apps/ttrss_ynh) |  | -| Framabee | Searx | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/searx_ynh) |  | -| Framabag | Wallabag | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/wallabag_ynh) |  | -| Framacalc | Ethercalc | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/ethercalc_ynh) |  | -| Framaboard | Kanboard | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/kanboard_ynh) |  | -| Framadate | OpenSondage | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/opensondage_ynh) |  | -| Framasphère | Diaspora* | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/aymhce/diaspora_ynh) |  | -| Framabookin | BicBucStriim | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/BicBucStriim_ynh) |  | -| Framanotes | Turtl | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/Turtl_ynh) |  | -| Framemo | Scrumblr | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/scrumblr_ynh) |  | -| Framinetest | Minetest | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/minetest_ynh) |  | -| Framatalk | Jitsi Meet | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/jitsi_ynh) |  | -| Framalistes | Mailman | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/mailman_ynh) |  | -| | Sympa | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/alexAubin/sympa_ynh) |  | -| Framindmap | Wisemapping | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/wisemapping_ynh) |  | -| Framavectoriel | SVG-Edit | Non packagé | | -| Framacarte | uMap | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/umap_ynh) | | -| Framaforms | Framaforms | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/framaforms_ynh) | | -| Framaestro | Framaestro | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/framaestro_ynh) | | -| Framavox | Loomio | Non packagé | | -| Framagenda | (Agenda Nextcloud) | c.f. Nextcloud | | -| Framagames | Framagames | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/framagames_ynh) | | -| Framateam | Mattermost | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/mattermost_ynh) | | -| MyFrama | Shaarli | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/shaarli_ynh) | | -| Framaslides | Strut | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/strut_ynh) | | -| Framasites | Grav | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/grav_ynh) | | -| Framaclic | Matomo | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/matomo_ynh) | | -| Framatrad | ? | Non packagé | | - -### Voir aussi - -- [Liste complète des applications packagées](/apps) -- [La roadmap 'Dégooglisons'](https://github.com/YunoHost/issues/milestone/13) - +Unfortunately, this page only exists [in french here](apps_framasoft_fr) for now. diff --git a/apps_framasoft_fr.md b/apps_framasoft_fr.md new file mode 100644 index 00000000..d57bcdbd --- /dev/null +++ b/apps_framasoft_fr.md @@ -0,0 +1,48 @@ +# Équivalence avec les applications Framasoft + +| App Framasoft | Équivalent | Package | +| :---: | :---: | :---: | +| Framabag | Wallabag | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/wallabag2_ynh)   | +| Framabee | Searx | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/searx_ynh)   | +| Framabin | PrivateBin | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-apps/zerobin_ynh)   | +| Framaboard | Kanboard | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/kanboard_ynh)   | +| Framabookin | BicBucStriim | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/bicbucstriim_ynh)   | +| Framacalc | Ethercalc | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/ethercalc_ynh)   | +| Framacarte | uMap | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/umap_ynh)   | +| Framaclic | Matomo | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/matomo_ynh)   | +| Framadate | OpenSondage | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/opensondage_ynh)   | +| Framadrive | Nextcloud | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-apps/nextcloud_ynh)   | +| Framadrop | Lufi | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/lufi_ynh)   | +| Framaestro | Framaestro | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/framaestro_ynh)   | +| Framaforms | Framaforms | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/framaforms_ynh)   | +| Framagames | Framagames | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/framagames_ynh)   | +| Framagenda | (Agenda Nextcloud) | c.f. Nextcloud | +| Framagit | GitLab | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/gitlab_ynh)   | +| | Gogs | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/gogs_ynh)   | +| Frama.link | Lstu | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/lstu_ynh)   | +| Framalistes | Mailman | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/mailman_ynh)   | +| | Sympa | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/alexAubin/sympa_ynh)   | +| Framanews | TinyTinyRSS | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-apps/ttrss_ynh)   | +| Framanotes | Turtl | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/turtl_ynh)   | +| Framapad | Etherpad + mypads | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/etherpad_mypads_ynh)   | +| Framapiaf | Mastodon | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/mastodon_ynh)   | +| Framapic | Lutim | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/lutim_ynh)   | +| Framasites | Grav | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/grav_ynh)   | +| Framaslides | Strut | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/strut_ynh)   | +| Framasphère | Diaspora | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/aymhce/diaspora_ynh)   | +| Framatalk | Jitsi Meet | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/jitsi_ynh)   | +| Framateam | Mattermost | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/mattermost_ynh)   | +| Framatrad | ? | Non packagé | +| Framatube | Peertube | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/peertube_ynh)   | +| Framavectoriel | SVG-Edit | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/svgedit_ynh)   | +| Framavox | Loomio | Non packagé | +| Framemo | Scrumblr | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/scrumblr_ynh)   | +| Framindmap | Wisemapping | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/wisemapping_ynh)   | +| Framinetest | Minetest | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/minetest_ynh)   | +| MyFrama | Shaarli | [<span class="glyphicon glyphicon-gift"></span>](https://github.com/YunoHost-Apps/shaarli_ynh)   | + +### Voir aussi + +- [Liste complète des applications packagées](/apps) +- [La roadmap 'Dégooglisons'](https://github.com/YunoHost/issues/milestone/13) + From a4f6cccb997fd82628c633a67864aebd4958eae8 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Mon, 30 Mar 2020 01:58:11 +0200 Subject: [PATCH 344/360] Fix missing reference to some pages... --- admindoc.md | 5 +- admindoc_fr.md | 6 +- collabora_en.md => app_collaboradocker.md | 0 collabora_fr.md => app_collaboradocker_fr.md | 0 apps_group_PR_model.md | 46 ------ appsdoc.md | 32 ++++ contributordoc.md | 1 + contributordoc_fr.md | 1 + create_live_usb.md | 150 ------------------ create_live_usb_fr.md | 152 ------------------- docs.md | 3 +- docs_fr.md | 9 +- noaccess.md | 1 + vpn_advantage.md | 1 + 14 files changed, 52 insertions(+), 355 deletions(-) rename collabora_en.md => app_collaboradocker.md (100%) rename collabora_fr.md => app_collaboradocker_fr.md (100%) delete mode 100644 apps_group_PR_model.md create mode 100644 appsdoc.md delete mode 100644 create_live_usb.md delete mode 100644 create_live_usb_fr.md create mode 100644 noaccess.md diff --git a/admindoc.md b/admindoc.md index f4937dbb..6553d651 100644 --- a/admindoc.md +++ b/admindoc.md @@ -35,12 +35,15 @@ * [Updating the system](/update) and [apps](/app_update) * [Security](/security) * Going further + * [Specific apps documentations](/appsdoc) * [Noho.st / nohost.me / ynh.fr domain names](/dns_nohost_me) * [Exchange files with your server using a graphical interface](/filezilla) * [Customize the appearance of the YunoHost portal](/theming) * [Adding an external storage](/external_storage) * [Migrating emails to YunoHost](/email_migration) * [Hide services with Tor](/torhiddenservice) + * [(old) Jessie->Stretch migration procedure](jessie_stretch_migration) * [Troubleshooting guide](/troubleshooting_guide) - * [Unlock IP in iptables](/fail2ban) * [Changing the administration password](/change_admin_password) + * [Recover access to your server](/noaccess) + * [Unban IPs in iptables/fail2ban](/fail2ban) diff --git a/admindoc_fr.md b/admindoc_fr.md index d248a210..d7021620 100644 --- a/admindoc_fr.md +++ b/admindoc_fr.md @@ -45,12 +45,16 @@ * [SFR](/isp_sfr) * [Orange](/isp_orange) * [Free](/isp_free) + * [Documentation spécifique à certaines apps](/appsdoc) + * [Equivalence entre service framasoft et apps](/apps_framasoft) * [Échanger des fichiers avec son serveur à l'aide d'une interface graphique](/filezilla) * [Modifier l'apparence du portail utilisateur](/theming) * [Ajouter un stockage externe](/external_storage) * [Migrer ses emails vers YunoHost](/email_migration) * [YunoHost avec un service caché Tor](/torhiddenservice) * [Utilisation de certificats autres que Let's Encrypt](/certificate_custom) + * [(vieux) Procedure de Migration Jessie->Stretch](jessie_stretch_migration) * [Guide de dépannage](/troubleshooting_guide) - * [Débloquer une IP dans Fail2ban](/fail2ban) * [Changer le mot de passe d’administration](/change_admin_password) + * [Récupérer l'accès à son serveur](/noaccess) + * [Débannir une IP dans Fail2ban/IPtables](/fail2ban) diff --git a/collabora_en.md b/app_collaboradocker.md similarity index 100% rename from collabora_en.md rename to app_collaboradocker.md diff --git a/collabora_fr.md b/app_collaboradocker_fr.md similarity index 100% rename from collabora_fr.md rename to app_collaboradocker_fr.md diff --git a/apps_group_PR_model.md b/apps_group_PR_model.md deleted file mode 100644 index 82c5e940..00000000 --- a/apps_group_PR_model.md +++ /dev/null @@ -1,46 +0,0 @@ -## Problem -- *Description of why you made this PR* - -## Solution -- *And how you fix that* - -## PR Status -*Obviously, you should really check these affirmations* -Work finished. Package_check, basic tests and upgrade from last version OK. -Could be reviewed and tested. - -## Validation ---- -*Minor decision* -- [ ] **Upgrade previous version** : -- [ ] **Code review** : -- [ ] **Approval (LGTM)** : -- [ ] **Approval (LGTM)** : -- [ ] **CI succeeded** : [/badge/icon)](https://ci-apps-dev.yunohost.org/jenkins/job/APP_ynh%20BRANCH%20(Official)/) *Please replace APP and BRANCH in this link* -When the PR is mark as ready to merge, you have to wait for 3 days before really merge it. - -*Medium decision* -- [ ] **Complete test** : -- [ ] **Upgrade previous version** : -- [ ] **Code review** : -- [ ] **Code review** : -- [ ] **Approval (LGTM)** : -- [ ] **Approval (LGTM)** : -- [ ] **Approval (LGTM)** : -- [ ] **CI succeeded** : [/badge/icon)](https://ci-apps-dev.yunohost.org/jenkins/job/APP_ynh%20BRANCH%20(Official)/) *Please replace APP and BRANCH in this link* -When the PR is mark as ready to merge, you have to wait for 7 days before really merge it. - -*Major decision* -- [ ] **Complete test** : -- [ ] **Complete test** : -- [ ] **Upgrade previous version** : -- [ ] **Upgrade previous version** : -- [ ] **Code review** : -- [ ] **Code review** : -- [ ] **Code review** : -- [ ] **Approval (LGTM)** : -- [ ] **Approval (LGTM)** : -- [ ] **Approval (LGTM)** : -- [ ] **Approval (LGTM)** : -- [ ] **CI succeeded** : [/badge/icon)](https://ci-apps-dev.yunohost.org/jenkins/job/APP_ynh%20BRANCH%20(Official)/) *Please replace APP and BRANCH in this link* -When the PR is mark as ready to merge, you have to wait for 7 days before really merge it. diff --git a/appsdoc.md b/appsdoc.md new file mode 100644 index 00000000..1c5ef65c --- /dev/null +++ b/appsdoc.md @@ -0,0 +1,32 @@ +- [Baikal](app_baikal) +- [Blogotext](app_blogotext) +- [Collabora (Docker)](app_collaboradocker) +- [Dokuwiki](app_dokuwiki) +- [FirefoxSync](app_ffsync) +- [Fireflyiii](app_firefly_iii) +- [FluxBB](app_fluxbb) +- [Gogs](app_gogs) +- [Hextris](app_hextris) +- [Jappix](app_jappix) +- [Limesurvey](app_limesurvey) +- [Mediawiki](app_mediawiki) +- [Minidlna](app_minidlna) +- [CustomWebapp](app_my_webapp) +- [Netdata](app_netdata) +- [Noalyss](app_noalyss) +- [Peertube](app_peertube) +- [Pihole](app_pihole) +- [Piwigo](app_piwigo) +- [Pleroma](app_pleroma) +- [Pluxml](app_pluxml) +- [Radicale](app_radicale) +- [Rainloop](app_rainloop) +- [Sogo](app_sogo) +- [Spip](app_spip) +- [Transmission](app_transmission) +- [TinyTinyRSS](app_ttrss) +- [Wallabag2](app_wallabag2) +- [Webtrees](app_webtrees) +- [Yunofav](app_yunofav) +- (Note that you can add a new page here if you want to start document in another `app...)) + diff --git a/contributordoc.md b/contributordoc.md index 9fb24915..31bc784e 100644 --- a/contributordoc.md +++ b/contributordoc.md @@ -32,3 +32,4 @@ * [Raspberry Pi images](https://github.com/YunoHost/rpi-image) * [Other ARM board images](https://github.com/YunoHost/arm-images) * [Using the YunoHost API outside of the webadmin](/admin_api) +* [A discussion about shell variable scope](shell_variables_scope) diff --git a/contributordoc_fr.md b/contributordoc_fr.md index 0b37388b..57ad494d 100644 --- a/contributordoc_fr.md +++ b/contributordoc_fr.md @@ -33,3 +33,4 @@ * [Images Raspberry Pi](https://github.com/YunoHost/rpi-image) * [Autres images pour cartes ARM](https://github.com/YunoHost/arm-images) * [Utiliser l'API YunoHost en dehors de la webadmin](/admin_api) +* [Une discussion sur la portée des variables en bash](shell_variables_scope) diff --git a/create_live_usb.md b/create_live_usb.md deleted file mode 100644 index bcf39bc2..00000000 --- a/create_live_usb.md +++ /dev/null @@ -1,150 +0,0 @@ -# Create a YunoHost Live ISO - -<div class="alert alert-danger">This page is deprecated / obsolete / outdated. Information -it contains should be updated (or should be removed).</div> - -Tested on Debian Wheezy (should work on Ubuntu as well). -Original tutorial here: http://willhaley.com/blog/create-a-custom-debian-live-environment/ - -**Warning**: I have **highlighted** all the places you should be in the **chroot** environment. - -1. Install applications we need to build the environment. -```bash -sudo apt-get install debootstrap syslinux squashfs-tools genisoimage memtest86+ rsync -``` - -2. Setup the base Debian environment. I am using wheezy for my distribution and i386 for the architecture. Please do change your mirror if you are not in the Netherlands or know of a mirror close to you. -```bash -mkdir live_boot && cd live_boot -sudo debootstrap --arch=i386 --variant=minbase wheezy chroot http://ftp.nl.debian.org/debian/ -``` - -3. A couple of important steps before we chroot. -```bash -sudo mount -o bind /dev chroot/dev && sudo cp /etc/resolv.conf chroot/etc/resolv.conf -``` - -4. Chroot to our Debian environment. -```bash -sudo chroot chroot -``` - -5. **chroot** -Set a few required variables and system settings in our Debian environment. -```bash -mount none -t proc /proc && -mount none -t sysfs /sys && -mount none -t devpts /dev/pts && -export HOME=/root && -export LC_ALL=C && -apt-get install dialog dbus --yes && -dbus-uuidgen > /var/lib/dbus/machine-id && -apt-get update -``` - -6. **chroot** Set the root password to **yunohost** -```bash -passwd root -``` - -7. **chroot** Install the required packages, replace the kernel version if needed. -```bash -apt-get install --no-install-recommends \ -linux-image-3.2.0-4-486 live-boot \ -net-tools wireless-tools wpagui tcpdump wget openssh-client \ -xserver-xorg-core xserver-xorg xinit xterm \ -pciutils usbutils gparted ntfsprogs hfsprogs rsync dosfstools syslinux partclone nano pv \ -chromium-browser libnss3-tools openbox git ca-certificates openssl -``` - -8. **chroot** NetworkManager can break your network configuration in the chroot environment. You can install it afterward, and CTRL-C during the installation -```bash -apt-get --no-install-recommends install network-manager -``` - -9. **chroot** Install YunoHost -```bash -git clone https://github.com/YunoHost/install_script /tmp/yunohost_install -cd /tmp/yunohost_install && ./install_yunohost -a -``` - -10. **chroot** Set parameters in order to launch everything right -```bash -echo "127.0.0.1 yunohost.org" >> /etc/hosts -echo "chromium --user-data-dir=/root/.config/chromium --app=https://yunohost.org/yunohost/admin/" >> /etc/xdg/openbox/autostart -echo -e "if [ -z \"\$DISPLAY\" ] && [ \$(tty) == /dev/tty1 ]; \nthen \n startx \nfi" >> /root/.bashrc -certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n YunoHostCA -i /etc/yunohost/certs/yunohost.org/ca.pem -certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n YunoHostCrt -i /etc/yunohost/certs/yunohost.org/crt.pem -``` - -11. **chroot** Edit `/etc/inittab` to login automatically -```bash -nano /etc/inittab -# Replace the following line -1:2345:respawn:/sbin/getty 38400 tty1 -# by this one -1:2345:respawn:/bin/login -f root tty1 </dev/tty1 >/dev/tty1 2>&1 -``` - -12. **chroot** Clean up our Debian environment before leaving. -```bash -rm -f /var/lib/dbus/machine-id && -apt-get clean && -rm -rf /tmp/* && -rm /etc/resolv.conf && -umount -lf /proc && -umount -lf /sys && -umount -lf /dev/pts -# Then exit -exit -``` - -13. Unmount dev from the chroot -```bash -sudo umount -lf chroot/dev -``` - -14. Make directories that will be copied to our bootable medium. -```bash -mkdir -p image/{live,isolinux} -``` - -15. Compress the chroot environment into a Squash filesystem. -```bash -sudo mksquashfs chroot image/live/filesystem.squashfs -e boot -``` - -16. Prepare our USB/CD bootloader. -```bash -cp chroot/boot/vmlinuz-3.2.0-4-486 image/live/vmlinuz1 && -cp chroot/boot/initrd.img-3.2.0-4-486 image/live/initrd1 -``` - -17. Create `image/isolinux/isolinux.cfg` menu for the bootloader. - -```bash -UI menu.c32 - -prompt 0 -menu title YunoHost Live - -timeout 300 - -label YunoHost Live -menu label ^YunoHost Live -menu default -kernel /live/vmlinuz1 -append initrd=/live/initrd1 boot=live -``` - -### Build the .iso - -Copy files necessary for the ISO to boot and then create the ISO - -```bash -cp /usr/lib/syslinux/isolinux.bin image/isolinux/ && -cp /usr/lib/syslinux/menu.c32 image/isolinux/ -cd image && genisoimage -rational-rock -volid "YunoHost Live" -cache-inodes -joliet -full-iso9660-filenames -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -output ../yunohost-live.iso . && cd .. -``` - -Great success! Now you can burn the .iso or use [Unetbootin](http://unetbootin.sourceforge.net/) to copy it on a USB stick. diff --git a/create_live_usb_fr.md b/create_live_usb_fr.md deleted file mode 100644 index 5ea68d8b..00000000 --- a/create_live_usb_fr.md +++ /dev/null @@ -1,152 +0,0 @@ -# Créer une Live ISO de YunoHost - -<div class="alert alert-danger">This page is deprecated / obsolete / outdated. Information -it contains should be updated (or should be removed).</div> - -Testé sur Debian Wheezy (devrait marcher sur Ubuntu également). -Tutoriel original : http://willhaley.com/blog/create-a-custom-debian-live-environment/ - -**Attention** : toutes les sections où vous devrez être dans un environnement **chroot** sont **surlignées**. - -1. Installation des applications nécessaires à la compilation de l’environnement -```bash -sudo apt-get install debootstrap syslinux squashfs-tools genisoimage memtest86+ rsync -``` - -2. Configuration de l’environnement de base Debian. Debian wheezy et une architecture i386 ont été utilisés pour effectuer les tests. -Changer le miroir si vous n’êtes pas aux Pays-Bas ou que vous connaissez un miroir plus proche. - -```bash -mkdir live_boot && cd live_boot -sudo debootstrap --arch=i386 --variant=minbase wheezy chroot http://ftp.nl.debian.org/debian/ -``` - -3. Deux étapes importantes avant de chroot : -```bash -sudo mount -o bind /dev chroot/dev && sudo cp /etc/resolv.conf chroot/etc/resolv.conf -``` - -4. Chroot l’environnement Debian : -```bash -sudo chroot chroot -``` - -5. **chroot** -Configuration de variables et d’options système de l’environnement Debian : -```bash -mount none -t proc /proc && -mount none -t sysfs /sys && -mount none -t devpts /dev/pts && -export HOME=/root && -export LC_ALL=C && -apt-get install dialog dbus --yes && -dbus-uuidgen > /var/lib/dbus/machine-id && -apt-get update -``` - -6. **chroot** Configuration du mot de passe root de **yunohost** : -```bash -passwd root -``` - -7. **chroot** Installation des paquets requis, remplacement du noyau si nécessaire : -```bash -apt-get install --no-install-recommends \ -linux-image-3.2.0-4-486 live-boot \ -net-tools wireless-tools wpagui tcpdump wget openssh-client \ -xserver-xorg-core xserver-xorg xinit xterm \ -pciutils usbutils gparted ntfsprogs hfsprogs rsync dosfstools syslinux partclone nano pv \ -chromium-browser libnss3-tools openbox git ca-certificates openssl -``` - -8. **chroot** Le NetworkManager peut casser la configuration de votre environnement chroot. Il est possible de l’installer a posteriori et d’annuler en pressant CTRL-C pendant l’installation. -```bash -apt-get --no-install-recommends install network-manager -``` - -9. **chroot** Installation de YunoHost : -```bash -git clone https://github.com/YunoHost/install_script /tmp/yunohost_install -cd /tmp/yunohost_install && ./install_yunohost -a -``` - -10. **chroot** Configuration des paramètres : -```bash -echo "127.0.0.1 yunohost.org" >> /etc/hosts -echo "chromium --user-data-dir=/root/.config/chromium --app=https://yunohost.org/yunohost/admin/" >> /etc/xdg/openbox/autostart -echo -e "if [ -z \"\$DISPLAY\" ] && [ \$(tty) == /dev/tty1 ]; \nthen \n startx \nfi" >> /root/.bashrc -certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n YunoHostCA -i /etc/yunohost/certs/yunohost.org/ca.pem -certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n YunoHostCrt -i /etc/yunohost/certs/yunohost.org/crt.pem -``` - -11. **chroot** Éditer `/etc/inittab` pour se connecter automatiquement : -```bash -nano /etc/inittab -# Remplacer la ligne suivante : -1:2345:respawn:/sbin/getty 38400 tty1 -# par : -1:2345:respawn:/bin/login -f root tty1 </dev/tty1 >/dev/tty1 2>&1 -``` - -12. **chroot** Nettoyage de l’environnement Debian avant de quitter : -```bash -rm -f /var/lib/dbus/machine-id && -apt-get clean && -rm -rf /tmp/* && -rm /etc/resolv.conf && -umount -lf /proc && -umount -lf /sys && -umount -lf /dev/pts -# Puis exit -exit -``` - -13. Démonter dev du chroot : -```bash -sudo umount -lf chroot/dev -``` - -14. Créer les répertoires qui seront copiés dans le média bootable : -```bash -mkdir -p image/{live,isolinux} -``` - -15. Compresser l’environnement chroot dans un système de fichier Squash : -```bash -sudo mksquashfs chroot image/live/filesystem.squashfs -e boot -``` - -16. Préparer le bootloader USB/CD : -```bash -cp chroot/boot/vmlinuz-3.2.0-4-486 image/live/vmlinuz1 && -cp chroot/boot/initrd.img-3.2.0-4-486 image/live/initrd1 -``` - -17. Créer le menu `image/isolinux/isolinux.cfg` pour le bootloader. - -```bash -UI menu.c32 - -prompt 0 -menu title YunoHost Live - -timeout 300 - -label YunoHost Live -menu label ^YunoHost Live -menu default -kernel /live/vmlinuz1 -append initrd=/live/initrd1 boot=live -``` - -### Compiler le .iso - -Copier les fichiers nécessaires au démarrage de l’ISO et créer l’ISO : - -```bash -cp /usr/lib/syslinux/isolinux.bin image/isolinux/ && -cp /usr/lib/syslinux/menu.c32 image/isolinux/ -cd image && genisoimage -rational-rock -volid "YunoHost Live" -cache-inodes -joliet -full-iso9660-filenames -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -output ../yunohost-live.iso . && cd .. -``` - -Félicitations ! L’ISO peut désormais être gravée ou utilisée avec [Unetbootin](http://unetbootin.sourceforge.net/) pour la copier sur une clé USB. diff --git a/docs.md b/docs.md index 5dd8fa41..7b05f70c 100644 --- a/docs.md +++ b/docs.md @@ -20,8 +20,9 @@ YunoHost's documentation has 2 different sections: * Project's life: * [Frequently asked questions](/faq) + * [Project news](/news) * [Project organization](/project_organization) - * [Blog](https://forum.yunohost.org/c/announcement) + * [Project budget](/project_budget) * [Forum](https://forum.yunohost.org) * [Chat rooms](/chat_rooms) * [Communication](/communication) diff --git a/docs_fr.md b/docs_fr.md index f8c7b56f..b236385f 100644 --- a/docs_fr.md +++ b/docs_fr.md @@ -20,10 +20,11 @@ La documentation de YunoHost s’articule autour de deux sections : * Vie du projet : * [Foire aux questions](/faq) - - [Organisation du projet](/project_organization) - * [Blog](https://forum.yunohost.org/c/announcement) - - [Forum](https://forum.yunohost.org) - - [Salons de discussions](/chat_rooms) + * [Nouvelles du projet](/news) + * [Organisation du projet](/project_organization) + * [Budget previsionnel](/project_budget) + * [Forum](https://forum.yunohost.org) + * [Salons de discussions](/chat_rooms) * [Communication extérieure](/communication) * [Support / Aide](/help) diff --git a/noaccess.md b/noaccess.md new file mode 100644 index 00000000..a2ed2d20 --- /dev/null +++ b/noaccess.md @@ -0,0 +1 @@ +Unfortunately, this page only exists [in french here](noaccess_fr) for now. diff --git a/vpn_advantage.md b/vpn_advantage.md index e69de29b..d2244385 100644 --- a/vpn_advantage.md +++ b/vpn_advantage.md @@ -0,0 +1 @@ +Unfortunately, this page only exists [in french here](vpn_advantage_fr) for now. From 120ba7ac9e01db5f7d7e5b1e8ba2262d76827767 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Mon, 30 Mar 2020 02:14:41 +0200 Subject: [PATCH 345/360] More fixes for unreferenced pages --- admindoc.md | 1 + admindoc_fr.md | 1 + appsdoc.md | 3 ++- images/docker.png | Bin 0 -> 6373 bytes install.md | 4 ++++ install_fr.md | 4 ++++ tests/unreferenced_pages.sh | 2 +- 7 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 images/docker.png diff --git a/admindoc.md b/admindoc.md index 6553d651..9194c8a4 100644 --- a/admindoc.md +++ b/admindoc.md @@ -42,6 +42,7 @@ * [Adding an external storage](/external_storage) * [Migrating emails to YunoHost](/email_migration) * [Hide services with Tor](/torhiddenservice) + * [A discussion about the advantages of using a VPN](/vpn_advantage) * [(old) Jessie->Stretch migration procedure](jessie_stretch_migration) * [Troubleshooting guide](/troubleshooting_guide) * [Changing the administration password](/change_admin_password) diff --git a/admindoc_fr.md b/admindoc_fr.md index d7021620..6dc54324 100644 --- a/admindoc_fr.md +++ b/admindoc_fr.md @@ -53,6 +53,7 @@ * [Migrer ses emails vers YunoHost](/email_migration) * [YunoHost avec un service caché Tor](/torhiddenservice) * [Utilisation de certificats autres que Let's Encrypt](/certificate_custom) + * [Une discussion sur les avantages d'utiliser un VPN](/vpn_advantage) * [(vieux) Procedure de Migration Jessie->Stretch](jessie_stretch_migration) * [Guide de dépannage](/troubleshooting_guide) * [Changer le mot de passe d’administration](/change_admin_password) diff --git a/appsdoc.md b/appsdoc.md index 1c5ef65c..aadd5eb7 100644 --- a/appsdoc.md +++ b/appsdoc.md @@ -1,6 +1,7 @@ - [Baikal](app_baikal) - [Blogotext](app_blogotext) - [Collabora (Docker)](app_collaboradocker) +- [Custom Webapp](app_my_webapp) - [Dokuwiki](app_dokuwiki) - [FirefoxSync](app_ffsync) - [Fireflyiii](app_firefly_iii) @@ -11,8 +12,8 @@ - [Limesurvey](app_limesurvey) - [Mediawiki](app_mediawiki) - [Minidlna](app_minidlna) -- [CustomWebapp](app_my_webapp) - [Netdata](app_netdata) +- [Nextcloud](app_nextcloud) - [Noalyss](app_noalyss) - [Peertube](app_peertube) - [Pihole](app_pihole) diff --git a/images/docker.png b/images/docker.png new file mode 100644 index 0000000000000000000000000000000000000000..780a8d5ce5539d454ae7af5336fb83a3e2c15c0c GIT binary patch literal 6373 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 Lk`|^OZ4v%IL9Dml literal 0 HcmV?d00001 diff --git a/install.md b/install.md index 5e768242..255f78f0 100644 --- a/install.md +++ b/install.md @@ -83,4 +83,8 @@ This page lists a few installation guides. <a href="/dev"><img src="/images/lxc.png" height=150 style="vertical-align:bottom"><b><p>Dev environment in LXD/LXC</p></b></a> </div> +<div class="col col-md-3 text-center"> +<a href="/docker"><img src="/images/docker.png" height=150 style="vertical-align:bottom"><b><p>(Non-official!) Docker images</p></b></a> +</div> + </div> diff --git a/install_fr.md b/install_fr.md index 7521f412..a64868bd 100644 --- a/install_fr.md +++ b/install_fr.md @@ -77,4 +77,8 @@ Cette page liste plusieurs types d’installations, classés par catégories. <a href="/dev"><img src="/images/lxc.png" height=150 style="vertical-align:bottom"><b><p>Environnement de dev avec LXD/LXC</p></b></a> </div> +<div class="col col-md-3 text-center"> +<a href="/docker"><img src="/images/docker.png" height=150 style="vertical-align:bottom"><b><p>(Non-officiel!) Images docker</p></b></a> +</div> + </div> diff --git a/tests/unreferenced_pages.sh b/tests/unreferenced_pages.sh index 21c72119..92fa14e1 100644 --- a/tests/unreferenced_pages.sh +++ b/tests/unreferenced_pages.sh @@ -15,7 +15,7 @@ do then continue fi - if ! echo $ALL_TARGETS | grep -q $PAGE + if ! echo $ALL_TARGETS | grep -q -w $PAGE then returncode=1 echo "The following page is not referenced by any other page :( -> $PAGE" From bb11c9acc725a560baa41d696967117f1535614c Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Mon, 30 Mar 2020 02:18:38 +0200 Subject: [PATCH 346/360] Fix pages not existing in english... --- app_gogs.md | 1 + app_pleroma.md | 1 + app_sogo.md | 1 + 3 files changed, 3 insertions(+) create mode 100644 app_gogs.md create mode 100644 app_pleroma.md create mode 100644 app_sogo.md diff --git a/app_gogs.md b/app_gogs.md new file mode 100644 index 00000000..f2ee0bed --- /dev/null +++ b/app_gogs.md @@ -0,0 +1 @@ +Unfortunately, this page only exists [in french here](app_gogs_fr) for now. diff --git a/app_pleroma.md b/app_pleroma.md new file mode 100644 index 00000000..595e2038 --- /dev/null +++ b/app_pleroma.md @@ -0,0 +1 @@ +Unfortunately, this page only exists [in french here](app_pleroma_fr) for now. diff --git a/app_sogo.md b/app_sogo.md new file mode 100644 index 00000000..09a46e5f --- /dev/null +++ b/app_sogo.md @@ -0,0 +1 @@ +Unfortunately, this page only exists [in french here](app_sogo_fr) for now. From 0928b203205202893ef5db2e2e3b0a8b3c6af1e8 Mon Sep 17 00:00:00 2001 From: Kay0u <pierre@kayou.io> Date: Mon, 30 Mar 2020 16:19:47 +0200 Subject: [PATCH 347/360] Update Helpers --- packaging_apps_helpers.md | 309 +++++++++++++++++++++++++++++++++++--- 1 file changed, 284 insertions(+), 25 deletions(-) diff --git a/packaging_apps_helpers.md b/packaging_apps_helpers.md index 71cb32f7..3decc36c 100644 --- a/packaging_apps_helpers.md +++ b/packaging_apps_helpers.md @@ -411,7 +411,7 @@ </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L244">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/apt#L265">Dude, show me the code !</a> </p> </div> @@ -1428,14 +1428,13 @@ ynh_exec_fully_quiet "your_command | other_command"</code> <div class="helper-card-body"> <div data-toggle="collapse" href="#collapse-ynh_script_progression" style="cursor:pointer"> <h5 class="helper-card-title"><tt>ynh_script_progression</tt></h5> - <h6 class="helper-card-subtitle text-muted">Print a message as INFO and show progression during an app script</h6> + <h6 class="helper-card-subtitle text-muted">Print a progress bar showing the progression of an app script</h6> </div> <div id="collapse-ynh_script_progression" class="collapse" role="tabpanel"> <hr style="margin-top:25px; margin-bottom:25px;"> <p> - <strong>Usage</strong>: <code class="helper-code helper-usage">ynh_script_progression --message=message [--weight=weight] [--time] -The execution time is given for the duration since the previous call. So the weight should be applied to this previous call.</code> + <strong>Usage</strong>: <code class="helper-code">ynh_script_progression --message=message [--weight=weight] [--time]</code> </p> @@ -1452,7 +1451,7 @@ The execution time is given for the duration since the previous call. So the wei - <li><code>-t</code>, <code>--time=</code> : Print the execution time since the last call to this helper. Especially usefull to define weights.</li> + <li><code>-t</code>, <code>--time=</code> : Print the execution time since the last call to this helper. Especially usefull to define weights. The execution time is given for the duration since the previous call. So the weight should be applied to this previous call.</li> @@ -1474,7 +1473,7 @@ The execution time is given for the duration since the previous call. So the wei </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L224">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L223">Dude, show me the code !</a> </p> </div> @@ -1511,7 +1510,7 @@ The execution time is given for the duration since the previous call. So the wei </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L308">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L307">Dude, show me the code !</a> </p> </div> @@ -1562,7 +1561,7 @@ The execution time is given for the duration since the previous call. So the wei </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L319">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L318">Dude, show me the code !</a> </p> </div> @@ -1610,7 +1609,7 @@ ynh_debug_exec "your_command | other_command"</code> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L377">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logging#L376">Dude, show me the code !</a> </p> </div> @@ -1706,7 +1705,7 @@ ynh_debug_exec "your_command | other_command"</code> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logrotate#L99">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/logrotate#L102">Dude, show me the code !</a> </p> </div> @@ -3392,7 +3391,7 @@ Please always call this script in install and restore scripts</h6> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L196">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L216">Dude, show me the code !</a> </p> </div> @@ -3451,7 +3450,267 @@ Please always call this script in install and restore scripts</h6> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L218">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L238">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_permission_create" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_permission_create</tt></h5> + <h6 class="helper-card-subtitle text-muted">Create a new permission for the app</h6> + </div> + <div id="collapse-ynh_permission_create" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_permission_create --permission "permission" [--url "url"] [--allowed group1 group2]</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>permission</code> : the name for the permission (by default a permission named "main" already exist)</li> + + + + <li><code>url</code> : (optional) URL for which access will be allowed/forbidden</li> + + + + <li><code>allowed</code> : (optional) A list of group/user to allow for the permission</li> + + + </ul> + </p> + + + + <p> + <strong>Example</strong>: <code class="helper-code">ynh_permission_create --permission admin --url /admin --allowed alice bob</code> + </p> + + + + <p> + <strong>Details</strong>: + <p> + If provided, 'url' is assumed to be relative to the app domain/path if they</br>start with '/'. For example:</br> / -> domain.tld/app</br> /admin -> domain.tld/app/admin</br> domain.tld/app/api -> domain.tld/app/api</br></br>'url' can be later treated as a regex if it starts with "re:".</br>For example:</br> re:/api/[A-Z]*$ -> domain.tld/app/api/[A-Z]*$</br> re:domain.tld/app/api/[A-Z]*$ -> domain.tld/app/api/[A-Z]*$</br></br>Requires YunoHost version 3.7.0 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L272">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_permission_delete" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_permission_delete</tt></h5> + <h6 class="helper-card-subtitle text-muted">Remove a permission for the app (note that when the app is removed all permission is automatically removed)</h6> + </div> + <div id="collapse-ynh_permission_delete" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_permission_delete --permission "permission"</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>permission</code> : the name for the permission (by default a permission named "main" is removed automatically when the app is removed)</li> + + + </ul> + </p> + + + + <p> + <strong>Example</strong>: <code class="helper-code">ynh_permission_delete --permission editors</code> + </p> + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 3.7.0 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L300">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_permission_exists" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_permission_exists</tt></h5> + <h6 class="helper-card-subtitle text-muted">Check if a permission exists</h6> + </div> + <div id="collapse-ynh_permission_exists" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_permission_exists --permission=permission</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>-p</code>, <code>--permission</code> : the permission to check</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 3.7.0 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L314">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_permission_url" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_permission_url</tt></h5> + <h6 class="helper-card-subtitle text-muted">Redefine the url associated to a permission</h6> + </div> + <div id="collapse-ynh_permission_url" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_permission_url --permission "permission" --url "url"</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>permission</code> : the name for the permission (by default a permission named "main" is removed automatically when the app is removed)</li> + + + + <li><code>url</code> : (optional) URL for which access will be allowed/forbidden</li> + + + </ul> + </p> + + + + + + <p> + <strong>Details</strong>: + <p> + Requires YunoHost version 3.7.0 or higher.</br></br> + </p> + </p> + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L329">Dude, show me the code !</a> + </p> + + </div> + </div> + +</div> + + + +<div class="helper-card"> + <div class="helper-card-body"> + <div data-toggle="collapse" href="#collapse-ynh_permission_update" style="cursor:pointer"> + <h5 class="helper-card-title"><tt>ynh_permission_update</tt></h5> + <h6 class="helper-card-subtitle text-muted">Update a permission for the app</h6> + </div> + <div id="collapse-ynh_permission_update" class="collapse" role="tabpanel"> + <hr style="margin-top:25px; margin-bottom:25px;"> + <p> + + <strong>Usage</strong>: <code class="helper-code">ynh_permission_update --permission "permission" --add "group" ["group" ...] --remove "group" ["group" ...]</code> + + </p> + + <p> + <strong>Arguments</strong>: + <ul> + + + <li><code>permission</code> : the name for the permission (by default a permission named "main" already exist)</li> + + + + <li><code>add</code> : the list of group or users to enable add to the permission</li> + + + + <li><code>remove</code> : the list of group or users to remove from the permission</li> + + + </ul> + </p> + + + + <p> + <strong>Example</strong>: <code class="helper-code">ynh_permission_update --permission admin --add samdoe --remove all_users Requires YunoHost version 3.7.0 or higher.</code> + </p> + + + + <p> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/setting#L354">Dude, show me the code !</a> </p> </div> @@ -4359,7 +4618,7 @@ Please always call this script in install and restore scripts</h6> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L85">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L48">Dude, show me the code !</a> </p> </div> @@ -4410,7 +4669,7 @@ Please always call this script in install and restore scripts</h6> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L136">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L99">Dude, show me the code !</a> </p> </div> @@ -4473,7 +4732,7 @@ Please always call this script in install and restore scripts</h6> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L250">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L213">Dude, show me the code !</a> </p> </div> @@ -4524,7 +4783,7 @@ Please always call this script in install and restore scripts</h6> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L289">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L252">Dude, show me the code !</a> </p> </div> @@ -4564,7 +4823,7 @@ Please always call this script in install and restore scripts</h6> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L305">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L268">Dude, show me the code !</a> </p> </div> @@ -4611,7 +4870,7 @@ Please always call this script in install and restore scripts</h6> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L335">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L298">Dude, show me the code !</a> </p> </div> @@ -4655,7 +4914,7 @@ Please always call this script in install and restore scripts</h6> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L378">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L342">Dude, show me the code !</a> </p> </div> @@ -4706,7 +4965,7 @@ Please always call this script in install and restore scripts</h6> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L406">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L372">Dude, show me the code !</a> </p> </div> @@ -4753,7 +5012,7 @@ Please always call this script in install and restore scripts</h6> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L434">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L400">Dude, show me the code !</a> </p> </div> @@ -4800,7 +5059,7 @@ Please always call this script in install and restore scripts</h6> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L458">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L424">Dude, show me the code !</a> </p> </div> @@ -4836,7 +5095,7 @@ Please always call this script in install and restore scripts</h6> </p> <p> - <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L488">Dude, show me the code !</a> + <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/data/helpers.d/utils#L454">Dude, show me the code !</a> </p> </div> @@ -4847,7 +5106,7 @@ Please always call this script in install and restore scripts</h6> -<p>Generated by <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/doc/generate_helper_doc.py">this script</a> on 07/11/2019 (Yunohost version 3.6.4.3)</p> +<p>Generated by <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/doc/generate_helper_doc.py">this script</a> on 03/30/2020 (Yunohost version 3.7.0.12)</p> <style> @@ -4876,4 +5135,4 @@ Please always call this script in install and restore scripts</h6> } /*===============================================*/ -</style> +</style> \ No newline at end of file From d0f35af3b1cd0eff1187d6f12c72f959e3ab3d42 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Mon, 30 Mar 2020 18:13:41 +0200 Subject: [PATCH 348/360] Move comment about generation at the top --- packaging_apps_helpers.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packaging_apps_helpers.md b/packaging_apps_helpers.md index 3decc36c..476d7822 100644 --- a/packaging_apps_helpers.md +++ b/packaging_apps_helpers.md @@ -2,6 +2,7 @@ <h1>App helpers</h1> +<p>Doc auto-generated by <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/doc/generate_helper_doc.py">this script</a> on 03/30/2020 (Yunohost version 3.7.0.12)</p> <h3 style="text-transform: uppercase; font-weight: bold">apt</h3> @@ -5106,9 +5107,6 @@ Please always call this script in install and restore scripts</h6> -<p>Generated by <a href="https://github.com/YunoHost/yunohost/blob/stretch-unstable/doc/generate_helper_doc.py">this script</a> on 03/30/2020 (Yunohost version 3.7.0.12)</p> - - <style> /*================================================= Helper card @@ -5135,4 +5133,4 @@ Please always call this script in install and restore scripts</h6> } /*===============================================*/ -</style> \ No newline at end of file +</style> From 9d37a75daa41a8cde087687a6ce692a03ba16eee Mon Sep 17 00:00:00 2001 From: Antoine <27826950+Antoine-lb@users.noreply.github.com> Date: Mon, 30 Mar 2020 19:19:54 +0200 Subject: [PATCH 349/360] Fix SFR (ISP) source link --- isp_sfr_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isp_sfr_fr.md b/isp_sfr_fr.md index 9b159b56..43c311fb 100644 --- a/isp_sfr_fr.md +++ b/isp_sfr_fr.md @@ -11,4 +11,4 @@ Pour pouvoir envoyer des mails, il faut désactiver le filtrage. <img src="/images/sfr-filtrage.png" width=600> -Source : http://assistance.sfr.fr/internet_box-nb4/utiliser-email/desactiver-filtrage-smtp/fc-2491-69602 +Source : https://assistance.sfr.fr/sfrmail-appli/sfrmail/envoyer-e-mail-serveur-smtp.html From 11d94d02866a5967e61215dbc5f7c343ced40db8 Mon Sep 17 00:00:00 2001 From: Antoine <antoine.le-baux@epitech.eu> Date: Tue, 31 Mar 2020 17:39:25 +0200 Subject: [PATCH 350/360] Fix path to get private IP in the web admin --- dns_local_network.md | 2 +- dns_local_network_es.md | 2 +- dns_local_network_fr.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dns_local_network.md b/dns_local_network.md index 67497faf..b5653f4e 100644 --- a/dns_local_network.md +++ b/dns_local_network.md @@ -12,7 +12,7 @@ You may retrieve your server private IP adress through different means: <img src="/images/ynh_login.png" width=600> - Using Yunohost administration panel: - Go to "State of the server" > Network + Go to Tools > State of the server > Network <img src="/images/ynh_admin_etat_ip.png" width=900> - Or using your router or internet box, depending on model. diff --git a/dns_local_network_es.md b/dns_local_network_es.md index 045d4b4d..1226cde4 100644 --- a/dns_local_network_es.md +++ b/dns_local_network_es.md @@ -12,7 +12,7 @@ Puedes descubrir la dirección privada de tu servidor de varias maneras : <img src="/images/ynh_login.png" width=600> - Desde la interfaz de administración de tu servidor Yunohost : - en Estado del servidor > Red + en Herramientas > Estado del servidor > Red <img src="/images/ynh_admin_etat_ip.png" width=900> - O desde tu router o tu caja Internet, dependiendo de su modelo. diff --git a/dns_local_network_fr.md b/dns_local_network_fr.md index 427ae87c..bcea9e28 100644 --- a/dns_local_network_fr.md +++ b/dns_local_network_fr.md @@ -12,7 +12,7 @@ Vous pouvez retrouver l’adresse privée de votre serveur de différentes mani <img src="/images/ynh_login.png" width=600> - Depuis l’interface d’administration de votre serveur YunoHost : - dans État du serveur > Réseau + dans Outils > État du serveur > Réseau <img src="/images/ynh_admin_etat_ip.png" width=900> - Ou depuis votre routeur ou votre box, selon son modèle. From cd44a2c8f830d44be81c526699a1bde1463e9e3f Mon Sep 17 00:00:00 2001 From: Pwnulatr <12719642+Pwnulatr@users.noreply.github.com> Date: Wed, 1 Apr 2020 04:36:46 +0000 Subject: [PATCH 351/360] Update apps_wishlist.md Added Technitium DNS. Similar to Pi-Hole, but offers DNS-over-HTTPS and DNS-over-TLS. --- apps_wishlist.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index c4fa90b4..eade9e4b 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -132,6 +132,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Syspass](http://www.syspass.org/) / [github](https://github.com/nuxsmin/sysPass) - [Taiga](https://taiga.io) / [github](https://github.com/taigaio/) - [Taskwarrior](https://taskwarrior.org) / [github](https://github.com/GothenburgBitFactory/taskwarrior) +- [Technitium DNS](https://technitium.com/dns/) / [github](https://github.com/TechnitiumSoftware/DnsServer) - [TMate](https://tmate.io/) / [github](https://github.com/tmate-io/tmate) - [Tracim](https://github.com/tracim/tracim) - [Thredded](https://thredded.org/) / [github](https://github.com/thredded/thredded) From 42998393e60d328f0ef0e06830d5fa14810e147b Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Thu, 2 Apr 2020 08:43:49 +0000 Subject: [PATCH 352/360] Ajout de l'application de diffusion de documents uwazi --- apps_wishlist.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index eade9e4b..ee0582e6 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -1,3 +1,5 @@ +<div class="alert alert-warning" markdown="1" style="margin-right: 120px; margin-top: 12px">La page demandée n'est pour le moment pas disponible en français. Voici à la place la version en anglais. Si vous souhaitez commencer une traduction de cette page, vous pouvez vous rendre sur [cette page](https://yunohost.org/#/apps_wishlist_fr).</div> + # Apps wishlist <div class="alert alert-info">Before to add an app in wishlist please check your app is not already in official or community list: see the <a href="/apps">apps list</a></div> @@ -138,6 +140,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Thredded](https://thredded.org/) / [github](https://github.com/thredded/thredded) - [Twister](http://twister.net.co) / [github](https://github.com/miguelfreitas/twister-core/) - [TwitRSS.me](http://twitrss.me/) / [Github](https://github.com/ciderpunx/twitrssme) Scrapes Twitter to create RSS feeds. +- [Uwazi](https://www.uwazi.io/) / [Github](https://github.com/huridocs/uwazi) - [Volumio](https://volumio.org) / [github](https://github.com/volumio) - [WebODF](http://webodf.org) / [github](https://github.com/webodf/WebODF) - [Webhook.site](https://docs.webhook.site/) / [github](https://github.com/fredsted/webhook.site) From 0b44f2dbe1215215acc39b3f4f0966aa0aa6ce3b Mon Sep 17 00:00:00 2001 From: Plumf <45500657+Plumf@users.noreply.github.com> Date: Thu, 2 Apr 2020 10:52:56 +0200 Subject: [PATCH 353/360] Update email_fr.md --- email_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/email_fr.md b/email_fr.md index 2a5ae7b7..3e030485 100644 --- a/email_fr.md +++ b/email_fr.md @@ -47,4 +47,4 @@ Pour aller plus loin -------------------- - Il existe une page de documentation pour [migrer ses emails d'un fournisseur de messagerie vers une instance YunoHost](email_migration). -- Pour approfondir votre compréhension du courriel et de ses protocoles, voici une [conférence éclairante](https://www.iletaitunefoisinternet.fr/post/7-email-sonntag/)(en français). lien cassé.... +- Pour approfondir votre compréhension du courriel et de ses protocoles, voici une [conférence éclairante](https://www.octopuce.fr/conference-lemail-vaste-sujet-par-benjamin-sonntag/)(en français). From dea680fb08e483f07cb9eaa18082422a33002192 Mon Sep 17 00:00:00 2001 From: Plumf <45500657+Plumf@users.noreply.github.com> Date: Thu, 2 Apr 2020 11:18:53 +0200 Subject: [PATCH 354/360] Update apps_wishlist.md --- apps_wishlist.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index 82e3812a..7a4887fb 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -92,7 +92,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Nibbleblog](http://www.nibbleblog.com)/ [github](https://github.com/dignajar/nibbleblog) - [Nuage](https://nuage.kerjean.me/login) / [github](https://github.com/mickael-kerjean/filestash) - [Ombi](https://github.com/tidusjar/Ombi) -- [Omeka S](https://github.com/omeka/omeka-s) +- [Omeka S](https://omeka.org/s/) / [github](https://github.com/omeka/omeka-s) - [OpenBazaar](https://openbazaar.org) / [github](https://github.com/openbazaar) - [OpenCart](https://www.opencart.com) / [github](https://github.com/opencart/opencart) - [openHAB](https://www.openhab.org/) - Smart home platform. / [github](https://github.com/openhab) From 326196a2ccb0af09d40d43f273990a8a171a5ddd Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Fri, 3 Apr 2020 14:27:39 +0000 Subject: [PATCH 355/360] =?UTF-8?q?J'ai=20ajout=C3=A9=20BigBlueButton?= =?UTF-8?q?=20=C3=A0=20la=20liste?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps_wishlist.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps_wishlist.md b/apps_wishlist.md index 778f1d95..10b95362 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -1,5 +1,7 @@ <div class="alert alert-warning" markdown="1" style="margin-right: 120px; margin-top: 12px">La page demandée n'est pour le moment pas disponible en français. Voici à la place la version en anglais. Si vous souhaitez commencer une traduction de cette page, vous pouvez vous rendre sur [cette page](https://yunohost.org/#/apps_wishlist_fr).</div> +<div class="alert alert-warning" markdown="1" style="margin-right: 120px; margin-top: 12px">La page demandée n'est pour le moment pas disponible en français. Voici à la place la version en anglais. Si vous souhaitez commencer une traduction de cette page, vous pouvez vous rendre sur [cette page](https://yunohost.org/#/apps_wishlist_fr).</div> + # Apps wishlist <div class="alert alert-info">Before to add an app in wishlist please check your app is not already in official or community list: see the <a href="/apps">apps list</a></div> @@ -18,6 +20,7 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Auth0 SSO Dashboard](https://github.com/auth0-extensions/auth0-sso-dashboard-extension) - [Bitmessage](https://bitmessage.org/wiki/Compiling_instructions) / [github](https://github.com/Bitmessage/PyBitmessage) - [Beehive](https://github.com/muesli/beehive) +- [BigBlueButton](https://bigbluebutton.org) / [install instruction](http://docs.bigbluebutton.org/2.2/install.html) / [github](https://github.com/bigbluebutton/bigbluebutton) Complete open source web conferencing system. - [Bludit](https://www.bludit.com) / [github](https://github.com/bludit/bludit) - [Blynk](https://github.com/blynkkk/blynk-library) - [Bookstack](https://www.bookstackapp.com/) / [github](https://github.com/BookStackApp/BookStack) From aec09ed77504eaf7732055189f3dd45a237fcb18 Mon Sep 17 00:00:00 2001 From: Maniack Crudelis <maniackcrudelis@users.noreply.github.com> Date: Sun, 5 Apr 2020 12:51:15 +0200 Subject: [PATCH 356/360] Update link to dev-ci script --- packaging_apps_ci_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging_apps_ci_fr.md b/packaging_apps_ci_fr.md index 67aeaabb..65105e3f 100644 --- a/packaging_apps_ci_fr.md +++ b/packaging_apps_ci_fr.md @@ -25,7 +25,7 @@ Cependant, pour éviter tout problème de sécurité, votre connexion ssh sera t Vous ne pouvez utiliser que `sftp` ou `rsync` pour copier vos applications dans ce répertoire. `Git` n'est pas disponible, ni la plupart des commandes bash habituelles. Pour faciliter votre utilisation de ce CI, un petit script peut être utilisé pour copier vos applications dans votre répertoire. -Copiez ce [script](https://raw.githubusercontent.com/YunoHost/CI_package_check/master/dev_CI/Send%20CI%20dev.sh) dans votre répertoire de travail habituel et indiquez vos informations. +Copiez ce [script](https://raw.githubusercontent.com/YunoHost/CI_package_check/master/dev_CI/send_to_dev_ci.sh) dans votre répertoire de travail habituel et indiquez vos informations. --- From 62d75c108eee2e450f10e9a10fa6d87aeb1e19da Mon Sep 17 00:00:00 2001 From: Maniack Crudelis <maniackcrudelis@users.noreply.github.com> Date: Sun, 5 Apr 2020 12:51:19 +0200 Subject: [PATCH 357/360] Update link to dev-ci script --- packaging_apps_ci.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging_apps_ci.md b/packaging_apps_ci.md index 0401e0df..543da54d 100644 --- a/packaging_apps_ci.md +++ b/packaging_apps_ci.md @@ -25,7 +25,7 @@ However, to prevent any security issues, your ssh connection will be very limite You can only use `sftp` or `rsync` to copy your apps into that directory. `Git` isn't available, neither most of the usual bash commands. To ease your usage of this CI, a small script can be used to copy your apps to your directory. -Copy this [script](https://raw.githubusercontent.com/YunoHost/CI_package_check/master/dev_CI/Send%20CI%20dev.sh) into your usual working directory and fill it with your info. +Copy this [script](https://raw.githubusercontent.com/YunoHost/CI_package_check/master/dev_CI/send_to_dev_ci.sh) into your usual working directory and fill it with your info. Make sure the content of your `check_process` file is correct then transfer your files. When your files have been transfered, you can monitor the CI pipeline on https://ci-apps-dev.yunohost.org. From 40e291afbac7731a883eef788512a3a1b898857f Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Sun, 5 Apr 2020 20:10:24 +0200 Subject: [PATCH 358/360] Update apps_wishlist.md --- apps_wishlist.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/apps_wishlist.md b/apps_wishlist.md index 10b95362..153f5799 100644 --- a/apps_wishlist.md +++ b/apps_wishlist.md @@ -1,7 +1,3 @@ -<div class="alert alert-warning" markdown="1" style="margin-right: 120px; margin-top: 12px">La page demandée n'est pour le moment pas disponible en français. Voici à la place la version en anglais. Si vous souhaitez commencer une traduction de cette page, vous pouvez vous rendre sur [cette page](https://yunohost.org/#/apps_wishlist_fr).</div> - -<div class="alert alert-warning" markdown="1" style="margin-right: 120px; margin-top: 12px">La page demandée n'est pour le moment pas disponible en français. Voici à la place la version en anglais. Si vous souhaitez commencer une traduction de cette page, vous pouvez vous rendre sur [cette page](https://yunohost.org/#/apps_wishlist_fr).</div> - # Apps wishlist <div class="alert alert-info">Before to add an app in wishlist please check your app is not already in official or community list: see the <a href="/apps">apps list</a></div> @@ -157,4 +153,4 @@ The following list is a compiled wishlist of applications that would be nice-to- - [Zoneminder](https://github.com/ZoneMinder/zoneminder) - [Zulip](https://zulipchat.com/) / [github](https://github.com/zulip/zulip) - [Yggdrasil](https://yggdrasil-network.github.io/) / [github](https://github.com/yggdrasil-network/yggdrasil-go) -- [WiseMapping](http://www.wisemapping.com/inyourserver.html) / [developpement](https://bitbucket.org/wisemapping/wisemapping-open-source) \ No newline at end of file +- [WiseMapping](http://www.wisemapping.com/inyourserver.html) / [developpement](https://bitbucket.org/wisemapping/wisemapping-open-source) From 0899cdc0877df2790e2c5e9ebae945e35a6682d0 Mon Sep 17 00:00:00 2001 From: Yunobot <simone@yunohost.org> Date: Sun, 5 Apr 2020 20:29:50 +0000 Subject: [PATCH 359/360] Put the version into the CLI as occ requires at leat PHP 7.2 and the used default seems to be PHP 7.0 --- app_nextcloud.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app_nextcloud.md b/app_nextcloud.md index 44bfa713..4bd63778 100644 --- a/app_nextcloud.md +++ b/app_nextcloud.md @@ -128,7 +128,7 @@ Run a scan of the new directory by Nextcloud: ```bash cd /var/www/nextcloud -sudo -u nextcloud php occ files:scan --all +sudo -u nextcloud php7.3 occ files:scan --all ``` It's over now. Now test if everything is fine, try connecting to your Nextcloud instance, upload a file, check its proper synchronization. From 9c6fb9819abacc593f4e7af5f32a2f4ebaa8f11a Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <alex.aubin@mailoo.org> Date: Mon, 6 Apr 2020 00:40:43 +0200 Subject: [PATCH 360/360] Propagate to french version --- app_nextcloud_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app_nextcloud_fr.md b/app_nextcloud_fr.md index 4fcfa6f2..e5dc9000 100644 --- a/app_nextcloud_fr.md +++ b/app_nextcloud_fr.md @@ -128,7 +128,7 @@ Lancez un scan du nouveau répertoire par Nextcloud: ```bash cd /var/www/nextcloud -sudo -u nextcloud php occ files:scan --all +sudo -u nextcloud php7.3 occ files:scan --all ``` C'est terminé. À présent testez si tout va bien, essayez de vous connecter à votre instance Nextcloud, envoyer un fichier, vérifiez sa bonne synchronisation.