70. pepsi-archive¶
Durchsuchen, exportieren, importieren, löschen und reparieren des Mailinglisten-Archivs.
70.1. Aufgabe¶
pepsi-archive ist das Kommandozeilenwerkzeug des Betreibers für das Mailinglisten-Archiv. Es verbindet sich über den gemeinsamen Abschnitt [pepsi-postgres] und wechselt, als root gestartet, vor dem Verbinden auf das Dienstkonto pepsi, sodass kein sudo -u pepsi nötig ist. Es ist nicht setuid und darf nicht dazu gemacht werden. Referenz: pepsi-archive(1).
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, urheberrechtlich geschützt durch die Free Software Foundation und ihre Beitragenden, unter der GPL. Siehe Archive, wo das ausführlicher steht und benannt ist, was übernommen wurde.
70.2. Der Befehl, für den es existiert¶
purge ist der Befehl, für den es dieses Werkzeug gibt: eine versehentlich gesendete Nachricht aus einem öffentlichen Archiv entfernen. Er löscht die Nachricht, ihre Anhänge und ihre Bewertungen, 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, [pepsi-list] TOMBSTONE_RETENTION Tage lang aufbewahrt (Standard 90) –, während dessen das Archiv sich weigert, diese Nachricht erneut zu speichern. Es gibt genau zwei Wege, auf denen eine gelöschte Nachricht zurückkommt, eine erneute Zustellung und ein erneuter Import, und beide sind Versehen. --forget überspringt den Grabstein.
70.3. Befehle¶
search QUERY – sucht als Betreiber, der jede Liste sieht.
--listbegrenzt die Suche, was schneller (eine Partition) und besser ist (das Sprachwörterbuch der Liste selbst). Die Ausgabe nennt, welcher Mechanismus geantwortet hat, und sagt es, wenn die Liste Nachrichtentexte nicht für die Teilzeichenfolgensuche indiziert.show LIST ID – gibt eine archivierte Nachricht aus. ID darf eine
Message-ID, ein Message-ID-Hash oder eine Archiv-URL sein, die einen enthält.export
--listADDRESS – schreibt das Archiv der Liste auf die Standardausgabe, alsmboxrd-mbox, älteste zuerst;--since/--untilnehmen Zeitstempel nach RFC 3339.import
--listADDRESS FILE… – importiert mbox-Dateien; siehe unten.expire
--listADDRESS--beforeTIMESTAMP — löscht in Stapeln alles, was älter als der Zeitstempel ist. In Stapeln, weil das Prädikat ein Datum ist, die Partitionierung aber nach Liste erfolgt und daher nicht beschneiden kann: eine einzige Anweisung über ein Jahr einer belebten Liste würde eine lange Transaktion offen halten. Der Aufbewahrungslauf vonpepsi-list tasks --onceführt dieselbe Löschung täglich für jede Liste mit einer Aufbewahrungsfrist aus (siehe Archive).reindex – baut
search_textundtrgm_textneu auf. So wird eine geänderte Trigramm-Stufe wirksam, in beide Richtungen und ohne Schemaänderung.recount – baut die Zählerspalten aus den Datensätzen selbst neu auf; die Reparatur für den einen dokumentierten Weg, sie zu beschädigen, nämlich direkt in die Archivtabellen zu schreiben.
rebuild-threads – hängt Antworten wieder an, deren Elternnachricht nach ihnen eintraf, und numeriert jeden Thread neu. Upstream lässt diese Threads für immer getrennt; das hier ist die Reparatur.
70.4. Import und die Rundreise¶
import ist der allgemeine Weg in das Archiv und die andere Hälfte der export-Rundreise – die der denkbar günstigste Test für beide ist.
Die mbox-Reparaturen stecken im Leser, nicht in einem gesonderten Skript, an das ein Betreiber sich erinnern 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 Bytes der Nachricht selbst erzeugt, ein erneuter Anlauf eines abgebrochenen Imports erzeugt daher dieselbe ID und kein Duplikat. Die Form <abc@host> (added by postmaster@…) wird repariert; ein fehlendes Date fällt auf die Umschlagzeile der mbox zurück; ein umgebrochener Subject wird zusammengefügt; und Content-Length wird verworfen, weil es eine Rahmung beschrieb, die es außerhalb der mbox nicht gibt.
Threads werden am Ende automatisch wieder zusammengehängt und neu numeriert (sofern nicht --no-rebuild). Ein Import in falscher Reihenfolge lässt sie sonst getrennt – was im Stapelbetrieb von upstream geschieht und jahrelang niemandem auffällt.
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 Fehlerstatus, sofern --skip-bad nicht sagt, dass der Verlust erwartet ist. Ein erneuter Anlauf ist gefahrlos, denn jede Nachricht ist über ihre Message-ID idempotent; die Wiederaufnahme hängt am Inhalt und nicht am Zeitstempel einer Datei.
70.5. Konfiguration¶
[pepsi-list]: SEARCH_TRIGRAM — die serverweite Obergrenze für die Stufe der Teilzeichenfolgensuche (off, standardmäßig short oder full), bis zu der eine Liste mit pepsi-list list set-ext wählt; TOMBSTONE_RETENTION in Tagen, von pepsi-list tasks --once weggeräumt; ARCHIVE_RETENTION in Tagen, der Standardwert, den der Aufbewahrungslauf von pepsi-list tasks --once auf eine Liste ohne eigenes archive_retention_days anwendet (0, der Standard, behält alles); und ARCHIVE_PARTITIONS, das pepsi-setup zum Anlegen der Partitionen verwendet (und mit dem pepsi-list check sie vergleicht) und das bei der Installation festgelegt wird, weil PostgreSQL keine Neupartitionierung im Betrieb kennt.
70.6. Siehe auch¶
Archive, Mailinglisten, pepsi-list, pepsi-stage-list-post, pepsi-httpd, pepsi-archive(1).