85.1.48. pepsi-archive

search, export, purge and repair the mailing-list archive

Handbuchabschnitt:

1

85.1.48.1.1. Name

pepsi-archive - das Werkzeug des Operators für das Mailinglisten-Archiv von Pepsi.

85.1.48.1.2. Übersicht

pepsi-archive [GLOBALE-OPTIONEN] search ABFRAGE [–list ADRESSE] [–limit N]
pepsi-archive [GLOBALE-OPTIONEN] show LISTE MESSAGE-ID|HASH
pepsi-archive [GLOBALE-OPTIONEN] export –list ADRESSE [–since TS] [–until TS]
pepsi-archive [GLOBALE-OPTIONEN] purge –list ADRESSE ID [–forget]
pepsi-archive [GLOBALE-OPTIONEN] expire –list ADRESSE –before TS
pepsi-archive [GLOBALE-OPTIONEN] reindex [–list ADRESSE]
pepsi-archive [GLOBALE-OPTIONEN] recount [–list ADRESSE]
pepsi-archive [GLOBALE-OPTIONEN] rebuild-threads [–list ADRESSE]
pepsi-archive [GLOBALE-OPTIONEN] import –list ADRESSE [–skip-bad] [–rejects DATEI] [–no-rebuild] DATEI…

85.1.48.1.3. Beschreibung

pepsi-archive ist das Kommandozeilenwerkzeug des Operators für das Mailinglisten-Archiv. Es verbindet sich über den gemeinsamen Abschnitt [pepsi-postgres] und läuft, wenn es als root gestartet wird, als Dienstkonto pepsi weiter. Es ist nicht setuid und darf es nicht werden.

Das Archiv ist eine Neuimplementierung von HyperKitty aus GNU Mailman 3: Sein Datenmodell, seine Threading-Regeln, sein Message-ID-Hash und sein URL-Schema sind die von upstream, Copyright der Free Software Foundation und ihrer Mitwirkenden, damit die Archivlinks einer migrierten Installation weiter funktionieren. Das Kapitel Archive des Handbuchs sagt, wofür jeder der beiden Suchmechanismen taugt und was ein Purge löscht und was nicht.

85.1.48.1.4. Wofür es existiert

purge ist der Befehl, für den dieses Werkzeug existiert: eine Nachricht, die jemand versehentlich gesendet hat, aus einem öffentlichen Archiv zu entfernen. Er löscht die Nachricht, ihre Anhänge und ihre Stimmen, nummeriert den Thread neu, repariert die Zähler und schreibt einen event_log-Datensatz, der nennt, wer es getan hat.

Er hinterlässt einen Grabstein: die Message-ID, aufbewahrt für [pepsi-list] TOMBSTONE_RETENTION Tage (Standard 90), während derer sich das Archiv weigert, diese Nachricht erneut zu speichern. Es gibt genau zwei Wege, auf denen eine gelöschte Nachricht zurückkommt — eine erneute Zustellung und ein wiederholter Import —, und beide sind Versehen. --forget lässt den Grabstein weg.

85.1.48.1.5. Befehle

search ABFRAGE

Sucht als Operator, der jede Liste sieht. --list beschränkt die Suche, was sowohl schneller (eine Partition) als auch besser (das eigene Sprachwörterbuch der Liste) ist. Die Ausgabe sagt, welcher Mechanismus geantwortet hat, und sagt es, wenn die Liste Nachrichtentexte nicht für die Teilzeichenkettensuche indiziert.

show LISTE ID

Gibt eine archivierte Nachricht aus. ID kann eine Message-ID, ein Message-ID-Hash oder eine Archiv-URL sein, die einen solchen enthält.

export --list ADRESSE

Schreibt das Archiv der Liste als mboxrd-Mbox auf die Standardausgabe, die älteste Nachricht zuerst. --since und --until nehmen Zeitstempel nach RFC 3339.

purge --list ADRESSE ID [--forget]

Siehe oben.

expire --list ADRESSE --before ZEITSTEMPEL

Löscht alles, was älter als der Zeitstempel ist, in Stapeln. In Stapeln, weil das Prädikat ein Datum ist, die Partitionierung aber nach Liste erfolgt, sodass nicht beschnitten werden kann: Eine einzige Anweisung über ein Jahr einer belebten Liste würde eine lange Transaktion halten. Dieselbe Löschung läuft planmäßig als Aufbewahrungs-Sweep von pepsi-list tasks --once (die Unit pepsi-list-tasks.timer), für jede Liste mit einer Aufbewahrungsfrist; siehe ARCHIVE_RETENTION unten.

