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¶
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.
--listbeschrä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
--listADRESSE Schreibt das Archiv der Liste als
mboxrd-Mbox auf die Standardausgabe, die älteste Nachricht zuerst.--sinceund--untilnehmen Zeitstempel nach RFC 3339.- purge
--listADRESSE ID [--forget] Siehe oben.
- expire
--listADRESSE--beforeZEITSTEMPEL 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; sieheARCHIVE_RETENTIONunten.- reindex [
--listADRESSE] Baut
search_textundtrgm_textneu auf. So wird eine geänderte Trigramm-Stufe wirksam, in beide Richtungen und ohne Schemaänderung.- recount [
--listADRESSE] 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 [
--listADRESSE] 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
--listADRESSE [--skip-bad] [--rejectsDATEI] [--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-IDwird 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 fehlendesDatefällt auf die Umschlagzeile der Mbox zurück; ein gefaltetesSubjectwird zusammengefügt; undContent-Lengthwird 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-badsagt, dass der Verlust erwartet ist. Eine Wiederholung ist sicher: Jede Nachricht ist über ihreMessage-IDidempotent, sodass die Wiederaufnahme sich am Inhalt statt am Zeitstempel einer Datei orientiert.
85.1.48.1.6. Konfiguration¶
[pepsi-list]
SEARCH_TRIGRAMServerweite Obergrenze für die Stufe der Teilzeichenkettensuche:
off,short(Standard) oderfull. Eine Liste wählt bis zu ihr mitpepsi-list list set-ext.TOMBSTONE_RETENTIONWie lange ein Purge-Grabstein aufbewahrt wird, in Tagen (Standard 90). Der Sweep, der abgelaufene entfernt, läuft in
pepsi-list tasks --once.ARCHIVE_RETENTIONDie Archiv-Aufbewahrungsfrist der Installation in Tagen, angewandt vom Aufbewahrungs-Sweep von
pepsi-list tasks --once: Das eigenearchive_retention_dayseiner Liste (gesetzt mitpepsi-list list set-ext) gewinnt,0eingeschlossen; eine Liste ohne eines verwendet diesen Wert, dessen eigener Standard0ist; und0behält alles.ARCHIVE_PARTITIONSVerwendet 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).