aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--ALL_README.md10
-rw-r--r--README.md58
-rw-r--r--README_es.md51
-rw-r--r--README_eu.md51
-rw-r--r--README_fr.md52
-rw-r--r--README_gl.md51
-rw-r--r--README_id.md51
-rw-r--r--README_it.md92
-rw-r--r--README_ru.md51
-rw-r--r--README_zh_Hans.md51
-rw-r--r--conf/.env.production.sample22
-rw-r--r--conf/cron10
-rw-r--r--conf/mastodon-sidekiq.service38
-rw-r--r--conf/mastodon-streaming.service40
-rw-r--r--conf/mastodon-web.service38
-rw-r--r--doc/PRE_INSTALL.md4
-rw-r--r--manifest.toml25
-rw-r--r--scripts/_common.sh59
-rw-r--r--scripts/backup31
-rw-r--r--scripts/install153
-rw-r--r--scripts/remove40
-rw-r--r--scripts/restore72
-rw-r--r--scripts/upgrade185
-rw-r--r--tests.toml11
25 files changed, 359 insertions, 890 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..000df5f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+'*~'
+'*.sw[op]'
+'.DS_Store'
diff --git a/ALL_README.md b/ALL_README.md
deleted file mode 100644
index e3c80d2..0000000
--- a/ALL_README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# All available README files by language
-
-- [Read the README in English](README.md)
-- [Lea el README en español](README_es.md)
-- [Irakurri README euskaraz](README_eu.md)
-- [Lire le README en français](README_fr.md)
-- [Le o README en galego](README_gl.md)
-- [Baca README dalam bahasa bahasa Indonesia](README_id.md)
-- [Прочитать README на русский](README_ru.md)
-- [阅读中文(简体)的 README](README_zh_Hans.md)
diff --git a/README.md b/README.md
index c676435..e285399 100644
--- a/README.md
+++ b/README.md
@@ -1,51 +1,45 @@
<!--
-N.B.: This README was automatically generated by <https://github.com/YunoHost/apps/tree/master/tools/readme_generator>
+N.B.: This README was automatically generated by <https://github.com/YunoHost/apps_tools/blob/main/readme_generator>
It shall NOT be edited by hand.
-->
-# Mastodon for YunoHost
+<h1>
+ <img src="https://raw.githubusercontent.com/YunoHost/apps/main/logos/mastodon.png" width="32px" alt="Logo of Mastodon">
+ Mastodon, packaged for YunoHost
+</h1>
-[![Integration level](https://dash.yunohost.org/integration/mastodon.svg)](https://ci-apps.yunohost.org/ci/apps/mastodon/) ![Working status](https://ci-apps.yunohost.org/ci/badges/mastodon.status.svg) ![Maintenance status](https://ci-apps.yunohost.org/ci/badges/mastodon.maintain.svg)
+Libre and federated social network
-[![Install Mastodon with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=mastodon)
+[![🌐 Official app website](https://img.shields.io/badge/Official_app_website-darkgreen?style=for-the-badge)](https://joinmastodon.org/)
+[![App Demo](https://img.shields.io/badge/App_Demo-blue?style=for-the-badge)](https://joinmastodon.org/)
+[![Version: 4.4.3~ynh1](https://img.shields.io/badge/Version-4.4.3~ynh1-rgb(18,138,11)?style=for-the-badge)](https://ci-apps.yunohost.org/ci/apps/mastodon/)
-*[Read this README in other languages.](./ALL_README.md)*
+<div align="center">
+<a href="https://apps.yunohost.org/app/mastodon"><img height="100px" src="https://github.com/YunoHost/yunohost-artwork/raw/refs/heads/main/badges/neopossum-badges/badge_more_info_on_the_appstore.svg"/></a>
+<a href="https://github.com/YunoHost-Apps/mastodon_ynh/issues"><img height="100px" src="https://github.com/YunoHost/yunohost-artwork/raw/refs/heads/main/badges/neopossum-badges/badge_report_an_issue.svg"/></a>
+</div>
-> *This package allows you to install Mastodon quickly and simply on a YunoHost server.*
-> *If you don't have YunoHost, please consult [the guide](https://yunohost.org/install) to learn how to install it.*
-
-## Overview
-
-Mastodon is a free, open-source microblogging social network.
-It is a decentralized alternative to commercial platforms like Twitter and avoids the risks of a single company monopolizing your communication for commercial purposes.
-
-
-**Shipped version:** 4.2.12~ynh1
-
-**Demo:** <https://joinmastodon.org/>
## Screenshots
-
![Screenshot of Mastodon](./doc/screenshots/mastodon.png)
-## Documentation and resources
+## 📦 Developer info
-- Official app website: <https://joinmastodon.org/>
-- Official admin documentation: <https://docs.joinmastodon.org/>
-- Upstream app code repository: <https://github.com/mastodon/mastodon>
-- YunoHost Store: <https://apps.yunohost.org/app/mastodon>
-- Report a bug: <https://github.com/YunoHost-Apps/mastodon_ynh/issues>
+[![Automatic tests level](https://apps.yunohost.org/badge/cilevel/mastodon)](https://ci-apps.yunohost.org/ci/apps/mastodon/)
-## Developer info
+🛠️ Upstream Mastodon repository: <https://github.com/mastodon/mastodon>
-Please send your pull request to the [`testing` branch](https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing).
+Pull request are welcome and should target the [`testing` branch](https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing).
-To try the `testing` branch, please proceed like that:
+The `testing` branch can be tested using:
+```
+# fresh install:
+sudo yunohost app install https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing
-```bash
-sudo yunohost app install https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing --debug
-or
-sudo yunohost app upgrade mastodon -u https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing --debug
+# upgrade an existing install:
+sudo yunohost app upgrade mastodon -u https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing
```
-**More info regarding app packaging:** <https://yunohost.org/packaging_apps>
+### 📚 App packaging documentation
+
+Please see <https://doc.yunohost.org/packaging_apps> for more information. \ No newline at end of file
diff --git a/README_es.md b/README_es.md
deleted file mode 100644
index 7bcdc9e..0000000
--- a/README_es.md
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--
-Este archivo README esta generado automaticamente<https://github.com/YunoHost/apps/tree/master/tools/readme_generator>
-No se debe editar a mano.
--->
-
-# Mastodon para Yunohost
-
-[![Nivel de integración](https://dash.yunohost.org/integration/mastodon.svg)](https://ci-apps.yunohost.org/ci/apps/mastodon/) ![Estado funcional](https://ci-apps.yunohost.org/ci/badges/mastodon.status.svg) ![Estado En Mantención](https://ci-apps.yunohost.org/ci/badges/mastodon.maintain.svg)
-
-[![Instalar Mastodon con Yunhost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=mastodon)
-
-*[Leer este README en otros idiomas.](./ALL_README.md)*
-
-> *Este paquete le permite instalarMastodon rapidamente y simplement en un servidor YunoHost.*
-> *Si no tiene YunoHost, visita [the guide](https://yunohost.org/install) para aprender como instalarla.*
-
-## Descripción general
-
-Mastodon is a free, open-source microblogging social network.
-It is a decentralized alternative to commercial platforms like Twitter and avoids the risks of a single company monopolizing your communication for commercial purposes.
-
-
-**Versión actual:** 4.2.12~ynh1
-
-**Demo:** <https://joinmastodon.org/>
-
-## Capturas
-
-![Captura de Mastodon](./doc/screenshots/mastodon.png)
-
-## Documentaciones y recursos
-
-- Sitio web oficial: <https://joinmastodon.org/>
-- Documentación administrador oficial: <https://docs.joinmastodon.org/>
-- Repositorio del código fuente oficial de la aplicación : <https://github.com/mastodon/mastodon>
-- Catálogo YunoHost: <https://apps.yunohost.org/app/mastodon>
-- Reportar un error: <https://github.com/YunoHost-Apps/mastodon_ynh/issues>
-
-## Información para desarrolladores
-
-Por favor enviar sus correcciones a la [`branch testing`](https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing
-
-Para probar la rama `testing`, sigue asÍ:
-
-```bash
-sudo yunohost app install https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing --debug
-o
-sudo yunohost app upgrade mastodon -u https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing --debug
-```
-
-**Mas informaciones sobre el empaquetado de aplicaciones:** <https://yunohost.org/packaging_apps>
diff --git a/README_eu.md b/README_eu.md
deleted file mode 100644
index effc978..0000000
--- a/README_eu.md
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--
-Ohart ongi: README hau automatikoki sortu da <https://github.com/YunoHost/apps/tree/master/tools/readme_generator>ri esker
-EZ editatu eskuz.
--->
-
-# Mastodon YunoHost-erako
-
-[![Integrazio maila](https://dash.yunohost.org/integration/mastodon.svg)](https://ci-apps.yunohost.org/ci/apps/mastodon/) ![Funtzionamendu egoera](https://ci-apps.yunohost.org/ci/badges/mastodon.status.svg) ![Mantentze egoera](https://ci-apps.yunohost.org/ci/badges/mastodon.maintain.svg)
-
-[![Instalatu Mastodon YunoHost-ekin](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=mastodon)
-
-*[Irakurri README hau beste hizkuntzatan.](./ALL_README.md)*
-
-> *Pakete honek Mastodon YunoHost zerbitzari batean azkar eta zailtasunik gabe instalatzea ahalbidetzen dizu.*
-> *YunoHost ez baduzu, kontsultatu [gida](https://yunohost.org/install) nola instalatu ikasteko.*
-
-## Aurreikuspena
-
-Mastodon is a free, open-source microblogging social network.
-It is a decentralized alternative to commercial platforms like Twitter and avoids the risks of a single company monopolizing your communication for commercial purposes.
-
-
-**Paketatutako bertsioa:** 4.2.12~ynh1
-
-**Demoa:** <https://joinmastodon.org/>
-
-## Pantaila-argazkiak
-
-![Mastodon(r)en pantaila-argazkia](./doc/screenshots/mastodon.png)
-
-## Dokumentazioa eta baliabideak
-
-- Aplikazioaren webgune ofiziala: <https://joinmastodon.org/>
-- Administratzaileen dokumentazio ofiziala: <https://docs.joinmastodon.org/>
-- Jatorrizko aplikazioaren kode-gordailua: <https://github.com/mastodon/mastodon>
-- YunoHost Denda: <https://apps.yunohost.org/app/mastodon>
-- Eman errore baten berri: <https://github.com/YunoHost-Apps/mastodon_ynh/issues>
-
-## Garatzaileentzako informazioa
-
-Bidali `pull request`a [`testing` abarrera](https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing).
-
-`testing` abarra probatzeko, ondorengoa egin:
-
-```bash
-sudo yunohost app install https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing --debug
-edo
-sudo yunohost app upgrade mastodon -u https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing --debug
-```
-
-**Informazio gehiago aplikazioaren paketatzeari buruz:** <https://yunohost.org/packaging_apps>
diff --git a/README_fr.md b/README_fr.md
deleted file mode 100644
index c55aa91..0000000
--- a/README_fr.md
+++ /dev/null
@@ -1,52 +0,0 @@
-<!--
-Nota bene : ce README est automatiquement généré par <https://github.com/YunoHost/apps/tree/master/tools/readme_generator>
-Il NE doit PAS être modifié à la main.
--->
-
-# Mastodon pour YunoHost
-
-[![Niveau d’intégration](https://dash.yunohost.org/integration/mastodon.svg)](https://ci-apps.yunohost.org/ci/apps/mastodon/) ![Statut du fonctionnement](https://ci-apps.yunohost.org/ci/badges/mastodon.status.svg) ![Statut de maintenance](https://ci-apps.yunohost.org/ci/badges/mastodon.maintain.svg)
-
-[![Installer Mastodon avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=mastodon)
-
-*[Lire le README dans d'autres langues.](./ALL_README.md)*
-
-> *Ce package vous permet d’installer Mastodon rapidement et simplement sur un serveur YunoHost.*
-> *Si vous n’avez pas YunoHost, consultez [ce guide](https://yunohost.org/install) pour savoir comment l’installer et en profiter.*
-
-## Vue d’ensemble
-
-Mastodon est un réseau social de microblog auto-hébergé et open source.
-C'est une alternative décentralisée aux plates-formes commerciales comme Twitter.
-Mastodon évite ainsi les risques qu'une seule société monopolise votre communication à des fins commerciales.
-
-
-**Version incluse :** 4.2.12~ynh1
-
-**Démo :** <https://joinmastodon.org/>
-
-## Captures d’écran
-
-![Capture d’écran de Mastodon](./doc/screenshots/mastodon.png)
-
-## Documentations et ressources
-
-- Site officiel de l’app : <https://joinmastodon.org/>
-- Documentation officielle de l’admin : <https://docs.joinmastodon.org/>
-- Dépôt de code officiel de l’app : <https://github.com/mastodon/mastodon>
-- YunoHost Store : <https://apps.yunohost.org/app/mastodon>
-- Signaler un bug : <https://github.com/YunoHost-Apps/mastodon_ynh/issues>
-
-## Informations pour les développeurs
-
-Merci de faire vos pull request sur la [branche `testing`](https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing).
-
-Pour essayer la branche `testing`, procédez comme suit :
-
-```bash
-sudo yunohost app install https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing --debug
-ou
-sudo yunohost app upgrade mastodon -u https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing --debug
-```
-
-**Plus d’infos sur le packaging d’applications :** <https://yunohost.org/packaging_apps>
diff --git a/README_gl.md b/README_gl.md
deleted file mode 100644
index cec6ed7..0000000
--- a/README_gl.md
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--
-NOTA: Este README foi creado automáticamente por <https://github.com/YunoHost/apps/tree/master/tools/readme_generator>
-NON debe editarse manualmente.
--->
-
-# Mastodon para YunoHost
-
-[![Nivel de integración](https://dash.yunohost.org/integration/mastodon.svg)](https://ci-apps.yunohost.org/ci/apps/mastodon/) ![Estado de funcionamento](https://ci-apps.yunohost.org/ci/badges/mastodon.status.svg) ![Estado de mantemento](https://ci-apps.yunohost.org/ci/badges/mastodon.maintain.svg)
-
-[![Instalar Mastodon con YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=mastodon)
-
-*[Le este README en outros idiomas.](./ALL_README.md)*
-
-> *Este paquete permíteche instalar Mastodon de xeito rápido e doado nun servidor YunoHost.*
-> *Se non usas YunoHost, le a [documentación](https://yunohost.org/install) para saber como instalalo.*
-
-## Vista xeral
-
-Mastodon is a free, open-source microblogging social network.
-It is a decentralized alternative to commercial platforms like Twitter and avoids the risks of a single company monopolizing your communication for commercial purposes.
-
-
-**Versión proporcionada:** 4.2.12~ynh1
-
-**Demo:** <https://joinmastodon.org/>
-
-## Capturas de pantalla
-
-![Captura de pantalla de Mastodon](./doc/screenshots/mastodon.png)
-
-## Documentación e recursos
-
-- Web oficial da app: <https://joinmastodon.org/>
-- Documentación oficial para admin: <https://docs.joinmastodon.org/>
-- Repositorio de orixe do código: <https://github.com/mastodon/mastodon>
-- Tenda YunoHost: <https://apps.yunohost.org/app/mastodon>
-- Informar dun problema: <https://github.com/YunoHost-Apps/mastodon_ynh/issues>
-
-## Info de desenvolvemento
-
-Envía a túa colaboración á [rama `testing`](https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing).
-
-Para probar a rama `testing`, procede deste xeito:
-
-```bash
-sudo yunohost app install https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing --debug
-ou
-sudo yunohost app upgrade mastodon -u https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing --debug
-```
-
-**Máis info sobre o empaquetado da app:** <https://yunohost.org/packaging_apps>
diff --git a/README_id.md b/README_id.md
deleted file mode 100644
index a90e2d5..0000000
--- a/README_id.md
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--
-N.B.: README ini dibuat secara otomatis oleh <https://github.com/YunoHost/apps/tree/master/tools/readme_generator>
-Ini TIDAK boleh diedit dengan tangan.
--->
-
-# Mastodon untuk YunoHost
-
-[![Tingkat integrasi](https://dash.yunohost.org/integration/mastodon.svg)](https://ci-apps.yunohost.org/ci/apps/mastodon/) ![Status kerja](https://ci-apps.yunohost.org/ci/badges/mastodon.status.svg) ![Status pemeliharaan](https://ci-apps.yunohost.org/ci/badges/mastodon.maintain.svg)
-
-[![Pasang Mastodon dengan YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=mastodon)
-
-*[Baca README ini dengan bahasa yang lain.](./ALL_README.md)*
-
-> *Paket ini memperbolehkan Anda untuk memasang Mastodon secara cepat dan mudah pada server YunoHost.*
-> *Bila Anda tidak mempunyai YunoHost, silakan berkonsultasi dengan [panduan](https://yunohost.org/install) untuk mempelajari bagaimana untuk memasangnya.*
-
-## Ringkasan
-
-Mastodon is a free, open-source microblogging social network.
-It is a decentralized alternative to commercial platforms like Twitter and avoids the risks of a single company monopolizing your communication for commercial purposes.
-
-
-**Versi terkirim:** 4.2.12~ynh1
-
-**Demo:** <https://joinmastodon.org/>
-
-## Tangkapan Layar
-
-![Tangkapan Layar pada Mastodon](./doc/screenshots/mastodon.png)
-
-## Dokumentasi dan sumber daya
-
-- Website aplikasi resmi: <https://joinmastodon.org/>
-- Dokumentasi admin resmi: <https://docs.joinmastodon.org/>
-- Depot kode aplikasi hulu: <https://github.com/mastodon/mastodon>
-- Gudang YunoHost: <https://apps.yunohost.org/app/mastodon>
-- Laporkan bug: <https://github.com/YunoHost-Apps/mastodon_ynh/issues>
-
-## Info developer
-
-Silakan kirim pull request ke [`testing` branch](https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing).
-
-Untuk mencoba branch `testing`, silakan dilanjutkan seperti:
-
-```bash
-sudo yunohost app install https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing --debug
-atau
-sudo yunohost app upgrade mastodon -u https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing --debug
-```
-
-**Info lebih lanjut mengenai pemaketan aplikasi:** <https://yunohost.org/packaging_apps>
diff --git a/README_it.md b/README_it.md
deleted file mode 100644
index 0d18789..0000000
--- a/README_it.md
+++ /dev/null
@@ -1,92 +0,0 @@
-<!--
-N.B.: Questo README è stato automaticamente generato da <https://github.com/YunoHost/apps/tree/master/tools/readme_generator>
-NON DEVE essere modificato manualmente.
--->
-
-# Mastodon per YunoHost
-
-[![Livello di integrazione](https://dash.yunohost.org/integration/mastodon.svg)](https://dash.yunohost.org/appci/app/mastodon) ![Stato di funzionamento](https://ci-apps.yunohost.org/ci/badges/mastodon.status.svg) ![Stato di manutenzione](https://ci-apps.yunohost.org/ci/badges/mastodon.maintain.svg)
-
-[![Installa Mastodon con YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=mastodon)
-
-*[Leggi questo README in altre lingue.](./ALL_README.md)*
-
-> *Questo pacchetto ti permette di installare Mastodon su un server YunoHost in modo semplice e veloce.*
-> *Se non hai YunoHost, consulta [la guida](https://yunohost.org/install) per imparare a installarlo.*
-
-## Panoramica
-
-Mastodon is a free, open-source microblogging social network. It is a decentralized alternative to commercial platforms like Twitter and avoids the risks of a single company monopolizing your communication for commercial purposes.
-
-**Versione pubblicata:** 4.2.8~ynh1
-
-**Prova:** <https://joinmastodon.org/>
-
-## Screenshot
-
-![Screenshot di Mastodon](./doc/screenshots/mastodon.png)
-
-## Attenzione/informazioni importanti
-
-## Important points to read before installing
-
-1. **Mastodon** require a dedicated **root domain**, eg. mastodon.domain.tld
-1. The user choosen during the installation is automatically created in Mastodon with admin rights
-1. At the end of the installation a mail is sent to the user with the automatically generated password
-1. It seems important to close the inscriptions for your Mastodon, so that it remains a private body. We invite you to block remote malicious instances from the administration interface. You can also add text on your home page.
-
-## Configuration
-
-### Install
-
-#### Using *screen* in case of disconnect
-```
-$ sudo apt-get install screen
-$ screen
-$ sudo yunohost app install https://github.com/YunoHost-Apps/mastodon_ynh.git
-```
-Recover after disconnect:
-```
-$ screen -d
-$ screen -r
-```
-
-### Update
-
-#### Using *screen* highly recommended
-
-`$ sudo yunohost app upgrade mastodon -u https://github.com/YunoHost-Apps/mastodon_ynh --debug `
-
-### Administrate with tootctl
-
-`$ (cd /var/www/mastodon/live && sudo -u mastodon RAILS_ENV=production PATH=/opt/rbenv/versions/mastodon/bin bin/tootctl --help)`
-
-## YunoHost specific features
-
-#### Multi-users support
-
-LDAP authentication is activated. All YunoHost users can authenticate.
-
-Log-out from YunoHost's portal doesn't log out from Mastodon. See https://github.com/YunoHost/issues/issues/501
-
-## Documentazione e risorse
-
-- Sito web ufficiale dell’app: <https://joinmastodon.org/>
-- Documentazione ufficiale per gli amministratori: <https://docs.joinmastodon.org/>
-- Repository upstream del codice dell’app: <https://github.com/mastodon/mastodon>
-- Store di YunoHost: <https://apps.yunohost.org/app/mastodon>
-- Segnala un problema: <https://github.com/YunoHost-Apps/mastodon_ynh/issues>
-
-## Informazioni per sviluppatori
-
-Si prega di inviare la tua pull request alla [branch di `testing`](https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing).
-
-Per provare la branch di `testing`, si prega di procedere in questo modo:
-
-```bash
-sudo yunohost app install https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing --debug
-o
-sudo yunohost app upgrade mastodon -u https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing --debug
-```
-
-**Maggiori informazioni riguardo il pacchetto di quest’app:** <https://yunohost.org/packaging_apps>
diff --git a/README_ru.md b/README_ru.md
deleted file mode 100644
index 3c1e86f..0000000
--- a/README_ru.md
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--
-Важно: этот README был автоматически сгенерирован <https://github.com/YunoHost/apps/tree/master/tools/readme_generator>
-Он НЕ ДОЛЖЕН редактироваться вручную.
--->
-
-# Mastodon для YunoHost
-
-[![Уровень интеграции](https://dash.yunohost.org/integration/mastodon.svg)](https://ci-apps.yunohost.org/ci/apps/mastodon/) ![Состояние работы](https://ci-apps.yunohost.org/ci/badges/mastodon.status.svg) ![Состояние сопровождения](https://ci-apps.yunohost.org/ci/badges/mastodon.maintain.svg)
-
-[![Установите Mastodon с YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=mastodon)
-
-*[Прочтите этот README на других языках.](./ALL_README.md)*
-
-> *Этот пакет позволяет Вам установить Mastodon быстро и просто на YunoHost-сервер.*
-> *Если у Вас нет YunoHost, пожалуйста, посмотрите [инструкцию](https://yunohost.org/install), чтобы узнать, как установить его.*
-
-## Обзор
-
-Mastodon is a free, open-source microblogging social network.
-It is a decentralized alternative to commercial platforms like Twitter and avoids the risks of a single company monopolizing your communication for commercial purposes.
-
-
-**Поставляемая версия:** 4.2.12~ynh1
-
-**Демо-версия:** <https://joinmastodon.org/>
-
-## Снимки экрана
-
-![Снимок экрана Mastodon](./doc/screenshots/mastodon.png)
-
-## Документация и ресурсы
-
-- Официальный веб-сайт приложения: <https://joinmastodon.org/>
-- Официальная документация администратора: <https://docs.joinmastodon.org/>
-- Репозиторий кода главной ветки приложения: <https://github.com/mastodon/mastodon>
-- Магазин YunoHost: <https://apps.yunohost.org/app/mastodon>
-- Сообщите об ошибке: <https://github.com/YunoHost-Apps/mastodon_ynh/issues>
-
-## Информация для разработчиков
-
-Пришлите Ваш запрос на слияние в [ветку `testing`](https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing).
-
-Чтобы попробовать ветку `testing`, пожалуйста, сделайте что-то вроде этого:
-
-```bash
-sudo yunohost app install https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing --debug
-или
-sudo yunohost app upgrade mastodon -u https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing --debug
-```
-
-**Больше информации о пакетировании приложений:** <https://yunohost.org/packaging_apps>
diff --git a/README_zh_Hans.md b/README_zh_Hans.md
deleted file mode 100644
index 83aaddb..0000000
--- a/README_zh_Hans.md
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--
-注意:此 README 由 <https://github.com/YunoHost/apps/tree/master/tools/readme_generator> 自动生成
-请勿手动编辑。
--->
-
-# YunoHost 上的 Mastodon
-
-[![集成程度](https://dash.yunohost.org/integration/mastodon.svg)](https://ci-apps.yunohost.org/ci/apps/mastodon/) ![工作状态](https://ci-apps.yunohost.org/ci/badges/mastodon.status.svg) ![维护状态](https://ci-apps.yunohost.org/ci/badges/mastodon.maintain.svg)
-
-[![使用 YunoHost 安装 Mastodon](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=mastodon)
-
-*[阅读此 README 的其它语言版本。](./ALL_README.md)*
-
-> *通过此软件包,您可以在 YunoHost 服务器上快速、简单地安装 Mastodon。*
-> *如果您还没有 YunoHost,请参阅[指南](https://yunohost.org/install)了解如何安装它。*
-
-## 概况
-
-Mastodon is a free, open-source microblogging social network.
-It is a decentralized alternative to commercial platforms like Twitter and avoids the risks of a single company monopolizing your communication for commercial purposes.
-
-
-**分发版本:** 4.2.12~ynh1
-
-**演示:** <https://joinmastodon.org/>
-
-## 截图
-
-![Mastodon 的截图](./doc/screenshots/mastodon.png)
-
-## 文档与资源
-
-- 官方应用网站: <https://joinmastodon.org/>
-- 官方管理文档: <https://docs.joinmastodon.org/>
-- 上游应用代码库: <https://github.com/mastodon/mastodon>
-- YunoHost 商店: <https://apps.yunohost.org/app/mastodon>
-- 报告 bug: <https://github.com/YunoHost-Apps/mastodon_ynh/issues>
-
-## 开发者信息
-
-请向 [`testing` 分支](https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing) 发送拉取请求。
-
-如要尝试 `testing` 分支,请这样操作:
-
-```bash
-sudo yunohost app install https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing --debug
-或
-sudo yunohost app upgrade mastodon -u https://github.com/YunoHost-Apps/mastodon_ynh/tree/testing --debug
-```
-
-**有关应用打包的更多信息:** <https://yunohost.org/packaging_apps>
diff --git a/conf/.env.production.sample b/conf/.env.production.sample
index 7005b5d..d934fa8 100644
--- a/conf/.env.production.sample
+++ b/conf/.env.production.sample
@@ -1,5 +1,5 @@
# This is a sample configuration file. You can generate your configuration
-# with the `rake mastodon:setup` interactive setup wizard, but to customize
+# with the `bundle exec rails mastodon:setup` interactive setup wizard, but to customize
# your setup even further, you'll need to edit it manually. This sample does
# not demonstrate all available configuration options. Please look at
# https://docs.joinmastodon.org/admin/config/ for the full documentation.
@@ -20,7 +20,6 @@ LOCAL_DOMAIN=__DOMAIN__
# -----
REDIS_HOST=localhost
REDIS_PORT=6379
-REDIS_NAMESPACE=__REDIS_NAMESPACE__
# PostgreSQL
# ----------
@@ -41,14 +40,25 @@ ES_ENABLED=false
# Secrets
# -------
-# Make sure to use `rake secret` to generate secrets
+# Make sure to use `bundle exec rails secret` to generate secrets
# -------
SECRET_KEY_BASE=__SECRET_KEY_BASE__
OTP_SECRET=__OTP_SECRET__
+# Encryption secrets
+# ------------------
+# Must be available (and set to same values) for all server processes
+# These are private/secret values, do not share outside hosting environment
+# Use `bin/rails db:encryption:init` to generate fresh secrets
+# Do not change these secrets once in use, as this would cause data loss and other issues
+# ------------------
+ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=__ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY__
+ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=__ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT__
+ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=__ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY__
+
# Web Push
# --------
-# Generate with `rake mastodon:webpush:generate_vapid_key`
+# Generate with `bundle exec rails mastodon:webpush:generate_vapid_key`
# --------
VAPID_PRIVATE_KEY=__VAPID_PRIVATE_KEY__
VAPID_PUBLIC_KEY=__VAPID_PUBLIC_KEY__
@@ -104,5 +114,5 @@ LDAP_TLS_NO_VERIFY=true
# Make sure to modify the scheduling of ip_cleanup_scheduler in config/sidekiq.yml
# to be less than daily if you lower IP_RETENTION_PERIOD below two days (172800).
# -----------------------
-IP_RETENTION_PERIOD=1209600
-SESSION_RETENTION_PERIOD=1209600
+IP_RETENTION_PERIOD=31556952
+SESSION_RETENTION_PERIOD=31556952
diff --git a/conf/cron b/conf/cron
index 02b2a6a..ca08f7f 100644
--- a/conf/cron
+++ b/conf/cron
@@ -1,7 +1,7 @@
# This is a system cron file, see crontab(5)
# m h dom mon dow user command
-@daily __APP__ cd __INSTALL_DIR__/live && __YNH_RUBY_LOAD_PATH__ __LD_PRELOAD__ RAILS_ENV=production bin/tootctl media remove
-@monthly __APP__ cd __INSTALL_DIR__/live && __YNH_RUBY_LOAD_PATH__ __LD_PRELOAD__ RAILS_ENV=production bin/tootctl media remove-orphans
-@monthly __APP__ cd __INSTALL_DIR__/live && __YNH_RUBY_LOAD_PATH__ __LD_PRELOAD__ RAILS_ENV=production bin/tootctl accounts cull
-@monthly __APP__ cd __INSTALL_DIR__/live && __YNH_RUBY_LOAD_PATH__ __LD_PRELOAD__ RAILS_ENV=production bin/tootctl statuses remove
-@monthly __APP__ cd __INSTALL_DIR__/live && __YNH_RUBY_LOAD_PATH__ __LD_PRELOAD__ RAILS_ENV=production bin/tootctl preview_cards remove
+@daily __APP__ cd __INSTALL_DIR__/live && PATH=__PATH_WITH_RUBY__ __LD_PRELOAD__ RAILS_ENV=production bin/tootctl media remove
+@monthly __APP__ cd __INSTALL_DIR__/live && PATH=__PATH_WITH_RUBY__ __LD_PRELOAD__ RAILS_ENV=production bin/tootctl media remove-orphans
+@monthly __APP__ cd __INSTALL_DIR__/live && PATH=__PATH_WITH_RUBY__ __LD_PRELOAD__ RAILS_ENV=production bin/tootctl accounts cull
+@monthly __APP__ cd __INSTALL_DIR__/live && PATH=__PATH_WITH_RUBY__ __LD_PRELOAD__ RAILS_ENV=production bin/tootctl statuses remove
+@monthly __APP__ cd __INSTALL_DIR__/live && PATH=__PATH_WITH_RUBY__ __LD_PRELOAD__ RAILS_ENV=production bin/tootctl preview_cards remove
diff --git a/conf/mastodon-sidekiq.service b/conf/mastodon-sidekiq.service
index 14bd592..0048c61 100644
--- a/conf/mastodon-sidekiq.service
+++ b/conf/mastodon-sidekiq.service
@@ -6,33 +6,37 @@ After=network.target
Type=simple
User=__APP__
WorkingDirectory=__INSTALL_DIR__/live
-Environment="__LD_PRELOAD__"
Environment="RAILS_ENV=production"
Environment="DB_POOL=25"
Environment="MALLOC_ARENA_MAX=2"
-Environment="__YNH_RUBY_LOAD_PATH__"
+Environment="__LD_PRELOAD__"
+Environment="PATH=__PATH_WITH_RUBY__"
ExecStart=__INSTALL_DIR__/live/bin/bundle exec sidekiq -c 25
TimeoutSec=15
Restart=always
StandardOutput=append:/var/log/__APP__/__APP__-sidekiq.log
StandardError=inherit
-# Sandboxing options to harden security
-# Depending on specificities of your service/app, you may need to tweak these
-# .. but this should be a good baseline
-# Details for these options: https://www.freedesktop.org/software/systemd/man/systemd.exec.html
-NoNewPrivileges=no
-PrivateTmp=yes
-PrivateDevices=yes
-RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK
-RestrictNamespaces=yes
-RestrictRealtime=yes
-DevicePolicy=closed
+# Proc filesystem
+# Capabilities
+# Security
+NoNewPrivileges=true
+# Sandboxing
ProtectSystem=full
-ProtectControlGroups=yes
-ProtectKernelModules=yes
-ProtectKernelTunables=yes
-LockPersonality=yes
+PrivateTmp=true
+PrivateDevices=true
+ProtectKernelModules=true
+ProtectKernelTunables=true
+ProtectControlGroups=true
+RestrictAddressFamilies=AF_INET
+RestrictAddressFamilies=AF_INET6
+RestrictAddressFamilies=AF_NETLINK
+RestrictAddressFamilies=AF_UNIX
+RestrictNamespaces=true
+LockPersonality=true
+RestrictRealtime=true
+DevicePolicy=closed
+# System Call Filtering
SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @setuid @swap
# Denying access to capabilities that should not be relevant for webapps
diff --git a/conf/mastodon-streaming.service b/conf/mastodon-streaming.service
index f63945e..735fe4c 100644
--- a/conf/mastodon-streaming.service
+++ b/conf/mastodon-streaming.service
@@ -1,5 +1,5 @@
[Unit]
-Description=__APP__-streaming
+Description=__APP__-streaming on port __PORT_STREAM__
After=network.target
[Service]
@@ -9,29 +9,33 @@ WorkingDirectory=__INSTALL_DIR__/live
Environment="NODE_ENV=production"
Environment="PORT=__PORT_STREAM__"
Environment="STREAMING_CLUSTER_NUM=1"
-Environment="__YNH_NODE_LOAD_PATH__"
-ExecStart=__YNH_NODE__ ./streaming
+Environment="PATH=__PATH_WITH_NODEJS__"
+ExecStart=__NODEJS_DIR__/node ./streaming
TimeoutSec=15
Restart=always
StandardOutput=append:/var/log/__APP__/__APP__-streaming.log
StandardError=inherit
-# Sandboxing options to harden security
-# Depending on specificities of your service/app, you may need to tweak these
-# .. but this should be a good baseline
-# Details for these options: https://www.freedesktop.org/software/systemd/man/systemd.exec.html
-NoNewPrivileges=yes
-PrivateTmp=yes
-PrivateDevices=yes
-RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK
-RestrictNamespaces=yes
-RestrictRealtime=yes
-DevicePolicy=closed
+# Proc filesystem
+# Capabilities
+# Security
+NoNewPrivileges=true
+# Sandboxing
ProtectSystem=full
-ProtectControlGroups=yes
-ProtectKernelModules=yes
-ProtectKernelTunables=yes
-LockPersonality=yes
+PrivateTmp=true
+PrivateDevices=true
+ProtectKernelModules=true
+ProtectKernelTunables=true
+ProtectControlGroups=true
+RestrictAddressFamilies=AF_INET
+RestrictAddressFamilies=AF_INET6
+RestrictAddressFamilies=AF_NETLINK
+RestrictAddressFamilies=AF_UNIX
+RestrictNamespaces=true
+LockPersonality=true
+RestrictRealtime=true
+DevicePolicy=closed
+# System Call Filtering
SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @setuid @swap
# Denying access to capabilities that should not be relevant for webapps
diff --git a/conf/mastodon-web.service b/conf/mastodon-web.service
index 133fc3b..2635c71 100644
--- a/conf/mastodon-web.service
+++ b/conf/mastodon-web.service
@@ -6,10 +6,10 @@ After=network.target
Type=simple
User=__APP__
WorkingDirectory=__INSTALL_DIR__/live
-Environment="__LD_PRELOAD__"
Environment="RAILS_ENV=production"
Environment="PORT=__PORT_WEB__"
-Environment="__YNH_RUBY_LOAD_PATH__"
+Environment="__LD_PRELOAD__"
+Environment="PATH=__PATH_WITH_RUBY__"
ExecStart=__INSTALL_DIR__/live/bin/bundle exec puma -C config/puma.rb
ExecReload=/bin/kill -SIGUSR1 $MAINPID
TimeoutSec=15
@@ -17,22 +17,26 @@ Restart=always
StandardOutput=append:/var/log/__APP__/__APP__-web.log
StandardError=inherit
-# Sandboxing options to harden security
-# Depending on specificities of your service/app, you may need to tweak these
-# .. but this should be a good baseline
-# Details for these options: https://www.freedesktop.org/software/systemd/man/systemd.exec.html
-NoNewPrivileges=yes
-PrivateTmp=yes
-PrivateDevices=yes
-RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK
-RestrictNamespaces=yes
-RestrictRealtime=yes
-DevicePolicy=closed
+# Proc filesystem
+# Capabilities
+# Security
+NoNewPrivileges=true
+# Sandboxing
ProtectSystem=full
-ProtectControlGroups=yes
-ProtectKernelModules=yes
-ProtectKernelTunables=yes
-LockPersonality=yes
+PrivateTmp=true
+PrivateDevices=true
+ProtectKernelModules=true
+ProtectKernelTunables=true
+ProtectControlGroups=true
+RestrictAddressFamilies=AF_INET
+RestrictAddressFamilies=AF_INET6
+RestrictAddressFamilies=AF_NETLINK
+RestrictAddressFamilies=AF_UNIX
+RestrictNamespaces=true
+LockPersonality=true
+RestrictRealtime=true
+DevicePolicy=closed
+# System Call Filtering
SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @setuid @swap
# Denying access to capabilities that should not be relevant for webapps
diff --git a/doc/PRE_INSTALL.md b/doc/PRE_INSTALL.md
index cbb9a79..e95a46f 100644
--- a/doc/PRE_INSTALL.md
+++ b/doc/PRE_INSTALL.md
@@ -1,7 +1,7 @@
## Important points to read before installing
-- **Mastodon** require a dedicated **root domain**, eg. `domaine.tld` or `mastodon.domain.tld`, with no other apps installed on that domain. Due to the federation, **you will not be able to change the domain once installed.**
-- The user choosen during the installation is automatically created in Mastodon with admin rights
+- **Mastodon** require a dedicated **root domain**, eg. `domain.tld` or `mastodon.domain.tld`, with no other apps installed on that domain. Due to the federation, **you will not be able to change the domain once installed.**
+- The user chosen during the installation is automatically created in Mastodon with admin rights
- To ensure that your Mastodon instance remains private and that the community is secure, it is important that registrations are closed and verified. We invite you to block remote malicious instances from the administration interface. You can also add text on your home page using the administration interface.
## Using *screen* in case of disconnect
diff --git a/manifest.toml b/manifest.toml
index 84e7098..3575af5 100644
--- a/manifest.toml
+++ b/manifest.toml
@@ -5,9 +5,9 @@ name = "Mastodon"
description.en = "Libre and federated social network"
description.fr = "Réseau social libre et fédéré"
-version = "4.2.12~ynh1"
+version = "4.4.3~ynh1"
-maintainers = ["Tagada"]
+maintainers = []
[upstream]
license = "AGPL-3.0-or-later"
@@ -19,13 +19,12 @@ cpe = "cpe:2.3:a:joinmastodon:mastodon"
fund = "https://joinmastodon.org/sponsors"
[integration]
-yunohost = ">=11.2.30"
+yunohost = ">= 12.0.10"
helpers_version = "2.1"
architectures = "all"
multi_instance = true
ldap = true
-
sso = false
disk = "2G"
@@ -53,10 +52,17 @@ ram.runtime = "500M"
[resources]
[resources.sources]
[resources.sources.main]
- url = "https://github.com/mastodon/mastodon/archive/refs/tags/v4.2.12.tar.gz"
- sha256 = "8fba0e4cc74233bee77752217673295ec4e32587abc2c9ae8967497147e691e5"
+ url = "https://github.com/mastodon/mastodon/archive/refs/tags/v4.4.3.tar.gz"
+ sha256 = "ede116b80a525462f5ea68d046a4cdd787930fc6d2f9327c140756311ee07848"
autoupdate.strategy = "latest_github_release"
+ [resources.sources.redis_migration]
+ url = "https://raw.githubusercontent.com/mastodon/redis_namespace_migration/47c6bd9757e7a40f7091b5692d78aef992ea8bf2/rename.rb"
+ sha256 = "3134a5c7e0157ee752f5cb49b942c89480951e94236b03dd1cb3cb1d3afdcdd2"
+ in_subdir = false
+ extract = false
+ rename = "rename.rb"
+
[resources.system_user]
allow_email = true
@@ -76,12 +82,7 @@ ram.runtime = "500M"
stream.default = 4000
[resources.apt]
- packages = "imagemagick, ffmpeg, libpq-dev, libxml2-dev, libxslt1-dev, file, git, git-core, g++, libprotobuf-dev, protobuf-compiler, pkg-config, gcc, autoconf, bison, build-essential, libssl-dev, libyaml-dev, libreadline6-dev, zlib1g-dev, libncurses5-dev, libffi-dev, libgdbm6, libgdbm-dev, redis-tools, redis-server, rsync, postgresql, postgresql-contrib, libidn11-dev, libicu-dev, libjemalloc-dev, curl, apt-transport-https"
-
- [resources.apt.extras.yarn]
- repo = "deb https://dl.yarnpkg.com/debian/ stable main"
- key = "https://dl.yarnpkg.com/debian/pubkey.gpg"
- packages = "yarn"
+ packages = "imagemagick, ffmpeg, libvips-tools, libpq-dev, libxml2-dev, libxslt1-dev, file, git, git-core, g++, libprotobuf-dev, protobuf-compiler, pkg-config, gcc, autoconf, bison, build-essential, libssl-dev, libyaml-dev, libreadline6-dev, zlib1g-dev, libncurses5-dev, libffi-dev, libgdbm6, libgdbm-dev, redis-tools, redis-server, rsync, postgresql, postgresql-contrib, libidn11-dev, libicu-dev, libjemalloc-dev, curl, apt-transport-https"
[resources.database]
type = "postgresql"
diff --git a/scripts/_common.sh b/scripts/_common.sh
index a2ba0b8..089f541 100644
--- a/scripts/_common.sh
+++ b/scripts/_common.sh
@@ -1,46 +1,27 @@
#!/bin/bash
#=================================================
-# COMMON VARIABLES
+# COMMON VARIABLES AND CUSTOM HELPERS
#=================================================
memory_needed="2560"
-ruby_version=3.2.3
-nodejs_version=20
+ruby_version="3.4.5"
+nodejs_version="22"
-# Workaround for Mastodon on Bullseye
-# See https://github.com/mastodon/mastodon/issues/15751#issuecomment-873594463
-if [ "$(lsb_release --codename --short)" = "bullseye" ];
-then
- case $YNH_ARCH in
- amd64)
- ld_preload="LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so"
- ;;
- arm64)
- ld_preload="LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libjemalloc.so"
- ;;
- armhf)
- ld_preload="LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libjemalloc.so"
- ;;
- armel)
- ld_preload="LD_PRELOAD=/usr/lib/arm-linux-gnueabi/libjemalloc.so"
- ;;
- i386)
- ld_preload="LD_PRELOAD=/usr/lib/i386-linux-gnu/libjemalloc.so"
- ;;
- esac
-else
- ld_preload=""
-fi
-
-#=================================================
-# PERSONAL HELPERS
-#=================================================
-
-#=================================================
-# EXPERIMENTAL HELPERS
-#=================================================
-
-#=================================================
-# FUTURE OFFICIAL HELPERS
-#=================================================
+case $YNH_ARCH in
+ amd64)
+ ld_preload="LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so"
+ ;;
+ arm64)
+ ld_preload="LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libjemalloc.so"
+ ;;
+ armhf)
+ ld_preload="LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libjemalloc.so"
+ ;;
+ armel)
+ ld_preload="LD_PRELOAD=/usr/lib/arm-linux-gnueabi/libjemalloc.so"
+ ;;
+ i386)
+ ld_preload="LD_PRELOAD=/usr/lib/i386-linux-gnu/libjemalloc.so"
+ ;;
+esac
diff --git a/scripts/backup b/scripts/backup
index de1ba98..e9b18e8 100644
--- a/scripts/backup
+++ b/scripts/backup
@@ -1,31 +1,22 @@
#!/bin/bash
-#=================================================
-# GENERIC START
-#=================================================
-# IMPORT GENERIC HELPERS
-#=================================================
-
# Keep this path for calling _common.sh inside the execution's context of backup and restore scripts
source ../settings/scripts/_common.sh
source /usr/share/yunohost/helpers
-#=================================================
-# DECLARE DATA AND CONF FILES TO BACKUP
-#=================================================
-ynh_print_info --message="Declaring files to be backed up..."
+ynh_print_info "Declaring files to be backed up..."
#=================================================
# BACKUP THE APP MAIN DIR
#=================================================
-ynh_backup --src_path="$install_dir"
+ynh_backup "$install_dir"
#=================================================
# BACKUP THE NGINX CONFIGURATION
#=================================================
-ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf"
+ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf"
#=================================================
# SPECIFIC BACKUP
@@ -33,31 +24,31 @@ ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf"
# BACKUP LOGROTATE
#=================================================
-ynh_backup --src_path="/etc/logrotate.d/$app"
+ynh_backup "/etc/logrotate.d/$app"
#=================================================
# BACKUP SYSTEMD
#=================================================
-ynh_backup --src_path="/etc/systemd/system/$app-web.service"
-ynh_backup --src_path="/etc/systemd/system/$app-sidekiq.service"
-ynh_backup --src_path="/etc/systemd/system/$app-streaming.service"
+ynh_backup "/etc/systemd/system/$app-web.service"
+ynh_backup "/etc/systemd/system/$app-sidekiq.service"
+ynh_backup "/etc/systemd/system/$app-streaming.service"
#=================================================
# BACKUP VARIOUS FILES
#=================================================
-ynh_backup --src_path="/etc/cron.d/$app"
+ynh_backup "/etc/cron.d/$app"
#=================================================
# BACKUP THE POSTGRESQL DATABASE
#=================================================
-ynh_print_info --message="Backing up the PostgreSQL database..."
+ynh_print_info "Backing up the PostgreSQL database..."
-ynh_psql_dump_db --database="$db_name" > db.sql
+ynh_psql_dump_db > db.sql
#=================================================
# END OF SCRIPT
#=================================================
-ynh_print_info --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)."
+ynh_print_info "Backup script completed for $app. (YunoHost will then actually copy those files to the archive)."
diff --git a/scripts/install b/scripts/install
index 1890e51..6efd8ef 100644
--- a/scripts/install
+++ b/scripts/install
@@ -1,42 +1,37 @@
#!/bin/bash
-#=================================================
-# GENERIC START
-#=================================================
-# IMPORT GENERIC HELPERS
-#=================================================
-
source _common.sh
source /usr/share/yunohost/helpers
admin_mail=$(ynh_user_get_info --username=$admin --key=mail)
# Set `service` settings to support `yunohost app shell` command
-ynh_app_setting_set --app="$app" --key=service --value="$app-web.service"
+ynh_app_setting_set --key=service --value="$app-web.service"
#=================================================
-# APP "BUILD" (DEPLOYING SOURCES, VENV, COMPILING ETC)
+# INSTALL DEPENDENCIES
+#=================================================
+ynh_script_progression "Installing Ruby and NodeJS..."
+
+ynh_ruby_install
+ynh_nodejs_install
+
#=================================================
# DOWNLOAD, CHECK AND UNPACK SOURCE
#=================================================
-ynh_script_progression --message="Setting up source files..." --weight=1
+ynh_script_progression "Setting up source files..."
-# Download, check integrity, uncompress and patch the source from app.src
ynh_setup_source --dest_dir="$install_dir/live"
+# Download redis migration script
+ynh_setup_source --source_id=redis_migration --dest_dir="$install_dir/live"
+chmod -R 775 "$install_dir"
+chmod o-rwx "$install_dir"
chown -R $app:www-data "$install_dir"
#=================================================
-# INSTALL DEPENDENCIES
-#=================================================
-ynh_script_progression --message="Installing Ruby and NodeJS..." --weight=1
-
-ynh_exec_warn_less ynh_install_ruby --ruby_version=$ruby_version
-ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$nodejs_version
-
-#=================================================
# ADD SWAP IF NEEDED
#=================================================
-ynh_script_progression --message="Adding swap if needed..." --weight=1
+ynh_script_progression "Adding swap if needed..."
total_memory=$(ynh_get_ram --total)
swap_needed=0
@@ -46,120 +41,120 @@ if [ $total_memory -lt $memory_needed ]; then
swap_needed=$(($memory_needed - $total_memory))
fi
-ynh_script_progression --message="Adding $swap_needed Mo to swap..." --weight=1
+ynh_script_progression "Adding $swap_needed Mo to swap..."
ynh_add_swap --size=$swap_needed
#=================================================
# ADD A CONFIGURATION
#=================================================
-ynh_script_progression --message="Adding a configuration file..." --weight=1
+ynh_script_progression "Adding $app's configuration..."
config="$install_dir/live/.env.production"
language="$(echo $language | head -c 2)"
-redis_namespace=${app}_production
-ynh_app_setting_set --app="$app" --key=redis_namespace --value="$redis_namespace"
-
secret_key_base=$(ynh_string_random --length=128)
-ynh_app_setting_set --app="$app" --key=secret_key_base --value="$secret_key_base"
+ynh_app_setting_set --key=secret_key_base --value="$secret_key_base"
otp_secret=$(ynh_string_random --length=128)
-ynh_app_setting_set --app="$app" --key=otp_secret --value="$otp_secret"
+ynh_app_setting_set --key=otp_secret --value="$otp_secret"
-# We need rake to build vapid keys, we generate them later once the app is installed
+# We need bundle exec rails to build vapid keys, we generate them later once the app is installed
vapid_private_key=""
vapid_public_key=""
-ynh_add_config --template=".env.production.sample" --destination="$config"
-chmod 400 "$config"
-chown $app:$app "$config"
-
-ynh_replace_string --match_string="registrations_mode: 'open'" --replace_string="registrations_mode: 'none'" --target_file="$install_dir/live/config/settings.yml"
-ynh_replace_string --match_string="min_invite_role: 'admin'" --replace_string="min_invite_role: 'none'" --target_file="$install_dir/live/config/settings.yml"
+# We need `bin/rails db:encryption:init` to generate fresh secrets, we generate them later once the app is installed
+active_record_encryption_deterministic_key=""
+active_record_encryption_key_derivation_salt=""
+active_record_encryption_primary_key=""
-ynh_store_file_checksum --file="$install_dir/live/config/settings.yml"
-
-chmod 400 "$install_dir/live/config/settings.yml"
-chown $app:$app "$install_dir/live/config/settings.yml"
+ynh_config_add --template=".env.production.sample" --destination="$config"
#=================================================
# BUILD APP
#=================================================
-ynh_script_progression --message="Building app..." --weight=1
+ynh_script_progression "Building app..."
pushd "$install_dir/live"
- # Building ruby packages
- ynh_use_ruby
- ynh_gem update --system
- ynh_gem install bundler --no-document
- ynh_exec_as $app $ynh_ruby_load_path $ld_preload bin/bundle config deployment 'true'
- ynh_exec_as $app $ynh_ruby_load_path $ld_preload bin/bundle config without 'development test'
- ynh_exec_as $app $ynh_ruby_load_path $ld_preload bin/bundle config set force_ruby_platform true
- ynh_exec_as $app $ynh_ruby_load_path $ld_preload bin/bundle install -j$(getconf _NPROCESSORS_ONLN)
- # Building assets
- ynh_use_nodejs
- ynh_exec_warn_less ynh_exec_as $app $ynh_node_load_PATH yarn install --pure-lockfile --production --network-timeout 600000
+ gem update --system
+ gem install bundler --no-document
+ ynh_hide_warnings ynh_exec_as_app $ld_preload bin/bundle config deployment 'true'
+ ynh_hide_warnings ynh_exec_as_app $ld_preload bin/bundle config without 'development test'
+ ynh_hide_warnings ynh_exec_as_app $ld_preload bin/bundle config set force_ruby_platform true --quiet
+ ynh_hide_warnings ynh_exec_as_app $ld_preload bin/bundle install -j$(getconf _NPROCESSORS_ONLN)
+
+ env corepack enable
+ echo Y | ynh_hide_warnings ynh_exec_as_app yarn workspaces focus --production
+ ynh_hide_warnings ynh_exec_as_app yarn install --immutable
echo "SAFETY_ASSURED=1">> $config
- ynh_exec_warn_less ynh_exec_as $app RAILS_ENV=production $ynh_ruby_load_path $ld_preload bin/bundle exec rails db:migrate --quiet
- ynh_exec_warn_less ynh_exec_as $app RAILS_ENV=production $ynh_ruby_load_path $ld_preload bin/bundle exec rails assets:precompile --quiet
# Generate vapid keys
- ynh_exec_warn_less ynh_exec_as $app RAILS_ENV=production $ynh_ruby_load_path $ld_preload bin/bundle exec rake mastodon:webpush:generate_vapid_key > key.txt
- # Create the first admin user
- ynh_exec_warn_less ynh_exec_as $app RAILS_ENV=production $ynh_ruby_load_path $ld_preload bin/tootctl accounts create "$admin" --email="$admin_mail" --confirmed --role=Owner > /dev/null
+ ynh_hide_warnings ynh_exec_as_app RAILS_ENV=production $ld_preload bin/bundle exec rails mastodon:webpush:generate_vapid_key > vapid_key.txt
+ # Generate active record encryption
+ ynh_hide_warnings ynh_exec_as_app RAILS_ENV=production $ld_preload bin/bundle exec rails db:encryption:init > active_record_encryption.txt
popd
-# Re-generate config with vapid keys
-vapid_private_key=$(grep -oP "VAPID_PRIVATE_KEY=\K.+" "$install_dir/live/key.txt")
-ynh_app_setting_set --app="$app" --key=vapid_private_key --value="$vapid_private_key"
-vapid_public_key=$(grep -oP "VAPID_PUBLIC_KEY=\K.+" "$install_dir/live/key.txt")
-ynh_app_setting_set --app="$app" --key=vapid_public_key --value="$vapid_public_key"
-ynh_secure_remove --file="$install_dir/live/key.txt"
-ynh_delete_file_checksum --file="$config"
-ynh_add_config --template=".env.production.sample" --destination="$config"
-chmod 400 "$config"
-chown $app:$app "$config"
+# Re-generate config with vapid keys and active record encryption
+vapid_private_key=$(grep -oP "VAPID_PRIVATE_KEY=\K.+" "$install_dir/live/vapid_key.txt")
+ynh_app_setting_set --key=vapid_private_key --value="$vapid_private_key"
+vapid_public_key=$(grep -oP "VAPID_PUBLIC_KEY=\K.+" "$install_dir/live/vapid_key.txt")
+ynh_app_setting_set --key=vapid_public_key --value="$vapid_public_key"
+ynh_safe_rm "$install_dir/live/vapid_key.txt"
+active_record_encryption_deterministic_key=$(grep -oP "ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=\K.+" "$install_dir/live/active_record_encryption.txt")
+ynh_app_setting_set --key=active_record_encryption_deterministic_key --value="$active_record_encryption_deterministic_key"
+active_record_encryption_key_derivation_salt=$(grep -oP "ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=\K.+" "$install_dir/live/active_record_encryption.txt")
+ynh_app_setting_set --key=active_record_encryption_key_derivation_salt --value="$active_record_encryption_key_derivation_salt"
+active_record_encryption_primary_key=$(grep -oP "ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=\K.+" "$install_dir/live/active_record_encryption.txt")
+ynh_app_setting_set --key=active_record_encryption_primary_key --value="$active_record_encryption_primary_key"
+ynh_safe_rm "$install_dir/live/active_record_encryption.txt"
+ynh_delete_file_checksum "$config"
+ynh_config_add --template=".env.production.sample" --destination="$config"
+
+pushd "$install_dir/live"
+ ynh_hide_warnings ynh_exec_as_app RAILS_ENV=production $ld_preload bin/bundle exec rails db:migrate --quiet
+ ynh_hide_warnings ynh_exec_as_app RAILS_ENV=production $ld_preload bin/bundle exec rails db:seed --quiet
+ ynh_hide_warnings ynh_exec_as_app RAILS_ENV=production $ld_preload bin/bundle exec rails assets:precompile --quiet
+ # Create the first admin user
+ ynh_hide_warnings ynh_exec_as_app RAILS_ENV=production $ld_preload bin/tootctl accounts create "$admin" --email="$admin_mail" --confirmed --role=Owner
+ ynh_hide_warnings ynh_exec_as_app RAILS_ENV=production $ld_preload bin/tootctl accounts approve "$admin"
+popd
#=================================================
# SYSTEM CONFIGURATION
#=================================================
-ynh_script_progression --message="Adding system configurations related to $app..." --weight=1
+ynh_script_progression "Adding system configurations related to $app..."
# Create a dedicated NGINX config using the conf/nginx.conf template
-ynh_add_nginx_config
+ynh_config_add_nginx
# Create a dedicated systemd config
-ynh_add_systemd_config --service="$app-web" --template="mastodon-web.service"
+ynh_config_add_systemd --service="$app-web" --template="mastodon-web.service"
yunohost service add "$app-web" --description="$app web service"
-ynh_add_systemd_config --service="$app-sidekiq" --template="mastodon-sidekiq.service"
+ynh_config_add_systemd --service="$app-sidekiq" --template="mastodon-sidekiq.service"
yunohost service add "$app-sidekiq" --description="$app sidekiq service"
-ynh_add_systemd_config --service="$app-streaming" --template="mastodon-streaming.service"
+ynh_config_add_systemd --service="$app-streaming" --template="mastodon-streaming.service"
yunohost service add "$app-streaming" --description="$app streaming service"
# Create a cron file
-ynh_add_config --template="cron" --destination="/etc/cron.d/$app"
+ynh_config_add --template="cron" --destination="/etc/cron.d/$app"
# Use logrotate to manage application logfile(s)
mkdir -p /var/log/$app
-chown $app:$app /var/log/$app
-ynh_use_logrotate
+ynh_config_add_logrotate
#=================================================
-# GENERIC FINALIZATION
-#=================================================
# START SYSTEMD SERVICE
#=================================================
-ynh_script_progression --message="Starting all systemd services..." --weight=1
+ynh_script_progression "Starting all systemd services..."
-ynh_systemd_action --service_name=${app}-web --action="start" --log_path=/var/log/$app/$app-web.log --line_match="Listening on"
-ynh_systemd_action --service_name=${app}-sidekiq --action="start" --log_path=/var/log/$app/$app-sidekiq.log --line_match="Schedules Loaded"
-ynh_systemd_action --service_name=${app}-streaming --action="start" --log_path=/var/log/$app/$app-streaming.log --line_match="Streaming API now listening"
+ynh_systemctl --service=${app}-web --action="start" --log_path=/var/log/$app/$app-web.log --wait_until="Listening on"
+ynh_systemctl --service=${app}-sidekiq --action="start" --log_path=/var/log/$app/$app-sidekiq.log --wait_until="Schedules Loaded"
+ynh_systemctl --service=${app}-streaming --action="start" --log_path=/var/log/$app/$app-streaming.log --wait_until="Streaming API now listening"
#=================================================
# END OF SCRIPT
#=================================================
-ynh_script_progression --message="Installation of $app completed" --last
+ynh_script_progression "Installation of $app completed" \ No newline at end of file
diff --git a/scripts/remove b/scripts/remove
index f5eca20..6b978fb 100644
--- a/scripts/remove
+++ b/scripts/remove
@@ -1,57 +1,43 @@
#!/bin/bash
-#=================================================
-# GENERIC START
-#=================================================
-# IMPORT GENERIC HELPERS
-#=================================================
-
source _common.sh
source /usr/share/yunohost/helpers
#=================================================
# REMOVE SYSTEM CONFIGURATIONS
#=================================================
-# REMOVE SYSTEMD SERVICE
-#=================================================
-ynh_script_progression --message="Removing system configurations related to $app..." --weight=1
+ynh_script_progression "Removing system configurations related to $app..."
# Remove the service from the list of services known by YunoHost (added from `yunohost service add`)
-if ynh_exec_warn_less yunohost service status "$app-web" >/dev/null
-then
- ynh_script_progression --message="Removing $app-web service integration..." --weight=1
+if ynh_hide_warnings yunohost service status "$app-web" >/dev/null; then
yunohost service remove "$app-web"
fi
-if ynh_exec_warn_less yunohost service status "$app-sidekiq" >/dev/null
-then
- ynh_script_progression --message="Removing $app-sidekiq service integration..." --weight=1
+if ynh_hide_warnings yunohost service status "$app-sidekiq" >/dev/null; then
yunohost service remove "$app-sidekiq"
fi
-if ynh_exec_warn_less yunohost service status "$app-streaming" >/dev/null
-then
- ynh_script_progression --message="Removing $app-streaming service integration..." --weight=1
+if ynh_hide_warnings yunohost service status "$app-streaming" >/dev/null; then
yunohost service remove "$app-streaming"
fi
# Remove the dedicated systemd config
-ynh_remove_systemd_config --service="$app-web"
-ynh_remove_systemd_config --service="$app-sidekiq"
-ynh_remove_systemd_config --service="$app-streaming"
+ynh_config_remove_systemd "$app-web"
+ynh_config_remove_systemd "$app-sidekiq"
+ynh_config_remove_systemd "$app-streaming"
# Remove the dedicated NGINX config
-ynh_remove_nginx_config
+ynh_config_remove_nginx
# Remove a cron file
-ynh_secure_remove --file="/etc/cron.d/$app"
+ynh_safe_rm "/etc/cron.d/$app"
# Remote logrotate config
-ynh_remove_logrotate
+ynh_config_remove_logrotate
# Remove metapackage and its dependencies
-ynh_remove_ruby
-ynh_remove_nodejs
+ynh_ruby_remove
+ynh_nodejs_remove
# Remove swap
ynh_del_swap
@@ -60,4 +46,4 @@ ynh_del_swap
# END OF SCRIPT
#=================================================
-ynh_script_progression --message="Removal of $app completed" --last
+ynh_script_progression "Removal of $app completed"
diff --git a/scripts/restore b/scripts/restore
index 92a20f0..6052da2 100644
--- a/scripts/restore
+++ b/scripts/restore
@@ -1,40 +1,28 @@
#!/bin/bash
-#=================================================
-# GENERIC START
-#=================================================
-# IMPORT GENERIC HELPERS
-#=================================================
-
# Keep this path for calling _common.sh inside the execution's context of backup and restore scripts
source ../settings/scripts/_common.sh
source /usr/share/yunohost/helpers
#=================================================
-# STANDARD RESTORATION STEPS
-#=================================================
# RESTORE THE APP MAIN DIR
#=================================================
-ynh_script_progression --message="Restoring the app main directory..." --weight=1
-
-ynh_restore_file --origin_path="$install_dir"
+ynh_script_progression "Restoring the app main directory..."
-chmod 750 "$install_dir"
-chmod -R o-rwx "$install_dir"
-chown -R $app:www-data "$install_dir"
+ynh_restore "$install_dir"
#=================================================
# RESTORE THE POSTGRESQL DATABASE
#=================================================
-ynh_script_progression --message="Restoring the PostgreSQL database..." --weight=1
+ynh_script_progression "Restoring the PostgreSQL database..."
-ynh_psql_execute_as_root --sql="ALTER USER $db_user CREATEDB;"
-ynh_psql_execute_file_as_root --file="./db.sql" --database="$db_name"
+ynh_psql_db_shell <<< "ALTER USER $db_user CREATEDB;"
+ynh_psql_db_shell < "./db.sql"
#=================================================
# ADD SWAP IF NEEDED
#=================================================
-ynh_script_progression --message="Adding swap if needed..." --weight=1
+ynh_script_progression "Adding swap if needed..."
total_memory=$(ynh_get_ram --total)
swap_needed=0
@@ -44,69 +32,63 @@ if [ $total_memory -lt $memory_needed ]; then
swap_needed=$(($memory_needed - $total_memory))
fi
-ynh_script_progression --message="Adding $swap_needed Mo to swap..." --weight=1
+ynh_script_progression "Adding $swap_needed Mo to swap..."
ynh_add_swap --size=$swap_needed
#=================================================
# REINSTALL DEPENDENCIES
#=================================================
-ynh_script_progression --message="Reinstalling Ruby and NodeJS..." --weight=1
+ynh_script_progression "Reinstalling Ruby and NodeJS..."
-ynh_exec_warn_less ynh_install_ruby --ruby_version=$ruby_version
-ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$nodejs_version
+ynh_ruby_install
+ynh_nodejs_install
#=================================================
# BUILD APP
#=================================================
-ynh_script_progression --message="Building app..." --weight=1
+ynh_script_progression "Building app..."
pushd "$install_dir/live"
- ynh_use_ruby
- ynh_gem update --system
- ynh_gem install bundler --no-document
- ynh_exec_as $app $ynh_ruby_load_path $ld_preload bin/bundle install --redownload -j$(getconf _NPROCESSORS_ONLN)
+ gem update --system
+ gem install bundler --no-document
+ ynh_hide_warnings ynh_exec_as_app $ld_preload bin/bundle install --redownload -j$(getconf _NPROCESSORS_ONLN)
popd
#=================================================
# RESTORE SYSTEM CONFIGURATIONS
#=================================================
-# RESTORE THE PHP-FPM CONFIGURATION
-#=================================================
-ynh_script_progression --message="Restoring system configurations related to $app..." --weight=1
+ynh_script_progression "Restoring system configurations related to $app..."
-ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf"
+ynh_restore "/etc/nginx/conf.d/$domain.d/$app.conf"
-ynh_restore_file --origin_path="/etc/systemd/system/$app-web.service"
-ynh_restore_file --origin_path="/etc/systemd/system/$app-sidekiq.service"
-ynh_restore_file --origin_path="/etc/systemd/system/$app-streaming.service"
+ynh_restore "/etc/systemd/system/$app-web.service"
+ynh_restore "/etc/systemd/system/$app-sidekiq.service"
+ynh_restore "/etc/systemd/system/$app-streaming.service"
systemctl enable "$app-web" "$app-sidekiq" "$app-streaming" --quiet
yunohost service add "$app-web" --description="$app web service"
yunohost service add "$app-sidekiq" --description="$app sidekiq service"
yunohost service add "$app-streaming" --description="$app streaming service"
-ynh_restore_file --origin_path="/etc/cron.d/$app"
+ynh_restore "/etc/cron.d/$app"
mkdir -p /var/log/$app
-chown -R $app:$app /var/log/$app
-ynh_restore_file --origin_path="/etc/logrotate.d/$app"
+ynh_restore "/etc/logrotate.d/$app"
#=================================================
-# GENERIC FINALIZATION
-#=================================================
# RELOAD NGINX AND THE APP SERVICE
#=================================================
-ynh_script_progression --message="Reloading NGINX web server and $app's service..." --weight=1
+ynh_script_progression "Reloading NGINX web server and $app's service..."
-ynh_systemd_action --service_name=${app}-web --action="start" --log_path=/var/log/$app/$app-web.log --line_match="Listening on"
-ynh_systemd_action --service_name=${app}-sidekiq --action="start" --log_path=/var/log/$app/$app-sidekiq.log --line_match="Schedules Loaded"
-ynh_systemd_action --service_name=${app}-streaming --action="start" --log_path=/var/log/$app/$app-streaming.log --line_match="Streaming API now listening"
+ynh_systemctl --service=${app}-web --action="start" --log_path=/var/log/$app/$app-web.log --wait_until="Listening on"
+ynh_systemctl --service=${app}-sidekiq --action="start" --log_path=/var/log/$app/$app-sidekiq.log --wait_until="Schedules Loaded"
+ynh_systemctl --service=${app}-streaming --action="start" --log_path=/var/log/$app/$app-streaming.log --wait_until="Streaming API now listening"
-ynh_systemd_action --service_name=nginx --action=reload
+ynh_systemctl --service=nginx --action=reload
#=================================================
# END OF SCRIPT
#=================================================
-ynh_script_progression --message="Restoration completed for $app" --last
+ynh_script_progression "Restoration completed for $app"
diff --git a/scripts/upgrade b/scripts/upgrade
index 0bac752..53dcced 100644
--- a/scripts/upgrade
+++ b/scripts/upgrade
@@ -1,76 +1,38 @@
#!/bin/bash
-#=================================================
-# GENERIC START
-#=================================================
-# IMPORT GENERIC HELPERS
-#=================================================
-
source _common.sh
source /usr/share/yunohost/helpers
-upgrade_type=$(ynh_check_app_version_changed)
config="$install_dir/live/.env.production"
+if ynh_app_upgrading_from_version_before 4.2.8~ynh2; then
+ ynh_die "Your installation is to old to update to this version. \
+ \nPlease first manually update with 4.4.3~ynh1 with the following command: \
+ \n's\0u\0d\0o yunohost app upgrade $app -u https://github.com/YunoHost-Apps/mastodon_ynh/commit/8fb1c6c7818430e8ac49f3ae589c6575614f5e4b' \
+ \nOnce done you can upgrade to the latest version."
+fi
+
#=================================================
# STOP SYSTEMD SERVICE
#=================================================
-ynh_script_progression --message="Stopping a systemd service..." --weight=1
+ynh_script_progression "Stopping $app's systemd service..."
-if ynh_compare_current_package_version --comparison lt --version "4.2.8~ynh2"; then
- # Workaround for pre-packagingv2 versions
- ynh_systemd_action --service_name=${app}-web --action="stop" --log_path="systemd" --line_match="Goodbye"
- ynh_systemd_action --service_name=${app}-sidekiq --action="stop" --log_path="systemd" --line_match="Bye"
- ynh_systemd_action --service_name=${app}-streaming --action="stop" --log_path="systemd"
-else
- ynh_systemd_action --service_name=${app}-web --action="stop" --log_path=/var/log/$app/$app-web.log --line_match="Goodbye"
- ynh_systemd_action --service_name=${app}-sidekiq --action="stop" --log_path=/var/log/$app/$app-sidekiq.log --line_match="Bye"
- ynh_systemd_action --service_name=${app}-streaming --action="stop" --log_path=/var/log/$app/$app-streaming.log
-fi
+ynh_systemctl --service=${app}-web --action="stop" --log_path=/var/log/$app/$app-web.log --wait_until="Goodbye"
+ynh_systemctl --service=${app}-sidekiq --action="stop" --log_path=/var/log/$app/$app-sidekiq.log --wait_until="Bye"
+ynh_systemctl --service=${app}-streaming --action="stop" --log_path=/var/log/$app/$app-streaming.log
#=================================================
# ENSURE DOWNWARD COMPATIBILITY
#=================================================
-ynh_script_progression --message="Ensuring downward compatibility..." --weight=1
+ynh_script_progression "Ensuring downward compatibility..."
# Set `service` settings to support `yunohost app shell` command
-if [[ -z "${service:-}" ]]; then
- service="$app-web.service"
- ynh_app_setting_set --app="$app" --key=service --value="$service"
-fi
-# Set `redis_namespace` settings
-if [[ -z "${redis_namespace:-}" ]]; then
- redis_namespace=${app}_production
- ynh_app_setting_set --app="$app" --key=redis_namespace --value="$redis_namespace"
-fi
-
-# Remove previous added repository
-ynh_remove_extra_repo
-
-if ynh_compare_current_package_version --comparison lt --version "4.2.8~ynh2"; then
- # Rename legacy database
- if ynh_psql_database_exists --database="${app}_production"; then
- db_name=$(ynh_sanitize_dbid --db_name="$app")
- ynh_app_setting_set --app="$app" --key="db_name" --value="$db_name"
-
- # Remove the newly created db by resources, and rename legacy db
- ynh_psql_execute_as_root --sql="DROP DATABASE IF EXISTS $db_name;"
- ynh_psql_execute_as_root --sql="ALTER DATABASE ${app}_production RENAME TO $db_name;"
- fi
- # Same with user
- if ynh_psql_user_exists --user="${app}_production"; then
- db_user="$db_name"
- ynh_app_setting_set --app="$app" --key="db_user" --value="$db_user"
-
- ynh_psql_execute_as_root --sql="DROP USER IF EXISTS $db_user;"
- ynh_psql_execute_as_root --sql="ALTER USER ${app}_production RENAME $db_user;"
- fi
-fi
+ynh_app_setting_set_default --key=service --value="$app-web.service"
#=================================================
# ADD SWAP IF NEEDED
#=================================================
-ynh_script_progression --message="Adding swap if needed..." --weight=1
+ynh_script_progression "Adding swap if needed..."
total_memory=$(ynh_get_ram --total)
swap_needed=0
@@ -80,117 +42,130 @@ if [ $total_memory -lt $memory_needed ]; then
swap_needed=$(($memory_needed - $total_memory))
fi
-ynh_script_progression --message="Adding $swap_needed Mo to swap..."
+ynh_script_progression "Adding $swap_needed Mo to swap..."
ynh_add_swap --size=$swap_needed
#=================================================
# UPGRADE DEPENDENCIES
#=================================================
-ynh_script_progression --message="Upgrading Ruby and NodeJS..." --weight=1
+ynh_script_progression "Upgrading Ruby and NodeJS..."
-ynh_exec_warn_less ynh_install_ruby --ruby_version=$ruby_version
-ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$nodejs_version
+ynh_ruby_install
+ynh_nodejs_install
#=================================================
-# "REBUILD" THE APP (DEPLOY NEW SOURCES, RERUN NPM BUILD...)
-#=================================================
# DOWNLOAD, CHECK AND UNPACK SOURCE
#=================================================
+ynh_script_progression "Upgrading source files..."
-if [ "$upgrade_type" == "UPGRADE_APP" ]
-then
- ynh_script_progression --message="Upgrading source files..." --weight=1
+# Download, check integrity, uncompress and patch the source from manifest.toml
+ynh_setup_source --dest_dir="$install_dir/live" --full_replace --keep="public/system .env.production"
+# Download redis migration script
+ynh_setup_source --source_id=redis_migration --dest_dir="$install_dir/live"
- # Download Mastodon
- ynh_setup_source --dest_dir="$install_dir/live" --keep="public/system/"
-
- chmod 750 "$install_dir"
- chmod -R o-rwx "$install_dir"
- chown -R $app:www-data "$install_dir"
-fi
+chmod -R 775 "$install_dir"
+chmod o-rwx "$install_dir"
+chown -R $app:www-data "$install_dir"
#=================================================
# BUILD ASSETS
#=================================================
-ynh_script_progression --message="Building assets..." --weight=1
+ynh_script_progression "Building assets..."
pushd "$install_dir/live"
- ynh_use_ruby
- ynh_gem update --system
- ynh_gem install bundler --no-document
- ynh_exec_as $app $ynh_ruby_load_path $ld_preload bin/bundle config deployment 'true'
- ynh_exec_as $app $ynh_ruby_load_path $ld_preload bin/bundle config without 'development test'
- ynh_exec_as $app $ynh_ruby_load_path $ld_preload bin/bundle config set force_ruby_platform true --quiet
- ynh_exec_as $app $ynh_ruby_load_path $ld_preload bin/bundle install -j$(getconf _NPROCESSORS_ONLN)
- ynh_use_nodejs
- ynh_exec_as $app $ynh_node_load_PATH yarn install --pure-lockfile --production --network-timeout 600000
- ynh_exec_warn_less ynh_exec_as $app RAILS_ENV=production $ynh_ruby_load_path $ld_preload bin/bundle exec rails assets:clean
- ynh_exec_warn_less ynh_exec_as $app RAILS_ENV=production $ynh_ruby_load_path $ld_preload bin/bundle exec rails assets:precompile
+ gem update --system
+ gem install bundler --no-document
+ ynh_hide_warnings ynh_exec_as_app $ld_preload bin/bundle config deployment 'true'
+ ynh_hide_warnings ynh_exec_as_app $ld_preload bin/bundle config without 'development test'
+ ynh_hide_warnings ynh_exec_as_app $ld_preload bin/bundle config set force_ruby_platform true --quiet
+ ynh_hide_warnings ynh_exec_as_app $ld_preload bin/bundle install -j$(getconf _NPROCESSORS_ONLN)
+
+ env corepack enable
+ echo Y | ynh_hide_warnings ynh_exec_as_app yarn workspaces focus --production
+ ynh_hide_warnings ynh_exec_as_app yarn install --immutable
popd
-chown "$app:www-data" "$install_dir"
chown -R "$app:www-data" "$install_dir/live/public"
#=================================================
# REAPPLY SYSTEM CONFIGURATIONS
#=================================================
-ynh_script_progression --message="Upgrading system configurations related to $app..." --weight=1
+ynh_script_progression "Upgrading system configurations related to $app..."
-ynh_add_nginx_config
+ynh_config_add_nginx
# Create a dedicated systemd config
-ynh_add_systemd_config --service="$app-web" --template="mastodon-web.service"
+ynh_config_add_systemd --service="$app-web" --template="mastodon-web.service"
yunohost service add "$app-web" --description="$app web service"
-ynh_add_systemd_config --service="$app-sidekiq" --template="mastodon-sidekiq.service"
+ynh_config_add_systemd --service="$app-sidekiq" --template="mastodon-sidekiq.service"
yunohost service add "$app-sidekiq" --description="$app sidekiq service"
-ynh_add_systemd_config --service="$app-streaming" --template="mastodon-streaming.service"
+ynh_config_add_systemd --service="$app-streaming" --template="mastodon-streaming.service"
yunohost service add "$app-streaming" --description="$app streaming service"
-ynh_add_config --template="cron" --destination="/etc/cron.d/$app"
+ynh_config_add --template="cron" --destination="/etc/cron.d/$app"
# Use logrotate to manage app-specific logfile(s)
mkdir -p /var/log/$app
-chown $app:$app /var/log/$app
-ynh_use_logrotate --non-append
+ynh_config_add_logrotate
#=================================================
-# RECONFIGURE THE APP (UPDATE CONF, APPLY MIGRATIONS...)
-#=================================================
# UPDATE A CONFIG FILE
#=================================================
-ynh_script_progression --message="Updating a config file..." --weight=1
+ynh_script_progression "Updating a config file..."
-language="$(echo $language | head -c 2)"
+if ynh_app_upgrading_from_version_before 4.3.2~ynh1; then
+ pushd "$install_dir/live"
+
+ # Generate active record encryption
+ ynh_hide_warnings ynh_exec_as_app RAILS_ENV=production $ld_preload bin/bundle exec rails db:encryption:init > active_record_encryption.txt
+ active_record_encryption_deterministic_key=$(grep -oP "ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=\K.+" "$install_dir/live/active_record_encryption.txt")
+ ynh_app_setting_set --key=active_record_encryption_deterministic_key --value="$active_record_encryption_deterministic_key"
+ active_record_encryption_key_derivation_salt=$(grep -oP "ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=\K.+" "$install_dir/live/active_record_encryption.txt")
+ ynh_app_setting_set --key=active_record_encryption_key_derivation_salt --value="$active_record_encryption_key_derivation_salt"
+ active_record_encryption_primary_key=$(grep -oP "ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=\K.+" "$install_dir/live/active_record_encryption.txt")
+ ynh_app_setting_set --key=active_record_encryption_primary_key --value="$active_record_encryption_primary_key"
+ ynh_safe_rm "$install_dir/live/active_record_encryption.txt"
+ popd
+fi
-ynh_add_config --template=".env.production.sample" --destination="$config"
+language="$(echo $language | head -c 2)"
-chmod 400 "$config"
-chown $app:$app "$config"
+ynh_config_add --template=".env.production.sample" --destination="$config"
#=================================================
# APPLY MIGRATIONS
#=================================================
-ynh_script_progression --message="Applying migrations..." --weight=1
+ynh_script_progression "Applying migrations..."
pushd "$install_dir/live"
- ynh_use_ruby
- ynh_exec_warn_less ynh_exec_as $app RAILS_ENV=production $ynh_ruby_load_path $ld_preload bin/bundle exec rails db:migrate
- ynh_exec_warn_less ynh_exec_as $app RAILS_ENV=production $ynh_ruby_load_path $ld_preload bin/tootctl cache clear
+ ynh_hide_warnings ynh_exec_as_app RAILS_ENV=production $ld_preload bin/bundle exec rails db:migrate --quiet
+ ynh_hide_warnings ynh_exec_as_app RAILS_ENV=production $ld_preload bin/bundle exec rails assets:precompile --quiet
+
+ # Apply redis namespace migration (https://github.com/mastodon/redis_namespace_migration)
+ ynh_hide_warnings ynh_exec_as_app RAILS_ENV=production COREPACK_ENABLE_DOWNLOAD_PROMPT=0 $ld_preload bin/rails runner rename.rb
+ redis_namespace="$(ynh_app_setting_get --key=redis_namespace)"
+ if [ $redis_namespace ]; then
+ if [ ynh_app_setting_get --key=es_enabled == "true" ] && [ ynh_app_setting_get --key=es_prefix == "" ]; then
+ ynh_app_setting_set --key=es_prefix --value=$redis_namespace
+ else
+ ynh_app_setting_delete --key=redis_namespace
+ fi
+ fi
popd
#=================================================
# START SYSTEMD SERVICE
#=================================================
-ynh_script_progression --message="Starting a systemd service..." --weight=1
+ynh_script_progression "Starting $app's systemd service..."
-ynh_systemd_action --service_name=${app}-web --action="restart" --log_path=/var/log/$app/$app-web.log --line_match="Listening on"
-ynh_systemd_action --service_name=${app}-sidekiq --action="start" --log_path=/var/log/$app/$app-sidekiq.log --line_match="Schedules Loaded"
-ynh_systemd_action --service_name=${app}-streaming --action="start" --log_path=/var/log/$app/$app-streaming.log --line_match="Streaming API now listening"
+ynh_systemctl --service=${app}-web --action="restart" --log_path=/var/log/$app/$app-web.log --wait_until="Listening on"
+ynh_systemctl --service=${app}-sidekiq --action="start" --log_path=/var/log/$app/$app-sidekiq.log --wait_until="Schedules Loaded"
+ynh_systemctl --service=${app}-streaming --action="start" --log_path=/var/log/$app/$app-streaming.log --wait_until="Streaming API now listening"
#=================================================
# END OF SCRIPT
#=================================================
-ynh_script_progression --message="Upgrade of $app completed" --last
+ynh_script_progression "Upgrade of $app completed"
diff --git a/tests.toml b/tests.toml
index c1f2069..588a0db 100644
--- a/tests.toml
+++ b/tests.toml
@@ -1,3 +1,5 @@
+#:schema https://raw.githubusercontent.com/YunoHost/apps/master/schemas/tests.v1.schema.json
+
test_format = 1.0
[default]
@@ -18,9 +20,6 @@ test_format = 1.0
# -------------------------------
# Commits to test upgrade from
# -------------------------------
-
- test_upgrade_from.43504e6.name = "Upgrade from 4.2.5~ynh1"
- test_upgrade_from.43504e6.args.domain="domain.tld"
- test_upgrade_from.43504e6.args.is_public=1
- test_upgrade_from.43504e6.args.admin="john"
- test_upgrade_from.43504e6.args.language="fr_FR"
+
+ #test_upgrade_from.8102fffa52a4e3279bba9fbdafb3a0e5b1fe3e17.name = "4.2.13~ynh1"
+ test_upgrade_from.38e8436dd8489140af8921c81d9d891bfa92349e.name = "4.3.9 - Helpers v1"