From f4c5732093fa44d704df02cac6c9b027c85e8485 Mon Sep 17 00:00:00 2001 From: Tagada <36127788+Tagadda@users.noreply.github.com> Date: Thu, 22 Feb 2024 19:45:40 +0100 Subject: [PATCH 01/41] v2 --- check_process | 24 -- conf/.env.production.sample | 16 +- conf/app.src | 7 - conf/glitchsoc-sidekiq.service | 18 +- conf/glitchsoc-streaming.service | 2 +- conf/glitchsoc-web.service | 2 +- conf/nginx.conf | 2 +- doc/ADMIN.md | 32 +++ doc/ADMIN_fr.md | 30 +++ doc/DESCRIPTION.md | 2 + doc/DESCRIPTION_fr.md | 2 + doc/DISCLAIMER.md | 14 - doc/DISCLAIMER_fr.md | 14 - doc/PRE_INSTALL.md | 20 ++ doc/PRE_INSTALL_fr.md | 22 ++ manifest.json | 61 ----- manifest.toml | 92 +++++++ scripts/_common.sh | 438 ++----------------------------- scripts/backup | 23 +- scripts/install | 226 ++++------------ scripts/remove | 75 +----- scripts/restore | 131 +++------ scripts/upgrade | 309 ++++++---------------- scripts/ynh_add_swap | 93 +++++++ scripts/ynh_install_ruby__2 | 310 ++++++++++++++++++++++ tests.toml | 24 ++ 26 files changed, 844 insertions(+), 1145 deletions(-) delete mode 100644 check_process delete mode 100644 conf/app.src create mode 100644 doc/ADMIN.md create mode 100644 doc/ADMIN_fr.md delete mode 100644 doc/DISCLAIMER.md delete mode 100644 doc/DISCLAIMER_fr.md create mode 100644 doc/PRE_INSTALL.md create mode 100644 doc/PRE_INSTALL_fr.md delete mode 100644 manifest.json create mode 100644 manifest.toml create mode 100644 scripts/ynh_add_swap create mode 100644 scripts/ynh_install_ruby__2 create mode 100644 tests.toml diff --git a/check_process b/check_process deleted file mode 100644 index d6a3f64..0000000 --- a/check_process +++ /dev/null @@ -1,24 +0,0 @@ -;; Test complet - ; Manifest - domain="domain.tld" - admin="john" - language="fr_FR" - is_public=1 - ; Checks - pkg_linter=1 - setup_sub_dir=0 - setup_root=1 - setup_nourl=0 - setup_private=1 - setup_public=1 - upgrade=1 - # 2023.12.06~ynh1 - upgrade=1 from_commit=7ce2faf2e971f31f9154fc80d17ed1fa9a170ff5 - backup_restore=1 - multi_instance=0 - port_already_use=0 - change_url=0 -;;; Options -;;; Upgrade options - - diff --git a/conf/.env.production.sample b/conf/.env.production.sample index b597d2b..4bd4d52 100644 --- a/conf/.env.production.sample +++ b/conf/.env.production.sample @@ -97,22 +97,16 @@ VAPID_PUBLIC_KEY=__VAPID_PUBLIC_KEY__ # Optionally change default language DEFAULT_LOCALE=__LANGUAGE__ - # Sending mail # ------------ SMTP_SERVER=localhost SMTP_PORT=25 -#SMTP_LOGIN= -#SMTP_PASSWORD= -SMTP_FROM_ADDRESS=__ADMIN_MAIL__ -#SMTP_REPLY_TO= -#SMTP_DOMAIN= # defaults to LOCAL_DOMAIN -SMTP_DELIVERY_METHOD=sendmail # delivery method can also be smtp -SMTP_AUTH_METHOD=none -#SMTP_CA_FILE=/etc/ssl/certs/ca-certificates.crt +SMTP_LOGIN=__APP__ +SMTP_PASSWORD=__MAIL_PWD__ +SMTP_FROM_ADDRESS=Mastodon <__APP__@__DOMAIN__> +SMTP_DELIVERY_METHOD=smtp +SMTP_AUTH_METHOD=plain SMTP_OPENSSL_VERIFY_MODE=none -#SMTP_ENABLE_STARTTLS_AUTO=true -#SMTP_TLS=true # File storage (optional) # ----------------------- diff --git a/conf/app.src b/conf/app.src deleted file mode 100644 index 0baf7bb..0000000 --- a/conf/app.src +++ /dev/null @@ -1,7 +0,0 @@ -SOURCE_URL=https://github.com/glitch-soc/mastodon/archive/3341db939cd077820ad598b0445d02ab2382eaf4.tar.gz -SOURCE_SUM=abf095bbf7f879d35b3e62f3fd4f339ff99b6aac98023fcc836baccfe91a0b97 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=tar.gz -SOURCE_IN_SUBDIR=true -SOURCE_FILENAME=3341db939cd077820ad598b0445d02ab2382eaf4.tar.gz -SOURCE_EXTRACT=true diff --git a/conf/glitchsoc-sidekiq.service b/conf/glitchsoc-sidekiq.service index ce0aef8..ff72a14 100644 --- a/conf/glitchsoc-sidekiq.service +++ b/conf/glitchsoc-sidekiq.service @@ -5,7 +5,7 @@ After=network.target [Service] Type=simple User=__APP__ -WorkingDirectory=__FINALPATH__/live +WorkingDirectory=__INSTALL_DIR__/live Environment="__LD_PRELOAD__" Environment="RAILS_ENV=production" Environment="DB_POOL=25" @@ -23,17 +23,17 @@ StandardError=syslog # can't deliver mail to YunoHost users. See #30 -Tagada NoNewPrivileges=no PrivateTmp=yes -#PrivateDevices=yes -#RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK -#RestrictNamespaces=yes -#RestrictRealtime=yes +PrivateDevices=yes +RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK +RestrictNamespaces=yes +RestrictRealtime=yes DevicePolicy=closed ProtectSystem=full ProtectControlGroups=yes -#ProtectKernelModules=yes -#ProtectKernelTunables=yes -#LockPersonality=yes -#SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @setuid @swap +ProtectKernelModules=yes +ProtectKernelTunables=yes +LockPersonality=yes +SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @setuid @swap # Denying access to capabilities that should not be relevant for webapps # Doc: https://man7.org/linux/man-pages/man7/capabilities.7.html diff --git a/conf/glitchsoc-streaming.service b/conf/glitchsoc-streaming.service index 4122b02..a5fcfa0 100644 --- a/conf/glitchsoc-streaming.service +++ b/conf/glitchsoc-streaming.service @@ -5,7 +5,7 @@ After=network.target [Service] Type=simple User=__APP__ -WorkingDirectory=__FINALPATH__/live +WorkingDirectory=__INSTALL_DIR__/live Environment="NODE_ENV=production" Environment="PORT=__PORT_STREAM__" Environment="STREAMING_CLUSTER_NUM=1" diff --git a/conf/glitchsoc-web.service b/conf/glitchsoc-web.service index 42f5135..2b615dd 100644 --- a/conf/glitchsoc-web.service +++ b/conf/glitchsoc-web.service @@ -5,7 +5,7 @@ After=network.target [Service] Type=simple User=__APP__ -WorkingDirectory=__FINALPATH__/live +WorkingDirectory=__INSTALL_DIR__/live Environment="RAILS_ENV=production" Environment="PORT=__PORT_WEB__" diff --git a/conf/nginx.conf b/conf/nginx.conf index 4b1f76b..09e4a84 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,6 +1,6 @@ client_max_body_size 99m; -root __FINALPATH__/live/public; +root __INSTALL_DIR__/live/public; location / { diff --git a/doc/ADMIN.md b/doc/ADMIN.md new file mode 100644 index 0000000..54d9527 --- /dev/null +++ b/doc/ADMIN.md @@ -0,0 +1,32 @@ +## Administrate with tooctl + +`$ (cd /var/www/glitchsoc/live && sudo -u glitchsoc RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl --help)` + +## Update + +**`screen` (or `tmux`) can be used to make sure your session is not interrupted in case of connection problems.** +See [tutorial](https://www.howtogeek.com/662422/how-to-use-linuxs-screen-command/) for more background information. + +``` +$ screen +$ sudo yunohost app upgrade glitchsoc +``` + +## Backups + +First of all: Glitch-Soc uses a local cache to save media (such as posted images, videos etc.). This cache can grow huge. +You could consider cleaning up your local cache first as otherwise your backup will be very big and you might run out of disk space: + +To check your space usage, on a command line run: + +`$ sudo cd /var/www/glitchsoc/live && sudo -u glitchsoc RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl media usage` + +If your cache is too big to backup, you can run the following command to clean up Attachments (the first line). Substitute X by the number of days you want to keep, e.g. 1 day. All older images will be deleted but will be refetched from the original server if necessary. + +First dry-run to see how much space is freed up (without actually removing): + +`$ sudo cd /var/www/glitchsoc/live && sudo -u glitchsoc RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl media remove --days=X --dry-run` + +If all looks good commit the cleanup: + +`$ sudo cd /var/www/glitchsoc/live && sudo -u glitchsoc RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl media remove --days=X ` diff --git a/doc/ADMIN_fr.md b/doc/ADMIN_fr.md new file mode 100644 index 0000000..cb9f259 --- /dev/null +++ b/doc/ADMIN_fr.md @@ -0,0 +1,30 @@ +## Administration avec tooctl + +`$ cd /var/www/glitchsoc/live && sudo -u glitchsoc RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl --help` + +## Mise à jour + +**`screen` (ou `tmux`) peut être utilisé pour vous assurer que votre session n'est pas interrompue en cas de problème de connection.** +Consultez ce [tutoriel](https://www.howtogeek.com/662422/how-to-use-linuxs-screen-command/) pour plus de détails. + +``` +$ screen +$ sudo yunohost app upgrade glitchsoc +``` + +## Sauvegardes + +Tout d'abord : Glitch-Soc utilise un cache local pour sauvegarder les médias (comme les images, vidéos, etc). Ce cache peut devenir énorme. +Vous devriez réfléchir à vider votre cache local avant de faire une sauvegarde, qui pourrait être énorme et vous pourriez manquer d'espace de stockage. + +Pour vérifier l'utilisation du stockage, en ligne de commande utilisez : + +`$ sudo cd /var/www/glitchsoc/live && sudo -u glitchsoc RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl media usage` + +Si le cache est trop gros pour être sauvegardé, vous pouvez lancer la commande suivante pour en supprimer les médias attachés. Changez `X` par le nombre de cache à conserver, par ex. 1 jour. Tous les médias plus anciens seront supprimés, mais ils pourront être rechargé du serveur d'origine si nécessaire. + +En premier faite un essai à blanc pour voir combien de place sera libérée (sans rien supprimer): +`$ sudo cd /var/www/glitchsoc/live && sudo -u glitchsoc RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl media remove --days=X --dry-run` + +Si cela semble bon, effectuez le nettoyage : +`$ sudo cd /var/www/glitchsoc/live && sudo -u glitchsoc RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl media remove --days=X ` diff --git a/doc/DESCRIPTION.md b/doc/DESCRIPTION.md index 908730c..0c487c8 100644 --- a/doc/DESCRIPTION.md +++ b/doc/DESCRIPTION.md @@ -1,5 +1,7 @@ `glitch-soc` is a friendly [fork](https://en.wikipedia.org/wiki/Fork_(software_development)) of the open-source social media software [Mastodon](https://joinmastodon.org/), with the aim of providing additional features at the risk of potentially less stable software. +⚠️ `glitch-soc` is beta software, and under active development. Use at your own risk! + ### What's different from Mastodon? `glitch-soc` adds a number of experimental features to Mastodon, such as: diff --git a/doc/DESCRIPTION_fr.md b/doc/DESCRIPTION_fr.md index a1c774a..83c21e0 100644 --- a/doc/DESCRIPTION_fr.md +++ b/doc/DESCRIPTION_fr.md @@ -1,5 +1,7 @@ `glitch-soc` est une [scission](https://fr.wikipedia.org/wiki/Fork_(d%C3%A9veloppement_logiciel)) sympa du logiciel de réseau social libre [Mastodon](https://joinmastodon.org/), avec comme objectif de fournir des fonctionnalités supplémentaires, au risque d'un logiciel un peu moins stable. +⚠️ `glitch-soc` est en constant développement, fournis avec les dernières fonctionnalités (incluant les derniers bugs). + ### Quelles sont les différences avec Mastodon? `glitch-soc` ajoute de nombreuses fonctionnalitées expérimentals, comme : diff --git a/doc/DISCLAIMER.md b/doc/DISCLAIMER.md deleted file mode 100644 index 80153db..0000000 --- a/doc/DISCLAIMER.md +++ /dev/null @@ -1,14 +0,0 @@ -⚠️ Glitch-Soc is beta software, and under active development. Use at your own risk! - -### Install - -* This app require a dedicated domain or subdomain. -* The user choosen during the installation is created in Glitch-Soc with admin rights. - -LDAP authentication and SSO are enabled. All YunoHost users can authenticate. - -We invite you to block remote malicious instances from the administration interface. You can also add text on your home page. - -### Known issues - -* When logged in with SSO, log-out from YunoHost's portal don't log-out from Glitch-Soc. See https://github.com/YunoHost/issues/issues/501 diff --git a/doc/DISCLAIMER_fr.md b/doc/DISCLAIMER_fr.md deleted file mode 100644 index 49433c3..0000000 --- a/doc/DISCLAIMER_fr.md +++ /dev/null @@ -1,14 +0,0 @@ -Glitch-Soc est en constant développement, fournis avec les dernières fonctionnalités (incluant les derniers bugs). - -### Installation - -* L'application a besoin d'un domaine dédié. -* L'utilisateurice choisie lors de l'installation sera administrateurice de l'instance. Il est possible d'en ajouter d'autre depuis l'application. - -L'authentification par LDAP et le Single-Sign-On sont activés pour les utilisateurices YunoHost. - -Nous vous invitons à bloquer les instances malveillantes depuis l'interface d'administration. Vous pouvez également ajouter du texte sur votre page d'accueil. - -### Problèmes connus - -* En se connectant via le SSO, se déconnecter depuis le portail YunoHost ne vous déconnecte pas de Glitch-Soc. Voir https://github.com/YunoHost/issues/issues/501 diff --git a/doc/PRE_INSTALL.md b/doc/PRE_INSTALL.md new file mode 100644 index 0000000..ed7e17c --- /dev/null +++ b/doc/PRE_INSTALL.md @@ -0,0 +1,20 @@ +## Important points to read before installing + +1. **Glitch-Soc** require a dedicated **root domain**, eg. glitchsoc.domain.tld +1. You can't change the domain once installed. +1. The user choosen during the installation is automatically created in Glitch-Soc 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 Glitch-Soc, 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. + +## Using *screen* in case of disconnect + +``` +$ sudo apt-get install screen +$ screen +$ sudo yunohost app install https://github.com/YunoHost-Apps/glitchsoc_ynh.git +``` +Recover after disconnect: +``` +$ screen -d +$ screen -r +``` diff --git a/doc/PRE_INSTALL_fr.md b/doc/PRE_INSTALL_fr.md new file mode 100644 index 0000000..8ed9e10 --- /dev/null +++ b/doc/PRE_INSTALL_fr.md @@ -0,0 +1,22 @@ +## Points importants à lire avant l'installation + +1. **Glitch-Soc** nécessite un **nom de domaine** dédié, par exemple : glitchsoc.domain.tld +1. Il est impossible de changer le nom de domaine après l'installation. +1. L'utilisateur sélectionné pendant l'installation sera créé automatiquement dans Glitch-Soc avec des droits d'administration. +1. À la fin de l'installation, un mail est envoyé à cet utilisateur avec un mot de passe généré automatiquement. +1. Pour que votre instance Glitch-Soc reste privée, il est important de fermer les inscriptions. Nous vous invitons à bloquer les instances distantes indésirables depuis l'interface d'administration. Vous pouvez également ajouter un texte sur votre page d'accueil dans l'administration. + +## Utilisation de *screen* en cas de déconnexion + +L'installation de Glitch-Soc peut être longue, selon les performances du serveur. Pour éviter que le processus soit interrompu par une déconnexion, on peut utiliser `screen`. + +``` +$ sudo apt-get install screen +$ screen +$ sudo yunohost app install glitchsoc +``` +Récupérer l'installation après une deconnection : +``` +$ screen -d +$ screen -r +``` diff --git a/manifest.json b/manifest.json deleted file mode 100644 index e5e1543..0000000 --- a/manifest.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "Glitch-Soc", - "id": "glitchsoc", - "packaging_format": 1, - "description": { - "en": "Libre and federated social network, fork of Mastodon", - "fr": "Réseau social libre et fédéré, scission de Mastodon" - }, - "version": "2024.03.20~ynh1", - "url": "https://github.com/glitch-soc/mastodon", - "upstream": { - "license": "AGPL-3.0-or-later", - "website": "https://glitch-soc.github.io/docs/", - "code": "https://github.com/glitch-soc/mastodon" - }, - "license": "AGPL-3.0-or-later", - "maintainer": { - "name": "Tagada" - }, - "requirements": { - "yunohost": ">= 4.3.0" - }, - "multi_instance": true, - "services": [ - "nginx" - ], - "arguments": { - "install": [ - { - "name": "domain", - "type": "domain" - }, - { - "name": "admin", - "type": "user" - }, - { - "name": "is_public", - "type": "boolean", - "help": { - "en": "Needed for federation.", - "fr": "Nécessaire pour la fédération." - }, - "default": true - }, - { - "name": "language", - "type": "string", - "ask": { - "en": "Choose the application language", - "fr": "Choisissez la langue de l'application" - }, - "choices": [ - "en_EN", - "fr_FR" - ], - "default": "fr_FR" - } - ] - } -} diff --git a/manifest.toml b/manifest.toml new file mode 100644 index 0000000..e455548 --- /dev/null +++ b/manifest.toml @@ -0,0 +1,92 @@ +packaging_format = 2 + +id = "glitchsoc" +name = "Glitch-Soc" +description.en = "Libre and federated social network, fork of Mastodon" +description.fr = "Réseau social libre et fédéré, scission de Mastodon" + +version = "2024.03.20~ynh1" + +maintainers = ["Tagada"] + +[upstream] +license = "AGPL-3.0-or-later" +website = "https://glitch-soc.github.io/docs/" +code = "https://github.com/glitch-soc/mastodon" +cpe = "???" # XXX: No CPE yet... The CPE may be obtained by searching here: https://nvd.nist.gov/products/cpe/search +fund = "???" # XXX: Nothing yet... + +[integration] +yunohost = ">= 11.1" +architectures = "all" +multi_instance = true +ldap = true +sso = true +disk = "2G" +ram.build = "4G" +ram.runtime = "1G" + +[install] + [install.domain] + # this is a generic question - ask strings are automatically handled by Yunohost's core + type = "domain" + full_domain = true + + [install.admin] + # this is a generic question - ask strings are automatically handled by Yunohost's core + type = "user" + + [install.init_main_permission] + help.en = "visitors group is needed for federation." + help.fr = "Le groupe visitors est nécessaire pour la fédération." + type = "group" + default = "visitors" + + [install.init_api_permission] + help.en = "visitors group is needed to be able to use thrid party clients." + help.fr = "Le groupe visitors est nécessaire pour pouvoir utiliser des clients tiers." + type = "group" + default = "visitors" + + [install.language] + ask.en = "Choose the application language" + ask.fr = "Choisissez la langue de l'application" + type = "string" + choices = ["en_EN", "fr_FR"] + default = "fr_FR" + +[resources] + [resources.sources.main] + url = "https://github.com/glitch-soc/mastodon/archive/3341db939cd077820ad598b0445d02ab2382eaf4.tar.gz" + sha256 = "abf095bbf7f879d35b3e62f3fd4f339ff99b6aac98023fcc836baccfe91a0b97" + + autoupdate.strategy = "latest_github_commit" + + [resources.system_user] + allow_email = true + + [resources.install_dir] + + [resources.permissions] + main.url = "/" + + api.url = "/api" + api.allowed = "visitors" + api.auth_header = false + api.show_tile = false + api.protected = true + + [resources.ports] + web.default = 3000 + stream.default = 4000 + + [resources.apt] + packages = "imagemagick, ffmpeg, libpq-dev, libxml2-dev, libxslt1-dev, file, 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-server, redis-tools, 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" + + [resources.database] + type = "postgresql" diff --git a/scripts/_common.sh b/scripts/_common.sh index f39b044..21339ce 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -4,36 +4,29 @@ # COMMON VARIABLES #================================================= -# dependencies used by the app -pkg_dependencies="imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file 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 libgdbm3|libgdbm6 libgdbm-dev redis-server redis-tools postgresql postgresql-contrib libidn11-dev libicu-dev libjemalloc-dev curl apt-transport-https" - MEMORY_NEEDED="2560" RUBY_VERSION="3.2.3" NODEJS_VERSION="20" -# Workaround for Mastodon on Bullseye +# Workaround for Mastodon on Bullseye and later # See https://github.com/mastodon/mastodon/issues/15751#issuecomment-873594463 -if [ "$(lsb_release --codename --short)" = "bullseye" ]; then - case $YNH_ARCH in - amd64) - arch="x86_64" - ;; - arm64) - arch="aarch64" - ;; - armel|armhf) - arch="arm" - ;; - i386) - arch="i386" - ;; - esac - ld_preload="LD_PRELOAD=/usr/lib/$arch-linux-gnu/libjemalloc.so" -else - ld_preload="" -fi +case $YNH_ARCH in + amd64) + arch="x86_64" + ;; + arm64) + arch="aarch64" + ;; + armel|armhf) + arch="arm" + ;; + i386) + arch="i386" + ;; +esac +ld_preload="LD_PRELOAD=/usr/lib/$arch-linux-gnu/libjemalloc.so" #================================================= # PERSONAL HELPERS @@ -43,405 +36,6 @@ fi # EXPERIMENTAL HELPERS #================================================= -# Add swap -# -# usage: ynh_add_swap --size=SWAP in Mb -# | arg: -s, --size= - Amount of SWAP to add in Mb. -ynh_add_swap () { - # Declare an array to define the options of this helper. - declare -Ar args_array=( [s]=size= ) - local size - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - - local swap_max_size=$(( $size * 1024 )) - - local free_space=$(df --output=avail / | sed 1d) - # Because we don't want to fill the disk with a swap file, divide by 2 the available space. - local usable_space=$(( $free_space / 2 )) - - SD_CARD_CAN_SWAP=${SD_CARD_CAN_SWAP:-0} - - # Swap on SD card only if it's is specified - if ynh_is_main_device_a_sd_card && [ "$SD_CARD_CAN_SWAP" == "0" ] - then - ynh_print_warn --message="The main mountpoint of your system '/' is on an SD card, swap will not be added to prevent some damage of this one, but that can cause troubles for the app $app. If you still want activate the swap, you can relaunch the command preceded by 'SD_CARD_CAN_SWAP=1'" - return - fi - - # Compare the available space with the size of the swap. - # And set a acceptable size from the request - if [ $usable_space -ge $swap_max_size ] - then - local swap_size=$swap_max_size - elif [ $usable_space -ge $(( $swap_max_size / 2 )) ] - then - local swap_size=$(( $swap_max_size / 2 )) - elif [ $usable_space -ge $(( $swap_max_size / 3 )) ] - then - local swap_size=$(( $swap_max_size / 3 )) - elif [ $usable_space -ge $(( $swap_max_size / 4 )) ] - then - local swap_size=$(( $swap_max_size / 4 )) - else - echo "Not enough space left for a swap file" >&2 - local swap_size=0 - fi - - # If there's enough space for a swap, and no existing swap here - if [ $swap_size -ne 0 ] && [ ! -e /swap_$app ] - then - # Preallocate space for the swap file, fallocate may sometime not be used, use dd instead in this case - if ! fallocate -l ${swap_size}K /swap_$app - then - dd if=/dev/zero of=/swap_$app bs=1024 count=${swap_size} - fi - chmod 0600 /swap_$app - # Create the swap - mkswap /swap_$app - # And activate it - swapon /swap_$app - # Then add an entry in fstab to load this swap at each boot. - echo -e "/swap_$app swap swap defaults 0 0 #Swap added by $app" >> /etc/fstab - fi -} - -ynh_del_swap () { - # If there a swap at this place - if [ -e /swap_$app ] - then - # Clean the fstab - sed -i "/#Swap added by $app/d" /etc/fstab - # Desactive the swap file - swapoff /swap_$app - # And remove it - rm /swap_$app - fi -} - -# Check if the device of the main mountpoint "/" is an SD card -# -# [internal] -# -# return 0 if it's an SD card, else 1 -ynh_is_main_device_a_sd_card () { - local main_device=$(lsblk --output PKNAME --noheadings $(findmnt / --nofsroot --uniq --output source --noheadings --first-only)) - - if echo $main_device | grep --quiet "mmc" && [ $(tail -n1 /sys/block/$main_device/queue/rotational) == "0" ] - then - return 0 - else - return 1 - fi -} - #================================================= # FUTURE OFFICIAL HELPERS #================================================= - -# ynh_install_ruby__2 -ynh_ruby_try_bash_extension() { - if [ -x src/configure ]; then - src/configure && make -C src || { - ynh_print_info --message="Optional bash extension failed to build, but things will still work normally." - } - fi -} - -rbenv_install_dir="/opt/rbenv" -ruby_version_path="$rbenv_install_dir/versions" -# RBENV_ROOT is the directory of rbenv, it needs to be loaded as a environment variable. -export RBENV_ROOT="$rbenv_install_dir" -export rbenv_root="$rbenv_install_dir" - -# Load the version of Ruby for an app, and set variables. -# -# ynh_use_ruby has to be used in any app scripts before using Ruby for the first time. -# This helper will provide alias and variables to use in your scripts. -# -# To use gem or Ruby, use the alias `ynh_gem` and `ynh_ruby` -# Those alias will use the correct version installed for the app -# For example: use `ynh_gem install` instead of `gem install` -# -# With `sudo` or `ynh_exec_as`, use instead the fallback variables `$ynh_gem` and `$ynh_ruby` -# And propagate $PATH to sudo with $ynh_ruby_load_path -# Exemple: `ynh_exec_as $app $ynh_ruby_load_path $ynh_gem install` -# -# $PATH contains the path of the requested version of Ruby. -# However, $PATH is duplicated into $ruby_path to outlast any manipulation of $PATH -# You can use the variable `$ynh_ruby_load_path` to quickly load your Ruby version -# in $PATH for an usage into a separate script. -# Exemple: $ynh_ruby_load_path $final_path/script_that_use_gem.sh` -# -# -# Finally, to start a Ruby service with the correct version, 2 solutions -# Either the app is dependent of Ruby or gem, but does not called it directly. -# In such situation, you need to load PATH -# `Environment="__YNH_RUBY_LOAD_ENV_PATH__"` -# `ExecStart=__FINALPATH__/my_app` -# You will replace __YNH_RUBY_LOAD_ENV_PATH__ with $ynh_ruby_load_path -# -# Or Ruby start the app directly, then you don't need to load the PATH variable -# `ExecStart=__YNH_RUBY__ my_app run` -# You will replace __YNH_RUBY__ with $ynh_ruby -# -# -# one other variable is also available -# - $ruby_path: The absolute path to Ruby binaries for the chosen version. -# -# usage: ynh_use_ruby -# -# Requires YunoHost version 3.2.2 or higher. -ynh_use_ruby () { - ruby_version=$(ynh_app_setting_get --app=$app --key=ruby_version) - - # Get the absolute path of this version of Ruby - ruby_path="$ruby_version_path/$YNH_APP_INSTANCE_NAME/bin" - - # Allow alias to be used into bash script - shopt -s expand_aliases - - # Create an alias for the specific version of Ruby and a variable as fallback - ynh_ruby="$ruby_path/ruby" - alias ynh_ruby="$ynh_ruby" - # And gem - ynh_gem="$ruby_path/gem" - alias ynh_gem="$ynh_gem" - - # Load the path of this version of Ruby in $PATH - if [[ :$PATH: != *":$ruby_path"* ]]; then - PATH="$ruby_path:$PATH" - fi - # Create an alias to easily load the PATH - ynh_ruby_load_path="PATH=$PATH" - - # Sets the local application-specific Ruby version - pushd $final_path - $rbenv_install_dir/bin/rbenv local $ruby_version - popd -} - -# Install a specific version of Ruby -# -# ynh_install_ruby will install the version of Ruby provided as argument by using rbenv. -# -# This helper creates a /etc/profile.d/rbenv.sh that configures PATH environment for rbenv -# for every LOGIN user, hence your user must have a defined shell (as opposed to /usr/sbin/nologin) -# -# Don't forget to execute ruby-dependent command in a login environment -# (e.g. sudo --login option) -# When not possible (e.g. in systemd service definition), please use direct path -# to rbenv shims (e.g. $RBENV_ROOT/shims/bundle) -# -# usage: ynh_install_ruby --ruby_version=ruby_version -# | arg: -v, --ruby_version= - Version of ruby to install. -# -# Requires YunoHost version 3.2.2 or higher. -ynh_install_ruby () { - # Declare an array to define the options of this helper. - local legacy_args=v - local -A args_array=( [v]=ruby_version= ) - local ruby_version - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - - # Load rbenv path in PATH - local CLEAR_PATH="$rbenv_install_dir/bin:$PATH" - - # Remove /usr/local/bin in PATH in case of Ruby prior installation - PATH=$(echo $CLEAR_PATH | sed 's@/usr/local/bin:@@') - - # Move an existing Ruby binary, to avoid to block rbenv - test -x /usr/bin/ruby && mv /usr/bin/ruby /usr/bin/ruby_rbenv - - # Install or update rbenv - rbenv="$(command -v rbenv $rbenv_install_dir/bin/rbenv | grep "$rbenv_install_dir/bin/rbenv" | head -1)" - if [ -n "$rbenv" ]; then - ynh_print_info --message="rbenv already seems installed in \`$rbenv'." - pushd "${rbenv%/*/*}" - if git remote -v 2>/dev/null | grep "https://github.com/rbenv/rbenv.git"; then - ynh_print_info --message="Trying to update with git..." - git pull -q --tags origin master - ynh_ruby_try_bash_extension - else - ynh_print_info --message="Reinstalling rbenv with git..." - cd .. - ynh_secure_remove --file=$rbenv_install_dir - mkdir -p $rbenv_install_dir - cd $rbenv_install_dir - git init -q - git remote add -f -t master origin https://github.com/rbenv/rbenv.git > /dev/null 2>&1 - git checkout -q -b master origin/master - ynh_ruby_try_bash_extension - rbenv=$rbenv_install_dir/bin/rbenv - fi - popd - else - ynh_print_info --message="Installing rbenv with git..." - mkdir -p $rbenv_install_dir - pushd $rbenv_install_dir - git init -q - git remote add -f -t master origin https://github.com/rbenv/rbenv.git > /dev/null 2>&1 - git checkout -q -b master origin/master - ynh_ruby_try_bash_extension - rbenv=$rbenv_install_dir/bin/rbenv - popd - fi - - ruby_build="$(command -v "$rbenv_install_dir"/plugins/*/bin/rbenv-install rbenv-install | head -1)" - if [ -n "$ruby_build" ]; then - ynh_print_info --message="\`rbenv install' command already available in \`$ruby_build'." - pushd "${ruby_build%/*/*}" - if git remote -v 2>/dev/null | grep "https://github.com/rbenv/ruby-build.git"; then - ynh_print_info --message="Trying to update rbenv with git..." - git pull -q origin master - fi - popd - else - ynh_print_info --message="Installing ruby-build with git..." - mkdir -p "${rbenv_install_dir}/plugins" - git clone -q https://github.com/rbenv/ruby-build.git "${rbenv_install_dir}/plugins/ruby-build" - fi - - rbenv_alias="$(command -v "$rbenv_install_dir"/plugins/*/bin/rbenv-alias rbenv-alias | head -1)" - if [ -n "$rbenv_alias" ]; then - ynh_print_info --message="\`rbenv alias' command already available in \`$rbenv_alias'." - pushd "${rbenv_alias%/*/*}" - if git remote -v 2>/dev/null | grep "https://github.com/tpope/rbenv-aliases.git"; then - ynh_print_info --message="Trying to update rbenv-aliases with git..." - git pull -q origin master - fi - popd - else - ynh_print_info --message="Installing rbenv-aliases with git..." - mkdir -p "${rbenv_install_dir}/plugins" - git clone -q https://github.com/tpope/rbenv-aliases.git "${rbenv_install_dir}/plugins/rbenv-aliase" - fi - - rbenv_latest="$(command -v "$rbenv_install_dir"/plugins/*/bin/rbenv-latest rbenv-latest | head -1)" - if [ -n "$rbenv_latest" ]; then - ynh_print_info --message="\`rbenv latest' command already available in \`$rbenv_latest'." - pushd "${rbenv_latest%/*/*}" - if git remote -v 2>/dev/null | grep "https://github.com/momo-lab/xxenv-latest.git"; then - ynh_print_info --message="Trying to update xxenv-latest with git..." - git pull -q origin master - fi - popd - else - ynh_print_info --message="Installing xxenv-latest with git..." - mkdir -p "${rbenv_install_dir}/plugins" - git clone -q https://github.com/momo-lab/xxenv-latest.git "${rbenv_install_dir}/plugins/xxenv-latest" - fi - - # Enable caching - mkdir -p "${rbenv_install_dir}/cache" - - # Create shims directory if needed - mkdir -p "${rbenv_install_dir}/shims" - - # Restore /usr/local/bin in PATH - PATH=$CLEAR_PATH - - # And replace the old Ruby binary - test -x /usr/bin/ruby_rbenv && mv /usr/bin/ruby_rbenv /usr/bin/ruby - - # Install the requested version of Ruby - local final_ruby_version=$(rbenv latest --print $ruby_version) - if ! [ -n "$final_ruby_version" ]; then - final_ruby_version=$ruby_version - fi - ynh_print_info --message="Installing Ruby-$final_ruby_version" - CONFIGURE_OPTS="--disable-install-doc --with-jemalloc" MAKE_OPTS="-j2" rbenv install --skip-existing $final_ruby_version > /dev/null 2>&1 - - # Store ruby_version into the config of this app - ynh_app_setting_set --app=$YNH_APP_INSTANCE_NAME --key=ruby_version --value=$final_ruby_version - - # Remove app virtualenv - if `rbenv alias --list | grep --quiet "$YNH_APP_INSTANCE_NAME " 1>/dev/null 2>&1` - then - rbenv alias $YNH_APP_INSTANCE_NAME --remove - fi - - # Create app virtualenv - rbenv alias $YNH_APP_INSTANCE_NAME $final_ruby_version - - # Cleanup Ruby versions - ynh_cleanup_ruby - - # Set environment for Ruby users - echo "#rbenv -export RBENV_ROOT=$rbenv_install_dir -export PATH=\"$rbenv_install_dir/bin:$PATH\" -eval \"\$(rbenv init -)\" -#rbenv" > /etc/profile.d/rbenv.sh - - # Load the environment - eval "$(rbenv init -)" -} - -# Remove the version of Ruby used by the app. -# -# This helper will also cleanup Ruby versions -# -# usage: ynh_remove_ruby -ynh_remove_ruby () { - local ruby_version=$(ynh_app_setting_get --app=$YNH_APP_INSTANCE_NAME --key=ruby_version) - - # Load rbenv path in PATH - local CLEAR_PATH="$rbenv_install_dir/bin:$PATH" - - # Remove /usr/local/bin in PATH in case of Ruby prior installation - PATH=$(echo $CLEAR_PATH | sed 's@/usr/local/bin:@@') - - rbenv alias $YNH_APP_INSTANCE_NAME --remove - - # Remove the line for this app - ynh_app_setting_delete --app=$YNH_APP_INSTANCE_NAME --key=ruby_version - - # Cleanup Ruby versions - ynh_cleanup_ruby -} - -# Remove no more needed versions of Ruby used by the app. -# -# This helper will check what Ruby version are no more required, -# and uninstall them -# If no app uses Ruby, rbenv will be also removed. -# -# usage: ynh_cleanup_ruby -ynh_cleanup_ruby () { - - # List required Ruby versions - local installed_apps=$(yunohost app list | grep -oP 'id: \K.*$') - local required_ruby_versions="" - for installed_app in $installed_apps - do - local installed_app_ruby_version=$(ynh_app_setting_get --app=$installed_app --key="ruby_version") - if [[ $installed_app_ruby_version ]] - then - required_ruby_versions="${installed_app_ruby_version}\n${required_ruby_versions}" - fi - done - - # Remove no more needed Ruby versions - local installed_ruby_versions=$(rbenv versions --bare --skip-aliases | grep -Ev '/') - for installed_ruby_version in $installed_ruby_versions - do - if ! `echo ${required_ruby_versions} | grep "${installed_ruby_version}" 1>/dev/null 2>&1` - then - ynh_print_info --message="Removing of Ruby-$installed_ruby_version" - $rbenv_install_dir/bin/rbenv uninstall --force $installed_ruby_version - fi - done - - # If none Ruby version is required - if [[ ! $required_ruby_versions ]] - then - # Remove rbenv environment configuration - ynh_print_info --message="Removing of rbenv-$rbenv_version" - ynh_secure_remove --file="$rbenv_install_dir" - ynh_secure_remove --file="/etc/profile.d/rbenv.sh" - fi -} - - diff --git a/scripts/backup b/scripts/backup index 2a64b32..7df8f50 100644 --- a/scripts/backup +++ b/scripts/backup @@ -10,27 +10,6 @@ source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers -#================================================= -# MANAGE SCRIPT FAILURE -#================================================= - -ynh_clean_setup () { - ynh_clean_check_starting -} -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - -#================================================= -# LOAD SETTINGS -#================================================= -ynh_print_info --message="Loading installation settings..." - -app=$YNH_APP_INSTANCE_NAME - -final_path=$(ynh_app_setting_get --app=$app --key=final_path) -domain=$(ynh_app_setting_get --app=$app --key=domain) -db_name=$(ynh_app_setting_get --app=$app --key=db_name) - #================================================= # DECLARE DATA AND CONF FILES TO BACKUP #================================================= @@ -40,7 +19,7 @@ ynh_print_info --message="Declaring files to be backed up..." # BACKUP THE APP MAIN DIR #================================================= -ynh_backup --src_path="$final_path" +ynh_backup --src_path="$install_dir" #================================================= # BACKUP THE NGINX CONFIGURATION diff --git a/scripts/install b/scripts/install index a31966d..77a109a 100644 --- a/scripts/install +++ b/scripts/install @@ -7,31 +7,13 @@ #================================================= source _common.sh +source ynh_install_ruby__2 +source ynh_add_swap source /usr/share/yunohost/helpers -#================================================= -# MANAGE SCRIPT FAILURE -#================================================= - -ynh_clean_setup () { - ynh_clean_check_starting -} -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - -#================================================= -# RETRIEVE ARGUMENTS FROM THE MANIFEST -#================================================= - -domain=$YNH_APP_ARG_DOMAIN -path_url="/" -admin=$YNH_APP_ARG_ADMIN -is_public=$YNH_APP_ARG_IS_PUBLIC -language=$YNH_APP_ARG_LANGUAGE admin_mail=$(ynh_user_get_info $admin 'mail') -app=$YNH_APP_INSTANCE_NAME - +# Initialize config_panel settings :< max_toot_chars="500" max_pinned_toots="5" max_bio_chars="500" @@ -43,26 +25,6 @@ max_image_size="8388608" max_video_size="41943040" max_emoji_size="51200" max_remote_emoji_size="204800" - -#================================================= -# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS -#================================================= -ynh_script_progression --message="Validating installation parameters..." --weight=1 - -final_path=/var/www/$app -test ! -e "$final_path" || ynh_die --message="This path already contains a folder" - -# Register (book) web path -ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url - -#================================================= -# STORE SETTINGS FROM MANIFEST -#================================================= -ynh_script_progression --message="Storing installation settings..." --weight=1 - -ynh_app_setting_set --app=$app --key=domain --value=$domain -ynh_app_setting_set --app=$app --key=path --value=$path_url -ynh_app_setting_set --app=$app --key=admin --value=$admin ynh_app_setting_set --app=$app --key=language --value=$language ynh_app_setting_set --app=$app --key=max_toot_chars --value=$max_toot_chars ynh_app_setting_set --app=$app --key=max_pinned_toots --value=$max_pinned_toots @@ -76,12 +38,8 @@ ynh_app_setting_set --app=$app --key=max_video_size --value=$max_video_size ynh_app_setting_set --app=$app --key=max_emoji_size --value=$max_emoji_size ynh_app_setting_set --app=$app --key=max_remote_emoji_size --value=$max_remote_emoji_size -#================================================= -# STANDARD MODIFICATIONS -#================================================= -# FIND AND OPEN A PORT -#================================================= -ynh_script_progression --message="Finding an available port..." --weight=1 +# Set `service` settings to support `yunohost app shell` command +ynh_app_setting_set --app="$app" --key=service --value="$app-web.service" # Find an available port port_web=$(ynh_find_port --port=3000) @@ -91,61 +49,25 @@ port_stream=$(ynh_find_port --port=4000) ynh_app_setting_set --app=$app --key=port_stream --value=$port_stream #================================================= -# INSTALL DEPENDENCIES -#================================================= -ynh_script_progression --message="Installing dependencies..." --weight=10 - -ynh_exec_warn_less ynh_install_app_dependencies $pkg_dependencies -ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$NODEJS_VERSION -ynh_exec_warn_less ynh_install_ruby --ruby_version=$RUBY_VERSION - -#================================================= -# CREATE DEDICATED USER -#================================================= -ynh_script_progression --message="Configuring system user..." --weight=1 - -# Create a system user -ynh_system_user_create --username=$app --home_dir=$final_path - -#================================================= -# CREATE A POSTGRESQL DATABASE -#================================================= -ynh_script_progression --message="Creating a PostgreSQL database..." --weight=3 - -ynh_psql_test_if_first_run -# Create PostgreSQL database -db_name=$(ynh_sanitize_dbid --db_name="${app}_production") -db_user=$(ynh_sanitize_dbid --db_name=$app) -db_pwd=$(ynh_string_random --length=30) -ynh_app_setting_set --app=$app --key=db_name --value=$db_name -ynh_app_setting_set --app=$app --key=db_user --value=$db_user -ynh_app_setting_set --app=$app --key=db_pwd --value=$db_pwd -ynh_psql_setup_db --db_user=$db_user --db_name=$db_name --db_pwd=$db_pwd -ynh_psql_execute_as_root --sql="ALTER USER $db_user CREATEDB;" - +# APP "BUILD" (DEPLOYING SOURCES, VENV, COMPILING ETC) #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= -ynh_script_progression --message="Setting up source files..." --weight=3 +ynh_script_progression --message="Setting up source files..." --weight=1 -ynh_app_setting_set --app=$app --key=final_path --value=$final_path # Download, check integrity, uncompress and patch the source from app.src -ynh_setup_source --dest_dir="$final_path/live" +ynh_setup_source --dest_dir="$install_dir/live" -chmod 750 "$final_path" -chmod -R o-rwx "$final_path" -chown -R $app:www-data "$final_path" +chown -R $app:www-data "$install_dir" #================================================= -# NGINX CONFIGURATION +# INSTALL DEPENDENCIES #================================================= -ynh_script_progression --message="Configuring NGINX web server..." --weight=1 +ynh_script_progression --message="Installing Ruby and NodeJS..." --weight=1 -# Create a dedicated NGINX config -ynh_add_nginx_config +ynh_exec_warn_less ynh_install_ruby --ruby_version=$ruby_version +ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$nodejs_version -#================================================= -# SPECIFIC SETUP #================================================= # ADD SWAP IF NEEDED #================================================= @@ -154,31 +76,20 @@ ynh_script_progression --message="Adding swap if needed..." --weight=1 total_memory=$(ynh_get_ram --total) swap_needed=0 -if [ $total_memory -lt $MEMORY_NEEDED ]; then +if [ $total_memory -lt $memory_needed ]; then # Need a minimum of 2.5Go of memory - swap_needed=$(($MEMORY_NEEDED - $total_memory)) + swap_needed=$(($memory_needed - $total_memory)) fi -ynh_script_progression --message="Adding $swap_needed Mo to swap..." --weight=1 +ynh_script_progression --message="Adding $swap_needed Mo to swap..." ynh_add_swap --size=$swap_needed -#================================================= -# INSTALLING RUBY AND BUNDLER -#================================================= -ynh_script_progression --message="Installing Ruby dependencies..." --weight=3 - -pushd "$final_path/live" - ynh_use_ruby - ynh_gem update --system --no-document - ynh_gem install bundler --no-document -popd - #================================================= # ADD A CONFIGURATION #================================================= ynh_script_progression --message="Adding a configuration file..." --weight=1 -config="$final_path/live/.env.production" +config="$install_dir/live/.env.production" language="$(echo $language | head -c 2)" @@ -191,115 +102,92 @@ ynh_app_setting_set --app="$app" --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" +# We need rake to build vapid keys, we generate them later once the app is installed vapid_private_key="" vapid_public_key="" ynh_add_config --template="../conf/.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="$final_path/live/config/settings.yml" -ynh_replace_string --match_string="min_invite_role: 'admin'" --replace_string="min_invite_role: 'none'" --target_file="$final_path/live/config/settings.yml" +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" -ynh_store_file_checksum --file="$final_path/live/config/settings.yml" +ynh_store_file_checksum --file="$install_dir/live/config/settings.yml" -chmod 400 "$final_path/live/config/settings.yml" -chown $app:$app "$final_path/live/config/settings.yml" +chmod 400 "$install_dir/live/config/settings.yml" +chown $app:$app "$install_dir/live/config/settings.yml" #================================================= -# SETUP SYSTEMD +# BUILD APP #================================================= -ynh_script_progression --message="Configuring a systemd service..." --weight=1 +ynh_script_progression --message="Building app..." --weight=1 -# Create a dedicated systemd config -ynh_add_systemd_config --service="$app-web" --template="glitchsoc-web.service" -ynh_add_systemd_config --service="$app-sidekiq" --template="glitchsoc-sidekiq.service" -ynh_add_systemd_config --service="$app-streaming" --template="glitchsoc-streaming.service" - -#================================================= -# INSTALLING GLITCH-SOC -#================================================= -ynh_script_progression --message="Installing Glitch-Soc..." --weight=5 - -pushd "$final_path/live" +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 corepack enable yarn install 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:setup --quiet + 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 - 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_exec_warn_less ynh_exec_as $app RAILS_ENV=production $ynh_ruby_load_path $ld_preload bin/tootctl accounts modify "$admin" --approve + # 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 popd -vapid_private_key=$(grep -oP "VAPID_PRIVATE_KEY=\K.+" "$final_path/live/key.txt") +# 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.+" "$final_path/live/key.txt") +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="$final_path/live/key.txt" - +ynh_secure_remove --file="$install_dir/live/key.txt" ynh_delete_file_checksum --file="$config" - ynh_add_config --template="../conf/.env.production.sample" --destination="$config" - chmod 400 "$config" chown $app:$app "$config" #================================================= -# SETUP THE CRON FILE +# SYSTEM CONFIGURATION #================================================= -ynh_script_progression --message="Setuping the cron file..." --weight=1 +ynh_script_progression --message="Adding system configurations related to $app..." --weight=1 +# Create a dedicated NGINX config using the conf/nginx.conf template +ynh_add_nginx_config + +# Create a dedicated systemd config +ynh_add_systemd_config --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" +yunohost service add "$app-sidekiq" --description="$app sidekiq service" + +ynh_add_systemd_config --service="$app-streaming" --template="mastodon-streaming.service" +yunohost service add "$app-streaming" --description="$app streaming service" + +# Create a cron file ynh_add_config --template="../conf/cron" --destination="/etc/cron.d/$app" #================================================= # GENERIC FINALIZATION -#================================================= -# INTEGRATE SERVICE IN YUNOHOST -#================================================= -ynh_script_progression --message="Integrating service in YunoHost..." --weight=1 - -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" - #================================================= # START SYSTEMD SERVICE #================================================= -ynh_script_progression --message="Starting a systemd service..." --weight=2 +ynh_script_progression --message="Starting all systemd services..." --weight=1 ynh_systemd_action --service_name=${app}-web --action="start" --log_path=systemd --line_match="Listening on" ynh_systemd_action --service_name=${app}-sidekiq --action="start" --log_path=systemd --line_match="Schedules Loaded" ynh_systemd_action --service_name=${app}-streaming --action="start" --log_path=systemd --line_match="Streaming API now listening on" -#================================================= -# SETUP SSOWAT -#================================================= -ynh_script_progression --message="Configuring permissions..." --weight=1 - -# Make app public if necessary -if [ $is_public -eq 1 ] -then - # Everyone can access the app. - # The "main" permission is automatically created before the install script. - ynh_permission_update --permission="main" --add="visitors" - ynh_permission_create --permission="api" --url="/api" --allowed="visitors" --auth_header="false" --show_tile="false" --protected="true" -fi - -#================================================= -# RELOAD NGINX -#================================================= -ynh_script_progression --message="Reloading NGINX web server..." --weight=1 - -ynh_systemd_action --service_name=nginx --action=reload - #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/remove b/scripts/remove index 6c80b89..800687d 100644 --- a/scripts/remove +++ b/scripts/remove @@ -7,25 +7,16 @@ #================================================= source _common.sh +source ynh_install_ruby__2 +source ynh_add_swap source /usr/share/yunohost/helpers #================================================= -# LOAD SETTINGS +# REMOVE SYSTEM CONFIGURATIONS #================================================= -ynh_script_progression --message="Loading installation settings..." --weight=1 - -app=$YNH_APP_INSTANCE_NAME - -domain=$(ynh_app_setting_get --app=$app --key=domain) -db_name=$(ynh_app_setting_get --app=$app --key=db_name) -db_user=$(ynh_app_setting_get --app=$app --key=db_user) -final_path=$(ynh_app_setting_get --app=$app --key=final_path) - -#================================================= -# STANDARD REMOVE -#================================================= -# REMOVE SERVICE INTEGRATION IN YUNOHOST +# REMOVE SYSTEMD SERVICE #================================================= +ynh_script_progression --message="Removing system configurations related to $app..." --weight=1 # 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 @@ -46,76 +37,26 @@ then yunohost service remove "$app-streaming" fi -#================================================= -# STOP AND REMOVE SERVICE -#================================================= -ynh_script_progression --message="Stopping and removing the systemd service..." --weight=1 - # 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" -#================================================= -# REMOVE THE POSTGRESQL DATABASE -#================================================= -ynh_script_progression --message="Removing the PostgreSQL database..." --weight=10 - -# Remove a database if it exists, along with the associated user -ynh_psql_remove_db --db_user=$db_user --db_name=$db_name - -#================================================= -# REMOVE APP MAIN DIR -#================================================= -ynh_script_progression --message="Removing app main directory..." --weight=10 - -# Remove the app directory securely -ynh_secure_remove --file="$final_path" - -#================================================= -# REMOVE NGINX CONFIGURATION -#================================================= -ynh_script_progression --message="Removing NGINX web server configuration..." --weight=1 - # Remove the dedicated NGINX config ynh_remove_nginx_config -#================================================= -# REMOVE DEPENDENCIES -#================================================= -ynh_script_progression --message="Removing dependencies..." --weight=10 +# Remove a cron file +ynh_secure_remove --file="/etc/cron.d/$app" # Remove metapackage and its dependencies ynh_remove_ruby ynh_remove_nodejs -ynh_remove_app_dependencies -ynh_remove_extra_repo - -#================================================= -# SPECIFIC REMOVE -#================================================= -# REMOVE VARIOUS FILES -#================================================= -ynh_script_progression --message="Removing various files..." --weight=1 - -# Remove a cron file -ynh_secure_remove --file="/etc/cron.d/$app" # Remove swap ynh_del_swap -#================================================= -# GENERIC FINALIZATION -#================================================= -# REMOVE DEDICATED USER -#================================================= -ynh_script_progression --message="Removing the dedicated system user..." --weight=1 - -# Delete a system user -ynh_system_user_delete --username=$app - #================================================= # END OF SCRIPT #================================================= -ynh_script_progression --message="Removal of $app completed" --weight=1 +ynh_script_progression --message="Removal of $app completed" --last diff --git a/scripts/restore b/scripts/restore index 81931c2..c69371b 100644 --- a/scripts/restore +++ b/scripts/restore @@ -8,87 +8,28 @@ # Keep this path for calling _common.sh inside the execution's context of backup and restore scripts source ../settings/scripts/_common.sh +source ../settings/scripts/ynh_install_ruby__2 +source ../settings/scripts/ynh_add_swap source /usr/share/yunohost/helpers -#================================================= -# MANAGE SCRIPT FAILURE -#================================================= - -ynh_clean_setup () { - ynh_clean_check_starting -} -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - -#================================================= -# LOAD SETTINGS -#================================================= -ynh_script_progression --message="Loading installation settings..." --weight=1 - -app=$YNH_APP_INSTANCE_NAME - -domain=$(ynh_app_setting_get --app=$app --key=domain) -path_url=$(ynh_app_setting_get --app=$app --key=path) -final_path=$(ynh_app_setting_get --app=$app --key=final_path) -db_name=$(ynh_app_setting_get --app=$app --key=db_name) -db_user=$(ynh_app_setting_get --app=$app --key=db_user) -db_pwd=$(ynh_app_setting_get --app=$app --key=db_pwd) - -#================================================= -# CHECK IF THE APP CAN BE RESTORED -#================================================= -ynh_script_progression --message="Validating restoration parameters..." --weight=1 - -test ! -d $final_path \ - || ynh_die --message="There is already a directory: $final_path " - #================================================= # STANDARD RESTORATION STEPS -#================================================= -# RESTORE THE NGINX CONFIGURATION -#================================================= -ynh_script_progression --message="Restoring the NGINX web server configuration..." --weight=1 - -ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" - -#================================================= -# RECREATE THE DEDICATED USER -#================================================= -ynh_script_progression --message="Recreating the dedicated system user..." --weight=1 - -# Create the dedicated user (if not existing) -ynh_system_user_create --username=$app --home_dir=$final_path - #================================================= # RESTORE THE APP MAIN DIR #================================================= -ynh_script_progression --message="Restoring the app main directory..." --weight=10 +ynh_script_progression --message="Restoring the app main directory..." --weight=1 -ynh_restore_file --origin_path="$final_path" +ynh_restore_file --origin_path="$install_dir" -chmod 750 "$final_path" -chmod -R o-rwx "$final_path" -chown -R $app:www-data "$final_path" - -#================================================= -# SPECIFIC RESTORATION -#================================================= -# REINSTALL DEPENDENCIES -#================================================= -ynh_script_progression --message="Reinstalling dependencies..." --weight=10 - -# Define and install dependencies -ynh_exec_warn_less ynh_install_app_dependencies $pkg_dependencies -ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$NODEJS_VERSION -ynh_install_ruby --ruby_version=$RUBY_VERSION +chmod 750 "$install_dir" +chmod -R o-rwx "$install_dir" +chown -R $app:www-data "$install_dir" #================================================= # RESTORE THE POSTGRESQL DATABASE #================================================= -ynh_script_progression --message="Restoring the PostgreSQL database..." --weight=10 +ynh_script_progression --message="Restoring the PostgreSQL database..." --weight=1 -ynh_psql_test_if_first_run -ynh_psql_setup_db --db_user=$db_user --db_name=$db_name --db_pwd=$db_pwd ynh_psql_execute_as_root --sql="ALTER USER $db_user CREATEDB;" ynh_psql_execute_file_as_root --file="./db.sql" --database="$db_name" @@ -100,9 +41,9 @@ ynh_script_progression --message="Adding swap if needed..." --weight=1 total_memory=$(ynh_get_ram --total) swap_needed=0 -if [ $total_memory -lt $MEMORY_NEEDED ]; then +if [ $total_memory -lt $memory_needed ]; then # Need a minimum of 8Go of memory - swap_needed=$(($MEMORY_NEEDED - $total_memory)) + swap_needed=$(($memory_needed - $total_memory)) fi ynh_script_progression --message="Adding $swap_needed Mo to swap..." --weight=1 @@ -111,13 +52,10 @@ ynh_add_swap --size=$swap_needed #================================================= # INSTALLING RUBY, BUNDLER, AND YARN #================================================= -ynh_script_progression --message="Installing Ruby dependencies..." --weight=10 +ynh_script_progression --message="Reinstalling Ruby and NodeJS..." --weight=1 -pushd "$final_path/live" - ynh_use_ruby - ynh_gem update --system --no-document - ynh_gem install bundler --no-document -popd +ynh_exec_warn_less ynh_install_ruby --ruby_version=$ruby_version +ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$nodejs_version ynh_script_progression --message="Installing Yarn dependencies..." --weight=10 @@ -127,46 +65,47 @@ pushd "$final_path/live" popd #================================================= -# RESTORE VARIOUS FILES +# BUILD APP #================================================= -ynh_script_progression --message="Restoring various files..." --weight=1 +ynh_script_progression --message="Building app..." --weight=1 -ynh_restore_file --origin_path="/etc/cron.d/$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) +popd #================================================= -# RESTORE SYSTEMD +# RESTORE SYSTEM CONFIGURATIONS #================================================= -ynh_script_progression --message="Restoring the systemd configuration..." --weight=1 +# RESTORE THE PHP-FPM CONFIGURATION +#================================================= +ynh_script_progression --message="Restoring system configurations related to $app..." --weight=1 + +ynh_restore_file --origin_path="/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" systemctl enable "$app-web" "$app-sidekiq" "$app-streaming" --quiet -#================================================= -# INTEGRATE SERVICE IN YUNOHOST -#================================================= -ynh_script_progression --message="Integrating service in YunoHost..." --weight=1 - 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" -#================================================= -# START SYSTEMD SERVICE -#================================================= -ynh_script_progression --message="Starting a systemd service..." --weight=1 - -ynh_systemd_action --service_name=${app}-web --action="start" --log_path=systemd --line_match="Listening on" -ynh_systemd_action --service_name=${app}-sidekiq --action="start" --log_path=systemd --line_match="Schedules Loaded" -ynh_systemd_action --service_name=${app}-streaming --action="start" --log_path=systemd --line_match="Streaming API now listening on" +ynh_restore_file --origin_path="/etc/cron.d/$app" #================================================= # GENERIC FINALIZATION #================================================= -# RELOAD NGINX +# RELOAD NGINX AND PHP-FPM OR THE APP SERVICE #================================================= -ynh_script_progression --message="Reloading NGINX web server..." --weight=1 +ynh_script_progression --message="Reloading NGINX web server and $app's service..." --weight=1 + +ynh_systemd_action --service_name=${app}-web --action="start" --log_path=systemd --line_match="Listening on" +ynh_systemd_action --service_name=${app}-sidekiq --action="start" --log_path=systemd --line_match="Schedules Loaded" +ynh_systemd_action --service_name=${app}-streaming --action="start" --log_path=systemd --line_match="Streaming API now listening on" ynh_systemd_action --service_name=nginx --action=reload @@ -174,4 +113,4 @@ ynh_systemd_action --service_name=nginx --action=reload # END OF SCRIPT #================================================= -ynh_script_progression --message="Restoration completed for $app" --weight=1 +ynh_script_progression --message="Restoration completed for $app" --last diff --git a/scripts/upgrade b/scripts/upgrade index 71bfeb3..3abfe5e 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -9,122 +9,16 @@ source _common.sh source /usr/share/yunohost/helpers -#================================================= -# LOAD SETTINGS -#================================================= -ynh_script_progression --message="Loading installation settings..." --weight=1 - -app=$YNH_APP_INSTANCE_NAME - -domain=$(ynh_app_setting_get --app=$app --key=domain) -path_url=$(ynh_app_setting_get --app=$app --key=path) -admin=$(ynh_app_setting_get --app=$app --key=admin) -final_path=$(ynh_app_setting_get --app=$app --key=final_path) -language=$(ynh_app_setting_get --app=$app --key=language) -redis_namespace=$(ynh_app_setting_get --app=$app --key=db_name) -db_name=$(ynh_app_setting_get --app=$app --key=db_name) -db_user=$(ynh_app_setting_get --app=$app --key=db_user) -db_pwd=$(ynh_app_setting_get --app=$app --key=db_pwd) -admin_mail=$(ynh_user_get_info --username=$admin --key='mail') -port_web=$(ynh_app_setting_get --app=$app --key=port_web) -port_stream=$(ynh_app_setting_get --app=$app --key=port_stream) - -secret_key_base=$(ynh_app_setting_get --app=$app --key=secret_key_base) -otp_secret=$(ynh_app_setting_get --app=$app --key=otp_secret) -vapid_private_key=$(ynh_app_setting_get --app=$app --key=vapid_private_key) -vapid_public_key=$(ynh_app_setting_get --app=$app --key=vapid_public_key) - -config="$final_path/live/.env.production" - -max_toot_chars=$(ynh_app_setting_get --app=$app --key=max_toot_chars) -max_pinned_toots=$(ynh_app_setting_get --app=$app --key=max_pinned_toots) -max_bio_chars=$(ynh_app_setting_get --app=$app --key=max_bio_chars) -max_profile_fields=$(ynh_app_setting_get --app=$app --key=max_profile_fields) -max_display_name_chars=$(ynh_app_setting_get --app=$app --key=max_display_name_chars) -max_poll_options=$(ynh_app_setting_get --app=$app --key=max_poll_options) -max_poll_option_chars=$(ynh_app_setting_get --app=$app --key=max_poll_option_chars) -max_image_size=$(ynh_app_setting_get --app=$app --key=max_image_size) -max_video_size=$(ynh_app_setting_get --app=$app --key=max_video_size) -max_emoji_size=$(ynh_app_setting_get --app=$app --key=max_emoji_size) -max_remote_emoji_size=$(ynh_app_setting_get --app=$app --key=max_remote_emoji_size) - -#================================================= -# CHECK VERSION -#================================================= -ynh_script_progression --message="Checking version..." --weight=1 - +config="$install_dir/live/.env.production" upgrade_type=$(ynh_check_app_version_changed) -#================================================= -# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP -#================================================= -ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." --weight=1 - -# Backup the current version of the app -ynh_backup_before_upgrade -ynh_clean_setup () { - ynh_clean_check_starting - # Restore it if the upgrade fails - ynh_restore_upgradebackup -} -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - #================================================= # STANDARD UPGRADE STEPS -#================================================= -# STOP SYSTEMD SERVICE -#================================================= -ynh_script_progression --message="Stopping a systemd service..." --weight=1 - -ynh_systemd_action --service_name=${app}-web --action="stop" --log_path=systemd --line_match="Stopped" -ynh_systemd_action --service_name=${app}-sidekiq --action="stop" --log_path=systemd --line_match="Stopped" -ynh_systemd_action --service_name=${app}-streaming --action="stop" --log_path=systemd --line_match="Stopped" - #================================================= # ENSURE DOWNWARD COMPATIBILITY #================================================= ynh_script_progression --message="Ensuring downward compatibility..." --weight=1 -# Cleaning legacy permissions -if ynh_legacy_permissions_exists; then - ynh_legacy_permissions_delete_all - - ynh_app_setting_delete --app=$app --key=is_public -fi - -# Create a permission if needed -if ! ynh_permission_exists --permission="api"; then - ynh_permission_create --permission="api" --url="/api" --allowed="visitors" --auth_header="false" --show_tile="false" --protected="true" -fi - -# If port_web doesn't exist, create it, needed for old install -if [[ -z "$port_web" ]]; then - port_web=3000 - ynh_app_setting_set --app=$app --key=port_web --value=$port_web -fi - -# If port_web doesn't exist, create it, needed for old install -if [[ -z "$port_stream" ]]; then - port_stream=4000 - ynh_app_setting_set --app=$app --key=port_stream --value=$port_stream -fi - -# If db_user doesn't exist, create it, needed for old install -if [[ -z "$db_user" ]]; then - db_user=$(ynh_sanitize_dbid --db_name=$app) - ynh_app_setting_set --app=$app --key=db_user --value=$db_user -fi - -# If db_pwd doesn't exist, create it, needed for old install -if [[ -z "$db_pwd" ]]; then - db_pwd=$(ynh_string_random) - ynh_app_setting_set --app=$app --key=db_pwd --value=$db_pwd - ynh_psql_test_if_first_run - sudo --login --user=postgres psql -c"ALTER user $app WITH PASSWORD '$db_pwd'" postgres - ynh_replace_string --match_string="DB_PASS=" --replace_string="DB_PASS=${db_pwd}" --target_file="$config" -fi - # Remove paperclip_secret ynh_app_setting_delete --app=$app --key=paperclip_secret @@ -215,16 +109,45 @@ if [ -z "$max_remote_emoji_size" ]; then ynh_app_setting_set --app=$app --key=max_remote_emoji_size --value=$max_remote_emoji_size fi -#Remove previous added repository -ynh_remove_extra_repo +# Rename the database to match packaging v2 defaults db_name (`$app_production` to `$app`) +if [[ $db_name = *'_production' ]]; then + ynh_systemd_action --service_name=${app}-web --action="stop" --log_path=systemd --line_match="Stopped" + ynh_systemd_action --service_name=${app}-sidekiq --action="stop" --log_path=systemd --line_match="Stopped" + ynh_systemd_action --service_name=${app}-streaming --action="stop" --log_path=systemd --line_match="Stopped" + + ynh_psql_execute_as_root --sql="ALTER DATABASE $db_name RENAME TO $app;" + db_name=$app + ynh_app_setting_set --app=$app --key=db_name --value=$db_name +fi + +if ynh_compare_current_package_version --comparison lt --version 2023.06.19~ynh2 +then + ynh_remove_logrotate +fi + +# If service doesn't exist, create it +if [[ -z "$service" ]]; then + # Set `service` settings to support `yunohost app shell` command + ynh_app_setting_set --app="$app" --key=service --value="$app-web.service" +fi #================================================= -# CREATE DEDICATED USER +# STOP SYSTEMD SERVICE #================================================= -ynh_script_progression --message="Making sure dedicated system user exists..." --weight=1 +ynh_script_progression --message="Stopping a systemd service..." --weight=1 -# Create a dedicated user (if not existing) -ynh_system_user_create --username=$app --home_dir=$final_path +ynh_systemd_action --service_name=${app}-web --action="stop" --log_path=systemd --line_match="Stopped" +ynh_systemd_action --service_name=${app}-sidekiq --action="stop" --log_path=systemd --line_match="Stopped" +ynh_systemd_action --service_name=${app}-streaming --action="stop" --log_path=systemd --line_match="Stopped" + +#================================================= +# "REBUILD" THE APP (DEPLOY NEW SOURCES, RERUN NPM BUILD...) +#================================================= +# Update Ruby and NodeJS +ynh_script_progression --message="Upgrading Ruby and NodeJS..." --weight=5 + +ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$NODEJS_VERSION +ynh_exec_warn_less ynh_install_ruby --ruby_version=$RUBY_VERSION #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE @@ -232,110 +155,37 @@ ynh_system_user_create --username=$app --home_dir=$final_path if [ "$upgrade_type" == "UPGRADE_APP" ] then + # Add swap if needed + total_memory=$(ynh_get_ram --total) + swap_needed=0 + + if [ $total_memory -lt $MEMORY_NEEDED ]; then + # Need a minimum of 2.5Go of memory + swap_needed=$(($MEMORY_NEEDED - $total_memory)) + + ynh_script_progression --message="Adding $swap_needed Mo to swap..." --weight=1 + ynh_add_swap --size=$swap_needed + fi + + # Update Glitch-Soc ynh_script_progression --message="Upgrading source files..." --weight=1 - # Download Glitch-Soc - tmpdir="$(mktemp -d)" + ynh_setup_source --dest_dir="$install_dir/live" --keep="public/system/" - mkdir $tmpdir/system - if [ -d "$final_path/live/public/system" ]; then - mv --verbose --no-target-directory --backup=numbered "$final_path/live/public/system" "$final_path/system.tmp" - fi - rsync -a "$config" "$tmpdir/." - ynh_secure_remove --file="$final_path/live" - - ynh_setup_source --dest_dir="$final_path/live" + chmod 750 "$install_dir" + chmod -R o-rwx "$install_dir" + chown -R $app:www-data "$install_dir" - if [ -d "$final_path/system.tmp" ]; then - mv --verbose --no-target-directory "$final_path/system.tmp" "$final_path/live/public/system" - fi - rsync -a "$tmpdir/.env.production" "$final_path/live/." - ynh_secure_remove --file="$tmpdir" + pushd "$install_dir/live" + ynh_use_ruby + ynh_gem update --system --no-document + ynh_gem install bundler --no-document + popd - # Clean files which are not needed anymore - ynh_secure_remove --file="$final_path/live/config/initializers/timeout.rb" - - chmod 750 "$final_path" - chmod -R o-rwx "$final_path" - chown -R $app:www-data "$final_path" -fi - -#================================================= -# NGINX CONFIGURATION -#================================================= -ynh_script_progression --message="Upgrading NGINX web server configuration..." --weight=1 - -# Create a dedicated NGINX config -ynh_add_nginx_config - -#================================================= -# UPGRADE DEPENDENCIES -#================================================= -ynh_script_progression --message="Upgrading dependencies..." --weight=10 - -ynh_exec_warn_less ynh_install_app_dependencies $pkg_dependencies -ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$NODEJS_VERSION -ynh_exec_warn_less ynh_install_ruby --ruby_version=$RUBY_VERSION - -#================================================= -# SPECIFIC UPGRADE -#================================================= -# ADD SWAP IF NEEDED -#================================================= -ynh_script_progression --message="Adding swap if needed..." --weight=1 - -total_memory=$(ynh_get_ram --total) -swap_needed=0 - -if [ $total_memory -lt $MEMORY_NEEDED ]; then - # Need a minimum of 8Go of memory - swap_needed=$(($MEMORY_NEEDED - $total_memory)) -fi - -ynh_script_progression --message="Adding $swap_needed Mo to swap..." --weight=1 -ynh_add_swap --size=$swap_needed - -#================================================= -# INSTALLING RUBY AND BUNDLER -#================================================= -ynh_script_progression --message="Installing Ruby dependencies..." --weight=5 - -pushd "$final_path/live" - ynh_use_ruby - ynh_gem update --system --no-document - ynh_gem install bundler --no-document -popd - -#================================================= -# UPDATE A CONFIG FILE -#================================================= -ynh_script_progression --message="Updating a config file..." --weight=1 - -language="$(echo $language | head -c 2)" - -ynh_add_config --template="../conf/.env.production.sample" --destination="$config" - -chmod 400 "$config" -chown $app:$app "$config" - -#================================================= -# SETUP SYSTEMD -#================================================= -ynh_script_progression --message="Upgrading systemd configuration..." --weight=1 - -# Create a dedicated systemd config -ynh_add_systemd_config --service="$app-web" --template="glitchsoc-web.service" -ynh_add_systemd_config --service="$app-sidekiq" --template="glitchsoc-sidekiq.service" -ynh_add_systemd_config --service="$app-streaming" --template="glitchsoc-streaming.service" - -#================================================= -# UPGRADE GLITCH-SOC -#================================================= -if [ "$upgrade_type" == "UPGRADE_APP" ] -then + # Perform upgrade actions on Glitch-Soc ynh_script_progression --message="Upgrading Glitch-Soc..." --weight=10 - pushd "$final_path/live" + pushd "$install_dir/live" 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 install -j$(getconf _NPROCESSORS_ONLN) @@ -352,23 +202,37 @@ then fi #================================================= -# SETUP THE CRON FILE +# REAPPLY SYSTEM CONFIGURATIONS #================================================= -ynh_script_progression --message="Setuping the cron file..." --weight=1 +ynh_script_progression --message="Upgrading system configurations related to $app..." --weight=1 -ynh_add_config --template="../conf/cron" --destination="/etc/cron.d/$app" +ynh_add_nginx_config -#================================================= -# GENERIC FINALIZATION -#================================================= -# INTEGRATE SERVICE IN YUNOHOST -#================================================= -ynh_script_progression --message="Integrating service in YunoHost..." --weight=1 +ynh_add_systemd_config --service="$app-web" --template="web.service" +ynh_add_systemd_config --service="$app-sidekiq" --template="sidekiq.service" +ynh_add_systemd_config --service="$app-streaming" --template="streaming.service" 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_add_systemd_config + +ynh_add_config --template="../conf/cron" --destination="/etc/cron.d/$app" + +#================================================= +# RECONFIGURE THE APP (UPDATE CONF, APPLY MIGRATIONS...) +#================================================= +# UPDATE A CONFIG FILE +#================================================= +ynh_script_progression --message="Updating a configuration file..." --weight=1 + +language="$(echo $language | head -c 2)" + +ynh_add_config --template="../conf/.env.production.sample" --destination="$config" +chmod 400 "$config" +chown $app:$app "$config" + #================================================= # START SYSTEMD SERVICE #================================================= @@ -378,13 +242,6 @@ ynh_systemd_action --service_name=${app}-web --action="start" --log_path=systemd ynh_systemd_action --service_name=${app}-sidekiq --action="start" --log_path=systemd --line_match="Schedules Loaded" ynh_systemd_action --service_name=${app}-streaming --action="start" --log_path=systemd --line_match="Streaming API now listening on" -#================================================= -# RELOAD NGINX -#================================================= -ynh_script_progression --message="Reloading NGINX web server..." --weight=1 - -ynh_systemd_action --service_name=nginx --action=reload - #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/ynh_add_swap b/scripts/ynh_add_swap new file mode 100644 index 0000000..d7ec44b --- /dev/null +++ b/scripts/ynh_add_swap @@ -0,0 +1,93 @@ +#!/bin/bash + +# Add swap +# +# usage: ynh_add_swap --size=SWAP in Mb +# | arg: -s, --size= - Amount of SWAP to add in Mb. +ynh_add_swap () { + # Declare an array to define the options of this helper. + declare -Ar args_array=( [s]=size= ) + local size + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + + local swap_max_size=$(( $size * 1024 )) + + local free_space=$(df --output=avail / | sed 1d) + # Because we don't want to fill the disk with a swap file, divide by 2 the available space. + local usable_space=$(( $free_space / 2 )) + + SD_CARD_CAN_SWAP=${SD_CARD_CAN_SWAP:-0} + + # Swap on SD card only if it's is specified + if ynh_is_main_device_a_sd_card && [ "$SD_CARD_CAN_SWAP" == "0" ] + then + ynh_print_warn --message="The main mountpoint of your system '/' is on an SD card, swap will not be added to prevent some damage of this one, but that can cause troubles for the app $app. If you still want activate the swap, you can relaunch the command preceded by 'SD_CARD_CAN_SWAP=1'" + return + fi + + # Compare the available space with the size of the swap. + # And set a acceptable size from the request + if [ $usable_space -ge $swap_max_size ] + then + local swap_size=$swap_max_size + elif [ $usable_space -ge $(( $swap_max_size / 2 )) ] + then + local swap_size=$(( $swap_max_size / 2 )) + elif [ $usable_space -ge $(( $swap_max_size / 3 )) ] + then + local swap_size=$(( $swap_max_size / 3 )) + elif [ $usable_space -ge $(( $swap_max_size / 4 )) ] + then + local swap_size=$(( $swap_max_size / 4 )) + else + echo "Not enough space left for a swap file" >&2 + local swap_size=0 + fi + + # If there's enough space for a swap, and no existing swap here + if [ $swap_size -ne 0 ] && [ ! -e /swap_$app ] + then + # Preallocate space for the swap file, fallocate may sometime not be used, use dd instead in this case + if ! fallocate -l ${swap_size}K /swap_$app + then + dd if=/dev/zero of=/swap_$app bs=1024 count=${swap_size} + fi + chmod 0600 /swap_$app + # Create the swap + mkswap /swap_$app + # And activate it + swapon /swap_$app + # Then add an entry in fstab to load this swap at each boot. + echo -e "/swap_$app swap swap defaults 0 0 #Swap added by $app" >> /etc/fstab + fi +} + +ynh_del_swap () { + # If there a swap at this place + if [ -e /swap_$app ] + then + # Clean the fstab + sed -i "/#Swap added by $app/d" /etc/fstab + # Desactive the swap file + swapoff /swap_$app + # And remove it + rm /swap_$app + fi +} + +# Check if the device of the main mountpoint "/" is an SD card +# +# [internal] +# +# return 0 if it's an SD card, else 1 +ynh_is_main_device_a_sd_card () { + local main_device=$(lsblk --output PKNAME --noheadings $(findmnt / --nofsroot --uniq --output source --noheadings --first-only)) + + if echo $main_device | grep --quiet "mmc" && [ $(tail -n1 /sys/block/$main_device/queue/rotational) == "0" ] + then + return 0 + else + return 1 + fi +} diff --git a/scripts/ynh_install_ruby__2 b/scripts/ynh_install_ruby__2 new file mode 100644 index 0000000..521a182 --- /dev/null +++ b/scripts/ynh_install_ruby__2 @@ -0,0 +1,310 @@ +#!/bin/bash + +ynh_ruby_try_bash_extension() { + if [ -x src/configure ]; then + src/configure && make -C src || { + ynh_print_info --message="Optional bash extension failed to build, but things will still work normally." + } + fi +} + +rbenv_install_dir="/opt/rbenv" +ruby_version_path="$rbenv_install_dir/versions" +# RBENV_ROOT is the directory of rbenv, it needs to be loaded as a environment variable. +export RBENV_ROOT="$rbenv_install_dir" +export rbenv_root="$rbenv_install_dir" + +ruby_dependencies="" +build_ruby_dependencies="libjemalloc-dev curl build-essential libreadline-dev zlib1g-dev libsqlite3-dev libssl-dev libxml2-dev libxslt-dev autoconf automake bison libtool" +pkg_dependencies="$pkg_dependencies $ruby_dependencies" +build_pkg_dependencies="$build_pkg_dependencies $build_ruby_dependencies" + +# Load the version of Ruby for an app, and set variables. +# +# ynh_use_ruby has to be used in any app scripts before using Ruby for the first time. +# This helper will provide alias and variables to use in your scripts. +# +# To use gem or Ruby, use the alias `ynh_gem` and `ynh_ruby` +# Those alias will use the correct version installed for the app +# For example: use `ynh_gem install` instead of `gem install` +# +# With `sudo` or `ynh_exec_as`, use instead the fallback variables `$ynh_gem` and `$ynh_ruby` +# And propagate $PATH to sudo with $ynh_ruby_load_path +# Exemple: `ynh_exec_as $app $ynh_ruby_load_path $ynh_gem install` +# +# $PATH contains the path of the requested version of Ruby. +# However, $PATH is duplicated into $ruby_path to outlast any manipulation of $PATH +# You can use the variable `$ynh_ruby_load_path` to quickly load your Ruby version +# in $PATH for an usage into a separate script. +# Exemple: $ynh_ruby_load_path $install_dir/script_that_use_gem.sh` +# +# +# Finally, to start a Ruby service with the correct version, 2 solutions +# Either the app is dependent of Ruby or gem, but does not called it directly. +# In such situation, you need to load PATH +# `Environment="__YNH_RUBY_LOAD_PATH__"` +# `ExecStart=__FINALPATH__/my_app` +# You will replace __YNH_RUBY_LOAD_PATH__ with $ynh_ruby_load_path +# +# Or Ruby start the app directly, then you don't need to load the PATH variable +# `ExecStart=__YNH_RUBY__ my_app run` +# You will replace __YNH_RUBY__ with $ynh_ruby +# +# +# one other variable is also available +# - $ruby_path: The absolute path to Ruby binaries for the chosen version. +# +# usage: ynh_use_ruby +# +# Requires YunoHost version 3.2.2 or higher. +ynh_use_ruby () { + ruby_version=$(ynh_app_setting_get --app=$app --key=ruby_version) + + # Get the absolute path of this version of Ruby + ruby_path="$ruby_version_path/$YNH_APP_INSTANCE_NAME/bin" + + # Allow alias to be used into bash script + shopt -s expand_aliases + + # Create an alias for the specific version of Ruby and a variable as fallback + ynh_ruby="$ruby_path/ruby" + alias ynh_ruby="$ynh_ruby" + # And gem + ynh_gem="$ruby_path/gem" + alias ynh_gem="$ynh_gem" + + # Load the path of this version of Ruby in $PATH + if [[ :$PATH: != *":$ruby_path"* ]]; then + PATH="$ruby_path:$PATH" + fi + # Create an alias to easily load the PATH + ynh_ruby_load_path="PATH=$PATH" + + # Sets the local application-specific Ruby version + pushd $install_dir + $rbenv_install_dir/bin/rbenv local $ruby_version + popd +} + +# Install a specific version of Ruby +# +# ynh_install_ruby will install the version of Ruby provided as argument by using rbenv. +# +# This helper creates a /etc/profile.d/rbenv.sh that configures PATH environment for rbenv +# for every LOGIN user, hence your user must have a defined shell (as opposed to /usr/sbin/nologin) +# +# Don't forget to execute ruby-dependent command in a login environment +# (e.g. sudo --login option) +# When not possible (e.g. in systemd service definition), please use direct path +# to rbenv shims (e.g. $RBENV_ROOT/shims/bundle) +# +# usage: ynh_install_ruby --ruby_version=ruby_version +# | arg: -v, --ruby_version= - Version of ruby to install. +# +# Requires YunoHost version 3.2.2 or higher. +ynh_install_ruby () { + # Declare an array to define the options of this helper. + local legacy_args=v + local -A args_array=( [v]=ruby_version= ) + local ruby_version + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + + # Load rbenv path in PATH + local CLEAR_PATH="$rbenv_install_dir/bin:$PATH" + + # Remove /usr/local/bin in PATH in case of Ruby prior installation + PATH=$(echo $CLEAR_PATH | sed 's@/usr/local/bin:@@') + + # Move an existing Ruby binary, to avoid to block rbenv + test -x /usr/bin/ruby && mv /usr/bin/ruby /usr/bin/ruby_rbenv + + # Install or update rbenv + rbenv="$(command -v rbenv $rbenv_install_dir/bin/rbenv | grep "$rbenv_install_dir/bin/rbenv" | head -1)" + if [ -n "$rbenv" ]; then + ynh_print_info --message="rbenv already seems installed in \`$rbenv'." + pushd "${rbenv%/*/*}" + if git remote -v 2>/dev/null | grep "https://github.com/rbenv/rbenv.git"; then + ynh_print_info --message="Trying to update with git..." + git pull -q --tags origin master + ynh_ruby_try_bash_extension + else + ynh_print_info --message="Reinstalling rbenv with git..." + cd .. + ynh_secure_remove --file=$rbenv_install_dir + mkdir -p $rbenv_install_dir + cd $rbenv_install_dir + git init -q + git remote add -f -t master origin https://github.com/rbenv/rbenv.git > /dev/null 2>&1 + git checkout -q -b master origin/master + ynh_ruby_try_bash_extension + rbenv=$rbenv_install_dir/bin/rbenv + fi + popd + else + ynh_print_info --message="Installing rbenv with git..." + mkdir -p $rbenv_install_dir + pushd $rbenv_install_dir + git init -q + git remote add -f -t master origin https://github.com/rbenv/rbenv.git > /dev/null 2>&1 + git checkout -q -b master origin/master + ynh_ruby_try_bash_extension + rbenv=$rbenv_install_dir/bin/rbenv + popd + fi + + ruby_build="$(command -v "$rbenv_install_dir"/plugins/*/bin/rbenv-install rbenv-install | head -1)" + if [ -n "$ruby_build" ]; then + ynh_print_info --message="\`rbenv install' command already available in \`$ruby_build'." + pushd "${ruby_build%/*/*}" + if git remote -v 2>/dev/null | grep "https://github.com/rbenv/ruby-build.git"; then + ynh_print_info --message="Trying to update rbenv with git..." + git pull -q origin master + fi + popd + else + ynh_print_info --message="Installing ruby-build with git..." + mkdir -p "${rbenv_install_dir}/plugins" + git clone -q https://github.com/rbenv/ruby-build.git "${rbenv_install_dir}/plugins/ruby-build" + fi + + rbenv_alias="$(command -v "$rbenv_install_dir"/plugins/*/bin/rbenv-alias rbenv-alias | head -1)" + if [ -n "$rbenv_alias" ]; then + ynh_print_info --message="\`rbenv alias' command already available in \`$rbenv_alias'." + pushd "${rbenv_alias%/*/*}" + if git remote -v 2>/dev/null | grep "https://github.com/tpope/rbenv-aliases.git"; then + ynh_print_info --message="Trying to update rbenv-aliases with git..." + git pull -q origin master + fi + popd + else + ynh_print_info --message="Installing rbenv-aliases with git..." + mkdir -p "${rbenv_install_dir}/plugins" + git clone -q https://github.com/tpope/rbenv-aliases.git "${rbenv_install_dir}/plugins/rbenv-aliase" + fi + + rbenv_latest="$(command -v "$rbenv_install_dir"/plugins/*/bin/rbenv-latest rbenv-latest | head -1)" + if [ -n "$rbenv_latest" ]; then + ynh_print_info --message="\`rbenv latest' command already available in \`$rbenv_latest'." + pushd "${rbenv_latest%/*/*}" + if git remote -v 2>/dev/null | grep "https://github.com/momo-lab/xxenv-latest.git"; then + ynh_print_info --message="Trying to update xxenv-latest with git..." + git pull -q origin master + fi + popd + else + ynh_print_info --message="Installing xxenv-latest with git..." + mkdir -p "${rbenv_install_dir}/plugins" + git clone -q https://github.com/momo-lab/xxenv-latest.git "${rbenv_install_dir}/plugins/xxenv-latest" + fi + + # Enable caching + mkdir -p "${rbenv_install_dir}/cache" + + # Create shims directory if needed + mkdir -p "${rbenv_install_dir}/shims" + + # Restore /usr/local/bin in PATH + PATH=$CLEAR_PATH + + # And replace the old Ruby binary + test -x /usr/bin/ruby_rbenv && mv /usr/bin/ruby_rbenv /usr/bin/ruby + + # Install the requested version of Ruby + local final_ruby_version=$(rbenv latest --print $ruby_version) + if ! [ -n "$final_ruby_version" ]; then + final_ruby_version=$ruby_version + fi + ynh_print_info --message="Installing Ruby-$final_ruby_version" + CONFIGURE_OPTS="--disable-install-doc --with-jemalloc" MAKE_OPTS="-j2" rbenv install --skip-existing $final_ruby_version > /dev/null 2>&1 + + # Store ruby_version into the config of this app + ynh_app_setting_set --app=$YNH_APP_INSTANCE_NAME --key=ruby_version --value=$final_ruby_version + + # Remove app virtualenv + if `rbenv alias --list | grep --quiet "$YNH_APP_INSTANCE_NAME " 1>/dev/null 2>&1` + then + rbenv alias $YNH_APP_INSTANCE_NAME --remove + fi + + # Create app virtualenv + rbenv alias $YNH_APP_INSTANCE_NAME $final_ruby_version + + # Cleanup Ruby versions + ynh_cleanup_ruby + + # Set environment for Ruby users + echo "#rbenv +export RBENV_ROOT=$rbenv_install_dir +export PATH=\"$rbenv_install_dir/bin:$PATH\" +eval \"\$(rbenv init -)\" +#rbenv" > /etc/profile.d/rbenv.sh + + # Load the environment + eval "$(rbenv init -)" +} + +# Remove the version of Ruby used by the app. +# +# This helper will also cleanup Ruby versions +# +# usage: ynh_remove_ruby +ynh_remove_ruby () { + local ruby_version=$(ynh_app_setting_get --app=$YNH_APP_INSTANCE_NAME --key=ruby_version) + + # Load rbenv path in PATH + local CLEAR_PATH="$rbenv_install_dir/bin:$PATH" + + # Remove /usr/local/bin in PATH in case of Ruby prior installation + PATH=$(echo $CLEAR_PATH | sed 's@/usr/local/bin:@@') + + rbenv alias $YNH_APP_INSTANCE_NAME --remove + + # Remove the line for this app + ynh_app_setting_delete --app=$YNH_APP_INSTANCE_NAME --key=ruby_version + + # Cleanup Ruby versions + ynh_cleanup_ruby +} + +# Remove no more needed versions of Ruby used by the app. +# +# This helper will check what Ruby version are no more required, +# and uninstall them +# If no app uses Ruby, rbenv will be also removed. +# +# usage: ynh_cleanup_ruby +ynh_cleanup_ruby () { + + # List required Ruby versions + local installed_apps=$(yunohost app list | grep -oP 'id: \K.*$') + local required_ruby_versions="" + for installed_app in $installed_apps + do + local installed_app_ruby_version=$(ynh_app_setting_get --app=$installed_app --key="ruby_version") + if [[ $installed_app_ruby_version ]] + then + required_ruby_versions="${installed_app_ruby_version}\n${required_ruby_versions}" + fi + done + + # Remove no more needed Ruby versions + local installed_ruby_versions=$(rbenv versions --bare --skip-aliases | grep -Ev '/') + for installed_ruby_version in $installed_ruby_versions + do + if ! `echo ${required_ruby_versions} | grep "${installed_ruby_version}" 1>/dev/null 2>&1` + then + ynh_print_info --message="Removing of Ruby-$installed_ruby_version" + $rbenv_install_dir/bin/rbenv uninstall --force $installed_ruby_version + fi + done + + # If none Ruby version is required + if [[ ! $required_ruby_versions ]] + then + # Remove rbenv environment configuration + ynh_print_info --message="Removing of rbenv-$rbenv_version" + ynh_secure_remove --file="$rbenv_install_dir" + ynh_secure_remove --file="/etc/profile.d/rbenv.sh" + fi +} diff --git a/tests.toml b/tests.toml new file mode 100644 index 0000000..1d77b27 --- /dev/null +++ b/tests.toml @@ -0,0 +1,24 @@ +test_format = 1.0 + +[default] + + # ------------ + # Tests to run + # ------------ + + exclude = ["install.subdir", "install.nourl", "install.multi", "change_url"] + # The test IDs to be used in only/exclude statements are: install.root, install.subdir, install.nourl, install.multi, backup_restore, upgrade, upgrade.someCommitId change_url + # NB: you should NOT need this except if you really have a good reason... + + + # ------------------------------- + # Default args to use for install + # ------------------------------- + + # Use defaults from manifest.toml + + # ------------------------------- + # Commits to test upgrade from + # ------------------------------- + + test_upgrade_from.9c7a5ae.name = "Upgrade from 2023.06.19~ynh1" From 2770969a101ece5ff5b3091c616eef9492735ad7 Mon Sep 17 00:00:00 2001 From: Tagada <36127788+Tagadda@users.noreply.github.com> Date: Thu, 22 Feb 2024 20:25:26 +0100 Subject: [PATCH 02/41] fix --- scripts/upgrade | 90 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 63 insertions(+), 27 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index 3abfe5e..26bd660 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -141,35 +141,40 @@ ynh_systemd_action --service_name=${app}-sidekiq --action="stop" --log_path=syst ynh_systemd_action --service_name=${app}-streaming --action="stop" --log_path=systemd --line_match="Stopped" #================================================= -# "REBUILD" THE APP (DEPLOY NEW SOURCES, RERUN NPM BUILD...) +# ADD SWAP IF NEEDED #================================================= -# Update Ruby and NodeJS -ynh_script_progression --message="Upgrading Ruby and NodeJS..." --weight=5 +ynh_script_progression --message="Adding swap if needed..." --weight=1 -ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$NODEJS_VERSION -ynh_exec_warn_less ynh_install_ruby --ruby_version=$RUBY_VERSION +total_memory=$(ynh_get_ram --total) +swap_needed=0 +if [ $total_memory -lt $memory_needed ]; then + # Need a minimum of 8Go of memory + swap_needed=$(($memory_needed - $total_memory)) +fi + +ynh_script_progression --message="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_exec_warn_less ynh_install_ruby --ruby_version=$ruby_version +ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$nodejs_version + +#================================================= +# "REBUILD" THE APP (DEPLOY NEW SOURCES, RERUN NPM BUILD...) #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= if [ "$upgrade_type" == "UPGRADE_APP" ] then - # Add swap if needed - total_memory=$(ynh_get_ram --total) - swap_needed=0 - - if [ $total_memory -lt $MEMORY_NEEDED ]; then - # Need a minimum of 2.5Go of memory - swap_needed=$(($MEMORY_NEEDED - $total_memory)) - - ynh_script_progression --message="Adding $swap_needed Mo to swap..." --weight=1 - ynh_add_swap --size=$swap_needed - fi - - # Update Glitch-Soc ynh_script_progression --message="Upgrading source files..." --weight=1 + # Download Mastodon ynh_setup_source --dest_dir="$install_dir/live" --keep="public/system/" chmod 750 "$install_dir" @@ -208,15 +213,15 @@ ynh_script_progression --message="Upgrading system configurations related to $ap ynh_add_nginx_config -ynh_add_systemd_config --service="$app-web" --template="web.service" -ynh_add_systemd_config --service="$app-sidekiq" --template="sidekiq.service" -ynh_add_systemd_config --service="$app-streaming" --template="streaming.service" - +# Create a dedicated systemd config +ynh_add_systemd_config --service="$app-web" --template="mastodon-web.service" 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_add_systemd_config +ynh_add_systemd_config --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" +yunohost service add "$app-streaming" --description="$app streaming service" ynh_add_config --template="../conf/cron" --destination="/etc/cron.d/$app" @@ -225,14 +230,45 @@ ynh_add_config --template="../conf/cron" --destination="/etc/cron.d/$app" #================================================= # UPDATE A CONFIG FILE #================================================= -ynh_script_progression --message="Updating a configuration file..." --weight=1 +ynh_script_progression --message="Updating a config file..." --weight=1 language="$(echo $language | head -c 2)" ynh_add_config --template="../conf/.env.production.sample" --destination="$config" + chmod 400 "$config" chown $app:$app "$config" +#================================================= +# BUILD ASSETS +#================================================= +ynh_script_progression --message="Building assets..." --weight=1 + +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 + 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 +popd + +#================================================= +# APPLY MIGRATIONS +#================================================= +ynh_script_progression --message="Applying migrations..." --weight=1 + +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 +popd + #================================================= # START SYSTEMD SERVICE #================================================= @@ -246,4 +282,4 @@ ynh_systemd_action --service_name=${app}-streaming --action="start" --log_path=s # END OF SCRIPT #================================================= -ynh_script_progression --message="Upgrade of $app completed" --weight=1 +ynh_script_progression --message="Upgrade of $app completed" --last From 196f5283f1fde597cb7eb87e543209e7df358dd5 Mon Sep 17 00:00:00 2001 From: Tagada <36127788+Tagadda@users.noreply.github.com> Date: Tue, 1 Aug 2023 03:10:33 +0200 Subject: [PATCH 03/41] woops --- scripts/install | 6 +++--- scripts/upgrade | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/scripts/install b/scripts/install index 77a109a..59c9eab 100644 --- a/scripts/install +++ b/scripts/install @@ -165,13 +165,13 @@ ynh_script_progression --message="Adding system configurations related to $app.. ynh_add_nginx_config # Create a dedicated systemd config -ynh_add_systemd_config --service="$app-web" --template="mastodon-web.service" +ynh_add_systemd_config --service="$app-web" --template="glitchsoc-web.service" yunohost service add "$app-web" --description="$app web service" -ynh_add_systemd_config --service="$app-sidekiq" --template="mastodon-sidekiq.service" +ynh_add_systemd_config --service="$app-sidekiq" --template="glitchsoc-sidekiq.service" yunohost service add "$app-sidekiq" --description="$app sidekiq service" -ynh_add_systemd_config --service="$app-streaming" --template="mastodon-streaming.service" +ynh_add_systemd_config --service="$app-streaming" --template="glitchsoc-streaming.service" yunohost service add "$app-streaming" --description="$app streaming service" # Create a cron file diff --git a/scripts/upgrade b/scripts/upgrade index 26bd660..60c476e 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -214,13 +214,13 @@ ynh_script_progression --message="Upgrading system configurations related to $ap ynh_add_nginx_config # Create a dedicated systemd config -ynh_add_systemd_config --service="$app-web" --template="mastodon-web.service" +ynh_add_systemd_config --service="$app-web" --template="glitchsoc-web.service" yunohost service add "$app-web" --description="$app web service" -ynh_add_systemd_config --service="$app-sidekiq" --template="mastodon-sidekiq.service" +ynh_add_systemd_config --service="$app-sidekiq" --template="glitchsoc-sidekiq.service" yunohost service add "$app-sidekiq" --description="$app sidekiq service" -ynh_add_systemd_config --service="$app-streaming" --template="mastodon-streaming.service" +ynh_add_systemd_config --service="$app-streaming" --template="glitchsoc-streaming.service" yunohost service add "$app-streaming" --description="$app streaming service" ynh_add_config --template="../conf/cron" --destination="/etc/cron.d/$app" From adead8f7a834455b07e45ff78ed46e13b19db471 Mon Sep 17 00:00:00 2001 From: Tagada <36127788+Tagadda@users.noreply.github.com> Date: Tue, 1 Aug 2023 03:36:12 +0200 Subject: [PATCH 04/41] fix --- conf/cron | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/conf/cron b/conf/cron index 2fcdff0..eb881cb 100644 --- a/conf/cron +++ b/conf/cron @@ -1,5 +1,5 @@ -@daily __APP__ cd __FINAL_PATH__/live && __YNH_RUBY_LOAD_PATH__ __LD_PRELOAD__ RAILS_ENV=production bin/tootctl media remove -@monthly __APP__ cd __FINAL_PATH__/live && __YNH_RUBY_LOAD_PATH__ __LD_PRELOAD__ RAILS_ENV=production bin/tootctl media remove-orphans -@monthly __APP__ cd __FINAL_PATH__/live && __YNH_RUBY_LOAD_PATH__ __LD_PRELOAD__ RAILS_ENV=production bin/tootctl accounts cull -@monthly __APP__ cd __FINAL_PATH__/live && __YNH_RUBY_LOAD_PATH__ __LD_PRELOAD__ RAILS_ENV=production bin/tootctl statuses remove -@monthly __APP__ cd __FINAL_PATH__/live && __YNH_RUBY_LOAD_PATH__ __LD_PRELOAD__ RAILS_ENV=production bin/tootctl preview_cards remove +@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 From 1d825936e1231554be33b52021e91014b56c6acf Mon Sep 17 00:00:00 2001 From: Tagada <36127788+Tagadda@users.noreply.github.com> Date: Tue, 1 Aug 2023 04:15:46 +0200 Subject: [PATCH 05/41] Use logrotate --- conf/glitchsoc-sidekiq.service | 3 ++- conf/glitchsoc-streaming.service | 3 ++- conf/glitchsoc-web.service | 3 ++- scripts/backup | 5 +++++ scripts/install | 5 +++++ scripts/remove | 3 +++ scripts/restore | 4 ++++ scripts/upgrade | 10 +++++----- 8 files changed, 28 insertions(+), 8 deletions(-) diff --git a/conf/glitchsoc-sidekiq.service b/conf/glitchsoc-sidekiq.service index ff72a14..0c2cfb9 100644 --- a/conf/glitchsoc-sidekiq.service +++ b/conf/glitchsoc-sidekiq.service @@ -13,7 +13,8 @@ Environment="MALLOC_ARENA_MAX=2" ExecStart=__RBENV_ROOT__/versions/__APP__/bin/bundle exec sidekiq -c 25 TimeoutSec=15 Restart=always -StandardError=syslog +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 diff --git a/conf/glitchsoc-streaming.service b/conf/glitchsoc-streaming.service index a5fcfa0..f63945e 100644 --- a/conf/glitchsoc-streaming.service +++ b/conf/glitchsoc-streaming.service @@ -13,7 +13,8 @@ Environment="__YNH_NODE_LOAD_PATH__" ExecStart=__YNH_NODE__ ./streaming TimeoutSec=15 Restart=always -StandardError=syslog +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 diff --git a/conf/glitchsoc-web.service b/conf/glitchsoc-web.service index 2b615dd..fbfb16b 100644 --- a/conf/glitchsoc-web.service +++ b/conf/glitchsoc-web.service @@ -13,7 +13,8 @@ ExecStart=__RBENV_ROOT__/versions/__APP__/bin/bundle exec puma -C config/puma.rb ExecReload=/bin/kill -SIGUSR1 $MAINPID TimeoutSec=15 Restart=always -StandardError=syslog +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 diff --git a/scripts/backup b/scripts/backup index 7df8f50..2cd6afd 100644 --- a/scripts/backup +++ b/scripts/backup @@ -29,6 +29,11 @@ ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= # SPECIFIC BACKUP +#================================================= +# BACKUP LOGROTATE +#================================================= +ynh_backup --src_path="/etc/logrotate.d/$app" + #================================================= # BACKUP SYSTEMD #================================================= diff --git a/scripts/install b/scripts/install index 59c9eab..c513e20 100644 --- a/scripts/install +++ b/scripts/install @@ -177,6 +177,11 @@ yunohost service add "$app-streaming" --description="$app streaming service" # Create a cron file ynh_add_config --template="../conf/cron" --destination="/etc/cron.d/$app" +# Use logrotate to manage application logfile(s) +mkdir /var/log/$app +chown $app:$app /var/log/$app +ynh_use_logrotate + #================================================= # GENERIC FINALIZATION #================================================= diff --git a/scripts/remove b/scripts/remove index 800687d..7df4fda 100644 --- a/scripts/remove +++ b/scripts/remove @@ -48,6 +48,9 @@ ynh_remove_nginx_config # Remove a cron file ynh_secure_remove --file="/etc/cron.d/$app" +# Remote logrotate config +ynh_remove_logrotate + # Remove metapackage and its dependencies ynh_remove_ruby ynh_remove_nodejs diff --git a/scripts/restore b/scripts/restore index c69371b..eba6322 100644 --- a/scripts/restore +++ b/scripts/restore @@ -96,6 +96,10 @@ yunohost service add "$app-streaming" --description="$app streaming service" ynh_restore_file --origin_path="/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" + #================================================= # GENERIC FINALIZATION #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index 60c476e..42e5431 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -120,11 +120,6 @@ if [[ $db_name = *'_production' ]]; then ynh_app_setting_set --app=$app --key=db_name --value=$db_name fi -if ynh_compare_current_package_version --comparison lt --version 2023.06.19~ynh2 -then - ynh_remove_logrotate -fi - # If service doesn't exist, create it if [[ -z "$service" ]]; then # Set `service` settings to support `yunohost app shell` command @@ -225,6 +220,11 @@ yunohost service add "$app-streaming" --description="$app streaming service" ynh_add_config --template="../conf/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 + #================================================= # RECONFIGURE THE APP (UPDATE CONF, APPLY MIGRATIONS...) #================================================= From e64300fdb23be40728c77a1e7b03d9321a3c3f53 Mon Sep 17 00:00:00 2001 From: Tagada <36127788+Tagadda@users.noreply.github.com> Date: Tue, 1 Aug 2023 04:22:15 +0200 Subject: [PATCH 06/41] Drop the api_permission install question --- manifest.toml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/manifest.toml b/manifest.toml index e455548..c6cf1ce 100644 --- a/manifest.toml +++ b/manifest.toml @@ -42,12 +42,6 @@ ram.runtime = "1G" type = "group" default = "visitors" - [install.init_api_permission] - help.en = "visitors group is needed to be able to use thrid party clients." - help.fr = "Le groupe visitors est nécessaire pour pouvoir utiliser des clients tiers." - type = "group" - default = "visitors" - [install.language] ask.en = "Choose the application language" ask.fr = "Choisissez la langue de l'application" From a8242bbb6c45d21642eac8a9616884ecef380605 Mon Sep 17 00:00:00 2001 From: Tagada <36127788+Tagadda@users.noreply.github.com> Date: Tue, 1 Aug 2023 04:27:26 +0200 Subject: [PATCH 07/41] Drop clustering in streaming API --- conf/glitchsoc-streaming.service | 1 - 1 file changed, 1 deletion(-) diff --git a/conf/glitchsoc-streaming.service b/conf/glitchsoc-streaming.service index f63945e..bc5b00e 100644 --- a/conf/glitchsoc-streaming.service +++ b/conf/glitchsoc-streaming.service @@ -8,7 +8,6 @@ User=__APP__ 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 TimeoutSec=15 From 125cfce394e786f3f93fce30b06be0a64a7bc9b6 Mon Sep 17 00:00:00 2001 From: Tagada <36127788+Tagadda@users.noreply.github.com> Date: Thu, 22 Feb 2024 19:49:20 +0100 Subject: [PATCH 08/41] Fix systemd_action log_path --- scripts/install | 6 +++--- scripts/restore | 6 +++--- scripts/upgrade | 12 ++++++------ 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/scripts/install b/scripts/install index c513e20..a8f593c 100644 --- a/scripts/install +++ b/scripts/install @@ -189,9 +189,9 @@ ynh_use_logrotate #================================================= ynh_script_progression --message="Starting all systemd services..." --weight=1 -ynh_systemd_action --service_name=${app}-web --action="start" --log_path=systemd --line_match="Listening on" -ynh_systemd_action --service_name=${app}-sidekiq --action="start" --log_path=systemd --line_match="Schedules Loaded" -ynh_systemd_action --service_name=${app}-streaming --action="start" --log_path=systemd --line_match="Streaming API now listening on" +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 on" #================================================= # END OF SCRIPT diff --git a/scripts/restore b/scripts/restore index eba6322..42e5684 100644 --- a/scripts/restore +++ b/scripts/restore @@ -107,9 +107,9 @@ ynh_restore_file --origin_path="/etc/logrotate.d/$app" #================================================= ynh_script_progression --message="Reloading NGINX web server and $app's service..." --weight=1 -ynh_systemd_action --service_name=${app}-web --action="start" --log_path=systemd --line_match="Listening on" -ynh_systemd_action --service_name=${app}-sidekiq --action="start" --log_path=systemd --line_match="Schedules Loaded" -ynh_systemd_action --service_name=${app}-streaming --action="start" --log_path=systemd --line_match="Streaming API now listening on" +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 on" ynh_systemd_action --service_name=nginx --action=reload diff --git a/scripts/upgrade b/scripts/upgrade index 42e5431..7773093 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -131,9 +131,9 @@ fi #================================================= ynh_script_progression --message="Stopping a systemd service..." --weight=1 -ynh_systemd_action --service_name=${app}-web --action="stop" --log_path=systemd --line_match="Stopped" -ynh_systemd_action --service_name=${app}-sidekiq --action="stop" --log_path=systemd --line_match="Stopped" -ynh_systemd_action --service_name=${app}-streaming --action="stop" --log_path=systemd --line_match="Stopped" +ynh_systemd_action --service_name=${app}-web --action="stop" --log_path=/var/log/$app/$app-web.log --line_match="Stopped" +ynh_systemd_action --service_name=${app}-sidekiq --action="stop" --log_path=/var/log/$app/$app-sidekiq.log --line_match="Stopped" +ynh_systemd_action --service_name=${app}-streaming --action="stop" --log_path=/var/log/$app/$app-streaming.log --line_match="Stopped" #================================================= # ADD SWAP IF NEEDED @@ -274,9 +274,9 @@ popd #================================================= ynh_script_progression --message="Starting a systemd service..." --weight=1 -ynh_systemd_action --service_name=${app}-web --action="start" --log_path=systemd --line_match="Listening on" -ynh_systemd_action --service_name=${app}-sidekiq --action="start" --log_path=systemd --line_match="Schedules Loaded" -ynh_systemd_action --service_name=${app}-streaming --action="start" --log_path=systemd --line_match="Streaming API now listening on" +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 on" #================================================= # END OF SCRIPT From e38b775d677172421715b6080a61313d99cff4a6 Mon Sep 17 00:00:00 2001 From: Tagada <36127788+Tagadda@users.noreply.github.com> Date: Thu, 22 Feb 2024 19:50:58 +0100 Subject: [PATCH 09/41] fix streaming service line_match --- scripts/restore | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/scripts/restore b/scripts/restore index 42e5684..3ecee95 100644 --- a/scripts/restore +++ b/scripts/restore @@ -103,7 +103,7 @@ ynh_restore_file --origin_path="/etc/logrotate.d/$app" #================================================= # GENERIC FINALIZATION #================================================= -# RELOAD NGINX AND PHP-FPM OR THE APP SERVICE +# RELOAD THE APP SERVICE #================================================= ynh_script_progression --message="Reloading NGINX web server and $app's service..." --weight=1 @@ -111,8 +111,6 @@ ynh_systemd_action --service_name=${app}-web --action="start" --log_path=/var/lo 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 on" -ynh_systemd_action --service_name=nginx --action=reload - #================================================= # END OF SCRIPT #================================================= From fa4be8e1e29de84d79215855747c47bb1c2e2a42 Mon Sep 17 00:00:00 2001 From: Tagada <36127788+Tagadda@users.noreply.github.com> Date: Tue, 1 Aug 2023 05:16:27 +0200 Subject: [PATCH 10/41] Fix config_panel dir --- config_panel.toml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/config_panel.toml b/config_panel.toml index 6688686..0f4168f 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -11,68 +11,68 @@ services = ["__APP__-web", "__APP__-sidekiq", "__APP__-streaming"] ask = "Maximum allowed character count in a toot" type = "number" example = "500" - bind = ":__FINALPATH__/live/.env.production" + bind = ":__INSTALL_DIR__/live/.env.production" [main.customization.max_pinned_toots] ask = "Maximum number of pinned posts" type = "number" example = "5" - bind = ":__FINALPATH__/live/.env.production" + bind = ":__INSTALL_DIR__/live/.env.production" [main.customization.max_bio_chars] ask = "Maximum allowed bio characters" type = "number" example = "500" - bind = ":__FINALPATH__/live/.env.production" + bind = ":__INSTALL_DIR__/live/.env.production" [main.customization.max_profile_fields] ask = "Maximim number of profile fields allowed" type = "number" example = "4" - bind = ":__FINALPATH__/live/.env.production" + bind = ":__INSTALL_DIR__/live/.env.production" [main.customization.max_display_name_chars] ask = "Maximum allowed display name characters" type = "number" example = "30" - bind = ":__FINALPATH__/live/.env.production" + bind = ":__INSTALL_DIR__/live/.env.production" [main.customization.max_poll_options] ask = "Maximum allowed poll options" type = "number" example = "5" - bind = ":__FINALPATH__/live/.env.production" + bind = ":__INSTALL_DIR__/live/.env.production" [main.customization.max_poll_option_chars] ask = "Maximum allowed poll option characters" type = "number" example = "100" - bind = ":__FINALPATH__/live/.env.production" + bind = ":__INSTALL_DIR__/live/.env.production" [main.customization.max_image_size] ask = "Maximum image upload size" help = "in bytes" type = "number" example = "8388608" - bind = ":__FINALPATH__/live/.env.production" + bind = ":__INSTALL_DIR__/live/.env.production" [main.customization.max_video_size] ask = "Maximum video and audio upload sizes" help = "in bytes" type = "number" example = "41943040" - bind = ":__FINALPATH__/live/.env.production" + bind = ":__INSTALL_DIR__/live/.env.production" [main.customization.max_emoji_size] ask = "Maximum custom emoji file sizes" help = "in bytes" type = "number" example = "51200" - bind = ":__FINALPATH__/live/.env.production" + bind = ":__INSTALL_DIR__/live/.env.production" [main.customization.max_remote_emoji_size] ask = "Maximum remote custom emoji file sizes" help = "in bytes" type = "number" example = "204800" - bind = ":__FINALPATH__/live/.env.production" + bind = ":__INSTALL_DIR__/live/.env.production" From 4fc51b25725c564da7443b46c6a445f6ba6967f1 Mon Sep 17 00:00:00 2001 From: Tagada <36127788+Tagadda@users.noreply.github.com> Date: Tue, 1 Aug 2023 05:30:58 +0200 Subject: [PATCH 11/41] be closer to mastodon_ynh --- conf/cron | 2 ++ manifest.toml | 2 +- scripts/install | 4 ++-- scripts/upgrade | 4 +++- tests.toml | 2 +- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/conf/cron b/conf/cron index eb881cb..02b2a6a 100644 --- a/conf/cron +++ b/conf/cron @@ -1,3 +1,5 @@ +# 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 diff --git a/manifest.toml b/manifest.toml index c6cf1ce..3f86d31 100644 --- a/manifest.toml +++ b/manifest.toml @@ -45,7 +45,7 @@ ram.runtime = "1G" [install.language] ask.en = "Choose the application language" ask.fr = "Choisissez la langue de l'application" - type = "string" + type = "select" choices = ["en_EN", "fr_FR"] default = "fr_FR" diff --git a/scripts/install b/scripts/install index a8f593c..66c18a2 100644 --- a/scripts/install +++ b/scripts/install @@ -11,7 +11,7 @@ source ynh_install_ruby__2 source ynh_add_swap source /usr/share/yunohost/helpers -admin_mail=$(ynh_user_get_info $admin 'mail') +admin_mail=$(ynh_user_get_info --username=$admin --key=mail) # Initialize config_panel settings :< max_toot_chars="500" @@ -197,4 +197,4 @@ ynh_systemd_action --service_name=${app}-streaming --action="start" --log_path=/ # END OF SCRIPT #================================================= -ynh_script_progression --message="Installation of $app completed" --weight=1 +ynh_script_progression --message="Installation of $app completed" --last diff --git a/scripts/upgrade b/scripts/upgrade index 7773093..9241311 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -7,10 +7,12 @@ #================================================= source _common.sh +source ynh_install_ruby__2 +source ynh_add_swap source /usr/share/yunohost/helpers -config="$install_dir/live/.env.production" upgrade_type=$(ynh_check_app_version_changed) +config="$install_dir/live/.env.production" #================================================= # STANDARD UPGRADE STEPS diff --git a/tests.toml b/tests.toml index 1d77b27..19c9c1f 100644 --- a/tests.toml +++ b/tests.toml @@ -6,7 +6,7 @@ test_format = 1.0 # Tests to run # ------------ - exclude = ["install.subdir", "install.nourl", "install.multi", "change_url"] + exclude = ["install.multi", "change_url"] # The test IDs to be used in only/exclude statements are: install.root, install.subdir, install.nourl, install.multi, backup_restore, upgrade, upgrade.someCommitId change_url # NB: you should NOT need this except if you really have a good reason... From c4841f187a893d519dcdb33af31d7b9c5c18e619 Mon Sep 17 00:00:00 2001 From: Tagada <36127788+Tagadda@users.noreply.github.com> Date: Tue, 1 Aug 2023 05:34:42 +0200 Subject: [PATCH 12/41] Fix mkdir failing if /var/log/mastodon already exists --- scripts/install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install b/scripts/install index 66c18a2..f8ac7d8 100644 --- a/scripts/install +++ b/scripts/install @@ -178,7 +178,7 @@ yunohost service add "$app-streaming" --description="$app streaming service" ynh_add_config --template="../conf/cron" --destination="/etc/cron.d/$app" # Use logrotate to manage application logfile(s) -mkdir /var/log/$app +mkdir -p /var/log/$app chown $app:$app /var/log/$app ynh_use_logrotate From 3ce283a8d15095847f79945ddaebc46b7ee42065 Mon Sep 17 00:00:00 2001 From: Tagada <36127788+Tagadda@users.noreply.github.com> Date: Tue, 1 Aug 2023 10:12:18 +0200 Subject: [PATCH 13/41] fix --- scripts/upgrade | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index 9241311..76caf67 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -111,17 +111,6 @@ if [ -z "$max_remote_emoji_size" ]; then ynh_app_setting_set --app=$app --key=max_remote_emoji_size --value=$max_remote_emoji_size fi -# Rename the database to match packaging v2 defaults db_name (`$app_production` to `$app`) -if [[ $db_name = *'_production' ]]; then - ynh_systemd_action --service_name=${app}-web --action="stop" --log_path=systemd --line_match="Stopped" - ynh_systemd_action --service_name=${app}-sidekiq --action="stop" --log_path=systemd --line_match="Stopped" - ynh_systemd_action --service_name=${app}-streaming --action="stop" --log_path=systemd --line_match="Stopped" - - ynh_psql_execute_as_root --sql="ALTER DATABASE $db_name RENAME TO $app;" - db_name=$app - ynh_app_setting_set --app=$app --key=db_name --value=$db_name -fi - # If service doesn't exist, create it if [[ -z "$service" ]]; then # Set `service` settings to support `yunohost app shell` command @@ -137,6 +126,13 @@ ynh_systemd_action --service_name=${app}-web --action="stop" --log_path=/var/log ynh_systemd_action --service_name=${app}-sidekiq --action="stop" --log_path=/var/log/$app/$app-sidekiq.log --line_match="Stopped" ynh_systemd_action --service_name=${app}-streaming --action="stop" --log_path=/var/log/$app/$app-streaming.log --line_match="Stopped" +# Rename the database to match packaging v2 defaults db_name (`$app_production` to `$app`) +if [[ $db_name = *'_production' ]]; then + ynh_psql_execute_as_root --sql="ALTER DATABASE $db_name RENAME TO $app;" + db_name=$app + ynh_app_setting_set --app=$app --key=db_name --value=$db_name +fi + #================================================= # ADD SWAP IF NEEDED #================================================= @@ -210,6 +206,8 @@ ynh_script_progression --message="Upgrading system configurations related to $ap ynh_add_nginx_config +ynh_use_ruby + # Create a dedicated systemd config ynh_add_systemd_config --service="$app-web" --template="glitchsoc-web.service" yunohost service add "$app-web" --description="$app web service" From c5159a3a03d07997405a0f784813fded7be8240f Mon Sep 17 00:00:00 2001 From: lapineige Date: Mon, 21 Aug 2023 17:18:32 +0200 Subject: [PATCH 14/41] remove CPE/fund info Co-authored-by: Alexandre Aubin --- manifest.toml | 2 -- 1 file changed, 2 deletions(-) diff --git a/manifest.toml b/manifest.toml index 3f86d31..0d4b12f 100644 --- a/manifest.toml +++ b/manifest.toml @@ -13,8 +13,6 @@ maintainers = ["Tagada"] license = "AGPL-3.0-or-later" website = "https://glitch-soc.github.io/docs/" code = "https://github.com/glitch-soc/mastodon" -cpe = "???" # XXX: No CPE yet... The CPE may be obtained by searching here: https://nvd.nist.gov/products/cpe/search -fund = "???" # XXX: Nothing yet... [integration] yunohost = ">= 11.1" From 2402bf4b93ef055440fffa13aaa52ea62e7b8e66 Mon Sep 17 00:00:00 2001 From: lapineige Date: Mon, 21 Aug 2023 17:19:05 +0200 Subject: [PATCH 15/41] wording Co-authored-by: Alexandre Aubin --- manifest.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.toml b/manifest.toml index 0d4b12f..36b4f25 100644 --- a/manifest.toml +++ b/manifest.toml @@ -35,7 +35,7 @@ ram.runtime = "1G" type = "user" [install.init_main_permission] - help.en = "visitors group is needed for federation." + help.en = "Visitors group is needed for federation." help.fr = "Le groupe visitors est nécessaire pour la fédération." type = "group" default = "visitors" From f3f9e17d9f5d3f24f18b4dbc4c97cd01cd02f54f Mon Sep 17 00:00:00 2001 From: lapineige Date: Mon, 21 Aug 2023 17:19:29 +0200 Subject: [PATCH 16/41] Update doc/PRE_INSTALL.md Co-authored-by: Alexandre Aubin --- doc/PRE_INSTALL.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/PRE_INSTALL.md b/doc/PRE_INSTALL.md index ed7e17c..6db9ea6 100644 --- a/doc/PRE_INSTALL.md +++ b/doc/PRE_INSTALL.md @@ -1,10 +1,10 @@ ## Important points to read before installing 1. **Glitch-Soc** require a dedicated **root domain**, eg. glitchsoc.domain.tld -1. You can't change the domain once installed. -1. The user choosen during the installation is automatically created in Glitch-Soc 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 Glitch-Soc, 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. +2. You can't change the domain once installed. +3. The user choosen during the installation is automatically created in Glitch-Soc with admin rights +4. At the end of the installation a mail is sent to the user with the automatically generated password +5. It seems important to close the inscriptions for your Glitch-Soc, 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. ## Using *screen* in case of disconnect From 1460050ef8443d978bdc353e5d27f427af9d64c7 Mon Sep 17 00:00:00 2001 From: lapineige Date: Mon, 21 Aug 2023 17:19:48 +0200 Subject: [PATCH 17/41] Update doc/PRE_INSTALL_fr.md Co-authored-by: Alexandre Aubin --- doc/PRE_INSTALL_fr.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/PRE_INSTALL_fr.md b/doc/PRE_INSTALL_fr.md index 8ed9e10..a707dde 100644 --- a/doc/PRE_INSTALL_fr.md +++ b/doc/PRE_INSTALL_fr.md @@ -1,10 +1,10 @@ ## Points importants à lire avant l'installation 1. **Glitch-Soc** nécessite un **nom de domaine** dédié, par exemple : glitchsoc.domain.tld -1. Il est impossible de changer le nom de domaine après l'installation. -1. L'utilisateur sélectionné pendant l'installation sera créé automatiquement dans Glitch-Soc avec des droits d'administration. -1. À la fin de l'installation, un mail est envoyé à cet utilisateur avec un mot de passe généré automatiquement. -1. Pour que votre instance Glitch-Soc reste privée, il est important de fermer les inscriptions. Nous vous invitons à bloquer les instances distantes indésirables depuis l'interface d'administration. Vous pouvez également ajouter un texte sur votre page d'accueil dans l'administration. +2. Il est impossible de changer le nom de domaine après l'installation. +3. L'utilisateur sélectionné pendant l'installation sera créé automatiquement dans Glitch-Soc avec des droits d'administration. +4. À la fin de l'installation, un mail est envoyé à cet utilisateur avec un mot de passe généré automatiquement. +5. Pour que votre instance Glitch-Soc reste privée, il est important de fermer les inscriptions. Nous vous invitons à bloquer les instances distantes indésirables depuis l'interface d'administration. Vous pouvez également ajouter un texte sur votre page d'accueil dans l'administration. ## Utilisation de *screen* en cas de déconnexion From 52ee9ed346e4a38d985f016402d0b738578824c7 Mon Sep 17 00:00:00 2001 From: lapineige Date: Mon, 21 Aug 2023 17:20:35 +0200 Subject: [PATCH 18/41] Update doc/PRE_INSTALL.md Co-authored-by: Alexandre Aubin --- doc/PRE_INSTALL.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/PRE_INSTALL.md b/doc/PRE_INSTALL.md index 6db9ea6..4c58fe7 100644 --- a/doc/PRE_INSTALL.md +++ b/doc/PRE_INSTALL.md @@ -8,6 +8,10 @@ ## Using *screen* in case of disconnect + +L'installation de Glitch-Soc peut être longue, selon les performances du serveur. Pour éviter que le processus soit interrompu par une déconnexion, on peut utiliser `screen`. + +Glitch-Soc's install can be long, depending on the server performance. To prevent the process from being stopped because of disconnect, you can use a `screen` session ``` $ sudo apt-get install screen $ screen From 30a2ab809432e733d0b0b303f29e727c0c74ce5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sat, 28 Oct 2023 11:56:38 +0200 Subject: [PATCH 19/41] Update manifest.toml --- manifest.toml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/manifest.toml b/manifest.toml index 36b4f25..8f20e52 100644 --- a/manifest.toml +++ b/manifest.toml @@ -15,7 +15,7 @@ website = "https://glitch-soc.github.io/docs/" code = "https://github.com/glitch-soc/mastodon" [integration] -yunohost = ">= 11.1" +yunohost = ">= 11.2" architectures = "all" multi_instance = true ldap = true @@ -26,12 +26,9 @@ ram.runtime = "1G" [install] [install.domain] - # this is a generic question - ask strings are automatically handled by Yunohost's core type = "domain" - full_domain = true [install.admin] - # this is a generic question - ask strings are automatically handled by Yunohost's core type = "user" [install.init_main_permission] From c9afff12089f0f9589e5f27da6b5e84d02b1d451 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sat, 28 Oct 2023 14:18:55 +0200 Subject: [PATCH 20/41] fix --- scripts/upgrade | 32 ++++++++++++++++---------------- tests.toml | 9 --------- 2 files changed, 16 insertions(+), 25 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index 76caf67..9252fad 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -25,7 +25,7 @@ ynh_script_progression --message="Ensuring downward compatibility..." --weight=1 ynh_app_setting_delete --app=$app --key=paperclip_secret # If secret_key_base doesn't exist, retrieve it or create it -if [[ -z "$secret_key_base" ]]; then +if [[ -z "${secret_key_base:-}" ]]; then secret_key_base=$(grep -oP "SECRET_KEY_BASE=\K\w+" $config) if [[ -z "$secret_key_base" ]]; then secret_key_base=$(ynh_string_random --length=128) @@ -34,7 +34,7 @@ if [[ -z "$secret_key_base" ]]; then fi # If otp_secret doesn't exist, retrieve it or create it -if [[ -z "$otp_secret" ]]; then +if [[ -z "${otp_secret:-}" ]]; then otp_secret=$(grep -oP "OTP_SECRET=\K\w+" $config) if [[ -z "$otp_secret" ]]; then otp_secret=$(ynh_string_random --length=128) @@ -43,7 +43,7 @@ if [[ -z "$otp_secret" ]]; then fi # If vapid_private_key doesn't exist, retrieve it or create it -if [[ -z "$vapid_private_key" ]]; then +if [[ -z "${vapid_private_key:-}" ]]; then vapid_private_key=$(grep -oP "VAPID_PRIVATE_KEY=\K.+" $config) vapid_public_key=$(grep -oP "VAPID_PUBLIC_KEY=\K.+" $config) ynh_app_setting_set "$app" vapid_private_key "$vapid_private_key" @@ -51,68 +51,68 @@ if [[ -z "$vapid_private_key" ]]; then fi # If redis_namespace doesn't exist, create it -if [[ -z "$redis_namespace" ]]; then +if [[ -z "${redis_namespace:-}" ]]; then redis_namespace=${app}_production ynh_app_setting_set --app=$app --key=redis_namespace --value=$redis_namespace fi -if [ -z "$max_toot_chars" ]; then +if [ -z "${max_toot_chars:-}" ]; then max_toot_chars="500" ynh_app_setting_set --app=$app --key=max_toot_chars --value=$max_toot_chars fi -if [ -z "$max_pinned_toots" ]; then +if [ -z "${max_pinned_toots:-}" ]; then max_pinned_toots="5" ynh_app_setting_set --app=$app --key=max_pinned_toots --value=$max_pinned_toots fi -if [ -z "$max_bio_chars" ]; then +if [ -z "${max_bio_chars:-}" ]; then max_bio_chars="500" ynh_app_setting_set --app=$app --key=max_bio_chars --value=$max_bio_chars fi -if [ -z "$max_profile_fields" ]; then +if [ -z "${max_profile_fields:-}" ]; then max_profile_fields="4" ynh_app_setting_set --app=$app --key=max_profile_fields --value=$max_profile_fields fi -if [ -z "$max_display_name_chars" ]; then +if [ -z "${max_display_name_chars:-}" ]; then max_display_name_chars="30" ynh_app_setting_set --app=$app --key=max_display_name_chars --value=$max_display_name_chars fi -if [ -z "$max_poll_options" ]; then +if [ -z "${max_poll_options:-}" ]; then max_poll_options="5" ynh_app_setting_set --app=$app --key=max_poll_options --value=$max_poll_options fi -if [ -z "$max_poll_option_chars" ]; then +if [ -z "${max_poll_option_chars:-}" ]; then max_poll_option_chars="100" ynh_app_setting_set --app=$app --key=max_poll_option_chars --value=$max_poll_option_chars fi -if [ -z "$max_image_size" ]; then +if [ -z "${max_image_size:-}" ]; then max_image_size="8388608" ynh_app_setting_set --app=$app --key=max_image_size --value=$max_image_size fi -if [ -z "$max_video_size" ]; then +if [ -z "${max_video_size:-}" ]; then max_video_size="41943040" ynh_app_setting_set --app=$app --key=max_video_size --value=$max_video_size fi -if [ -z "$max_emoji_size" ]; then +if [ -z "${max_emoji_size:-}" ]; then max_emoji_size="51200" ynh_app_setting_set --app=$app --key=max_emoji_size --value=$max_emoji_size fi -if [ -z "$max_remote_emoji_size" ]; then +if [ -z "${max_remote_emoji_size:-}" ]; then max_remote_emoji_size="204800" ynh_app_setting_set --app=$app --key=max_remote_emoji_size --value=$max_remote_emoji_size fi # If service doesn't exist, create it -if [[ -z "$service" ]]; then +if [[ -z "${service:-}" ]]; then # Set `service` settings to support `yunohost app shell` command ynh_app_setting_set --app="$app" --key=service --value="$app-web.service" fi diff --git a/tests.toml b/tests.toml index 19c9c1f..9c9b985 100644 --- a/tests.toml +++ b/tests.toml @@ -7,15 +7,6 @@ test_format = 1.0 # ------------ exclude = ["install.multi", "change_url"] - # The test IDs to be used in only/exclude statements are: install.root, install.subdir, install.nourl, install.multi, backup_restore, upgrade, upgrade.someCommitId change_url - # NB: you should NOT need this except if you really have a good reason... - - - # ------------------------------- - # Default args to use for install - # ------------------------------- - - # Use defaults from manifest.toml # ------------------------------- # Commits to test upgrade from From 44211008b78d50d0ec749f2beba4981e23169da7 Mon Sep 17 00:00:00 2001 From: eric_G <46165813+ericgaspar@users.noreply.github.com> Date: Sat, 28 Oct 2023 20:19:22 +0200 Subject: [PATCH 21/41] Update doc/ADMIN.md Co-authored-by: Alexandre Aubin <4533074+alexAubin@users.noreply.github.com> --- doc/ADMIN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/ADMIN.md b/doc/ADMIN.md index 54d9527..ab18717 100644 --- a/doc/ADMIN.md +++ b/doc/ADMIN.md @@ -1,6 +1,6 @@ ## Administrate with tooctl -`$ (cd /var/www/glitchsoc/live && sudo -u glitchsoc RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl --help)` +`$ (cd __INSTALL_DIR__/live && sudo -u __APP__ RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl --help)` ## Update From 3a1f48f0ce4ae79a2f5e2aafbde5ff39d2d9bef7 Mon Sep 17 00:00:00 2001 From: eric_G <46165813+ericgaspar@users.noreply.github.com> Date: Sat, 28 Oct 2023 20:19:45 +0200 Subject: [PATCH 22/41] Update doc/ADMIN.md Co-authored-by: Alexandre Aubin <4533074+alexAubin@users.noreply.github.com> --- doc/ADMIN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/ADMIN.md b/doc/ADMIN.md index ab18717..942bb7c 100644 --- a/doc/ADMIN.md +++ b/doc/ADMIN.md @@ -9,7 +9,7 @@ See [tutorial](https://www.howtogeek.com/662422/how-to-use-linuxs-screen-command ``` $ screen -$ sudo yunohost app upgrade glitchsoc +$ sudo yunohost app upgrade __APP__ ``` ## Backups From 754fe281b0cca23343913cfe5d01dc01951c412f Mon Sep 17 00:00:00 2001 From: eric_G <46165813+ericgaspar@users.noreply.github.com> Date: Sat, 28 Oct 2023 20:19:58 +0200 Subject: [PATCH 23/41] Update doc/ADMIN.md Co-authored-by: Alexandre Aubin <4533074+alexAubin@users.noreply.github.com> --- doc/ADMIN.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/ADMIN.md b/doc/ADMIN.md index 942bb7c..e72082c 100644 --- a/doc/ADMIN.md +++ b/doc/ADMIN.md @@ -19,14 +19,14 @@ You could consider cleaning up your local cache first as otherwise your backup w To check your space usage, on a command line run: -`$ sudo cd /var/www/glitchsoc/live && sudo -u glitchsoc RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl media usage` +`$ sudo cd __INSTALL_DIR__/live && sudo -u __APP__ RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl media usage` If your cache is too big to backup, you can run the following command to clean up Attachments (the first line). Substitute X by the number of days you want to keep, e.g. 1 day. All older images will be deleted but will be refetched from the original server if necessary. First dry-run to see how much space is freed up (without actually removing): -`$ sudo cd /var/www/glitchsoc/live && sudo -u glitchsoc RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl media remove --days=X --dry-run` +`$ sudo cd __INSTALL_DIR__/live && sudo -u __APP__ RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl media remove --days=X --dry-run` If all looks good commit the cleanup: -`$ sudo cd /var/www/glitchsoc/live && sudo -u glitchsoc RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl media remove --days=X ` +`$ sudo cd __INSTALL_DIR__/live && sudo -u __APP__ RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl media remove --days=X ` From 820a34a1fbfb03c3e67e3111035f0e083317ad2e Mon Sep 17 00:00:00 2001 From: eric_G <46165813+ericgaspar@users.noreply.github.com> Date: Sat, 28 Oct 2023 20:20:05 +0200 Subject: [PATCH 24/41] Update doc/ADMIN_fr.md Co-authored-by: Alexandre Aubin <4533074+alexAubin@users.noreply.github.com> --- doc/ADMIN_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/ADMIN_fr.md b/doc/ADMIN_fr.md index cb9f259..856a7c0 100644 --- a/doc/ADMIN_fr.md +++ b/doc/ADMIN_fr.md @@ -1,6 +1,6 @@ ## Administration avec tooctl -`$ cd /var/www/glitchsoc/live && sudo -u glitchsoc RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl --help` +`$ cd __INSTALL_DIR__/live && sudo -u __APP__ RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl --help` ## Mise à jour From 27c3b4f98d6fdb7a26aeb571b48d55dc214ffec2 Mon Sep 17 00:00:00 2001 From: eric_G <46165813+ericgaspar@users.noreply.github.com> Date: Sat, 28 Oct 2023 20:20:20 +0200 Subject: [PATCH 25/41] Update scripts/install Co-authored-by: Alexandre Aubin <4533074+alexAubin@users.noreply.github.com> --- scripts/install | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/install b/scripts/install index f8ac7d8..10d8064 100644 --- a/scripts/install +++ b/scripts/install @@ -25,7 +25,6 @@ max_image_size="8388608" max_video_size="41943040" max_emoji_size="51200" max_remote_emoji_size="204800" -ynh_app_setting_set --app=$app --key=language --value=$language ynh_app_setting_set --app=$app --key=max_toot_chars --value=$max_toot_chars ynh_app_setting_set --app=$app --key=max_pinned_toots --value=$max_pinned_toots ynh_app_setting_set --app=$app --key=max_bio_chars --value=$max_bio_chars From 4800a7dd766866b817e4f9d778973c1d80b6daf0 Mon Sep 17 00:00:00 2001 From: eric_G <46165813+ericgaspar@users.noreply.github.com> Date: Sat, 28 Oct 2023 20:20:32 +0200 Subject: [PATCH 26/41] Update doc/ADMIN_fr.md Co-authored-by: Alexandre Aubin <4533074+alexAubin@users.noreply.github.com> --- doc/ADMIN_fr.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/ADMIN_fr.md b/doc/ADMIN_fr.md index 856a7c0..a22c8f2 100644 --- a/doc/ADMIN_fr.md +++ b/doc/ADMIN_fr.md @@ -19,12 +19,12 @@ Vous devriez réfléchir à vider votre cache local avant de faire une sauvegard Pour vérifier l'utilisation du stockage, en ligne de commande utilisez : -`$ sudo cd /var/www/glitchsoc/live && sudo -u glitchsoc RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl media usage` +`$ sudo cd __INSTALL_DIR__/live && sudo -u __APP__ RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl media usage` Si le cache est trop gros pour être sauvegardé, vous pouvez lancer la commande suivante pour en supprimer les médias attachés. Changez `X` par le nombre de cache à conserver, par ex. 1 jour. Tous les médias plus anciens seront supprimés, mais ils pourront être rechargé du serveur d'origine si nécessaire. En premier faite un essai à blanc pour voir combien de place sera libérée (sans rien supprimer): -`$ sudo cd /var/www/glitchsoc/live && sudo -u glitchsoc RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl media remove --days=X --dry-run` +`$ sudo cd __INSTALL_DIR__/live && sudo -u __APP__ RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl media remove --days=X --dry-run` Si cela semble bon, effectuez le nettoyage : -`$ sudo cd /var/www/glitchsoc/live && sudo -u glitchsoc RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl media remove --days=X ` +`$ sudo cd __INSTALL_DIR__/live && sudo -u __APP__ RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl media remove --days=X ` From 3daa8f75c25ff58ef3ba90eee720eecdcf3bca4a Mon Sep 17 00:00:00 2001 From: eric_G <46165813+ericgaspar@users.noreply.github.com> Date: Sat, 28 Oct 2023 20:20:42 +0200 Subject: [PATCH 27/41] Update doc/ADMIN_fr.md Co-authored-by: Alexandre Aubin <4533074+alexAubin@users.noreply.github.com> --- doc/ADMIN_fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/ADMIN_fr.md b/doc/ADMIN_fr.md index a22c8f2..7d73436 100644 --- a/doc/ADMIN_fr.md +++ b/doc/ADMIN_fr.md @@ -9,7 +9,7 @@ Consultez ce [tutoriel](https://www.howtogeek.com/662422/how-to-use-linuxs-scree ``` $ screen -$ sudo yunohost app upgrade glitchsoc +$ sudo yunohost app upgrade __APP__ ``` ## Sauvegardes From 8d2b32216717e00f541b6757c056d817a7ad42a4 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <4533074+alexAubin@users.noreply.github.com> Date: Sat, 2 Dec 2023 23:39:48 +0100 Subject: [PATCH 28/41] Update PRE_INSTALL.md: random fr string remaining in the english version --- doc/PRE_INSTALL.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/doc/PRE_INSTALL.md b/doc/PRE_INSTALL.md index 4c58fe7..1741ec6 100644 --- a/doc/PRE_INSTALL.md +++ b/doc/PRE_INSTALL.md @@ -8,9 +8,6 @@ ## Using *screen* in case of disconnect - -L'installation de Glitch-Soc peut être longue, selon les performances du serveur. Pour éviter que le processus soit interrompu par une déconnexion, on peut utiliser `screen`. - Glitch-Soc's install can be long, depending on the server performance. To prevent the process from being stopped because of disconnect, you can use a `screen` session ``` $ sudo apt-get install screen From c57b6bda0b20b3152e5ec7e31183651251734fe2 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <4533074+alexAubin@users.noreply.github.com> Date: Sat, 2 Dec 2023 23:44:54 +0100 Subject: [PATCH 29/41] Update PRE_INSTALL.md: be consistent with french version and use 'glitchsoc' instead of the full git url --- doc/PRE_INSTALL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/PRE_INSTALL.md b/doc/PRE_INSTALL.md index 1741ec6..88f055d 100644 --- a/doc/PRE_INSTALL.md +++ b/doc/PRE_INSTALL.md @@ -12,7 +12,7 @@ Glitch-Soc's install can be long, depending on the server performance. To preven ``` $ sudo apt-get install screen $ screen -$ sudo yunohost app install https://github.com/YunoHost-Apps/glitchsoc_ynh.git +$ sudo yunohost app install glitchsoc ``` Recover after disconnect: ``` From 3e384a501957496094a7ac91ff21bdcea73a65d3 Mon Sep 17 00:00:00 2001 From: Tagada <36127788+Tagadda@users.noreply.github.com> Date: Thu, 22 Feb 2024 19:51:15 +0100 Subject: [PATCH 30/41] Upgrade to v2023.12.18 --- conf/app.src | 7 ++++++ manifest.json | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 conf/app.src create mode 100644 manifest.json diff --git a/conf/app.src b/conf/app.src new file mode 100644 index 0000000..5ca3672 --- /dev/null +++ b/conf/app.src @@ -0,0 +1,7 @@ +SOURCE_URL=https://github.com/glitch-soc/mastodon/archive/3d3fa75c8172677bdc3fed27998e3d0654b376e5.tar.gz +SOURCE_SUM=3f1a297abead50eff70355c022b78b2f64287f98ee866a4eb0e22a3e099f6ea3 +SOURCE_SUM_PRG=sha256sum +SOURCE_FORMAT=tar.gz +SOURCE_IN_SUBDIR=true +SOURCE_FILENAME=3d3fa75c8172677bdc3fed27998e3d0654b376e5.tar.gz +SOURCE_EXTRACT=true diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..056da42 --- /dev/null +++ b/manifest.json @@ -0,0 +1,61 @@ +{ + "name": "Glitch-Soc", + "id": "glitchsoc", + "packaging_format": 1, + "description": { + "en": "Libre and federated social network, fork of Mastodon", + "fr": "Réseau social libre et fédéré, scission de Mastodon" + }, + "version": "2023.12.18~ynh1", + "url": "https://github.com/glitch-soc/mastodon", + "upstream": { + "license": "AGPL-3.0-or-later", + "website": "https://glitch-soc.github.io/docs/", + "code": "https://github.com/glitch-soc/mastodon" + }, + "license": "AGPL-3.0-or-later", + "maintainer": { + "name": "Tagada" + }, + "requirements": { + "yunohost": ">= 4.3.0" + }, + "multi_instance": true, + "services": [ + "nginx" + ], + "arguments": { + "install": [ + { + "name": "domain", + "type": "domain" + }, + { + "name": "admin", + "type": "user" + }, + { + "name": "is_public", + "type": "boolean", + "help": { + "en": "Needed for federation.", + "fr": "Nécessaire pour la fédération." + }, + "default": true + }, + { + "name": "language", + "type": "string", + "ask": { + "en": "Choose the application language", + "fr": "Choisissez la langue de l'application" + }, + "choices": [ + "en_EN", + "fr_FR" + ], + "default": "fr_FR" + } + ] + } +} From dcf75ad499a7b7c0c1b0700b73c7d597924f045f Mon Sep 17 00:00:00 2001 From: Tagada <36127788+Tagadda@users.noreply.github.com> Date: Thu, 22 Feb 2024 21:03:26 +0100 Subject: [PATCH 31/41] Fix restore --- scripts/restore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/restore b/scripts/restore index 3ecee95..159921b 100644 --- a/scripts/restore +++ b/scripts/restore @@ -103,7 +103,7 @@ ynh_restore_file --origin_path="/etc/logrotate.d/$app" #================================================= # GENERIC FINALIZATION #================================================= -# RELOAD THE APP SERVICE +# RELOAD NGINX AND THE APP SERVICE #================================================= ynh_script_progression --message="Reloading NGINX web server and $app's service..." --weight=1 @@ -111,6 +111,8 @@ ynh_systemd_action --service_name=${app}-web --action="start" --log_path=/var/lo 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 on" +ynh_systemd_action --service_name=nginx --action=reload + #================================================= # END OF SCRIPT #================================================= From f0072bcedb0e62b3918075f8977e6674898c826a Mon Sep 17 00:00:00 2001 From: Tagada <36127788+Tagadda@users.noreply.github.com> Date: Thu, 22 Feb 2024 21:05:21 +0100 Subject: [PATCH 32/41] fix --- scripts/install | 8 ++++---- scripts/restore | 8 ++++---- scripts/upgrade | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/scripts/install b/scripts/install index 10d8064..666e770 100644 --- a/scripts/install +++ b/scripts/install @@ -64,8 +64,8 @@ chown -R $app:www-data "$install_dir" #================================================= 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 +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 @@ -75,9 +75,9 @@ ynh_script_progression --message="Adding swap if needed..." --weight=1 total_memory=$(ynh_get_ram --total) swap_needed=0 -if [ $total_memory -lt $memory_needed ]; then +if [ $total_memory -lt $MEMORY_NEEDED ]; then # Need a minimum of 2.5Go of memory - swap_needed=$(($memory_needed - $total_memory)) + swap_needed=$(($MEMORY_NEEDED - $total_memory)) fi ynh_script_progression --message="Adding $swap_needed Mo to swap..." diff --git a/scripts/restore b/scripts/restore index 159921b..2e05f73 100644 --- a/scripts/restore +++ b/scripts/restore @@ -41,9 +41,9 @@ ynh_script_progression --message="Adding swap if needed..." --weight=1 total_memory=$(ynh_get_ram --total) swap_needed=0 -if [ $total_memory -lt $memory_needed ]; then +if [ $total_memory -lt $MEMORY_NEEDED ]; then # Need a minimum of 8Go of memory - swap_needed=$(($memory_needed - $total_memory)) + swap_needed=$(($MEMORY_NEEDED - $total_memory)) fi ynh_script_progression --message="Adding $swap_needed Mo to swap..." --weight=1 @@ -54,8 +54,8 @@ ynh_add_swap --size=$swap_needed #================================================= ynh_script_progression --message="Reinstalling 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 +ynh_exec_warn_less ynh_install_ruby --RUBY_VERSION=$RUBY_VERSION +ynh_exec_warn_less ynh_install_nodejs --NODEJS_VERSION=$NODEJS_VERSION ynh_script_progression --message="Installing Yarn dependencies..." --weight=10 diff --git a/scripts/upgrade b/scripts/upgrade index 9252fad..3823651 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -141,9 +141,9 @@ ynh_script_progression --message="Adding swap if needed..." --weight=1 total_memory=$(ynh_get_ram --total) swap_needed=0 -if [ $total_memory -lt $memory_needed ]; then +if [ $total_memory -lt $MEMORY_NEEDED ]; then # Need a minimum of 8Go of memory - swap_needed=$(($memory_needed - $total_memory)) + swap_needed=$(($MEMORY_NEEDED - $total_memory)) fi ynh_script_progression --message="Adding $swap_needed Mo to swap..." @@ -154,8 +154,8 @@ ynh_add_swap --size=$swap_needed #================================================= ynh_script_progression --message="Upgrading 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 +ynh_exec_warn_less ynh_install_ruby --RUBY_VERSION=$RUBY_VERSION +ynh_exec_warn_less ynh_install_nodejs --NODEJS_VERSION=$NODEJS_VERSION #================================================= # "REBUILD" THE APP (DEPLOY NEW SOURCES, RERUN NPM BUILD...) From 625c0e62a3eb1beb05493b70f892d4d70685bfe2 Mon Sep 17 00:00:00 2001 From: Tagada <36127788+Tagadda@users.noreply.github.com> Date: Thu, 22 Feb 2024 21:11:40 +0100 Subject: [PATCH 33/41] zblerg --- scripts/install | 2 +- scripts/restore | 2 +- scripts/upgrade | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/install b/scripts/install index 666e770..8bb4217 100644 --- a/scripts/install +++ b/scripts/install @@ -64,7 +64,7 @@ chown -R $app:www-data "$install_dir" #================================================= 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_ruby --ruby_version=$RUBY_VERSION ynh_exec_warn_less ynh_install_nodejs --NODEJS_VERSION=$NODEJS_VERSION #================================================= diff --git a/scripts/restore b/scripts/restore index 2e05f73..07301d0 100644 --- a/scripts/restore +++ b/scripts/restore @@ -54,7 +54,7 @@ ynh_add_swap --size=$swap_needed #================================================= ynh_script_progression --message="Reinstalling Ruby and NodeJS..." --weight=1 -ynh_exec_warn_less ynh_install_ruby --RUBY_VERSION=$RUBY_VERSION +ynh_exec_warn_less ynh_install_ruby --ruby_version=$RUBY_VERSION ynh_exec_warn_less ynh_install_nodejs --NODEJS_VERSION=$NODEJS_VERSION ynh_script_progression --message="Installing Yarn dependencies..." --weight=10 diff --git a/scripts/upgrade b/scripts/upgrade index 3823651..9b7a9f3 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -154,7 +154,7 @@ ynh_add_swap --size=$swap_needed #================================================= ynh_script_progression --message="Upgrading Ruby and NodeJS..." --weight=1 -ynh_exec_warn_less ynh_install_ruby --RUBY_VERSION=$RUBY_VERSION +ynh_exec_warn_less ynh_install_ruby --ruby_version=$RUBY_VERSION ynh_exec_warn_less ynh_install_nodejs --NODEJS_VERSION=$NODEJS_VERSION #================================================= From fc27534bfa6100f3c05b5557af34d78f3e2e5b26 Mon Sep 17 00:00:00 2001 From: Tagada <36127788+Tagadda@users.noreply.github.com> Date: Thu, 22 Feb 2024 21:21:43 +0100 Subject: [PATCH 34/41] =?UTF-8?q?zblerg=C2=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/install | 2 +- scripts/restore | 2 +- scripts/upgrade | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/install b/scripts/install index 8bb4217..4316f33 100644 --- a/scripts/install +++ b/scripts/install @@ -65,7 +65,7 @@ chown -R $app:www-data "$install_dir" 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 +ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$NODEJS_VERSION #================================================= # ADD SWAP IF NEEDED diff --git a/scripts/restore b/scripts/restore index 07301d0..b2528a0 100644 --- a/scripts/restore +++ b/scripts/restore @@ -55,7 +55,7 @@ ynh_add_swap --size=$swap_needed ynh_script_progression --message="Reinstalling 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 +ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$NODEJS_VERSION ynh_script_progression --message="Installing Yarn dependencies..." --weight=10 diff --git a/scripts/upgrade b/scripts/upgrade index 9b7a9f3..48797b7 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -155,7 +155,7 @@ ynh_add_swap --size=$swap_needed ynh_script_progression --message="Upgrading 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 +ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$NODEJS_VERSION #================================================= # "REBUILD" THE APP (DEPLOY NEW SOURCES, RERUN NPM BUILD...) From 24b4b595411670317a06204e22dc22e01a8d3a99 Mon Sep 17 00:00:00 2001 From: Tagada <36127788+Tagadda@users.noreply.github.com> Date: Thu, 22 Feb 2024 22:04:18 +0100 Subject: [PATCH 35/41] Be closer to mastodon_ynh --- conf/glitchsoc-sidekiq.service | 3 +- conf/glitchsoc-web.service | 5 +- doc/ADMIN.md | 6 +- doc/ADMIN_fr.md | 6 +- doc/PRE_INSTALL_fr.md | 14 +- manifest.toml | 20 +-- scripts/_common.sh | 47 ++++--- scripts/backup | 1 + scripts/install | 19 +-- scripts/restore | 13 +- scripts/upgrade | 228 +++++++++------------------------ scripts/ynh_add_swap | 7 + tests.toml | 15 ++- 13 files changed, 157 insertions(+), 227 deletions(-) diff --git a/conf/glitchsoc-sidekiq.service b/conf/glitchsoc-sidekiq.service index 0c2cfb9..9dbd3a9 100644 --- a/conf/glitchsoc-sidekiq.service +++ b/conf/glitchsoc-sidekiq.service @@ -10,7 +10,8 @@ Environment="__LD_PRELOAD__" Environment="RAILS_ENV=production" Environment="DB_POOL=25" Environment="MALLOC_ARENA_MAX=2" -ExecStart=__RBENV_ROOT__/versions/__APP__/bin/bundle exec sidekiq -c 25 +Environment="__YNH_RUBY_LOAD_PATH__" +ExecStart=__INSTALL_DIR__/live/bin/bundle exec sidekiq -c 25 TimeoutSec=15 Restart=always StandardOutput=append:/var/log/__APP__/__APP__-sidekiq.log diff --git a/conf/glitchsoc-web.service b/conf/glitchsoc-web.service index fbfb16b..133fc3b 100644 --- a/conf/glitchsoc-web.service +++ b/conf/glitchsoc-web.service @@ -6,10 +6,11 @@ After=network.target Type=simple User=__APP__ WorkingDirectory=__INSTALL_DIR__/live - +Environment="__LD_PRELOAD__" Environment="RAILS_ENV=production" Environment="PORT=__PORT_WEB__" -ExecStart=__RBENV_ROOT__/versions/__APP__/bin/bundle exec puma -C config/puma.rb +Environment="__YNH_RUBY_LOAD_PATH__" +ExecStart=__INSTALL_DIR__/live/bin/bundle exec puma -C config/puma.rb ExecReload=/bin/kill -SIGUSR1 $MAINPID TimeoutSec=15 Restart=always diff --git a/doc/ADMIN.md b/doc/ADMIN.md index e72082c..bb48041 100644 --- a/doc/ADMIN.md +++ b/doc/ADMIN.md @@ -29,4 +29,8 @@ First dry-run to see how much space is freed up (without actually removing): If all looks good commit the cleanup: -`$ sudo cd __INSTALL_DIR__/live && sudo -u __APP__ RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl media remove --days=X ` +`$ sudo cd /var/www/mastodon/live && sudo -u mastodon RAILS_ENV=production PATH=/opt/rbenv/versions/mastodon/bin bin/tootctl media remove --days=X ` + +## Known Bugs + +- Log-out from YunoHost's portal doesn't log out from Mastodon. See https://github.com/YunoHost/issues/issues/501 diff --git a/doc/ADMIN_fr.md b/doc/ADMIN_fr.md index 7d73436..7296093 100644 --- a/doc/ADMIN_fr.md +++ b/doc/ADMIN_fr.md @@ -27,4 +27,8 @@ En premier faite un essai à blanc pour voir combien de place sera libérée (sa `$ sudo cd __INSTALL_DIR__/live && sudo -u __APP__ RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl media remove --days=X --dry-run` Si cela semble bon, effectuez le nettoyage : -`$ sudo cd __INSTALL_DIR__/live && sudo -u __APP__ RAILS_ENV=production PATH=/opt/rbenv/versions/glitchsoc/bin bin/tootctl media remove --days=X ` +`$ sudo cd /var/www/mastodon/live && sudo -u mastodon RAILS_ENV=production PATH=/opt/rbenv/versions/mastodon/bin bin/tootctl media remove --days=X ` + +## Bugs connus + +- Se déconnecter depuis le portail YunoHost ne vous déconnecte pas de Mastodon. Voir https://github.com/YunoHost/issues/issues/501 diff --git a/doc/PRE_INSTALL_fr.md b/doc/PRE_INSTALL_fr.md index a707dde..3569013 100644 --- a/doc/PRE_INSTALL_fr.md +++ b/doc/PRE_INSTALL_fr.md @@ -1,19 +1,17 @@ ## Points importants à lire avant l'installation -1. **Glitch-Soc** nécessite un **nom de domaine** dédié, par exemple : glitchsoc.domain.tld -2. Il est impossible de changer le nom de domaine après l'installation. -3. L'utilisateur sélectionné pendant l'installation sera créé automatiquement dans Glitch-Soc avec des droits d'administration. -4. À la fin de l'installation, un mail est envoyé à cet utilisateur avec un mot de passe généré automatiquement. -5. Pour que votre instance Glitch-Soc reste privée, il est important de fermer les inscriptions. Nous vous invitons à bloquer les instances distantes indésirables depuis l'interface d'administration. Vous pouvez également ajouter un texte sur votre page d'accueil dans l'administration. +- **Mastodon** nécessite un **nom de domaine** dédié, par exemple : `domaine.tld` ou `mastodon.domaine.tld` sans apps installées sur ce domaine. Il est impossible de changer le nom de domaine après l'installation. +- L'utilisateur sélectionné pendant l'installation sera créé automatiquement dans Mastodon avec des droits d'administration. +- Pour que votre instance Mastodon reste privée, il est important de fermer les inscriptions. Nous vous invitons à bloquer les instances indésirables depuis l'interface d'administration. Vous pouvez également ajouter un texte sur votre page d'accueil dans l'administration. ## Utilisation de *screen* en cas de déconnexion -L'installation de Glitch-Soc peut être longue, selon les performances du serveur. Pour éviter que le processus soit interrompu par une déconnexion, on peut utiliser `screen`. +L'installation de Mastodon peut être longue, selon les performances du serveur. Pour éviter que le processus soit interrompu par une déconnexion, on peut utiliser `screen`. ``` -$ sudo apt-get install screen +$ sudo apt install screen $ screen -$ sudo yunohost app install glitchsoc +$ sudo yunohost app install mastodon ``` Récupérer l'installation après une deconnection : ``` diff --git a/manifest.toml b/manifest.toml index 8f20e52..f219e88 100644 --- a/manifest.toml +++ b/manifest.toml @@ -18,22 +18,20 @@ code = "https://github.com/glitch-soc/mastodon" yunohost = ">= 11.2" architectures = "all" multi_instance = true + ldap = true -sso = true + +sso = false + disk = "2G" -ram.build = "4G" -ram.runtime = "1G" +ram.build = "1G" +ram.runtime = "500M" [install] [install.domain] type = "domain" - [install.admin] - type = "user" - [install.init_main_permission] - help.en = "Visitors group is needed for federation." - help.fr = "Le groupe visitors est nécessaire pour la fédération." type = "group" default = "visitors" @@ -44,7 +42,11 @@ ram.runtime = "1G" choices = ["en_EN", "fr_FR"] default = "fr_FR" + [install.admin] + type = "user" + [resources] + [resources.sources] [resources.sources.main] url = "https://github.com/glitch-soc/mastodon/archive/3341db939cd077820ad598b0445d02ab2382eaf4.tar.gz" sha256 = "abf095bbf7f879d35b3e62f3fd4f339ff99b6aac98023fcc836baccfe91a0b97" @@ -70,7 +72,7 @@ ram.runtime = "1G" stream.default = 4000 [resources.apt] - packages = "imagemagick, ffmpeg, libpq-dev, libxml2-dev, libxslt1-dev, file, 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-server, redis-tools, postgresql, postgresql-contrib, libidn11-dev, libicu-dev, libjemalloc-dev, curl, apt-transport-https" + 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, 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" diff --git a/scripts/_common.sh b/scripts/_common.sh index 21339ce..4049d21 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -4,29 +4,34 @@ # COMMON VARIABLES #================================================= -MEMORY_NEEDED="2560" +memory_needed="2560" +ruby_version=3.2.2 +nodejs_version=20 -RUBY_VERSION="3.2.3" - -NODEJS_VERSION="20" - -# Workaround for Mastodon on Bullseye and later +# Workaround for Mastodon on Bullseye # See https://github.com/mastodon/mastodon/issues/15751#issuecomment-873594463 -case $YNH_ARCH in - amd64) - arch="x86_64" - ;; - arm64) - arch="aarch64" - ;; - armel|armhf) - arch="arm" - ;; - i386) - arch="i386" - ;; -esac -ld_preload="LD_PRELOAD=/usr/lib/$arch-linux-gnu/libjemalloc.so" +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 diff --git a/scripts/backup b/scripts/backup index 2cd6afd..de1ba98 100644 --- a/scripts/backup +++ b/scripts/backup @@ -32,6 +32,7 @@ ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= # BACKUP LOGROTATE #================================================= + ynh_backup --src_path="/etc/logrotate.d/$app" #================================================= diff --git a/scripts/install b/scripts/install index 4316f33..061dd27 100644 --- a/scripts/install +++ b/scripts/install @@ -64,8 +64,8 @@ chown -R $app:www-data "$install_dir" #================================================= 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 +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 @@ -75,12 +75,13 @@ ynh_script_progression --message="Adding swap if needed..." --weight=1 total_memory=$(ynh_get_ram --total) swap_needed=0 -if [ $total_memory -lt $MEMORY_NEEDED ]; then +if [ $total_memory -lt $memory_needed ]; then # Need a minimum of 2.5Go of memory - swap_needed=$(($MEMORY_NEEDED - $total_memory)) + swap_needed=$(($memory_needed - $total_memory)) fi -ynh_script_progression --message="Adding $swap_needed Mo to swap..." +ynh_script_progression --message="Adding $swap_needed Mo to swap..." --weight=1 + ynh_add_swap --size=$swap_needed #================================================= @@ -105,7 +106,7 @@ ynh_app_setting_set --app="$app" --key=otp_secret --value="$otp_secret" vapid_private_key="" vapid_public_key="" -ynh_add_config --template="../conf/.env.production.sample" --destination="$config" +ynh_add_config --template=".env.production.sample" --destination="$config" chmod 400 "$config" chown $app:$app "$config" @@ -151,7 +152,7 @@ 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="../conf/.env.production.sample" --destination="$config" +ynh_add_config --template=".env.production.sample" --destination="$config" chmod 400 "$config" chown $app:$app "$config" @@ -174,7 +175,7 @@ ynh_add_systemd_config --service="$app-streaming" --template="glitchsoc-streamin yunohost service add "$app-streaming" --description="$app streaming service" # Create a cron file -ynh_add_config --template="../conf/cron" --destination="/etc/cron.d/$app" +ynh_add_config --template="cron" --destination="/etc/cron.d/$app" # Use logrotate to manage application logfile(s) mkdir -p /var/log/$app @@ -190,7 +191,7 @@ ynh_script_progression --message="Starting all systemd services..." --weight=1 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 on" +ynh_systemd_action --service_name=${app}-streaming --action="start" --log_path=/var/log/$app/$app-streaming.log --line_match="Streaming API now listening" #================================================= # END OF SCRIPT diff --git a/scripts/restore b/scripts/restore index b2528a0..a70232b 100644 --- a/scripts/restore +++ b/scripts/restore @@ -41,21 +41,22 @@ ynh_script_progression --message="Adding swap if needed..." --weight=1 total_memory=$(ynh_get_ram --total) swap_needed=0 -if [ $total_memory -lt $MEMORY_NEEDED ]; then +if [ $total_memory -lt $memory_needed ]; then # Need a minimum of 8Go of memory - swap_needed=$(($MEMORY_NEEDED - $total_memory)) + swap_needed=$(($memory_needed - $total_memory)) fi ynh_script_progression --message="Adding $swap_needed Mo to swap..." --weight=1 + ynh_add_swap --size=$swap_needed #================================================= -# INSTALLING RUBY, BUNDLER, AND YARN +# REINSTALL DEPENDENCIES #================================================= ynh_script_progression --message="Reinstalling 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 +ynh_exec_warn_less ynh_install_ruby --ruby_version=$ruby_version +ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$nodejs_version ynh_script_progression --message="Installing Yarn dependencies..." --weight=10 @@ -109,7 +110,7 @@ ynh_script_progression --message="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 on" +ynh_systemd_action --service_name=${app}-streaming --action="start" --log_path=/var/log/$app/$app-streaming.log --line_match="Streaming API now listening" ynh_systemd_action --service_name=nginx --action=reload diff --git a/scripts/upgrade b/scripts/upgrade index 48797b7..46830ec 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -21,110 +21,23 @@ config="$install_dir/live/.env.production" #================================================= ynh_script_progression --message="Ensuring downward compatibility..." --weight=1 -# Remove paperclip_secret -ynh_app_setting_delete --app=$app --key=paperclip_secret - -# If secret_key_base doesn't exist, retrieve it or create it -if [[ -z "${secret_key_base:-}" ]]; then - secret_key_base=$(grep -oP "SECRET_KEY_BASE=\K\w+" $config) - if [[ -z "$secret_key_base" ]]; then - secret_key_base=$(ynh_string_random --length=128) - fi - ynh_app_setting_set --app=$app --key=secret_key_base --value="$secret_key_base" -fi - -# If otp_secret doesn't exist, retrieve it or create it -if [[ -z "${otp_secret:-}" ]]; then - otp_secret=$(grep -oP "OTP_SECRET=\K\w+" $config) - if [[ -z "$otp_secret" ]]; then - otp_secret=$(ynh_string_random --length=128) - fi - ynh_app_setting_set --app=$app --key=otp_secret --value="$otp_secret" -fi - -# If vapid_private_key doesn't exist, retrieve it or create it -if [[ -z "${vapid_private_key:-}" ]]; then - vapid_private_key=$(grep -oP "VAPID_PRIVATE_KEY=\K.+" $config) - vapid_public_key=$(grep -oP "VAPID_PUBLIC_KEY=\K.+" $config) - ynh_app_setting_set "$app" vapid_private_key "$vapid_private_key" - ynh_app_setting_set "$app" vapid_public_key "$vapid_public_key" -fi - -# If redis_namespace doesn't exist, create it -if [[ -z "${redis_namespace:-}" ]]; then - redis_namespace=${app}_production - ynh_app_setting_set --app=$app --key=redis_namespace --value=$redis_namespace -fi - -if [ -z "${max_toot_chars:-}" ]; then - max_toot_chars="500" - ynh_app_setting_set --app=$app --key=max_toot_chars --value=$max_toot_chars -fi - -if [ -z "${max_pinned_toots:-}" ]; then - max_pinned_toots="5" - ynh_app_setting_set --app=$app --key=max_pinned_toots --value=$max_pinned_toots -fi - -if [ -z "${max_bio_chars:-}" ]; then - max_bio_chars="500" - ynh_app_setting_set --app=$app --key=max_bio_chars --value=$max_bio_chars -fi - -if [ -z "${max_profile_fields:-}" ]; then - max_profile_fields="4" - ynh_app_setting_set --app=$app --key=max_profile_fields --value=$max_profile_fields -fi - -if [ -z "${max_display_name_chars:-}" ]; then - max_display_name_chars="30" - ynh_app_setting_set --app=$app --key=max_display_name_chars --value=$max_display_name_chars -fi - -if [ -z "${max_poll_options:-}" ]; then - max_poll_options="5" - ynh_app_setting_set --app=$app --key=max_poll_options --value=$max_poll_options -fi - -if [ -z "${max_poll_option_chars:-}" ]; then - max_poll_option_chars="100" - ynh_app_setting_set --app=$app --key=max_poll_option_chars --value=$max_poll_option_chars -fi - -if [ -z "${max_image_size:-}" ]; then - max_image_size="8388608" - ynh_app_setting_set --app=$app --key=max_image_size --value=$max_image_size -fi - -if [ -z "${max_video_size:-}" ]; then - max_video_size="41943040" - ynh_app_setting_set --app=$app --key=max_video_size --value=$max_video_size -fi - -if [ -z "${max_emoji_size:-}" ]; then - max_emoji_size="51200" - ynh_app_setting_set --app=$app --key=max_emoji_size --value=$max_emoji_size -fi - -if [ -z "${max_remote_emoji_size:-}" ]; then - max_remote_emoji_size="204800" - ynh_app_setting_set --app=$app --key=max_remote_emoji_size --value=$max_remote_emoji_size -fi - -# If service doesn't exist, create it +# Set `service` settings to support `yunohost app shell` command if [[ -z "${service:-}" ]]; then - # Set `service` settings to support `yunohost app shell` command - ynh_app_setting_set --app="$app" --key=service --value="$app-web.service" + service="$app-web.service" + ynh_app_setting_set --app="$app" --key=service --value="$service" fi +#Remove previous added repository +ynh_remove_extra_repo + #================================================= # STOP SYSTEMD SERVICE #================================================= ynh_script_progression --message="Stopping a systemd service..." --weight=1 -ynh_systemd_action --service_name=${app}-web --action="stop" --log_path=/var/log/$app/$app-web.log --line_match="Stopped" -ynh_systemd_action --service_name=${app}-sidekiq --action="stop" --log_path=/var/log/$app/$app-sidekiq.log --line_match="Stopped" -ynh_systemd_action --service_name=${app}-streaming --action="stop" --log_path=/var/log/$app/$app-streaming.log --line_match="Stopped" +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 --line_match="exiting" # Rename the database to match packaging v2 defaults db_name (`$app_production` to `$app`) if [[ $db_name = *'_production' ]]; then @@ -141,9 +54,9 @@ ynh_script_progression --message="Adding swap if needed..." --weight=1 total_memory=$(ynh_get_ram --total) swap_needed=0 -if [ $total_memory -lt $MEMORY_NEEDED ]; then +if [ $total_memory -lt $memory_needed ]; then # Need a minimum of 8Go of memory - swap_needed=$(($MEMORY_NEEDED - $total_memory)) + swap_needed=$(($memory_needed - $total_memory)) fi ynh_script_progression --message="Adding $swap_needed Mo to swap..." @@ -154,8 +67,8 @@ ynh_add_swap --size=$swap_needed #================================================= ynh_script_progression --message="Upgrading 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 +ynh_exec_warn_less ynh_install_ruby --ruby_version=$ruby_version +ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$nodejs_version #================================================= # "REBUILD" THE APP (DEPLOY NEW SOURCES, RERUN NPM BUILD...) @@ -173,72 +86,8 @@ then chmod 750 "$install_dir" chmod -R o-rwx "$install_dir" chown -R $app:www-data "$install_dir" - - pushd "$install_dir/live" - ynh_use_ruby - ynh_gem update --system --no-document - ynh_gem install bundler --no-document - popd - - # Perform upgrade actions on Glitch-Soc - ynh_script_progression --message="Upgrading Glitch-Soc..." --weight=10 - - pushd "$install_dir/live" - 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 install -j$(getconf _NPROCESSORS_ONLN) - ynh_use_nodejs - corepack enable - yarn install - if [ -d "$final_path/live/public/assets" ]; then - ynh_exec_warn_less ynh_exec_as $app RAILS_ENV=production $ynh_ruby_load_path $ld_preload bin/bundle exec rails assets:clean - fi - ynh_exec_warn_less ynh_exec_as $app RAILS_ENV=production $ynh_ruby_load_path $ld_preload bin/bundle exec rails assets:precompile - 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 - popd fi -#================================================= -# REAPPLY SYSTEM CONFIGURATIONS -#================================================= -ynh_script_progression --message="Upgrading system configurations related to $app..." --weight=1 - -ynh_add_nginx_config - -ynh_use_ruby - -# Create a dedicated systemd config -ynh_add_systemd_config --service="$app-web" --template="glitchsoc-web.service" -yunohost service add "$app-web" --description="$app web service" - -ynh_add_systemd_config --service="$app-sidekiq" --template="glitchsoc-sidekiq.service" -yunohost service add "$app-sidekiq" --description="$app sidekiq service" - -ynh_add_systemd_config --service="$app-streaming" --template="glitchsoc-streaming.service" -yunohost service add "$app-streaming" --description="$app streaming service" - -ynh_add_config --template="../conf/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 - -#================================================= -# RECONFIGURE THE APP (UPDATE CONF, APPLY MIGRATIONS...) -#================================================= -# UPDATE A CONFIG FILE -#================================================= -ynh_script_progression --message="Updating a config file..." --weight=1 - -language="$(echo $language | head -c 2)" - -ynh_add_config --template="../conf/.env.production.sample" --destination="$config" - -chmod 400 "$config" -chown $app:$app "$config" - #================================================= # BUILD ASSETS #================================================= @@ -253,11 +102,56 @@ pushd "$install_dir/live" 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 - ynh_exec_warn_less ynh_exec_as $app RAILS_ENV=production $ynh_ruby_load_path $ld_preload bin/bundle exec rails assets:clean + corepack enable + yarn install + if [ -d "$final_path/live/public/assets" ]; then + ynh_exec_warn_less ynh_exec_as $app RAILS_ENV=production $ynh_ruby_load_path $ld_preload bin/bundle exec rails assets:clean + fi ynh_exec_warn_less ynh_exec_as $app RAILS_ENV=production $ynh_ruby_load_path $ld_preload bin/bundle exec rails assets:precompile + 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 popd +#================================================= +# REAPPLY SYSTEM CONFIGURATIONS +#================================================= +ynh_script_progression --message="Upgrading system configurations related to $app..." --weight=1 + +ynh_add_nginx_config + +ynh_use_ruby + +# Create a dedicated systemd config +ynh_add_systemd_config --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" +yunohost service add "$app-sidekiq" --description="$app sidekiq service" + +ynh_add_systemd_config --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" + +# Use logrotate to manage app-specific logfile(s) +mkdir -p /var/log/$app +chown $app:$app /var/log/$app +ynh_use_logrotate --non-append + +#================================================= +# RECONFIGURE THE APP (UPDATE CONF, APPLY MIGRATIONS...) +#================================================= +# UPDATE A CONFIG FILE +#================================================= +ynh_script_progression --message="Updating a config file..." --weight=1 + +language="$(echo $language | head -c 2)" + +ynh_add_config --template=".env.production.sample" --destination="$config" + +chmod 400 "$config" +chown $app:$app "$config" + #================================================= # APPLY MIGRATIONS #================================================= @@ -276,7 +170,7 @@ ynh_script_progression --message="Starting a systemd service..." --weight=1 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 on" +ynh_systemd_action --service_name=${app}-streaming --action="start" --log_path=/var/log/$app/$app-streaming.log --line_match="Streaming API now listening" #================================================= # END OF SCRIPT diff --git a/scripts/ynh_add_swap b/scripts/ynh_add_swap index d7ec44b..aa82c51 100644 --- a/scripts/ynh_add_swap +++ b/scripts/ynh_add_swap @@ -19,6 +19,13 @@ ynh_add_swap () { SD_CARD_CAN_SWAP=${SD_CARD_CAN_SWAP:-0} + # Can't swap inside an LXD + if [ "$(systemd-detect-virt)" == "lxc" ] + then + ynh_print_warn --message="You are inside a LXC container, swap will not be added, but that can cause troubles for the app $app. Please make sure you have more than 2.5G available RAM." + return + fi + # Swap on SD card only if it's is specified if ynh_is_main_device_a_sd_card && [ "$SD_CARD_CAN_SWAP" == "0" ] then diff --git a/tests.toml b/tests.toml index 9c9b985..c5022c1 100644 --- a/tests.toml +++ b/tests.toml @@ -6,10 +6,21 @@ test_format = 1.0 # Tests to run # ------------ - exclude = ["install.multi", "change_url"] + exclude = ["install.multi", "install.private", "change_url"] + # The test IDs to be used in only/exclude statements are: install.root, install.subdir, install.nourl, install.multi, backup_restore, upgrade, upgrade.someCommitId change_url + + # ------------------------------- + # Default args to use for install + # ------------------------------- + + # Nothing to do here...yet # ------------------------------- # Commits to test upgrade from # ------------------------------- - test_upgrade_from.9c7a5ae.name = "Upgrade from 2023.06.19~ynh1" + test_upgrade_from.e6e04a0.name = "Upgrade from 2024.02.18~ynh1" + test_upgrade_from.e6e04a0.args.domain="domain.tld" + test_upgrade_from.e6e04a0.args.is_public=1 + test_upgrade_from.e6e04a0.args.admin="john" + test_upgrade_from.e6e04a0.args.language="fr_FR" From c14fcb76f7a4340005e228259348ea580f122294 Mon Sep 17 00:00:00 2001 From: Tagada <36127788+Tagadda@users.noreply.github.com> Date: Thu, 22 Feb 2024 23:03:51 +0100 Subject: [PATCH 36/41] Fix restore --- scripts/restore | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/restore b/scripts/restore index a70232b..dc0bff8 100644 --- a/scripts/restore +++ b/scripts/restore @@ -61,6 +61,7 @@ ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$nodejs_version ynh_script_progression --message="Installing Yarn dependencies..." --weight=10 pushd "$final_path/live" + ynh_use_nodejs corepack enable yarn install popd From 7572dc5f1e80d02f44d053c5076ee97b142076b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Pi=C3=A9dallu?= Date: Sun, 24 Mar 2024 20:33:20 +0100 Subject: [PATCH 37/41] Add schemas --- manifest.toml | 2 ++ tests.toml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/manifest.toml b/manifest.toml index f219e88..b31f6a9 100644 --- a/manifest.toml +++ b/manifest.toml @@ -1,3 +1,5 @@ +#:schema https://raw.githubusercontent.com/YunoHost/apps/master/schemas/manifest.v2.schema.json + packaging_format = 2 id = "glitchsoc" diff --git a/tests.toml b/tests.toml index c5022c1..2a7f5e2 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] From 68cab1761b30738fae88ca285326550a89340363 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Pi=C3=A9dallu?= Date: Sun, 24 Mar 2024 20:33:28 +0100 Subject: [PATCH 38/41] Fix restore, upgrade --- scripts/restore | 2 +- scripts/upgrade | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/restore b/scripts/restore index dc0bff8..209a127 100644 --- a/scripts/restore +++ b/scripts/restore @@ -60,7 +60,7 @@ ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$nodejs_version ynh_script_progression --message="Installing Yarn dependencies..." --weight=10 -pushd "$final_path/live" +pushd "$install_dir/live" ynh_use_nodejs corepack enable yarn install diff --git a/scripts/upgrade b/scripts/upgrade index 46830ec..e2322ee 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -104,7 +104,7 @@ pushd "$install_dir/live" ynh_use_nodejs corepack enable yarn install - if [ -d "$final_path/live/public/assets" ]; then + if [ -d "$install_dir/live/public/assets" ]; then ynh_exec_warn_less ynh_exec_as $app RAILS_ENV=production $ynh_ruby_load_path $ld_preload bin/bundle exec rails assets:clean fi ynh_exec_warn_less ynh_exec_as $app RAILS_ENV=production $ynh_ruby_load_path $ld_preload bin/bundle exec rails assets:precompile From 79865d0fc31d371fc7e5168808ce7a60457b025d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Pi=C3=A9dallu?= Date: Sun, 24 Mar 2024 20:52:46 +0100 Subject: [PATCH 39/41] cleanup, applying template --- scripts/backup | 16 ++----- scripts/install | 108 +++++++++++++++++++++++------------------------- scripts/remove | 24 ++++------- scripts/restore | 68 +++++++++++++----------------- scripts/upgrade | 106 +++++++++++++++++++++-------------------------- 5 files changed, 135 insertions(+), 187 deletions(-) diff --git a/scripts/backup b/scripts/backup index de1ba98..f0eba7b 100644 --- a/scripts/backup +++ b/scripts/backup @@ -1,7 +1,5 @@ #!/bin/bash -#================================================= -# GENERIC START #================================================= # IMPORT GENERIC HELPERS #================================================= @@ -22,23 +20,13 @@ ynh_print_info --message="Declaring files to be backed up..." ynh_backup --src_path="$install_dir" #================================================= -# BACKUP THE NGINX CONFIGURATION +# BACKUP THE SYSTEM CONFIGURATION #================================================= ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" -#================================================= -# SPECIFIC BACKUP -#================================================= -# BACKUP LOGROTATE -#================================================= - ynh_backup --src_path="/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" @@ -49,6 +37,8 @@ ynh_backup --src_path="/etc/systemd/system/$app-streaming.service" ynh_backup --src_path="/etc/cron.d/$app" +ynh_backup --src_path="/var/log/$app/" + #================================================= # BACKUP THE POSTGRESQL DATABASE #================================================= diff --git a/scripts/install b/scripts/install index 061dd27..71dff90 100644 --- a/scripts/install +++ b/scripts/install @@ -1,7 +1,5 @@ #!/bin/bash -#================================================= -# GENERIC START #================================================= # IMPORT GENERIC HELPERS #================================================= @@ -11,7 +9,11 @@ source ynh_install_ruby__2 source ynh_add_swap source /usr/share/yunohost/helpers -admin_mail=$(ynh_user_get_info --username=$admin --key=mail) +#================================================= +# INITIALIZE AND STORE SETTINGS +#================================================= + +admin_mail=$(ynh_user_get_info --username="$admin" --key=mail) # Initialize config_panel settings :< max_toot_chars="500" @@ -25,46 +27,37 @@ max_image_size="8388608" max_video_size="41943040" max_emoji_size="51200" max_remote_emoji_size="204800" -ynh_app_setting_set --app=$app --key=max_toot_chars --value=$max_toot_chars -ynh_app_setting_set --app=$app --key=max_pinned_toots --value=$max_pinned_toots -ynh_app_setting_set --app=$app --key=max_bio_chars --value=$max_bio_chars -ynh_app_setting_set --app=$app --key=max_profile_fields --value=$max_profile_fields -ynh_app_setting_set --app=$app --key=max_display_name_chars --value=$max_display_name_chars -ynh_app_setting_set --app=$app --key=max_poll_options --value=$max_poll_options -ynh_app_setting_set --app=$app --key=max_poll_option_chars --value=$max_poll_option_chars -ynh_app_setting_set --app=$app --key=max_image_size --value=$max_image_size -ynh_app_setting_set --app=$app --key=max_video_size --value=$max_video_size -ynh_app_setting_set --app=$app --key=max_emoji_size --value=$max_emoji_size -ynh_app_setting_set --app=$app --key=max_remote_emoji_size --value=$max_remote_emoji_size +ynh_app_setting_set --app="$app" --key="max_toot_chars" --value="$max_toot_chars" +ynh_app_setting_set --app="$app" --key="max_pinned_toots" --value="$max_pinned_toots" +ynh_app_setting_set --app="$app" --key="max_bio_chars" --value="$max_bio_chars" +ynh_app_setting_set --app="$app" --key="max_profile_fields" --value="$max_profile_fields" +ynh_app_setting_set --app="$app" --key="max_display_name_chars" --value="$max_display_name_chars" +ynh_app_setting_set --app="$app" --key="max_poll_options" --value="$max_poll_options" +ynh_app_setting_set --app="$app" --key="max_poll_option_chars" --value="$max_poll_option_chars" +ynh_app_setting_set --app="$app" --key="max_image_size" --value="$max_image_size" +ynh_app_setting_set --app="$app" --key="max_video_size" --value="$max_video_size" +ynh_app_setting_set --app="$app" --key="max_emoji_size" --value="$max_emoji_size" +ynh_app_setting_set --app="$app" --key="max_remote_emoji_size" --value="$max_remote_emoji_size" # Set `service` settings to support `yunohost app shell` command ynh_app_setting_set --app="$app" --key=service --value="$app-web.service" -# Find an available port -port_web=$(ynh_find_port --port=3000) -ynh_app_setting_set --app=$app --key=port_web --value=$port_web +redis_namespace=${app}_production +ynh_app_setting_set --app="$app" --key=redis_namespace --value="$redis_namespace" -port_stream=$(ynh_find_port --port=4000) -ynh_app_setting_set --app=$app --key=port_stream --value=$port_stream +secret_key_base=$(ynh_string_random --length=128) +ynh_app_setting_set --app="$app" --key=secret_key_base --value="$secret_key_base" -#================================================= -# APP "BUILD" (DEPLOYING SOURCES, VENV, COMPILING ETC) -#================================================= -# DOWNLOAD, CHECK AND UNPACK SOURCE -#================================================= -ynh_script_progression --message="Setting up source files..." --weight=1 - -# Download, check integrity, uncompress and patch the source from app.src -ynh_setup_source --dest_dir="$install_dir/live" - -chown -R $app:www-data "$install_dir" +otp_secret=$(ynh_string_random --length=128) +ynh_app_setting_set --app="$app" --key=otp_secret --value="$otp_secret" #================================================= # INSTALL DEPENDENCIES #================================================= -ynh_script_progression --message="Installing Ruby and NodeJS..." --weight=1 - +ynh_script_progression --message="Installing Ruby..." --weight=1 ynh_exec_warn_less ynh_install_ruby --ruby_version=$ruby_version + +ynh_script_progression --message="Installing NodeJS..." --weight=1 ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$nodejs_version #================================================= @@ -84,6 +77,16 @@ ynh_script_progression --message="Adding $swap_needed Mo to swap..." --weight=1 ynh_add_swap --size=$swap_needed +#================================================= +# DOWNLOAD, CHECK AND UNPACK SOURCE +#================================================= +ynh_script_progression --message="Setting up source files..." --weight=1 + +# Download, check integrity, uncompress and patch the source from app.src +ynh_setup_source --dest_dir="$install_dir/live" + +chown -R "$app:www-data" "$install_dir" + #================================================= # ADD A CONFIGURATION #================================================= @@ -93,22 +96,13 @@ 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" - -otp_secret=$(ynh_string_random --length=128) -ynh_app_setting_set --app="$app" --key=otp_secret --value="$otp_secret" - # We need rake 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" +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" @@ -116,7 +110,7 @@ ynh_replace_string --match_string="min_invite_role: 'admin'" --replace_string="m 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" +chown "$app:$app" "$install_dir/live/config/settings.yml" #================================================= # BUILD APP @@ -128,21 +122,22 @@ 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 - ynh_exec_as $app $ynh_ruby_load_path $ld_preload bin/bundle install -j$(getconf _NPROCESSORS_ONLN) + 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 corepack enable yarn install - 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 + 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 + 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_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 popd # Re-generate config with vapid keys @@ -178,9 +173,8 @@ yunohost service add "$app-streaming" --description="$app streaming service" ynh_add_config --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 +chown "$app:$app" "/var/log/$app" #================================================= # GENERIC FINALIZATION @@ -189,9 +183,9 @@ ynh_use_logrotate #================================================= ynh_script_progression --message="Starting all systemd services..." --weight=1 -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_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" #================================================= # END OF SCRIPT diff --git a/scripts/remove b/scripts/remove index 7df4fda..17c297f 100644 --- a/scripts/remove +++ b/scripts/remove @@ -1,7 +1,5 @@ #!/bin/bash -#================================================= -# GENERIC START #================================================= # IMPORT GENERIC HELPERS #================================================= @@ -12,29 +10,21 @@ source ynh_add_swap source /usr/share/yunohost/helpers #================================================= -# REMOVE SYSTEM CONFIGURATIONS -#================================================= -# REMOVE SYSTEMD SERVICE +# REMOVE SYSTEMD SERVICE #================================================= ynh_script_progression --message="Removing system configurations related to $app..." --weight=1 # 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 - yunohost service remove "$app-web" +if ynh_exec_warn_less 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 - yunohost service remove "$app-sidekiq" +if ynh_exec_warn_less 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 - yunohost service remove "$app-streaming" +if ynh_exec_warn_less yunohost service status "$app-streaming" >/dev/null; then + yunohost service remove "$app-streaming" fi # Remove the dedicated systemd config diff --git a/scripts/restore b/scripts/restore index 209a127..91b2c97 100644 --- a/scripts/restore +++ b/scripts/restore @@ -1,7 +1,5 @@ #!/bin/bash -#================================================= -# GENERIC START #================================================= # IMPORT GENERIC HELPERS #================================================= @@ -13,25 +11,13 @@ source ../settings/scripts/ynh_add_swap source /usr/share/yunohost/helpers #================================================= -# STANDARD RESTORATION STEPS +# INSTALL DEPENDENCIES #================================================= -# RESTORE THE APP MAIN DIR -#================================================= -ynh_script_progression --message="Restoring the app main directory..." --weight=1 +ynh_script_progression --message="Reinstalling Ruby..." --weight=1 +ynh_exec_warn_less ynh_install_ruby --ruby_version="$ruby_version" -ynh_restore_file --origin_path="$install_dir" - -chmod 750 "$install_dir" -chmod -R o-rwx "$install_dir" -chown -R $app:www-data "$install_dir" - -#================================================= -# RESTORE THE POSTGRESQL DATABASE -#================================================= -ynh_script_progression --message="Restoring the PostgreSQL database..." --weight=1 - -ynh_psql_execute_as_root --sql="ALTER USER $db_user CREATEDB;" -ynh_psql_execute_file_as_root --file="./db.sql" --database="$db_name" +ynh_script_progression --message="Reinstalling NodeJS..." --weight=1 +ynh_exec_warn_less ynh_install_nodejs --nodejs_version="$nodejs_version" #================================================= # ADD SWAP IF NEEDED @@ -51,35 +37,39 @@ ynh_script_progression --message="Adding $swap_needed Mo to swap..." --weight=1 ynh_add_swap --size=$swap_needed #================================================= -# REINSTALL DEPENDENCIES +# RESTORE THE APP MAIN DIR #================================================= -ynh_script_progression --message="Reinstalling Ruby and NodeJS..." --weight=1 +ynh_script_progression --message="Restoring the app main directory..." --weight=1 -ynh_exec_warn_less ynh_install_ruby --ruby_version=$ruby_version -ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$nodejs_version +ynh_restore_file --origin_path="$install_dir" -ynh_script_progression --message="Installing Yarn dependencies..." --weight=10 +chmod -R o-rwx "$install_dir" +chown -R "$app:www-data" "$install_dir" -pushd "$install_dir/live" - ynh_use_nodejs - corepack enable - yarn install -popd +#================================================= +# RESTORE THE POSTGRESQL DATABASE +#================================================= +ynh_script_progression --message="Restoring the PostgreSQL database..." --weight=1 + +ynh_psql_execute_as_root --sql="ALTER USER $db_user CREATEDB;" +ynh_psql_connect_as --user="$db_user" --password="$db_pwd" --database="$db_name" < ./db.sql #================================================= # BUILD APP #================================================= -ynh_script_progression --message="Building app..." --weight=1 +ynh_script_progression --message="Rebuilding app..." --weight=1 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) + ynh_exec_as "$app" "$ynh_ruby_load_path" "$ld_preload" bin/bundle install --redownload -j"$(nproc)" + + ynh_use_nodejs + corepack enable + yarn install popd -#================================================= -# RESTORE SYSTEM CONFIGURATIONS #================================================= # RESTORE THE PHP-FPM CONFIGURATION #================================================= @@ -98,20 +88,18 @@ yunohost service add "$app-streaming" --description="$app streaming service" ynh_restore_file --origin_path="/etc/cron.d/$app" -mkdir -p /var/log/$app -chown -R $app:$app /var/log/$app +ynh_restore_file --origin_path="/var/log/$app/" + ynh_restore_file --origin_path="/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_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_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_systemd_action --service_name=nginx --action=reload diff --git a/scripts/upgrade b/scripts/upgrade index e2322ee..2015b00 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -1,7 +1,5 @@ #!/bin/bash -#================================================= -# GENERIC START #================================================= # IMPORT GENERIC HELPERS #================================================= @@ -11,11 +9,8 @@ source ynh_install_ruby__2 source ynh_add_swap source /usr/share/yunohost/helpers -upgrade_type=$(ynh_check_app_version_changed) config="$install_dir/live/.env.production" -#================================================= -# STANDARD UPGRADE STEPS #================================================= # ENSURE DOWNWARD COMPATIBILITY #================================================= @@ -35,9 +30,9 @@ ynh_remove_extra_repo #================================================= ynh_script_progression --message="Stopping a systemd service..." --weight=1 -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 --line_match="exiting" +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" --line_match="exiting" # Rename the database to match packaging v2 defaults db_name (`$app_production` to `$app`) if [[ $db_name = *'_production' ]]; then @@ -65,28 +60,34 @@ ynh_add_swap --size=$swap_needed #================================================= # UPGRADE DEPENDENCIES #================================================= -ynh_script_progression --message="Upgrading Ruby and NodeJS..." --weight=1 - +ynh_script_progression --message="Upgrading Ruby..." --weight=1 ynh_exec_warn_less ynh_install_ruby --ruby_version=$ruby_version + +ynh_script_progression --message="Upgrading NodeJS..." --weight=1 ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$nodejs_version -#================================================= -# "REBUILD" THE APP (DEPLOY NEW SOURCES, RERUN NPM BUILD...) #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= +ynh_script_progression --message="Upgrading source files..." --weight=1 -if [ "$upgrade_type" == "UPGRADE_APP" ] -then - ynh_script_progression --message="Upgrading source files..." --weight=1 +# Download Mastodon +ynh_setup_source --dest_dir="$install_dir/live" --keep="public/system/" - # Download Mastodon - ynh_setup_source --dest_dir="$install_dir/live" --keep="public/system/" +chmod -R o-rwx "$install_dir" +chown -R "$app:www-data" "$install_dir" - chmod 750 "$install_dir" - chmod -R o-rwx "$install_dir" - chown -R $app:www-data "$install_dir" -fi +#================================================= +# UPDATE A CONFIG FILE +#================================================= +ynh_script_progression --message="Updating a config file..." --weight=1 + +language="$(echo $language | head -c 2)" + +ynh_add_config --template=".env.production.sample" --destination="$config" + +chmod 400 "$config" +chown "$app:$app" "$config" #================================================= # BUILD ASSETS @@ -97,19 +98,30 @@ 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_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 corepack enable yarn install if [ -d "$install_dir/live/public/assets" ]; then - 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:clean fi - ynh_exec_warn_less ynh_exec_as $app RAILS_ENV=production $ynh_ruby_load_path $ld_preload bin/bundle exec rails assets:precompile - 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_exec_warn_less ynh_exec_as "$app" RAILS_ENV=production "$ynh_ruby_load_path" "$ld_preload" bin/bundle exec rails assets:precompile + 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 +popd + +#================================================= +# APPLY MIGRATIONS +#================================================= +ynh_script_progression --message="Applying migrations..." --weight=1 + +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 popd #================================================= @@ -134,43 +146,17 @@ yunohost service add "$app-streaming" --description="$app streaming service" ynh_add_config --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 - -#================================================= -# RECONFIGURE THE APP (UPDATE CONF, APPLY MIGRATIONS...) -#================================================= -# UPDATE A CONFIG FILE -#================================================= -ynh_script_progression --message="Updating a config file..." --weight=1 - -language="$(echo $language | head -c 2)" - -ynh_add_config --template=".env.production.sample" --destination="$config" - -chmod 400 "$config" -chown $app:$app "$config" - -#================================================= -# APPLY MIGRATIONS -#================================================= -ynh_script_progression --message="Applying migrations..." --weight=1 - -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 -popd +chown "$app:$app" "/var/log/$app" #================================================= # START SYSTEMD SERVICE #================================================= -ynh_script_progression --message="Starting a systemd service..." --weight=1 +ynh_script_progression --message="Starting $app's systemd service..." --weight=1 -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_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" #================================================= # END OF SCRIPT From 7621990818a85fb890e906cc6db6439b28756a37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Pi=C3=A9dallu?= Date: Sun, 24 Mar 2024 22:51:02 +0100 Subject: [PATCH 40/41] Fix upgrade --- scripts/upgrade | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index 2015b00..e16e80c 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -30,9 +30,9 @@ ynh_remove_extra_repo #================================================= ynh_script_progression --message="Stopping a systemd service..." --weight=1 -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" --line_match="exiting" +ynh_systemd_action --service_name="${app}-web" --action="stop" --log_path="/var/log/$app/$app-web.log" +ynh_systemd_action --service_name="${app}-sidekiq" --action="stop" --log_path="/var/log/$app/$app-sidekiq.log" +ynh_systemd_action --service_name="${app}-streaming" --action="stop" --log_path="/var/log/$app/$app-streaming.log" # Rename the database to match packaging v2 defaults db_name (`$app_production` to `$app`) if [[ $db_name = *'_production' ]]; then @@ -134,13 +134,13 @@ ynh_add_nginx_config ynh_use_ruby # Create a dedicated systemd config -ynh_add_systemd_config --service="$app-web" --template="mastodon-web.service" +ynh_add_systemd_config --service="$app-web" --template="glitchsoc-web.service" yunohost service add "$app-web" --description="$app web service" -ynh_add_systemd_config --service="$app-sidekiq" --template="mastodon-sidekiq.service" +ynh_add_systemd_config --service="$app-sidekiq" --template="glitchsoc-sidekiq.service" yunohost service add "$app-sidekiq" --description="$app sidekiq service" -ynh_add_systemd_config --service="$app-streaming" --template="mastodon-streaming.service" +ynh_add_systemd_config --service="$app-streaming" --template="glitchsoc-streaming.service" yunohost service add "$app-streaming" --description="$app streaming service" ynh_add_config --template="cron" --destination="/etc/cron.d/$app" From acbc1def1dfc698724238500d6ab70cdb622ba80 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Wed, 27 Mar 2024 16:43:28 +0000 Subject: [PATCH 41/41] Auto-update READMEs --- ALL_README.md | 2 ++ README.md | 21 +++------------- README_fr.md | 21 +++------------- README_gl.md | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++ README_it.md | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 144 insertions(+), 36 deletions(-) create mode 100644 README_gl.md create mode 100644 README_it.md diff --git a/ALL_README.md b/ALL_README.md index d6e8f9c..3d6c579 100644 --- a/ALL_README.md +++ b/ALL_README.md @@ -2,3 +2,5 @@ - [Read the README in English](README.md) - [Lire le README en français](README_fr.md) +- [Le o README en galego](README_gl.md) +- [Leggi il “README” in italiano](README_it.md) diff --git a/README.md b/README.md index b59852e..5b738b0 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ It shall NOT be edited by hand. `glitch-soc` is a friendly [fork](https://en.wikipedia.org/wiki/Fork_(software_development)) of the open-source social media software [Mastodon](https://joinmastodon.org/), with the aim of providing additional features at the risk of potentially less stable software. +⚠️ `glitch-soc` is beta software, and under active development. Use at your own risk! + ### What's different from Mastodon? `glitch-soc` adds a number of experimental features to Mastodon, such as: @@ -43,24 +45,7 @@ It shall NOT be edited by hand. See more [on the documentation](https://glitch-soc.github.io/docs/). -**Shipped version:** 2024.03.20~ynh1 -## Disclaimers / important information - -⚠️ Glitch-Soc is beta software, and under active development. Use at your own risk! - -### Install - -* This app require a dedicated domain or subdomain. -* The user choosen during the installation is created in Glitch-Soc with admin rights. - -LDAP authentication and SSO are enabled. All YunoHost users can authenticate. - -We invite you to block remote malicious instances from the administration interface. You can also add text on your home page. - -### Known issues - -* When logged in with SSO, log-out from YunoHost's portal don't log-out from Glitch-Soc. See https://github.com/YunoHost/issues/issues/501 - +**Shipped version:** 2023.12.18~ynh1 ## Documentation and resources - Official app website: diff --git a/README_fr.md b/README_fr.md index 6fff70d..adf0f22 100644 --- a/README_fr.md +++ b/README_fr.md @@ -18,6 +18,8 @@ Il NE doit PAS être modifié à la main. `glitch-soc` est une [scission](https://fr.wikipedia.org/wiki/Fork_(d%C3%A9veloppement_logiciel)) sympa du logiciel de réseau social libre [Mastodon](https://joinmastodon.org/), avec comme objectif de fournir des fonctionnalités supplémentaires, au risque d'un logiciel un peu moins stable. +⚠️ `glitch-soc` est en constant développement, fournis avec les dernières fonctionnalités (incluant les derniers bugs). + ### Quelles sont les différences avec Mastodon? `glitch-soc` ajoute de nombreuses fonctionnalitées expérimentals, comme : @@ -43,24 +45,7 @@ Il NE doit PAS être modifié à la main. Voir plus [sur la documentation](https://glitch-soc.github.io/docs/) (en anglais). -**Version incluse :** 2024.03.20~ynh1 -## Avertissements / informations importantes - -Glitch-Soc est en constant développement, fournis avec les dernières fonctionnalités (incluant les derniers bugs). - -### Installation - -* L'application a besoin d'un domaine dédié. -* L'utilisateurice choisie lors de l'installation sera administrateurice de l'instance. Il est possible d'en ajouter d'autre depuis l'application. - -L'authentification par LDAP et le Single-Sign-On sont activés pour les utilisateurices YunoHost. - -Nous vous invitons à bloquer les instances malveillantes depuis l'interface d'administration. Vous pouvez également ajouter du texte sur votre page d'accueil. - -### Problèmes connus - -* En se connectant via le SSO, se déconnecter depuis le portail YunoHost ne vous déconnecte pas de Glitch-Soc. Voir https://github.com/YunoHost/issues/issues/501 - +**Version incluse :** 2023.12.18~ynh1 ## Documentations et ressources - Site officiel de l’app : diff --git a/README_gl.md b/README_gl.md new file mode 100644 index 0000000..287525f --- /dev/null +++ b/README_gl.md @@ -0,0 +1,68 @@ + + +# Glitch-Soc para YunoHost + +[![Nivel de integración](https://dash.yunohost.org/integration/glitchsoc.svg)](https://dash.yunohost.org/appci/app/glitchsoc) ![Estado de funcionamento](https://ci-apps.yunohost.org/ci/badges/glitchsoc.status.svg) ![Estado de mantemento](https://ci-apps.yunohost.org/ci/badges/glitchsoc.maintain.svg) + +[![Instalar Glitch-Soc con YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=glitchsoc) + +*[Le este README en outros idiomas.](./ALL_README.md)* + +> *Este paquete permíteche instalar Glitch-Soc 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 + +`glitch-soc` is a friendly [fork](https://en.wikipedia.org/wiki/Fork_(software_development)) of the open-source social media software [Mastodon](https://joinmastodon.org/), with the aim of providing additional features at the risk of potentially less stable software. + +⚠️ `glitch-soc` is beta software, and under active development. Use at your own risk! + +### What's different from Mastodon? + +`glitch-soc` adds a number of experimental features to Mastodon, such as: + +- Media improvements + - Images inside the CW spoiler + - fullwidth images + - scaling options +- Formatted toots +- Reply selection in lists +- Filter improvements +- Highlighting of misleading links +- Hiding follower count +- An app settings modal +- Collapsible toots +- Toot visibility icons +- Local-only toots +- Threaded mode +- `data-*` attributes on statuses +- Advanced theming via flavours+skins +- Doodle + +See more [on the documentation](https://glitch-soc.github.io/docs/). + + +**Versión proporcionada:** 2023.12.18~ynh1 +## Documentación e recursos + +- Web oficial da app: +- Repositorio de orixe do código: +- Tenda YunoHost: +- Informar dun problema: + +## Info de desenvolvemento + +Envía a túa colaboración á [rama `testing`](https://github.com/YunoHost-Apps/glitchsoc_ynh/tree/testing). + +Para probar a rama `testing`, procede deste xeito: + +```bash +sudo yunohost app install https://github.com/YunoHost-Apps/glitchsoc_ynh/tree/testing --debug +ou +sudo yunohost app upgrade glitchsoc -u https://github.com/YunoHost-Apps/glitchsoc_ynh/tree/testing --debug +``` + +**Máis info sobre o empaquetado da app:** diff --git a/README_it.md b/README_it.md new file mode 100644 index 0000000..ccc5bc9 --- /dev/null +++ b/README_it.md @@ -0,0 +1,68 @@ + + +# Glitch-Soc per YunoHost + +[![Livello di integrazione](https://dash.yunohost.org/integration/glitchsoc.svg)](https://dash.yunohost.org/appci/app/glitchsoc) ![Stato di funzionamento](https://ci-apps.yunohost.org/ci/badges/glitchsoc.status.svg) ![Stato di manutenzione](https://ci-apps.yunohost.org/ci/badges/glitchsoc.maintain.svg) + +[![Installa Glitch-Soc con YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=glitchsoc) + +*[Leggi questo README in altre lingue.](./ALL_README.md)* + +> *Questo pacchetto ti permette di installare Glitch-Soc 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 + +`glitch-soc` is a friendly [fork](https://en.wikipedia.org/wiki/Fork_(software_development)) of the open-source social media software [Mastodon](https://joinmastodon.org/), with the aim of providing additional features at the risk of potentially less stable software. + +⚠️ `glitch-soc` is beta software, and under active development. Use at your own risk! + +### What's different from Mastodon? + +`glitch-soc` adds a number of experimental features to Mastodon, such as: + +- Media improvements + - Images inside the CW spoiler + - fullwidth images + - scaling options +- Formatted toots +- Reply selection in lists +- Filter improvements +- Highlighting of misleading links +- Hiding follower count +- An app settings modal +- Collapsible toots +- Toot visibility icons +- Local-only toots +- Threaded mode +- `data-*` attributes on statuses +- Advanced theming via flavours+skins +- Doodle + +See more [on the documentation](https://glitch-soc.github.io/docs/). + + +**Versione pubblicata:** 2023.12.18~ynh1 +## Documentazione e risorse + +- Sito web ufficiale dell’app: +- Repository upstream del codice dell’app: +- Store di YunoHost: +- Segnala un problema: + +## Informazioni per sviluppatori + +Si prega di inviare la tua pull request alla [branch di `testing`](https://github.com/YunoHost-Apps/glitchsoc_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/glitchsoc_ynh/tree/testing --debug +o +sudo yunohost app upgrade glitchsoc -u https://github.com/YunoHost-Apps/glitchsoc_ynh/tree/testing --debug +``` + +**Maggiori informazioni riguardo il pacchetto di quest’app:**