From 93e2b5875e854ad3cf05d2ee3370746fd49da4a6 Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Tue, 21 Nov 2017 18:41:40 +0100 Subject: [PATCH 1/3] Enhance regenconf. fix #2 --- conf/dnsmasq_regenconf_hook | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/conf/dnsmasq_regenconf_hook b/conf/dnsmasq_regenconf_hook index 1a2cf59..0212f09 100755 --- a/conf/dnsmasq_regenconf_hook +++ b/conf/dnsmasq_regenconf_hook @@ -14,6 +14,11 @@ do_pre_regen() { cp -a "/etc/dnsmasq.d/01-pihole.conf" "$temp_dir" test -e "/etc/dnsmasq.d/02-pihole-dhcp.conf" && cp -a "/etc/dnsmasq.d/02-pihole-dhcp.conf" "$temp_dir" test -e "/etc/dnsmasq.d/03-pihole-wildcard.conf" && cp -a "/etc/dnsmasq.d/03-pihole-wildcard.conf" "$temp_dir" + + # Décommente le cache-size de la config par défaut + sed --in-place "s/^#pihole# cache-size=/cache-size=/g" /etc/dnsmasq.conf + # Et commente celui de pi-hole + sed --in-place "s/^cache-size=/#cache-size=/g" /etc/dnsmasq.d/01-pihole.conf fi } From 1616cf03ac5ac51d9cc86bb3ec09a8334f516e0a Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Tue, 21 Nov 2017 18:44:05 +0100 Subject: [PATCH 2/3] Redirect to localhost --- scripts/install | 7 ++++--- scripts/restore | 2 +- scripts/upgrade | 4 +--- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/scripts/install b/scripts/install index fcea5a6..4ae5787 100644 --- a/scripts/install +++ b/scripts/install @@ -179,9 +179,7 @@ setupVars="$pihole_storage/setupVars.conf" # Trouve l'interface réseau par défaut main_iface=$(route | grep default | awk '{print $8;}' | head -n1) echo "PIHOLE_INTERFACE=$main_iface" > $setupVars -# Trouve l'ipv4 associée à l'interface trouvée -localipv4=$(ifconfig | grep -A 1 "$main_iface" | tail -1 | awk '{print $2;}' | cut -d: -f2) -echo "IPV4_ADDRESS=$localipv4" >> $setupVars +echo "IPV4_ADDRESS=127.0.0.1" >> $setupVars echo "IPV6_ADDRESS=" >> $setupVars echo "PIHOLE_DNS_1=" >> $setupVars echo "PIHOLE_DNS_2=" >> $setupVars @@ -224,6 +222,9 @@ ynh_replace_string "^cache-size=" "#pihole# cache-size=" /etc/dnsmasq.conf # CONFIGURE DNS FOR THE LOCAL DOMAINS #================================================= +# Trouve l'ipv4 associée à l'interface trouvée +localipv4=$(ifconfig | grep -A 1 "$main_iface" | tail -1 | awk '{print $2;}' | cut -d: -f2) + # Liste les domaines de yunohost while read perdomain do diff --git a/scripts/restore b/scripts/restore index 5b10c82..c5c47b5 100644 --- a/scripts/restore +++ b/scripts/restore @@ -176,7 +176,7 @@ setupVars="/etc/pihole/setupVars.conf" echo "PIHOLE_INTERFACE=$main_iface" > $setupVars ynh_replace_string "^PIHOLE_INTERFACE=.*" "PIHOLE_INTERFACE=$main_iface" $setupVars -ynh_replace_string "^IPV4_ADDRESS=.*" "IPV4_ADDRESS=$localipv4" $setupVars +ynh_replace_string "^IPV4_ADDRESS=.*" "IPV4_ADDRESS=127.0.0.1" $setupVars ynh_store_file_checksum "$setupVars" # Enregistre la somme de contrôle du fichier de config diff --git a/scripts/upgrade b/scripts/upgrade index 6e81d14..62e793d 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -133,9 +133,7 @@ ynh_backup_if_checksum_is_different "$setupVars" # Créé un backup du fichier d # Trouve l'interface réseau par défaut main_iface=$(route | grep default | awk '{print $8;}' | head -n1) echo "PIHOLE_INTERFACE=$main_iface" > $setupVars -# Trouve l'ipv4 associée à l'interface trouvée -localipv4=$(ifconfig | grep -A 1 "$main_iface" | tail -1 | awk '{print $2;}' | cut -d: -f2) -echo "IPV4_ADDRESS=$localipv4" >> $setupVars +echo "IPV4_ADDRESS=127.0.0.1" >> $setupVars echo "IPV6_ADDRESS=" >> $setupVars echo "PIHOLE_DNS_1=" >> $setupVars echo "PIHOLE_DNS_2=" >> $setupVars From 5facd01339b00e668cd82e5fcce1b67979604b70 Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Tue, 21 Nov 2017 18:45:03 +0100 Subject: [PATCH 3/3] Update package --- README.md | 67 ++++++++++++--- YEP.md | 117 +++++++++++++++++++++++++ check_process | 8 +- scripts/_common.sh | 208 +++++++-------------------------------------- scripts/change_url | 10 ++- 5 files changed, 217 insertions(+), 193 deletions(-) create mode 100644 YEP.md diff --git a/README.md b/README.md index db36f34..db6837f 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,62 @@ -Pi-hole for YunoHost -================== +# Pi-hole for YunoHost -[Yunohost project](https://yunohost.org/#/) +[![Integration level](https://dash.yunohost.org/integration/pihole.svg)](https://ci-apps.yunohost.org/jenkins/job/pihole%20%28Community%29/lastBuild/consoleFull) +[![Install Pi-hole with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=pihole -Filtrage publicitaire sur l'ensemble du réseau via votre propre serveur DNS. +> *This package allow you to install Pi-hole 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.* -https://pi-hole.net/ +## Overview +Network-wide ad blocking via your own Linux hardware -**Mise à jour du package:** -sudo yunohost app upgrade pihole -u https://github.com/YunoHost-Apps/pihole_ynh +**Shipped version:** 3.1.4 -**Multi-utilisateur:** Non applicable +## Screenshots -**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/pihole%20%28Community%29/lastBuild/consoleFull)* +![](https://i0.wp.com/pi-hole.net/wp-content/uploads/2016/12/dashboard212.png) + +## Configuration + +Use the admin panel of your Pi-hole to configure this app. + +## Documentation + +* Official documentation: Not found +* Pi-hole as a DHCP server: [dhcp.md](./dhcp.md) +* YunoHost documentation: There no other documentations, feel free to contribute. + +## YunoHost specific features + +* Private access to the admin panel. + +#### Multi-users support + +#### Supported architectures + +* Tested on x86_64 + +## Limitations + +* Activate DHCP with Pi-hole need a manuel configuration of your router. + +## Additionnal informations + +## Links + + * Report a bug: https://github.com/YunoHost-Apps/pihole_ynh/issues + * Pi-hole website: https://pi-hole.net/ + * YunoHost website: https://yunohost.org/ + +--- + +Developers infos +---------------- + +Please do your pull request to the [testing branch](https://github.com/YunoHost-Apps/pihole_ynh/tree/testing). + +To try the testing branch, please proceed like that. +``` +sudo yunohost app install https://github.com/YunoHost-Apps/pihole_ynh/tree/testing --verbose +or +sudo yunohost app upgrade pihole -u https://github.com/YunoHost-Apps/pihole_ynh/tree/testing --verbose +``` diff --git a/YEP.md b/YEP.md new file mode 100644 index 0000000..ba3e025 --- /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) +`Validated` + +#### [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) +`Partially 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) +`Not applicable` + +#### 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 157222d..2b089f6 100644 --- a/check_process +++ b/check_process @@ -10,9 +10,10 @@ setup_sub_dir=1 setup_root=1 setup_nourl=0 - setup_private=0 + setup_private=1 setup_public=0 upgrade=1 + upgrade=1 from_commit=32af3e208d36dd9601dd7a33efab656425822782 backup_restore=1 multi_instance=0 incorrect_path=1 @@ -24,7 +25,6 @@ Level 3=auto # Level 4: Level 4=na -# Level 5: Level 5=auto Level 6=auto Level 7=auto @@ -34,3 +34,7 @@ ;;; Options Email= Notification=down +;;; Upgrade options + ; commit=32af3e208d36dd9601dd7a33efab656425822782 + name= Première version du package + manifest_arg=domain=DOMAIN&path=PATH&admin=USER&query_logging=1& diff --git a/scripts/_common.sh b/scripts/_common.sh index 13045f0..f395dfa 100755 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -1,135 +1,5 @@ #!/bin/bash -# ============================================================================= -# YUNOHOST 2.7 FORTHCOMING HELPERS -# ============================================================================= - -# Create a dedicated nginx config -# -# usage: ynh_add_nginx_config -ynh_add_nginx_config () { - finalnginxconf="/etc/nginx/conf.d/$domain.d/$app.conf" - ynh_backup_if_checksum_is_different "$finalnginxconf" - sudo cp ../conf/nginx.conf "$finalnginxconf" - - # To avoid a break by set -u, use a void substitution ${var:-}. If the variable is not set, it's simply set with an empty variable. - # Substitute in a nginx config file only if the variable is not empty - if test -n "${path_url:-}"; then - ynh_replace_string "__PATH__" "$path_url" "$finalnginxconf" - fi - if test -n "${domain:-}"; then - ynh_replace_string "__DOMAIN__" "$domain" "$finalnginxconf" - fi - if test -n "${port:-}"; then - ynh_replace_string "__PORT__" "$port" "$finalnginxconf" - fi - if test -n "${app:-}"; then - ynh_replace_string "__NAME__" "$app" "$finalnginxconf" - fi - if test -n "${final_path:-}"; then - ynh_replace_string "__FINALPATH__" "$final_path" "$finalnginxconf" - fi - ynh_store_file_checksum "$finalnginxconf" - - sudo systemctl reload nginx -} - -# Remove the dedicated nginx config -# -# usage: ynh_remove_nginx_config -ynh_remove_nginx_config () { - ynh_secure_remove "/etc/nginx/conf.d/$domain.d/$app.conf" - sudo systemctl reload nginx -} - -# Create a dedicated php-fpm config -# -# usage: ynh_add_fpm_config -ynh_add_fpm_config () { - finalphpconf="/etc/php5/fpm/pool.d/$app.conf" - ynh_backup_if_checksum_is_different "$finalphpconf" - sudo cp ../conf/php-fpm.conf "$finalphpconf" - ynh_replace_string "__NAMETOCHANGE__" "$app" "$finalphpconf" - ynh_replace_string "__FINALPATH__" "$final_path" "$finalphpconf" - ynh_replace_string "__USER__" "$app" "$finalphpconf" - sudo chown root: "$finalphpconf" - ynh_store_file_checksum "$finalphpconf" - - if [ -e "../conf/php-fpm.ini" ] - then - finalphpini="/etc/php5/fpm/conf.d/20-$app.ini" - ynh_backup_if_checksum_is_different "$finalphpini" - sudo cp ../conf/php-fpm.ini "$finalphpini" - sudo chown root: "$finalphpini" - ynh_store_file_checksum "$finalphpini" - fi - - sudo systemctl reload php5-fpm -} - -# Remove the dedicated php-fpm config -# -# usage: ynh_remove_fpm_config -ynh_remove_fpm_config () { - ynh_secure_remove "/etc/php5/fpm/pool.d/$app.conf" - ynh_secure_remove "/etc/php5/fpm/conf.d/20-$app.ini" 2>&1 - sudo systemctl reload php5-fpm -} - -# Create a dedicated systemd config -# -# usage: ynh_add_systemd_config -ynh_add_systemd_config () { - finalsystemdconf="/etc/systemd/system/$app.service" - ynh_backup_if_checksum_is_different "$finalsystemdconf" - sudo cp ../conf/systemd.service "$finalsystemdconf" - - # To avoid a break by set -u, use a void substitution ${var:-}. If the variable is not set, it's simply set with an empty variable. - # Substitute in a nginx config file only if the variable is not empty - if test -n "${final_path:-}"; then - ynh_replace_string "__FINALPATH__" "$final_path" "$finalsystemdconf" - fi - if test -n "${app:-}"; then - ynh_replace_string "__APP__" "$app" "$finalsystemdconf" - fi - ynh_store_file_checksum "$finalsystemdconf" - - sudo chown root: "$finalsystemdconf" - sudo systemctl enable $app - sudo systemctl daemon-reload -} - -# Remove the dedicated systemd config -# -# usage: ynh_remove_systemd_config -ynh_remove_systemd_config () { - finalsystemdconf="/etc/systemd/system/$app.service" - if [ -e "$finalsystemdconf" ]; then - sudo systemctl stop $app - sudo systemctl disable $app - ynh_secure_remove "$finalsystemdconf" - fi -} - -#================================================= -#================================================= - -#================================================= -# CHECKING -#================================================= - -CHECK_DOMAINPATH () { # Vérifie la disponibilité du path et du domaine. - # Check availability of a web path - ynh_webpath_available $domain $path_url - # Register/book a web path for an app - ynh_webpath_register $app $domain $path_url -} - -CHECK_FINALPATH () { # Vérifie que le dossier de destination n'est pas déjà utilisé. - final_path=/var/www/$app - test ! -e "$final_path" || ynh_die "This path already contains a folder" -} - #================================================= # DISPLAYING #================================================= @@ -160,35 +30,6 @@ ALL_QUIET () { # Redirige la sortie standard et d'erreur dans /dev/null # BACKUP #================================================= -BACKUP_FAIL_UPGRADE () { - WARNING echo "Upgrade failed." - app_bck=${app//_/-} # Replace all '_' by '-' - if sudo yunohost backup list | grep -q $app_bck-pre-upgrade$backup_number; then # Vérifie l'existence de l'archive avant de supprimer l'application et de restaurer - sudo yunohost app remove $app # Supprime l'application avant de la restaurer. - sudo yunohost backup restore --ignore-system $app_bck-pre-upgrade$backup_number --apps $app --force # Restore the backup if upgrade failed - ynh_die "The app was restored to the way it was before the failed upgrade." - fi -} - -BACKUP_BEFORE_UPGRADE () { # Backup the current version of the app, restore it if the upgrade fails - backup_number=1 - old_backup_number=2 - app_bck=${app//_/-} # Replace all '_' by '-' - if sudo yunohost backup list | grep -q $app_bck-pre-upgrade1; then # Vérifie l'existence d'une archive déjà numéroté à 1. - backup_number=2 # Et passe le numéro de l'archive à 2 - old_backup_number=1 - fi - - sudo yunohost backup create --ignore-system --apps $app --name $app_bck-pre-upgrade$backup_number # Créer un backup différent de celui existant. - if [ "$?" -eq 0 ]; then # Si le backup est un succès, supprime l'archive précédente. - if sudo yunohost backup list | grep -q $app_bck-pre-upgrade$old_backup_number; then # Vérifie l'existence de l'ancienne archive avant de la supprimer, pour éviter une erreur. - QUIET sudo yunohost backup delete $app_bck-pre-upgrade$old_backup_number - fi - else # Si le backup a échoué - ynh_die "Backup failed, the upgrade process was aborted." - fi -} - HUMAN_SIZE () { # Transforme une taille en Ko en une taille lisible pour un humain human=$(numfmt --to=iec --from-unit=1K $1) echo $human @@ -196,8 +37,8 @@ HUMAN_SIZE () { # Transforme une taille en Ko en une taille lisible pour un huma CHECK_SIZE () { # Vérifie avant chaque backup que l'espace est suffisant file_to_analyse=$1 - backup_size=$(sudo du --summarize "$file_to_analyse" | cut -f1) - free_space=$(sudo df --output=avail "/home/yunohost.backup" | sed 1d) + backup_size=$(du --summarize "$file_to_analyse" | cut -f1) + free_space=$(df --output=avail "/home/yunohost.backup" | sed 1d) if [ $free_space -le $backup_size ] then @@ -207,14 +48,6 @@ CHECK_SIZE () { # Vérifie avant chaque backup que l'espace est suffisant fi } -# Ce helper est temporaire et sert de remplacement à la véritable fonction ynh_restore_file. Le temps qu'elle arrive... -ynh_restore_file () { - if [ -f "$1" ]; then - ynh_die "There is already a file at this path: $1" - fi - sudo cp -a "${YNH_APP_BACKUP_DIR}$1" "$1" -} - #================================================= # PACKAGE CHECK BYPASSING... #================================================= @@ -241,11 +74,27 @@ IS_PACKAGE_CHECK () { # Détermine une exécution en conteneur (Non testé) # Dans ce cas, c'est $PATH qui contient le chemin de la version de node. Il doit être propagé sur les autres shell si nécessaire. n_install_dir="/opt/node_n" -node_version_path="/usr/local/n/versions/node" +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) - load_n_path="[[ :$PATH: == *\":$n_install_dir/bin:\"* ]] || PATH=\"$n_install_dir/bin:$PATH\"" + load_n_path="[[ :$PATH: == *\":$n_install_dir/bin:\"* ]] || PATH=\"$n_install_dir/bin:$PATH\"; N_PREFIX="$n_install_dir"" nodejs_use_version="$n_install_dir/bin/n -q $nodejs_version" @@ -277,9 +126,13 @@ 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_install_dir" bash -s -- -y - ) + 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" # Restore /usr/local/bin in PATH PATH=$CLEAR_PATH @@ -295,8 +148,11 @@ ynh_install_nodejs () { real_nodejs_version=$(find $node_version_path/$nodejs_version* -maxdepth 0 | sort --version-sort | tail --lines=1) real_nodejs_version=$(basename $real_nodejs_version) - # Create a symbolic link for this major version - ln --symbolic --force --no-target-directory $node_version_path/$real_nodejs_version $node_version_path/$nodejs_version + # Create a symbolic link for this major version. If the file doesn't already exist + if [ ! -e "$node_version_path/$nodejs_version" ] + then + ln --symbolic --force --no-target-directory $node_version_path/$real_nodejs_version $node_version_path/$nodejs_version + fi # Store the ID of this app and the version of node requested for it echo "$YNH_APP_ID:$nodejs_version" | tee --append "$n_install_dir/ynh_app_version" diff --git a/scripts/change_url b/scripts/change_url index 5fadb54..4d6b6ae 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -52,12 +52,14 @@ fi if [ $change_domain -eq 0 ] then - # The backup process will failed if the domain has changed, because the file settings.yml has already changed - BACKUP_BEFORE_UPGRADE # Backup the current version of the app + # Backup the current version of the app + ynh_backup_before_upgrade ynh_clean_setup () { - BACKUP_FAIL_UPGRADE # restore it if the upgrade fails + # restore it if the upgrade fails + ynh_restore_upgradebackup } - ynh_abort_if_errors # Active trap pour arrêter le script si une erreur est détectée. + # Exit if an error occurs during the execution of the script + ynh_abort_if_errors fi #=================================================