Libelektra: testshell_markdown_tutorial_crypto: falla

Creado en 26 nov. 2019  ·  17Comentarios  ·  Fuente: ElektraInitiative/libelektra

Pasos para reproducir el problema

Construya libelektra mientras tiene archivos de desarrollo gpgme. ( gpgme-devel en fedora)
solía

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

pero no todo es relevante para el problema.

make run_all

Resultado Esperado

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

Resultado actual

¿Parece que hay un problema con / tmp en tmpfs o similar? Tengo el problema en Fedora y también en Debian Buster (en 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
————————————————————————————————————————————————————————————————

Información del sistema

  • Versión de Elektra: maestro
  • Sistema operativo: Fedora
  • ¿Versiones de otro software relevante?

Más archivos de registro y resultados

bug work in progress

Comentario más útil

Este problema podría ocurrir con más frecuencia, creo. Incluso recomendamos en la documentación de fcrypt volver a montar /tmp en un disco RAM. Por eso, recomendamos activar este error de inmediato.

Intentaré proporcionar una solución adecuada.

Simplemente configuraré un TMPDIR diferente explícitamente para las compilaciones. Si el problema vuelve a ocurrir en los sistemas de destino, podemos reabrir y encontrar una mejor solución.

Esto también está bien como solución temporal para los servidores de compilación.

Todos 17 comentarios

@ markus2330 esto tiene éxito en el servidor de compilación. ¿Es esto un espectáculo para ti? Se reflejaría en los registros del lanzamiento ( kdb run_all -v > ~elektra/$VERSION/run_all 2>&1 ).

EDITAR: Puedo intentar hacer esta parte en a7 / v2, ya que tal vez solo falle en mi escenario con Fedora como host (y Debian solo en Docker).

No, definitivamente no es un éxito. Lo más probable es que se deba simplemente a que todavía hay algún archivo temporal de una ejecución anterior o que el número 2957 no está completamente arreglado después de todo.

Con suerte, @ petermax2 tiene tiempo para arreglarlo antes de la 0.9.2: guiño:

@mpranj , ¿necesita ayuda con las notas de la versión o algo más?

No puedo reproducir el problema al construir 2bc994ae8b3f3a04396303ece106ea563764e490 desde cero usando su comando cmake desde arriba.

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

Tal vez su directorio de compilación esté roto de alguna manera. ¿Podría intentar compilar y probar con un directorio de compilación nuevo (vacío)?

@ petermax2 gracias por comprobarlo tan rápido. Lo intenté varias veces en mi sistema host (Fedora) y también en un contenedor Docker de Debian Buster. También limpié el directorio de compilación muchas veces.

Siempre es posible que sea solo un problema por mi parte. ¡Lo comprobaré de nuevo más tarde!

¡Qué extraño! Creo que ayer usé un contenedor Debian: estable para compilar y probar. Puedo intentarlo de nuevo con Fedora por la noche. Por el momento no tengo tanto tiempo para solucionar problemas, pero echaré un vistazo rápido.

El problema se puede reproducir en 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)

Tal vez este no sea un problema específico de cripto-tutorial. Tengo que investigar.

kdb gen-gpg-testkey no se puede encontrar. Este problema está relacionado con # 3246 (KDB_EXEC_PATH).

EDITAR: El análisis solo es válido para testshell_markdown_tutorial_crypto . No verifiqué las otras pruebas hasta ahora.

¡Gracias por echar un vistazo a este problema!

No he visto fallar las otras pruebas tbh. ¿Estás seguro de que se trata del mismo problema? Ni siquiera trabajé con el kdb instalado, solo ejecuté ctest con make run_all.

A largo plazo, también agregaremos algunas imágenes de fedora docker (# 3227), para capturar algo como esto antes.

¿Estás seguro de que se trata del mismo problema?

No, probablemente varios problemas diferentes.

A largo plazo, también agregaremos algunas imágenes de fedora docker

¡Muy buena idea!

Edité mi publicación anterior para aclarar lo que quise decir con mi análisis.

El problema no está aislado en mi máquina. La prueba falla porque falla la siguiente llamada rename ():
https://github.com/ElektraInitiative/libelektra/blob/263cbe69686a9f087204a7f3660b007d1de22da2/src/plugins/fcrypt/fcrypt.c#L231

La razón es que / tmp es un punto de montaje separado en Fedora por defecto, lo que no era el caso de Debian. Por tanto, no se puede cambiar el nombre del archivo en diferentes puntos de montaje.

He verificado que este es el problema aplicando un parche (muy sucio). Propondría mantenerlo coherente con la implementación del resolutor y colocar el archivo temporal en el mismo directorio que el archivo original.

@ petermax2 ¿Qué piensas? ¿Tendría tiempo para arreglarlo con un parche adecuado?

El directorio tmp utilizado por fcrypt se puede configurar mediante la configuración del complemento.

fcrypt usa la opción de configuración fcrypt / tmpdir para generar rutas para archivos temporales durante el cifrado y descifrado. Si no se proporciona dicha opción de configuración, fcrypt intentará utilizar la variable de entorno TMPDIR. Si TMPDIR no está configurado en el entorno, / tmp se usa como directorio predeterminado.

(_Fuente_: Documentación del complemento )

La forma más fácil de mitigar los trabajos de compilación similares a Fedora sería usar otro directorio. En el servidor de compilación, se puede utilizar el directorio de compilación local. ¿Qué piensas?

@ petermax2 ¿Qué piensas? ¿Tendría tiempo para arreglarlo con un parche adecuado?

Puedo dedicar algo de tiempo libre los fines de semana, pero ¿qué tienes en mente como solución adecuada?

Puedo dedicar algo de tiempo libre los fines de semana, pero ¿qué tienes en mente como solución adecuada?

No es necesario sobre-diseñar nada. Como sugerí, pondría el archivo temporal en el mismo directorio que el archivo de destino. Esta es la forma en que resolver hace al realizar cambios, por lo que sería algo consistente.

También estoy bien con solo configurar un TMPDIR diferente para las compilaciones. Puedo implementar ese cambio yo mismo.

Iremos con lo que sugiera aquí.

De renombrar 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]

Editar: falla con sudo con el mismo error:

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

Una solución simplista sería reemplazar la operación rename por una copia + eliminación.

Simplemente configuraré un TMPDIR diferente explícitamente para las compilaciones. Si el problema vuelve a ocurrir en los sistemas de destino, podemos reabrir y encontrar una mejor solución.

Este problema podría ocurrir con más frecuencia, creo. Incluso recomendamos en la documentación de fcrypt volver a montar /tmp en un disco RAM. Por eso, recomendamos activar este error de inmediato.

Intentaré proporcionar una solución adecuada.

Simplemente configuraré un TMPDIR diferente explícitamente para las compilaciones. Si el problema vuelve a ocurrir en los sistemas de destino, podemos reabrir y encontrar una mejor solución.

Esto también está bien como solución temporal para los servidores de compilación.

¡Muchas gracias por investigarlo!

Una solución simplista sería reemplazar la operación de cambio de nombre por copiar + eliminar.

No para reemplazar el código, sino para hacerlo si el cambio de nombre falla. (Y también triturar el archivo fuente en ese caso). Entonces las personas sin disco RAM en / tmp tienen velocidad y las personas con disco RAM en / tmp tienen más seguridad.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

sanssecours picture sanssecours  ·  4Comentarios

e1528532 picture e1528532  ·  4Comentarios

mpranj picture mpranj  ·  3Comentarios

markus2330 picture markus2330  ·  4Comentarios

sanssecours picture sanssecours  ·  3Comentarios