diff --git a/README.md b/README.md index e7b9461..5ef317f 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,62 @@ -Lutim for YunoHost -================== +# Lutim for YunoHost -[Yunohost project](https://yunohost.org/#/) +[![Integration level](https://dash.yunohost.org/integration/lutim.svg)](https://ci-apps.yunohost.org/jenkins/job/lutim%20%28Community%29/lastBuild/consoleFull) +[![Install Lutim with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=lutim) -Application d'hébergement et de partage d'images anonyme. +*[Lire ce readme en français.](./README_fr.md)* -https://lut.im +> *This package allow you to install Lutim quickly and simply on a YunoHost server. +If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to know how to install and enjoy it.* -Le script installe le module perl *carton* via cpan et les paquets *fonts-droid* *ghostscript* *gsfonts* *imagemagick-common* *libavahi-client3* *libavahi-common-data* *libavahi-common3* *libcups2* *libcupsimage2* *libgs9* *libgs9-common* *libijs-0.35* *libjasper1* *libjbig0* *libjbig2dec0* *liblcms2-2* *liblqr-1-0* *libmagickcore5* *libpaper-utils* *libpaper1* *libtiff4* *perlmagick* *poppler-data*. +## Overview -**Mise à jour du package:** -sudo yunohost app upgrade lutim -u https://github.com/YunoHost-Apps/lutim_ynh +Lutim stores images and allows you to see them, download them or share them on social networks. +Images are indefinitely stored unless you request that they will be deleted at first view or after 24 hours / one week / one month / one year. -**Multi-utilisateur:** Non, accessible par tout les utilisateurs. +**Shipped version:** 0.8.6 -**Voir l'état du package:** -*[Dernier rapport hebdomadaire](https://forum.yunohost.org/t/rapport-hebdomadaire-dintegration-continue/2297)* -*[Dernier test d'intégration continue](https://ci-apps.yunohost.org/jenkins/job/lutim%20%28Community%29/lastBuild/consoleFull)* +## Screenshots + +## Configuration + +Edit the file `/var/www/lutim/lutim.conf` to edit the configuration of Lutim. +Then reload the lutim service. + +## Documentation + + * Official documentation: https://framagit.org/luc/lutim/wikis/home + * YunoHost documentation: There no other documentations, feel free to contribute. + +## YunoHost specific features + +#### Multi-users support + +Not relevant. + +#### Supported architectures + +* Tested on x86_64 + +## Limitations + +## Additionnal informations + +## Links + + * Report a bug: https://github.com/YunoHost-Apps/lutim_ynh/issues + * Lutim website: https://lut.im/ + * YunoHost website: https://yunohost.org/ + +--- + +Developers infos +---------------- + +Please do your pull request to the [testing branch](https://github.com/YunoHost-Apps/lutim_ynh/tree/testing). + +To try the testing branch, please proceed like that. +``` +sudo yunohost app install https://github.com/YunoHost-Apps/lutim_ynh/tree/testing --verbose +or +sudo yunohost app upgrade lutim -u https://github.com/YunoHost-Apps/lutim_ynh/tree/testing --verbose +``` diff --git a/README_fr.md b/README_fr.md new file mode 100644 index 0000000..3f37a03 --- /dev/null +++ b/README_fr.md @@ -0,0 +1,62 @@ +# Lutim pour YunoHost + +[![Niveau d'intégration](https://dash.yunohost.org/integration/lutim.svg)](https://ci-apps.yunohost.org/jenkins/job/lutim%20%28Community%29/lastBuild/consoleFull) +[![Installer Lutim avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=lutim) + +*[Read this readme in english.](./README.md)* + +> *Ce package vous permet d'installer Lutim rapidement et simplement sur un serveur YunoHost. +Si vous n'avez pas YunoHost, merci de regarder [ici](https://yunohost.org/#/install_fr) pour savoir comment l'installer et en profiter.* + +## Résumé + +Lutim stocke les images et vous permet de les voir, de les télécharger ou de les partager sur les réseaux sociaux. +Les images sont stockées indéfiniment à moins que vous ne demandiez qu'elles soient effacées à la première vue ou après 24 heures / une semaine / un mois / un an. + +**Version embarquée:** 0.8.6 + +## Captures d'écran + +## Configuration + +Editez le fichier `/var/www/lutim/lutim. conf` pour éditer la configuration de Lutim. +Rechargez ensuite le service lutim. + +## Documentation + + * Documentation officielle: https://framagit.org/luc/lutim/wikis/home + * Documentation YunoHost: Il n'y a pas d'autre documentation, n'hésitez pas à contribuer. + +## Fonctionnalités spécifiques à YunoHost + +#### Support multi-utilisateurs + +Non applicable. + +#### Architectures supportées. + +* Testé sur x86_64 + +## Limitations + +## Informations additionnelles + +## Liens + + * Reporter un bug: https://github.com/YunoHost-Apps/lutim_ynh/issues + * Site de Lutim: https://lut.im/ + * Site de YunoHost: https://yunohost.org/ + +--- + +Informations à l'intention des développeurs +---------------- + +Merci de faire vos pull request sur la [branche testing](https://github.com/YunoHost-Apps/lutim_ynh/tree/testing). + +Pour tester la branche testing, merci de procéder ainsi. +``` +sudo yunohost app install https://github.com/YunoHost-Apps/lutim_ynh/tree/testing --verbose +ou +sudo yunohost app upgrade lutim -u https://github.com/YunoHost-Apps/lutim_ynh/tree/testing --verbose +``` diff --git a/YEP.md b/YEP.md new file mode 100644 index 0000000..eca840d --- /dev/null +++ b/YEP.md @@ -0,0 +1,117 @@ +#### [Level 0](https://github.com/YunoHost/doc/blob/master/packaging_apps_levels_fr.md#niveau-0) +[YEP 1.1 - Nommer son app et son dépot](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-11) +`Validated` +[YEP 1.2 - Inscrire l'app sur un "répertoire" connu](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-12) +`Validated` + +#### [Level 1](https://github.com/YunoHost/doc/blob/master/packaging_apps_levels_fr.md#niveau-1) +[YEP 2.2 - Utiliser bash pour les scripts principaux](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-22) +`Validated` +[YEP 2.5 - Copier correctement des fichiers](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-25) +`Don't know` +[YEP 2.7 - Donner des permissions suffisantes aux instructions bash](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-27) +`Validated` +[YEP 2.15 - Suivre les instructions d'installation de l'application](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-215) +`Validated` + +#### [Level 2](https://github.com/YunoHost/doc/blob/master/packaging_apps_levels_fr.md#niveau-2) +[YEP 1.5 - Mettre à jour régulièrement le statut de l'app](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-11) +`Validated` +[YEP 2.18.2 - Gérer l'installation à la racine d’un nom de domaine](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-2182) +`Validated` - *Automatically verified.* +[YEP 2.18.3 - Gérer l'installation sur un sous-domaine](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-2183) +`Validated` - *Automatically verified.* +[YEP 2.18.4 - Gérer l'installation sur un chemin /path](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-2184) +`Validated` - *Automatically verified.* +[YEP 4.6 - Gère le multi-instance](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-11) +`Not applicable` - *Automatically verified.* + +#### [Level 3](https://github.com/YunoHost/doc/blob/master/packaging_apps_levels_fr.md#niveau-3) +[YEP 2.3 - Sauvegarder les réponses lors de l'installation](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-23) +`Validated` + +#### [Level 4](https://github.com/YunoHost/doc/blob/master/packaging_apps_levels_fr.md#niveau-4) +[YEP 4.1 - Lier au ldap](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-41) +`Not applicable` +[YEP 4.2 - Lier l'authentification au sso](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-42) +`Not applicable` + +#### [Level 5](https://github.com/YunoHost/doc/blob/master/packaging_apps_levels_fr.md#niveau-5) +[YEP 1.3 - Indiquer la licence associée au paquet](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-13) +`Validated` +[YEP 2.1 - Respecter le format du manifeste](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-21) +`Validated` - *Automatically verified.* +[YEP 2.12 - Utiliser les commandes pratiques (helpers)](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-212) +`Validated` +[YEP 2.18.1 - Lancer le script d'installation d'une webapp correctement](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-2181) +`Not applicable` + +#### [Level 6](https://github.com/YunoHost/doc/blob/master/packaging_apps_levels_fr.md#niveau-6) +[YEP 1.4 - Informer sur l'intention de maintenir un paquet](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-14) +`Validated` +[YEP 1.6 - Se tenir informé sur l'évolution du packaging d'apps](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-16) +`Validated` +[YEP 1.7 - Ajouter l'app à l'organisation YunoHost-Apps](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-17) +`Validated` - *Automatically verified.* +[YEP 1.8 - Publier des demandes de test](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-18) +`Validated` +[YEP 1.9 - Documenter l'app](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-19) +`Validated` +[YEP 1.10 - Garder un historique de version propre](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-110) +`Don't know` +[YEP 2.9 - Enlever toutes traces de l'app lors de la suppression](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-29) +`Validated` +[YEP 3.3 - Faciliter le contrôle de l'intégrité des sources](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-33) +`Validated` +[YEP 3.5 - Suivre les recommendations de la documentation de l'app](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-35) +`Validated` +[YEP 3.6 - Mettre à jour les versions contenant des CVE](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-36) +`Validated` +[YEP 4.3 - Fournir un script de sauvegarde YunoHost fonctionnel](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-43) +`Validated` - *Automatically verified.* +[YEP 4.4 - Fournir un script de restauration YunoHost fonctionnel](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-44) +`Validated` - *Automatically verified.* + +#### [Level 7](https://github.com/YunoHost/doc/blob/master/packaging_apps_levels_fr.md#niveau-7) +[YEP 2.6 - Annuler l'action si les valeurs d'entrées sont incorrectes](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-26) +`Validated` +[YEP 3.2 - Ouvrir un port correctement](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-32) +`Validated` + +#### [Level 8](https://github.com/YunoHost/doc/blob/master/packaging_apps_levels_fr.md#niveau-8) +[YEP 2.4 - Détecter et gérer les erreurs](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-24) +`Validated` +[YEP 2.8 - Modifier correctement une configuration système](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-28) +`Validated` +[YEP 2.16 - Vérifier la disponibilité des dépendances sur ARM, x86 et x64](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-216) +`Not yet validated` - *Automatically verified.* +[YEP 2.18.5 - Gérer la tuile YunoHost pour faciliter la navigation entre les applications](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-2185) +`Validated` +[YEP 3.4 - Isoler l'app](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-34) +`Partially validated` +[YEP 4.5 - Utiliser les hooks](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-45) +`Not applicable` + +#### [Level 9](https://github.com/YunoHost/doc/blob/master/packaging_apps_levels_fr.md#niveau-9) +[YEP 2.10 - Configurer les logs de l'application](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-210) +`Validated` +[YEP 2.11 - Utiliser une variable plutôt que l'app id directement](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-211) +`Validated` +[YEP 2.13 - Traduire le paquet en anglais](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-213) +`Not yet validated` +[YEP 2.14 - Remplir correctement un fichier de conf](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-214) +`Not yet validated` +[YEP 2.17 - Prendre en compte la version d'origine lors des mises à jour](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-217) +`Validated` +[YEP 4.2.1 - Déconnexion](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-421) +`Don't know` + +#### Other YEP +[YEP 3.1 - Ne pas demander ou stocker de mot de passe LDAP](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-31) +`Validated` +[YEP 4.7 - Ajouter un module à la CLI](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-47) +`Not applicable` +[YEP 4.8 - Ajouter un module à l'admin web](https://github.com/YunoHost/doc/blob/master/packaging_apps_guidelines_fr.md#yep-48) +`Not applicable` + +State of each YEP can be one of these: `Validated`, `Partially validated`, `Not yet validated`, `Not applicable`, `Don't know`. diff --git a/check_process b/check_process index 9c498d8..712cdbe 100644 --- a/check_process +++ b/check_process @@ -1,9 +1,7 @@ ;; Test complet - auto_remove=1 ; Manifest domain="domain.tld" (DOMAIN) path="/path" (PATH) - admin="john" (USER) is_public=1 (PUBLIC|public=1|private=0) always_encrypt=1 ; Checks @@ -14,19 +12,19 @@ setup_private=1 setup_public=1 upgrade=1 + upgrade=1 from_commit=4c29aa94f9d9048411c6e165e122e03574fb9b8d backup_restore=1 multi_instance=0 incorrect_path=1 port_already_use=1 (8095) - change_url=0 + change_url=1 ;;; Levels Level 1=auto Level 2=auto Level 3=auto # Level 4: Pas de gestion des utilisateurs Level 4=na -# Level 5: https://github.com/YunoHost-Apps/lutim_ynh/issues/14 - Level 5=1 + Level 5=auto Level 6=auto Level 7=auto Level 8=0 @@ -35,3 +33,7 @@ ;;; Options Email= Notification=down +;;; Upgrade options + ; commit=4c29aa94f9d9048411c6e165e122e03574fb9b8d + name=08 Sep 2017 4c29aa94f9d9048411c6e165e122e03574fb9b8d + manifest_arg=domain=DOMAIN&path=PATH&admin=USER&is_public=1&always_encrypt=1& diff --git a/conf/app.src b/conf/app.src index 35c1ac8..5790e69 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://framagit.org/luc/lutim/repository/archive.tar.gz?ref=dd4ca47ac0ea8e5527364ba9ebddfab0c977f3ea -SOURCE_SUM=64e86adf69cf63fcf025314a5ee5d30c +SOURCE_URL=https://framagit.org/luc/lutim/repository/0.8.6/archive.tar.gz +SOURCE_SUM=3906c49d4b75dd6cc1065c3a98c43ce1 SOURCE_SUM_PRG=md5sum SOURCE_FORMAT=tar.gz SOURCE_IN_SUBDIR=true diff --git a/conf/lutim.conf.template b/conf/lutim.conf.template index 4d7eed3..b85c181 100644 --- a/conf/lutim.conf.template +++ b/conf/lutim.conf.template @@ -25,6 +25,10 @@ # mandatory secrets => ['__SECRET__'], + # choose a theme. See the available themes in `themes` directory + # optional, default is 'default' + #theme => 'default', + # length of the images random URL # optional, default is 8 #length => 8, @@ -107,12 +111,52 @@ #prefix => '/', prefix => '__PATH__', + # choose what database you want to use + # valid choices are sqlite and postgresql (all lowercase) + # optional, default is sqlite + #dbtype => 'sqlite', + # define a path to the SQLite database # you can define it relative to lutim directory or set an absolute path # remember that it has to be in a directory writable by Lutim user # optional, default is lutim.db #db_path => 'lutim.db', + # PostgreSQL ONLY - only used if dbtype is set to postgresql + # these are the credentials to access the PostgreSQL database + # mandatory if you choosed postgresql as dbtype + #pgdb => { + # database => 'lutim', + # host => 'localhost', + # #user => 'DBUSER', + # #pwd => 'DBPASSWORD' + #}, + + # use Minion instead of directly increase counters + # need to launch a minion worker service if enabled + # optional, Minion is disabled by default + #minion => { + # enabled => 0, + # # Which Minion backend to use? + # # valid values are sqlite and postgresql (all lowercase) + # # mandatory if Minion is enabled, default is sqlite + # dbtype => 'sqlite', + # # SQLite ONLY - only used if if you choose sqlite as Minion backend, define the path to the minion database + # # you can define it relative to lutim directory or set an absolute path + # # remember that it has to be in a directory writable by Lutim user + # # optional, default is minion.db + # db_path => 'minion.db', + # # PostgreSQL ONLY - only used if you choose postgresql as Minion backend + # # these are the credentials to access the Minion's PostgreSQL database + # # mandatory if you choosed postgresql as Minion backend, no default + # pgdb => { + # database => 'lutim_minion', + # host => 'localhost', + # #user => 'DBUSER', + # #pwd => 'DBPASSWORD' + # } + #}, + # define the height of the thumbnails generated at users' will # this is not the height of the thumbnails send after upload, # we're talking about thumbnails generated when someone asked for @@ -121,6 +165,14 @@ # optional, default is 100 (pixels) #thumbnail_size => 100, + # maximum number of files that can be downloaded as a single zip archive + # if too many files are asked, it results a timeout, so Lutim split the zip URL + # in multiple URLs, each with max_file_size images. + # timeout behavior depends heavily on your server ressources (CPU) and if images + # are encrypted + # optional, default is 15 + #max_files_in_zip => 15, + ########################## # Lutim cron jobs settings ########################## diff --git a/conf/lutim.service b/conf/lutim.service deleted file mode 100644 index 5bcc908..0000000 --- a/conf/lutim.service +++ /dev/null @@ -1,17 +0,0 @@ -[Unit] -Description=Image hosting and sharing service -After=network.target - -[Service] -Type=simple -User=__APP__ -Group=__APP__ -RemainAfterExit=yes -WorkingDirectory=__FINALPATH__ -PIDFile=__FINALPATH__script/hypnotoad.pid -ExecStart=/usr/bin/carton exec hypnotoad script/lutim >> /var/log/lutim/production.log 2>&1 -ExecStop=/usr/bin/carton exec hypnotoad -s script/lutim >> /var/log/lutim/production.log 2>&1 -ExecReload=/usr/bin/carton exec hypnotoad script/lutim >> /var/log/lutim/production.log 2>&1 - -[Install] -WantedBy=multi-user.target diff --git a/conf/nginx.conf b/conf/nginx.conf index fa51eee..72fc88c 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,28 +1,29 @@ location __PATH__ { + if ($scheme = http) { rewrite ^ https://$server_name$request_uri? permanent; } - # Include SSOWAT user panel. - include conf.d/yunohost_panel.conf.inc; + # Include SSOWAT user panel. + include conf.d/yunohost_panel.conf.inc; - # This is important for user's privacy ! - access_log off; - error_log /var/log/nginx/lutim.error.log; + # This is important for user's privacy ! + access_log off; + error_log /var/log/nginx/lutim.error.log; - # This is important ! Make it OK with your Lutim configuration - client_max_body_size 40M; + # This is important ! Make it OK with your Lutim configuration + client_max_body_size 40M; - proxy_pass http://127.0.0.1:__PORT__; + proxy_pass http://127.0.0.1:__PORT__; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - # Lutim reads this header and understands that the current session is actually HTTPS. - # Enable it if you run a HTTPS server (in this case, don't forgot to change the listen port $ - proxy_set_header X-Forwarded-Proto https; + # Lutim reads this header and understands that the current session is actually HTTPS. + # Enable it if you run a HTTPS server (in this case, don't forgot to change the listen port + proxy_set_header X-Forwarded-Proto https; - # We expect the downsteam servers to redirect to the right hostname, so don't do any rewrite$ - proxy_redirect off; + # We expect the downsteam servers to redirect to the right hostname, so don't do any rewrite + proxy_redirect off; } diff --git a/manifest.json b/manifest.json index 5ab2c03..a704ad6 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "Self hosting images and sharing anonymous application", "fr": "Application d'hébergement et de partage d'images anonyme" }, - "version": "0.7.1", + "version": "0.8.6~ynh1", "url": "https://lut.im", "license": "AGPL-3.0", "maintainer": { @@ -41,15 +41,6 @@ "example": "/lutim", "default": "/lutim" }, - { - "name": "admin", - "type": "user", - "ask": { - "en": "Choose the Lutim administrator (must be an existing YunoHost user)", - "fr": "Choisissez un administrateur Lutim (doit être un utilisateur YunoHost)" - }, - "example": "john" - }, { "name": "is_public", "type": "boolean", diff --git a/scripts/_apt b/scripts/_apt new file mode 100644 index 0000000..3a3b2aa --- /dev/null +++ b/scripts/_apt @@ -0,0 +1,37 @@ +#!/bin/bash + +# https://github.com/YunoHost/yunohost/pull/391 + +# Define and install dependencies with a equivs control file +# This helper can/should only be called once per app +# +# usage: ynh_install_app_dependencies dep [dep [...]] +# | arg: dep - the package name to install in dependence +ynh_install_app_dependencies () { + dependencies=$@ + manifest_path="../manifest.json" + if [ ! -e "$manifest_path" ]; then + manifest_path="../settings/manifest.json" # Into the restore script, the manifest is not at the same place + fi + version=$(grep '\"version\": ' "$manifest_path" | cut -d '"' -f 4) # Retrieve the version number in the manifest file. + dep_app=${app//_/-} # Replace all '_' by '-' + +# if ynh_package_is_installed "${dep_app}-ynh-deps"; then +# echo "A package named ${dep_app}-ynh-deps is already installed" >&2 +# else + cat > /tmp/${dep_app}-ynh-deps.control << EOF # Make a control file for equivs-build +Section: misc +Priority: optional +Package: ${dep_app}-ynh-deps +Version: ${version} +Depends: ${dependencies// /, } +Architecture: all +Description: Fake package for ${app} (YunoHost app) dependencies + This meta-package is only responsible of installing its dependencies. +EOF + ynh_package_install_from_equivs /tmp/${dep_app}-ynh-deps.control \ + || ynh_die "Unable to install dependencies" # Install the fake package and its dependencies + rm /tmp/${dep_app}-ynh-deps.control + ynh_app_setting_set $app apt_dependencies $dependencies +# fi +} diff --git a/scripts/_common.sh b/scripts/_common.sh index 0c814ff..883fe5e 100755 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -1,31 +1,5 @@ #!/bin/bash -#================================================= -# DISPLAYING -#================================================= - -NO_PRINT () { # Supprime l'affichage dans stdout pour la commande en argument. - set +x - $@ - set -x -} - -WARNING () { # Écrit sur le canal d'erreur pour passer en warning. - $@ >&2 -} - -SUPPRESS_WARNING () { # Force l'écriture sur la sortie standard - $@ 2>&1 -} - -QUIET () { # Redirige la sortie standard dans /dev/null - $@ > /dev/null -} - -ALL_QUIET () { # Redirige la sortie standard et d'erreur dans /dev/null - $@ > /dev/null 2>&1 -} - #================================================= # BACKUP #================================================= @@ -42,8 +16,8 @@ CHECK_SIZE () { # Vérifie avant chaque backup que l'espace est suffisant if [ $free_space -le $backup_size ] then - WARNING echo "Espace insuffisant pour sauvegarder $file_to_analyse." - WARNING echo "Espace disponible: $(HUMAN_SIZE $free_space)" + ynh_print_err "Espace insuffisant pour sauvegarder $file_to_analyse." + ynh_print_err "Espace disponible: $(HUMAN_SIZE $free_space)" ynh_die "Espace nécessaire: $(HUMAN_SIZE $backup_size)" fi } @@ -57,7 +31,7 @@ IS_PACKAGE_CHECK () { # Détermine une exécution en conteneur (Non testé) } #================================================= -# NODEJS +# EXPERIMENTAL HELPERS #================================================= # INFOS @@ -78,6 +52,19 @@ node_version_path="/opt/node_n/n/versions/node" # N_PREFIX est le dossier de n, il doit être chargé dans les variables d'environnement pour n. export N_PREFIX="$n_install_dir" +ynh_install_n () { + echo "Installation of N - Node.js version management" >&2 + # Build an app.src for n + mkdir -p "../conf" + echo "SOURCE_URL=https://github.com/tj/n/archive/v2.1.7.tar.gz +SOURCE_SUM=2ba3c9d4dd3c7e38885b37e02337906a1ee91febe6d5c9159d89a9050f2eea8f" > "../conf/n.src" + # Download and extract n + ynh_setup_source "$n_install_dir/git" n + # Install n + (cd "$n_install_dir/git" + PREFIX=$N_PREFIX make install 2>&1) +} + ynh_use_nodejs () { nodejs_version=$(ynh_app_setting_get $app nodejs_version) @@ -113,9 +100,10 @@ ynh_install_nodejs () { test -x /usr/bin/npm && mv /usr/bin/npm /usr/bin/npm_n # If n is not previously setup, install it - n --version > /dev/null 2>&1 || \ - ( echo "Installation of N - Node.js version management" >&2; \ - curl -sL $n_install_script | N_PREFIX=$N_PREFIX bash -s -- -y - 2>&1 ) + if ! test n --version > /dev/null 2>&1 + then + ynh_install_n + fi # Modify the default N_PREFIX in n script ynh_replace_string "^N_PREFIX=\${N_PREFIX-.*}$" "N_PREFIX=\${N_PREFIX-$N_PREFIX}" "$n_install_dir/bin/n" @@ -219,3 +207,357 @@ EOF chmod +x "/etc/cron.daily/node_update" } + +#================================================= + +# Start or restart a service and follow its booting +# +# usage: ynh_check_starting "Line to match" [Log file] [Timeout] +# +# | arg: Line to match - The line to find in the log to attest the service have finished to boot. +# | arg: Log file - The log file to watch +# /var/log/$app/$app.log will be used if no other log is defined. +# | arg: Timeout - The maximum time to wait before ending the watching. Defaut 300 seconds. +ynh_check_starting () { + local line_to_match="$1" + local app_log="${2:-/var/log/$app/$app.log}" + local timeout=${3:-300} + + ynh_clean_check_starting () { + # Stop the execution of tail. + kill -s 15 $pid_tail 2>&1 + ynh_secure_remove "$templog" 2>&1 + } + + echo "Starting of $app" >&2 + systemctl restart $app + local templog="$(mktemp)" + # Following the starting of the app in its log + tail -f -n1 "$app_log" > "$templog" & + # Get the PID of the tail command + local pid_tail=$! + + local i=0 + for i in `seq 1 $timeout` + do + # Read the log until the sentence is found, that means the app finished to start. Or run until the timeout + if grep --quiet "$line_to_match" "$templog" + then + echo "The service $app has correctly started." >&2 + break + fi + echo -n "." >&2 + sleep 1 + done + if [ $i -eq $timeout ] + then + echo "The service $app didn't fully started before the timeout." >&2 + fi + + echo "" + ynh_clean_check_starting +} + +#================================================= + +ynh_print_log () { + echo "${1}" +} + +# Print an info on stdout +# +# usage: ynh_print_info "Text to print" +# | arg: text - The text to print +ynh_print_info () { + ynh_print_log "[INFO] ${1}" +} + +# Print a warning on stderr +# +# usage: ynh_print_warn "Text to print" +# | arg: text - The text to print +ynh_print_warn () { + ynh_print_log "[WARN] ${1}" >&2 +} + +# Print a error on stderr +# +# usage: ynh_print_err "Text to print" +# | arg: text - The text to print +ynh_print_err () { + ynh_print_log "[ERR] ${1}" >&2 +} + +# Execute a command and print the result as an error +# +# usage: ynh_exec_err command to execute +# usage: ynh_exec_err "command to execute | following command" +# In case of use of pipes, you have to use double quotes. Otherwise, this helper will be executed with the first command, then be send to the next pipe. +# +# | arg: command - command to execute +ynh_exec_err () { + ynh_print_err "$(eval $@)" +} + +# Execute a command and print the result as a warning +# +# usage: ynh_exec_warn command to execute +# usage: ynh_exec_warn "command to execute | following command" +# In case of use of pipes, you have to use double quotes. Otherwise, this helper will be executed with the first command, then be send to the next pipe. +# +# | arg: command - command to execute +ynh_exec_warn () { + ynh_print_warn "$(eval $@)" +} + +# Execute a command and force the result to be printed on stdout +# +# usage: ynh_exec_warn_less command to execute +# usage: ynh_exec_warn_less "command to execute | following command" +# In case of use of pipes, you have to use double quotes. Otherwise, this helper will be executed with the first command, then be send to the next pipe. +# +# | arg: command - command to execute +ynh_exec_warn_less () { + eval $@ 2>&1 +} + +# Execute a command and redirect stdout in /dev/null +# +# usage: ynh_exec_quiet command to execute +# usage: ynh_exec_quiet "command to execute | following command" +# In case of use of pipes, you have to use double quotes. Otherwise, this helper will be executed with the first command, then be send to the next pipe. +# +# | arg: command - command to execute +ynh_exec_quiet () { + eval $@ > /dev/null +} + +# Execute a command and redirect stdout and stderr in /dev/null +# +# usage: ynh_exec_fully_quiet command to execute +# usage: ynh_exec_fully_quiet "command to execute | following command" +# In case of use of pipes, you have to use double quotes. Otherwise, this helper will be executed with the first command, then be send to the next pipe. +# +# | arg: command - command to execute +ynh_exec_fully_quiet () { + eval $@ > /dev/null 2>&1 +} + +#================================================= + +# Install or update the main directory yunohost.multimedia +# +# usage: ynh_multimedia_build_main_dir +ynh_multimedia_build_main_dir () { + wget -nv https://github.com/YunoHost-Apps/yunohost.multimedia/archive/master.zip 2>&1 + unzip -q master.zip + ./yunohost.multimedia-master/script/ynh_media_build.sh +} + +# Add a directory in yunohost.multimedia +# This "directory" will be a symbolic link to a existing directory. +# +# usage: ynh_multimedia_addfolder "Source directory" "Destination directory" +# +# | arg: Source directory - The real directory which contains your medias. +# | arg: Destination directory - The name and the place of the symbolic link, relative to "/home/yunohost.multimedia" +ynh_multimedia_addfolder () { + local source_dir="$1" + local dest_dir="$2" + ./yunohost.multimedia-master/script/ynh_media_addfolder.sh --source="$source_dir" --dest="$dest_dir" +} + +# Move a directory in yunohost.multimedia, and replace by a symbolic link +# +# usage: ynh_multimedia_movefolder "Source directory" "Destination directory" +# +# | arg: Source directory - The real directory which contains your medias. +# It will be moved to "Destination directory" +# A symbolic link will replace it. +# | arg: Destination directory - The new name and place of the directory, relative to "/home/yunohost.multimedia" +ynh_multimedia_movefolder () { + local source_dir="$1" + local dest_dir="$2" + ./yunohost.multimedia-master/script/ynh_media_addfolder.sh --inv --source="$source_dir" --dest="$dest_dir" +} + +# Allow an user to have an write authorisation in multimedia directories +# +# usage: ynh_multimedia_addaccess user_name +# +# | arg: user_name - The name of the user which gain this access. +ynh_multimedia_addaccess () { + local user_name=$1 + groupadd -f multimedia + usermod -a -G multimedia $user_name +} + +#================================================= + +# Create a dedicated fail2ban config (jail and filter conf files) +# +# usage: ynh_add_fail2ban_config log_file filter [max_retry [ports]] +# | arg: log_file - Log file to be checked by fail2ban +# | arg: failregex - Failregex to be looked for by fail2ban +# | arg: max_retry - Maximum number of retries allowed before banning IP address - default: 3 +# | arg: ports - Ports blocked for a banned IP address - default: http,https +ynh_add_fail2ban_config () { + # Process parameters + logpath=$1 + failregex=$2 + max_retry=${3:-3} + ports=${4:-http,https} + + test -n "$logpath" || ynh_die "ynh_add_fail2ban_config expects a logfile path as first argument and received nothing." + test -n "$failregex" || ynh_die "ynh_add_fail2ban_config expects a failure regex as second argument and received nothing." + + finalfail2banjailconf="/etc/fail2ban/jail.d/$app.conf" + finalfail2banfilterconf="/etc/fail2ban/filter.d/$app.conf" + ynh_backup_if_checksum_is_different "$finalfail2banjailconf" 1 + ynh_backup_if_checksum_is_different "$finalfail2banfilterconf" 1 + + sudo tee $finalfail2banjailconf <&2 + unset YNH_FORCE_UPGRADE + elif [ "$package_check" != "0" ] + then + echo "Upgrade forced for package check." >&2 + else + ynh_die "Up-to-date, nothing to do" 0 + fi + fi +} + +#================================================= + +# Send an email to inform the administrator +# +# usage: ynh_send_readme_to_admin app_message [recipients] +# | arg: app_message - The message to send to the administrator. +# | arg: recipients - The recipients of this email. Use spaces to separate multiples recipients. - default: root +# example: "root admin@domain" +# If you give the name of a YunoHost user, ynh_send_readme_to_admin will find its email adress for you +# example: "root admin@domain user1 user2" +ynh_send_readme_to_admin() { + local app_message="${1:-...No specific informations...}" + local recipients="${2:-root}" + + # Retrieve the email of users + find_mails () { + local list_mails="$1" + local mail + local recipients=" " + # Read each mail in argument + for mail in $list_mails + do + # Keep root or a real email address as it is + if [ "$mail" = "root" ] || echo "$mail" | grep --quiet "@" + then + recipients="$recipients $mail" + else + # But replace an user name without a domain after by its email + if mail=$(ynh_user_get_info "$mail" "mail" 2> /dev/null) + then + recipients="$recipients $mail" + fi + fi + done + echo "$recipients" + } + recipients=$(find_mails "$recipients") + + local mail_subject="☁️🆈🅽🅷☁️: \`$app\` was just installed!" + + local mail_message="This is an automated message from your beloved YunoHost server. + +Specific informations for the application $app. + +$app_message + +--- +Automatic diagnosis data from YunoHost + +$(yunohost tools diagnosis | grep -B 100 "services:" | sed '/services:/d')" + + # Send the email to the recipients + echo "$mail_message" | mail -a "Content-Type: text/plain; charset=UTF-8" -s "$mail_subject" "$recipients" +} + +#================================================= +#============= FUTURE YUNOHOST HELPER ============ +#================================================= + +# Delete a file checksum from the app settings +# +# $app should be defined when calling this helper +# +# usage: ynh_remove_file_checksum file +# | arg: file - The file for which the checksum will be deleted +ynh_delete_file_checksum () { + local checksum_setting_name=checksum_${1//[\/ ]/_} # Replace all '/' and ' ' by '_' + ynh_app_setting_delete $app $checksum_setting_name +} diff --git a/scripts/_sed b/scripts/_sed new file mode 100644 index 0000000..cc76ab9 --- /dev/null +++ b/scripts/_sed @@ -0,0 +1,51 @@ +#!/bin/bash + +# https://github.com/YunoHost/yunohost/pull/394 + +# Substitute/replace a string (or expression) by another in a file +# +# usage: ynh_replace_string match_string replace_string target_file +# | arg: match_string - String to be searched and replaced in the file +# | arg: replace_string - String that will replace matches +# | arg: target_file - File in which the string will be replaced. +# +# As this helper is based on sed command, regular expressions and +# references to sub-expressions can be used +# (see sed manual page for more information) +ynh_replace_string () { + local delimit=@ + local match_string=$1 + local replace_string=$2 + local workfile=$3 + + # Escape the delimiter if it's in the string. + match_string=${match_string//${delimit}/"\\${delimit}"} + replace_string=${replace_string//${delimit}/"\\${delimit}"} + + sudo sed --in-place "s${delimit}${match_string}${delimit}${replace_string}${delimit}g" "$workfile" +} + +# Substitute/replace a password by another in a file +# +# usage: ynh_replace_password_string match_string replace_string target_file +# | arg: match_string - String to be searched and replaced in the file +# | arg: replace_string - String that will replace matches +# | arg: target_file - File in which the string will be replaced. +# +# This helper will use ynh_replace_string, but as you can use special +# characters, you can't use some regular expressions and sub-expressions. +ynh_replace_password_string () { + local match_string=$1 + local replace_string=$2 + local workfile=$3 + + # Escape any backslash to preserve them as simple backslash. + match_string=${match_string//\\/"\\\\"} + replace_string=${replace_string//\\/"\\\\"} + + # Escape the & character, who has a special function in sed. + match_string=${match_string//&/"\&"} + replace_string=${replace_string//&/"\&"} + + ynh_replace_string "$match_string" "$replace_string" "$workfile" +} diff --git a/scripts/_variables b/scripts/_variables index 2f0a533..c1c74ae 100644 --- a/scripts/_variables +++ b/scripts/_variables @@ -1,4 +1,4 @@ #!/bin/bash # Dependencies -app_depencencies="carton perlmagick" +app_depencencies="carton perlmagick libpq-dev" diff --git a/scripts/change_url b/scripts/change_url new file mode 100644 index 0000000..52411cb --- /dev/null +++ b/scripts/change_url @@ -0,0 +1,137 @@ +#!/bin/bash + +#================================================= +# GENERIC STARTING +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source _common.sh +source /usr/share/yunohost/helpers +source _sed + +#================================================= +# RETRIEVE ARGUMENTS +#================================================= + +old_domain=$YNH_APP_OLD_DOMAIN +old_path=$YNH_APP_OLD_PATH + +new_domain=$YNH_APP_NEW_DOMAIN +new_path=$YNH_APP_NEW_PATH + +app=$YNH_APP_INSTANCE_NAME + +#================================================= +# LOAD SETTINGS +#================================================= + +final_path=$(ynh_app_setting_get $app final_path) +is_public=$(ynh_app_setting_get $app is_public) + +#================================================= +# CHECK THE SYNTAX OF THE PATHS +#================================================= + +test -n "$old_path" || old_path="/" +test -n "$new_path" || new_path="/" +new_path=$(ynh_normalize_url_path $new_path) +old_path=$(ynh_normalize_url_path $old_path) + +#================================================= +# CHECK WHICH PARTS SHOULD BE CHANGED +#================================================= + +change_domain=0 +if [ "$old_domain" != "$new_domain" ] +then + change_domain=1 +fi + +change_path=0 +if [ "$old_path" != "$new_path" ] +then + change_path=1 +fi + +#================================================= +# MANAGE FAILURE OF THE SCRIPT +#================================================= + +ynh_clean_setup () { +# Nettoyage des résidus d'installation non pris en charge par le script remove. + ynh_clean_check_starting +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + +#================================================= +# STANDARD MODIFICATIONS +#================================================= +# MODIFY URL IN NGINX CONF +#================================================= + +nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf + +# Change the path in the nginx config file +if [ $change_path -eq 1 ] +then + # Make a backup of the original nginx config file if modified + ynh_backup_if_checksum_is_different "$nginx_conf_path" + + # Replace locations starting with old_path + # Look for every location possible patterns (see https://nginx.org/en/docs/http/ngx_http_core_module.html#location) + ynh_replace_string "location\( \(=\|~\|~\*\|\^~\)\)\? $old_path" "location\1 $new_path" "$nginx_conf_path" + + # Calculate and store the nginx config file checksum + ynh_store_file_checksum "$nginx_conf_path" +fi + +# Change the domain for nginx +if [ $change_domain -eq 1 ] +then + # Delete file checksum for the old conf file location + ynh_delete_file_checksum "$nginx_conf_path" + mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf + + nginx_conf_path=/etc/nginx/conf.d/$new_domain.d/$app.conf + # Calculate and store the nginx config file checksum + ynh_store_file_checksum "$nginx_conf_path" +fi + +#================================================= +# UPDATE SSOWAT +#================================================= + +if [ $is_public -eq 0 ] +then # Si l'app est privée, seul le visionnage des images reste public + if [ "$new_path" == "/" ]; then + new_path="" # Si path correspond à la racine, supprime le / pour éviter une erreur de la regex. + fi + # Modifie le domaine pour qu'il passe dans une regex + domain_regex=$(echo "$new_domain" | sed 's@-@.@g') + ynh_app_setting_set $app protected_regex "$domain_regex$new_path/stats$","$domain_regex$new_path/manifest.webapp$","$domain_regex$new_path/$","$domain_regex$new_path/d/.*$","$domain_regex$new_path/m/.*$" +fi + +#================================================= +# SPECIFIC MODIFICATIONS +#================================================= +# REPLACE THE PATH IN THE CONFIG OF LUTIM +#================================================= + +ynh_replace_string "\(^ *prefix.*=> '\).*" "\1$new_path'," "$final_path/lutim.conf" + +#================================================= +# GENERIC FINALISATION +#================================================= +# RELOAD NGINX +#================================================= + +systemctl reload nginx + +#================================================= +# START AND CHECK LUTIM BOOTING +#================================================= + +# Wait for lutim fully started +ynh_check_starting "Manager.*started" "/var/log/$app/production.log" "120" diff --git a/scripts/install b/scripts/install index 5c2012e..5d39039 100644 --- a/scripts/install +++ b/scripts/install @@ -15,7 +15,11 @@ source _variables # MANAGE FAILURE OF THE SCRIPT #================================================= -ynh_abort_if_errors # Active trap pour arrêter le script si une erreur est détectée. +ynh_clean_setup () { +# Nettoyage des résidus d'installation non pris en charge par le script remove. + ynh_clean_check_starting +} +ynh_abort_if_errors #================================================= # RETRIEVE ARGUMENTS FROM THE MANIFEST @@ -23,7 +27,6 @@ ynh_abort_if_errors # Active trap pour arrêter le script si une erreur est dét domain=$YNH_APP_ARG_DOMAIN path_url=$YNH_APP_ARG_PATH -admin=$YNH_APP_ARG_ADMIN is_public=$YNH_APP_ARG_IS_PUBLIC always_encrypt=$YNH_APP_ARG_ALWAYS_ENCRYPT @@ -48,7 +51,6 @@ ynh_webpath_register $app $domain $path_url # STORE SETTINGS FROM MANIFEST #================================================= -ynh_app_setting_set $app admin $admin ynh_app_setting_set $app domain $domain ynh_app_setting_set $app is_public $is_public ynh_app_setting_set $app always_encrypt $always_encrypt @@ -61,7 +63,7 @@ ynh_app_setting_set $app always_encrypt $always_encrypt port=$(ynh_find_port 8095) # Cherche un port libre. # Ouvre le port dans le firewall -ALL_QUIET yunohost firewall allow --no-upnp TCP $port +ynh_exec_fully_quiet yunohost firewall allow --no-upnp TCP $port ynh_app_setting_set $app port $port #================================================= @@ -124,9 +126,8 @@ chmod +x $final_path/script/lutim #================================================= mkdir -p /var/log/$app/ -pushd $final_path # cd avec une stack pour revenir en arrière -carton install 2>&1 | tee -a "/var/log/$app/setup_carton.log" -popd # Revient au dossier courant avant pushd +(cd $final_path +carton install 2>&1 | tee -a "/var/log/$app/setup_carton.log") # Configure le path du dossier perl en fonction de l'architecture système arch_dir=$(ls -1 $final_path/local/lib/perl5/ | grep linux-gnu) @@ -151,19 +152,6 @@ ln -s /var/log/$app/production.log "$final_path/log/production.log" chown -R $app: $final_path -#================================================= -# START LUTIM -#================================================= - -systemctl start lutim -# Set right permissions on new files created at first start -chown -R $app: $final_path - -# Check lutim starting -tempfile="$(mktemp)" -tail -f -n1 /var/log/$app/production.log > "$tempfile" & # Suit le démarrage dans le log -PID_TAIL=$! # Récupère le PID de la commande tail, qui est passée en arrière plan. - #================================================= # GENERIC FINALISATION #================================================= @@ -203,15 +191,18 @@ systemctl reload nginx # CHECK LUTIM BOOTING #================================================= -for i in `seq 1 60` -do # La boucle attend le démarrage de lutim. Ou 1 minute. Cette boucle évite simplement un 502 au début, car le démarrage est parfois long... - if grep -q "Manager.*started" "$tempfile"; then - WARNING echo "Le service $app a démarré correctement." - break # Si le log annonce le démarrage de lutim, sort de la boucle. - fi - WARNING echo -n "." - sleep 1 -done -echo "" -QUIET kill -s 15 $PID_TAIL # Arrête l'exécution de tail. -ynh_secure_remove "$tempfile" +# Wait for lutim fully started +ynh_check_starting "Manager.*started" "/var/log/$app/production.log" "120" + +# Set right permissions on new files created at first start +chown -R $app: $final_path + +#================================================= +# SEND A README FOR THE ADMIN +#================================================= + +message="You can find a config file at $final_path/lutim.conf + +If you facing an issue or want to improve this app, please open a new issue in this project: https://github.com/YunoHost-Apps/lutim_ynh" + +ynh_send_readme_to_admin "$message" "root" diff --git a/scripts/remove b/scripts/remove index 62d564c..6fe12f3 100644 --- a/scripts/remove +++ b/scripts/remove @@ -31,7 +31,7 @@ ynh_remove_systemd_config if yunohost service status | grep -q $app # Test l'existence du service dans Yunohost then - echo "Remove $app service" + ynh_print_info "Remove $app service" >&2 yunohost service remove $app fi diff --git a/scripts/restore b/scripts/restore index b8fa25f..b7b3821 100644 --- a/scripts/restore +++ b/scripts/restore @@ -20,6 +20,10 @@ source ../settings/scripts/_variables # MANAGE SCRIPT FAILURE #================================================= +ynh_clean_setup () { +# Nettoyage des résidus d'installation non pris en charge par le script remove. + ynh_clean_check_starting +} # Exit if an error occurs during the execution of the script ynh_abort_if_errors @@ -37,7 +41,7 @@ path_url=$(ynh_app_setting_get $app path) # CHECK IF THE APP CAN BE RESTORED #================================================= -yunohost app checkurl "${domain}${path_url}" -a "$app" \ +ynh_webpath_available $domain $path_url \ || ynh_die "Path not available: ${domain}${path_url}" test ! -d $final_path \ || ynh_die "There is already a directory: $final_path " @@ -124,20 +128,15 @@ systemctl reload nginx # START AND CHECK LUTIM BOOTING #================================================= -tempfile="$(mktemp)" -tail -f -n1 /var/log/$app/production.log > "$tempfile" & # Suit le démarrage dans le log -PID_TAIL=$! # Récupère le PID de la commande tail, qui est passée en arrière plan. -systemctl restart $app # Démarre lutim +# Wait for lutim fully started +ynh_check_starting "Manager.*started" "/var/log/$app/production.log" "120" -for i in `seq 1 60` -do # La boucle attend le démarrage de lutim. Ou 1 minute. Cette boucle évite simplement un 502 au début, car le démarrage est parfois long... - if grep -q "Manager.*started" "$tempfile"; then - WARNING echo "Le service $app a démarré correctement." - break # Si le log annonce le démarrage de lutim, sort de la boucle. - fi - WARNING echo -n "." - sleep 1 -done -echo "" -QUIET kill -s 15 $PID_TAIL # Arrête l'exécution de tail. -ynh_secure_remove "$tempfile" +#================================================= +# SEND A README FOR THE ADMIN +#================================================= + +message="You can find a config file at $final_path/lutim.conf + +If you facing an issue or want to improve this app, please open a new issue in this project: https://github.com/YunoHost-Apps/lutim_ynh" + +ynh_send_readme_to_admin "$message" "root" diff --git a/scripts/upgrade b/scripts/upgrade index 2098c8d..93bb749 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -8,6 +8,9 @@ source _common.sh source /usr/share/yunohost/helpers +# Load common variables for all scripts. +source _variables +source _apt #================================================= # LOAD SETTINGS @@ -22,6 +25,12 @@ port=$(ynh_app_setting_get $app port) always_encrypt=$(ynh_app_setting_get $app always_encrypt) final_path=$(ynh_app_setting_get $app final_path) +#================================================= +# CHECK VERSION +#================================================= + +ynh_abort_if_up_to_date + #================================================= # FIX OLD THINGS #================================================= @@ -55,6 +64,8 @@ fi # Backup the current version of the app ynh_backup_before_upgrade ynh_clean_setup () { +# Nettoyage des résidus d'installation non pris en charge par le script remove. + ynh_clean_check_starting # restore it if the upgrade fails ynh_restore_upgradebackup } @@ -75,6 +86,12 @@ path_url=$(ynh_normalize_url_path $path_url) # Vérifie et corrige la syntaxe du ynh_setup_source "$final_path" # Télécharge la source, décompresse et copie dans $final_path +#================================================= +# UPGRADE DEPENDENCIES +#================================================= + +ynh_install_app_dependencies $app_depencencies + #================================================= # NGINX CONFIGURATION #================================================= @@ -119,9 +136,8 @@ ynh_replace_string "__FINALPATH__" "$final_path/" /etc/cron.d/$app # UPDATE LUTIM WITH CARTON #================================================= -pushd $final_path # cd avec une stack pour revenir en arrière -carton install 2>&1 | tee -a "/var/log/$app/setup_carton.log" -popd # Revient au dossier courant avant pushd +(cd $final_path +carton install 2>&1 | tee -a "/var/log/$app/setup_carton.log") #================================================= # SECURING FILES AND DIRECTORIES @@ -160,21 +176,5 @@ systemctl reload nginx # START AND CHECK LUTIM BOOTING #================================================= -tempfile="$(mktemp)" -tail -f -n1 /var/log/$app/production.log > "$tempfile" & # Suit le démarrage dans le log -PID_TAIL=$! # Récupère le PID de la commande tail, qui est passée en arrière plan. -systemctl restart $app # Démarre lutim - -for i in `seq 1 60` -do # La boucle attend le démarrage de lutim. Ou 1 minute. Cette boucle évite simplement un 502 au début, car le démarrage est parfois long... - if grep -q "Manager.*started" "$tempfile"; then - cat "$tempfile" - WARNING echo "Le service $app a démarré correctement." - break # Si le log annonce le démarrage de lutim, sort de la boucle. - fi - WARNING echo -n "." - sleep 1 -done -echo "" -QUIET kill -s 15 $PID_TAIL # Arrête l'exécution de tail. -ynh_secure_remove "$tempfile" +# Wait for lutim fully started +ynh_check_starting "Manager.*started" "/var/log/$app/production.log" "120" diff --git a/sources/ajouts/script/lutim b/sources/ajouts/script/lutim deleted file mode 100644 index 5bf30d2..0000000 --- a/sources/ajouts/script/lutim +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env perl - -use strict; -use warnings; - -use FindBin; -BEGIN { unshift @INC, "$FindBin::Bin/../lib" } -BEGIN { unshift @INC, "$FindBin::Bin/../local/lib/perl5" } -BEGIN { unshift @INC, "$FindBin::Bin/../local/lib/perl5/__ARCHDIR__" } - -# Start command line interface for application -require Mojolicious::Commands; -Mojolicious::Commands->start_app('Mounter');