# Documentation Pour Mantis (2.25.5) ### **Procédure de migration by Said LOUNNAS** # Chapitre 1 Mantis #### 1) Mise à jour de Debian v? ``` sudo apt update sudo apt upgrade sudo reboot ``` #### 2) Les modules PHP a installé: La version de PHP livrée avec Debian 11.3 est PHP 7, or le plugin Mantis File Transfer Support a besoin de PHP 8 pour fonctionner Afin d’installer PHP 8, on ajoute le dépôt [DEB.SURY.ORG](https://deb.sury.org/) au serveur car PHP 8 ne fait pas encore officiellement partie de Debian. Attention, ceci signifie que la version de PHP utilisée n’est plus celle livrée officiellement avec Debian, et que tant que PHP 8.1 est maintenu (jusqu’au 25/11/2024) cela ne posera pas de problème de sécurité si l’on fait sudo apt update && sudo apt upgrade régulièrement. En revanche, passé cette date, il faudra bien penser soit à changer manuellement la version de PHP, soit à repasser sur celle livrée avec Debian. * **Lister les modules PHP installées avec la version de PHP actuelle :** `php -m > ~/old\_php\_modules.txt` * **Installer les dépendances requises :** ``` sudo apt update sudo apt install -y lsb-release ca-certificates apt-transport-https software-properties-common gnupg2 ``` * **Ajouter le dépôt [DEB.SURY.ORG](https://deb.sury.org/) au serveur et vérifier sa clé.** ``` echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add - ``` * **Installer PHP 8.1 :** ``` sudo apt update sudo apt install php8.1 sudo apt-get install php8.1-soap ``` (Les modules installés avec l’ancien PHP sont dans le fichier **~/old\_php\_modules.txt** créé au tout début) #### 3) Configuration apache2 : * changer la version de PHP utilisée par Apache 2 : ``` sudo a2dismod php7.4 sudo a2enmod php8.1 sudo service apache2 restart ``` #### 4) Paramétrer l’envoi de gros fichiers : * Accéder à **/etc/php/8.1/apache2/php.ini** et changer les valeurs suivantes : ``` upload\_max\_filesize = 4096M post\_max\_size = 4112M memory_limit = 5120M max\_execution\_time = 900 max\_input\_time = 900 ``` * Ensuite accéder à **/etc/php/8.1/apache2/php.ini** et changer les valeurs suivantes : ``` Timeout 900 ``` * Redémarrer Apache2 : ``` sudo service apache2 restart ``` #### 5) [Installer Postfix :](https://www.postfix.org/) Voici les étapes pour installer et configurer Postfix pour Mantis a. Installer Postfix: ``` sudo apt-get update sudo apt-get install postfix ``` b. Lors de l'installation, sélectionner "Internet Site" pour la configuration du système de messagerie. c. Configurer le nom de domaine dans le fichier `/etc/postfix/main.cf`: ``` sudo nano /etc/postfix/main.cf ``` *Makefile* ``` smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination mydomain = test2.efficientip.com myhostname = mail.test2.efficientip.com alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = $myhostname mydestination = $myhostname, localhost.$mydomain, localhost.intranet, localhost mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all inet_protocols = all ``` d. Configurer mantis : ``` sudo nano /var/www/mantisbt-2.25.5/config/config_inc.php ``` ``` $g_window_title = 'EfficientIP IssueTracker'; $g_smtp_host = 'test2.efficientip.com'; $g_smtp_port = 25; $g_webmaster_email = 'issuetracker@efficientip.com'; $g_from_name = 'EfficientIP Issue Tracker'; $g_from_email = 'issuetracker@efficientip.com'; $g_to_email = 'support@efficientip.com'; $g_return_path_email = 'issuetracker@efficientip.com'; $g_allow_signup = ON; $g_send_reset_password = ON; $g_enable_email_notification = ON; $g_upload_max_filesize = 2097152; $g_max_file_size = 2097152; $g_phpMailer_method = PHPMAILER_METHOD_SENDMAIL; $g_administrator_email = 'support@efficientip.com'; ``` e. Redémarrer Postfix: ``` sudo service postfix restart ``` #### 6) Préparation des données sur le serveur FreeBSD Dans la suite de ce document, l’ancien serveur ([support.efficientip.com](http://support.efficientip.com)) où Mantis est actuellement en prod sera désigné comme serveur FreeBSD, et le nouveau serveur sur lequel va être effectuée la bascule sera désigné comme serveur Debian ([test2.efficientip.com](http://test2.efficientip.com)). **a. Sauvegarde de la base de données** **1) Automatiquement :** Une sauvegarde de la base de données est effectuée automatiquement tous les jours à 00h30 sur le serveur FreeBSD. Cependant, afin de de migrer les données les plus récentes, il est nécessaire d’effectuer une sauvegarde de la base de données. Le script de migration s’attend à trouver une sauvegarde de la base de données à l’emplacement /usr/backup sur le serveur FreeBSD. **Mise à jour des droits des fichiers:** Les fichiers uploadés à l’intérieur des issues sur Mantis n’ont par défaut pas les droits pour être lus par le script de transfert tournant sur le serveur Debian. Afin de modifier les droits sur les fichiers pour lequel ça n’a pas encore été fait : * Se connecter avec un utilisateur qui a les droits root au serveur FreeBSD (attention, la commande sudo n’existe pas sur ce serveur !) * Dans le répertoire /usr3/mantis_upload/ , exécuter la commande : ``` chmod -R +r . ``` Si des fichiers n’ont pas les bons droits, l’erreur **rsync: send\_files failed to open "/usr3/mantis\_upload/filename": Permission denied (13)** pourra s’afficher sur le serveur Debian lors de la migration. **2) Manuellement :** ``` mariabackup --backup \ --target-dir=/usr/backup \ --user=mariabackup --password=mypassword ``` #### 7) Le script de migration Sur le serveur Debian, configurer et exécuter le script à l’emplacement suivant : ``` opt/myscripts/mantis_migration.bash ``` ``` #!/bin/bash usage() { echo "Syntax: mantis_migration.bash -m \[run|dry-run\]" echo " '-m run' for the entire migration process" echo " '-m dry-run' to limit the script to the transfer of files from the production server" } run=false while getopts ":m:" option; do case $option in m) case $OPTARG in "run") run=true;; "dry-run") run=false;; *) echo "Invalid argument for -m option !!" usage; exit;; esac;; :) echo "Option -$OPTARG needs an argument !!" usage; exit;; *) echo "Invalid option -$OPTARG" usage; exit;; esac done if \[ "$EUID" -ne 0 \] then echo "Please run as root" exit fi MYSQL_PASSWORD="toto" if $run; then database="mantis" else database="mantis_dry-run" fi mysql\_cmd="mysql -uroot --password=$MYSQL\_PASSWORD $database" REMOTE=163.172.198.215 sql\_backup\_date=$(date +'%Y%m%d') sql\_backup\_file=issuetracker.efficientip.com_$sql\_backup\_date.sql.gz echo "---Recovery of Mantis downloaded files---" rsync -e 'ssh -oHostKeyAlgorithms=+ssh-dss -p 22120' -a backup@$REMOTE:/usr3/mantis_upload /usr3 rsync -e 'ssh -oHostKeyAlgorithms=+ssh-dss -p 22120' -a backup@$REMOTE:/usr2/mantis_upload2 /usr2 echo "---Recovery of Mantis database---" rsync -e 'ssh -oHostKeyAlgorithms=+ssh-dss -p 22120' -a backup@$REMOTE:/usr/backup/$sql\_backup\_file /usr/backup/ if $run; then mysqladmin -f -uroot --password=$MYSQL_PASSWORD drop $database fi mysqladmin -uroot --password=$MYSQL_PASSWORD create $database zcat /usr/backup/$sql\_backup\_file | $mysql_cmd echo "ALTER USER 'root'@'localhost' IDENTIFIED BY 'toto';" | $mysql_cmd rm -rf /usr/backup/$sql\_backup\_file echo "---Updating Mantis database---" echo "Creating global categories" echo "insert into mantis\_category\_table(project\_id,user\_id,name,status) select distinct 0,0,name,0 from mantis\_category\_table t where not exists (select * from mantis\_category\_table t2 where t2.project\_id=0 and t2.user\_id=0 and t2.name=t.name)" | $mysql_cmd echo "Updating Tickets to global categories" echo "update mantis\_bug\_table b set category\_id=(select n.id from mantis\_category\_table c,mantis\_category\_table n where b.category\_id=c.id and c.name=n.name and n.project\_id=0) and b.category\_id != 0" | $mysql_cmd echo "Deleting non-global categories" echo "delete from mantis\_category\_table where project\_id != 0" | $mysql\_cmd echo "Set inherit on all project" echo "update mantis\_project\_table set inherit\_global=1" | $mysql\_cmd echo "Delete references to old plugins from the database" echo "DELETE FROM mantis\_plugin\_table WHERE basename IN ('TimeTracking', 'DevMonitor');" | $mysql_cmd echo "DELETE FROM mantis\_config\_table WHERE config\_id IN ('plugin\_TimeTracking\_schema', 'plugin\_TimeTracking\_admin\_own\_threshold', 'plugin\_TimeTracking\_view\_others\_threshold', 'plugin\_TimeTracking\_admin\_threshold', 'plugin\_DevMonitor\_schema');" | $mysql_cmd echo "DROP TABLE mantis\_plugin\_TimeTracking\_data\_table;" | $mysql_cmd if ! $run; then mysqladmin -f -uroot --password=$MYSQL_PASSWORD drop $database fi BLUE='\\033\[0;34m' RED='\\033\[0;31m' NC='\\033\[0m' # No Color echo "********************" echo -e "${BLUE}Recovery of data currently in production is complete${NC}" if $run; then echo -e "${BLUE}To complete the processus, please open /admin/install.php with a web browser, enter database account and launch upgrade process${NC}" echo -e "${BLUE}Then, you have to activate the plugins on the Manage Plugins page, and finally configure 'OpenID Authentication Module' and 'File Transfer Support'${NC}" echo -e "${RED}--> REMEMBER TO DELETE THE ADMIN FOLDER ONCE MANTISBT WORKS, BECAUSE IT IS A SERIOUS SECURITY BREACH WHEN GOING INTO PRODUCTION <--${NC}" else echo -e "${RED}To really alter the database present on the server, please re-run the script with '-m run' option${N}" fi echo "********************" ``` Ce script s’exécute en tant que superuser : en effet, l’utilisateur backup du serveur FreeBSD a besoin de connaître la clé publique de l’utilisateur qui exécute le script de migration sur le serveur Debian, or celle du superuser est déjà renseignée. **sudo ./mantis_migration.bash -m dry-run** une première fois pour excéuter le script en mode dry-run une première fois et être sûr que tout se passe bien. Ensuite pour effectuer la migration pour de bon : ``` sudo ./mantis_migration.bash -m run ``` #### 8) Configuration de Mantis Aller ensuite à l’adresse [test2.efficientip.com/admin/install.php](http://test2.efficientip.com/admin/install.php), renseigner le nom de d'utilisateur et le mot de passe de la base de données (présents dans **/var/www/mantisbt/config/config_inc.php** si nécessaire) et exécuter le script de mise à jour de la base de données. * Se connecter ensuite à Mantis avec le nom d’utilisateur et le mot de passe d’un utilisateur existant qui a les rôles d’administrateur. * Aller dans **Manage > Manage Plugins** et upolader tous les plugins depuis [Gitlab]([https://](https://gitlab.efficientip.com/it-team/internal-tools/mantis-suport)) sauf Avatars via Gravatar : - [mantis-plugin-openidconnection]([https://](https://gitlab.efficientip.com/it-team/internal-tools/mantis-suport/mantis-plugin-openidconnection)), renommer le comme ceci **OpenIDAuth** - [mantis-plugin-support]([https://](https://gitlab.efficientip.com/it-team/internal-tools/mantis-suport/mantis-plugin-support)), renommer le comme ceci **Support** - [mantis-plugin-updownloads]([https://](https://gitlab.efficientip.com/it-team/internal-tools/mantis-suport/mantis-plugin-updownloads)), renommer le comme ceci **FileTransferSupport** - [MatnisPlugin-EfficientipColor]([https://](https://gitlab.efficientip.com/it-team/internal-tools/mantis-suport/matnisplugin-efficientipcolor)), renommer le comme ceci **StatusColors** * Configurer les plugins File Transfer Support et OpenID Authentication Module avec les bons paramètres. 1 ) OpenID : Fournir les credentials qui se trouvent sur auth0 : - Logon button Title. - OpenID. - Client ID. - Client Secret. 2) File Transfer Support : cocher les cases correspondantes selon les besoins. - Le rôle minimum pour l'accès au support. - Le rôle minimum pour l'accès client. - Exclus les fichiers dont vous n’avez pas besoin (.iso;.tar.gz;.zip). - Renseigner les buckets par région ensuite les noms (client & support) comme suit =>  **![](https://lh4.googleusercontent.com/WBifAc6ersIuaVFZusP0eZoFfYua3Joun_y6PJ47OOlvmIUAUF-wtS2ZHLNnmc19AM999798Hoqax8avegnx7Fu0h0UJ1asyu-tntHrrUtBdqI7npRZuJ9LKj10PHVY3xA3TlTihStfY2UFQ0SS5wsw)** - A la fin, renseigner les  clés privées (customer & support ) qui se trouvent sur google storage IAM & Admin > Service Accounts. (faut régénérer ses clés pour chaque utilisation) 3) Configurez Mantis pour utiliser Postfix pour envoyer des e-mails. Aller dans le panneau d'administration de Mantis, puis dans "Gestion des e-mails" et définissez les paramètres de courrier sortant pour utiliser Postfix. #### 9) Corriger l'affichage de la priorité dans les tickets (s'ils s’affichent pas correctement ) : - Accédez à la section "Manage" dans le menu en haut et cliquer sur Manage configuration ensuite cliquer pour ajouter une configuration suivant : - priority\_enum\_string : 1:P5 (None), 2:P4 (Low), 3:P3 (Normal), 4:P2 (High), 5:P1 (Critical Impact / Production Down) - Mise à jour la base de données : - Soit avec le script php : ``` $servername = "servername"; $username = "username"; $password = "password"; $dbname = "dbname"; $conn = new mysqli($servername, $username, $password, $dbname); // Check conection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $priorities = array( array('old_priority' =\> 40, 'new_priority' =\> 4), array('old_priority' =\> 20, 'new_priority' =\> 2), array('old_priority' =\> 10, 'new_priority' =\> 1), array('old_priority' =\> 30, 'new_priority' =\> 3), array('old_priority' =\> 50, 'new_priority' =\> 5) ); foreach ($priorities as $priority) { $old_priority = $priority\['old_priority'\]; $new_priority = $priority\['new_priority'\]; $sql = "UPDATE mantis\_bug\_table SET priority = $new_priority WHERE priority = $old_priority;"; if ($conn->query($sql) === TRUE) { echo "Priority value $old_priority updated to $new_priority successfully<br>"; } else { echo "Error updating priority value $old_priority: " . $conn->error . "<br>"; } } $conn->close(); ``` - Soit avec des requêtes SQL : ``` 1. mysql -u \[username\] -p \[password\] 2. SHOW DATABASES; 3. USE \[mantis\]; 4. requêtes SQL en dessous ``` ```sql 'UPDATE mantis_bug_table SET priority = 1 WHERE priority = 10;' 'UPDATE mantis_bug_table SET priority = 2 WHERE priority = 20;' 'UPDATE mantis_bug_table SET priority = 3 WHERE priority = 30;' 'UPDATE mantis_bug_table SET priority = 4 WHERE priority = 40;' 'UPDATE mantis_bug_table SET priority = 5 WHERE priority = 50;' ``` * Effectuer des tests sur l’ensemble de l’installation. #### 10) La mise en production (à ne pas faire dans le cas d’une migration blanche !!) Si tout marche, supprimer le dossier /var/www/mantisbt/admin, nécessaire lors de l’installation pour mettre à jour la base de données, mais qui ne doit pas se retrouver sur une installation en production. Effectuer des tests sur l’ensemble de l’installation.Mettre à jour les enregistrements DNS pour rendre le site accessible. # Chapitre 2 Auth0 : #### 1. Stop les automatismes (triggers + emails) dans Auth0. #### 2. Création des users dans UserManager. #### 3. Activation Plugin de connexion dans Mantis. #### 4. Réactivation des automatismes de Auth0.