Changement d'année et de serveur et problèmes (CentOS => Rocky Linux, et SElinux)

Changement d'année et de serveur et problèmes (CentOS => Rocky Linux, et SElinux)

par Séverin Terrier,
Nombre de réponses : 9
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour,

Ce message va être assez technique, très orienté informatique, plutôt que Moodle en soit. Mais il me semble malgré tout qu'il a sa place ici, et pourrait servir à d'autres (et à moi l'année prochaine).

Pour préparer la nouvelle année universitaire, j'ai obtenu un nouveau serveur, qui hébergera la plateforme Moodle de cette année (par duplication et nettoyage de celle de l'année dernière).

Sur les anciens serveurs, nous utilisions CentOS 7.9, et sur le nouveau, c'est Rocky Linux 8.6. Donc précédemment basée sur Red Hat Entreprise Linux 7 et maintenant sur Red Hat Entreprise Linux 8.

Par ailleurs, jusqu'à présent, je plaçais SElinux en mode "permissive" (au lieu de "enforcing"). J'ai voulu rester plus sécurisé cette année, en conservant "enforcing", mais cela m'a généré des soucis qu'il a fallu régler avec quelques commandes complémentaires adaptées.

Globalement, j'ai essayé de reprendre mes fichiers de réglages liés à Apache, PHP, MariaDB sur le nouveau serveur, mais j'ai rencontré des soucis. Je ne suis pas un administrateur système (chevronné), et sans doute que des spécialistes sauraient facilement régler des choses qui m'ont posé pas mal de soucis...

Je vais découper les différents points dans des réponses à ce message de base. Si quelqu'un qui s'y connait veut apporter des compléments, remarques... ne surtout pas hésiter !

Séverin

Moyenne des évaluations Utile (1)
En réponse à Séverin Terrier

Re: Changement d'année et de serveur et problèmes (CentOS => Rocky Linux, et SElinux)

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Cette partie concerne SElinux.

Pour connaitre le statut de SElinux :

sestatus

Sur l'ancien serveur, j'avais paramétré SElinux en "permissive" (au lieu de "enforcing") :

sudo vi /etc/sysconfig/selinux
Ce changement n'est pris en compte qu'après un reboot du serveur ! En attendant, on peut le faire temporairement avec :

sudo setenforce permissive

Et vérifier avec :

sestatus

Cette année, pour plus de sécurité, j'ai voulu conserver SElinux en "Enforcing".

J'avais l'erreur "Forbidden
You don't have permission to access this resource.Server unable to read htaccess file, denying access to be safe", réglée en modifiant les droits :

sudo chmod -R 775 /var/www/html

J'avais ensuite un message d'erreur "Fatal error: $CFG->dataroot is not writable, admin has to fix directory permissions! Exiting." ou "cache/Unable to load the cache configuration file". Solution trouvée dans cette discussion.

J'ai du lancer :

sudo chcon -R -h -t httpd_sys_content_t /var/www/html

et

sudo chcon -R -t httpd_sys_rw_content_t /chemin/vers/moodledata

Ces opérations effectuées, cela fonctionne correctement.

Séverin

En réponse à Séverin Terrier

Re: Changement d'année et de serveur et problèmes (CentOS => Rocky Linux, et MariaDB)

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Cette partie concerne MariaDB.

Sur l'ancien serveur, c'était MariaDB 10.2, et sur le nouveau MariaDB 10.3.

Lorsque j'ai importé le fichier exporté (dump) représentant la sauvegarde de ma base de données, j'ai vu passer des messages d'erreur, tels que :

ERROR 1366 (22007) at line 22378 in file: '/tmp/export_moodle.2022-06-20.sql': Incorrect string value: 
'\xF0\x9F\x93\xA3 A...' for column `moodle`.`mdl_logstore_standard_log`.`other` at row 4355
ERROR 1366 (22007) at line 34385 in file: '/tmp/export_moodle.2022-06-20.sql': Incorrect string value: 
'\xF0\x9F\x93\xA2\xE2\x9A...' for column `moodle`.`mdl_notifications`.`subject` at row 180
ERROR 1366 (22007) at line 36202 in file: '/tmp/export_moodle.2022-06-20.sql': Incorrect string value: 
'\xF0\x9F\x93\x84T\xC3...' for column `moodle`.`mdl_page`.`content` at row 71

Quelques recherches m'ont permis de comprendre que c'était un problème de réglage de MariaDB, qui n'était pas prévu pour le support UTF8 complet, avec encodage utf8mb4. Vérifié en lançant :

SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
Je suis donc reparti de la documentation adaptée, et j'ai copié le fichier de configuration de MariaDB de mon ancien serveur vers le nouveau.

Malheureusement, en relançant MariaDB (avec sudo systemctl start mariadb.service), cela bloquait, et j'obtenais cette erreur :

Job for mariadb.service failed because the control process exited with error code.
See "systemctl status mariadb.service" and "journalctl -xe" for details.

Et en lançant sudo systemctl status mariadb.service :

mariadb.service - MariaDB 10.3 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Tue 2022-06-21 19:49:19 CEST; 20s ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
  Process: 112153 ExecStartPost=/usr/libexec/mysql-check-upgrade (code=exited, status=0/SUCCESS)
  Process: 112357 ExecStart=/usr/libexec/mysqld --basedir=/usr $MYSQLD_OPTS $_WSREP_NEW_CLUSTER (code=exited, status=7)
  Process: 112318 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mariadb.service (code=exited, status=0/SUCCESS)
  Process: 112293 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS)
 Main PID: 112357 (code=exited, status=7)
   Status: "MariaDB server is down"
Jun 21 19:49:19 moodle-22 systemd[1]: Starting MariaDB 10.3 database server...
Jun 21 19:49:19 moodle-22 mysql-prepare-db-dir[112318]: Database MariaDB is probably initialized in /var/lib/mysql already, nothing is done.
Jun 21 19:49:19 moodle-22 mysql-prepare-db-dir[112318]: If this is not the case, make sure the /var/lib/mysql is empty before running mysql-prepare-db-dir.
Jun 21 19:49:19 moodle-22 mysqld[112357]: 2022-06-21 19:49:19 0 [Note] /usr/libexec/mysqld (mysqld 10.3.32-MariaDB-log) starting as process 112357 ...
Jun 21 19:49:19 moodle-22 systemd[1]: mariadb.service: Main process exited, code=exited, status=7/NOTRUNNING
Jun 21 19:49:19 moodle-22 systemd[1]: mariadb.service: Failed with result 'exit-code'.
Jun 21 19:49:19 moodle-22 systemd[1]: Failed to start MariaDB 10.3 database server.

Après plusieurs recherches infructueuses, j'ai essayé d'enlever mon fichier de configuration personnalisé (/etc/my.cnf.d/moodle.my.cnf), et cela a redémarré correctement. Je l'ai remis et constaté à nouveau le problème...

Après de nombreux tatonnements, je me suis aperçu que c'est le fait d'avoir certaines lignes de paramètres dans le fichier de configuration qui mettait la pagaille et empechait le démarrage !

En résumé, pour corriger cela, j'ai du désactiver (commenter) les lignes liées à : innodb_file_io_threads, innodb_file_format et innodb_large_prefix.

MariaDB ayant redémarré correctement, j'ai pu vérifier l'encodage et l'interclassement avec la commande suivante :

SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

Ce qui m'a donné :

+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client     | utf8mb4            |
| character_set_connection | utf8mb4            |
| character_set_database   | utf8mb4            |
| character_set_filesystem | binary             |
| character_set_results    | utf8mb4            |
| character_set_server     | utf8mb4            |
| character_set_system     | utf8               |
| collation_connection     | utf8mb4_unicode_ci |
| collation_database       | utf8mb4_unicode_ci |
| collation_server         | utf8mb4_unicode_ci |
+--------------------------+--------------------+

OK, on peut donc refaire l'importation de la base de données !

Séverin

En réponse à Séverin Terrier

Re: Changement d'année et de serveur et problèmes (CentOS => Rocky Linux, et SElinux)

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Cette partie concerne PHP.

J'ai essayé de copier le fichier de configuration de mon ancien serveur vers le nouveau : /etc/php.d/50-moodle.php.ini

Dans ce fichier j'ai plusieurs lignes, notamment pour définir max_inputs_vars.

Hors, en redémarrant Apache (avec sudo service httpd restart), et en consultant l'environnement de Moodle, je vois toujours un avertissement à ce propos.

Je me demande du coup pourquoi mon fichier de configuration personnalisé n'est pas pris en compte. Si quelqu'un a une idée ?

Séverin

En réponse à Séverin Terrier

Re: Changement d'année et de serveur et problèmes (CentOS => Rocky Linux, et SElinux)

par Bruno Malaval,
Avatar Moodleurs particulièrement utiles

Salut Séverin,

