Libelektra: testhell_markdown_tutorial_crypto: فشل

تم إنشاؤها على ٢٦ نوفمبر ٢٠١٩  ·  17تعليقات  ·  مصدر: ElektraInitiative/libelektra

خطوات إعادة إظهار المشكلة

بناء libelektra مع وجود ملفات تطوير gpgme. ( gpgme-devel على فيدورا)
إستعملت

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

ولكن ليس كل شيء وثيق الصلة بالمشكلة.

make run_all

نتيجة متوقعة

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

نتيجة فعلية

يبدو أن هناك مشكلة مع / tmp على tmpfs أو ما شابه؟ حصلت على المشكلة في فيدورا وأيضًا على debian buster (في 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
————————————————————————————————————————————————————————————————

معلومات النظام

  • نسخة إليكترا: سيد
  • نظام التشغيل: فيدورا
  • إصدارات البرامج الأخرى ذات الصلة؟

مزيد من ملفات الدخول والإخراج

bug work in progress

التعليق الأكثر فائدة

أعتقد أن هذه المشكلة قد تحدث في كثير من الأحيان. حتى أننا نوصي في وثائق fcrypt بإعادة تحميل /tmp إلى قرص RAM. لذلك نوصي بالفعل بتشغيل هذا الخطأ على الفور.

سأحاول تقديم الإصلاح المناسب.

سأقوم ببساطة بتكوين TMPDIR مختلف بشكل صريح للبنيات. إذا تكررت المشكلة على الأنظمة المستهدفة ، فيمكننا إعادة فتحها وإيجاد حل أفضل.

هذا جيد أيضًا كحل بديل لخوادم الإنشاء.

ال 17 كومينتر

@ markus2330 هذا نجح على buildserver. هل هذا محل عرض لك؟ سوف ينعكس في سجلات الإصدار ( kdb run_all -v > ~elektra/$VERSION/run_all 2>&1 ).

تحرير: يمكنني محاولة القيام بهذا الجزء على a7 / v2 لأنه ربما يفشل فقط في السيناريو الخاص بي مع فيدورا كمضيف (و debian فقط في docker).

لا ، إنه بالتأكيد ليس عارض أزياء. على الأرجح ، يرجع ذلك ببساطة إلى أن بعض الملفات المؤقتة لا تزال موجودة من تشغيل سابق أو أن # 2957 لم يتم إصلاحها تمامًا بعد كل شيء.

نأمل أن يكون لدى

mpranj هل تحتاج إلى مساعدة في ملاحظات الإصدار أو أي شيء آخر؟

لا يمكنني إعادة إظهار المشكلة عند إنشاء 2bc994ae8b3f3a04396303ece106ea563764e490 من البداية باستخدام الأمر cmake من الأعلى.

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

ربما تم كسر دليل البناء الخاص بك بطريقة ما. هل يمكنك محاولة التجميع والاختبار باستخدام دليل بناء جديد (فارغ)؟

@ petermax2 أشكركم على التحقق من ذلك بسرعة. لقد حاولت عدة مرات على نظامي المضيف (فيدورا) وأيضًا على حاوية ديبيان باستر. قمت أيضًا بتنظيف دليل الإنشاء عدة مرات.

من الممكن دائمًا أنها مجرد مشكلة في نهايتي. سوف أتحقق منه مرة أخرى لاحقًا!

همم غريب! أعتقد أنني استخدمت حاوية Debian: مستقرة أمس للبناء والاختبار. يمكنني المحاولة مرة أخرى مع فيدورا في المساء. في الوقت الحالي ، ليس لدي الكثير من الوقت لاستكشاف الأخطاء وإصلاحها ولكن سألقي نظرة سريعة.

المشكلة قابلة للتكرار في ظل 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)

ربما هذه ليست مشكلة خاصة بالبرنامج التعليمي المشفر. لا بد لي من التحقيق.

لا يمكن العثور على kdb gen-gpg-testkey . هذه المشكلة متعلقة بالرقم 3246 (KDB_EXEC_PATH).

تحرير: التحليل صالح فقط لـ testshell_markdown_tutorial_crypto . لم أقم بفحص الاختبارات الأخرى حتى الآن.

شكرا لإلقاء نظرة على هذه المشكلة!

لم أر الاختبارات الأخرى تفشل tbh. هل أنت متأكد من أن هذه هي نفس المشكلة؟ لم أعمل حتى مع kdb المثبت ، لقد قمت بتشغيل ctest مع make run_all.

