Jahrestag: GOV-Inhalte werden im GenWiki nicht mehr angezeigt

Hallo zusammen,

im laufenden Monat jährt es sich, dass die GOV-Inhalte im
GenWiki nicht mehr angezeigt werden. Betroffen sind neben
allen Ortsartikeln auch die Artikel zu Familiennamen und
vielleicht auch noch einige andere - es ist also sicherlich
eine 5stellige Zahl.

Die Ursache für die Anzeige „Request failed“ scheint nach
den Aussagen in der gestrigen TEAM-Sitzung im technischen
Bereich, also dem Zusammenspiel einzelner technischer
Komponenten zu liegen.

Benötigt wird daher jemand aus dem Technik-Team, der sich
der Sache von dieser Warte her annimmt:

Über welche Systeme läuft die Abfrage?
Welche Skripte werden abgearbeitet?
Welche Berechtigungen und welche Ressourcen werden im Ablauf
benötigt und angefordert?

Ich spreche sicher einigen aus dem Herzen, die eine
funktionierende GOV-Abfrage als dringenden Neujahrswunsch
auf ihrem Zettel haben.

Herzliche Grüße
Ernst-Peter (Winter)

4 „Gefällt mir“

Die Abfrage wird vom GenWiki nie abgeschickt. Es wird jemand benötigt, der sich mit PHP auskennt. Dann muss man sich per SSH auf dem GenWiki-Test-Server einloggen und dort die Änderungen vornehmen. Oder man macht es im Dialog mit @robertpaessler.

Der Einfachheit halber ist hier der betreffende PHP-Code aus der Datei genwiki/mediawiki/extensions/Gov/Gov.php:

<?php

require_once('HttpClient.class.php');

$wgExtensionFunctions[] = "wfGovExtension";

function wfGovExtension() {
        global $wgParser;
        $wgParser->setHook( "gov", "completeGovTable" );
}

function completeGovTable( $text, $args, $parser ) {
        global $wgLanguageCode,$wgParser;

        $objectId = $parser->recursiveTagParse($text);

        if( $objectId == '' ) {
                return '<p>Für diesen Artikel wurde noch keine GOV-Kennung eingetragen.</p>';
        }

        $client = new HttpClient('gov.genealogy.net');
        $client->accept_language=$wgLanguageCode;
        if (!$client->get('/item/wikihtml/'.$objectId)) {
                return '<p>Request failed!</p>';
        } else {
                $content = $client->getContent();

                # Links auf Objekte im GOV durch Links im GenWiki ersetzen
                $content = preg_replace('/href="\//','href="http://gov.genealogy.net/',$content);
                $content = preg_replace('/src="\//','src="http://gov.genealogy.net/',$content);
                $content = preg_replace('/http:\/\/gov.genealogy.net\/item\/show\//','/GOV:',$content);

                # den letzten verbleibenden externen GOV-Link als extern markieren
                $content = preg_replace("/href=.\/GOV:$objectId/"," class=\"external free\" href=\"http://gov.genealogy.net/item/show/$objectId",$content);

                # Tabelle mit untergeordneten Objekten hübsch und sortierbar machen
                $content = preg_replace('/<table>/','<table class="wikitable sortable">',$content);

                # Nachsehen, ob es die Umleitung im GOV-Namensraum auf diese Seite schon gibt.
                $redirectTitle = Title::newFromText($objectId,NS_GOV);
                if( $redirectTitle!=NULL && !$redirectTitle->exists() ) {
                        $content .= $wgParser->parse("[[GOV:$objectId|Umleitung fehlt]]",$wgParser->mTitle, $wgParser->mOptions, false, false)->getText();
                }
                return $content;
        }
}
?>

Welche Gründe kann es geben, das die ganz Sache im alten GenWiki funktioniert hat? Hat, weil seit dem Update des GOV geht es hier auch nicht mehr.

Uralte PHP Version. Das alte GenWiki lief mit PHP 5.4.45. Dafür gab es nur bis zum 3. September 2015 Sicherheitsupdates. Daher war es auch so wichtig, dass wir das GenWiki auf eine neue Version migrieren. Aktuell ist PHP 8.

Hat man schon ein Netzwerkproblem zwischen dem GOV-Server und dem
Genwiki-Server ausgeschlossen?

Um dies zu tun muss man auf beiden Serven den Netzwerkverkehr
protokollieren, z.B. mit Wireshark. Den Output muss man entsprechend
analysieren: Wo ist die Verbindung / der Protokoll-Austausch gestört?

Dazu bedarf es sehr tiefgreifender Netzwerkkenntnisse.

Gruß
Werner

Ich habe jetzt den Thread wiedergefunden, wo das meiste GenWiki-seitig schon mal untersucht wurde:

Der PHP-Quelltext wurde bereits untersucht:

Robert Päßler schreibt dann am

Auf das Ergebnis von @MinIT warten wir seitdem wohl … Im Mai hatte ich im gleichen Thread noch mal nachgefragt, weiterhin ohne Antwort …

Danach kam noch ein Vorschlag von Werner Rost, der in eine ähnliche Richtung geht:

Und noch eine interessante Beobachtung von Jesper:

Das kann natürlich nur jemand interpretieren, der weiß, ob die beiden Server in unterschiedlichen Netzwerken stehen usw.

Die Untersuchung des Netzverkehrs und möglicher Filter steht weiterhin aus. Falls sie jemals durchgeführt wird, gibt es jedenfalls keine Antwort dazu.

Viele Grüße
Christopher (Ernestus)

