Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Mattermost

Avant Upgrade

  • https://docs.mattermost.com/upgrade/important-upgrade-notes.html

Ligne de commande mmctl

Supprimer une Équipe

  • Faire une sauvegarde du fichier config.json
  • Activer la configuration expérimental EnableAPITeamDeletion de false à true
  • Redémarrer le service

Se connecter avec le compte admin : sudo -u mt_tchat_opteos ./bin/mmctl --config ./config/config.json auth login https://chat-opteos.paquerette.eu

Supprimer l'équipe concerné : sudo -u mt_tchat_opteos ./bin/mmctl --config ./config/config.json auth login https://chat-opteos.paquerette.eu

Migrer depuis RocketChat

Les information sont dans le README du dépot

import de la base de données de rocketchat dans mongo

mongorestore --gzip --archive=2024-04-16T03\:23\:15Z_rs0.dump.gz

Exporter les données au bon format.

Il existe un projet (mattermost-etl-rocketchat pour extraire d'une base de donnée RocketChat les données et les mettre au format mattermost

Troobleshooting

le projet ne supporte que l'export de fichier depuis le filesystem ou gridFS, pas S3. À voir s'il ne faut pas le migrer.

Utilisation du repo filestore-migrator

Ce repo permet de migrer d'un stockage vers un autre via le fichier de conf suivant :

database:
  connectionString: "mongodb://localhost:27017/rockethat?directConnection=true&authSource=admin"
  database: "rocketchat"
source:
  type: "AmazonS3"
  AmazonS3:
    endpoint: "hot-objects.liiib.re"
    bucket: "chat-opteos-fr"
    accessId: "ACCESS_ID"
    accessKey: "ACCESS_KEY"
    region: ""
    useSSL: true

destination:
  type: FileSystem
  FileSystem:
    location: "./files"

skipErrors: true

## Modification du projet
Attention, le projet à 2 ans et n'a pas forcément été largement testé, il y a donc des modifications à faire : 
### Avant l'export

#### L'objet `user` ne doit pas avoir de `auth_data` si `auth_services` est nul
ajouter dans le fichier `lib/rocketchat/users.js`

if (user.auth_service == "") { delete user.auth_data }

#### les `username` doivent être lowercase
ajouter dans le fichier  `lib/rocketchat/users.js`
```diff
- result.username,
+ result.username.toLowerCase(),

!! TODO !!! remplacer dans les messages et directs channels aussi

ou à postériori

# changer les username
sed -i 's/"username":"\(.*\)","first/"username":"\L\1","first/g' data.jsonl
# changer dans les message
sed -i 's/"members":\["\(.*\)"\]\}\}/"members":\["\L\1"\]\}\}/g' test.jsonl
# et là
sed -i 's/"user":"\(.*\)","create/"user":"\L\1"create/g' data2.jsonl
sed -i 's/members":\["\(.*\)"\],"user/members":\["\L\1"\],"user/g' data2.jsonl
sed -i 's/"user":"\(.*\)","create/"user":"\L\1","create/g' data2.jsonl

un Header de canal ne peut contenir plus de 1024 caractères

ajouter dans le fichier lib/rocketchat/channls.js

- result.topic,
+ result.topic.substring(0,1024)

Après l'export

Un canal ne doit pas commencer par un -

sed -i 's/"-/"0/g' data.jsonl

Les images de profil ne fonctionnent pas, on les supprime

sed -i 's#,"profile_image":".*"##g'

Mettre le dossier d'upload au bon endroit ou changer le chemin :

sed -i 's#./files#/tmp/rocketchat/files#g' data.jsonl

Un user a plusieurs channels de temps en temps

TODO

Importer dans Mattermost

  • Bien penser à réhausser la limite d'utilisateurs par équipe

Mattermost est capable de faire des import bulk. Pour ça, il faut activer le mode local executer les commandes suivantes : 

sudo -u USER_MATTERMOST ./mmctl import upload --local ARCHIVE.ZIP
# Upload session successfully created, ID: 3jbgyxie9ir1iydf43xgc6gq6a
# récupérer l'ID
sudo -u USER_MATTERMOST ./mmctl import --local  process "ID_data.zip"
# Vérifier que tout se passe bien
sudo -u mt_tchat_test_paq ./mmctl import job show --local

Procédure depuis un dump mongo

(spécifique) Récupérér de dump chez indyhosters

  • installer le client mc de minio.
  • configurer un alias de connection :
mc alias set NOM_ALIAS https://cold-objects.liiib.re ACCESS_KEY SECRET_KEY
  • copier le dump sur la machine
mc cp NOM_ALIAS/opteos-fr-dumps/mongodb/NOM_DU_DUMP.dump.gz .

Importer le dump dans mongo

mongorestore mongorestore --archive="NOM_DU_DUMP.dump.gz" --gzip

Créer un utilisateur

#mongosh
 db.createUser(
   {
     user: "etl_user",
     pwd:  passwordPrompt(),   // or cleartext password
     roles: [ { role: "read", db: "rocketchat" },]
   }
 )

Jouer avec la base de données :

Récupérer l'id d'une équipe

select id from teams where name='NAME' ;

Récupérer les canaux d'une équipe

select id from channels where teamid='ID' ;

Récupérer l'id d'un utilisateurs

select id from users where username='USERNAME';

Sélectionner les posts d'un utilisateur dans une équipe

select * from posts where userid='USERID' and channelid in (select id from channels where teamid='TEAMID');

Changer l'utilisateur des messages dans une équipe

update posts set userid='NEW_USERID' where userid='OLD_USER_ID' and channelid in (select id from channels where teamid='TEAM_ID');

Focalboard

Restauration d'un board après suppression

Connexion à la base de donnée concerné

su - postgres
psql
\c MABASE

Récupération de l'ID du board et le numéro (temps ?) de suppression (delete_at)

SELECT id, title, delete_at FROM focalboard_boards_history WHERE delete_at > 0;

Re-création du board

INSERT INTO focalboard_boards SELECT * FROM focalboard_boards_history WHERE id = 'BOARD_ID' AND delete_at > 0;
UPDATE focalboard_boards SET delete_at = 0 WHERE id = 'MON_ID';

Restauration des cartes avec leur données

UPDATE focalboard_blocks_history SET channel_id = 0 WHERE board_id = 'BOARD_ID' AND delete_at > TEMPS_SUPPRESSION;
INSERT INTO focalboard_blocks SELECT * FROM focalboard_blocks_history WHERE board_id = 'BOARD_ID' AND delete_at > TEMPS_SUPPRESSION;
UPDATE focalboard_blocks SET delete_at = 0 WHERE board_id = 'BOARD_ID' AND delete_at > TEMPS_SUPPRESSION;