# 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 =>
****
- 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.