reindex [--list ADRESSE]

Baut search_text und trgm_text neu auf. So wird eine geänderte Trigramm-Stufe wirksam, in beide Richtungen und ohne Schemaänderung.

recount [--list ADRESSE]

Baut die Zählerspalten aus den Datensätzen selbst neu auf. Die Reparatur für den einen dokumentierten Weg, sie zu beschädigen: direkt in die Archivtabellen zu schreiben.

rebuild-threads [--list ADRESSE]

Hängt Antworten wieder an, deren Elternnachricht nach ihnen eintraf, und nummeriert jeden Thread neu. Upstream lässt diese Threads für immer getrennt; dies ist die Reparatur.

import --list ADRESSE [--skip-bad] [--rejects DATEI] [--no-rebuild] DATEI…

Importiert eine oder mehrere Mbox-Dateien in eine Liste. Der universelle Weg und die andere Hälfte des export-Rundlaufs — der der billigste mögliche Test beider ist.

Die Reparaturen stecken im Leser, nicht in einem separaten Skript, an das ein Operator denken muss: Eine Textzeile, die mit From `` beginnt, teilt keine Nachricht (ein Trenner muss auf eine Leerzeile folgen *und* eine vierstellige Jahreszahl tragen); eine fehlende ``Message-ID wird deterministisch aus den eigenen Bytes der Nachricht erzeugt, sodass die Wiederholung eines unterbrochenen Imports dieselbe ID statt eines Duplikats erzeugt; <abc@host> (added by postmaster@…) wird repariert; ein fehlendes Date fällt auf die Umschlagzeile der Mbox zurück; ein gefaltetes Subject wird zusammengefügt; und Content-Length wird verworfen, weil es eine Rahmung beschrieb, die nicht mehr existiert, sobald die Nachricht aus der Mbox heraus ist.

Threads werden am Ende automatisch wieder angehängt und neu nummeriert. Ein Import in falscher Reihenfolge lässt sie sonst getrennt — was mit dem Stapelmodus von upstream passiert und was jahrelang niemand bemerkt.

Eine Nachricht, die nicht importiert werden kann, wird gemeldet, an --rejects, wenn eine Datei genannt ist, und sonst auf die Standardfehlerausgabe, und der Befehl endet mit einem Wert ungleich null, es sei denn, --skip-bad sagt, dass der Verlust erwartet ist. Eine Wiederholung ist sicher: Jede Nachricht ist über ihre Message-ID idempotent, sodass die Wiederaufnahme sich am Inhalt statt am Zeitstempel einer Datei orientiert.

85.1.48.1.6. Konfiguration

[pepsi-list]

SEARCH_TRIGRAM

Serverweite Obergrenze für die Stufe der Teilzeichenkettensuche: off, short (Standard) oder full. Eine Liste wählt bis zu ihr mit pepsi-list list set-ext.

TOMBSTONE_RETENTION

Wie lange ein Purge-Grabstein aufbewahrt wird, in Tagen (Standard 90). Der Sweep, der abgelaufene entfernt, läuft in pepsi-list tasks --once.

ARCHIVE_RETENTION

Die Archiv-Aufbewahrungsfrist der Installation in Tagen, angewandt vom Aufbewahrungs-Sweep von pepsi-list tasks --once: Das eigene archive_retention_days einer Liste (gesetzt mit pepsi-list list set-ext) gewinnt, 0 eingeschlossen; eine Liste ohne eines verwendet diesen Wert, dessen eigener Standard 0 ist; und 0 behält alles.

ARCHIVE_PARTITIONS

Verwendet von pepsi-setup(1), das die Partitionen anlegt, und mit ihnen verglichen von pepsi-list check. Bei der Installation festgelegt: PostgreSQL kennt keine Neupartitionierung im laufenden Betrieb.

85.1.48.1.7. Rückgabewert

Ungleich null bei einem Konfigurations- oder Datenbankfehler oder wenn die genannte Nachricht nicht existiert. Ein Verb, das nichts zu tun fand, ist kein Fehler.

85.1.48.1.8. Siehe auch

pepsi-list(1), pepsi-stage-list-post(1), pepsi-stage-list(1), pepsi-setup(1), pepsi.conf(5).