Libelektra: testshell_markdown_tutorial_crypto: fehlgeschlagen

Erstellt am 26. Nov. 2019  Â·  17Kommentare  Â·  Quelle: ElektraInitiative/libelektra

Schritte zum Reproduzieren des Problems

Erstellen Sie libelektra, wÀhrend Sie gpgme-Entwicklungsdateien haben. ( gpgme-devel auf Fedora)
ich benutzte

cmake -DBUILD_DOCUMENTATION=ON -DBINDINGS="ALL" -DBUILD_SHARED=ON -DBUILD_STATIC=ON -DBUILD_FULL=ON -DENABLE_COVERAGE=OFF -DENABLE_OPTIMIZATIONS=ON -DENABLE_DEBUG=ON -DENABLE_LOGGER=OFF -DBUILD_STATIC=ON -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" -DKDB_DB_SYSTEM="$SYSTEM_DIR" DCMAKE_INSTALL_PREFIX=./releaseInstallDir -DPLUGINS="ALL" -DTOOLS="ALL" ..

aber nicht alles ist fĂŒr das Problem relevant.

make run_all

erwartetes Ergebnis

Test #215: testshell_markdown_tutorial_crypto ........... Passed    2.58 sec

TatsÀchliche Ergebnis

Scheint, dass es ein Problem mit / tmp auf tmpfs oder Àhnlichem gibt? Ich bekomme das Problem auf Fedora und auch auf Debian Buster (im Docker).

249/262 Test #215: testshell_markdown_tutorial_crypto ...........***Failed    2.58 sec
Input: /home/mpranj/workspace/libelektra/doc/tutorials/crypto.md
kdb mount test.ini user/tests ini
kdb set user/tests/password 1234
kdb file user/tests/password | xargs cat
kdb rm user/tests/password
kdb umount user/tests
kdb mount test.ini user/tests fcrypt "encrypt/key=$(kdb gen-gpg-testkey)" ini
kdb set user/tests/password 1234

ERROR - RET:
Return value “5” does not match “0”

kdb file user/tests/password | xargs cat

ERROR - RET:
Return value “123” does not match “0”

kdb rm user/tests/password

ERROR - RET:
Return value “11” does not match “0”

kdb umount user/tests
kdb mount test.ini user/tests fcrypt "sign/key=$(kdb gen-gpg-testkey)" ini
kdb set user/tests/password 1234

ERROR - RET:
Return value “5” does not match “0”

kdb file user/tests/password | xargs cat

ERROR - RET:
Return value “123” does not match “0”

kdb rm user/tests/password

ERROR - RET:
Return value “11” does not match “0”

kdb umount user/tests
kdb mount test.ini user/tests fcrypt "sign/key=$(kdb gen-gpg-testkey),encrypt/key=$(kdb gen-gpg-testkey)" ini
kdb set user/tests/password 1234

ERROR - RET:
Return value “5” does not match “0”

kdb file user/tests/password | xargs cat

ERROR - RET:
Return value “123” does not match “0”

kdb rm user/tests/password

ERROR - RET:
Return value “11” does not match “0”

kdb umount user/tests
kdb mount test.ini user/tests crypto_gcrypt "crypto/key=$(kdb gen-gpg-testkey)" base64 ini
kdb meta-set user/tests/password crypto/encrypt 1
kdb set user/tests/password 1234
kdb set user/tests/unencrypted "I am not encrypted"
kdb file user/tests/password | xargs cat
kdb meta-set user/tests/password crypto/encrypt 0
kdb file user/tests/password | xargs cat
kdb rm user/tests/unencrypted
kdb rm user/tests/password
kdb umount user/tests
shell_recorder /tmp/tmp.FLYIzi6Q4K RESULTS: 31 test(s) done 9 error(s).

—— Protocol ————————————————————————————————————————————————————
CMD: kdb mount test.ini user/tests ini
RET: 0

CMD: kdb set user/tests/password 1234
RET: 0
STDOUT: Create a new key user/tests/password with string "1234"

CMD: kdb file user/tests/password | xargs cat
RET: 0
STDOUT: password=1234

CMD: kdb rm user/tests/password
RET: 0

CMD: kdb umount user/tests
RET: 0

CMD: kdb mount test.ini user/tests fcrypt "encrypt/key=$(kdb gen-gpg-testkey)" ini
RET: 0

CMD: kdb set user/tests/password 1234
RET: 5
=== FAILED return value does not match expected pattern 0
STDERR: Sorry, module fcrypt issued the error C01100:
Resource: Renaming file /tmp/test.ini.2110573:1574783987.412609.tmpZJttxQ to /home/mpranj/.config/test.ini.2110573:1574783987.412609.tmp failed. Reason: Invalid cross-device link
ERROR: C01100