Kannst du uns auch diese anzeigen? Oder besser noch, mehr Leuten Zugang geben? Immer dieses Hin und Her über eine Handvoll Leute führt doch nur zu Flschenhälsen.

1 „Gefällt mir“

@jzedlitz , wie hast Du festgestellt, dass die Abfrage nie abgeschickt wird. Wir reden vom aktuell produktiven GenWiki, oder? Es kommt ja die Antwort „Request failed“, also wird doch irgendetwas abgeschickt und mit „Request failed“ beantwortet - oder nicht?

Ok, ich habe mich falsch ausgedrückt. Beim GOV kommt gar keine Anfrage des GenWiki an.

Wenn ich es richtig verstanden habe, dann ging es bis vor kurzem noch im Testsystem. Aber seit einem Jahr nicht mehr im Produktiv-System des GenWiki. Nun aber geht es auch nicht mehr im Testsystem.

Was wurde im Testsystem vor kurzem geändert? Wurde eine neue php-Version aktiviert? Welche laufen wo seit wann? Auf dem Testsystem sollte es leicht sein die PHP-Version zurück zu ändern und zu sehen, ob das was bringt. Dann wüsste man besser, wonach man suchen muss. Oder gab es andere Konfigurationsänderungen?

Wer hat denn damals den PHP-Code entwickelt? Lebt er noch? Gibt es zusätzlich zu den spärlichen Kommentaren im Code noch eine Dokumentation?

Ok. Der GET-Request des GenWiki-Servers wird ja offensichtlich erzeugt, aber es kommt keine oder eine fehlerhafte Antwort vom GOV-Server zurück, deshalb erzeugt das PHP-Skript die Meldung „Request failed“. Wenn die Anfrage beim GOV-Server gar nicht ankommt, wie Du festgestellt hast, liegt das Problem irgendwo dazwischen: Im Netzwerk (wie schon lange vermutet wird und untersucht werden sollte) oder bei den generellen Konfigurationen der beteiligten Server.

1 „Gefällt mir“

Ich weiß nicht, wer den Code entwickelt hat oder folglich auch nicht, ob der noch lebt. Aber der Code macht nichts anderes, als nach dem Tag <gov>…</gov> zu suchen, daraus einen passenden http: GET-Request an den GOV-Server zu basteln, das zurückgelieferte Ergebnis zu formatieren und auszugeben. Das Problem ist, dass dieser Request gar nicht bis zum GOV-Server durchdringt, und zwar, wie wir gesehen haben, nicht abhängig vom PHP-Code, sondern anscheinend abhängig davon, welcher Server den Request absendet.
Daher die immer wieder gestellte, aber nie beantwortete Frage nach Netzwerkproblemen oder Sicherheits-Konfigurationen auf den beteiligten Servern.

Könnte es ein http versus https-Problem sein? Ein Filter in einer Firewall könnte http unterdrücken. Was passiert, wenn man im Code https statt http verwendet?

Die Stelle mit müsste in der Klasse HttpClient bei der Funktion get zu finden sein.

Das habe ich auch vermutet, weshalb ich die
HttpClient.class.php sehen wollte.

Die Datei ist ziemlich groß. Es ist der Incutio HttpClient v0.9 vom 6. April 2003. Vielleicht braucht man das auch alles gar nicht mehr, falls PHP 8 einen eingebauten HTTP Client hat.

Am besten verabreden sich die Interessierten mit @robertpaessler zu einer Arbeitssitzung auf dem GenWiki Testsystem.

Auf dem GOV Server kann man dann nachsehen, ob etwas von wiki-test.genealogy.net ankommt.

tcpdump -i eth0 host 2a01:4f8:c012:df6a::1 or host 23.88.120.228

Wenn meine Recherchen und Versuche richtig sind:

  • Es scheint tatsächlich ein http/https-Problem zu sein:
  • Der GOV-Server leitet http-Anfragen (wie sie derzeit mit dem PHP-Skript auf GenWiki erzeugt werden) mit einem „308 Permanent Redirect“ dauerhaft auf HTTPS um
  • Der Incutio HttpClient v0.9 vom 6. April 2003 sollte in der Lage sein, auch https-Anfragen auszuführen, wenn er entsprechend aufgerufen wird. Im Moment werden ja explizit http-URLs erzeugt bzw. „gov.genealogy.net“ ohne Zusatz aufgerufen, was wohl zu einem http-Request führt. Mit der Zeile
    $client = new HttpClient(‚gov.genealogy.net‘, 443);
    sollte es funktionieren
  • Die http-URL-Bestandteile müssten durch htttps ersetzt werden.
    Wäre es einen Versuch wert, wenn jemand mit Zugriffsrechten die Datei genwiki/mediawiki/extensions/Gov/Gov.php: entsprechend ändert?

Eingebaut nicht. Die Bibliothek der Wahl ist Guzzle.

1 „Gefällt mir“

Es müsste laut Doku auch ohne explizite Port-Angabe gehen:

$client = new HttpClient(„https://gov.genealogy.net“);

Achtung: die Anführungszeichen oben sind falsch.

Stimmt. Und scheinbar werden die Anführungszeichen beim Copy/Paste in Discourse falsch umgesetzt. Danke für den Hinweis.
$client = new HttpClient('https://gov.genealogy.net');

Ich weiß leider nicht wo die Datei liegt und ob ich dort Zugriff haben würde. Ein Ausprobieren sollte leicht sein, da es ja PHP ist, das on the fly interpretiert wird.