OJS und DNB / xMetaDissPlus

#27

Ja, damit haben wir aktuell ein Problem. Zeitschriften, die URNs haben, müssen sich derzeit etwas in Geduld üben, aber funktionieren wird es hoffentlich trotzdem. Man kann die URNs ja nicht mehr abschaffen, wenn sie schon da sind :-).

#28

Sehe ich das richtig, dass ich derzeit nur Artikel manuell als .tar ausgeben kann, nicht aber Hefte? Ich würde gerne die XML in den tar vor der Ablieferung kontrollieren und ggf. Daten wie Hrsg. nachtragen.

Besten Dank
Klaus

#29

Hallo @klausru,

ja, es werden nur Artikel exportiert und das wird auch so bleiben. Manuelles Bearbeiten muss dann ggf. für jede Datei durchgeführt werden, kann aber auch automatisiert werden, z.B. mit sed (https://de.wikipedia.org/wiki/Sed_(Unix)). Ich würde empfehlen, Veränderungen mit der DNB abzusprechen, da es ansonsten zu Importproblemen kommen kann.

viele Grüße,
Carola

#30

Leider sind wir erst jetzt dazu gekommen, das Plugin im Produktivsystem auszuprobieren. Wir nutzen OJS 3.1.1.4 und im DNB Plugin habe ich bei der Zeitschrift unsere DNB-Einlogdaten hinterlegt. Ich habe dann im Tab “Artikel” zunächst einen einzelnen Artikel selektiert und auf “Abliefern” geklickt. Es erscheint nach einer Weile die grüne Erfolgsmeldung, dass der Artikel erfolgreich abgeliefert wurde. Schaue ich dann im DNB Hotfolder, sind dort aber keine Dateien zu finden. Die automatische Ablieferung hat daher doch nicht geklappt.

Bisher habe ich probiert:

  • Der Nutzer, den wir von den DNB für den sftp-Upload bekommen haben, hat in den Verzeichnis für den Upload Schreibrechte. Wenn ich in OJS Artikel für den Export selektieren und kann ich die Datei händlisch dort Hochladen.
  • In den PHP-Logs finde ich erstmal nichts besonders auffälliges. Öfter kommt:
[Tue Feb 26 08:11:22.330197 2019] [php7:warn] [pid 17828] [client xxx.xxx.xxx.xxx:59567] PHP Warning:  Declaration of DNBExportPlugin::getExportPath($journalId, $currentExportPath = NULL, $exportContentDir = NULL) should be compatible with ImportExportPlugin::getExportPath() in /srv/www/htdocs/plugins/importexport/dnb/DNBExportPlugin.inc.php on line 22, referer: https://journals.ub.uni-giessen.de/kult-online/management/tools
[Tue Feb 26 08:11:24.048435 2019] [php7:warn] [pid 17801] [client xxx.xxx.xxx.xxx:59551] PHP Warning:  Declaration of DNBSettingsForm::fetch($request = NULL, $template = NULL) should be compatible with Form::fetch($request, $template = NULL, $display = false) in /srv/www/htdocs/plugins/importexport/dnb/classes/form/DNBSettingsForm.inc.php on line 20, referer: https://journals.ub.uni-giessen.de/kult-online/management/tools
  • Testweise habe ich falsche Zugangsdaten für die DNB eingetragen und auch dann bekomme ich die Rückmeldung, dass der Artikel erfolgreich abgeliefert wurde?

Hat jemand eine Idee, warum der Upload scheitern könnte?

#31

Hallo @florianruckelshausen

Testweise habe ich falsche Zugangsdaten für die DNB eingetragen und auch dann bekomme ich die Rückmeldung, dass der Artikel erfolgreich abgeliefert wurde?

Seltsam … Ich habe bei mir (OJS 3, Plugin Installation von https://github.com/ojsde/dnb, branch ojs-stable-3_1_1) testweise das Passwort, den Benutzernamen und den Foldernamen falsch eingeben. Bei falschem Passwort oder Benutzernamen bekomme ich die Fehlermeldung

authError

Bei falscher Subfolder-ID bekomme ich die Fehlermeldung

folderError

Wurden denn Dateien im Exportverzeichnis (%Files-Folder%/dnb) abgelegt?

viele Grüße,
Carola

#32

Ja, in dem Verzeichnis sind verschiedene Unterordner, die mit einem Nummernschema benannt sind. Navigiere ich tiefer, komme ich bei einigen Ordnern zumindest zu tar-Dateien mit den Artikeln.

Ich habe jetzt die Artikel im DNB Plugin erstmal exportiert und manuell in den Hotfolder hochgeladen. Trotzdem würden wir natürlich gerne automatisiert und direkt aus dem Plugin abliefern. Ich bin nur etwas ratlos, wo man die Fehlersuche starten soll.

#33

@florianruckelshausen

Ich kann mir das erst am Montag genauer anschauen, morgen bin ich nicht im Büro. Ich melde mich dann!

viele Grüße,
Carola

#34

@florianruckelshausen

Habt Ihr curl installiert?

viele Grüße,
Carola

#35

Ja, curl ist installiert inkl. sftp Zugriff:

curl -V
curl 7.60.0 (x86_64-suse-linux-gnu) libcurl/7.60.0 OpenSSL/1.1.0h zlib/1.2.11 libidn2/2.0.4 libpsl/0.20.1 (+libidn2/2.0.4) libssh/0.7.5/openssl/zlib nghttp2/1.31.1                                                                                                                                                                    
Release-Date: 2018-05-16
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp                                                                                          
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy PSL Metalink                                                                                            

Kann es sein, dass der Upload wegen Zertifikatsfehlern bei sftp nicht klappt? Ich habe mal folgendes Kommando ausprobiert und der Upload schlägt fehl.

curl -T /srv/www/files/dnb/6-20190221-114104/6-189-216.tar -u *username*:*passw* sftp://hotfolder.dnb.de:22122/631439365/test.tar
...
curl: (51) SSL peer certificate or SSH remote key was not OK

EDIT: Auf der Kommandozeile hat der Transfer mit -k geklappt. Dann lädt er die Datei hoch.

#36

@florianruckelshausen

Ah, das ist doch schon mal ein Fortschritt!

Welches Betriebssystem habt Ihr und welche SSL-Version wird unterstützt? Im Plugin wird m.E. der Default für curlopt_sslsversion verwendet:

https://curl.haxx.se/libcurl/c/CURLOPT_SSLVERSION.html / http://php.net/manual/de/function.curl-setopt.php

Ich habe heute noch einmal versucht, in unseren Test-Hotfolder abzuliefern und das hat problemlos funktioniert, so dass ich erst einmal vermuten würden, dass es Einstellungsprobleme sind.

viele Grüße,
Carola

#37

Wir nutzen OpenSuse 15.0. Es ist OpenSSL 1.1.0h-fips installiert

openssl version -a
OpenSSL 1.1.0h-fips  27 Mar 2018
built on: reproducible build, date unspecified
platform: linux-x86_64
options:  bn(64,64) rc4(16x,int) des(int) blowfish(ptr)
compiler: gcc -DZLIB -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPADLOCK_ASM -DPOLY1305_ASM -D_FORTIFY_SOURCE=2 -DTERMIO -DPURIFY -D_GNU_SOURCE -DOPENSSL_NO_BUF_FREELISTS -DOPENSSLDIR="\"/etc/ssl\"" -DENGINESDIR="\"/usr/lib64/engines-1.1\""  -fmessage-length=0 -grecord-gcc-switches -O2 -Wall -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -g -std=gnu99 -Wa,--noexecstack -fno-common -Wall -Wa,--noexecstack
OPENSSLDIR: "/etc/ssl"
ENGINESDIR: "/usr/lib64/engines-1.1"

Oder welche Angaben braucht ihr?

#38

@florianruckelshausen

Wir haben OpenSSL 1.0.1t, also sogar älter.

Könnt Ihr mal das Script unten ausprobieren? Bei dem Aufruf in der Kommandozeile bekomme ich auch die Fehlermeldung “curl: (51) SSL peer certificate or SSH remote key was not OK”
Mit dem Script funktioniert es bei mir.

<?php
		$curlCh = curl_init();

		curl_setopt($curlCh, CURLOPT_UPLOAD, true);
		curl_setopt($curlCh, CURLOPT_HEADER, true);
		curl_setopt($curlCh, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($curlCh, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);

		$filename="eintragen";// absoluten Pfad bis zur tar-Datei
		
		$fh = fopen($filename, 'rb');
		$username = "eintragen"; 
		$password = "eintragen";
		$folderId = "eintragen";

		curl_setopt($curlCh, CURLOPT_URL, 'sftp://@hotfolder.dnb.de/'.$folderId.'/'.basename($filename));
		curl_setopt($curlCh, CURLOPT_PORT, 22122);
		curl_setopt($curlCh, CURLOPT_USERPWD, "$username:$password");
		curl_setopt($curlCh, CURLOPT_INFILESIZE, filesize($filename));
		curl_setopt($curlCh, CURLOPT_INFILE, $fh);
		$response = curl_exec($curlCh);
		$curlError = curl_error($curlCh);
		
		curl_close($curlCh);
		fclose($fh);
?>
#39

Ich habe das Skript entsprechend angepasst und unsere Daten eingetragen. Es wird ohne weiteres ausgeführt und gibt keine Fehlermeldung aus. Allerdings wird keine Datei hochgeladen? Trage ich falsche Zugangsdaten ein, kommt auch keine Fehlermeldung.

Schaue ich auf die PHPinfo Ausgabe, kommt zu curl:

curl

cURL support => enabled
cURL Information => 7.60.0
Age => 4
Features
AsynchDNS => Yes
CharConv => No
Debug => No
GSS-Negotiate => No
IDN => Yes
IPv6 => Yes
krb4 => No
Largefile => Yes
libz => Yes
NTLM => Yes
NTLMWB => Yes
SPNEGO => Yes
SSL => Yes
SSPI => No
TLS-SRP => Yes
HTTP2 => Yes
GSSAPI => Yes
KERBEROS5 => Yes
UNIX_SOCKETS => Yes
PSL => Yes
Protocols => dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, ldaps, pop3, pop3s, rtsp, scp, sftp, smb, smbs, smtp, smtps, telnet, tftp
Host => x86_64-suse-linux-gnu
SSL Version => OpenSSL/1.1.0h
ZLib Version => 1.2.11
libSSH Version => libssh/0.7.5/openssl/zlib
#40

@florianruckelshausen

Ich wollte mit dem Script erst schauen, ob dort der Fehler auftritt und das tut er scheinbar.

Mit
echo curl_setopt($curlCh, CURLOPT_VERBOSE, true);

(einfach bei den Optionen einfügen) wird auch eine Ausgabe gemacht.

Bei mir ist das:

1* Hostname was NOT found in DNS cache

  • Trying 193.175.100.143…
  • Connected to hotfolder.dnb.de (193.175.100.143) port 22122 (#0)
  • SSH MD5 fingerprint: 91f4dd9a4db13790224256b522296c73
  • SSH authentication methods available: password
  • Initialized password authentication
  • Authentication complete
  • We are completely uploaded and fine
  • Connection #0 to host hotfolder.dnb.de left intact
#41

Ok das habe ich oben eingebaut und bekomme:

#42

@florianruckelshausen

mmh, das sagt mir leider gar nichts …

Vielleicht liegt es doch am SSL. Klappt es mit:

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

?

#43

Ja so klappt es ($ch habe ich durch $curlCh ersetzt). D.h. wir tragen den Code erstmal so in die DNBExportPlugin.inc.php als manuelle Änderung an der entsprechenden Stelle ein. Ich dokumentiere mal das Problem für uns, damit wir in ein paar Monaten noch wissen, was wir gemacht haben. Ggf. können wir ja später nochmal schauen, ob das Verhalten so bleibt, wenn wir etwas an der Betriebssystemschicht ändern.

Die DNB hat mir übrigens eine Rückmeldung zu den tar-Dateien für die einzelnen Artikel geschrieben, die ich manuell hochgeladen hatte. Die Ablieferung kann nicht akzeptiert werden, weil

  1. In den tar-Dateien werden Unterverzeichnisse mit dem Namen “PaxHeaders.ZZZZ” angelegt, wobei ZZZZ vier Zahlen sind. Diese Ordner werden zweimal angelegt, einmal auf der obersten Ebene und im content-Unterverzeichnis, in dem auch das Volltext-PDF liegt.
    Hier ein Beispiellink zu einer tar-Datei: https://jlubox.uni-giessen.de/getlink/fiPkN46WpgKNktQYi9p8sCUQ/6-123-130.tar

  2. Außerdem schreibt die DNB, dass die Persistent Identifiers nicht im richtigen Feld geliefert werden und dass sie aber schon mit euch im Kontakt stehen. Das trifft wohl die letzten Posts bei [NEWS] DNB-Export Plugin für OJS 2.4.8 verfügbar . Wir vergeben zumindest bei der Zeitschrift, die DOI tatsächlich auf Galley-Ebene, wie mir gerade bewusst geworden ist. Der Grund ist, dass die Artikel als HTML und PDF publiziert werden, und da erscheint mir eine gemeinsame DOI sinnvoll.

#44

@florianruckelshausen

Sorry, hat etwas länger gedauert diesmal.

Gut, dass es jetzt zumindest so läuft. Ich werde weiter versuchen herauszufinden, woran es liegt und dann vermutlich auf Dich zukommen für Tests.

Zu den PaxHeaders: Das hatten wir teilweise auch und ist davon abhängig welches Entpackungstool man verwendet (bei mir erscheinen die nicht). Die DNB hat mit den Paketen kein Problem, dennoch habe ich auf die Issue-Liste für den nächsten Release geschrieben, das zu checken. Es scheint mit POSIX vs. GNU zusammenzuhängen.

Zu den Persistent Identifiers: Ja, genau, das besprechen wir derzeit mit der DNB. Das Problem ist, dass OJS diese beiden Ebenen hat und die DNB nicht. Sie erwartet alle PI auf einer Ebene, die eher der Galleyebene entspricht. Aber Artikel-PI in das Feld für Galleys schreiben finde ich nicht so gut … Wir können das gern hier im Forum besprechen oder auch per Mail.

viele Grüße,
Carola

Edit: Ich habe noch einen Hinweis von Bozana gefunden:

Bei

folgende Zeile hinzufügen:

$tarCommand .= ' --format=gnu';

Könntest du das bei mir ausprobieren? Da ich den Fehler bei mir nicht reprodieren kann, kann ich es auch leider nicht testen.

viele Grüße,
Carola

#45

Ist schon jemand auf OJS 3.1.2 umgestiegen und hat das Plugin getestet?

Wir haben unser Testsystem auf 3.1.2 aktualisiert und erhalten bei Aufruf des Export Plugins nur folgende Fehlermeldung

Warning: Declaration of DNBExportPlugin::getExportPath($journalId, $currentExportPath = NULL, $exportContentDir = NULL) should be compatible with ImportExportPlugin::getExportPath() in /srv/www/ojs/ojs/plugins/importexport/dnb/DNBExportPlugin.inc.php on line 549 

Warning: Declaration of DNBSettingsForm::fetch($request = NULL, $template = NULL) should be compatible with Form::fetch($request, $template = NULL, $display = false) in /srv/www/ojs/ojs/plugins/importexport/dnb/classes/form/DNBSettingsForm.inc.php on line 20 

Warning: filemtime(): stat failed for lib/pkp/templates/plugins/importexport/dnb/templatesindex.tpl in /srv/www/ojs/ojs/lib/pkp/classes/template/PKPTemplateResource.inc.php on line 51 

Fatal error: Uncaught --&gt; Smarty: Unable to load template 'app:plugins/importexport/dnb/templatesindex.tpl' &lt;-- thrown in /srv/www/ojs/ojs/lib/pkp/lib/vendor/smarty/smarty/libs/sysplugins/smarty_internal_template.php on line 195

Ich weiß nicht, ob das ein generelles Problem ist oder nur in unserem Testystem auftritt. Ich habe das DNB-Plugin (für Version 3.1.1.1) auch neu installiert, das ändert aber nichts an der Fehlermeldung.

#46

@bibliothekswelt

Sorry wegen der Antwortzeit, ich hatte einen schön langen Urlaub :-).

Dass das Plugin auf 3.1.2 nicht läuft, haben wir schon bemerkt. Da wir es eh nun eh anpassen, werden wir das alles zusammen erledigen. Vielen Dank für die Fehlermeldung, wir werden das aufnehmen und bei der Anpassung einfließen lassen. Da wir sie hier m.E. noch nicht hatten, werde ich ggf. nachfragen.

Von der DNB habe ich leider keine Rückmeldung bekommen bzgl. des Vorschlags mit den Multi-Dateiobjekten bekommen. Da die Anfrage nun schon einen Monat alt ist, habe ich heute noch einmal nachgefragt.

viele Grüße,
Carola