CMD: kdb file user/tests/password | xargs cat
RET: 123
=== FAILED return value does not match expected pattern 0
STDERR: cat: /home/mpranj/.config/test.ini: No such file or directory

CMD: kdb rm user/tests/password
RET: 11
=== FAILED return value does not match expected pattern 0
STDERR: Did not find the key

CMD: kdb umount user/tests
RET: 0

CMD: kdb mount test.ini user/tests fcrypt "sign/key=$(kdb gen-gpg-testkey)" ini
RET: 0

CMD: kdb set user/tests/password 1234
RET: 5
=== FAILED return value does not match expected pattern 0
STDERR: Sorry, module fcrypt issued the error C01100:
Resource: Renaming file /tmp/test.ini.2110783:1574783987.564306.tmpRJuvgG to /home/mpranj/.config/test.ini.2110783:1574783987.564306.tmp failed. Reason: Invalid cross-device link
ERROR: C01100

CMD: kdb file user/tests/password | xargs cat
RET: 123
=== FAILED return value does not match expected pattern 0
STDERR: cat: /home/mpranj/.config/test.ini: No such file or directory

CMD: kdb rm user/tests/password
RET: 11
=== FAILED return value does not match expected pattern 0
STDERR: Did not find the key

CMD: kdb umount user/tests
RET: 0

CMD: kdb mount test.ini user/tests fcrypt "sign/key=$(kdb gen-gpg-testkey),encrypt/key=$(kdb gen-gpg-testkey)" ini
RET: 0

CMD: kdb set user/tests/password 1234
RET: 5
=== FAILED return value does not match expected pattern 0
STDERR: Sorry, module fcrypt issued the error C01100:
Resource: Renaming file /tmp/test.ini.2111010:1574783987.747497.tmpti3bSR to /home/mpranj/.config/test.ini.2111010:1574783987.747497.tmp failed. Reason: Invalid cross-device link
ERROR: C01100

CMD: kdb file user/tests/password | xargs cat
RET: 123
=== FAILED return value does not match expected pattern 0
STDERR: cat: /home/mpranj/.config/test.ini: No such file or directory

CMD: kdb rm user/tests/password
RET: 11
=== FAILED return value does not match expected pattern 0
STDERR: Did not find the key

CMD: kdb umount user/tests
RET: 0

CMD: kdb mount test.ini user/tests crypto_gcrypt "crypto/key=$(kdb gen-gpg-testkey)" base64 ini
RET: 0

CMD: kdb meta-set user/tests/password crypto/encrypt 1
RET: 0

CMD: kdb set user/tests/password 1234
RET: 0
STDOUT: Set string to "1234"

CMD: kdb set user/tests/unencrypted "I am not encrypted"
RET: 0
STDOUT: Create a new key user/tests/unencrypted with string "I am not encrypted"

CMD: kdb file user/tests/password | xargs cat
RET: 0
STDOUT: unencrypted=I am not encrypted
#<strong i="19">@META</strong> crypto/encrypt = 1
password=@BASE64IyFjcnlwdG8wMBEAAACCBjEzmVhqufXSsgK4VPRDUC9GyQxBhocVbgZwimonK+xHaRCSX/blNDSVdIoSRg0n

CMD: kdb meta-set user/tests/password crypto/encrypt 0
RET: 0

CMD: kdb file user/tests/password | xargs cat
RET: 0
STDOUT: unencrypted=I am not encrypted
#<strong i="20">@META</strong> crypto/encrypt = 0
password=1234

CMD: kdb rm user/tests/unencrypted
RET: 0

CMD: kdb rm user/tests/password
RET: 0

CMD: kdb umount user/tests
RET: 0
————————————————————————————————————————————————————————————————

System Information

  • Elektra Version: Meister
  • Betriebssystem: Fedora
  • Versionen anderer relevanter Software?

Weitere Protokolldateien und Ausgabe

bug work in progress

Hilfreichster Kommentar

Ich denke, dieses Problem könnte hÀufiger auftreten. Wir empfehlen sogar in der fcrypt-Dokumentation, /tmp auf einer RAM-Disk zu mounten. Wir empfehlen daher, diesen Fehler sofort auszulösen.

Ich werde versuchen, eine ordnungsgemĂ€ĂŸe Lösung bereitzustellen.

Ich werde einfach ein anderes TMPDIR explizit fĂŒr die Builds konfigurieren. Wenn das Problem auf Zielsystemen erneut auftritt, können wir es erneut öffnen und eine bessere Lösung finden.

Dies ist auch eine gute Lösung fĂŒr die Build-Server.

Alle 17 Kommentare

