Outils pour utilisateurs

Outils du site


benevoles:technique:yunohost_mutu

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
benevoles:technique:yunohost_mutu [2023/08/26 17:51] – [Etherpad] ljfbenevoles:technique:yunohost_mutu [2024/04/16 10:39] (Version actuelle) scapharnaum
Ligne 8: Ligne 8:
  
   * les [[https://sans-nuage.fr|services en accès libres]] sur public.sans-nuage.fr   * les [[https://sans-nuage.fr|services en accès libres]] sur public.sans-nuage.fr
-  *  les services réservés aux membre sur sans-nuage.fr+  * les services réservés aux membres sur sans-nuage.fr 
 + 
 +===== Provisionnement d'un compte sans-nuage.fr ===== 
 +Voici comment un  
 + 
 +<markdown> 
 + 
 +   * Points d'entrée, prérequis : 
 +[https://forum.arn-fai.net/t/support-et-provisionnement-suivi-des-taches-a-faire-ensemble-et-manifestation-dinteret/7650/2](https://forum.arn-fai.net/t/support-et-provisionnement-suivi-des-taches-a-faire-ensemble-et-manifestation-dinteret/7650/2) 
 + 
 +Base de données de MDP (keepassXC ou firefox avec mdp fort) 
 + 
 +Ordi sous linux 
 + 
 + 
 + 
 +   * Expliquer l'architecture de l'infra 
 +[https://wiki.arn-fai.net/benevoles:technique](https://wiki.arn-fai.net/benevoles:technique) 
 + 
 +       * Le serveur sans-nuage qui est une VM YunoHost sur le cluster 
 +       * La VM qui héberge le site web COIN (interface utilisateur et administrateur) 
 + 
 + 
 +   * Créer un compte sur le wiki avec des droits user 
 +[https://wiki.arn-fai.net/benevoles:technique:yunohost\_mutu](https://wiki.arn-fai.net/benevoles:technique:yunohost\_mutu) 
 + 
 +   * Donner des droits superutilisateur sur COIN  
 +[https://adherents.arn-fai.net/admin/](https://adherents.arn-fai.net/admin/
 + 
 + 
 + 
 +Pour la procédure, il faut : 
 + 
 +   * Administrateur / Modérateur de COIN 
 +   * Gestion d'utilisateur au minima sur NextCloud  
 + 
 + 
 +### Provisionnement de compte - Découverte de COIN 
 + 
 +   * Toute demande de service réalisée depuis l'espace adhérent de COIN ([https://adherents.arn-fai.net)](https://adherents.arn-fai.net)) est catégorisé dans la section "Services>Demandes" dans l'administration de COIN ([https://adherents.arn-fai.net/admin)](https://adherents.arn-fai.net/admin)) 
 +   * Une notification est envoyée sur le Forum "Nouvelle demande de *** pour un compte sans-nuage" avec un lien de la requête dans l'administration de COIN. 
 +   * **BUG** : **Le lien de la requête n'est pas cliquable" sur le forum car retour à la ligne. 
 +   * Cliquer sur "Accepter" 
 +   * **BUG** : quand on valide un sous-compte Asso, par défaut le compte prends le nom du groupe 
 +   * FEATURE REQUEST : "Accepter \& Provisionner" n'est pas encore fonctionnel car il faut d'abord vérifier que le pseudo est correct. Feature 1) : demander ET VERIFIER (règle des comptes yunohost) le pseudo du compte sans-nuage dans le formulaire de création du service. Dans le cas des abonnements asso supplémentaires, pour l'instant c'est le nom de l'asso nom\_asso qui est ajouté. Dans le cas d'un abonnement asso principal, c'est nom\_asso\_admin. Feature 2) : demander le Nom Complet (Prénom Nom) du compte supplémentaire pour qu'il soit correctement renseigné dans le compte YunoHost. 
 +   * Quand la demande est acceptée, cela créé un abonnement, et démarre donc une facturation (généralement 0€/an, sauf pour le compte asso principal et compte famille supplémentaire). 
 +   * Un abonnement créé, créé une configuration de service "Compte externe" = Compte sans-nuage.fr 
 +   * Aller dans la section "Configurations>Comptes Externes" 
 +   * Cliquer sur le service lié à l'abonnement qu'on vient de créer. 
 +   * Vérifier les données, surtout que le pseudo ne comporte que des "lettres", des "chiffres" et éventuellement un "\_" (voir les règles des comptes YunoHost) puis cliquer sur "Provisionner" 
 +       * Cela prend un peu de temps en raison d'un timeout qui attend la bonne exécution du script de création d'user dans le serveur sans-nuage.fr (YunoHost) 
 +       * **BUG** : Une erreur 504 peut survenir, le lien de redirection ne pointe pas vers le nouveau service provisionné mais vers une URL invalide. Peut-être parce-que le service n'est pas provisionné avant le timout. 
 +   * Retourner dans la fiche du service ("Configurations>Comptes Externes") : Au bout de 5 minutes le service doit apparaître comme running (vert) 
 +   * BUG : le quota nextcloud n'est pas correctement configuré, il faut se rendre sur nextcloud pour le configurer. Voir prochaine section.  
 +       * Pour corriger, il faut modifier la commande occ dans le script (post-install) de provisionnement de compte externe sur la VM de COIN (ext) 
 +   * FEATURE REQUEST : définir le quota automatiquement en fonction du type d'abonnement souscrit 
 +   * Prévenir sur le forum que le compte a été créé ! 
 + 
 + 
 +###Modification du quota Nextcloud - Administration Nextcloud 
 + 
 +   * Aller sur l'interface admin>users [https://sans-nuage.fr/file/settings/users](https://sans-nuage.fr/file/settings/users) 
 +   * Cliquer sur le stylo pour modifier 
 +   * Le quota par défaut est 1M. Vérifier le quota 
 +       * 3GB pour un compte individuel (quota mail + quota nextcloud = 5GB) 
 +       * 25GB pour un compte asso 
 +   * **ne pas oublier de valider avec la coche à droite** 
 +   * FEATURE REQUEST : Modifier le quota nextcloud par défaut à 50M et supprimer l'arborescence par défaut pour les nouveaux comptes pour enlever les docs par défaut (20M perdus). Mettre plutôt un README.txt vers de la doc' nextcloud sans-nuage.fr/file 
 + 
 + 
 +### Modification de compte YunoHost et nom sur Nextcloud - Pistes de debug du provisionnement sans-nuage.fr  
 +  * **BUG** : Si les utilisateurs modifient leur "Nom Complet" dans "Editer mon Profil" sur https://sans-nuage.fr/yunohost/sso/edit.html , celui-ci n'est pas répercuté sur Nextcloud 
 +  * CONTOURNEMENT : Si un Admin modifie le compte YunoHost directement, comme ci-dessous, le nom est bien répercuté sur Nextcloud (grâce à une tâche Cron). 
 +   * se connecter au serveur sans-nuage.fr (interface administrateur YunoHost) [https://sans-nuage.fr/yunohost/admin/](https://sans-nuage.fr/yunohost/admin/
 +   * vérifier si l'utilisateur est bien créé -> [https://sans-nuage.fr/yunohost/admin/#/users](https://sans-nuage.fr/yunohost/admin/#/users) 
 +       * d'ici on peut modifier le quota email, adresse email principale, alias, redirection, nom complet (Prénom, Nom),  
 +   * FEATURE REQUEST : Feature 2) : demander le Nom Complet (Prénom Nom) du compte supplémentaire Asso pour qu'il soit correctement renseigné dans le compte YunoHost dès la création. 
 + 
 + 
 +### Modification de mot-de-passe par un administrateur 
 +  * FEATURE REQUEST (YunoHost) : Le MDP sans-nuage (compte user YunoHost) ne peut être récupéré en autonomie,  
 +  * CONTOURNEMENT : seul un admin peut le modifier et le transmettre de manière sécurisée en suivant cette procédure  
 + 
 +* La modification se passe sur https://sans-nuage.fr/yunohost/admin/#/users/ 
 +* Et l'envoi de MDP sécurisé c'est  
 +  1) uploader le fichier sur smalldrop.sans-nuage.fr en cochant "expiration après le premier téléchargement" 
 +  2) copier le lien dans le champ commentaire de l'abonnement adherents.arn-fai.net/admin/external_account 
 +  3) prévenir la personne par mail où elle peut récupérer son MDP et préciser qu'il faut **IMPERATIVEMENT** qu'elle le change par un suffisamment sécurisé qu'elle seule connait. Par exemple >12 caractères avec majuscules, minuscules, chiffres, et caractères spéciaux  
 + 
 +### Pour séparer/rattacher un compte d'un groupe/asso 
 + 
 +   * Dans la fiche abonnement sur COIN changer nom de membre et l'offre 
 +   * Dans Yunohost détacher le compte du groupe 
 +   * Dans Nextcloud changer le quota si nécessaire 
 + 
 + 
 +### Suppression 
 + 
 +   * Bien s'assurer que la personne est OK car **suppression totale des données personnelles** 
 +   * Sur [la fiche du membre dans Yunohost](https://sans-nuage.fr/yunohost/admin/#/users/) : delete en cochant bien la case pour purger les données personnelles 
 +   * Dans COIN : supprimer l'abonnement après avoir renseigné la **date de résiliation** et enregistrer/valider 
 +     
 +[https://sans-nuage.fr/yunohost/admin/#/](https://sans-nuage.fr/yunohost/admin/#/
 +</markdown> 
  
 ===== Lufi ===== ===== Lufi =====
Ligne 76: Ligne 180:
 Si vous avez un problème de taille de base de données etherpad: https://github.com/YunoHost-Apps/etherpad_mypads_ynh/issues/188 Si vous avez un problème de taille de base de données etherpad: https://github.com/YunoHost-Apps/etherpad_mypads_ynh/issues/188
  
 +
 +===== Matrix =====
 +==== Problème de mot de passe dans Element ====
 +
 +<markdown>
 +Une fois connecté sur Element, certaines opérations nécessitent de re-rentrer son mdp. Il semble que cette demande de mdp ne soit pas implémenté en CAS. Du coup le mdp échoue.
 +
 +Contournement :
 +* se connecter à synapse-admin, section User https://synadmin.sans-nuage.fr/#/users
 +* Sélectionner l'utilisateur > authentification unique
 +* Noter le pseudo, Supprimer CAS
 +* Dans "Adresse électronique" Ajouter adresse mail pseudo@sans-nuage.fr 
 +* Demander à l'utilisateur de reset son mdp
 +  * Mets toi en navigation privée sur firefox
 +  * va sur chat.sans-nuage.fr
 +  * cliques sur "mot de passe oublié ?"
 +  * via le mail reçu sur ta boite mail @sans-nuage.fr, définis le même mdp que ton compte sans-nuage.fr
 +  * Et là dans l'idéal tu remets le même MDP que ton MDP sans-nuage
 +* Remettre CAS avec le pseudo 
 +</markdown>
 +==== Nettoyer la base de données ====
 +
 +<markdown>
 +Niveau 1 - via l'interface web Synapse Admin
 +* Donner des droits administrateur à votre compte matrix sans-nuage.fr permet de vous connecter à https://synadmin.sans-nuage.fr/ pour faire des actions d'administration basiques. Ca passe directement par une requête dans la BDD postgresql matrix_synapse : 
 +`su --command="psql matrix_synapse" postgres <<< "UPDATE users SET admin = 1 WHERE name = '@user:sans-nuage.fr'"`
 +* Vous pouvez par exemple supprimer les comptes invité plus vieux qu'une semaine
 +  * Afficher 50 lignes par pages
 +  * Sélectionner tout
 +  * "effacer les données de l'utilisateur"
 +
 +Niveau 2 utilisation de l'API d'administration synadm
 +* Se connecter en tant que admin_ghentz pour avoir accès à l'API synadm ou configurer son propre path comme suit
 +* Ensuite aller dans votre client Element pour récupérer un jeton pour l'API synapse 
 +  * Tout en bas des paramètres, section `Aide et A propos` > `Advanced` > `jeton d'accès`
 +* Ajouter les variables suivantes à votre path :
 +```
 +export SYNAPSE_HS=matrix.sans-nuage.fr
 +export SYNAPSE_TOKEN=le_jeton_recupere
 +```
 +
 +Opérations de nettoyage
 +\c matrix_synapse
 +copy (select room_id, count(*) as cnt from events group by room_id order by cnt desc) to '/tmp/rooms_to_clean' csv;
 +SELECT room_id, stream_ordering, COUNT(event_id) AS c FROM events GROUP BY room_id, stream_ordering ORDER BY c DESC;
 +
 +SELECT nspname || '.' || relname AS "relation",
 +    pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size"
 +  FROM pg_class C
 +  LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
 +  WHERE nspname NOT IN ('pg_catalog', 'information_schema')
 +    AND C.relkind <> 'i'
 +    AND nspname !~ '^pg_toast'
 +  ORDER BY pg_total_relation_size(C.oid) DESC
 +  LIMIT 20;
 +
 +jq -r '.rooms | map(select(.creator == "@signalbot:sans-nuage.fr")) | .[].room_id' < rooms.json | xargs -ti $SHELL -ic 'synadm POST '"'"'v1/purge_history/{}'"'"' -d '"'"'{"purge_up_to_ts":'"$(date -d-365days +%s000)"'}'"'"
 +
 +jq -r '.rooms | map(select(.creator == "@whatsappbot:sans-nuage.fr")) | .[].room_id' < rooms.json | xargs -ti $SHELL -ic 'synadm POST '"'"'v1/purge_history/{}'"'"' -d '"'"'{"purge_up_to_ts":'"$(date -d-365days +%s000)"'}'"'"
 +
 +SELECT * FROM state_groups_state LIMIT 5;
 +SELECT COUNT(*) as nb FROM state_groups_state LIMIT 5;
 +SELECT COUNT(*) as nb FROM state_groups_state;
 +
 +
 +REINDEX DATABASE CONCURRENTLY matrix_synapse;
 +ou
 +REINDEX DATABASE matrix_synapse;
 +
 +VACUUM 
 +ou
 +VACUUM FULL;
 +semblent avoir le même résultat
 +\q
 +
 +Autres commandes utiles :
 +```
 +su -c /usr/bin/psql postgres
 +synadm GET 'v2/users?name=bot' | jq
 +postgres=# SELECT pg_size_pretty( pg_database_size( 'matrix_synapse' ) );
 +```
 +
 +full log
 +```
 +122  synadm POST "v1/purge_media_cache?before_ts=$(date -d-60days +%s000)"                                          
 +  123  synadm POST "v1/purge_media_cache?before_ts=$(date -d-30days +%s000)"                                          
 +  124  df -h                                                                                                          
 +  125  synadm POST "v1/media/delete?before_ts=$(date -d-900days +%s000)"                                              
 +  126  df -h                                                                                                          
 +  127  synadm POST "v1/media/delete?before_ts=$(date -d-899days +%s000)"                                              
 +  128  df -h                                                                                                          
 +  129  synadm POST "v1/media/delete?before_ts=$(date -d-800days +%s000)"                                              
 +  130  df -h                                                                                                          
 +  131  synadm POST "v1/media/delete?before_ts=$(date -d-700days +%s000)"                                              
 +  132  df -h                                                                                                          
 +  133  synadm POST "v1/media/delete?before_ts=$(date -d-600days +%s000)"                                              
 +  134  df -h                                                                                                          
 +  135  synadm POST "v1/media/delete?before_ts=$(date -d-500days +%s000)"                                              
 +  136  df -h                                                                                                          
 +  137  synadm POST "v1/media/delete?before_ts=$(date -d-500days +%s000)"                                              
 +  138  df -h                                                                                                          
 +  139  synadm POST "v1/media/delete?before_ts=$(date -d-400days +%s000)"                                              
 +  140  synadm POST "v1/media/delete?before_ts=$(date -d-450days +%s000)"                                              
 +  141  synadm POST "v1/media/delete?before_ts=$(date -d-400days +%s000)"                                              
 +  142  df -h                                                                                                          
 +  143  synadm POST "v1/media/delete?before_ts=$(date -d-365days +%s000)"                                              
 +  144  df -h                                                                                                          
 +  145  synadm GET 'v1/rooms?limit=999999' > rooms.json                                                                
 +  146  jq '.rooms | map(select(.joined_local_members == 0))' < rooms.json                                             
 +  147  nano rooms.json                                                                                                
 +  148  jq '.rooms | map(select(.joined_local_members == 0)) | map(.state_events) | add' < rooms.json                  
 +  149  df -h                                                                                                          
 +  150  synadm GET 'v1/rooms?limit=500' > rooms.json                                                                   
 +  151  jq '.rooms | map(select(.joined_local_members == 0))' < rooms.json                                             
 +  152  synadm GET 'v1/rooms?limit=5000' > rooms.json                                                                  
 +  153  jq '.rooms | map(select(.joined_local_members == 0))' < rooms.json                                             
 +  154  synadm GET 'v1/rooms?limit=1000' > rooms.json                                                                  
 +  155  synadm GET 'v1/rooms?limit=2000' > rooms.json                                                                  
 +  156  synadm GET 'v1/rooms?limit=1000' > rooms.json                                                                  
 +  157  jq '.rooms | map(select(.joined_local_members == 0))' < rooms.json                                             
 +  158  nano rooms.json                                                                                                
 +  159  jq -r '.rooms | map(select(.joined_local_members == 0)) | .[].room_id' < rooms.json | xargs -ti synadm DELETE '
 +v1/rooms/{}' -d '{"purge": true}'                                                                                     
 +  160  synadm POST "v1/purge_media_cache?before_ts=$(date -d-30days +%s000)"                                          
 +  161  nano rooms.json                                                                                                
 +  162  sudo su                                                                                                        
 +  163  exit                                                                                                           
 +  164  tmux a                                                                                                         
 +  165  sudo su                                                                                                        
 +  166  df -h                                                                                                          
 +  167  lsblk                                                                                                          
 +  168  fdisk -l                                                                                                       
 +  169  sudo fdisk -l                                                                                                  
 +  170  dfc -Taisob 
 +  185  synadm GET 'v1/rooms?limit=999999' > rooms.json                                                                
 +  186  jq '.rooms | map(select(.joined_local_members == 0)                                                            
 +  187  nano rooms.json                                                                                                
 +  188  sudo su                                                                                                        
 +  189  synadm -o json room list -s joined_local_members -r -l 500 | jq -r '.rooms[] | select(.joined_local_members == 
 +0) | .room_id'                                                                                                        
 +  190  synadm POST "v1/purge_media_cache?before_ts=$(date -d-30days +%s000)"                                          
 +  191  history | grep synadm                                                                                          
 +  192  synadm GET v2/users/@gauthier67:sans-nuage.fr | jq                                                             
 +  193  synadm GET 'v1/rooms?limit=500' > rooms.json                                                                   
 +  194  nano rooms.json                                                                                                
 +  195  exit                                                                                                           
 +  196  tmux a
 +  197  tmux
 +  198  exit
 +  199  sudo su
 +  200  exit
 +  201  sudo su
 +  202  jq -r '.rooms | map(select(.joined_local_members == 0)) | .[].room_id' < rooms.json | xargs -ti synadm DELETE '
 +v1/rooms/{}' -d '{"purge": true}'
 +  203  source .bashrc 
 +  204  jq -r '.rooms | map(select(.joined_local_members == 0)) | .[].room_id' < rooms.json | xargs -ti synadm DELETE '
 +v1/rooms/{}' -d '{"purge": true}'
 +  205  nano .bashrc
 +  206  source .bashrc 
 +  207  synadm GET v2/users/@gauthier67:sans-nuage.fr | jq
 +  
 + 208  jq -r '.rooms | map(select(.joined_local_members == 0)) | .[].room_id' < rooms.json | xargs -ti synadm [0/1972]
 +v1/rooms/{}' -d '{"purge": true}'
 +  209  nano rooms.json 
 +  210  history | grep synadm
 +  211  synadm POST "v1/media/delete?before_ts=$(date -d-365days +%s000)"
 +  212  synadm POST "v1/media/delete?before_ts=$(date -d-465days +%s000)"
 +  213  synadm POST "v1/media/delete?before_ts=$(date -d-365days +%s000)"
 +  214  synadm POST "v1/media/delete?before_ts=$(date -d-400days +%s000)"
 +  215  synadm POST "v1/media/delete?before_ts=$(date -d-430days +%s000)"
 +  216  synadm POST "v1/media/delete?before_ts=$(date -d-400days +%s000)"
 +  217  synadm POST "v1/media/delete?before_ts=$(date -d-365days +%s000)"
 +  218  synadm POST "v1/purge_media_cache?before_ts=$(date -d-300days +%s000)"
 +  219  synadm POST "v1/purge_media_cache?before_ts=$(date -d-200days +%s000)"
 +  220  synadm POST "v1/purge_media_cache?before_ts=$(date -d-100days +%s000)"
 +  221  synadm POST "v1/purge_media_cache?before_ts=$(date -d-150days +%s000)"
 +  222  synadm POST "v1/purge_media_cache?before_ts=$(date -d-100days +%s000)"
 +  223  synadm POST "v1/purge_media_cache?before_ts=$(date -d-70days +%s000)"
 +  224  synadm POST "v1/purge_media_cache?before_ts=$(date -d-30days +%s000)"
 +  225  synadm GET 'v1/rooms?limit=999999' > rooms.json
 +  226  jq '.rooms | map(select(.joined_local_members == 0))' < rooms.json
 +  227  jq '.rooms | map(select(.joined_local_members == 0)) | map(.state_events) | add' < rooms.json
 +  228  jq -r '.rooms | map(select(.joined_local_members == 0)) | .[].room_id' < rooms.json | xargs -ti synadm DELETE '
 +v1/rooms/{}' -d '{"purge": true}'
 +  229  xargs --help
 +  230  jq -r '.rooms | map(select(.joined_local_members == 0)) | .[].room_id' < rooms.json | xargs -ti synadm DELETE '
 +v1/rooms/{}' -d '{"purge": true}'
 +  231  history | grep psql
 +  232  psql
 +  233  synadm GET 'v1/rooms?limit=999999' > rooms.json
 +  234  nano rooms.json 
 +  235  jq -r '.rooms | map(select(.joined_local_members == 0)) | .[].room_id' < rooms.json | xargs -ti $SHELL -ic "syn
 +adm DELETE 'v1/rooms/{}' -d '{\"purge\": true}'"
 +  236  nano /tmp/rooms_to_clean 
 +  237  head -n 20 /tmp/rooms_to_clean | cut -d, -f1 | xargs -ti $SHELL -ic 'synadm POST \'v1/purge_history/{}\' -d "{\
 +"purge_up_to_ts\":$(date -d-365days +%s000)}"'
 +
 +\q
 +  238  head -n 20 /tmp/rooms_to_clean | cut -d, -f1 | xargs -ti $SHELL -ic 'synadm POST '"'"'v1/purge_history/{}'"'"' 
 +-d '"'"'{"purge_up_to_ts":'"$(date -d-30days +%s000)"'}'"'" 
 +  239  nano /tmp/rooms_to_clean 
 +  240  jq -r '.rooms | map(select(.creator == \"@whatsappbot:sans-nuage.fr\")) | .[].room_id' < rooms.json
 +  241  jq -r '.rooms | map(select(.creator == "@whatsappbot:sans-nuage.fr")) | .[].room_id' < rooms.json
 +  242  jq -r '.rooms | map(select(.creator == "@whatsappbot:sans-nuage.f")) | .[].room_id' < rooms.json
 +  243  jq -r '.rooms | map(select(.creator == "@signalbot:sans-nuage.fr")) | .[].room_id' < rooms.json
 +  244  jq -r '.rooms | map(select(.creator == "@whatsappbot:sans-nuage.fr")) | .[].room_id' < rooms.json | xargs -ti $
 +SHELL -ic 'synadm POST \'v1/purge_history/{}\' -d "{\"purge_up_to_ts\":$(date -d-365days +%s000)}"'
 +  245  jq -r '.rooms | map(select(.creator == "@whatsappbot:sans-nuage.fr")) | .[].room_id' < rooms.json | xargs -ti $
 +SHELL -ic "synadm POST 'v1/purge_history/{}' -d '{"'"'"purge_up_to_ts"'"'":"'"'"$(date -d-365days +%s000)"'"'"}'"
 +  246  jq -r '.rooms | map(select(.creator == "@whatsappbot:sans-nuage.fr")) | .[].room_id' < rooms.json | xargs -ti $
 +SHELL -ic 'synadm POST '"'"'v1/purge_history/{}'"'"' -d '"'"'{"purge_up_to_ts":'"$(date -d-365days +%s000)"'}'"'"
 +  247  jq -r '.rooms | map(select(.creator == "@signalbot:sans-nuage.fr")) | .[].room_id' < rooms.json | xargs -ti $SH
 +ELL -ic 'synadm POST '"'"'v1/purge_history/{}'"'"' -d '"'"'{"purge_up_to_ts":'"$(date -d-365days +%s000)"'}'"'"           
 +```
  
  
 +</markdown>
 ===== Conflit APT entre mobilizon et onlyoffice ===== ===== Conflit APT entre mobilizon et onlyoffice =====
 OBSOLETE (mobilizon_ynh utilise maintenant des versions précompilées) OBSOLETE (mobilizon_ynh utilise maintenant des versions précompilées)
benevoles/technique/yunohost_mutu.1693065065.txt.gz · Dernière modification : 2023/08/26 17:51 de ljf