diff --git a/README.md b/README.md
index 607a312..3596fad 100644
--- a/README.md
+++ b/README.md
@@ -1,48 +1,69 @@
# Moodle app for YunoHost
-[![Install Moodle with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=Moodle)
-Version: **3.8.1**
-Moodle - the world's open source learning platform
+[![Integration level](https://dash.yunohost.org/integration/moodle.svg)](https://dash.yunohost.org/appci/app/moodle)
+[![Install moodle with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=moodle)
-Moodle is a learning platform designed to provide
-educators, administrators and learners with a single robust, secure and
-integrated system to create personalised learning environments.
+*[Lire ce readme en français.](./README_fr.md)*
-Moodle is widely used around the world by universities, schools, companies and
-all manner of organisations and individuals.
+> *This package allow you to install moodle 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.*
+## Overview
+Moodle https://moodle.org is a learning platform designed to provide educators, administrators and learners with a single robust, secure and integrated system to create personalised learning environments.
-### Installing guide
+Moodle is widely used around the world by universities, schools, companies and all manner of organisations and individuals.
- App can be installed by YunoHost **admin web-interface** or by **running following command**:
+**Shipped version:** 3.8.2
- $ sudo yunohost app install https://github.com/YunoHost-Apps/moodle_ynh
-
- After install :
-
- 1. Login in moodle exemple : https://domain.tld/moodle
- 2. Create admin account
+## Screenshots
-
-### Upgrade this package:
+![](https://upload.wikimedia.org/wikipedia/commons/3/36/Moodle_2.0_on_Firefox_4.0.png)
- $ sudo yunohost app upgrade moodle -u https://github.com/YunoHost-Apps/moodle_ynh
-
- After upgrade :
-
- 1. If you have custom plugins or themes need to move your plugins
- 2. Moodle is saved in /var/www/moodle.backup
- 3. Moove your plugins / themes exemple "cp -a moodle.backup/mod/hvp moodle/mod/hvp"
- 4. After moving your plugins and themes make "rm -r moodle.backup"
- 5. Login in moodle for complete upgrade
-
-More informations : https://docs.moodle.org/26/en/Upgrading
+## Demo
+* [Official demo](https://sandbox.moodledemo.net/)
+## Configuration
-## To-do
-- [X] Install script
-- [X] Remove script
-- [x] Upgrade script
-- [X] Backup and Restore scripts(need testing)
-- [ ] LDAP integration
+How to configure this app: by an admin panel.
+
+## Documentation
+
+ * Official documentation: https://docs.moodle.org/38/en/Main_page
+
+## YunoHost specific features
+
+#### Multi-users support
+
+Are LDAP and HTTP auth supported? *Yes*
+Can the app be used by multiple users? *Yes*
+
+#### Supported architectures
+
+* x86-64b - [![Build Status](https://ci-apps.yunohost.org/ci/logs/moodle%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/moodle/)
+* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/moodle%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/moodle/)
+
+**More information on the documentation page:**
+https://yunohost.org/packaging_apps
+
+## Links
+
+ * Report a bug: https://github.com/YunoHost-Apps/moodle_ynh/issues
+ * App website: https://moodle.org/
+ * Upstream app repository: http://git.moodle.org/ - https://github.com/moodle/moodle
+ * YunoHost website: https://yunohost.org/
+
+---
+
+Developers info
+----------------
+
+**Only if you want to use a testing branch for coding, instead of merging directly into master.**
+Please do your pull request to the [testing branch](https://github.com/YunoHost-Apps/moodle_ynh/tree/testing).
+
+To try the testing branch, please proceed like that.
+```
+sudo yunohost app install https://github.com/YunoHost-Apps/moodle_ynh/tree/testing --debug
+or
+sudo yunohost app upgrade moodle -u https://github.com/YunoHost-Apps/moodle_ynh/tree/testing --debug
+```
diff --git a/conf/app.src b/conf/app.src
index 743fc5a..4b75f29 100644
--- a/conf/app.src
+++ b/conf/app.src
@@ -1,7 +1,6 @@
-SOURCE_URL=https://download.moodle.org/stable38/moodle-3.8.1.tgz
-SOURCE_SUM=bec050a92f682cee03cb70abfc350b7741522898dd21f5b5847f5c2ddfdd785ad404f6f06ed17b31bfa031aebe42bd35e3a205de686bd8627e92b9a919addb4c
-SOURCE_SUM_PRG=sha512sum
-SOURCE_FORMAT=tar.gz
+SOURCE_URL=https://download.moodle.org/stable38/moodle-3.8.2.zip
+SOURCE_SUM=19504ee7fefd5797e0336bd993bb7c18b3f00ea02f3a35206e361c2defc4ea9b
+SOURCE_SUM_PRG=sha256sum
+SOURCE_FORMAT=zip
SOURCE_IN_SUBDIR=true
-SOURCE_EXTRACT=true
-SOURCE_FILENAME=moodle.tgz
+SOURCE_FILENAME=
\ No newline at end of file
diff --git a/conf/config.php b/conf/config.php
deleted file mode 100644
index 6b3ca8b..0000000
--- a/conf/config.php
+++ /dev/null
@@ -1,884 +0,0 @@
-dbtype = 'pgsql'; // 'pgsql', 'mariadb', 'mysqli', 'mssql', 'sqlsrv' or 'oci'
-$CFG->dblibrary = 'native'; // 'native' only at the moment
-$CFG->dbhost = 'localhost'; // eg 'localhost' or 'db.isp.com' or IP
-$CFG->dbname = 'YNH_DB_USER'; // database name, eg moodle
-$CFG->dbuser = 'YNH_APP'; // your database username
-$CFG->dbpass = 'YNH_DB_PWD'; // your database password
-$CFG->prefix = 'mdl_'; // prefix to use for all table names
-$CFG->dboptions = array(
- 'dbpersist' => false, // should persistent database connections be
- // used? set to 'false' for the most stable
- // setting, 'true' can improve performance
- // sometimes
- 'dbsocket' => false, // should connection via UNIX socket be used?
- // if you set it to 'true' or custom path
- // here set dbhost to 'localhost',
- // (please note mysql is always using socket
- // if dbhost is 'localhost' - if you need
- // local port connection use '127.0.0.1')
- 'dbport' => '', // the TCP port number to use when connecting
- // to the server. keep empty string for the
- // default port
- 'dbhandlesoptions' => false,// On PostgreSQL poolers like pgbouncer don't
- // support advanced options on connection.
- // If you set those in the database then
- // the advanced settings will not be sent.
- // 'dbcollation' => 'utf8mb4_unicode_ci', // MySQL has partial and full UTF-8
- // support. If you wish to use partial UTF-8
- // (three bytes) then set this option to
- // 'utf8_unicode_ci', otherwise this option
- // can be removed for MySQL (by default it will
- // use 'utf8mb4_unicode_ci'. This option should
- // be removed for all other databases.
- // 'fetchbuffersize' => 100000, // On PostgreSQL, this option sets a limit
- // on the number of rows that are fetched into
- // memory when doing a large recordset query
- // (e.g. search indexing). Default is 100000.
- // Uncomment and set to a value to change it,
- // or zero to turn off the limit. You need to
- // set to zero if you are using pg_bouncer in
- // 'transaction' mode (it is fine in 'session'
- // mode).
-);
-//=========================================================================
-// 2. WEB SITE LOCATION
-//=========================================================================
-// Now you need to tell Moodle where it is located. Specify the full
-// web address to where moodle has been installed. If your web site
-// is accessible via multiple URLs then choose the most natural one
-// that your students would use. Do not include a trailing slash
-//
-// If you need both intranet and Internet access please read
-// http://docs.moodle.org/en/masquerading
-$CFG->wwwroot = 'https://YNH_DOMAINYNH_WWW_PATH';
-//=========================================================================
-// 3. DATA FILES LOCATION
-//=========================================================================
-// Now you need a place where Moodle can save uploaded files. This
-// directory should be readable AND WRITEABLE by the web server user
-// (usually 'nobody' or 'apache'), but it should not be accessible
-// directly via the web.
-//
-// - On hosting systems you might need to make sure that your "group" has
-// no permissions at all, but that "others" have full permissions.
-//
-// - On Windows systems you might specify something like 'c:\moodledata'
-$CFG->dataroot = 'YNH_VAR_ROOT';
-//=========================================================================
-// 4. DATA FILES PERMISSIONS
-//=========================================================================
-// The following parameter sets the permissions of new directories
-// created by Moodle within the data directory. The format is in
-// octal format (as used by the Unix utility chmod, for example).
-// The default is usually OK, but you may want to change it to 0750
-// if you are concerned about world-access to the files (you will need
-// to make sure the web server process (eg Apache) can access the files.
-// NOTE: the prefixed 0 is important, and don't use quotes.
-$CFG->directorypermissions = 02777;
-//=========================================================================
-// 5. DIRECTORY LOCATION (most people can just ignore this setting)
-//=========================================================================
-// A very few webhosts use /admin as a special URL for you to access a
-// control panel or something. Unfortunately this conflicts with the
-// standard location for the Moodle admin pages. You can work around this
-// by renaming the admin directory in your installation, and putting that
-// new name here. eg "moodleadmin". This should fix all admin links in Moodle.
-// After any change you need to visit your new admin directory
-// and purge all caches.
-$CFG->admin = 'admin';
-//=========================================================================
-// 6. OTHER MISCELLANEOUS SETTINGS (ignore these for new installations)
-//=========================================================================
-//
-// These are additional tweaks for which no GUI exists in Moodle yet.
-//
-// Starting in PHP 5.3 administrators should specify default timezone
-// in PHP.ini, you can also specify it here if needed.
-// See details at: http://php.net/manual/en/function.date-default-timezone-set.php
-// List of time zones at: http://php.net/manual/en/timezones.php
-// date_default_timezone_set('Australia/Perth');
-//
-// Change the key pair lifetime for Moodle Networking
-// The default is 28 days. You would only want to change this if the key
-// was not getting regenerated for any reason. You would probably want
-// make it much longer. Note that you'll need to delete and manually update
-// any existing key.
-// $CFG->mnetkeylifetime = 28;
-//
-// Not recommended: Set the following to true to allow the use
-// off non-Moodle standard characters in usernames.
-// $CFG->extendedusernamechars = true;
-//
-// Allow user passwords to be included in backup files. Very dangerous
-// setting as far as it publishes password hashes that can be unencrypted
-// if the backup file is publicy available. Use it only if you can guarantee
-// that all your backup files remain only privacy available and are never
-// shared out from your site/institution!
-// $CFG->includeuserpasswordsinbackup = true;
-//
-// Completely disable user creation when restoring a course, bypassing any
-// permissions granted via roles and capabilities. Enabling this setting
-// results in the restore process stopping when a user attempts to restore a
-// course requiring users to be created.
-// $CFG->disableusercreationonrestore = true;
-//
-// Keep the temporary directories used by backup and restore without being
-// deleted at the end of the process. Use it if you want to debug / view
-// all the information stored there after the process has ended. Note that
-// those directories may be deleted (after some ttl) both by cron and / or
-// by new backup / restore invocations.
-// $CFG->keeptempdirectoriesonbackup = true;
-//
-// Modify the restore process in order to force the "user checks" to assume
-// that the backup originated from a different site, so detection of matching
-// users is performed with different (more "relaxed") rules. Note that this is
-// only useful if the backup file has been created using Moodle < 1.9.4 and the
-// site has been rebuilt from scratch using backup files (not the best way btw).
-// If you obtain user conflicts on restore, rather than enabling this setting
-// permanently, try restoring the backup on a different site, back it up again
-// and then restore on the target server.
-// $CFG->forcedifferentsitecheckingusersonrestore = true;
-//
-// Force the backup system to continue to create backups in the legacy zip
-// format instead of the new tgz format. Does not affect restore, which
-// auto-detects the underlying file format.
-// $CFG->usezipbackups = true;
-//
-// Prevent stats processing and hide the GUI
-// $CFG->disablestatsprocessing = true;
-//
-// Setting this to true will enable admins to edit any post at any time
-// $CFG->admineditalways = true;
-//
-// These variables define DEFAULT block variables for new courses
-// If this one is set it overrides all others and is the only one used.
-// $CFG->defaultblocks_override = 'participants,activity_modules,search_forums,course_list:news_items,calendar_upcoming,recent_activity';
-//
-// These variables define the specific settings for defined course formats.
-// They override any settings defined in the formats own config file.
-// $CFG->defaultblocks_site = 'site_main_menu,course_list:course_summary,calendar_month';
-// $CFG->defaultblocks_social = 'participants,search_forums,calendar_month,calendar_upcoming,social_activities,recent_activity,course_list';
-// $CFG->defaultblocks_topics = 'participants,activity_modules,search_forums,course_list:news_items,calendar_upcoming,recent_activity';
-// $CFG->defaultblocks_weeks = 'participants,activity_modules,search_forums,course_list:news_items,calendar_upcoming,recent_activity';
-//
-// These blocks are used when no other default setting is found.
-// $CFG->defaultblocks = 'participants,activity_modules,search_forums,course_list:news_items,calendar_upcoming,recent_activity';
-//
-// You can specify a different class to be created for the $PAGE global, and to
-// compute which blocks appear on each page. However, I cannot think of any good
-// reason why you would need to change that. It just felt wrong to hard-code the
-// the class name. You are strongly advised not to use these to settings unless
-// you are absolutely sure you know what you are doing.
-// $CFG->moodlepageclass = 'moodle_page';
-// $CFG->moodlepageclassfile = "$CFG->dirroot/local/myplugin/mypageclass.php";
-// $CFG->blockmanagerclass = 'block_manager';
-// $CFG->blockmanagerclassfile = "$CFG->dirroot/local/myplugin/myblockamanagerclass.php";
-//
-// Seconds for files to remain in caches. Decrease this if you are worried
-// about students being served outdated versions of uploaded files.
-// $CFG->filelifetime = 60*60*6;
-//
-// Some web servers can offload the file serving from PHP process,
-// comment out one the following options to enable it in Moodle:
-// $CFG->xsendfile = 'X-Sendfile'; // Apache {@see https://tn123.org/mod_xsendfile/}
-// $CFG->xsendfile = 'X-LIGHTTPD-send-file'; // Lighttpd {@see http://redmine.lighttpd.net/projects/lighttpd/wiki/X-LIGHTTPD-send-file}
-// $CFG->xsendfile = 'X-Accel-Redirect'; // Nginx {@see http://wiki.nginx.org/XSendfile}
-// If your X-Sendfile implementation (usually Nginx) uses directory aliases specify them
-// in the following array setting:
-// $CFG->xsendfilealiases = array(
-// '/dataroot/' => $CFG->dataroot,
-// '/cachedir/' => '/var/www/moodle/cache', // for custom $CFG->cachedir locations
-// '/localcachedir/' => '/var/local/cache', // for custom $CFG->localcachedir locations
-// '/tempdir/' => '/var/www/moodle/temp', // for custom $CFG->tempdir locations
-// '/filedir' => '/var/www/moodle/filedir', // for custom $CFG->filedir locations
-// );
-//
-// YUI caching may be sometimes improved by slasharguments:
-// $CFG->yuislasharguments = 1;
-// Some servers may need a special rewrite rule to work around internal path length limitations:
-// RewriteRule (^.*/theme/yui_combo\.php)(/.*) $1?file=$2
-//
-//
-// Following settings may be used to select session driver, uncomment only one of the handlers.
-// Database session handler (not compatible with MyISAM):
-// $CFG->session_handler_class = '\core\session\database';
-// $CFG->session_database_acquire_lock_timeout = 120;
-//
-// File session handler (file system locking required):
-// $CFG->session_handler_class = '\core\session\file';
-// $CFG->session_file_save_path = $CFG->dataroot.'/sessions';
-//
-// Memcached session handler (requires memcached server and extension):
-// $CFG->session_handler_class = '\core\session\memcached';
-// $CFG->session_memcached_save_path = '127.0.0.1:11211';
-// $CFG->session_memcached_prefix = 'memc.sess.key.';
-// $CFG->session_memcached_acquire_lock_timeout = 120;
-// $CFG->session_memcached_lock_expire = 7200; // Ignored if PECL memcached is below version 2.2.0
-// $CFG->session_memcached_lock_retry_sleep = 150; // Spin-lock retry sleeptime (msec). Only effective
-// // for tuning php-memcached 3.0.x (PHP 7)
-//
-// Redis session handler (requires redis server and redis extension):
-// $CFG->session_handler_class = '\core\session\redis';
-// $CFG->session_redis_host = '127.0.0.1';
-// $CFG->session_redis_port = 6379; // Optional.
-// $CFG->session_redis_database = 0; // Optional, default is db 0.
-// $CFG->session_redis_auth = ''; // Optional, default is don't set one.
-// $CFG->session_redis_prefix = ''; // Optional, default is don't set one.
-// $CFG->session_redis_acquire_lock_timeout = 120;
-// $CFG->session_redis_lock_expire = 7200;
-// Use the igbinary serializer instead of the php default one. Note that phpredis must be compiled with
-// igbinary support to make the setting to work. Also, if you change the serializer you have to flush the database!
-// $CFG->session_redis_serializer_use_igbinary = false; // Optional, default is PHP builtin serializer.
-//
-// Memcache session handler (requires memcached server and memcache extension):
-// $CFG->session_handler_class = '\core\session\memcache';
-// $CFG->session_memcache_save_path = '127.0.0.1:11211';
-// $CFG->session_memcache_acquire_lock_timeout = 120;
-// ** NOTE: Memcache extension has less features than memcached and may be
-// less reliable. Use memcached where possible or if you encounter
-// session problems. **
-//
-// Please be aware that when selecting either Memcached or Memcache for sessions that it is advised to use a dedicated
-// memcache server. The memcache and memcached extensions do not provide isolated environments for individual uses.
-// Using the same server for other purposes (MUC for example) can lead to sessions being prematurely removed should
-// the other uses of the server purge the cache.
-//
-// Following setting allows you to alter how frequently is timemodified updated in sessions table.
-// $CFG->session_update_timemodified_frequency = 20; // In seconds.
-//
-// If this setting is set to true, then Moodle will track the IP of the
-// current user to make sure it hasn't changed during a session. This
-// will prevent the possibility of sessions being hijacked via XSS, but it
-// may break things for users coming using proxies that change all the time,
-// like AOL.
-// $CFG->tracksessionip = true;
-//
-// The following lines are for handling email bounces.
-// $CFG->handlebounces = true;
-// $CFG->minbounces = 10;
-// $CFG->bounceratio = .20;
-// The next lines are needed both for bounce handling and any other email to module processing.
-// mailprefix must be EXACTLY four characters.
-// Uncomment and customise this block for Postfix
-// $CFG->mailprefix = 'mdl+'; // + is the separator for Exim and Postfix.
-// $CFG->mailprefix = 'mdl-'; // - is the separator for qmail
-// $CFG->maildomain = 'youremaildomain.com';
-//
-// Enable when setting up advanced reverse proxy load balancing configurations,
-// it may be also necessary to enable this when using port forwarding.
-// $CFG->reverseproxy = true;
-//
-// Enable when using external SSL appliance for performance reasons.
-// Please note that site may be accessible via http: or https:, but not both!
-// $CFG->sslproxy = true;
-//
-// This setting will cause the userdate() function not to fix %d in
-// date strings, and just let them show with a zero prefix.
-// $CFG->nofixday = true;
-//
-// This setting will make some graphs (eg user logs) use lines instead of bars
-// $CFG->preferlinegraphs = true;
-//
-// This setting allows you to specify a class to rewrite outgoing urls
-// enabling 'clean urls' in conjunction with an apache / nginx handler.
-// The handler must implement \core\output\url_rewriter.
-// $CFG->urlrewriteclass = '\local_cleanurls\url_rewriter';
-//
-// Enabling this will allow custom scripts to replace existing moodle scripts.
-// For example: if $CFG->customscripts/course/view.php exists then
-// it will be used instead of $CFG->wwwroot/course/view.php
-// At present this will only work for files that include config.php and are called
-// as part of the url (index.php is implied).
-// Some examples are:
-// http://my.moodle.site/course/view.php
-// http://my.moodle.site/index.php
-// http://my.moodle.site/admin (index.php implied)
-// Custom scripts should not include config.php
-// Warning: Replacing standard moodle scripts may pose security risks and/or may not
-// be compatible with upgrades. Use this option only if you are aware of the risks
-// involved.
-// Specify the full directory path to the custom scripts
-// $CFG->customscripts = '/home/example/customscripts';
-//
-// Performance profiling
-//
-// If you set Debug to "Yes" in the Configuration->Variables page some
-// performance profiling data will show up on your footer (in default theme).
-// With these settings you get more granular control over the capture
-// and printout of the data
-//
-// Capture performance profiling data
-// define('MDL_PERF' , true);
-//
-// Capture additional data from DB
-// define('MDL_PERFDB' , true);
-//
-// Print to log (for passive profiling of production servers)
-// define('MDL_PERFTOLOG' , true);
-//
-// Print to footer (works with the default theme)
-// define('MDL_PERFTOFOOT', true);
-//
-// Enable earlier profiling that causes more code to be covered
-// on every request (db connections, config load, other inits...).
-// Requires extra configuration to be defined in config.php like:
-// profilingincluded, profilingexcluded, profilingautofrec,
-// profilingallowme, profilingallowall, profilinglifetime
-// $CFG->earlyprofilingenabled = true;
-//
-// Force displayed usernames
-// A little hack to anonymise user names for all students. If you set these
-// then all non-teachers will always see these for every person.
-// $CFG->forcefirstname = 'Bruce';
-// $CFG->forcelastname = 'Simpson';
-//
-// The following setting will turn on username logging into Apache log. For full details regarding setting
-// up of this function please refer to the install section of the document.
-// $CFG->apacheloguser = 0; // Turn this feature off. Default value.
-// $CFG->apacheloguser = 1; // Log user id.
-// $CFG->apacheloguser = 2; // Log full name in cleaned format. ie, Darth Vader will be displayed as darth_vader.
-// $CFG->apacheloguser = 3; // Log username.
-// To get the values logged in Apache's log, add to your httpd.conf
-// the following statements. In the General part put:
-// LogFormat "%h %l %{MOODLEUSER}n %t \"%r\" %s %b \"%{Referer}i\" \"%{User-Agent}i\"" moodleformat
-// And in the part specific to your Moodle install / virtualhost:
-// CustomLog "/your/path/to/log" moodleformat
-//
-// Alternatively for other webservers such as nginx, you can instead have the username sent via a http header
-// 'X-MOODLEUSER' which can be saved in the logfile and then stripped out before being sent to the browser:
-// $CFG->headerloguser = 0; // Turn this feature off. Default value.
-// $CFG->headerloguser = 1; // Log user id.
-// $CFG->headerloguser = 2; // Log full name in cleaned format. ie, Darth Vader will be displayed as darth_vader.
-// $CFG->headerloguser = 3; // Log username.
-//
-// CAUTION: Use of this option will expose usernames in the Apache / nginx log,
-// If you are going to publish your log, or the output of your web stats analyzer
-// this will weaken the security of your website.
-//
-// Email database connection errors to someone. If Moodle cannot connect to the
-// database, then email this address with a notice.
-//
-// $CFG->emailconnectionerrorsto = 'your@emailaddress.com';
-//
-// Set the priority of themes from highest to lowest. This is useful (for
-// example) in sites where the user theme should override all other theme
-// settings for accessibility reasons. You can also disable types of themes
-// (other than site) by removing them from the array. The default setting is:
-//
-// $CFG->themeorder = array('course', 'category', 'session', 'user', 'cohort', 'site');
-//
-// NOTE: course, category, session, user, cohort themes still require the
-// respective settings to be enabled
-//
-// It is possible to add extra themes directory stored outside of $CFG->dirroot.
-// This local directory does not have to be accessible from internet.
-//
-// $CFG->themedir = '/location/of/extra/themes';
-//
-// It is possible to specify different cache and temp directories, use local fast filesystem
-// for normal web servers. Server clusters MUST use shared filesystem for cachedir!
-// Localcachedir is intended for server clusters, it does not have to be shared by cluster nodes.
-// The directories must not be accessible via web.
-//
-// $CFG->tempdir = '/var/www/moodle/temp'; // Directory MUST BE SHARED by all cluster nodes.
-// $CFG->cachedir = '/var/www/moodle/cache'; // Directory MUST BE SHARED by all cluster nodes, locking required.
-// $CFG->localcachedir = '/var/local/cache'; // Intended for local node caching.
-//
-// It is possible to specify a different backup temp directory, use local fast filesystem
-// for normal web servers. Server clusters MUST use shared filesystem for backuptempdir!
-// The directory must not be accessible via web.
-//
-// $CFG->backuptempdir = '/var/www/moodle/backuptemp'; // Directory MUST BE SHARED by all cluster nodes.
-//
-// Some filesystems such as NFS may not support file locking operations.
-// Locking resolves race conditions and is strongly recommended for production servers.
-// $CFG->preventfilelocking = false;
-//
-// Site default language can be set via standard administration interface. If you
-// want to have initial error messages for eventual database connection problems
-// localized too, you have to set your language code here.
-//
-// $CFG->lang = 'yourlangcode'; // for example 'cs'
-//
-// When Moodle is about to perform an intensive operation it raises PHP's memory
-// limit. The following setting should be used on large sites to set the raised
-// memory limit to something higher.
-// The value for the settings should be a valid PHP memory value. e.g. 512M, 1G
-//
-// $CFG->extramemorylimit = '1024M';
-//
-// Moodle 2.4 introduced a new cache API.
-// The cache API stores a configuration file within the Moodle data directory and
-// uses that rather than the database in order to function in a stand-alone manner.
-// Using altcacheconfigpath you can change the location where this config file is
-// looked for.
-// It can either be a directory in which to store the file, or the full path to the
-// file if you want to take full control. Either way it must be writable by the
-// webserver.
-//
-// $CFG->altcacheconfigpath = '/var/www/shared/moodle.cache.config.php
-//
-// Use the following flag to completely disable the Available update notifications
-// feature and hide it from the server administration UI.
-//
-// $CFG->disableupdatenotifications = true;
-//
-// Use the following flag to completely disable the installation of plugins
-// (new plugins, available updates and missing dependencies) and related
-// features (such as cancelling the plugin installation or upgrade) via the
-// server administration web interface.
-//
-// $CFG->disableupdateautodeploy = true;
-//
-// Use the following flag to disable the warning on the system notifications page
-// about present development libraries. This flag will not disable the warning within
-// the security overview report. Use this flag only if you really have prohibited web
-// access to the development libraries in your webserver configuration.
-//
-// $CFG->disabledevlibdirscheck = true;
-//
-// Use the following flag to disable modifications to scheduled tasks
-// whilst still showing the state of tasks.
-//
-// $CFG->preventscheduledtaskchanges = true;
-//
-// As of version 2.4 Moodle serves icons as SVG images if the users browser appears
-// to support SVG.
-// For those wanting to control the serving of SVG images the following setting can
-// be defined in your config.php.
-// If it is not defined then the default (browser detection) will occur.
-//
-// To ensure they are always used when available:
-// $CFG->svgicons = true;
-//
-// To ensure they are never used even when available:
-// $CFG->svgicons = false;
-//
-// Some administration options allow setting the path to executable files. This can
-// potentially cause a security risk. Set this option to true to disable editing
-// those config settings via the web. They will need to be set explicitly in the
-// config.php file
-// $CFG->preventexecpath = true;
-//
-// Use the following flag to set userid for noreply user. If not set then moodle will
-// create dummy user and use -ve value as user id.
-// $CFG->noreplyuserid = -10;
-//
-// As of version 2.6 Moodle supports admin to set support user. If not set, all mails
-// will be sent to supportemail.
-// $CFG->supportuserid = -20;
-//
-// Moodle 2.7 introduces a locking api for critical tasks (e.g. cron).
-// The default locking system to use is DB locking for Postgres, and file locking for
-// MySQL, Oracle and SQLServer. If $CFG->preventfilelocking is set, then the default
-// will always be DB locking. It can be manually set to one of the lock
-// factory classes listed below, or one of your own custom classes implementing the
-// \core\lock\lock_factory interface.
-//
-// $CFG->lock_factory = "auto";
-//
-// The list of available lock factories is:
-//
-// "\\core\\lock\\file_lock_factory" - File locking
-// Uses lock files stored by default in the dataroot. Whether this
-// works on clusters depends on the file system used for the dataroot.
-//
-// "\\core\\lock\\db_record_lock_factory" - DB locking based on table rows.
-//
-// "\\core\\lock\\postgres_lock_factory" - DB locking based on postgres advisory locks.
-//
-// Settings used by the lock factories
-//
-// Location for lock files used by the File locking factory. This must exist
-// on a shared file system that supports locking.
-// $CFG->lock_file_root = $CFG->dataroot . '/lock';
-//
-// Moodle 2.9 allows administrators to customise the list of supported file types.
-// To add a new filetype or override the definition of an existing one, set the
-// customfiletypes variable like this:
-//
-// $CFG->customfiletypes = array(
-// (object)array(
-// 'extension' => 'frog',
-// 'icon' => 'archive',
-// 'type' => 'application/frog',
-// 'customdescription' => 'Amphibian-related file archive'
-// )
-// );
-//
-// The extension, icon, and type fields are required. The icon field can refer to
-// any icon inside the pix/f folder. You can also set the customdescription field
-// (shown above) and (for advanced use) the groups, string, and defaulticon fields.
-//
-// Upgrade key
-//
-// If the upgrade key is defined here, then the value must be provided every time
-// the site is being upgraded though the web interface, regardless of whether the
-// administrator is logged in or not. This prevents anonymous access to the upgrade
-// screens where the real authentication and authorization mechanisms can not be
-// relied on.
-//
-// It is strongly recommended to use a value different from your real account
-// password.
-//
-// $CFG->upgradekey = 'put_some_password-like_value_here';
-//
-//=========================================================================
-// 7. SETTINGS FOR DEVELOPMENT SERVERS - not intended for production use!!!
-//=========================================================================
-//
-// Force a debugging mode regardless the settings in the site administration
-// @error_reporting(E_ALL | E_STRICT); // NOT FOR PRODUCTION SERVERS!
-// @ini_set('display_errors', '1'); // NOT FOR PRODUCTION SERVERS!
-// $CFG->debug = (E_ALL | E_STRICT); // === DEBUG_DEVELOPER - NOT FOR PRODUCTION SERVERS!
-// $CFG->debugdisplay = 1; // NOT FOR PRODUCTION SERVERS!
-//
-// You can specify a comma separated list of user ids that that always see
-// debug messages, this overrides the debug flag in $CFG->debug and $CFG->debugdisplay
-// for these users only.
-// $CFG->debugusers = '2';
-//
-// Prevent theme caching
-// $CFG->themedesignermode = true; // NOT FOR PRODUCTION SERVERS!
-//
-// Enable verbose debug information during fetching of email messages from IMAP server.
-// $CFG->debugimap = true;
-//
-// Prevent JS caching
-// $CFG->cachejs = false; // NOT FOR PRODUCTION SERVERS!
-//
-// Restrict which YUI logging statements are shown in the browser console.
-// For details see the upstream documentation:
-// http://yuilibrary.com/yui/docs/api/classes/config.html#property_logInclude
-// http://yuilibrary.com/yui/docs/api/classes/config.html#property_logExclude
-// $CFG->yuiloginclude = array(
-// 'moodle-core-dock-loader' => true,
-// 'moodle-course-categoryexpander' => true,
-// );
-// $CFG->yuilogexclude = array(
-// 'moodle-core-dock' => true,
-// 'moodle-core-notification' => true,
-// );
-//
-// Set the minimum log level for YUI logging statements.
-// For details see the upstream documentation:
-// http://yuilibrary.com/yui/docs/api/classes/config.html#property_logLevel
-// $CFG->yuiloglevel = 'debug';
-//
-// Prevent core_string_manager application caching
-// $CFG->langstringcache = false; // NOT FOR PRODUCTION SERVERS!
-//
-// When working with production data on test servers, no emails or other messages
-// should ever be send to real users
-// $CFG->noemailever = true; // NOT FOR PRODUCTION SERVERS!
-//
-// Divert all outgoing emails to this address to test and debug emailing features
-// $CFG->divertallemailsto = 'root@localhost.local'; // NOT FOR PRODUCTION SERVERS!
-//
-// Except for certain email addresses you want to let through for testing. Accepts
-// a comma separated list of regexes.
-// $CFG->divertallemailsexcept = 'tester@dev.com, fred(\+.*)?@example.com'; // NOT FOR PRODUCTION SERVERS!
-//
-// Uncomment if you want to allow empty comments when modifying install.xml files.
-// $CFG->xmldbdisablecommentchecking = true; // NOT FOR PRODUCTION SERVERS!
-//
-// Since 2.0 sql queries are not shown during upgrade by default.
-// Please note that this setting may produce very long upgrade page on large sites.
-// $CFG->upgradeshowsql = true; // NOT FOR PRODUCTION SERVERS!
-//
-// Add SQL queries to the output of cron, just before their execution
-// $CFG->showcronsql = true;
-//
-// Force developer level debug and add debug info to the output of cron
-// $CFG->showcrondebugging = true;
-//
-//=========================================================================
-// 8. FORCED SETTINGS
-//=========================================================================
-// It is possible to specify normal admin settings here, the point is that
-// they can not be changed through the standard admin settings pages any more.
-//
-// Core settings are specified directly via assignment to $CFG variable.
-// Example:
-// $CFG->somecoresetting = 'value';
-//
-// Plugin settings have to be put into a special array.
-// Example:
-// $CFG->forced_plugin_settings = array('pluginname' => array('settingname' => 'value', 'secondsetting' => 'othervalue'),
-// 'otherplugin' => array('mysetting' => 'myvalue', 'thesetting' => 'thevalue'));
-// Module default settings with advanced/locked checkboxes can be set too. To do this, add
-// an extra config with '_adv' or '_locked' as a suffix and set the value to true or false.
-// Example:
-// $CFG->forced_plugin_settings = array('pluginname' => array('settingname' => 'value', 'settingname_locked' => true, 'settingname_adv' => true));
-//
-//=========================================================================
-// 9. PHPUNIT SUPPORT
-//=========================================================================
-// $CFG->phpunit_prefix = 'phpu_';
-// $CFG->phpunit_dataroot = '/home/example/phpu_moodledata';
-// $CFG->phpunit_directorypermissions = 02777; // optional
-// $CFG->phpunit_profilingenabled = true; // optional to profile PHPUnit runs.
-//
-//
-//=========================================================================
-// 10. SECRET PASSWORD SALT
-//=========================================================================
-// A site-wide password salt is no longer used in new installations.
-// If upgrading from 2.6 or older, keep all existing salts in config.php file.
-//
-// $CFG->passwordsaltmain = 'a_very_long_random_string_of_characters#@6&*1';
-//
-// You may also have some alternative salts to allow migration from previously
-// used salts.
-//
-// $CFG->passwordsaltalt1 = '';
-// $CFG->passwordsaltalt2 = '';
-// $CFG->passwordsaltalt3 = '';
-// ....
-// $CFG->passwordsaltalt19 = '';
-// $CFG->passwordsaltalt20 = '';
-//
-//
-//=========================================================================
-// 11. BEHAT SUPPORT
-//=========================================================================
-// Behat test site needs a unique www root, data directory and database prefix:
-//
-// $CFG->behat_wwwroot = 'http://127.0.0.1/moodle';
-// $CFG->behat_prefix = 'bht_';
-// $CFG->behat_dataroot = '/home/example/bht_moodledata';
-//
-// You can override default Moodle configuration for Behat and add your own
-// params; here you can add more profiles, use different Mink drivers than Selenium...
-// These params would be merged with the default Moodle behat.yml, giving priority
-// to the ones specified here. The array format is YAML, following the Behat
-// params hierarchy. More info: http://docs.behat.org/guides/7.config.html
-// Example:
-// $CFG->behat_config = array(
-// 'Mac-Firefox' => array(
-// 'suites' => array (
-// 'default' => array(
-// 'filters' => array(
-// 'tags' => '~@_file_upload'
-// ),
-// ),
-// ),
-// 'extensions' => array(
-// 'Behat\MinkExtension' => array(
-// 'selenium2' => array(
-// 'browser' => 'firefox',
-// 'capabilities' => array(
-// 'platform' => 'OS X 10.6',
-// 'version' => 20
-// )
-// )
-// )
-// )
-// ),
-// 'Mac-Safari' => array(
-// 'extensions' => array(
-// 'Behat\MinkExtension' => array(
-// 'selenium2' => array(
-// 'browser' => 'safari',
-// 'capabilities' => array(
-// 'platform' => 'OS X 10.8',
-// 'version' => 6
-// )
-// )
-// )
-// )
-// )
-// );
-// You can also use the following config to override default Moodle configuration for Behat.
-// This config is limited to default suite and will be supported in later versions.
-// It will have precedence over $CFG->behat_config.
-// $CFG->behat_profiles = array(
-// 'phantomjs' => array(
-// 'browser' => 'phantomjs',
-// 'tags' => '~@_file_upload&&~@_alert&&~@_bug_phantomjs',
-// 'wd_host' => 'http://127.0.0.1:4443/wd/hub',
-// 'capabilities' => array(
-// 'platform' => 'Linux',
-// 'version' => 2.1
-// )
-// ),
-// );
-//
-// You can force the browser session (not user's sessions) to restart after N seconds. This could
-// be useful if you are using a cloud-based service with time restrictions in the browser side.
-// Setting this value the browser session that Behat is using will be restarted. Set the time in
-// seconds. Is not recommended to use this setting if you don't explicitly need it.
-// Example:
-// $CFG->behat_restart_browser_after = 7200; // Restarts the browser session after 2 hours
-//
-// All this page's extra Moodle settings are compared against a white list of allowed settings
-// (the basic and behat_* ones) to avoid problems with production environments. This setting can be
-// used to expand the default white list with an array of extra settings.
-// Example:
-// $CFG->behat_extraallowedsettings = array('somecoresetting', ...);
-//
-// You should explicitly allow the usage of the deprecated behat steps, otherwise an exception will
-// be thrown when using them. The setting is disabled by default.
-// Example:
-// $CFG->behat_usedeprecated = true;
-//
-// Including feature files from directories outside the dirroot is possible if required. The setting
-// requires that the running user has executable permissions on all parent directories in the paths.
-// Example:
-// $CFG->behat_additionalfeatures = array('/home/developer/code/wipfeatures');
-//
-// You can make behat save several dumps when a scenario fails. The dumps currently saved are:
-// * a dump of the DOM in it's state at the time of failure; and
-// * a screenshot (JavaScript is required for the screenshot functionality, so not all browsers support this option)
-// Example:
-// $CFG->behat_faildump_path = '/my/path/to/save/failure/dumps';
-//
-// You can specify db, selenium wd_host etc. for behat parallel run by setting following variable.
-// Example:
-// $CFG->behat_parallel_run = array (
-// array (
-// 'dbtype' => 'mysqli',
-// 'dblibrary' => 'native',
-// 'dbhost' => 'localhost',
-// 'dbname' => 'moodletest',
-// 'dbuser' => 'moodle',
-// 'dbpass' => 'moodle',
-// 'behat_prefix' => 'mdl_',
-// 'wd_host' => 'http://127.0.0.1:4444/wd/hub',
-// 'behat_wwwroot' => 'http://127.0.0.1/moodle',
-// 'behat_dataroot' => '/home/example/bht_moodledata'
-// ),
-// );
-//
-// To change name of behat parallel run site, define BEHAT_PARALLEL_SITE_NAME and parallel run sites will be suffixed
-// with this value
-// Example:
-// define('BEHAT_PARALLEL_SITE_NAME', 'behatparallelsite');
-//
-// Command line output for parallel behat install is limited to 80 chars, if you are installing more then 4 sites and
-// want to expand output to more then 80 chars, then define BEHAT_MAX_CMD_LINE_OUTPUT
-// Example:
-// define('BEHAT_MAX_CMD_LINE_OUTPUT', 120);
-//
-// Behat feature files will be distributed randomly between the processes by default. If you have timing file or want
-// to create timing file then define BEHAT_FEATURE_TIMING_FILE with path to timing file. It will be updated for each
-// run with latest time taken to execute feature.
-// Example:
-// define('BEHAT_FEATURE_TIMING_FILE', '/PATH_TO_TIMING_FILE/timing.json');
-//
-// If you don't have timing file and want some stable distribution of features, then you can use step counts to
-// distribute the features. You can generate step file by executing php admin/tool/behat/cli/util.php --updatesteps
-// this will update step file which is defined by BEHAT_FEATURE_STEP_FILE.
-// Example:
-// define('BEHAT_FEATURE_STEP_FILE', '/PATH_TO_FEATURE_STEP_COUNT_FILE/stepcount.json');
-//
-// Feature distribution for each process is displayed as histogram. you can disable it by setting
-// BEHAT_DISABLE_HISTOGRAM
-// Example:
-// define('BEHAT_DISABLE_HISTOGRAM', true);
-//
-//=========================================================================
-// 12. DEVELOPER DATA GENERATOR
-//=========================================================================
-//
-// The developer data generator tool is intended to be used only in development or testing sites and
-// it's usage in production environments is not recommended; if it is used to create JMeter test plans
-// is even less recommended as JMeter needs to log in as site course users. JMeter needs to know the
-// users passwords but would be dangerous to have a default password as everybody would know it, which would
-// be specially dangerouse if somebody uses this tool in a production site, so in order to prevent unintended
-// uses of the tool and undesired accesses as well, is compulsory to set a password for the users
-// generated by this tool, but only in case you want to generate a JMeter test. The value should be a string.
-// Example:
-// $CFG->tool_generator_users_password = 'examplepassword';
-//
-//=========================================================================
-// 13. SYSTEM PATHS (You need to set following, depending on your system)
-//=========================================================================
-// Ghostscript path.
-// On most Linux installs, this can be left as '/usr/bin/gs'.
-// On Windows it will be something like 'c:\gs\bin\gswin32c.exe' (make sure
-// there are no spaces in the path - if necessary copy the files 'gswin32c.exe'
-// and 'gsdll32.dll' to a new folder without a space in the path)
-// $CFG->pathtogs = '/usr/bin/gs';
-//
-// Path to du.
-// Probably something like /usr/bin/du. If you enter this, pages that display
-// directory contents will run much faster for directories with a lot of files.
-// $CFG->pathtodu = '';
-//
-// Path to aspell.
-// To use spell-checking within the editor, you MUST have aspell 0.50 or later
-// installed on your server, and you must specify the correct path to access the
-// aspell binary. On Unix/Linux systems, this path is usually /usr/bin/aspell,
-// but it might be something else.
-// $CFG->aspellpath = '';
-//
-// Path to dot.
-// Probably something like /usr/bin/dot. To be able to generate graphics from
-// DOT files, you must have installed the dot executable and point to it here.
-// Note that, for now, this only used by the profiling features
-// (Development->Profiling) built into Moodle.
-// $CFG->pathtodot = '';
-//
-// Path to unoconv.
-// Probably something like /usr/bin/unoconv. Used as a fallback to convert between document formats.
-// Unoconv is used convert between file formats supported by LibreOffice.
-// Use a recent version of unoconv ( >= 0.7 ), older versions have trouble running from a webserver.
-// $CFG->pathtounoconv = '';
-//
-//=========================================================================
-// 14. ALTERNATIVE FILE SYSTEM SETTINGS
-//=========================================================================
-//
-// Alternative file system.
-// Since 3.3 it is possible to override file_storage and file_system API and use alternative storage systems (e.g. S3,
-// Rackspace Cloud Files, Google Cloud Storage, Azure Storage, etc.).
-// To set the alternative file storage system in config.php you can use the following setting, providing the
-// alternative system class name that will be auto-loaded by file_storage API.
-//
-// $CFG->alternative_file_system_class = '\\local_myfilestorage\\file_system';
-//
-//=========================================================================
-// ALL DONE! To continue installation, visit your main page with a browser
-//=========================================================================
-require_once(__DIR__ . '/lib/setup.php'); // Do not edit
-// There is no php closing tag in this file,
-// it is intentional because it prevents trailing whitespace problems!
diff --git a/conf/cron b/conf/cron
index 6027f3d..f38896d 100644
--- a/conf/cron
+++ b/conf/cron
@@ -1 +1 @@
-* * * * * /usr/bin/php YNH_DOMAIN/admin/cli/cron.php >/dev/null
+*/15 * * * * /usr/bin/php__YNH_PHP_VERSION__ __FINAL_PATH__/admin/cli/cron.php >/dev/null
diff --git a/conf/nginx.conf b/conf/nginx.conf
index 74fc4df..1efbff7 100644
--- a/conf/nginx.conf
+++ b/conf/nginx.conf
@@ -1,29 +1,23 @@
-location __PATH__ {
+#sub_path_only rewrite ^__PATH__$ __PATH__/ permanent;
+location __PATH__/ {
# Path to source
alias __FINALPATH__/ ;
+ # Force usage of https
if ($scheme = http) {
rewrite ^ https://$server_name$request_uri? permanent;
}
- # Example PHP configuration (remove if not used)
index index.php;
- # Common parameter to increase upload size limit in conjuction with dedicated php-fpm file
+ # Common parameter to increase upload size limit in conjunction with dedicated php-fpm file
#client_max_body_size 50M;
try_files $uri $uri/ index.php;
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
- fastcgi_pass unix:/var/run/php5-fpm-__NAME__.sock;
-
- # If you don't use a dedicated fpm config for your app,
- # use a general fpm pool.
- # This is to be used INSTEAD of line above
- # Don't forget to adjust scripts install/upgrade/remove/backup accordingly
- #
- #fastcgi_pass unix:/var/run/php5-fpm.sock;
+ fastcgi_pass unix:/var/run/php/php__YNH_PHP_VERSION__-fpm-__NAME__.sock;
fastcgi_index index.php;
include fastcgi_params;
@@ -31,7 +25,6 @@ location __PATH__ {
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;
diff --git a/conf/php-fpm.conf b/conf/php-fpm.conf
index 2aec4a2..ab1a471 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:
@@ -96,7 +110,7 @@ pm = dynamic
; forget to tweak pm.* to fit your needs.
; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand'
; Note: This value is mandatory.
-pm.max_children = 10
+pm.max_children = 5
; The number of child processes created on startup.
; Note: Used only when pm is set to 'dynamic'
@@ -122,7 +136,7 @@ pm.max_spare_servers = 3
; This can be useful to work around memory leaks in 3rd party libraries. For
; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS.
; Default Value: 0
-pm.max_requests = 500
+;pm.max_requests = 500
; The URI to view the FPM status page. If this value is not set, no URI will be
; recognized as a status page. It shows the following informations:
@@ -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"
@@ -302,13 +320,13 @@ pm.max_requests = 500
; The log file for slow requests
; Default Value: not set
; Note: slowlog is mandatory if request_slowlog_timeout is set
-slowlog = /var/log/nginx/__NAMETOCHANGE__.slow.log
+;slowlog = log/$pool.log.slow
; The timeout for serving a single request after which a PHP backtrace will be
; dumped to the 'slowlog' file. A value of '0s' means 'off'.
; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0
-request_slowlog_timeout = 5s
+;request_slowlog_timeout = 0
; The timeout for serving a single request after which the worker process will
; be killed. This option should be used when the 'max_execution_time' ini option
@@ -347,15 +365,24 @@ chdir = __FINALPATH__
; Note: on highloaded environement, this can cause some delay in the page
; process time (several ms).
; Default Value: no
-catch_workers_output = yes
+;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.
@@ -390,3 +417,14 @@ catch_workers_output = yes
;php_admin_value[error_log] = /var/log/fpm-php.www.log
;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
diff --git a/conf/php-fpm.ini b/conf/php-fpm.ini
deleted file mode 100644
index 5c27d59..0000000
--- a/conf/php-fpm.ini
+++ /dev/null
@@ -1,10 +0,0 @@
-; Common values to change to increase file upload limit
-; upload_max_filesize = 50M
-; post_max_size = 50M
-; mail.add_x_header = Off
-
-; Other common parameters
-; max_execution_time = 600
-; max_input_time = 300
-; memory_limit = 256M
-; short_open_tag = On
diff --git a/manifest.json b/manifest.json
index 5160959..0850b4b 100644
--- a/manifest.json
+++ b/manifest.json
@@ -6,21 +6,19 @@
"en": "Moodle package for YunoHost application.",
"fr": "Moodle de package d’application pour YunoHost."
},
- "version": "3.8.1",
+ "version": "3.8.2",
"url": "https://moodle.org/",
- "license": "GPL-3.0",
+ "license": "GPL-3.0-or-later",
"maintainer": {
"name": "Anmol Sharma",
"email": "anmol@datamol.org"
},
"requirements": {
- "yunohost": ">= 3.0"
+ "yunohost": ">= 3.5"
},
"multi_instance": true,
"services": [
- "nginx",
- "php7.1-fpm",
- "psql"
+ "nginx"
],
"arguments": {
"install" : [
@@ -43,6 +41,23 @@
"example": "/moodle",
"default": "/moodle"
},
+ {
+ "name": "admin",
+ "type": "user",
+ "ask": {
+ "en": "Choose the Moodle administrator (must be an existing YunoHost user)",
+ "fr": "Administrateur du site (doit être un utilisateur YunoHost existant)"
+ },
+ "example": "johndoe"
+ },
+ {
+ "name": "password",
+ "type": "password",
+ "ask": {
+ "en": "Choose a password for the administrator",
+ "fr": "Choisissez un mot de passe pour l'administrateur"
+ }
+ },
{
"name": "is_public",
"type": "boolean",
diff --git a/scripts/_common.sh b/scripts/_common.sh
index b8c5f97..631df84 100644
--- a/scripts/_common.sh
+++ b/scripts/_common.sh
@@ -1,72 +1,27 @@
#!/bin/bash
-# ============= 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
-}
+#=================================================
+# COMMON VARIABLES
+#=================================================
-extra_pkg_dependencies="php7.1-zip php7.1-mysql php7.1-xml php7.1-intl php7.1-mbstring php7.1-gd php7.1-curl php7.1-soap php7.1-pgsql php7.1-xmlrpc"
+# dependencies used by the app
+YNH_PHP_VERSION="7.3"
+extra_pkg_dependencies="php$YNH_PHP_VERSION-common php$YNH_PHP_VERSION-mbstring php$YNH_PHP_VERSION-curl php$YNH_PHP_VERSION-xmlrpc php$YNH_PHP_VERSION-soap php$YNH_PHP_VERSION-zip php$YNH_PHP_VERSION-gd php$YNH_PHP_VERSION-xml php$YNH_PHP_VERSION-intl php$YNH_PHP_VERSION-json php$YNH_PHP_VERSION-pgsql php$YNH_PHP_VERSION-ldap"
+pkg_dependencies="postgresql"
-# 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 information...}"
- local recipients="${2:-root}"
+#=================================================
+# EXPERIMENTAL HELPERS
+#=================================================
- # 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")
+# Execute a command as another user
+# usage: exec_as USER COMMAND [ARG ...]
+exec_as() {
+ local USER=$1
+ shift 1
- local mail_subject="☁️🆈🅽🅷☁️: \`$app\` has important message for you"
-
- local mail_message="This is an automated message from your beloved YunoHost server.
-Specific information for the application $app.
-$app_message
----
-Automatic diagnosis data from YunoHost
-$(yunohost tools diagnosis | grep -B 100 "services:" | sed '/services:/d')"
-
- # Define binary to use for mail command
- if [ -e /usr/bin/bsd-mailx ]
- then
- local mail_bin=/usr/bin/bsd-mailx
- else
- local mail_bin=/usr/bin/mail.mailutils
- fi
-
- # Send the email to the recipients
- echo "$mail_message" | $mail_bin -a "Content-Type: text/plain; charset=UTF-8" -s "$mail_subject" "$recipients"
-}
+ if [[ $USER = $(whoami) ]]; then
+ eval "$@"
+ else
+ sudo -u "$USER" "$@"
+ fi
+}
\ No newline at end of file
diff --git a/scripts/backup b/scripts/backup
index f501e0e..5466fd1 100644
--- a/scripts/backup
+++ b/scripts/backup
@@ -6,65 +6,73 @@
# IMPORT GENERIC HELPERS
#=================================================
-source _common.sh
-source psql.sh
+source ../settings/scripts/_common.sh
source /usr/share/yunohost/helpers
+source ../settings/scripts/ynh_add_extra_apt_repos
+source ../settings/scripts/ynh_install_php
#=================================================
# MANAGE SCRIPT FAILURE
#=================================================
-ynh_clean_setup () {
- ### Remove this function if there's nothing to clean before calling the remove script.
- true
-}
# Exit if an error occurs during the execution of the script
ynh_abort_if_errors
#=================================================
# LOAD SETTINGS
#=================================================
+ynh_script_progression --message="Loading installation settings..."
app=$YNH_APP_INSTANCE_NAME
-final_path=$(ynh_app_setting_get "$app" final_path)
-domain=$(ynh_app_setting_get "$app" domain)
-db_name=$(ynh_app_setting_get "$app" psql_db)
+final_path=$(ynh_app_setting_get --app=$app --key=final_path)
+data_path=$(ynh_app_setting_get --app=$app --key=data_path)
+domain=$(ynh_app_setting_get --app=$app --key=domain)
+db_name=$(ynh_app_setting_get --app=$app --key=db_name)
#=================================================
# STANDARD BACKUP STEPS
#=================================================
# BACKUP THE APP MAIN DIR
#=================================================
+ynh_script_progression --message="Backing up the main app directory..."
-ynh_backup "$final_path"
-# BACKUP APP home directory
-ynh_backup "/home/yunohost.app/$app"
+ynh_backup --src_path="$final_path"
+
+ynh_backup --src_path="$data_path"
#=================================================
# BACKUP THE NGINX CONFIGURATION
#=================================================
+ynh_script_progression --message="Backing up nginx web server configuration..."
-ynh_backup "/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_script_progression --message="Backing up php-fpm configuration..."
-ynh_backup "/etc/php5/fpm/pool.d/$app.conf"
-ynh_backup "/etc/php5/fpm/conf.d/20-$app.ini"
+ynh_backup --src_path="/etc/php/$YNH_PHP_VERSION/fpm/pool.d/$app.conf"
#=================================================
-# BACKUP THE PSQL DATABASE
+# BACKUP THE MYSQL DATABASE
#=================================================
+ynh_script_progression --message="Backing up the PostgreSQL database..."
-ynh_psql_dump_db "$db_name" > db.sql
-ynh_backup "db.sql"
+ynh_psql_dump_db --database="$db_name" > db.sql
#=================================================
# SPECIFIC BACKUP
#=================================================
-# BACKUP THE CRON FILE
+# BACKUP A CRON FILE
+#=================================================
+ynh_script_progression --message="Backing up the cron file..."
+
+ynh_backup --src_path="/etc/cron.d/$app"
+
+#=================================================
+# END OF SCRIPT
#=================================================
-ynh_backup "/etc/cron.d/$app"
+ynh_script_progression --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." --last
diff --git a/scripts/install b/scripts/install
index 6f6c0de..354f887 100644
--- a/scripts/install
+++ b/scripts/install
@@ -7,19 +7,14 @@
#=================================================
source _common.sh
-source psql.sh
-source ynh_install_php
-source ynh_add_extra_apt_repos
source /usr/share/yunohost/helpers
+source ynh_add_extra_apt_repos
+source ynh_install_php
#=================================================
# MANAGE SCRIPT FAILURE
#=================================================
-ynh_clean_setup () {
- ### Remove this function if there's nothing to clean before calling the remove script.
- true
-}
# Exit if an error occurs during the execution of the script
ynh_abort_if_errors
@@ -29,177 +24,163 @@ ynh_abort_if_errors
domain=$YNH_APP_ARG_DOMAIN
path_url=$YNH_APP_ARG_PATH
+admin=$YNH_APP_ARG_ADMIN
+password=$YNH_APP_ARG_PASSWORD
is_public=$YNH_APP_ARG_IS_PUBLIC
-# This is a multi-instance app, meaning it can be installed several times independently
-# The id of the app as stated in the manifest is available as $YNH_APP_ID
-# The instance number is available as $YNH_APP_INSTANCE_NUMBER (equals "1", "2", ...)
-# The app instance name is available as $YNH_APP_INSTANCE_NAME
-# - the first time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample
-# - the second time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample__2
-# - ynhexample__{N} for the subsequent installations, with N=3,4, ...
-# The app instance name is probably what you are interested the most, since this is
-# guaranteed to be unique. This is a good unique identifier to define installation path,
-# db names, ...
app=$YNH_APP_INSTANCE_NAME
#=================================================
# 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 "This path already contains a folder"
+test ! -e "$final_path" || ynh_die --message="This path already contains a folder"
+data_path=/home/yunohost.app/$app
+test ! -e "$data_path" || ynh_die --message="This path already contains a folder"
-# Normalize the url path syntax
-path_url=$(ynh_normalize_url_path "$path_url")
-
-# Check web path availability
-ynh_webpath_available "$domain" "$path_url"
# Register (book) web path
-ynh_webpath_register "$app" "$domain" "$path_url"
+ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url
#=================================================
# STORE SETTINGS FROM MANIFEST
#=================================================
+ynh_script_progression --message="Storing installation settings..."
-ynh_app_setting_set "$app" domain "$domain"
-ynh_app_setting_set "$app" path "$path_url"
-ynh_app_setting_set "$app" is_public "$is_public"
+ynh_app_setting_set --app=$app --key=domain --value=$domain
+ynh_app_setting_set --app=$app --key=path --value=$path_url
+ynh_app_setting_set --app=$app --key=admin --value=$admin
+ynh_app_setting_set --app=$app --key=password --value=$password
+ynh_app_setting_set --app=$app --key=is_public --value=$is_public
#=================================================
# STANDARD MODIFICATIONS
#=================================================
+# INSTALL DEPENDENCIES
+#=================================================
+ynh_script_progression --message="Installing dependencies..." --weight=60
+
+ynh_install_app_dependencies $pkg_dependencies
+ynh_install_php --phpversion="$YNH_PHP_VERSION" --package="$extra_pkg_dependencies"
#=================================================
-# INSTALL PHP7.3 AND DEPENDENCIES (EXP HELPER)
+# CREATE POSTGRESQL DATABASE
#=================================================
-ynh_print_info --message="Installing php7.1..."
+ynh_script_progression --message="Creating a PostgreSQL database..." --weight=4
-ynh_install_php --phpversion="7.1" --package="$extra_pkg_dependencies"
-ynh_install_app_dependencies postgresql
-
-#=================================================
-# Create postgresql database
-#=================================================
-
-db_name=$app
-db_pwd=$(ynh_string_random 30)
-ynh_app_setting_set "$app" psql_db "$db_name"
-ynh_app_setting_set "$app" psqlpwd "$db_pwd"
ynh_psql_test_if_first_run
-ynh_psql_create_user "$app" "$db_pwd"
-ynh_psql_execute_as_root \
-"CREATE DATABASE $db_name ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' template=template0 OWNER $app;"
+
+db_name=$(ynh_sanitize_dbid --db_name=$app)
+ynh_app_setting_set --app=$app --key=db_name --value=$db_name
+ynh_psql_setup_db --db_user=$db_name --db_name=$db_name
+
+db_pwd=$(ynh_app_setting_get $app psqlpwd)
+
#=================================================
# DOWNLOAD, CHECK AND UNPACK SOURCE
#=================================================
+ynh_script_progression --message="Setting up source files..." --weight=6
-ynh_app_setting_set "$app" final_path "$final_path"
+ynh_app_setting_set --app=$app --key=final_path --value=$final_path
# Download, check integrity, uncompress and patch the source from app.src
-ynh_setup_source "$final_path"
-cp ../conf/config.php "$final_path"/.
+ynh_setup_source --dest_dir="$final_path"
#=================================================
# NGINX CONFIGURATION
#=================================================
+ynh_script_progression --message="Configuring nginx web server..." --weight=2
# Create a dedicated nginx config
-ynh_add_nginx_config
+ynh_add_nginx_config YNH_PHP_VERSION
#=================================================
# CREATE DEDICATED USER
#=================================================
+ynh_script_progression --message="Configuring system user..." --weight=2
# Create a system user
-ynh_system_user_create "$app"
+ynh_system_user_create --username=$app
+
#=================================================
# PHP-FPM CONFIGURATION
#=================================================
-
-### `ynh_add_fpm_config` is used to set up a PHP config.
-### You can remove it if your app doesn't use PHP.
-### `ynh_add_fpm_config` will use the files conf/php-fpm.conf and conf/php-fpm.ini
-### If you're not using these lines:
-### - You can remove these files in conf/.
-### - Remove the section "BACKUP THE PHP-FPM CONFIGURATION" in the backup script
-### - Remove also the section "REMOVE PHP-FPM CONFIGURATION" in the remove script
-### - As well as the section "RESTORE THE PHP-FPM CONFIGURATION" in the restore script
-### With the reload at the end of the script.
-### - And the section "PHP-FPM CONFIGURATION" in the upgrade script
+ynh_script_progression --message="Configuring php-fpm..." --weight=1
# Create a dedicated php-fpm config
-ynh_add_fpm_config --phpversion="7.1"
+ynh_add_fpm_config --phpversion="$YNH_PHP_VERSION"
#=================================================
# SPECIFIC SETUP
#=================================================
-# SETUP config file
+# SECURE FILES AND DIRECTORIES
#=================================================
-var_root=/home/yunohost.app/$app
-ynh_replace_string "YNH_DB_USER" "$app" "$final_path/config.php"
-ynh_replace_string "YNH_APP" "$db_name" "$final_path/config.php"
-ynh_replace_string "YNH_DB_PWD" "$db_pwd" "$final_path/config.php"
-ynh_replace_string "YNH_DOMAIN" "$domain" "$final_path/config.php"
-if [ "$path_url" = "/" ]
-then
- ynh_replace_string "YNH_WWW_PATH" "" "$final_path/config.php"
-else
- ynh_replace_string "YNH_WWW_PATH" "$path_url" "$final_path/config.php"
-fi
-ynh_replace_string "YNH_VAR_ROOT" "$var_root" "$final_path/config.php"
+
+ynh_app_setting_set --app=$app --key=data_path --value=$data_path
+mkdir -p $data_path
+chown -R "$app": "$data_path"
+chown -R "$app": "$final_path"
+
+#=================================================
+# SETUP APPLICATION
+#=================================================
+ynh_script_progression --message="Configuring the application..." --weight=190
+
+email=$(ynh_user_get_info $admin mail)
+
+exec_as "$app" php$YNH_PHP_VERSION "$final_path/admin/cli/install.php" --wwwroot="https://$domain${path_url%/}" --dataroot=$data_path --dbtype='pgsql' --dbname=$db_name --dbuser=$db_name --dbpass=$db_pwd --adminuser=$admin --adminpass=$password --adminemail=$email --fullname="YunoHost" --shortname="YNH" --non-interactive --agree-license
# Calculate and store the config file checksum into the app settings
ynh_store_file_checksum "$final_path/config.php"
-# Create the home directory
-mkdir -p "$var_root"
-chown -R "$app": "$var_root"
-chmod -R 700 "$var_root"
-
#=================================================
-# SETUP APPLICATION WITH CURL
+# ACTIVATE LDAP SUPPORT
#=================================================
-# Set right permissions for curl install
-chown -R "$app": "$final_path"
+ynh_psql_execute_as_root --database=$db_name --sql="UPDATE public.mdl_config SET value='ldap,email' WHERE name='auth';"
+ynh_psql_execute_as_root --database=$db_name --sql="UPDATE public.mdl_config_plugins SET value='ldap://127.0.0.1/' WHERE plugin='auth_ldap' AND name='host_url';"
+ynh_psql_execute_as_root --database=$db_name --sql="UPDATE public.mdl_config_plugins SET value='uid' WHERE plugin='auth_ldap' AND name='user_attribute';"
+ynh_psql_execute_as_root --database=$db_name --sql="UPDATE public.mdl_config_plugins SET value='ou=users,dc=yunohost,dc=org' WHERE plugin='auth_ldap' AND name='contexts';"
+ynh_psql_execute_as_root --database=$db_name --sql="UPDATE public.mdl_config_plugins SET value='givenName' WHERE plugin='auth_ldap' AND name='field_map_firstname';"
+ynh_psql_execute_as_root --database=$db_name --sql="UPDATE public.mdl_config_plugins SET value='sn' WHERE plugin='auth_ldap' AND name='field_map_lastname';"
+ynh_psql_execute_as_root --database=$db_name --sql="UPDATE public.mdl_config_plugins SET value='mail' WHERE plugin='auth_ldap' AND name='field_map_email';"
+ynh_psql_execute_as_root --database=$db_name --sql="UPDATE public.mdl_config_plugins SET value='onlogin' WHERE plugin='auth_ldap' AND (name='field_updatelocal_firstname' OR name='field_updatelocal_lastname' OR name='field_updatelocal_email');"
+ynh_psql_execute_as_root --database=$db_name --sql="UPDATE public.mdl_config_plugins SET value='locked' WHERE plugin='auth_ldap' AND (name='field_lock_firstname' OR name='field_lock_lastname' OR name='field_lock_email');"
-# Reload Nginx
-systemctl reload nginx
+exec_as "$app" php$YNH_PHP_VERSION "$final_path/admin/cli/purge_caches.php"
+
+#=================================================
+# ADD CRON JOB
+#=================================================
+
+# Set up poller
+sudo cp "../conf/cron" "/etc/cron.d/$app"
+ynh_replace_string "__FINAL_PATH__" "$final_path" "/etc/cron.d/$app"
+ynh_replace_string "__YNH_PHP_VERSION__" "$YNH_PHP_VERSION" "/etc/cron.d/$app"
#=================================================
# GENERIC FINALIZATION
-#=================================================
-# SECURE FILES AND DIRECTORIES
-#=================================================
-
-# Set permissions to app files
-chown root: "$final_path"/config.php
-
-
-# Set up poller
-sudo cp ../conf/cron /etc/cron.d/"$app"
-ynh_replace_string "YNH_DOMAIN" "$final_path" "/etc/cron.d/$app"
-
#=================================================
# SETUP SSOWAT
#=================================================
-if [ "$is_public" -eq 0 ]
-then # Remove the public access
- ynh_app_setting_delete "$app" skipped_uris
-fi
# Make app public if necessary
if [ "$is_public" -eq 1 ]
then
# unprotected_uris allows SSO credentials to be passed anyway.
- ynh_app_setting_set "$app" unprotected_uris "/"
+ ynh_app_setting_set --app=$app --key=unprotected_uris --value="/"
fi
-yunohost app ssowatconf
-
#=================================================
# RELOAD NGINX
#=================================================
+ynh_script_progression --message="Reloading nginx web server..." --weight=1
-systemctl reload nginx
+ynh_systemd_action --service_name=nginx --action=reload
+
+#=================================================
+# END OF SCRIPT
+#=================================================
+
+ynh_script_progression --message="Installation of $app completed" --last
diff --git a/scripts/psql.sh b/scripts/psql.sh
deleted file mode 100644
index 0fa1cda..0000000
--- a/scripts/psql.sh
+++ /dev/null
@@ -1,160 +0,0 @@
-#!/bin/bash
-
-#=================================================
-#
-# POSTGRES HELPERS
-#
-# Point of contact : Jean-Baptiste Holcroft
-#=================================================
-
-# Create a master password and set up global settings
-# Please always call this script in install and restore scripts
-#
-# usage: ynh_psql_test_if_first_run
-
-ynh_psql_test_if_first_run() {
- if [ -f /etc/yunohost/psql ];
- then
- echo "PostgreSQL is already installed, no need to create master password"
- else
- pgsql=$(ynh_string_random)
- pg_hba=""
- echo "$pgsql" >> /etc/yunohost/psql
-
- if [ -e /etc/postgresql/9.4/ ]
- then
- pg_hba=/etc/postgresql/9.4/main/pg_hba.conf
- elif [ -e /etc/postgresql/9.6/ ]
- then
- pg_hba=/etc/postgresql/9.6/main/pg_hba.conf
- else
- ynh_die "postgresql shoud be 9.4 or 9.6"
- fi
-
- systemctl start postgresql
- sudo --login --user=postgres psql -c"ALTER user postgres WITH PASSWORD '$pgsql'" postgres
-
- # force all user to connect to local database using passwords
- # https://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html#EXAMPLE-PG-HBA.CONF
- # Note: we can't use peer since YunoHost create users with nologin
- # See: https://github.com/YunoHost/yunohost/blob/unstable/data/helpers.d/user
- sed -i '/local\s*all\s*all\s*peer/i \
- local all all password' "$pg_hba"
- systemctl enable postgresql
- systemctl reload postgresql
- fi
-}
-
-# Open a connection as a user
-#
-# example: ynh_psql_connect_as 'user' 'pass' <<< "UPDATE ...;"
-# example: ynh_psql_connect_as 'user' 'pass' < /path/to/file.sql
-#
-# usage: ynh_psql_connect_as user pwd [db]
-# | arg: user - the user name to connect as
-# | arg: pwd - the user password
-# | arg: db - the database to connect to
-ynh_psql_connect_as() {
- user="$1"
- pwd="$2"
- db="$3"
- sudo --login --user=postgres PGUSER="$user" PGPASSWORD="$pwd" psql "$db"
-}
-
-# # Execute a command as root user
-#
-# usage: ynh_psql_execute_as_root sql [db]
-# | arg: sql - the SQL command to execute
-# | arg: db - the database to connect to
-ynh_psql_execute_as_root () {
- sql="$1"
- sudo --login --user=postgres psql <<< "$sql"
-}
-
-# Execute a command from a file as root user
-#
-# usage: ynh_psql_execute_file_as_root file [db]
-# | arg: file - the file containing SQL commands
-# | arg: db - the database to connect to
-ynh_psql_execute_file_as_root() {
- file="$1"
- db="$2"
- sudo --login --user=postgres psql "$db" < "$file"
-}
-
-# Create a database, an user and its password. Then store the password in the app's config
-#
-# After executing this helper, the password of the created database will be available in $db_pwd
-# It will also be stored as "psqlpwd" into the app settings.
-#
-# usage: ynh_psql_setup_db user name [pwd]
-# | arg: user - Owner of the database
-# | arg: name - Name of the database
-# | arg: pwd - Password of the database. If not given, a password will be generated
-ynh_psql_setup_db () {
- db_user="$1"
- db_name="$2"
- new_db_pwd=$(ynh_string_random) # Generate a random password
- # If $3 is not given, use new_db_pwd instead for db_pwd.
- db_pwd="${3:-$new_db_pwd}"
- ynh_psql_create_db "$db_name" "$db_user" "$db_pwd" # Create the database
- ynh_app_setting_set "$app" psqlpwd "$db_pwd" # Store the password in the app's config
-}
-
-# Create a database and grant privilegies to a user
-#
-# usage: ynh_psql_create_db db [user [pwd]]
-# | arg: db - the database name to create
-# | arg: user - the user to grant privilegies
-# | arg: pwd - the user password
-ynh_psql_create_db() {
- db="$1"
- user="$2"
- pwd="$3"
- ynh_psql_create_user "$user" "$pwd"
- sudo --login --user=postgres createdb --owner="$user" "$db"
-}
-
-# Drop a database
-#
-# usage: ynh_psql_drop_db db
-# | arg: db - the database name to drop
-# | arg: user - the user to drop
-ynh_psql_remove_db() {
- db="$1"
- user="$2"
- sudo --login --user=postgres dropdb "$db"
- ynh_psql_drop_user "$user"
-}
-
-# Dump a database
-#
-# example: ynh_psql_dump_db 'roundcube' > ./dump.sql
-#
-# usage: ynh_psql_dump_db db
-# | arg: db - the database name to dump
-# | ret: the psqldump output
-ynh_psql_dump_db() {
- db="$1"
- sudo --login --user=postgres pg_dump "$db"
-}
-
-
-# Create a user
-#
-# usage: ynh_psql_create_user user pwd [host]
-# | arg: user - the user name to create
-ynh_psql_create_user() {
- user="$1"
- pwd="$2"
- sudo --login --user=postgres psql -c"CREATE USER $user WITH PASSWORD '$pwd'" postgres
-}
-
-# Drop a user
-#
-# usage: ynh_psql_drop_user user
-# | arg: user - the user name to drop
-ynh_psql_drop_user() {
- user="$1"
- sudo --login --user=postgres dropuser "$user"
-}
diff --git a/scripts/remove b/scripts/remove
index 5f4e91e..105f20e 100644
--- a/scripts/remove
+++ b/scripts/remove
@@ -7,72 +7,52 @@
#=================================================
source _common.sh
-source psql.sh
-source ynh_install_php
source /usr/share/yunohost/helpers
+source ynh_add_extra_apt_repos
+source ynh_install_php
#=================================================
# LOAD SETTINGS
#=================================================
-ynh_print_info "Loading installation settings..."
+ynh_script_progression --message="Loading installation settings..."
app=$YNH_APP_INSTANCE_NAME
-domain=$(ynh_app_setting_get "$app" domain)
-db_name=$(ynh_app_setting_get "$app" psql_db)
-db_user=$db_name
-final_path=$(ynh_app_setting_get "$app" 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)
+data_path=$(ynh_app_setting_get --app=$app --key=data_path)
#=================================================
# STANDARD REMOVE
-#=================================================
-# REMOVE SERVICE FROM ADMIN PANEL
-#=================================================
-
-# Remove a service from the admin panel, added by `yunohost service add`
-if yunohost service status "$app" >/dev/null 2>&1
-then
- ynh_print_info "Removing $app service"
- yunohost service remove "$app"
-fi
-
-#=================================================
-# STOP AND REMOVE SERVICE
-#=================================================
-ynh_print_info "Stopping and removing the systemd service"
-
-# Remove the dedicated systemd config
-ynh_remove_systemd_config
-
#=================================================
# REMOVE THE POSTGRESQL DATABASE
#=================================================
-ynh_print_info "Removing the PostgreSQL database"
+ynh_script_progression --message="Removing the PostgresSQL database..."
# Remove a database if it exists, along with the associated user
-ynh_psql_remove_db "$db_name" "$db_name"
+ynh_psql_remove_db --db_user=$db_name --db_name=$db_name
#=================================================
# REMOVE DEPENDENCIES
#=================================================
-ynh_print_info "Removing dependencies"
+ynh_script_progression --message="Removing dependencies..."
# Remove metapackage and its dependencies
ynh_remove_app_dependencies
-ynh_remove_php
#=================================================
# REMOVE APP MAIN DIR
#=================================================
-ynh_print_info "Removing app main directory"
+ynh_script_progression --message="Removing app main directory..."
# Remove the app directory securely
-ynh_secure_remove "$final_path"
+ynh_secure_remove --file="$final_path"
#=================================================
# REMOVE NGINX CONFIGURATION
#=================================================
-ynh_print_info "Removing nginx web server configuration"
+ynh_script_progression --message="Removing nginx web server configuration..."
# Remove the dedicated nginx config
ynh_remove_nginx_config
@@ -80,18 +60,11 @@ ynh_remove_nginx_config
#=================================================
# REMOVE PHP-FPM CONFIGURATION
#=================================================
-ynh_print_info "Removing php-fpm configuration"
+ynh_script_progression --message="Removing php-fpm configuration..." --weight=20
# Remove the dedicated php-fpm config
ynh_remove_fpm_config
-
-#=================================================
-# REMOVE LOGROTATE CONFIGURATION
-#=================================================
-ynh_print_info "Removing logrotate configuration"
-
-# Remove the app-specific logrotate config
-ynh_remove_logrotate
+ynh_remove_php "$YNH_PHP_VERSION"
#=================================================
# SPECIFIC REMOVE
@@ -100,27 +73,23 @@ ynh_remove_logrotate
#=================================================
# Remove a cron file
-ynh_secure_remove "/etc/cron.d/$app"
+ynh_secure_remove --file="/etc/cron.d/$app"
# Remove a directory securely
-ynh_secure_remove "/etc/$app/"
-ynh_secure_remove "/home/yunohost.app/$app"
-
-# Remove the log files
-ynh_secure_remove "/var/log/$app/"
+ynh_secure_remove --file="$data_path"
#=================================================
# GENERIC FINALIZATION
#=================================================
# REMOVE DEDICATED USER
#=================================================
-ynh_print_info "Removing the dedicated system user"
+ynh_script_progression --message="Removing the dedicated system user..."
# Delete a system user
-ynh_system_user_delete "$app"
+ynh_system_user_delete --username=$app
#=================================================
# END OF SCRIPT
#=================================================
-ynh_print_info "Removal of $app completed"
+ynh_script_progression --message="Removal of $app completed" --last
diff --git a/scripts/restore b/scripts/restore
index ff17c15..e40caf3 100644
--- a/scripts/restore
+++ b/scripts/restore
@@ -5,41 +5,43 @@
#=================================================
# IMPORT GENERIC HELPERS
#=================================================
-source _common.sh
-source psql.sh
+
+source ../settings/scripts/_common.sh
source /usr/share/yunohost/helpers
+source ../settings/scripts/ynh_add_extra_apt_repos
+source ../settings/scripts/ynh_install_php
#=================================================
# MANAGE SCRIPT FAILURE
#=================================================
-ynh_clean_setup () {
- #### Remove this function if there's nothing to clean before calling the remove script.
- true
-}
# Exit if an error occurs during the execution of the script
ynh_abort_if_errors
#=================================================
# LOAD SETTINGS
#=================================================
+ynh_script_progression --message="Loading settings..."
app=$YNH_APP_INSTANCE_NAME
-domain=$(ynh_app_setting_get $app domain)
-path_url=$(ynh_app_setting_get $app path)
-final_path=$(ynh_app_setting_get $app final_path)
-db_name=$(ynh_app_setting_get $app psql_db)
-db_pwd=$(ynh_app_setting_get $app psqlpwd)
+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)
+data_path=$(ynh_app_setting_get --app=$app --key=data_path)
+db_name=$(ynh_app_setting_get --app=$app --key=db_name)
#=================================================
# CHECK IF THE APP CAN BE RESTORED
#=================================================
+ynh_script_progression --message="Validating restoration parameters..."
-ynh_webpath_available $domain $path_url \
- || ynh_die "Path not available: ${domain}${path_url}"
+ynh_webpath_available --domain=$domain --path_url=$path_url \
+ || ynh_die --message="Path not available: ${domain}${path_url}"
test ! -d $final_path \
- || ynh_die "There is already a directory: $final_path "
+ || ynh_die --message="There is already a directory: $final_path "
+test ! -d $data_path \
+ || ynh_die --message="There is already a directory: $data_path "
#=================================================
# STANDARD RESTORATION STEPS
@@ -47,30 +49,24 @@ test ! -d $final_path \
# RESTORE THE NGINX CONFIGURATION
#=================================================
-ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf"
+ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf"
#=================================================
# RESTORE THE APP MAIN DIR
#=================================================
-var_root=/home/yunohost.app/$app
-ynh_restore_file "$final_path"
-ynh_restore_file "$var_root"
+ynh_script_progression --message="Restoring the app main directory..."
-#=================================================
-# RESTORE THE psql DATABASE
-#=================================================
-ynh_psql_test_if_first_run
-ynh_psql_create_user $app $db_pwd
-ynh_psql_execute_as_root \
-"CREATE DATABASE $db_name ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' template=template0 OWNER $app;"
-ynh_psql_execute_file_as_root ./db.sql "$db_name"
+ynh_restore_file --origin_path="$final_path"
+
+ynh_restore_file --origin_path="$data_path"
#=================================================
# RECREATE THE DEDICATED USER
#=================================================
+ynh_script_progression --message="Recreating the dedicated system user..."
# Create the dedicated user (if not existing)
-ynh_system_user_create $app
+ynh_system_user_create --username=$app
#=================================================
# RESTORE USER RIGHTS
@@ -78,38 +74,52 @@ ynh_system_user_create $app
# Restore permissions on app files
chown -R $app: $final_path
-chown -R root: $final_path/config.php
-mkdir -p $var_root
-chown -R $app: $var_root
-chmod -R 700 $var_root
+chown -R $app: $data_path
#=================================================
# RESTORE THE PHP-FPM CONFIGURATION
#=================================================
-ynh_restore_file "/etc/php5/fpm/pool.d/$app.conf"
-ynh_restore_file "/etc/php5/fpm/conf.d/20-$app.ini"
+ynh_restore_file --origin_path="/etc/php/$YNH_PHP_VERSION/fpm/pool.d/$app.conf"
#=================================================
# SPECIFIC RESTORATION
#=================================================
# REINSTALL DEPENDENCIES
#=================================================
+ynh_script_progression --message="Reinstalling dependencies..." --weight=60
# Define and install dependencies
-ynh_install_app_dependencies php-zip php-mysql php-xml php-intl php-mbstring php-gd php-curl php-soap php-pgsql php-xmlrpc postgresql
+ynh_install_app_dependencies $pkg_dependencies
+ynh_install_php --phpversion="$YNH_PHP_VERSION" --package="$extra_pkg_dependencies"
+
+#=================================================
+# RESTORE THE MYSQL DATABASE
+#=================================================
+ynh_script_progression --message="Restoring the PostgreSQL database..."--weight=47
+
+db_pwd=$(ynh_app_setting_get --app=$app --key=psqlpwd)
+ynh_psql_setup_db --db_user=$db_name --db_name=$db_name --db_pwd=$db_pwd
+ynh_psql_connect_as --user=$db_name --password=$db_pwd --database=$db_name < ./db.sql
#=================================================
# RESTORE THE CRON FILE
#=================================================
-ynh_restore_file "/etc/cron.d/$app"
+ynh_restore_file --origin_path="/etc/cron.d/$app"
#=================================================
# GENERIC FINALIZATION
#=================================================
# RELOAD NGINX AND PHP-FPM
#=================================================
+ynh_script_progression --message="Reloading nginx web server and php-fpm..."
-systemctl reload php5-fpm
-systemctl reload nginx
+ynh_systemd_action --service_name=php$YNH_PHP_VERSION-fpm --action=reload
+ynh_systemd_action --service_name=nginx --action=reload
+
+#=================================================
+# END OF SCRIPT
+#=================================================
+
+ynh_script_progression --message="Restoration completed for $app" --last
diff --git a/scripts/upgrade b/scripts/upgrade
index ae1b135..8ef0ae2 100644
--- a/scripts/upgrade
+++ b/scripts/upgrade
@@ -6,53 +6,46 @@
# IMPORT GENERIC HELPERS
#=================================================
+source _common.sh
source /usr/share/yunohost/helpers
+source ynh_add_extra_apt_repos
+source ynh_install_php
#=================================================
# LOAD SETTINGS
#=================================================
-ynh_print_info "Loading installation settings..."
+ynh_script_progression --message="Loading installation settings..."
app=$YNH_APP_INSTANCE_NAME
-domain=$(ynh_app_setting_get $app domain)
-path_url=$(ynh_app_setting_get $app path)
-admin=$(ynh_app_setting_get $app admin)
-is_public=$(ynh_app_setting_get $app is_public)
-final_path=$(ynh_app_setting_get $app final_path)
-#language=$(ynh_app_setting_get $app language)
-db_name=$(ynh_app_setting_get $app db_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)
+is_public=$(ynh_app_setting_get --app=$app --key=is_public)
+final_path=$(ynh_app_setting_get --app=$app --key=final_path)
+data_path=$(ynh_app_setting_get --app=$app --key=data_path)
+db_name=$(ynh_app_setting_get --app=$app --key=db_name)
+
+#=================================================
+# CHECK VERSION
+#=================================================
+
+upgrade_type=$(ynh_check_app_version_changed)
#=================================================
# ENSURE DOWNWARD COMPATIBILITY
#=================================================
-ynh_print_info "Ensuring downward compatibility..."
+ynh_script_progression --message="Ensuring downward compatibility..."
-# Fix is_public as a boolean value
-if [ "$is_public" = "Yes" ]; then
- ynh_app_setting_set $app is_public 1
- is_public=1
-elif [ "$is_public" = "No" ]; then
- ynh_app_setting_set $app is_public 0
- is_public=0
-fi
-
-# If db_name doesn't exist, create it
-if [ -z $db_name ]; then
- db_name=$(ynh_sanitize_dbid $app)
- ynh_app_setting_set $app db_name $db_name
-fi
-
-# If final_path doesn't exist, create it
-if [ -z $final_path ]; then
- final_path=/var/www/$app
- ynh_app_setting_set $app final_path $final_path
+# If the admin is not defined, We can't upgrade this app
+if [ -z $admin ]; then
+ ynh_die --message="This app can't be upgraded from a very old version of the package. Please remove and reinstall Moodle_ynh"
fi
#=================================================
# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP
#=================================================
-ynh_print_info "Backing up the app before upgrading (may take a while)..."
+ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." --weight=30
# Backup the current version of the app
ynh_backup_before_upgrade
@@ -63,83 +56,64 @@ ynh_clean_setup () {
# Exit if an error occurs during the execution of the script
ynh_abort_if_errors
-cp -a $final_path $final_path.backup
-
-#=================================================
-# CHECK THE PATH
-#=================================================
-
-# Normalize the URL path syntax
-path_url=$(ynh_normalize_url_path $path_url)
-
#=================================================
# STANDARD UPGRADE STEPS
#=================================================
# DOWNLOAD, CHECK AND UNPACK SOURCE
#=================================================
-ynh_print_info "Upgrading source files..."
-# Download, check integrity, uncompress and patch the source from app.src
-ynh_setup_source "$final_path"
+if [ "$upgrade_type" == "UPGRADE_APP" ]
+then
+ ynh_script_progression --message="Upgrading source files..." --weight=6
+
+ # Download, check integrity, uncompress and patch the source from app.src
+ ynh_setup_source --dest_dir="$final_path"
+fi
#=================================================
# NGINX CONFIGURATION
#=================================================
-ynh_print_info "Upgrading nginx web server configuration..."
+ynh_script_progression --message="Upgrading nginx web server configuration..."
# Create a dedicated nginx config
-ynh_add_nginx_config
+ynh_add_nginx_config YNH_PHP_VERSION
#=================================================
# UPGRADE DEPENDENCIES
#=================================================
-#ynh_print_info "Upgrading dependencies..."
+ynh_script_progression --message="Upgrading dependencies..." --weight=30
-#ynh_install_app_dependencies $pkg_dependencies
+ynh_install_app_dependencies $pkg_dependencies
+ynh_install_php --phpversion="$YNH_PHP_VERSION" --package="$extra_pkg_dependencies"
#=================================================
# CREATE DEDICATED USER
#=================================================
-ynh_print_info "Making sure dedicated system user exists..."
+ynh_script_progression --message="Making sure dedicated system user exists..."
# Create a dedicated user (if not existing)
-ynh_system_user_create $app
+ynh_system_user_create --username=$app
#=================================================
# PHP-FPM CONFIGURATION
#=================================================
-ynh_print_info "Upgrading php-fpm configuration..."
+ynh_script_progression --message="Upgrading php-fpm configuration..."
# Create a dedicated php-fpm config
-ynh_add_fpm_config
+ynh_add_fpm_config --phpversion="$YNH_PHP_VERSION"
#=================================================
# SPECIFIC UPGRADE
#=================================================
-# ...
+# STORE THE CONFIG FILE CHECKSUM
#=================================================
-### Verify the checksum of a file, stored by `ynh_store_file_checksum` in the install script.
-### And create a backup of this file if the checksum is different. So the file will be backed up if the admin had modified it.
-ynh_backup_if_checksum_is_different "$final_path/config.php"
+ynh_backup_if_checksum_is_different --file="$final_path/config.php"
+
+exec_as "$app" php$YNH_PHP_VERSION "$final_path/admin/cli/upgrade.php" --non-interactive
+
# Recalculate and store the checksum of the file for the next upgrade.
-ynh_store_file_checksum "$final_path/config.php"
-
-#=================================================
-# SETUP LOGROTATE
-#=================================================
-ynh_print_info "Upgrading logrotate configuration..."
-
-# Use logrotate to manage app-specific logfile(s)
-ynh_use_logrotate --non-append
-
-#=================================================
-# SETUP SYSTEMD
-#=================================================
-#ynh_print_info "Upgrading systemd configuration..."
-
-# Create a dedicated systemd config
-#ynh_add_systemd_config
+ynh_store_file_checksum --file="$final_path/config.php"
#=================================================
# GENERIC FINALIZATION
@@ -148,29 +122,55 @@ ynh_use_logrotate --non-append
#=================================================
# Set permissions on app files
-chown root: $final_path/config.php
+chown -R "$app": "$data_path"
+chown -R "$app": "$final_path"
+
+#=================================================
+# ADD CRON JOB
+#=================================================
+
+# Set up poller
+sudo cp "../conf/cron" "/etc/cron.d/$app"
+ynh_replace_string "__FINAL_PATH__" "$final_path" "/etc/cron.d/$app"
+ynh_replace_string "__YNH_PHP_VERSION__" "$YNH_PHP_VERSION" "/etc/cron.d/$app"
+
+#=================================================
+# ACTIVATE LDAP SUPPORT
+#=================================================
+
+ynh_psql_execute_as_root --database=$db_name --sql="UPDATE public.mdl_config SET value='ldap,email' WHERE name='auth';"
+ynh_psql_execute_as_root --database=$db_name --sql="UPDATE public.mdl_config_plugins SET value='ldap://127.0.0.1/' WHERE plugin='auth_ldap' AND name='host_url';"
+ynh_psql_execute_as_root --database=$db_name --sql="UPDATE public.mdl_config_plugins SET value='uid' WHERE plugin='auth_ldap' AND name='user_attribute';"
+ynh_psql_execute_as_root --database=$db_name --sql="UPDATE public.mdl_config_plugins SET value='ou=users,dc=yunohost,dc=org' WHERE plugin='auth_ldap' AND name='contexts';"
+ynh_psql_execute_as_root --database=$db_name --sql="UPDATE public.mdl_config_plugins SET value='givenName' WHERE plugin='auth_ldap' AND name='field_map_firstname';"
+ynh_psql_execute_as_root --database=$db_name --sql="UPDATE public.mdl_config_plugins SET value='sn' WHERE plugin='auth_ldap' AND name='field_map_lastname';"
+ynh_psql_execute_as_root --database=$db_name --sql="UPDATE public.mdl_config_plugins SET value='mail' WHERE plugin='auth_ldap' AND name='field_map_email';"
+ynh_psql_execute_as_root --database=$db_name --sql="UPDATE public.mdl_config_plugins SET value='onlogin' WHERE plugin='auth_ldap' AND (name='field_updatelocal_firstname' OR name='field_updatelocal_lastname' OR name='field_updatelocal_email');"
+ynh_psql_execute_as_root --database=$db_name --sql="UPDATE public.mdl_config_plugins SET value='locked' WHERE plugin='auth_ldap' AND (name='field_lock_firstname' OR name='field_lock_lastname' OR name='field_lock_email');"
+
+exec_as "$app" php$YNH_PHP_VERSION "$final_path/admin/cli/purge_caches.php"
#=================================================
# SETUP SSOWAT
#=================================================
-ynh_print_info "Upgrading SSOwat configuration..."
+ynh_script_progression --message="Upgrading SSOwat configuration..."
# Make app public if necessary
if [ $is_public -eq 1 ]
then
# unprotected_uris allows SSO credentials to be passed anyway
- ynh_app_setting_set $app unprotected_uris "/"
+ ynh_app_setting_set --app=$app --key=unprotected_uris --value="/"
fi
#=================================================
# RELOAD NGINX
#=================================================
-ynh_print_info "Reloading nginx web server..."
+ynh_script_progression --message="Reloading nginx web server..."
-systemctl reload nginx
+ynh_systemd_action --service_name=nginx --action=reload
#=================================================
# END OF SCRIPT
#=================================================
-ynh_print_info "Upgrade of $app completed"
+ynh_script_progression --message="Upgrade of $app completed" --last
diff --git a/scripts/ynh_add_extra_apt_repos b/scripts/ynh_add_extra_apt_repos
index 3276f00..df092aa 100644
--- a/scripts/ynh_add_extra_apt_repos
+++ b/scripts/ynh_add_extra_apt_repos
@@ -1,88 +1,74 @@
-#!/bin/bash
-
-# Pin a repository.
+# Add dependencies to install with ynh_install_app_dependencies
#
-# usage: ynh_pin_repo --package=packages --pin=pin_filter [--priority=priority_value] [--name=name] [--append]
-# | arg: -p, --package - Packages concerned by the pin. Or all, *.
-# | arg: -i, --pin - Filter for the pin.
-# | arg: -p, --priority - Priority for the pin
-# | arg: -n, --name - Name for the files for this repo, $app as default value.
-# | arg: -a, --append - Do not overwrite existing files.
+# [internal]
#
-# See https://manpages.debian.org/stretch/apt/apt_preferences.5.en.html for information about pinning.
-#
-ynh_pin_repo () {
+# usage: ynh_add_app_dependencies --package=phpversion [--replace]
+# | arg: -p, --package - Packages to add as dependencies for the app.
+# | arg: -r, --replace - Replace dependencies instead of adding to existing ones.
+ynh_add_app_dependencies () {
# Declare an array to define the options of this helper.
- local legacy_args=pirna
- declare -Ar args_array=( [p]=package= [i]=pin= [r]=priority= [n]=name= [a]=append )
+ local legacy_args=pr
+ declare -Ar args_array=( [p]=package= [r]=replace)
local package
- local pin
- local priority
- local name
- local append
+ local replace
# Manage arguments with getopts
ynh_handle_getopts_args "$@"
- package="${package:-*}"
- priority=${priority:-50}
- name="${name:-$app}"
- append=${append:-0}
+ replace=${replace:-0}
- if [ $append -eq 1 ]
+ local current_dependencies=""
+ if [ $replace -eq 0 ]
then
- append="tee -a"
- else
- append="tee"
+ local dep_app=${app//_/-} # Replace all '_' by '-'
+ if ynh_package_is_installed --package="${dep_app}-ynh-deps"
+ then
+ current_dependencies="$(dpkg-query --show --showformat='${Depends}' ${dep_app}-ynh-deps) "
+ fi
+
+ current_dependencies=${current_dependencies// | /|}
fi
- mkdir -p "/etc/apt/preferences.d"
- echo "Package: $package
-Pin: $pin
-Pin-Priority: $priority" \
- | $append "/etc/apt/preferences.d/$name"
+ ynh_install_app_dependencies "${current_dependencies}${package}"
}
-# Add a repository.
+# Install packages from an extra repository properly.
#
-# usage: ynh_add_repo --uri=uri --suite=suite --component=component [--name=name] [--append]
-# | arg: -u, --uri - Uri of the repository.
-# | arg: -s, --suite - Suite of the repository.
-# | arg: -c, --component - Component of the repository.
+# usage: ynh_install_extra_app_dependencies --repo="repo" --package="dep1 dep2" [--key=key_url] [--name=name]
+# | arg: -r, --repo - Complete url of the extra repository.
+# | arg: -p, --package - The packages to install from this extra repository
+# | arg: -k, --key - url to get the public key.
# | arg: -n, --name - Name for the files for this repo, $app as default value.
-# | arg: -a, --append - Do not overwrite existing files.
-#
-# Example for a repo like deb http://forge.yunohost.org/debian/ stretch stable
-# uri suite component
-# ynh_add_repo --uri=http://forge.yunohost.org/debian/ --suite=stretch --component=stable
-#
-ynh_add_repo () {
+ynh_install_extra_app_dependencies () {
# Declare an array to define the options of this helper.
- local legacy_args=uscna
- declare -Ar args_array=( [u]=uri= [s]=suite= [c]=component= [n]=name= [a]=append )
- local uri
- local suite
- local component
+ local legacy_args=rpkn
+ declare -Ar args_array=( [r]=repo= [p]=package= [k]=key= [n]=name= )
+ local repo
+ local package
+ local key
local name
- local append
# Manage arguments with getopts
ynh_handle_getopts_args "$@"
name="${name:-$app}"
- append=${append:-0}
+ key=${key:-0}
- if [ $append -eq 1 ]
+ # Set a key only if asked
+ if [ -n "$key" ]
then
- append="tee -a"
- else
- append="tee"
+ key="--key=$key"
fi
+ # Add an extra repository for those packages
+ ynh_install_extra_repo --repo="$repo" $key --priority=995 --name=$name
- mkdir -p "/etc/apt/sources.list.d"
- # Add the new repo in sources.list.d
- echo "deb $uri $suite $component" \
- | $append "/etc/apt/sources.list.d/$name.list"
+ # Install requested dependencies from this extra repository.
+ ynh_add_app_dependencies --package="$package"
+
+ # Remove this extra repository after packages are installed
+ ynh_remove_extra_repo --name=$app
}
# Add an extra repository correctly, pin it and get the key.
#
+# [internal]
+#
# usage: ynh_install_extra_repo --repo="repo" [--key=key_url] [--priority=priority_value] [--name=name] [--append]
# | arg: -r, --repo - Complete url of the extra repository.
# | arg: -k, --key - url to get the public key.
@@ -154,6 +140,8 @@ ynh_install_extra_repo () {
# Remove an extra repository and the assiociated configuration.
#
+# [internal]
+#
# usage: ynh_remove_extra_repo [--name=name]
# | arg: -n, --name - Name for the files for this repo, $app as default value.
ynh_remove_extra_repo () {
@@ -174,121 +162,88 @@ ynh_remove_extra_repo () {
ynh_package_update
}
-# Install packages from an extra repository properly.
+# Add a repository.
#
-# usage: ynh_install_extra_app_dependencies --repo="repo" --package="dep1 dep2" [--key=key_url] [--name=name]
-# | arg: -r, --repo - Complete url of the extra repository.
-# | arg: -p, --package - The packages to install from this extra repository
-# | arg: -k, --key - url to get the public key.
+# [internal]
+#
+# usage: ynh_add_repo --uri=uri --suite=suite --component=component [--name=name] [--append]
+# | arg: -u, --uri - Uri of the repository.
+# | arg: -s, --suite - Suite of the repository.
+# | arg: -c, --component - Component of the repository.
# | arg: -n, --name - Name for the files for this repo, $app as default value.
-ynh_install_extra_app_dependencies () {
+# | arg: -a, --append - Do not overwrite existing files.
+#
+# Example for a repo like deb http://forge.yunohost.org/debian/ stretch stable
+# uri suite component
+# ynh_add_repo --uri=http://forge.yunohost.org/debian/ --suite=stretch --component=stable
+#
+ynh_add_repo () {
# Declare an array to define the options of this helper.
- local legacy_args=rpkn
- declare -Ar args_array=( [r]=repo= [p]=package= [k]=key= [n]=name= )
- local repo
- local package
- local key
+ local legacy_args=uscna
+ declare -Ar args_array=( [u]=uri= [s]=suite= [c]=component= [n]=name= [a]=append )
+ local uri
+ local suite
+ local component
local name
+ local append
# Manage arguments with getopts
ynh_handle_getopts_args "$@"
name="${name:-$app}"
- key=${key:-0}
+ append=${append:-0}
- # Set a key only if asked
- if [ -n "$key" ]
+ if [ $append -eq 1 ]
then
- key="--key=$key"
+ append="tee -a"
+ else
+ append="tee"
fi
- # Add an extra repository for those packages
- ynh_install_extra_repo --repo="$repo" $key --priority=995 --name=$name
- # Install requested dependencies from this extra repository.
- ynh_add_app_dependencies --package="$package"
-
- # Remove this extra repository after packages are installed
- ynh_remove_extra_repo --name=$app
+ mkdir -p "/etc/apt/sources.list.d"
+ # Add the new repo in sources.list.d
+ echo "deb $uri $suite $component" \
+ | $append "/etc/apt/sources.list.d/$name.list"
}
-#=================================================
-
-# patched version of ynh_install_app_dependencies to be used with ynh_add_app_dependencies
-
-# Define and install dependencies with a equivs control file
-# This helper can/should only be called once per app
+# Pin a repository.
#
-# usage: ynh_install_app_dependencies dep [dep [...]]
-# | arg: dep - the package name to install in dependence
-# You can give a choice between some package with this syntax : "dep1|dep2"
-# Example : ynh_install_app_dependencies dep1 dep2 "dep3|dep4|dep5"
-# This mean in the dependence tree : dep1 & dep2 & (dep3 | dep4 | dep5)
+# [internal]
#
-# Requires YunoHost version 2.6.4 or higher.
-ynh_install_app_dependencies () {
- local dependencies=$@
- dependencies="$(echo "$dependencies" | sed 's/\([^\<=\>]\)\ \([^(]\)/\1, \2/g')"
- dependencies=${dependencies//|/ | }
- local 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
-
- local version=$(grep '\"version\": ' "$manifest_path" | cut -d '"' -f 4) # Retrieve the version number in the manifest file.
- if [ ${#version} -eq 0 ]; then
- version="1.0"
- fi
- local dep_app=${app//_/-} # Replace all '_' by '-'
-
- # Handle specific versions
- if [[ "$dependencies" =~ [\<=\>] ]]
- then
- # Replace version specifications by relationships syntax
- # https://www.debian.org/doc/debian-policy/ch-relationships.html
- # Sed clarification
- # [^(\<=\>] ignore if it begins by ( or < = >. To not apply twice.
- # [\<=\>] matches < = or >
- # \+ matches one or more occurence of the previous characters, for >= or >>.
- # [^,]\+ matches all characters except ','
- # Ex: package>=1.0 will be replaced by package (>= 1.0)
- dependencies="$(echo "$dependencies" | sed 's/\([^(\<=\>]\)\([\<=\>]\+\)\([^,]\+\)/\1 (\2 \3)/g')"
- fi
-
- 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 --message="Unable to install dependencies" # Install the fake package and its dependencies
- rm /tmp/${dep_app}-ynh-deps.control
- ynh_app_setting_set --app=$app --key=apt_dependencies --value="$dependencies"
-}
-
-ynh_add_app_dependencies () {
+# usage: ynh_pin_repo --package=packages --pin=pin_filter [--priority=priority_value] [--name=name] [--append]
+# | arg: -p, --package - Packages concerned by the pin. Or all, *.
+# | arg: -i, --pin - Filter for the pin.
+# | arg: -p, --priority - Priority for the pin
+# | arg: -n, --name - Name for the files for this repo, $app as default value.
+# | arg: -a, --append - Do not overwrite existing files.
+#
+# See https://manpages.debian.org/stretch/apt/apt_preferences.5.en.html for information about pinning.
+#
+ynh_pin_repo () {
# Declare an array to define the options of this helper.
- local legacy_args=pr
- declare -Ar args_array=( [p]=package= [r]=replace)
+ local legacy_args=pirna
+ declare -Ar args_array=( [p]=package= [i]=pin= [r]=priority= [n]=name= [a]=append )
local package
- local replace
+ local pin
+ local priority
+ local name
+ local append
# Manage arguments with getopts
ynh_handle_getopts_args "$@"
- replace=${replace:-0}
+ package="${package:-*}"
+ priority=${priority:-50}
+ name="${name:-$app}"
+ append=${append:-0}
- local current_dependencies=""
- if [ $replace -eq 0 ]
+ if [ $append -eq 1 ]
then
- local dep_app=${app//_/-} # Replace all '_' by '-'
- if ynh_package_is_installed --package="${dep_app}-ynh-deps"
- then
- current_dependencies="$(dpkg-query --show --showformat='${Depends}' ${dep_app}-ynh-deps) "
- fi
-
- current_dependencies=${current_dependencies// | /|}
+ append="tee -a"
+ else
+ append="tee"
fi
- ynh_install_app_dependencies "${current_dependencies}${package}"
-}
+ mkdir -p "/etc/apt/preferences.d"
+ echo "Package: $package
+Pin: $pin
+Pin-Priority: $priority
+" \
+ | $append "/etc/apt/preferences.d/$name"
+}
\ No newline at end of file
diff --git a/scripts/ynh_install_php b/scripts/ynh_install_php
index 1066727..7ac4420 100644
--- a/scripts/ynh_install_php
+++ b/scripts/ynh_install_php
@@ -33,12 +33,13 @@ ynh_install_php () {
# Install php-fpm first, otherwise php will install apache as a dependency.
ynh_add_app_dependencies --package="php${phpversion}-fpm"
ynh_add_app_dependencies --package="php$phpversion php${phpversion}-common $package"
-
+
# Set php7.0 back as the default version for php-cli.
update-alternatives --set php /usr/bin/php7.0
- # Remove this extra repository after packages are installed
- ynh_remove_extra_repo --name=extra_php_version
+ # Pin this extra repository after packages are installed to prevent sury of doing shit
+ ynh_pin_repo --package="*" --pin="origin \"packages.sury.org\"" --priority=200 --name=extra_php_version
+ ynh_pin_repo --package="php7.0*" --pin="origin \"packages.sury.org\"" --priority=600 --name=extra_php_version --append
# Advertise service in admin panel
yunohost service add php${phpversion}-fpm --log "/var/log/php${phpversion}-fpm.log"
@@ -74,4 +75,4 @@ ynh_remove_php () {
then
ynh_secure_remove /etc/php/ynh_app_version
fi
-}
+}
\ No newline at end of file