Pour voir la configuration php en ligne de commande, tu as la commande

php -i

Déjà à ce niveau, tu peux voir quelle est la valeur de max_input_vars et les fichiers de configuration utilisé par php.

Après, cela peut-être différent au niveau apache.
Il peut y avoir des directives "php_value" / "php_admin_value" dans les fichiers de conf apache
qui modifient la valeur de certains paramètres php.

Ou dans un autre fichier ini de php, mais vu que tu as mis "50-....", il devrait être lu en dernier

Ou dans un fichier ".htaccess"

C'est juste quelques pistes ..

Bruno

En réponse à Bruno Malaval

Re: Changement d'année et de serveur et problèmes (CentOS => Rocky Linux, et SElinux) - PHP

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs
Salut Bruno,

Merci pour ces quelques informations.

Alors, la commande :
  • php -i | grep max_input_vars : renvoie bien 5000
  • php -i | grep '/etc/php.d/50' : renvoie bien mon fichier
Mais quand je regarde dans Moodle, sur l'environnement, il m'indique toujours un problème concernant max_input_vars.
Et lorsque je regarde depuis Moodle les informations PHP, je constate que mon fichier personnalisé n'est pas lu, et que max_input_vars vaut 1000 ! Pourtant, il semble avoir les mêmes propriétaires et droits que les autres. J'ai également essayé de le renommer pour avoir un format simple comme les autres, mais cela ne change pas (et oui, je relance bien Apache).

J'espère qu'il n'y a pas, comme pour MariaDB, une ligne qui le fait planter...

Séverin
En réponse à Séverin Terrier

Re: Changement d'année et de serveur et problèmes (CentOS => Rocky Linux, et SElinux) - PHP

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour,

Ok, alors pour que la version PHP intégrée à Apache prenne en compte les changements, il fallait lancer la commande :

sudo service php-fpm restart

Et là, ma valeur de max_input_vars est bien prise en compte.

C'est tout bête, mais encore faut-il le savoir et le faire...

Séverin

En réponse à Séverin Terrier

Re: Changement d'année et de serveur et changement d'URL

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour,

Dupliquant notre instance vers un nouveau serveur, utilisant une adresse différente, il est nécessaire de procéder au changement d'URL.

Je détail tous les éléments dans cette discussion dédiée sourire

Séverin

En réponse à Séverin Terrier

Re: Changement d'année et de serveur - vérifications

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Cette partie concerne des vérifications et nettoyages, qui peuvent être lancés régulièrement sur toute instance Moodle :

  • Vérification de l'encodage et l'interclassement de la base de données (ça ne devrait pas changer une fois configuré correctement, et on devrait être en utf8mb4) :

    SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
  • recherche des séquences de cours à problème (normalement vide) :
    php admin/cli/fix_course_sequence.php --courses=* | grep -v 'is OK'
  • recherche des éléments de module sans instance (normalement vide) :
    SELECT id, course, section, module, instance, visible, FROM_UNIXTIME(added) FROM mdl_course_modules WHERE instance=0;

On peut également vouloir trouver les cours ayant été supprimé de Moodle, mais ayant encore des logs :
SELECT GROUP_CONCAT(DISTINCT(courseid)) FROM mdl_logstore_standard_log WHERE courseid > 1 AND courseid NOT IN (SELECT DISTINCT id FROM mdl_course) \G
Et on peut supprimer (rapidement) ces logs (encore existants) de cours qui n'existent plus :

DELETE FROM mdl_logstore_standard_log WHERE courseid IN (Liste obtenue par requête précédente);

Séverin

En réponse à Séverin Terrier

Re: Changement d'année et de serveur et problèmes - MAJ 4.0

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Cette partie concerne la mise à jour à Moodle 4.0.

Après avoir dupliqué mon instance Moodle sur un nouveau serveur, et avoir modifié tous les éléments pour adapter l'URL, j'ai lancé la mise à jour à Moodle 4.0.

Mais celle-ci s'est arrêtée avec un message d'erreur, lié à block_myoverview, manifestement liée à une durée d'exécution dépassée.

J'ai essayé de lancer la mise à jour en ligne de commande, mais cela avait échoué également. J'ai donc attendu le lendemain avant de relancer en ligne de commande.

Cela a fini par passer, mais cela a été très long (il faut patienter car rien ne bouge) sur le traitement de cet élément :

-->block_myoverview
++ Succès (12191,18 secondes) ++

La suite s'est ensuite bien passée, rapidement.

Séverin