Libelektra: testshell_markdown_tutorial_crypto: Ă©chec

CrĂ©Ă© le 26 nov. 2019  Â·  17Commentaires  Â·  Source: ElektraInitiative/libelektra

Étapes pour reproduire le problùme

Construisez libelektra en ayant des fichiers de développement gpgme. ( gpgme-devel sur fedora)
j'ai utilisé

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" ..

mais tout n'est pas pertinent pour le problĂšme.

make run_all

résultat attendu

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

RĂ©sultat actuel

Semble qu'il y a un problÚme avec / tmp sur tmpfs ou similaire? Je reçois le problÚme sur fedora et aussi sur debian buster (dans 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
————————————————————————————————————————————————————————————————

Information systĂšme

  • Version Elektra: maĂźtre
  • SystĂšme d'exploitation: Fedora
  • Versions d'autres logiciels pertinents?

Autres fichiers journaux et sortie

bug work in progress

Commentaire le plus utile

Ce problĂšme pourrait survenir plus souvent, je pense. Nous recommandons mĂȘme dans la documentation de fcrypt de remonter /tmp sur un disque RAM. Nous vous recommandons donc de dĂ©clencher cette erreur immĂ©diatement.

Je vais essayer de fournir une solution appropriée.

Je vais simplement configurer un TMPDIR différent explicitement pour les versions. Si le problÚme se reproduit sur les systÚmes cibles, nous pouvons rouvrir et trouver une meilleure solution.

C'est Ă©galement une solution de contournement pour les serveurs de build.

Tous les 17 commentaires

@ markus2330 cela réussit sur le serveur de compilation. Est-ce un spectacle pour vous? Cela serait reflété dans les journaux de la version ( kdb run_all -v > ~elektra/$VERSION/run_all 2>&1 ).

EDIT: Je peux essayer de faire cette partie sur a7 / v2 car cela Ă©choue peut-ĂȘtre uniquement dans mon scĂ©nario avec fedora comme hĂŽte (et debian uniquement dans docker).

Non, ce n'est certainement pas un spectacle. TrÚs probablement, c'est simplement parce qu'un fichier temporaire est toujours là d'une exécution précédente ou # 2957 n'est pas complÚtement corrigé aprÚs tout.

Espérons que @ petermax2 a le temps de le réparer avant la version 0.9.2: wink:

@mpranj avez-vous besoin d'aide avec les notes de version ou autre chose?

Je ne peux pas reproduire le problÚme lors de la construction de 2bc994ae8b3f3a04396303ece106ea563764e490 à partir de zéro en utilisant votre commande cmake d'en haut.

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

Peut-ĂȘtre que votre rĂ©pertoire de construction est cassĂ©. Pourriez-vous s'il vous plaĂźt essayer de compiler et de tester avec un nouveau rĂ©pertoire de construction (vide)?

@ petermax2 merci de l'avoir vérifié si rapidement. J'ai essayé plusieurs fois sur mon systÚme hÎte (fedora) et aussi sur un conteneur docker debian buster. J'ai également nettoyé le répertoire de construction plusieurs fois.

Il est toujours possible que ce soit juste un problÚme de mon cÎté. Je vérifierai à nouveau plus tard!

Hm Ă©trange! Je pense que j'ai utilisĂ© hier un conteneur Debian: stable pour la construction et les tests. Je peux rĂ©essayer avec Fedora dans la soirĂ©e. Pour le moment, je n'ai pas beaucoup de temps pour le dĂ©pannage mais je vais jeter un coup d'Ɠil rapide.

Le problĂšme est reproductible sous Fedora.

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)

Ce n'est peut-ĂȘtre pas un problĂšme spĂ©cifique au didacticiel cryptographique. Je dois enquĂȘter.

kdb gen-gpg-testkey est introuvable. Ce problÚme est lié à # 3246 (KDB_EXEC_PATH).

EDIT: L'analyse n'est valable que pour testshell_markdown_tutorial_crypto . Je n'ai pas encore vérifié les autres tests.

Merci d'avoir jetĂ© un Ɠil Ă  ce numĂ©ro!

Je n'ai pas vu les autres tests Ă©chouer tbh. Etes-vous sĂ»r que c'est le mĂȘme problĂšme? Je n'ai mĂȘme pas travaillĂ© avec le kdb installĂ©, j'ai juste lancĂ© ctest avec make run_all.