على المدى الطويل ، سنضيف بعض صور عامل ميناء فيدورا أيضًا (# 3227) ، لالتقاط شيء مثل هذا سابقًا.

هل أنت متأكد من أن هذه هي نفس المشكلة؟

لا ، ربما عدة مشاكل مختلفة.

على المدى الطويل ، سنضيف بعض صور عامل ميناء فيدورا أيضًا

فكرة جيدة جدا!

قمت بتحرير رسالتي من قبل لتوضيح ما قصدته بتحليلي.

المشكلة ليست معزولة على جهازي. فشل الاختبار بسبب فشل استدعاء إعادة التسمية () التالي:
https://github.com/ElektraInitiative/libelektra/blob/263cbe69686a9f087204a7f3660b007d1de22da2/src/plugins/fcrypt/fcrypt.c#L231

والسبب هو أن / tmp هي نقطة تحميل منفصلة على Fedora بشكل افتراضي ، ولم يكن هذا هو الحال مع Debian. وبالتالي لا يمكن إعادة تسمية الملف عبر نقاط تحميل مختلفة.

لقد تحققت من أن هذه هي المشكلة من خلال تطبيق تصحيح (متسخ جدًا). أود أن أقترح إبقائه متسقًا مع تنفيذ المحلل ووضع الملف المؤقت في نفس الدليل مثل الملف الأصلي.

@ petermax2 ما رأيك وهل سيكون لديك الوقت لإصلاحه باستخدام التصحيح المناسب؟

يمكن تعيين دليل tmp الذي يستخدمه fcrypt عبر تكوين البرنامج المساعد.

يستخدم fcrypt خيار التكوين fcrypt / tmpdir لإنشاء مسارات للملفات المؤقتة أثناء التشفير وفك التشفير. إذا لم يتم توفير خيار التكوين هذا ، فسيحاول fcrypt استخدام متغير البيئة TMPDIR. إذا لم يتم تعيين TMPDIR في البيئة ، فسيتم استخدام / tmp كدليل افتراضي.

(_Source_: توثيق البرنامج المساعد )

أسهل طريقة للتخفيف من وظائف البناء الشبيهة ببرنامج Fedora هي استخدام دليل آخر. على خادم البناء يمكن استخدام دليل البناء المحلي. ما رأيك؟

@ petermax2 ما رأيك وهل سيكون لديك الوقت لإصلاحه باستخدام التصحيح المناسب؟

يمكنني تخصيص بعض وقت الفراغ خلال عطلات نهاية الأسبوع ولكن ما الذي تفكر فيه كحل مناسب؟

يمكنني تخصيص بعض وقت الفراغ خلال عطلات نهاية الأسبوع ولكن ما الذي تفكر فيه كحل مناسب؟

لا حاجة للإفراط في هندسة أي شيء. كما اقترحت سأضع ملف temp في نفس الدليل مثل الملف الهدف. هذه هي الطريقة التي يقوم بها resolver عند إجراء التغييرات ، لذا ستكون متسقة إلى حد ما.

أنا أيضًا بخير مع مجرد تكوين TMPDIR مختلف للبنيات. يمكنني تنفيذ هذا التغيير بنفسي.

سنذهب مع كل ما تقترحه هنا.

من إعادة تسمية 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]

تحرير: فشل مع sudo بنفس الخطأ:

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

قد يكون الحل المبسط هو استبدال العملية rename بنسخة + إزالة.

سأقوم ببساطة بتكوين TMPDIR مختلف بشكل صريح للبنيات. إذا تكررت المشكلة على الأنظمة المستهدفة ، فيمكننا إعادة فتحها وإيجاد حل أفضل.

أعتقد أن هذه المشكلة قد تحدث في كثير من الأحيان. حتى أننا نوصي في وثائق fcrypt بإعادة تحميل /tmp إلى قرص RAM. لذلك نوصي بالفعل بتشغيل هذا الخطأ على الفور.

سأحاول تقديم الإصلاح المناسب.

سأقوم ببساطة بتكوين TMPDIR مختلف بشكل صريح للبنيات. إذا تكررت المشكلة على الأنظمة المستهدفة ، فيمكننا إعادة فتحها وإيجاد حل أفضل.

هذا جيد أيضًا كحل بديل لخوادم الإنشاء.

شكرا جزيلا للنظر فيه!

سيكون الحل المبسط هو استبدال عملية إعادة التسمية بنسخة + إزالة.

ليس لاستبدال الكود ولكن للقيام بذلك إذا فشلت إعادة التسمية. (ولتمزيق الملف المصدر أيضًا في هذه الحالة.) ثم يتمتع الأشخاص الذين ليس لديهم قرص RAM على / tmp بالسرعة ويكون الأشخاص الذين لديهم قرص RAM على / tmp أكثر أمانًا.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات