From c35f1619d96433226ba750af04da30c7e493a671 Mon Sep 17 00:00:00 2001 From: "ljf (zamentur)" Date: Wed, 23 Aug 2023 15:56:17 +0200 Subject: [PATCH 01/44] [enh] Add a small short key blacklist --- .../60.advanced/20.config_panels/config_panels.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pages/06.contribute/10.packaging_apps/60.advanced/20.config_panels/config_panels.md b/pages/06.contribute/10.packaging_apps/60.advanced/20.config_panels/config_panels.md index 9d02b98a..abf7c619 100644 --- a/pages/06.contribute/10.packaging_apps/60.advanced/20.config_panels/config_panels.md +++ b/pages/06.contribute/10.packaging_apps/60.advanced/20.config_panels/config_panels.md @@ -67,6 +67,8 @@ For performance reasons, questions short keys have to be unique in all the `conf ``` In which two questions have "real variable name" `is server_ip` and therefore conflict with each other. +! Short keys should avoid conflicts with settings too (e.g. id, install_time, mysql_pwd, path, domain, port, db_name) + ### Supported questions types and properties See [the full list of questions types and properties](/dev/forms) From c84bd922207f6692a7e46307ef490851653eb459 Mon Sep 17 00:00:00 2001 From: "ljf (zamentur)" Date: Wed, 23 Aug 2023 16:03:06 +0200 Subject: [PATCH 02/44] [fix] Add other blacklisted short keys --- .../60.advanced/20.config_panels/config_panels.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/06.contribute/10.packaging_apps/60.advanced/20.config_panels/config_panels.md b/pages/06.contribute/10.packaging_apps/60.advanced/20.config_panels/config_panels.md index abf7c619..c186e75a 100644 --- a/pages/06.contribute/10.packaging_apps/60.advanced/20.config_panels/config_panels.md +++ b/pages/06.contribute/10.packaging_apps/60.advanced/20.config_panels/config_panels.md @@ -67,7 +67,7 @@ For performance reasons, questions short keys have to be unique in all the `conf ``` In which two questions have "real variable name" `is server_ip` and therefore conflict with each other. -! Short keys should avoid conflicts with settings too (e.g. id, install_time, mysql_pwd, path, domain, port, db_name) +! Some short key are forbidden cause it can interfer with config scripts (`old`, `file_hash`, `types`, `binds`, `formats`, `changed`) and you probably should avoid to use common settings name to avoid to bind your question to this settings (e.g. `id`, `install_time`, `mysql_pwd`, `path`, `domain`, `port`, `db_name`, `current_revision`, `admin`) ### Supported questions types and properties From 04fc7b9899e4db6e3275b675a6d2cba807355691 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Fri, 1 Sep 2023 17:36:48 +0200 Subject: [PATCH 03/44] faq: on the policy regarding the inclusion of apps inside the default catalog --- pages/05.community/20.faq/faq.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/pages/05.community/20.faq/faq.md b/pages/05.community/20.faq/faq.md index 9bd0736d..01da244d 100644 --- a/pages/05.community/20.faq/faq.md +++ b/pages/05.community/20.faq/faq.md @@ -118,3 +118,19 @@ We do not give timelines. We are a bunch of volunteers working on our free time to maintain and develop YunoHost. We have no product owner or project manager handling resources, we are not a business. We do what we can, because we love this software, when we can. If you really want to have a feature implemented or documented, or an app packaged, [consider contributing yourself](/contribute)! We would love helping you get started. + +### What is YunoHost's policy regarding the apps included in the official catalog ? + +The rule of thumb is that we only include software licensed under a free-software license in the official app catalog. + +However, as YunoHost evolved, some gray-cases appeared with softwares that would be relevant for YunoHost's goal and match its spirit, while not being strictly-speaking free-software. Situations such as: +- software promoting the use of centralized services, though precisely to avoid their direct usage ; +- software relying on non-free dependencies or assets ; +- "new" post-open-source / ethical-yet-not-free licenses such as the [ACSL](https://anticapitalist.software/), the [HL3](https://firstdonoharm.dev/) or the [CoopCycle License](https://github.com/coopcycle/coopcycle-web/blob/master/LICENSE) ; +- "open-core" models, trademark clauses, or business-related license clauses (such as the BSL) which are meant to ensure the project's sustainability while still remaining ethical. + +While we believe free software principles are an essential footstep towards [YunoHost's goal](#what-s-yunohost-goal), we believe they are a mean and not an end. We reject the purist vision according to which software is either free or proprietary, and the flawed premise that technology is fundamentally neutral. We believe that ethical software and technology can and should exist beyond the definition of free software layed 40 years ago (see also: [Freedom isn't Free](https://logicmag.io/failure/freedom-isnt-free/) and [Post-Open Source](https://www.boringcactus.com/2020/08/13/post-open-source.html)). + +The project therefore allows the inclusion inside the official app catalog, ***on a case-by-case basis***, of apps which does not qualify as "free software", yet considered to be ethical and worthy of interest for [YunoHost's goal](#what-s-yunohost-goal). Such apps are tagged in the catalog, such that an explicit message displayed before their installation. + +If you notice an app is missing such a tag/disclaimer, feel free to open a discussion or pull requet on [the app catalog](https://github.com/YunoHost/apps/). From eaa531784ceb0287934366848bb596e030d7f88e Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Fri, 1 Sep 2023 17:52:27 +0200 Subject: [PATCH 04/44] faq: Why won't you include [feature X] ? --- pages/05.community/20.faq/faq.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pages/05.community/20.faq/faq.md b/pages/05.community/20.faq/faq.md index 9bd0736d..1ce30c67 100644 --- a/pages/05.community/20.faq/faq.md +++ b/pages/05.community/20.faq/faq.md @@ -118,3 +118,12 @@ We do not give timelines. We are a bunch of volunteers working on our free time to maintain and develop YunoHost. We have no product owner or project manager handling resources, we are not a business. We do what we can, because we love this software, when we can. If you really want to have a feature implemented or documented, or an app packaged, [consider contributing yourself](/contribute)! We would love helping you get started. + +### Why won't you include [feature X] ? + +YunoHost is primarily designed for not-so-tech-savvy users and aims to remain relatively simple in terms of UI/UX. At the same time, the project has limited time and energy available to be maintained and developed. Therefore we may lower the priority of features, or refuse entirely the inclusion of features, based on the criteria that they : +- would only meaningful for advanced / power-users stuff which is out of the scope of the project ; +- would introduce too much UI/UX bloat ; +- would only cover unrealistic thread models ; +- would be there only to satisfy purists ; +- or overall would not be worth it in terms of development/maintenance time/energy for what it brings to the project. From 8388704a6d2a8b4cfd9c5ca4ae2e024657f770fd Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Sat, 2 Sep 2023 09:45:31 +0200 Subject: [PATCH 05/44] Update pages/05.community/20.faq/faq.md Co-authored-by: tituspijean --- pages/05.community/20.faq/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/05.community/20.faq/faq.md b/pages/05.community/20.faq/faq.md index 01da244d..cc33bf69 100644 --- a/pages/05.community/20.faq/faq.md +++ b/pages/05.community/20.faq/faq.md @@ -129,7 +129,7 @@ However, as YunoHost evolved, some gray-cases appeared with softwares that would - "new" post-open-source / ethical-yet-not-free licenses such as the [ACSL](https://anticapitalist.software/), the [HL3](https://firstdonoharm.dev/) or the [CoopCycle License](https://github.com/coopcycle/coopcycle-web/blob/master/LICENSE) ; - "open-core" models, trademark clauses, or business-related license clauses (such as the BSL) which are meant to ensure the project's sustainability while still remaining ethical. -While we believe free software principles are an essential footstep towards [YunoHost's goal](#what-s-yunohost-goal), we believe they are a mean and not an end. We reject the purist vision according to which software is either free or proprietary, and the flawed premise that technology is fundamentally neutral. We believe that ethical software and technology can and should exist beyond the definition of free software layed 40 years ago (see also: [Freedom isn't Free](https://logicmag.io/failure/freedom-isnt-free/) and [Post-Open Source](https://www.boringcactus.com/2020/08/13/post-open-source.html)). +While we believe free software principles are an essential footstep towards [YunoHost's goal](#what-s-yunohost-goal), we believe they are a means and not an end. We reject the purist vision according to which software is either free or proprietary, and the flawed premise that technology is fundamentally neutral. We believe that ethical software and technology can and should exist beyond the definition of free software layed 40 years ago (see also: [Freedom isn't Free](https://logicmag.io/failure/freedom-isnt-free/) and [Post-Open Source](https://www.boringcactus.com/2020/08/13/post-open-source.html)). The project therefore allows the inclusion inside the official app catalog, ***on a case-by-case basis***, of apps which does not qualify as "free software", yet considered to be ethical and worthy of interest for [YunoHost's goal](#what-s-yunohost-goal). Such apps are tagged in the catalog, such that an explicit message displayed before their installation. From 23f7155c935131d777af665fd248b7d9b5d0ac5b Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Sat, 2 Sep 2023 09:45:39 +0200 Subject: [PATCH 06/44] Update pages/05.community/20.faq/faq.md Co-authored-by: tituspijean --- pages/05.community/20.faq/faq.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pages/05.community/20.faq/faq.md b/pages/05.community/20.faq/faq.md index cc33bf69..c6b7b441 100644 --- a/pages/05.community/20.faq/faq.md +++ b/pages/05.community/20.faq/faq.md @@ -134,3 +134,5 @@ While we believe free software principles are an essential footstep towards [Yun The project therefore allows the inclusion inside the official app catalog, ***on a case-by-case basis***, of apps which does not qualify as "free software", yet considered to be ethical and worthy of interest for [YunoHost's goal](#what-s-yunohost-goal). Such apps are tagged in the catalog, such that an explicit message displayed before their installation. If you notice an app is missing such a tag/disclaimer, feel free to open a discussion or pull requet on [the app catalog](https://github.com/YunoHost/apps/). + +If you run YunoHost for your business, you are responsible for doing your due diligence by checking the licenses of the software you want to install on your server. From 23768116cb2df1fb938781ed8bea9d987029aafe Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Mon, 4 Sep 2023 17:55:53 +0200 Subject: [PATCH 07/44] Typos Co-authored-by: tituspijean --- pages/05.community/20.faq/faq.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pages/05.community/20.faq/faq.md b/pages/05.community/20.faq/faq.md index 1ce30c67..41dafe23 100644 --- a/pages/05.community/20.faq/faq.md +++ b/pages/05.community/20.faq/faq.md @@ -121,9 +121,9 @@ If you really want to have a feature implemented or documented, or an app packag ### Why won't you include [feature X] ? -YunoHost is primarily designed for not-so-tech-savvy users and aims to remain relatively simple in terms of UI/UX. At the same time, the project has limited time and energy available to be maintained and developed. Therefore we may lower the priority of features, or refuse entirely the inclusion of features, based on the criteria that they : -- would only meaningful for advanced / power-users stuff which is out of the scope of the project ; +YunoHost is primarily designed for not-so-tech-savvy users and aims to remain relatively simple in terms of UI/UX. At the same time, the project has limited time and energy available to be maintained and developed. Therefore we may lower the priority of features, or refuse entirely the inclusion of features, based on the criteria that they: +- would only be meaningful for advanced / power-users stuff which is out of the scope of the project ; - would introduce too much UI/UX bloat ; -- would only cover unrealistic thread models ; +- would only cover unrealistic threat models ; - would be there only to satisfy purists ; - or overall would not be worth it in terms of development/maintenance time/energy for what it brings to the project. From 3fc9c33497c5a20d48f3cc43207e7c4fa4518239 Mon Sep 17 00:00:00 2001 From: "ljf (zamentur)" Date: Mon, 4 Sep 2023 20:15:25 +0200 Subject: [PATCH 08/44] [fix] missing s --- .../60.advanced/20.config_panels/config_panels.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/06.contribute/10.packaging_apps/60.advanced/20.config_panels/config_panels.md b/pages/06.contribute/10.packaging_apps/60.advanced/20.config_panels/config_panels.md index c186e75a..610895a0 100644 --- a/pages/06.contribute/10.packaging_apps/60.advanced/20.config_panels/config_panels.md +++ b/pages/06.contribute/10.packaging_apps/60.advanced/20.config_panels/config_panels.md @@ -67,7 +67,7 @@ For performance reasons, questions short keys have to be unique in all the `conf ``` In which two questions have "real variable name" `is server_ip` and therefore conflict with each other. -! Some short key are forbidden cause it can interfer with config scripts (`old`, `file_hash`, `types`, `binds`, `formats`, `changed`) and you probably should avoid to use common settings name to avoid to bind your question to this settings (e.g. `id`, `install_time`, `mysql_pwd`, `path`, `domain`, `port`, `db_name`, `current_revision`, `admin`) +! Some short keys are forbidden cause it can interfer with config scripts (`old`, `file_hash`, `types`, `binds`, `formats`, `changed`) and you probably should avoid to use common settings name to avoid to bind your question to this settings (e.g. `id`, `install_time`, `mysql_pwd`, `path`, `domain`, `port`, `db_name`, `current_revision`, `admin`) ### Supported questions types and properties From 9ca570ef28a1c8fa1c8d5d1f61bf53b9e8783c3b Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Tue, 5 Sep 2023 23:58:30 +0200 Subject: [PATCH 09/44] packaging: stop advertising app.src, recommend the sources resource instead --- .../10.packaging_apps/10.manifest/docs.md | 8 +++++++- .../10.packaging_apps/20.scripts/scripts.md | 18 ++++++++---------- .../packaging_apps_intro.fr.md | 6 ++++-- .../10.packaging_apps/packaging_apps_intro.md | 4 +++- 4 files changed, 22 insertions(+), 14 deletions(-) diff --git a/pages/06.contribute/10.packaging_apps/10.manifest/docs.md b/pages/06.contribute/10.packaging_apps/10.manifest/docs.md index 62b620f8..4e0e226f 100644 --- a/pages/06.contribute/10.packaging_apps/10.manifest/docs.md +++ b/pages/06.contribute/10.packaging_apps/10.manifest/docs.md @@ -139,10 +139,15 @@ Every install question is not necessarily mandatory (e.g. a question to propose ## Resource system -The resource section corresponds to recurring app needs that are to be provisioned/deprovisioned by the core of YunoHost. They include for example: system user, apt dependencies, install dir, data dir, port, permissions, SQL database... Each resource is to be provisioned *before* running the install script, deprovisioned *after* the remove script, and automatically upgraded if needed before running the upgrade script (or provisionned if introduced in the new app version, or deprovisioned if removed w.r.t. the previous app version) +The resource section corresponds to recurring app needs that are to be provisioned/deprovisioned by the core of YunoHost. They include for example: downloading the app's sources, creating a system user, installing apt dependencies, creating the install dir, creating the data dir, finding an available internal port, configuring permissions, initializing an SQL database... Each resource is to be provisioned *before* running the install script, deprovisioned *after* the remove script, and automatically upgraded if needed before running the upgrade script (or provisionned if introduced in the new app version, or deprovisioned if removed w.r.t. the previous app version) ```toml [resources] +```toml + [resources.sources.main] + url = "https://some.domain/url/where/to/download/the/app/sources.tar.gz" + sha256 = "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + [resources.system_user] [resources.install_dir] @@ -155,6 +160,7 @@ The resource section corresponds to recurring app needs that are to be provision ``` In this example: +- `sources.main`: the URL+checksum from which the app sources will be downloaded + validated - `system_user`: a system (unix) user will be created for this app, using the app id as username. - `install_dir`: an install dir will be initialized, named `/var/www/$app` by default. Additional `owner` and `group` property allow to change the owner/group and r/w/x permissions on the created folder. - `permissions`: an SSOwat `$app.main` permission will be initialized such that the SSO allows access to the app's endpoint according to the chosen `init_main_permission` question. The `main.url = "/"` is here to tell that the main endpoint is the "root" of the app, that is `https://domain.tld/helloworld/` if the app is installed with `domain=domain.tld` and `path=/helloworld` diff --git a/pages/06.contribute/10.packaging_apps/20.scripts/scripts.md b/pages/06.contribute/10.packaging_apps/20.scripts/scripts.md index f6e84b07..6901d3bc 100644 --- a/pages/06.contribute/10.packaging_apps/20.scripts/scripts.md +++ b/pages/06.contribute/10.packaging_apps/20.scripts/scripts.md @@ -130,21 +130,19 @@ location __PATH__/ { ## App sources -App scripts will often need to download the upsteam app sources to be deployed in the install dir, via `ynh_setup_source`. +App sources were historically defined in `conf/app.src` files containing the URL + checksum of assets to download. -The `ynh_setup_source` is coupled to another conf file, usually `conf/app.src` which describes where to download the sources, how to check integrity, and how to extract the source. +This is now integrated in `manifest.toml` using the `sources` resource, which pre-download the assets prior to entering the install or upgrade scripts. The sources can then be effectively deployed using `ynh_setup_source`. -For example, this is an `app.src` for wordpress: +For example, for YesWiki, the sources are defined in `manifest.toml` using: -```text -SOURCE_URL=https://downloads.wordpress.org/release/wordpress-6.1.1.zip # The url of the sources -SOURCE_SUM=088280b34aebc7331693e729d8e6b05eb8b9998c.... # The sha256 checksum -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=zip # The format is zip -SOURCE_IN_SUBDIR=true # This is wether or not the sources are directly in the install root -SOURCE_EXTRACT=true # (yes, we want to extract the zip) +```toml +[resources.sources.main] +url = "https://github.com/YesWiki/yeswiki/archive/refs/tags/v4.4.0.tar.gz" +sha256 = "5ceb12d225c20de2ba3cb4ce483348ed1a8ad5b1789d4f4f8f89dc4871524007" ``` +More infos on the `source` resource in [the resource system documentation](/packaging_apps_resources). ## Common operations (TODO/FIXME) diff --git a/pages/06.contribute/10.packaging_apps/packaging_apps_intro.fr.md b/pages/06.contribute/10.packaging_apps/packaging_apps_intro.fr.md index fde1f964..50d05075 100644 --- a/pages/06.contribute/10.packaging_apps/packaging_apps_intro.fr.md +++ b/pages/06.contribute/10.packaging_apps/packaging_apps_intro.fr.md @@ -69,6 +69,7 @@ Parmi les fichiers contenus dans un paquet, les plus importants sont les suivant - le **manifeste de l'application** `manifest.toml` (ou `.json` dans le passé) - Il peut être considéré comme la carte d'identité de l'application, contenant diverses métadonnées. - Il contient également les questions posées lors de l'installation de l'application. + - ainsi qu'un ensemble de "ressource" à initialiser, telles que les sources de l'app à télécharger ou les dépendances apt à installer - **scripts/** contient un ensemble de scripts bash correspondant aux actions exposées dans YunoHost - `_common.sh`: common variables or custom functions included in other scripts - `install`/`remove` : la procédure d'installation et de suppression @@ -76,7 +77,6 @@ Parmi les fichiers contenus dans un paquet, les plus importants sont les suivant - `backup`/`restore` : les procédures de sauvegarde/restauration - (`change_url`) : changer l'endroit où l'application est installée en termes de son url d'accès web - **conf/** contient un ensemble de modèles de configuration utilisés lors de l'installation de l'application. Voici quelques exemples de fichiers couramment trouvés : - - `app.src` : contient l'URL et la somme de contrôle pour télécharger les sources de l'application - `nginx.conf` : le modèle de configuration de NGINX (=serveur web) pour cette application - `systemd.service` : le modèle de configuration du service systemd pour cette application - `config.json/yaml/???` : le modèle de configuration de l'application @@ -109,7 +109,9 @@ Grosso modo, l'installation proprement dite se compose généralement des opéra A moins que vous ne souhaitiez vraiment partir de zéro ou de [`example_ynh`] (https://github.com/YunoHost/example_ynh), une pratique courante consiste à identifier une application similaire à celle que vous essayez d'empaqueter - typiquement parce qu'elle repose sur les mêmes technologies - à cloner le dépôt de code correspondant, et à adapter les différents fichiers. +TODO/FIXME : here we should list a bunch of well-knowh apps for classic technologies + - Applications PHP : - Applications NodeJS : - Applications Python : -- ??? \ No newline at end of file +- ??? diff --git a/pages/06.contribute/10.packaging_apps/packaging_apps_intro.md b/pages/06.contribute/10.packaging_apps/packaging_apps_intro.md index 97ab4591..59df3dc4 100644 --- a/pages/06.contribute/10.packaging_apps/packaging_apps_intro.md +++ b/pages/06.contribute/10.packaging_apps/packaging_apps_intro.md @@ -69,6 +69,7 @@ Among the file contained in a package, the most important ones are: - the **app manifest** `manifest.toml` (or `.json` in the past) - this can be seen as the ID card of the application, containing various metadatas. - it also contains the questions asked during the installation of the app. + - and a bunch of "resources" to initialize, such as sources to download or apt dependencies to install - **scripts/** contains a bunch of bash scripts corresponding to actions exposed in YunoHost - `_common.sh`: common variables or custom functions included in other scripts - `install`/`remove`: the install and remove procedure @@ -76,7 +77,6 @@ Among the file contained in a package, the most important ones are: - `backup`/`restore`: the backup/restore procedures - (`change_url`): changing where the app is installed in terms of web access url - **conf/** contains a bunch of configuration templates used when installing the app. Here are some example of commonly found files: - - `app.src`: contains the URL and checksum to downlowd the application sources - `nginx.conf`: the NGINX (=web server) configuration template for this app - `systemd.service`: the systemd service configuration template for this app - `config.json/yaml/???`: the app's configuration template @@ -109,6 +109,8 @@ Roughly speaking, the install itself generally consists of the following operati Unless you really want to start from scratch or from [`example_ynh`](https://github.com/YunoHost/example_ynh), one common practice is to identify an app similar to the one you're trying to package - typically because it relies on the same technologies - clone the corresponding code repository, and adapt the various files. +TODO/FIXME : here we should list a bunch of well-knowh apps for classic technologies + - PHP apps: - NodeJS apps: - Python apps: From bafe12b44fe44482978f444a6db0f2bc580f1074 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Wed, 6 Sep 2023 12:49:34 +0200 Subject: [PATCH 10/44] already in catalog --- pages/04.applications/99.wishlist/apps_wishlist.md | 1 - 1 file changed, 1 deletion(-) diff --git a/pages/04.applications/99.wishlist/apps_wishlist.md b/pages/04.applications/99.wishlist/apps_wishlist.md index 0eebc885..6979c662 100644 --- a/pages/04.applications/99.wishlist/apps_wishlist.md +++ b/pages/04.applications/99.wishlist/apps_wishlist.md @@ -371,7 +371,6 @@ You can [contribute to this list by adding something you'd like to be packaged]( | Zoneminder | | [Upstream](https://github.com/ZoneMinder/zoneminder) | | | [Zulip](https://zulipchat.com/) | | [Upstream](https://github.com/zulip/zulip) | | | Zusam | A truly private space for you and your friends | [Upstream](https://github.com/zusam/zusam) | [Package Draft](https://github.com/zusam/zusam_ynh) | -| [XBackBone](https://xbackbone.app) | XBackBone is a simple and lightweight PHP file manager that support the instant sharing tool ShareX and NIX systems. | [Upstream](https://github.com/SergiX44/XBackBone) | | ### Other references listing self-hosted applications From a9cc5af8eb7986f828d92a4e6d6e66aad948e514 Mon Sep 17 00:00:00 2001 From: Tagada <36127788+Tagadda@users.noreply.github.com> Date: Mon, 11 Sep 2023 17:46:07 +0200 Subject: [PATCH 11/44] Change from tabs to list for vpn provider --- pages/02.administer/55.providers/15.vpn/vpn.md | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/pages/02.administer/55.providers/15.vpn/vpn.md b/pages/02.administer/55.providers/15.vpn/vpn.md index 6d6d89c7..94731ec0 100644 --- a/pages/02.administer/55.providers/15.vpn/vpn.md +++ b/pages/02.administer/55.providers/15.vpn/vpn.md @@ -24,8 +24,7 @@ Below, you can find a list of providers compatible for self-hosting and especial ------------------ -[ui-tabs position="top-left" active="0" theme="lite"] -[ui-tab title="English speaking-site"] +## English speaking-site | VPN provider | [VPNClient](https://github.com/labriqueinternet/vpnclient_ynh) compatibility | IPv6 | rDNS IPv4 | rDNS IPv6 | Price | Membership | Net Neutrality | | ------------ | ----------------------- | ---- | --------- | --------- | ----- | -------------- | @@ -37,8 +36,8 @@ Below, you can find a list of providers compatible for self-hosting and especial !!! * [Trust zone](https://trust.zone/fr/order?p=25) !!! * [PureVPN](https://www.purevpn.fr/ip-vpn-dedie) !!! * [RapidVPN](https://www.rapidvpn.com/vpn) -[/ui-tab] -[ui-tab title="French speaking-site"] + +## French speaking-site | Fournisseurs | Compatibilité [VPNClient](https://github.com/labriqueinternet/vpnclient_ynh) | IPv6 | rDNS IPv4 | rDNS IPv6 | Prix | Adhésion | Neutralité du net | | ------------ | ----------------------- | ---- | --------- | --------- | ----- | -------------- | @@ -62,15 +61,12 @@ Below, you can find a list of providers compatible for self-hosting and especial ¹ Prix libre -[/ui-tab] -[ui-tab title="German speaking-site"] +## German speaking-site + | VPN provider | [VPNClient](https://github.com/labriqueinternet/vpnclient_ynh) compatibility | IPv6 | rDNS IPv4 | rDNS IPv6 | Price | Membership | Net Neutrality | | ------------ | ----------------------- | ---- | --------- | --------- | ----- | -------------- | | [In-Berlin](https://in-vpn.de/provider/vpn.html) | ✔ (manuelle) | ✔ | ✔ | ✔ | 9 or 14€ / month | 20€ / an | Non Profit | -[/ui-tab] -[/ui-tabs] -