@ markus2330 Dies ist auf dem Buildserver erfolgreich. Ist das ein Showstopper fĂŒr dich? Dies wĂŒrde sich in den Protokollen der Version widerspiegeln ( kdb run_all -v > ~elektra/$VERSION/run_all 2>&1 ).

EDIT: Ich kann versuchen, diesen Teil auf a7 / v2 zu machen, da er möglicherweise nur in meinem Szenario mit Fedora als Host (und Debian nur im Docker) fehlschlÀgt.

Nein, es ist definitiv kein Showstopper. Höchstwahrscheinlich liegt es einfach daran, dass eine temporĂ€re Datei aus einem frĂŒheren Lauf noch vorhanden ist oder # 2957 doch nicht vollstĂ€ndig repariert ist.

Hoffentlich hat @ petermax2 Zeit, das Problem vor 0.9.2 zu beheben: wink:

@mpranj Benötigen Sie Hilfe bei

Ich kann das Problem beim Erstellen von 2bc994ae8b3f3a04396303ece106ea563764e490 von Grund auf mit Ihrem Befehl cmake von oben nicht reproduzieren.

    Start 188: testshell_markdown_tutorial_crypto 
222/235 Test #188: testshell_markdown_tutorial_crypto ...........   Passed    3.16 sec

Vielleicht ist Ihr Build-Verzeichnis irgendwie kaputt. Könnten Sie bitte versuchen, mit einem neuen (leeren) Build-Verzeichnis zu kompilieren und zu testen?

@ petermax2 danke, dass du es so schnell ĂŒberprĂŒft hast. Ich habe es mehrmals auf meinem Host-System (Fedora) und auch auf einem Debian-Buster-Docker-Container versucht. Ich habe auch das Build-Verzeichnis viele Male bereinigt.

Es ist immer möglich, dass es nur ein Problem fĂŒr mich ist. Ich werde es spĂ€ter noch einmal ĂŒberprĂŒfen!

Hm seltsam! Ich glaube, ich habe gestern einen Debian: Stable- Container zum Bauen und Testen verwendet. Ich kann es abends noch einmal mit Fedora versuchen. Im Moment habe ich nicht so viel Zeit fĂŒr die Fehlerbehebung, aber ich werde einen kurzen Blick darauf werfen.

Das Problem ist unter Fedora reproduzierbar.

The following tests FAILED:
 41 - testshell_markdown_base64 (Failed)
 56 - testshell_markdown_csvstorage (Failed)
 76 - testshell_markdown_iconv (Failed)
 78 - testshell_markdown_ini (Failed)
 93 - testshell_markdown_mini (Failed)
116 - testmod_resolver (Failed)
181 - testshell_markdown_tutorial_crypto (Failed)

Möglicherweise handelt es sich hierbei nicht um ein Krypto-Tutorial-spezifisches Problem. Ich muss nachforschen.

kdb gen-gpg-testkey kann nicht gefunden werden. Dieses Problem hÀngt mit # 3246 (KDB_EXEC_PATH) zusammen.

BEARBEITEN: Die Analyse ist nur fĂŒr testshell_markdown_tutorial_crypto gĂŒltig. Die anderen Tests habe ich bisher nicht ĂŒberprĂŒft.

Vielen Dank, dass Sie sich dieses Problem angesehen haben!

Ich habe nicht gesehen, dass die anderen Tests fehlgeschlagen sind. Sind Sie sicher, dass dies das gleiche Problem ist? Ich habe nicht einmal mit der installierten kdb gearbeitet, sondern nur ctest mit make run_all ausgefĂŒhrt.