À long terme, nous ajouterons Ă©galement des images de docker fedora (# 3227), pour attraper quelque chose comme ça plus tĂŽt.

Etes-vous sĂ»r que c'est le mĂȘme problĂšme?

Non, probablement plusieurs problÚmes différents.

À long terme, nous ajouterons Ă©galement des images de docker fedora

TrÚs bonne idée!

J'ai édité mon article d'avant pour clarifier ce que je voulais dire avec mon analyse.

Le problÚme n'est pas isolé de ma machine. Le test échoue car l'appel de rename () suivant échoue:
https://github.com/ElektraInitiative/libelektra/blob/263cbe69686a9f087204a7f3660b007d1de22da2/src/plugins/fcrypt/fcrypt.c#L231

La raison en est que / tmp est un point de montage sĂ©parĂ© sur Fedora par dĂ©faut, ce qui n'Ă©tait pas le cas pour Debian. Ainsi, le fichier ne peut pas ĂȘtre renommĂ© sur diffĂ©rents points de montage.

J'ai vĂ©rifiĂ© que c'Ă©tait bien le problĂšme en appliquant un patch (trĂšs sale). Je proposerais de le garder cohĂ©rent avec l'implĂ©mentation du rĂ©solveur et de placer le fichier temporaire dans le mĂȘme rĂ©pertoire que le fichier d'origine.

@ petermax2 qu'en pensez-vous et auriez-vous le temps de le réparer avec un correctif approprié?

Le rĂ©pertoire tmp utilisĂ© par fcrypt peut ĂȘtre dĂ©fini via la configuration du plugin.

fcrypt utilise l'option de configuration fcrypt / tmpdir pour générer des chemins pour les fichiers temporaires pendant le chiffrement et le déchiffrement. Si aucune option de configuration de ce type n'est fournie, fcrypt essaiera d'utiliser la variable d'environnement TMPDIR. Si TMPDIR n'est pas défini dans l'environnement, / tmp est utilisé comme répertoire par défaut.

(_Source_: Documentation du plugin )

Le moyen le plus simple d'attĂ©nuer les tĂąches de construction de type Fedora serait d'utiliser un autre rĂ©pertoire. Sur le serveur de build, le rĂ©pertoire de build local peut ĂȘtre utilisĂ©. Qu'est-ce que tu penses?

@ petermax2 qu'en pensez-vous et auriez-vous le temps de le réparer avec un correctif approprié?

Je peux allouer du temps libre le week-end, mais qu'avez-vous à l'esprit comme solution appropriée?

Je peux allouer du temps libre le week-end, mais qu'avez-vous à l'esprit comme solution appropriée?

Pas besoin de sur-concevoir quoi que ce soit. Comme je l'ai suggĂ©rĂ©, je mettrais le fichier temporaire dans le mĂȘme rĂ©pertoire que le fichier cible. C'est ainsi que resolver fait lors de la validation des modifications, donc ce serait un peu cohĂ©rent.

Je suis Ă©galement trĂšs bien avec la configuration d'un TMPDIR diffĂ©rent pour les versions. Je peux mettre en Ɠuvre ce changement moi-mĂȘme.

Nous suivrons tout ce que vous suggérez ici.

De renommer docu :

[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]

Edit: Ă©choue avec sudo avec la mĂȘme erreur:

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

Une solution simpliste serait de remplacer l'opération rename par une copie + supprimer.

Je vais simplement configurer un TMPDIR différent explicitement pour les versions. Si le problÚme se reproduit sur les systÚmes cibles, nous pouvons rouvrir et trouver une meilleure solution.

Ce problĂšme pourrait survenir plus souvent, je pense. Nous recommandons mĂȘme dans la documentation de fcrypt de remonter /tmp sur un disque RAM. Nous vous recommandons donc de dĂ©clencher cette erreur immĂ©diatement.

Je vais essayer de fournir une solution appropriée.

Je vais simplement configurer un TMPDIR différent explicitement pour les versions. Si le problÚme se reproduit sur les systÚmes cibles, nous pouvons rouvrir et trouver une meilleure solution.

C'est Ă©galement une solution de contournement pour les serveurs de build.

Merci beaucoup pour votre recherche!

Une solution simpliste serait de remplacer l'opération de renommage par une copie + suppression.

Pas pour remplacer le code mais pour le faire si le changement de nom échoue. (Et pour déchiqueter également le fichier source dans ce cas.) Ensuite, les personnes sans disque RAM sur / tmp ont de la vitesse et les personnes avec un disque RAM sur / tmp ont plus de sécurité.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

dominicjaeger picture dominicjaeger  Â·  3Commentaires

mpranj picture mpranj  Â·  3Commentaires

markus2330 picture markus2330  Â·  4Commentaires

e1528532 picture e1528532  Â·  4Commentaires

markus2330 picture markus2330  Â·  4Commentaires