Gestionnaire de projets de l'April: Demandes
https://redmine.april.org/
https://redmine.april.org/favicon.ico?1586192034
2024-01-20T14:44:51Z
Gestionnaire de projets de l'April
Redmine
Infra Chapril - Demande #6316 (Nouveau): Migrer vers Debian Bookworm la vm xmpp
https://redmine.april.org/issues/6316
2024-01-20T14:44:51Z
Quentin Gibeaux
april.quentin@gibeaux.eu
<p>Le 14 août 2021 sort la nouvelle version de Debian<br />Prévoir la mise à jour de la vm XMPP.</p>
<p>Ticket de suivi de la migration du Chapril vers Debian Bullseye (<a class="issue tracker-2 status-5 priority-4 priority-default closed parent" title="Demande: Migrer le parc des machines et VM Chapril vers Debian 11 Bullseye (Fermé)" href="https://redmine.april.org/issues/5488">#5488</a>).</p>
Chapril - Demande #6266 (En cours de traitement): Déménager tous les services vers les nouveaux s...
https://redmine.april.org/issues/6266
2023-11-18T09:18:47Z
pitchum .
xmpp.chapril.org - Demande #5997 (Nouveau): Optimiser la table postgresql `ejabberd.archive`
https://redmine.april.org/issues/5997
2022-10-22T10:13:31Z
Anonyme
<a name="Le-problème"></a>
<h2 >Le problème<a href="#Le-problème" class="wiki-anchor">¶</a></h2>
<p>Cette table `ejabberd.archive` conserve l'historique de tous les messages (dans XMPP ça s'appelle MAM - Message Archive Management).<br />Elle est donc très volumineuse. Et elle est très souvent sollicitée, aussi bien en lecture qu'en écriture.<br />Des "SELECT" ou "SELECT <abbr title="*">COUNT</abbr>" sur cette table durent souvent plus de 30 secondes, parfois plusieurs minutes. Ça doit probablement se ressentir côté client (mais je n'en suis pas certain, c'est peut-être habilement masqué dans les applis).</p>
<a name="Une-piste-de-solution"></a>
<h2 >Une piste de solution<a href="#Une-piste-de-solution" class="wiki-anchor">¶</a></h2>
<p>Une vraie solution nécessiterait de patcher le code ejabberd. Par exemple pour maintenant des compteurs de messages pour éviter d'avoir à faire des "SELECT <abbr title="*">COUNT</abbr>" violents.<br />Mais comme je ne suis pas prêt à apprendre à code en erlang ni en elixir, je cherche ce que je peux faire côté postgresql.</p>
<p>Une amélioration possible serait de "saucissonner" la table (ça s'appelle <a href="https://www.postgresql.org/docs/current/ddl-partitioning.html" class="external">Table Partitioning</a> dans la doc postgresql).<br />Ce mécanisme se prête à priori très bien à cette table pour laquelle les écritures sont de type "append only" et qui dispose d'un champ d'horodatage.</p>
<p>L'idée serait de regrouper les messages par trimestres par exemple. Ça devrait rendre beaucoup plus rapides certaines requêtes SELECT basés sur l'horodatage.</p>
<a name="Début-danalyse"></a>
<h2 >Début d'analyse<a href="#Début-danalyse" class="wiki-anchor">¶</a></h2>
<p>Avec le module pg_stat_statements activé depuis un bon moment maintenant, on peut avoir un aperçu des requêtes les plus fréquentes et leurs durées moyennes d'exécution.<br /><em>Je filtre les requêtes qui correspondent aux backups et à la métrologie. Leurs durées d'exécution nous importent peu.</em></p>
<pre>postgres=# SELECT
substring(query, 1, 120) as short_query,
ROUND(total_exec_time :: numeric, 2) AS total_time,
calls,
ROUND(mean_exec_time :: numeric, 2) AS mean,
ROUND (
( 100 * total_exec_time / SUM (total_exec_time :: numeric) OVER () ) :: numeric,
2
) AS percentage_overall
FROM pg_stat_statements
WHERE calls > 10
AND query NOT LIKE 'COPY %'
AND query NOT LIKE '% where peer not like %'
AND query NOT LIKE 'alter database %'
ORDER BY total_time DESC
LIMIT 20;
short_query | total_time | calls | mean | percentage_overall
--------------------------------------------------------------------------------------------------------------------------+-------------+---------+--------+--------------------
SELECT COUNT(*) FROM archive WHERE username=$1 and server_host=$2 | 30119788.74 | 357780 | 84.19 | 60.09
SELECT timestamp, xml, peer, kind, nick FROM (SELECT timestamp, xml, peer, kind, nick FROM archive WHERE username=$1 an | 5670916.86 | 96454 | 58.79 | 11.31
INSERT INTO archive(username, server_host, timestamp, peer, bare_peer, xml, txt, kind, nick) VALUES ($1, $2, $3, $4, $5, | 2507067.71 | 669008 | 3.75 | 5.00
SELECT timestamp, xml, peer, kind, nick FROM archive WHERE username=$1 and server_host=$2 AND timestamp > $3 ORDER BY t | 2436240.96 | 346850 | 7.02 | 4.86
select feature from caps_features where node=$1 and subnode=$2 | 712322.72 | 216250 | 3.29 | 1.42
insert into caps_features(node, subnode, feature) values ($1, $2, $3) | 616188.86 | 34179 | 18.03 | 1.23
INSERT INTO spool(username, server_host, xml) VALUES ($1, $2, $3) | 589124.91 | 89893 | 6.55 | 1.18
select name, val from pubsub_node_option where nodeid=$1 | 572234.72 | 6463986 | 0.09 | 1.14
SELECT COUNT(*) FROM archive WHERE username=$1 and server_host=$2 and bare_peer=$3 and timestamp >= $4 and timestamp <= | 565019.23 | 179901 | 3.14 | 1.13
select password, serverkey, salt, iterationcount from users where username=$1 and server_host=$2 | 520670.40 | 121422 | 4.29 | 1.04
select itemid, publisher, creation, modification, payload from pubsub_item where nodeid=$1 | 435599.69 | 2176425 | 0.20 | 0.87
WITH upsert AS (UPDATE last SET seconds=$1, state=$2 WHERE username=$3 AND server_host=$4 RETURNING *) INSERT INTO last( | 400578.15 | 1146 | 349.54 | 0.80
select node, parent, plugin, nodeid from pubsub_node where host=$1 | 266939.35 | 538148 | 0.50 | 0.53
SELECT COUNT(*) FROM archive WHERE username=$1 and server_host=$2 and timestamp <= $3 | 261728.44 | 1068 | 245.06 | 0.52
delete from spool where username=$1 and server_host=$2 | 254015.13 | 163593 | 1.55 | 0.51
select node, plugin, i.nodeid, affiliation from pubsub_state i, pubsub_node n where i.nodeid = n.nodeid and jid=$1 and h | 248160.76 | 203433 | 1.22 | 0.50
select username, jid, nick, subscription, ask, askmessage, server, subscribe, type from rosterusers where username=$1 an | 239060.98 | 191271 | 1.25 | 0.48
WITH upsert AS (UPDATE pubsub_item SET publisher=$1, modification=$2, payload=$3 WHERE nodeid=$4 AND itemid=$5 RETURNING | 233871.77 | 1397 | 167.41 | 0.47
SELECT timestamp, xml, peer, kind, nick FROM (SELECT timestamp, xml, peer, kind, nick FROM archive WHERE username=$1 an | 228362.38 | 4484 | 50.93 | 0.46
select itemid, publisher, creation, modification, payload from pubsub_item where nodeid=$1 order by creation asc | 221947.50 | 179670 | 1.24 | 0.44
(20 lignes)
</pre>
<p>Les cas d'usage typiques que je pense avoir identifiés :</p>
<ul>
<li>une appli se déconnecte/reconnecte, même brièvement, elle vérifie immédiatement si son historique de discussion est à jour => "SELECT <abbr title="*">COUNT</abbr> FROM archive" </li>
<li>pareil, mais en pire, si un utilisateur configure son compte XMPP déjà existant sur un nouvel appareil, celui-ci va potentiellement chercher à récupérer tout l'historique de ce compte</li>
<li>un utilisateur rallume un appareil inactif depuis longtemps, l'appli va interroger MAM pour récupérer tous les messages qui ont été archivés depuis tout ce temps : "SELECT .... FROM archive WHERE timestamp >= ...." </li>
<li>un utilisateur reçoit ou envoie un message => "INSERT INTO archive ..." </li>
<li>un utilisateur rejoint un salon existant => "SELECT <abbr title="*">COUNT</abbr> ... FROM archive WHERE " </li>
<li>certaines applis ne récupère l'historique que au fil de l'eau, lorsque l'utilisateur scrolle vers le haut : "SELECT .... FROM archive WHERE timestamp >= .... AND timestamp <= ..."</li>
</ul>
<a name="Plan-daction"></a>
<h2 >Plan d'action<a href="#Plan-daction" class="wiki-anchor">¶</a></h2>
<p>Yapuka ;)</p>
xmpp.chapril.org - Demande #5907 (En cours de traitement): Trouver un remplaçant pour Blabber, et...
https://redmine.april.org/issues/5907
2022-06-09T06:17:26Z
pitchum .
<p>Blabber ayant été supprimé du playstore, il mettre à jour le tuto actuel.</p>
<p>Parmi les clients XMPP disponibles gratuitement sur playstore :</p>
<ul>
<li>c0nnect : c'est un autre fork de Converstations, mais la licence n'est pas claire du tout (en fait je ne l'ai pas trouvée, ni le code source)</li>
<li>Stork IM : édité par Tigase (comme Siskin sur iPhone), licence claire, mais l'ergonomie semble avoir 20 ans de retard :(</li>
<li>yaxim/bruno : licence claire, mais ergonomie ayant 20 ans de retard également :(</li>
</ul>
<p>Une autre possibilité serait d'inciter à installer blabber depuis git :<br /><a class="external" href="https://codeberg.org/kriztan/blabber.im/releases">https://codeberg.org/kriztan/blabber.im/releases</a></p>
<p>Cela implique la manipulation inquiétante qui consiste à "autoriser l'installation d'applications non sûres" (comme pour installer f-droid en fait).</p>
xmpp.chapril.org - Demande #5614 (Nouveau): Rendre le service XMPP joignable sur le port 443
https://redmine.april.org/issues/5614
2021-10-06T18:41:40Z
pitchum .
<p>Ça permettrait de rendre le service utilisable depuis certains campus universitaires par exemple, où la connectivité vers internet est très limitée.<br />Ça impliquerait de publier des méta-données sur <a class="external" href="https://chapril.org/.well-known/host-meta">https://chapril.org/.well-known/host-meta</a> et d'activer un module nginx <a href="https://wiki.xmpp.org/web/Tech_pages/XEP-0368#nginx" class="external">stream_ssl_preread</a> sur bastion.</p>
Infra Chapril - Demande #5466 (En cours de traitement): Maîtriser l'espace disque utilisé par Gra...
https://redmine.april.org/issues/5466
2021-07-12T21:26:56Z
pitchum .
<p>Les outils de métrologie de l'ancien temps que je connais (munin et cacti) utilisent des bases de données RRD dont la taille n'augmente jamais. Pour que ça fonctionne il faut que les données collectées et affichées soient dégradées en qualité au fil du temps.<br />Par exemple, le graph CPU sur la journée a une précision à la minute alors que le graph CPU au mois à une précision à la journée.</p>
<p>Visiblement, ce mécanisme de dégradation n'est pas automatique avec influxDB. Il faut le faire soi-même, en créant les "retention policies" et "continuous queries" kivonbien© (cf. le guide du <a href="https://docs.influxdata.com/influxdb/v1.8/guides/downsample_and_retain/" class="external">downsampling avec influxdb</a> )</p>
<p>Ce guide m'a découragé, car il laisse à penser que pour chaque métrique, il faut créer une "continuous query" à la main... <br />Mais je suis tombé sur cet échange de mailing-list qui me redonne espoir :<br /><a class="external" href="https://www.mail-archive.com/influxdb@googlegroups.com/msg03033.html">https://www.mail-archive.com/influxdb@googlegroups.com/msg03033.html</a></p>
<p>Il semble possible de faire du downsampling de masse sans trop d'efforts. Piste à explorer, donc...</p>
xmpp.chapril.org - Demande #5464 (En cours de traitement): Créer une page d'invitation
https://redmine.april.org/issues/5464
2021-07-11T08:11:54Z
Anonyme
<p>Fournir un service francophone équivalent à <a class="external" href="https://blabber.im/b/benutzer@example.org">https://blabber.im/b/benutzer@example.org</a> pour faciliter l'invitation de ses contacts à passer à XMPP.<br />Le lien court est facilement mémorisable et communicable (SMS, signature de mél...), la page est très simple pour être accessible à tous sur tout type de support.</p>
<p>En bref la page dit :<br />Déménagé !<br />Je suis désormais joignable via un opérateur de messagerie indépendante; mon adresse est xxx.<br />Voici comment me joindre :<br />1) télécharger l'app et créer un compte<br />2) ajouter xxx aux contacts</p>
xmpp.chapril.org - Tâche récurrente #4047 (En cours de traitement): Rapport d'activité XMPP
https://redmine.april.org/issues/4047
2019-11-27T19:58:33Z
pitchum .
Infra Chapril - Demande #3145 (Nouveau): Faut-il renforcer l'isolation des applications PHP sur l...
https://redmine.april.org/issues/3145
2018-05-10T07:02:20Z
Christian P. Momon
cmomon@april.org
<p>Actuellement, sur la VM lamp, il n'y a pas de restriction d'accès entre application PHP installée.<br />C'est à dire que le code PHP d'une application peut accéder aux fichiers d'une autre application, et même de tout le système.<br />Exemple : <a class="external" href="https://date.chapril.org/test.php">https://date.chapril.org/test.php</a> (qui accède à un fichier dans paste.chapril.org).</p>
<p>D'expérience, il est d'usage d'utiliser la directive <strong>open_basedir</strong> pour augmenter la sécurité : <a class="external" href="http://php.net/manual/fr/ini.core.php#ini.open-basedir">http://php.net/manual/fr/ini.core.php#ini.open-basedir</a></p>
<p>De son côté, Didier remonte que la procédure d'installation de paste.chapril.org cite PHP-FPM : <a class="external" href="https://php-fpm.org/">https://php-fpm.org/</a></p>
<p>Pour information : <a class="external" href="https://paste.chapril.org/phpinfo.php">https://paste.chapril.org/phpinfo.php</a></p>
<p>Question : quel niveau d'isolation voulons-nous ?<br />1) par défaut : on a confiance dans le code et ce n'est pas grave ;<br />2) open_basedir : c'est le minimum chez les professionnels ;<br />3) php-fpm : le maximum est le mieux.</p>
<p>Je suis d'avis d'appliquer open_basedir.</p>
<p>Votre avis ?</p>
status.chapril.org - Demande #3127 (Nouveau): Déplacer status.chapril.org sur une machine hors de...
https://redmine.april.org/issues/3127
2018-05-05T16:57:34Z
Vincent-Xavier JUMEL
<p>Lors d'une bascule, donc d'un incident, le page de status.chapril.org devient potentiellement non accessible.</p>