70. pepsi-archive

Rechercher, exporter, importer, supprimer et réparer les archives de listes de diffusion.

70.1. Rôle

pepsi-archive est l’outil en ligne de commande de l’exploitant pour les archives de listes de diffusion. Il se connecte via la section partagée [pepsi-postgres] et, lancé en tant que root, passe au compte de service pepsi avant de se connecter, si bien qu’aucun sudo -u pepsi n’est nécessaire. Il n’est pas setuid et ne doit pas le devenir. Référence : pepsi-archive(1).

Les archives sont une réimplémentation de HyperKitty, l’archiveur de GNU Mailman 3 : son modèle de données, ses règles de constitution des fils, son hachage de Message-ID et son schéma d’URL sont ceux d’amont, dont la Free Software Foundation et ses contributeurs détiennent les droits, sous licence GPL. Voir Archives, qui le dit plus longuement et nomme ce qui a été repris.

70.2. La commande pour laquelle il existe

purge est la commande pour laquelle cet outil existe : retirer d’une archive publique un message que quelqu’un a envoyé par accident. Elle supprime le message, ses pièces jointes et ses votes, renumérote le fil, répare les compteurs et écrit un enregistrement event_log nommant qui l’a fait.

Elle laisse une pierre tombale – la Message-ID, conservée [pepsi-list] TOMBSTONE_RETENTION jours (90 par défaut) – pendant lesquels les archives refusent de stocker ce message à nouveau. Il n’y a exactement que deux façons pour un message supprimé de revenir, une remise répétée et un import rejoué, et les deux sont des accidents. --forget saute la pierre tombale.

70.3. Commandes

  • search QUERY – recherche en tant qu’exploitant, qui voit toutes les listes. --list restreint la recherche, ce qui est à la fois plus rapide (une seule partition) et meilleur (le dictionnaire de langue propre à la liste). La sortie indique quel mécanisme a répondu, et le dit lorsque la liste n’indexe pas le corps des messages pour la recherche de sous-chaîne.

  • show LIST ID – affiche un message archivé. ID peut être une Message-ID, un hachage de Message-ID ou une URL d’archives en contenant un.

  • export --list ADDRESS – écrit les archives de la liste sur la sortie standard, en mbox mboxrd, du plus ancien au plus récent ; --since / --until prennent des horodatages RFC 3339.

  • import --list ADDRESS FILE… – importe des fichiers mbox ; voir plus bas.

  • expire --list ADDRESS --before TIMESTAMP — supprime par lots tout ce qui est antérieur à l’horodatage. Par lots, car le prédicat est une date alors que le partitionnement se fait par liste : il ne peut donc pas élaguer, et une seule instruction sur une année d’une liste active tiendrait une longue transaction. Le balayage de rétention de pepsi-list tasks --once exécute chaque jour la même suppression pour chaque liste dotée d’une rétention (voir Archives).

  • reindex – reconstruit search_text et trgm_text. C’est ainsi qu’un changement de palier de trigrammes prend effet, dans les deux sens et sans changement de schéma.

  • recount – reconstruit les colonnes de compteurs à partir des enregistrements eux-mêmes ; la réparation de la seule façon documentée de les casser, à savoir écrire directement dans les tables d’archives.

  • rebuild-threads – rattache les réponses dont le parent est arrivé après elles et renumérote chaque fil. Amont laisse ces fils scindés pour toujours ; ceci est la réparation.

70.4. L’import, et l’aller-retour

import est le chemin universel vers les archives et l’autre moitié de l’aller-retour avec export – qui est le test le moins coûteux possible des deux.

Les réparations mbox sont dans le lecteur, et non dans un script séparé dont un exploitant doit se souvenir. Une ligne de corps commençant par From `` ne scinde pas un message : un séparateur doit suivre une ligne vide *et* porter une année à quatre chiffres. Une ``Message-ID manquante est produite de façon déterministe à partir des octets du message lui-même, si bien que reprendre un import interrompu produit le même identifiant et non un doublon. La forme <abc@host> (added by postmaster@…) est réparée ; une Date manquante se rabat sur la ligne d’enveloppe mbox ; un Subject replié est rejoint ; et Content-Length est écarté, car il décrivait un cadrage qui n’existe plus une fois le message sorti de la mbox.

Les fils sont rattachés et renumérotés à la fin, automatiquement (sauf --no-rebuild). Sinon, un import en désordre les laisse scindés – ce qui se produit avec le mode par lots d’amont et que personne ne remarque pendant des années.

Un message qui ne peut pas être importé est signalé : dans --rejects lorsqu’un fichier est nommé, et sur la sortie d’erreur sinon, et la commande sort avec un état non nul à moins que --skip-bad n’indique que la perte est attendue. Reprendre est sans danger, car chaque message est idempotent sur sa Message-ID : la reprise s’appuie sur le contenu et non sur l’horodatage d’un fichier.

70.5. Configuration

[pepsi-list] : SEARCH_TRIGRAM — le plafond du serveur pour le palier de recherche de sous-chaîne (off, short par défaut, ou full), jusqu’auquel une liste choisit avec pepsi-list list set-ext ; TOMBSTONE_RETENTION en jours, balayé par pepsi-list tasks --once ; ARCHIVE_RETENTION en jours, la valeur par défaut que le balayage de rétention de pepsi-list tasks --once applique à une liste sans son propre archive_retention_days (0, la valeur par défaut, conserve tout) ; et ARCHIVE_PARTITIONS, utilisé par pepsi-setup pour créer les partitions (et comparé à celles-ci par pepsi-list check) et fixé à l’installation, car PostgreSQL ne sait pas repartitionner à chaud.

70.6. Voir aussi

Archives, Listes de diffusion, pepsi-list, pepsi-stage-list-post, pepsi-httpd, pepsi-archive(1).