Auf lange Sicht werden wir auch einige Fedora-Docker-Bilder hinzufĂŒgen (# 3227), um so etwas frĂŒher zu fangen.

Sind Sie sicher, dass dies das gleiche Problem ist?

Nein, wahrscheinlich verschiedene Probleme.

Auf lange Sicht werden wir auch einige Fedora-Docker-Bilder hinzufĂŒgen

Sehr gute Idee!

Ich habe meinen Beitrag von frĂŒher bearbeitet, um zu verdeutlichen, was ich mit meiner Analyse gemeint habe.

Das Problem ist nicht auf meinen Computer beschrÀnkt. Der Test schlÀgt fehl, weil der folgende Aufruf von rename () fehlschlÀgt:
https://github.com/ElektraInitiative/libelektra/blob/263cbe69686a9f087204a7f3660b007d1de22da2/src/plugins/fcrypt/fcrypt.c#L231

Der Grund ist, dass / tmp standardmĂ€ĂŸig ein separater Mountpoint unter Fedora ist, was bei Debian nicht der Fall war. Daher kann die Datei nicht ĂŒber verschiedene Mountpunkte hinweg umbenannt werden.

Ich habe ĂŒberprĂŒft, dass dies das Problem ist, indem ich einen (sehr schmutzigen) Patch angewendet habe. Ich wĂŒrde vorschlagen, es mit der Resolver-Implementierung konsistent zu halten und die temporĂ€re Datei im selben Verzeichnis wie die Originaldatei abzulegen.

@ petermax2 was denkst du und hÀttest du Zeit, es mit einem richtigen Patch zu reparieren?

Das von fcrypt verwendete tmp-Verzeichnis kann ĂŒber die Plugin-Konfiguration festgelegt werden.

fcrypt verwendet die Konfigurationsoption fcrypt / tmpdir, um Pfade fĂŒr temporĂ€re Dateien wĂ€hrend der Ver- und EntschlĂŒsselung zu generieren. Wenn keine solche Konfigurationsoption bereitgestellt wird, versucht fcrypt, die Umgebungsvariable TMPDIR zu verwenden. Wenn TMPDIR in der Umgebung nicht festgelegt ist, wird / tmp als Standardverzeichnis verwendet.

(_Source_: Plugin-Dokumentation )

Der einfachste Weg, Fedora-Àhnliche Build-Jobs zu reduzieren, wÀre die Verwendung eines anderen Verzeichnisses. Auf dem Build-Server kann das lokale Build-Verzeichnis verwendet werden. Was denkst du?

@ petermax2 was denkst du und hÀttest du Zeit, es mit einem richtigen Patch zu reparieren?

Ich kann an den Wochenenden etwas Freizeit einplanen, aber was halten Sie fĂŒr eine richtige Lösung?

Ich kann an den Wochenenden etwas Freizeit einplanen, aber was halten Sie fĂŒr eine richtige Lösung?

Sie mĂŒssen nichts ĂŒberentwickeln. Wie ich vorgeschlagen habe, wĂŒrde ich die temporĂ€re Datei in das gleiche Verzeichnis wie die Zieldatei legen. Dies ist die Art und Weise, wie resolver tut, wenn Änderungen vorgenommen werden, sodass dies einigermaßen konsistent wĂ€re.

Ich kann auch nur ein anderes TMPDIR fĂŒr die Builds konfigurieren. Ich kann diese Änderung selbst umsetzen.

Wir werden mit allem, was Sie hier vorschlagen, gehen.

Vom Dokument umbenennen :

[EXDEV]
[CX] [Option Start] The links named by new and old are on different file systems and the implementation does not support links between file systems. [Option End]

Bearbeiten: schlÀgt mit sudo mit dem gleichen Fehler fehl:

213: CMD: kdb set user/tests/password 1234
213: RET: 5
213: === FAILED return value does not match expected pattern 0
213: STDERR: Sorry, module fcrypt issued the error C01100:
213: Resource: Renaming file /tmp/test.ini.571145:1586371945.946855.tmpHdGEMt to /root/.config/test.ini.571145:1586371945.946855.tmp failed. Reason: Invalid cross-device link
213: ERROR: C01100

Eine vereinfachte Lösung wÀre, die Operation rename durch eine Kopie + Entfernen zu ersetzen.

Ich werde einfach ein anderes TMPDIR explizit fĂŒr die Builds konfigurieren. Wenn das Problem auf Zielsystemen erneut auftritt, können wir es erneut öffnen und eine bessere Lösung finden.

Ich denke, dieses Problem könnte hÀufiger auftreten. Wir empfehlen sogar in der fcrypt-Dokumentation, /tmp auf einer RAM-Disk zu mounten. Wir empfehlen daher, diesen Fehler sofort auszulösen.

Ich werde versuchen, eine ordnungsgemĂ€ĂŸe Lösung bereitzustellen.

Ich werde einfach ein anderes TMPDIR explizit fĂŒr die Builds konfigurieren. Wenn das Problem auf Zielsystemen erneut auftritt, können wir es erneut öffnen und eine bessere Lösung finden.

Dies ist auch eine gute Lösung fĂŒr die Build-Server.

Vielen Dank, dass Sie sich damit befasst haben!

Eine vereinfachte Lösung wÀre, den Umbenennungsvorgang durch Kopieren + Entfernen zu ersetzen.

Nicht um den Code zu ersetzen, sondern um dies zu tun, wenn das Umbenennen fehlgeschlagen ist. (Und um in diesem Fall auch die Quelldatei zu vernichten.) Dann haben Leute ohne RAM-Disc auf / tmp Geschwindigkeit und Leute mit RAM-Disc auf / tmp haben mehr Sicherheit.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

markus2330 picture markus2330  Â·  4Kommentare

markus2330 picture markus2330  Â·  4Kommentare

mpranj picture mpranj  Â·  3Kommentare

sanssecours picture sanssecours  Â·  4Kommentare

markus2330 picture markus2330  Â·  3Kommentare