diff --git a/check_process b/check_process index f08806c..abac979 100644 --- a/check_process +++ b/check_process @@ -1,15 +1,10 @@ -# See here for more informations -# https://github.com/YunoHost/package_check#syntax-check_process-file - -# Move this file from check_process.default to check_process when you have filled it. - ;; Test complet ; Manifest - domain="domain.tld" (DOMAIN) - path="/path" (PATH) - admin="john" (USER) + domain="domain.tld" + path="/path" + is_public=1 language="fr" - is_public=1 (PUBLIC|public=1|private=0) + admin="john" service_autodiscovery=1 whups_install=1 sesha_install=1 @@ -23,23 +18,12 @@ setup_private=1 setup_public=1 upgrade=1 + # 5.2.22~ynh4 + upgrade=1 from_commit=88e078661c230a9fe694624367b4b152950ae894 backup_restore=1 multi_instance=1 - incorrect_path=1 port_already_use=0 change_url=1 -;;; Levels - Level 1=auto - Level 2=auto - Level 3=auto - # https://github.com/YunoHost-Apps/horde_ynh/blob/master/sources/sso_auth.patch - Level 4=1 - Level 5=auto - Level 6=auto - Level 7=auto - Level 8=0 - Level 9=0 - Level 10=0 ;;; Options Email= Notification=none diff --git a/conf/app.src b/conf/app.src deleted file mode 100644 index e4dd89f..0000000 --- a/conf/app.src +++ /dev/null @@ -1,6 +0,0 @@ -SOURCE_URL=url of app's source -SOURCE_SUM=sha256 checksum -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=tar.gz -SOURCE_IN_SUBDIR=true -SOURCE_FILENAME= diff --git a/conf/nginx.conf b/conf/nginx.conf index dc1c65d..36efec1 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -4,10 +4,6 @@ location __PATH__/ { # Path to source alias __FINALPATH__/horde/ ; - if ($scheme = http) { - rewrite ^ https://$server_name$request_uri? permanent; - } - index index.php; # Common parameter to increase upload size limit in conjuction with dedicated php-fpm file @@ -20,18 +16,16 @@ location __PATH__/ { try_files $uri $uri/ index.php; location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; - fastcgi_pass unix:/var/run/php5-fpm-__NAME__.sock; + fastcgi_pass unix:/var/run/php/php__PHPVERSION__-fpm-__NAME__.sock; + fastcgi_index index.php; include fastcgi_params; fastcgi_param REMOTE_USER $remote_user; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $request_filename; } - # PHP configuration end # Include SSOWAT user panel. include conf.d/yunohost_panel.conf.inc; more_clear_input_headers 'Accept-Encoding'; } - - diff --git a/conf/php-fpm.conf b/conf/php-fpm.conf index 936327a..2ca53b8 100644 --- a/conf/php-fpm.conf +++ b/conf/php-fpm.conf @@ -1,10 +1,11 @@ ; Start a new pool named 'www'. -; the variable $pool can we used in any directive and will be replaced by the +; the variable $pool can be used in any directive and will be replaced by the ; pool name ('www' here) [__NAMETOCHANGE__] ; Per pool prefix ; It only applies on the following directives: +; - 'access.log' ; - 'slowlog' ; - 'listen' (unixsocket) ; - 'chroot' @@ -24,17 +25,19 @@ group = __USER__ ; The address on which to accept FastCGI requests. ; Valid syntaxes are: -; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific address on +; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific IPv4 address on ; a specific port; -; 'port' - to listen on a TCP socket to all addresses on a -; specific port; +; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on +; a specific port; +; 'port' - to listen on a TCP socket to all addresses +; (IPv6 and IPv4-mapped) on a specific port; ; '/path/to/unix/socket' - to listen on a unix socket. ; Note: This value is mandatory. -listen = /var/run/php5-fpm-__NAMETOCHANGE__.sock +listen = /var/run/php/php__PHPVERSION__-fpm-__NAMETOCHANGE__.sock -; Set listen(2) backlog. A value of '-1' means unlimited. -; Default Value: 128 (-1 on FreeBSD and OpenBSD) -;listen.backlog = 128 +; Set listen(2) backlog. +; Default Value: 511 (-1 on FreeBSD and OpenBSD) +;listen.backlog = 511 ; Set permissions for unix socket, if one is used. In Linux, read/write ; permissions must be set in order to allow connections from a web server. Many @@ -44,8 +47,13 @@ listen = /var/run/php5-fpm-__NAMETOCHANGE__.sock listen.owner = www-data listen.group = www-data ;listen.mode = 0660 +; When POSIX Access Control Lists are supported you can set them using +; these options, value is a comma separated list of user/group names. +; When set, listen.owner and listen.group are ignored +;listen.acl_users = +;listen.acl_groups = -; List of ipv4 addresses of FastCGI clients which are allowed to connect. +; List of addresses (IPv4/IPv6) of FastCGI clients which are allowed to connect. ; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original ; PHP FCGI (5.2.2+). Makes sense only with a tcp listening socket. Each address ; must be separated by a comma. If this value is left blank, connections will be @@ -59,7 +67,13 @@ listen.group = www-data ; - The pool processes will inherit the master process priority ; unless it specified otherwise ; Default Value: no set -; priority = -19 +; process.priority = -19 + +; Set the process dumpable flag (PR_SET_DUMPABLE prctl) even if the process user +; or group is differrent than the master process user. It allows to create process +; core dump and ptrace the process for the pool user. +; Default Value: no +; process.dumpable = yes ; Choose how the process manager will control the number of child processes. ; Possible Values: @@ -215,7 +229,7 @@ pm.max_requests = 500 ; last request memory: 0 ; ; Note: There is a real-time FPM status monitoring sample web page available -; It's available in: ${prefix}/share/fpm/status.html +; It's available in: /usr/share/php/7.0/fpm/status.html ; ; Note: The value must start with a leading slash (/). The value can be ; anything, but it may not be a good idea to use the .php extension or it @@ -275,7 +289,7 @@ pm.max_requests = 500 ; - %{megabytes}M ; - %{mega}M ; %n: pool name -; %o: ouput header +; %o: output header ; it must be associated with embraces to specify the name of the header: ; - %{Content-Type}o ; - %{X-Powered-By}o @@ -291,9 +305,13 @@ pm.max_requests = 500 ; %t: server time the request was received ; it can accept a strftime(3) format: ; %d/%b/%Y:%H:%M:%S %z (default) +; The strftime(3) format must be encapsuled in a %{}t tag +; e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t ; %T: time the log has been written (the request has finished) ; it can accept a strftime(3) format: ; %d/%b/%Y:%H:%M:%S %z (default) +; The strftime(3) format must be encapsuled in a %{}t tag +; e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t ; %u: remote user ; ; Default: "%R - %u %t \"%m %r\" %s" @@ -349,13 +367,22 @@ chdir = __FINALPATH__ ; Default Value: no catch_workers_output = yes +; Clear environment in FPM workers +; Prevents arbitrary environment variables from reaching FPM worker processes +; by clearing the environment in workers before env vars specified in this +; pool configuration are added. +; Setting to "no" will make all environment variables available to PHP code +; via getenv(), $_ENV and $_SERVER. +; Default Value: yes +;clear_env = no + ; Limits the extensions of the main script FPM will allow to parse. This can ; prevent configuration mistakes on the web server side. You should only limit ; FPM to .php extensions to prevent malicious users to use other extensions to -; exectute php code. +; execute php code. ; Note: set an empty value to allow all extensions. ; Default Value: .php -;security.limit_extensions = .php .php3 .php4 .php5 +;security.limit_extensions = .php .php3 .php4 .php5 .php7 ; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from ; the current environment. @@ -391,6 +418,17 @@ catch_workers_output = yes ;php_admin_flag[log_errors] = on ;php_admin_value[memory_limit] = 32M +; Common values to change to increase file upload limit +; php_admin_value[upload_max_filesize] = 50M +; php_admin_value[post_max_size] = 50M +; php_admin_flag[mail.add_x_header] = Off + +; Other common parameters +; php_admin_value[max_execution_time] = 600 +; php_admin_value[max_input_time] = 300 +; php_admin_value[memory_limit] = 256M +; php_admin_flag[short_open_tag] = On + ; Special settings for Horde php_value[include_path] = "__FINALPATH__/pear/php:.:__FINALPATH__/horde/lib" env[PHP_PEAR_SYSCONF_DIR] = __FINALPATH__ diff --git a/scripts/experimental_helper.sh b/doc/.gitkeep similarity index 100% rename from scripts/experimental_helper.sh rename to doc/.gitkeep diff --git a/doc/DESCRIPTION.md b/doc/DESCRIPTION.md new file mode 100644 index 0000000..e91a70d --- /dev/null +++ b/doc/DESCRIPTION.md @@ -0,0 +1 @@ +A groupware (webmail, adressbook, calendar) witch use PHP diff --git a/doc/DISCLAIMER.md b/doc/DISCLAIMER.md new file mode 100644 index 0000000..aeec11a --- /dev/null +++ b/doc/DISCLAIMER.md @@ -0,0 +1,50 @@ +### Customisation + +#### Install others app. + +The package provide some apps, but it's could be possible to install some others apps. The list of all availabe apps are listed here : https://www.horde.org/apps + +Before any change it's recommended to make a backup : +```bash +# In case of multiple instance adapt "horde" by the horde instance +sudo yunohost backup create --verbose --ignore-system --apps horde +``` + +Install horde apps with pear : + +```bash +# Get the horde final_path +# In case of multiple instance adapt "horde" by the horde instance +final_path=$(yunohost app setting horde final_path) + +# Set the pear command to call to stay in the horde environnement (not in the global system environnement) +pear_cmd="$final_path/pear/pear -c $final_path/pear.conf" + +# Update the pear channel +$pear_cmd channel-update pear.horde.org + +# Install the app that you want +$pear_cmd install -a -B horde/APP_TO_INSTALL + +# Set the final permission +# In case of multiple instance adapt "horde" by the horde instance +chown -R www-data:horde $final_path + +``` + +After you need to update the horde database schema and the horde config. So go on the horde config pannel (in the settings wheel > Preferences > Administration > Configuration). Click on "Update all DB schemas" and then on "Update all configurations". + +Now you should be able to use the new apps. + +### ActiveSync + +For calendar, task and addressbook activeSync has been configured but not yet tested. + +### Troubleshotting + +**Get Address is missing domain while to try to send an email.** + +- You need to create an identity before send an email. +- To create this go in the settings wheel > Preferences > Global Preferences > Personal Information. +- Complete the form and save it. +- You might be able to sed an email now. diff --git a/doc/screenshots/.gitkeep b/doc/screenshots/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/doc/screenshots/screenshot01.png b/doc/screenshots/screenshot01.png new file mode 100644 index 0000000..068c2d7 Binary files /dev/null and b/doc/screenshots/screenshot01.png differ diff --git a/manifest.json b/manifest.json index bfdfc07..0f689fe 100644 --- a/manifest.json +++ b/manifest.json @@ -8,41 +8,58 @@ }, "version": "5.2.22~ynh4", "url": "https://www.horde.org/", + "upstream": { + "license": "LGPL-2.0", + "website": "https://www.horde.org", + "demo": "http://demo.horde.org", + "admindoc": "https://wiki.horde.org", + "code": "https://github.com/horde" + }, "license": "LGPL-2.0", "maintainer": { "name": "Josué Tille", "email": "josue@tille.ch" }, "requirements": { - "yunohost": ">= 3.5.2.2" + "yunohost": ">= 4.3.0" }, "multi_instance": true, "services": [ "nginx", - "php5-fpm", + "php7.3-fpm", "mysql" ], "arguments": { "install" : [ { "name": "domain", - "type": "domain", - "ask": { - "en": "Choose a domain name for Horde", - "fr": "Choisissez un nom de domaine pour Horde" - }, - "example": "example.com" + "type": "domain" }, { "name": "path", "type": "path", - "ask": { - "en": "Choose a path for Horde", - "fr": "Choisissez un chemin pour Horde" - }, "example": "/horde", "default": "/horde" }, + { + "name": "is_public", + "type": "boolean", + "default": false + }, + { + "name": "language", + "type": "string", + "ask": { + "en": "Choose the application language", + "fr": "Choisissez la langue de l'application" + }, + "choices": [ + "bg", "de", "en", "es", "fi", "fo", "fr", "hr", "hu", + "id", "is", "it", "lt", "lv", "mg", "mk", "mt", "nl", + "pl", "pt", "ro", "ru", "sk", "so", "th", "tr", "uz" + ], + "default": "en" + }, { "name": "admin", "type": "user", @@ -52,36 +69,14 @@ }, "example": "johndoe" }, - { - "name": "is_public", - "type": "boolean", - "ask": { - "en": "Is it a public server?", - "fr": "Est-ce un serveur publique?" - }, - "default": false - }, { "name": "service_autodiscovery", "type": "boolean", "ask": { "en": "Would you like to enable the caldDav/cardDAV service autodiscovery?", "fr": "Voulez-vous activer l'autodécouverte des services calDAV/cardDAV?" - }, - "default": false - }, - { - "name": "language", - "ask": { - "en": "Choose the application language", - "fr": "Choisissez la langue de l'application" }, - "choices": [ - "bg", "de", "en", "es", "fi", "fo", "fr", "hr", "hu", - "id", "is", "it", "lt", "lv", "mg", "mk", "mt", "nl", - "pl", "pt", "ro", "ru", "sk", "so", "th", "tr", "uz" - ], - "default": "en" + "default": false }, { "name": "whups_install", diff --git a/scripts/_common.sh b/scripts/_common.sh index 6218b4f..15f2ff5 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -4,9 +4,7 @@ # SET ALL CONSTANTS #================================================= -app=$YNH_APP_INSTANCE_NAME -final_path="/var/www/$app" -gollem_data_dir="/home/yunohost.app/$app" + #================================================= # DEFINE ALL COMMON FONCTIONS diff --git a/scripts/backup b/scripts/backup index 1a75e19..25968d8 100755 --- a/scripts/backup +++ b/scripts/backup @@ -3,44 +3,74 @@ #================================================= # GENERIC START #================================================= +# IMPORT GENERIC HELPERS +#================================================= -# Source YunoHost helpers +# Keep this path for calling _common.sh inside the execution's context of backup and restore scripts +source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers -# Stop script if errors +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= + +ynh_clean_setup () { + true +} +# Exit if an error occurs during the execution of the script ynh_abort_if_errors -# Import common cmd -source ../settings/scripts/experimental_helper.sh -source ../settings/scripts/_common.sh +#================================================= +# LOAD SETTINGS +#================================================= +ynh_print_info --message="Loading installation settings..." -ynh_script_progression --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) +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) +phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) +gollem_data_dir=$(ynh_app_setting_get --app=$app --key=gollem_data_dir) #================================================= -# STANDARD BACKUP STEPS +# DECLARE DATA AND CONF FILES TO BACKUP #================================================= +ynh_print_info --message="Declaring files to be backed up..." +#================================================= # BACKUP THE APP MAIN DIR -ynh_script_progression --message="Backing up code..." --weight=3 -ynh_backup --src_path "$final_path" +#================================================= -# Backup user data -ynh_script_progression --message="Backing up user data..." --weight=10 -ynh_backup --src_path "$gollem_data_dir" +ynh_backup --src_path="$final_path" +#================================================= +# BACKUP THE DATA DIR +#================================================= + +ynh_backup --src_path="$gollem_data_dir" + +#================================================= # BACKUP THE NGINX CONFIGURATION -ynh_script_progression --message="Backing up configuration..." -ynh_backup --src_path "/etc/nginx/conf.d/$domain.d/$app.conf" +#================================================= +ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" + +#================================================= # BACKUP THE PHP-FPM CONFIGURATION -ynh_backup --src_path "/etc/php5/fpm/pool.d/$app.conf" +#================================================= +ynh_backup --src_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" + +#================================================= # BACKUP THE MYSQL DATABASE -ynh_script_progression --message="Backing up database" -ynh_mysql_dump_db "$db_name" > db.sql +#================================================= +ynh_print_info --message="Backing up the MySQL database..." -ynh_script_progression --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." --last +ynh_mysql_dump_db --database="$db_name" > db.sql + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_print_info --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." diff --git a/scripts/change_url b/scripts/change_url index ceff022..215d4d7 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -1,62 +1,114 @@ #!/bin/bash #================================================= -# GENERIC START +# GENERIC STARTING +#================================================= +# IMPORT GENERIC HELPERS #================================================= -# IMPORT GENERIC HELPERS +source _common.sh source /usr/share/yunohost/helpers -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - -# Import common cmd -source ./experimental_helper.sh -source ./_common.sh - -ynh_script_progression --message="Loading installation settings..." - +#================================================= # RETRIEVE ARGUMENTS +#================================================= + old_domain=$YNH_APP_OLD_DOMAIN domain=$YNH_APP_NEW_DOMAIN path_url=$(ynh_normalize_url_path --path_url ${YNH_APP_NEW_PATH:-'/'}) app=$YNH_APP_INSTANCE_NAME -admin=$(ynh_app_setting_get --app $app --key admin) -final_path=$(ynh_app_setting_get --app $app --key final_path) -port=$(ynh_app_setting_get --app $app --key port) -secret_key=$(ynh_app_setting_get --app $app --key secret_key) -service_autodiscovery=$(ynh_app_setting_get --app $app --key service_autodiscovery) -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 mysqlpwd) +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading installation settings..." + +# Needed for helper "ynh_add_nginx_config" +final_path=$(ynh_app_setting_get --app=$app --key=final_path) +admin=$(ynh_app_setting_get --app=$app --key=admin) +port=$(ynh_app_setting_get --app=$app --key=port) +secret_key=$(ynh_app_setting_get --app=$app --key=secret_key) +service_autodiscovery=$(ynh_app_setting_get --app=$app --key=service_autodiscovery) +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=mysqlpwd) + +#================================================= +# BACKUP BEFORE CHANGE URL THEN ACTIVE TRAP +#================================================= +ynh_script_progression --message="Backing up the app before changing its URL (may take a while)..." + +# Backup the current version of the app +ynh_backup_before_upgrade +ynh_clean_setup () { + ynh_clean_check_starting + # Remove the new domain config file, the remove script won't do it as it doesn't know yet its location. + ynh_secure_remove --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" + + # Restore it if the upgrade fails + ynh_restore_upgradebackup +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + +#================================================= +# 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 #================================================= # STANDARD MODIFICATIONS #================================================= - -ynh_script_progression --message="Updating nginx configuration..." - # MODIFY URL IN NGINX CONF +#================================================= +ynh_script_progression --message="Updating NGINX web server configuration..." + nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf -# Change the domain for nginx +# Change the domain for NGINX if [ "$old_domain" != "$domain" ] then # Delete file checksum for the old conf file location - ynh_delete_file_checksum --file "$nginx_conf_path" + ynh_delete_file_checksum --file="$nginx_conf_path" mv $nginx_conf_path /etc/nginx/conf.d/$domain.d/$app.conf # Store file checksum for the new config file location - ynh_store_file_checksum --file "/etc/nginx/conf.d/$domain.d/$app.conf" + ynh_store_file_checksum --file="/etc/nginx/conf.d/$domain.d/$app.conf" fi +#================================================= +# SPECIFIC MODIFICATIONS +#================================================= +# ... +#================================================= + config_nginx # Update horde config ynh_script_progression --message="Configuring application..." --weight=3 config_horde +#================================================= +# GENERIC FINALISATION +#================================================= # RELOAD NGINX -systemctl reload nginx +#================================================= +ynh_script_progression --message="Reloading NGINX web server..." -ynh_script_progression --message="Change of URL completed for $app" --last +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Change of URL completed for $app" diff --git a/scripts/install b/scripts/install index 4568211..140ed0b 100755 --- a/scripts/install +++ b/scripts/install @@ -3,51 +3,64 @@ #================================================= # GENERIC START #================================================= - # IMPORT GENERIC HELPERS +#================================================= + +source _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 -# Import common cmd -source ./experimental_helper.sh -source ./_common.sh - -ynh_script_progression --message="Validating installation parameters..." - +#================================================= # RETRIEVE ARGUMENTS FROM THE MANIFEST +#================================================= + domain=$YNH_APP_ARG_DOMAIN path_url=$(ynh_normalize_url_path --path_url $YNH_APP_ARG_PATH) -admin=$YNH_APP_ARG_ADMIN is_public=$YNH_APP_ARG_IS_PUBLIC -service_autodiscovery=$YNH_APP_ARG_SERVICE_AUTODISCOVERY language=$YNH_APP_ARG_LANGUAGE +admin=$YNH_APP_ARG_ADMIN +service_autodiscovery=$YNH_APP_ARG_SERVICE_AUTODISCOVERY whups_install=$YNH_APP_ARG_WHUPS_INSTALL sesha_install=$YNH_APP_ARG_SESHA_INSTALL ansel_install=$YNH_APP_ARG_ANSEL_INSTALL wicked_install=$YNH_APP_ARG_WICKED_INSTALL -# Set variable -final_path="/var/www/$app" +app=$YNH_APP_INSTANCE_NAME -# STORE SETTINGS FROM MANIFEST -ynh_script_progression --message="Storing installation settings..." -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 final_path --value $final_path -ynh_app_setting_set --app $app --key is_public --value $is_public -ynh_app_setting_set --app $app --key service_autodiscovery --value $service_autodiscovery -ynh_app_setting_set --app $app --key whups_install --value $whups_install -ynh_app_setting_set --app $app --key sesha_install --value $sesha_install -ynh_app_setting_set --app $app --key ansel_install --value $ansel_install -ynh_app_setting_set --app $app --key wicked_install --value $wicked_install +#================================================= +# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS +#================================================= +ynh_script_progression --message="Validating installation parameters..." + +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 +ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url -# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS -test ! -e "$final_path" || ynh_die --message "This path already contains a folder" +#================================================= +# STORE SETTINGS FROM MANIFEST +#================================================= +ynh_script_progression --message="Storing installation settings..." + +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=language --value=$language +ynh_app_setting_set --app=$app --key=admin --value=$admin +ynh_app_setting_set --app=$app --key=service_autodiscovery --value=$service_autodiscovery +ynh_app_setting_set --app=$app --key=whups_install --value=$whups_install +ynh_app_setting_set --app=$app --key=sesha_install --value=$sesha_install +ynh_app_setting_set --app=$app --key=ansel_install --value=$ansel_install +ynh_app_setting_set --app=$app --key=wicked_install --value=$wicked_install # Set list of optionnal app to install optionnal_apps_list="" @@ -85,32 +98,85 @@ then locale-gen fi +#================================================= # INSTALL DEPENDENCIES +#================================================= ynh_script_progression --message="Installing dependencies..." --weight=7 + install_dependance -# CREATE A MYSQL DATABASE -ynh_script_progression --message="Configuring MySQL database..." -db_name=$(ynh_sanitize_dbid --db_name $app) -db_user=$db_name -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_mysql_setup_db --db_name $db_name --db_user $db_user +#================================================= +# CREATE DEDICATED USER +#================================================= +ynh_script_progression --message="Configuring system user..." # Create a system user -ynh_script_progression --message="Configuring system user..." -ynh_system_user_create --username $app +ynh_system_user_create --username=$app --home_dir="$final_path" +#================================================= +# CREATE A MYSQL DATABASE +#================================================= +ynh_script_progression --message="Creating a MySQL database..." + +db_name=$(ynh_sanitize_dbid --db_name=$app) +db_user=$db_name +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_mysql_setup_db --db_user=$db_user --db_name=$db_name + +#================================================= +# DOWNLOAD, CHECK AND UNPACK SOURCE +#================================================= +ynh_script_progression --message="Setting up source files..." + +ynh_app_setting_set --app=$app --key=final_path --value=$final_path +# Download, check integrity, uncompress and patch the source from app.src +mkdir $final_path +mkdir $final_path/data + +chmod 750 "$final_path" +chmod -R o-rwx "$final_path" +chown -R $app:www-data "$final_path" + +#================================================= +# NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Configuring NGINX web server..." + +# Create a dedicated NGINX config +config_nginx + +#================================================= +# PHP-FPM CONFIGURATION +#================================================= +ynh_script_progression --message="Configuring PHP-FPM..." + +# Create a dedicated PHP-FPM config +ynh_add_fpm_config + +#================================================= +# SPECIFIC SETUP +#================================================= +# CREATE DATA DIRECTORY +#================================================= +ynh_script_progression --message="Creating a data directory..." + +gollem_data_dir=/home/yunohost.app/$app +ynh_app_setting_set --app=$app --key=gollem_data_dir --value=$gollem_data_dir + +mkdir -p $gollem_data_dir + +chmod 750 "$gollem_data_dir" +chmod -R o-rwx "$gollem_data_dir" +chown -R $app:www-data "$gollem_data_dir" + +#================================================= +# ... +#================================================= # Set execution for expect scripts chmod +x ../conf/init_horde_install.exp chmod +x ../conf/config_horde.exp -# Install horde by pear -ynh_script_progression --message="Creating base directory..." -mkdir $final_path -mkdir $final_path/data -mkdir -p $gollem_data_dir - ynh_script_progression --message="Installing sources files..." --weight=7 pear config-create "$final_path" "$final_path/pear.conf" @@ -131,7 +197,7 @@ $pear_cmd install -a -B horde/webmail $optionnal_apps_list PHP_PEAR_SYSCONF_DIR=$final_path ../conf/config_horde.exp "$final_path" "$db_name" "$db_user" "$db_pwd" "$admin" secret_key=$(grep 'secret_key' "$final_path/horde/config/conf.php" | cut -d"'" -f4) -ynh_app_setting_set --app $app --key secret_key --value "$secret_key" +ynh_app_setting_set --app=$app --key=secret_key --value="$secret_key" # Patch the app ynh_script_progression --message="Patching application..." --weight=7 @@ -141,34 +207,42 @@ patch_app ynh_script_progression --message="Configuring application..." --weight=3 config_horde -# Create a dedicated nginx config -ynh_script_progression --message="Configuring nginx..." --weight=1 -config_nginx - -# Create a dedicated php-fpm config -ynh_add_fpm_config - -#================================================= -# GENERIC FINALIZATION -#================================================= - # SECURE FILES AND DIRECTORIES ynh_script_progression --message="Protecting directory..." set_permission -# configure the sso -ynh_script_progression --message="Configuring permissions..." -if [ "$is_public" = "0" ]; -then # Retire l'accès public - ynh_app_setting_delete --app $app --key skipped_uris -else - ynh_app_setting_set --app $app --key unprotected_uris --value "/" -fi - +#================================================= +# GENERIC FINALIZATION +#================================================= # SETUP LOGROTATE +#================================================= ynh_script_progression --message="Configuring log rotation..." + ynh_use_logrotate $final_path/horde --nonappend --specific_user www-data/horde ynh_use_logrotate $final_path/horde/services --append --specific_user www-data/horde ynh_use_logrotate $final_path/horde/services/portal --append --specific_user www-data/horde -ynh_script_progression --message="Installation of $app completed" --last +#================================================= +# SETUP SSOWAT +#================================================= +ynh_script_progression --message="Configuring permissions..." + +if [ "$is_public" = "0" ]; +then # Retire l'accès public + ynh_app_setting_delete --app=$app --key=skipped_uris +else + ynh_app_setting_set --app=$app --key=unprotected_uris --value="/" +fi + +#================================================= +# RELOAD NGINX +#================================================= +ynh_script_progression --message="Reloading NGINX web server..." + +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Installation of $app completed" diff --git a/scripts/remove b/scripts/remove index 6d8bebb..842a6aa 100755 --- a/scripts/remove +++ b/scripts/remove @@ -3,56 +3,96 @@ #================================================= # GENERIC START #================================================= +# IMPORT GENERIC HELPERS +#================================================= -# Source YunoHost helpers +source _common.sh source /usr/share/yunohost/helpers -# Import common cmd -source ./experimental_helper.sh -source ./_common.sh - +#================================================= +# LOAD SETTINGS +#================================================= ynh_script_progression --message="Loading installation settings..." -# Retrieve app settings app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get --app $app --key domain) -port=$(ynh_app_setting_get --app $app --key port) -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) + +domain=$(ynh_app_setting_get --app=$app --key=domain) +port=$(ynh_app_setting_get --app=$app --key=port) +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 metapackage and its dependencies -ynh_script_progression --message="Removing dependencies" --weight=10 -ynh_remove_app_dependencies - -# Remove a database if it exists, along with the associated user -ynh_script_progression --message="Removing databases..." -ynh_mysql_remove_db --db_user $db_user --db_name $db_name - -# Remove the app directory securely -ynh_script_progression --message="Removing code..." -ynh_secure_remove --file="$final_path" - -# Remove user data -ynh_script_progression --message="Removing user data..." -ynh_secure_remove --file="$gollem_data_dir" - -# Remove the dedicated nginx config -ynh_script_progression --message="Removing nginx configuration..." -ynh_remove_nginx_config - -# Remove the dedicated php-fpm config -ynh_remove_fpm_config - -# Delete a system user -ynh_script_progression --message="Removing the dedicated system user..." -ynh_system_user_delete --username $app +# REMOVE LOGROTATE CONFIGURATION +#================================================= +ynh_script_progression --message="Removing logrotate configuration..." # Remove the app-specific logrotate config ynh_remove_logrotate -ynh_script_progression --message="Removal of $app completed" --last +#================================================= +# REMOVE THE MYSQL DATABASE +#================================================= +ynh_script_progression --message="Removing the MySQL database..." + +# Remove a database if it exists, along with the associated user +ynh_mysql_remove_db --db_user=$db_user --db_name=$db_name + +#================================================= +# REMOVE APP MAIN DIR +#================================================= +ynh_script_progression --message="Removing app main directory..." + +# Remove the app directory securely +ynh_secure_remove --file="$final_path" + +#================================================= +# REMOVE NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Removing NGINX web server configuration..." + +# Remove the dedicated NGINX config +ynh_remove_nginx_config + +#================================================= +# REMOVE PHP-FPM CONFIGURATION +#================================================= +ynh_script_progression --message="Removing PHP-FPM configuration..." + +# Remove the dedicated PHP-FPM config +ynh_remove_fpm_config + +#================================================= +# REMOVE DEPENDENCIES +#================================================= +ynh_script_progression --message="Removing dependencies..." + +# Remove metapackage and its dependencies +ynh_remove_app_dependencies + +#================================================= +# SPECIFIC REMOVE +#================================================= +# REMOVE VARIOUS FILES +#================================================= +ynh_script_progression --message="Removing various files..." + +ynh_secure_remove --file="$gollem_data_dir" + +#================================================= +# GENERIC FINALIZATION +#================================================= +# REMOVE DEDICATED USER +#================================================= +ynh_script_progression --message="Removing the dedicated system user..." + +# Delete a system user +ynh_system_user_delete --username=$app + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Removal of $app completed" diff --git a/scripts/restore b/scripts/restore index 4a3fda3..1d88bf7 100755 --- a/scripts/restore +++ b/scripts/restore @@ -3,67 +3,134 @@ #================================================= # GENERIC START #================================================= +# IMPORT GENERIC HELPERS +#================================================= -# Source YunoHost helpers +# Keep this path for calling _common.sh inside the execution's context of backup and restore scripts +source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers -# Stop script if errors +#================================================= +# 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 -# Import common cmd -source ../settings/scripts/experimental_helper.sh -source ../settings/scripts/_common.sh +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading installation settings..." -ynh_script_progression --message="Loading settings..." +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) +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) +phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) +gollem_data_dir=$(ynh_app_setting_get --app=$app --key=gollem_data_dir) +#================================================= # CHECK IF THE APP CAN BE RESTORED -ynh_webpath_available --domain $domain --path_url $path_url \ - || ynh_die --message "Path not available: ${domain}${path_url}" +#================================================= +ynh_script_progression --message="Validating restoration parameters..." + test ! -d $final_path \ - || ynh_die --message "There is already a directory: $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..." -# Define and install dependencies -ynh_script_progression --message="Reinstalling dependencies..." --weight=5 -install_dependance +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..." # Create the dedicated user (if not existing) -ynh_system_user_create --username $app +ynh_system_user_create --username=$app --home_dir="$final_path" -# Restore all config and data -ynh_script_progression --message="Restoring files..." --weight=10 -ynh_restore +#================================================= +# RESTORE THE APP MAIN DIR +#================================================= +ynh_script_progression --message="Restoring the app main directory..." +ynh_restore_file --origin_path="$final_path" + +#================================================= +# RESTORE THE DATA DIRECTORY +#================================================= +ynh_script_progression --message="Restoring the data directory..." + +ynh_restore_file --origin_path="$gollem_data_dir" + +mkdir -p $datadir + +#================================================= +# RESTORE THE PHP-FPM CONFIGURATION +#================================================= +ynh_script_progression --message="Restoring the PHP-FPM configuration..." + +ynh_restore_file --origin_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" + + +#================================================= +# SPECIFIC RESTORATION +#================================================= +# REINSTALL DEPENDENCIES +#================================================= +ynh_script_progression --message="Reinstalling dependencies..." --weight=5 + +install_dependance + + +#================================================= # RESTORE THE MYSQL DATABASE -ynh_script_progression --message="Restoring database..." --weight=3 -db_pwd=$(ynh_app_setting_get --app $app --key mysqlpwd) -ynh_mysql_setup_db --db_user $db_name --db_name $db_name --db_pwd $db_pwd -ynh_mysql_connect_as --user $db_name --password $db_pwd --database $db_name < ./db.sql +#================================================= +ynh_script_progression --message="Restoring the MySQL database..." + +db_pwd=$(ynh_app_setting_get --app=$app --key=mysqlpwd) +ynh_mysql_setup_db --db_user=$db_user --db_name=$db_name --db_pwd=$db_pwd +ynh_mysql_connect_as --user=$db_user --password=$db_pwd --database=$db_name < ./db.sql #================================================= -# GENERIC FINALIZATION +# RESTORE VARIOUS FILES #================================================= +ynh_script_progression --message="Restoring various files..." -# SECURE FILES AND DIRECTORIES -ynh_script_progression --message="Protecting directory..." set_permission -# SETUP LOGROTATE -ynh_script_progression --message="Configuring log rotation..." +#================================================= +# RESTORE THE LOGROTATE CONFIGURATION +#================================================= +ynh_script_progression --message="Restoring the logrotate configuration..." + ynh_use_logrotate $final_path/horde --nonappend --specific_user www-data/horde ynh_use_logrotate $final_path/horde/services --append --specific_user www-data/horde ynh_use_logrotate $final_path/horde/services/portal --append --specific_user www-data/horde -# Reload services -systemctl reload php5-fpm -systemctl reload nginx +#================================================= +# GENERIC FINALIZATION +#================================================= +# RELOAD NGINX AND PHP-FPM +#================================================= +ynh_script_progression --message="Reloading NGINX web server and PHP-FPM..." -ynh_script_progression --message="Restoration completed for $app" --last +ynh_systemd_action --service_name=php$phpversion-fpm --action=reload +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Restoration completed for $app" diff --git a/scripts/upgrade b/scripts/upgrade index dee9cef..467c060 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -3,36 +3,47 @@ #================================================= # GENERIC START #================================================= - # IMPORT GENERIC HELPERS +#================================================= + +source _common.sh source /usr/share/yunohost/helpers -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors - -# Import common cmd -source ./experimental_helper.sh -source ./_common.sh - +#================================================= +# LOAD SETTINGS +#================================================= ynh_script_progression --message="Loading installation settings..." -# LOAD SETTINGS -domain=$(ynh_app_setting_get --app $app --key domain) -path_url=$(ynh_normalize_url_path --path_url $(ynh_app_setting_get --app $app --key path)) -admin=$(ynh_app_setting_get --app $app --key admin) -service_autodiscovery=$(ynh_app_setting_get --app $app --key service_autodiscovery) -final_path=$(ynh_app_setting_get --app $app --key final_path) -port=$(ynh_app_setting_get --app $app --key port) -secret_key=$(ynh_app_setting_get --app $app --key secret_key) -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 mysqlpwd) +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) +service_autodiscovery=$(ynh_app_setting_get --app=$app --key=service_autodiscovery) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) +port=$(ynh_app_setting_get --app=$app --key=port) +secret_key=$(ynh_app_setting_get --app=$app --key=secret_key) +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=mysqlpwd) + +#================================================= +# CHECK VERSION +#================================================= +ynh_script_progression --message="Checking version..." + +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)..." # Backup the current version of the app ynh_backup_before_upgrade - ynh_clean_setup () { - # restore it if the upgrade fails + ynh_clean_check_starting + # Restore it if the upgrade fails ynh_restore_upgradebackup } # Exit if an error occurs during the execution of the script @@ -41,11 +52,53 @@ ynh_abort_if_errors #================================================= # STANDARD UPGRADE STEPS #================================================= +# ENSURE DOWNWARD COMPATIBILITY +#================================================= +ynh_script_progression --message="Ensuring downward compatibility..." -# INSTALL DEPENDENCIES +# 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 DEDICATED USER +#================================================= +ynh_script_progression --message="Making sure dedicated system user exists..." + +# Create a dedicated user (if not existing) +ynh_system_user_create --username=$app --home_dir="$final_path" + +#================================================= +# NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Upgrading NGINX web server configuration..." + +# Create a dedicated NGINX config +config_nginx + +#================================================= +# UPGRADE DEPENDENCIES +#================================================= ynh_script_progression --message="Upgrading dependencies..." + install_dependance +#================================================= +# PHP-FPM CONFIGURATION +#================================================= +ynh_script_progression --message="Upgrading PHP-FPM configuration..." + +# Create a dedicated PHP-FPM config +ynh_add_fpm_config + +#================================================= +# SPECIFIC UPGRADE +#================================================= +# ... +#================================================= # Upgrade Horde by PEAR ynh_script_progression --message="Upgrading source files..." --weight=6 pear_cmd="$final_path/pear/pear -c $final_path/pear.conf" @@ -60,23 +113,30 @@ patch_app ynh_script_progression --message="Configuring application..." --weight=3 config_horde -# NGINX CONFIGURATION -# Create a dedicated nginx config -ynh_script_progression --message="Configuring nginx..." --weight=1 -config_nginx - -#================================================= -# GENERIC FINALIZATION -#================================================= - # SECURE FILES AND DIRECTORIES ynh_script_progression --message="Protecting directory..." set_permission +#================================================= +# GENERIC FINALIZATION +#================================================= # SETUP LOGROTATE -ynh_script_progression --message="Configuring log rotation..." +#================================================= +ynh_script_progression --message="Upgrading logrotate configuration..." + ynh_use_logrotate $final_path/horde --nonappend --specific_user www-data/horde ynh_use_logrotate $final_path/horde/services --append --specific_user www-data/horde ynh_use_logrotate $final_path/horde/services/portal --append --specific_user www-data/horde -ynh_script_progression --message="Upgrade of $app completed" --last +#================================================= +# RELOAD NGINX +#================================================= +ynh_script_progression --message="Reloading NGINX web server..." + +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Upgrade of $app completed"