make run_nokdbtests
ps -ef
make run_nokdbtests
ps -ef
يجب أن تتوقف الاختبارات عن عوامل gpg بعد انتهائها
كل اختبار تشغيل يولد المزيد من وكلاء gpg
+ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 05:57 pts/0 00:00:00 bash
root 11296 1 0 07:01 pts/0 00:00:00 sh -c /usr/bin/python2 /root/cppcms-1.2.0/tests/http_timeouts_test.py
root 11297 11296 0 07:01 pts/0 00:00:00 /usr/bin/python2 /root/cppcms-1.2.0/tests/http_timeouts_test.py write
root 28509 1 0 07:55 ? 00:00:00 gpg-agent --homedir /tmp/elektra-test.NmmZ2I/.gnupg --use-standard-soc
root 28519 1 0 07:55 ? 00:00:00 gpg-agent --homedir /tmp/elektra-test.6mb1t2/.gnupg --use-standard-soc
root 28539 1 0 07:55 ? 00:00:00 gpg-agent --homedir /tmp/elektra-test.5XdxDR/.gnupg --use-standard-soc
root 30656 1 0 08:00 pts/0 00:00:00 ps -ef
+ make run_nokdbtests
+ ps -ef
+ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 05:57 pts/0 00:00:00 bash
root 11296 1 0 07:01 pts/0 00:00:00 sh -c /usr/bin/python2 /root/cppcms-1.2.0/tests/http_timeouts_test.py
root 11297 11296 0 07:01 pts/0 00:00:00 /usr/bin/python2 /root/cppcms-1.2.0/tests/http_timeouts_test.py write
root 28509 1 0 07:55 ? 00:00:00 gpg-agent --homedir /tmp/elektra-test.NmmZ2I/.gnupg --use-standard-soc
root 28519 1 0 07:55 ? 00:00:00 gpg-agent --homedir /tmp/elektra-test.6mb1t2/.gnupg --use-standard-soc
root 28539 1 0 07:55 ? 00:00:00 gpg-agent --homedir /tmp/elektra-test.5XdxDR/.gnupg --use-standard-soc
root 30778 1 0 08:02 ? 00:00:00 gpg-agent --homedir /tmp/elektra-test.GZbzqb/.gnupg --use-standard-soc
root 30788 1 0 08:02 ? 00:00:00 gpg-agent --homedir /tmp/elektra-test.PEjcKs/.gnupg --use-standard-soc
root 30808 1 0 08:02 ? 00:00:00 gpg-agent --homedir /tmp/elektra-test.d6yL2g/.gnupg --use-standard-soc
root 30923 1 0 08:02 pts/0 00:00:00 ps -ef
شكرا لك على الإبلاغ عن المشكلة!
@ petermax2 هل من الممكن أن أوامر gpg أثناء الاختبارات تفرخ وكلاء gpg؟
عفوًا ، اعتقدت أن gpg سيتصل دائمًا بنفس الوكيل. وسوف التحقيق.
@ markus2330 هذا أيضًا هو السبب وراء وجود العديد من وكلاء gpg على الإصدار 2 الذي تم الإبلاغ عنه باستخدام معرف المستخدم الخاص بك ، حيث تعمل حاوية عامل الإرساء بـ 1000: 1000.
لكن المشكلة لا تقتصر على عامل الإرساء: يحتوي debian-stretch-simple على أكثر من 250 منها أيضًا
لا تتأثر بعض العقد لأنها تم إعدادها لتفرخ عامل gpg لجنكينز الذي تستخدمه الاختبارات (ربما ، يجب التأكيد)
شكرا لكما على النظر في هذا!
لا تتأثر بعض العقد لأنها تم إعدادها لتفرخ عامل gpg لجنكينز الذي تستخدمه الاختبارات (ربما ، يجب التأكيد)
إذا لم نتمكن من إيجاد طريقة لقتل الوكلاء الذين بدأناهم ، فيمكننا ببساطة أن نطلب أن البيئة لديها بالفعل وكيل gpg (# 1888).
ربما لا يلزم أن يبدأ وكيل gpg على الإطلاق ويمكننا منعه أثناء الاختبارات. لكن لا بد لي من إلقاء نظرة عليه في المساء.
عادة ما يتم تعيين mh GPG_AGENT_INFO
عند بدء تشغيل واحد ، في الماضي قمنا بتنظيف متغيرات البيئة بحيث قد يكون هذا قد أوضح البدايات المتعددة في الماضي. لا توجد فكرة لماذا لا يزال يحدث الآن على الرغم من ...
@ petermax2 الاختبارات التي تتطلب وكيل gpg (تم العثور عليها بإعادة تسمية وكيل gpg إلى gpg-agent.bak؛)):
testmod_fcrypt
testmod_crypto_openssl
testmod_crypto_gcrypt
يجب أن يعمل testmod_crypto_botan
تمامًا مثل testmod_crypto_gcrypt
و testmod_crypto_openssl
. هل اختبار Botan يعمل على الخادم؟
@ petermax2 ربما نعم. في البيئة التي اختبرت فيها لم يكن هناك نباتات مثبتة. ومع ذلك فهي تعمل هنا وربما أيضًا عوامل تفرخ.
انها ليست بهذه البساطة. حاولت استدعاء gpg
باستخدام الوسيطة --no-autostart
أثناء اختبارات الوحدة ، ومع ذلك لا يزال gpg يبدأ تشغيل الوكيل. --no-use-agent
مضحك. تقول صفحة الرجل:
--no-use-agent
This is dummy option. gpg2 always requires the agent.
إذا لم نتمكن من إيجاد طريقة لقتل الوكلاء الذين بدأناهم ، فيمكننا ببساطة أن نطلب أن البيئة لديها بالفعل وكيل gpg (# 1888).
هل يمكننا إعطاء هذه فرصة؟
أو لديك وظيفة كرون مثل
pgrep gpg-agent | xargs -d "\n" kill
أو شيء مشابه على بناء الخوادم / الحاويات؟
سأقوم بفحص الاختبار إذا كان الوكيل متاحًا ، إذا لم يبدأ تشغيله والاحتفاظ به pid. في تنظيف الاختبار ، أوقف العامل. كل شيء آخر هو اختراق.
أنت محق ، السؤال الوحيد هو أين يجب أن تحدث البداية والتوقف. يبدو أن القيام بذلك داخل وكلائنا / عمال الرصيف أسهل مما هو عليه في اختبارات الوحدة المكتوبة في C.
إليكم ما تعلمته حتى الآن:
من الممكن منع البدء التلقائي لـ gpg-agent
مع الخيار --no-autostart
، إذا تم استخدامه باستمرار مع جميع مكالمات gpg
. ومع ذلك ، بدون gpg-agent
gpg2
لا يمكن تنفيذ أي عمليات تتطلب المفتاح الخاص (مثل فك التشفير والتوقيعات).
من الممكن أيضًا أن تتفرع gpg-agent --server
ولكن بعد ذلك gpg2
لا يمكن الاتصال بالوكيل. تم إهمال متغير البيئة GPG_AGENT_INFO
ولم يعد يعتبر من قبل gpg2
.
سأحاول مفترق و execv gpg-agent --daemon
. أنا فقط بحاجة إلى طريقة لمعرفة معرف المنتج (PID) لـ gpg-agent
حتى أستطيع SIGTERM
عند الانتهاء من الاختبارات.
يبدو أن القيام بذلك داخل وكلائنا / عمال الرصيف أسهل مما هو عليه في اختبارات الوحدة المكتوبة في C.
أسهل بكثير ، أعتقد :-)
أعتقد أن قرارك كان صائبًا بمجرد استخدام الطريقة الافتراضية لـ gpg للاتصال بالوكلاء.
كبديل لبدء / إيقاف وكيل gpg ، يمكننا أيضًا تعطيل "عامل الاستخدام" في .gnupg / gpg.conf
ليس لدي مشكلة في بدء تشغيل وكيل واحد تلقائيًا (وحتى تشغيله). لدي مشكلة مع الاختبارات اللاحقة في بدء اختبار جديد
أعتقد أن قرارك كان صائبًا بمجرد استخدام الطريقة الافتراضية لـ gpg للاتصال بالوكلاء.
في بيئة الإنتاج هو الخيار الأفضل. على جهازي ، اتصل دائمًا بالوكيل نفسه crypto
و fcrypt
ويعمل التكامل مع Yubikey الخاص بي جيدًا.
في بيئات الاختبار الخاصة بنا ، يجب أن نحتفظ بنسخة واحدة من الوكيل وتشغيله قبل بدء الاختبارات. أعتقد أن المشكلة تكمن في أننا نطهر البيئة ، كما ذكر
أعتقد أن المشكلة هي أننا نطهر البيئة
لا ينبغي لنا بعد الآن. لكن المشكلة استمرت
إذا حاول وكيل gpg الاتصال عبر البيئة فمن الواضح أنه لا يمكن أن يعمل ، فلن يؤدي تشغيل الاختبار التالي إلى تعيين البيئة من خلال تشغيل اختباري من قبل.
أحب اتباع خيارين أفضل:
يبدو أن الإعداد ، حيث تبدأ الشياطين عند الطلب دون طريقة عالمية لمعرفة ما إذا كان البرنامج الخفي قد بدأ بالفعل (وفارز env ليست عالمية ولكنها خاصة بالعملية) ، معطلة. يجب ألا نحاول إصلاح هذا في الاختبارات.
السبب الذي يجعلك تفرخ الكثير من الوكلاء هو الدليل الرئيسي المختلف باستخدام الخيار --homedir ، وإلا فسيتم استخدام دليل واحد. من GnuPG 2.1 ، يتم إجراء كل الاتصالات مع الوكيل من خلال مقبس في دليل GnuPG الرئيسي.
نحن لا نستخدم خيار homedir. ويصف https://dev.gnupg.org/T3218 الحل البديل لـ stackoverflow بأنه "حل (محرج للغاية)".
ربما يكون مجرد بدء وكيل gpg هو البديل الأكثر إثباتًا للمستقبل (بطريقة مسيطر عليها داخل بيئتنا). يبدو أن بدء تشغيل وكيل gpg لم يعد اختياريًا في الإصدارات الأخيرة. (مما يجعل خياري 2. أعلاه غير منطقي)
نحن لا نستخدم خيار homedir.
نعم ، لم أجد من أين أتت لكنها تطابق المشكلة (انظر المرجع السابق) حيث أن جميع الوكلاء ولّدوا بواحد مختلف.
لقد كان تلميحًا جيدًا ، علمت أن بدء تشغيل وكيل gpg لم يعد اختياريًا.
مما يجعل الأمر واضحًا جدًا أننا بحاجة إلى البدء وإيقافه. ولا تحاول تجنب البداية.
نحن لا نستخدم خيار homedir.
نعم ، لم أجد من أين أتت لكنها تطابق المشكلة (انظر المرجع)
نحن لا نستخدم الخيار --home-dir
بشكل صريح ، لكن ps -ef
يظهر أن gpg
يعينه بطريقة ما على أي حال.
https://wiki.archlinux.org/index.php/GnuPG
يستخدم GnuPG $ GNUPGHOME للإشارة إلى الدليل حيث يتم تخزين ملفات التكوين الخاصة به. افتراضيًا ، لم يتم تعيين $ GNUPGHOME ويتم استخدام $ HOME بدلاً منه ؛ وبالتالي ، ستجد دليل ~ / .gnupg بعد التثبيت مباشرة.
لتغيير الموقع الافتراضي ، قم بتشغيل gpg بهذه الطريقة $ gpg --homedir path / to / file أو اضبط متغير بيئة GNUPGHOME.
""
@ petermax2 هل يمكنك التحقق مما إذا كان HOME متاحًا في موقع الاختبارات الخاص بك؟
مثيرة للاهتمام أيضًا https://www.gnupg.org/documentation/manuals/gnupg/Ephemeral-home-directories.html :
أنشئ دليلًا مؤقتًا ، وأنشئ (أو انسخ) تكوينًا يلبي احتياجاتك ، واجعل gpg يستخدم هذا الدليل إما باستخدام متغير البيئة GNUPGHOME ، أو الخيار --homedir. تدعم GPGME هذا أيضًا على أساس كل سياق ، من خلال تعديل معلومات محرك السياقات. قم الآن بتنفيذ أي عملية تريدها ، واستيراد وتصدير المواد الرئيسية حسب الضرورة. بمجرد الانتهاء ، يمكنك حذف الدليل. ستكتشف جميع خدمات الواجهة الخلفية لـ GnuPG التي تم بدؤها هذا الأمر وستغلق
اختبرت هذا في الحاوية الخاصة بي ونظف العملية تلقائيًا كما وعدت.
@ petermax2 هل يمكنك التحقق مما إذا كان HOME متاحًا في موقع الاختبارات الخاص بك؟
نعم ، يتوفر HOME
:
HOME = /tmp/elektra-test.3vLR4L
حسنًا ، هناك شيء ما في مجموعة الاختبار يتخطى HOME في دليل tmp (وهو أمر جيد). إذا كان هذا لا يزال متاحًا أثناء التنظيف ، فيجب إزالته فقط لإيقاف العامل. سيكون ذلك حلا مثاليا.
إذا قمنا ببساطة بتعيين GNUPGHOME
يتم إنتاج مثيل واحد فقط من gpg-agent
. لا يتم الكتابة فوق GNUPGHOME
قبل بدء الاختبار.
مع تعيين GNUPGHOME
، يتم تشغيل واحد فقط gpg-agent
بعد إجراء اختبارات متعددة.
أعتقد أن هذا هو أبسط حل.
ضع في اعتبارك أنه إذا قمت بمشاركة الدليل الرئيسي الخاص بك ، فقد لا تتمكن من إجراء الاختبارات بشكل متوازي.
وستظل بحاجة إلى حذف GNUPGHOME بعد ذلك (أنت لا تريد وكيل pgp المتبقي للرد على مكالمات المستخدم الذي قام بتسجيل الدخول ، أليس كذلك؟).
وماذا سيحدث إذا تم ترحيل النظام المستهدف إلى GNUPGHOME ، لذلك ستحتاج إلى حفظ البيئة الموجودة واستعادتها يدويًا بعد الاختبارات.
سأكون ممتنًا لو تمكنا من التراجع والنظر في كيفية تأثير هذه الاختبارات على أجهزة المستخدم ، وليس فقط بيئة خادم الاختبار.
قد لا تتمكن من إجراء الاختبارات بشكل متوازي.
قمت بتشغيل البرنامج النصي:
#!/bin/bash
mkdir /tmp/x
export GNUPGHOME=/tmp/x
for run in {1..1000000}
do
ctest -R crypto_openssl &
done
بدون أي مشاكل. يجب أن يتعامل GPG مع القفل ، إلخ.
لا تريد وكيل pgp الذي طال انتظاره يجيب على مكالمات المستخدم الذي قام بتسجيل الدخول ، أليس كذلك؟
هذه هي الطريقة التي تم بها تصميم gpg-agent
: فهو يعمل إلى الأبد حتى تنتهي جلسة المستخدم. لا يكتب PID الخاص به في مكان ما ، ولا توجد أوامر لإنهاءه. يتفاعل فقط مع SIGTERM
.
حاولت الحصول على fork
gpg-agent
من داخل اختبار الوحدة باستخدام الخيار --server
، لذلك سيكون لدينا PID إلى kill
بعد ذلك. ولكن بعد ذلك ، لا يفتح gpg-agent
المنافذ المطلوبة عند $GNUPGHOME
وتعيد اختبارات الوحدة فتح مثيل آخر من الوكيل (الذي يعمل في الوضع --daemon
). أيضًا لا توجد طريقة لجعل gpg-agent
يفتح أي مآخذ عندما تكون في وضع --server
(لقد تحققت من هذا باستخدام الكود المصدري gpg-agent
).
gpg-agent
الصعب التحكم في gpg-agent
. حالة الاستخدام لدينا غير مغطاة. الخيار الوحيد هو SIGTERM
.
تماثل
كنت أفكر أكثر في رغبتك في فصل وكلاء gpg الذين لا يجب أن يؤثروا على بعضهم البعض. أي أنك تريد فقط أن يكون لدى الوكيل أ مفتاح الاختبار أ ، وأن يكون لدى الوكيل ب مفتاح الاختبار ب. إذا لم تكن هناك حاجة لذلك ، فلا بأس من وجود منزل tmp مشفر.
قتل عامل gpg
عند التحقيق في المشكلة لأول مرة ، صادفت موقع ويب (مرتبط أعلاه) ذكر أن الطريقة المتوقعة لإغلاق وكيل مؤقت gpg هو حذف دليل gpg الرئيسي.
لذلك إذا قمت بتعيين GNUPGHOME على /tmp/elektra_tests/gpg
وأثناء تنظيف الاختبار ، احذف دليل tmp هذا ، فسيكون ذلك جيدًا.
لذلك إذا قمت بتعيين GNUPGHOME على / tmp / elektra_tests / gpg وأثناء تنظيف الاختبار ، احذف دليل tmp هذا ، فسيكون ذلك جيدًا.
إنها تعمل! سأقوم بدمج هذا الإصلاح في حالات الاختبار crypto
و fcrypt
. شكرا على البقشيش!
لدي نموذج أولي عملي. العلاقات العامة قادمة غدا.
يجب أن تكون ثابتة بالرقم 2056 #. يرجى إعادة الفتح إذا استمرت المشكلة.
التعليق الأكثر فائدة
ضع في اعتبارك أنه إذا قمت بمشاركة الدليل الرئيسي الخاص بك ، فقد لا تتمكن من إجراء الاختبارات بشكل متوازي.
وستظل بحاجة إلى حذف GNUPGHOME بعد ذلك (أنت لا تريد وكيل pgp المتبقي للرد على مكالمات المستخدم الذي قام بتسجيل الدخول ، أليس كذلك؟).
وماذا سيحدث إذا تم ترحيل النظام المستهدف إلى GNUPGHOME ، لذلك ستحتاج إلى حفظ البيئة الموجودة واستعادتها يدويًا بعد الاختبارات.
سأكون ممتنًا لو تمكنا من التراجع والنظر في كيفية تأثير هذه الاختبارات على أجهزة المستخدم ، وليس فقط بيئة خادم الاختبار.