Certbot: ImportError: تفتقد الوحدة النمطية 'pyOpenSSL' الوظيفة المطلوبة

تم إنشاؤها على ١٧ أبريل ٢٠١٧  ·  35تعليقات  ·  مصدر: certbot/certbot

نظام التشغيل الخاص بي (يشمل الإصدار):

إصدار CentOS Linux 7.3.1611

لقد قمت بتثبيت Certbot مع (certbot-auto ، مدير حزمة نظام التشغيل ، النقطة ، إلخ):

مدير حزم أنظمة التشغيل

قمت بتشغيل هذا الأمر وأنتج هذا الناتج:

تجديد certbot

Traceback (آخر مكالمة أخيرة):
ملف "/ bin / certbot" ، السطر 7 ، بتنسيق
من certbot.main import main
ملف "/usr/lib/python2.7/site-packages/certbot/main.py" ، السطر 17 ، في
من عميل استيراد certbot
ملف "/usr/lib/python2.7/site-packages/certbot/client.py" ، السطر 10 ، في
من acme import client كـ acme_client
ملف "/usr/lib/python2.7/site-packages/acme/client.py" ، السطر 31 ، في
request.packages.urllib3.contrib.pyopenssl.inject_into_urllib3 () # type: ignore
ملف "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py" ، السطر 112 ، في injection_into_urllib3
_validate_dependencies_met ()
ملف "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py" ، السطر 147 ، في _validate_dependencies_met
رفع ImportError ("تفتقد الوحدة النمطية 'pyOpenSSL' الوظيفة المطلوبة."
ImportError: تفتقد الوحدة النمطية 'pyOpenSSL' الوظيفة المطلوبة. حاول الترقية إلى الإصدار v0.14 أو أحدث.

اختلف سلوك Certbot عما كنت أتوقعه للأسباب التالية:

يجب أن يجدد بنجاح بدلاً من الأخطاء.

فيما يلي سجل Certbot يوضح المشكلة (إن وجد):

يتم تخزين السجلات في /var/log/letsencrypt افتراضيًا. لا تتردد في تنقيح المجالات والبريد الإلكتروني وعناوين IP كما تراه مناسبًا.

لا توجد إدخالات في السجل. لقد قمت بإزالة pyopenssl وإعادة تثبيته.

عرض النقطة pyOpenssl

الاسم: pyOpenSSL
الإصدار: 16.2.0
الملخص: وحدة غلاف Python حول مكتبة OpenSSL
الصفحة الرئيسية: https://pyopenssl.readthedocs.io/
المؤلف: Hynek Schlawack
المؤلف البريد الإلكتروني: [email protected]
الترخيص: رخصة أباتشي ، الإصدار 2.0
الموقع: /usr/lib64/python2.7/site-packages
يتطلب: ستة ، تشفير

لكن الخطأ لا يزال قائما. اي فكرة ؟

pkging

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

يا رفاق ، لا تخلط yum الحزم المثبتة من خلال pip . يتضمن الإصلاح المناسب إزالة حزم النقطة وتثبيت كل شيء بدءًا من yum . لقد حددتها هنا .

لا تحتاج إلى أحدث إصدار من pyOpenSSL على CentOS 7 لتشغيل certbot! كي لا نقول إن الاعتماد على الحزم الثالثة لن يقودك إلى أي شيء جيد ، في النهاية :)

pip uninstall requests
yum reinstall python-requests

pip uninstall six
yum reinstall python-six

pip uninstall urllib3
yum reinstall python-urllib3

ال 35 كومينتر

ربما هناك العديد من إصدارات pyOpenSSL بحيث يتم الخلط بين urllib3. في /usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py ، يجب أن تكون هناك بعض الأسطر مثل هذا:

    # pyOpenSSL 0.14 and above use cryptography for OpenSSL bindings. The _x509
    # attribute is only present on those versions.
    from OpenSSL.crypto import X509
    x509 = X509()
    if getattr(x509, "_x509", None) is None:
        raise ImportError("'pyOpenSSL' module missing required functionality. "
                          "Try upgrading to v0.14 or newer.")

هل يمكنك إضافة بعض رموز التصحيح ومعرفة ما هو الإخراج؟

    # pyOpenSSL 0.14 and above use cryptography for OpenSSL bindings. The _x509
    # attribute is only present on those versions.
    import OpenSSL.crypto
    print(OpenSSL.crypto)
    from OpenSSL.crypto import X509
    x509 = X509()
    if getattr(x509, "_x509", None) is None:
        raise ImportError("'pyOpenSSL' module missing required functionality. "
                          "Try upgrading to v0.14 or newer.")

احذر من أن لغة Python لا تحب علامات التبويب. دائما أدخل مسافات لتحديد الهوية. أيضا ، أنت بحاجة إلى الجذر لتعديل هذا الملف.

هنا هو الإخراج:

تجديد certbot



Traceback (آخر مكالمة أخيرة):
ملف "/ bin / certbot" ، السطر 7 ، بتنسيق
من certbot.main import main
ملف "/usr/lib/python2.7/site-packages/certbot/main.py" ، السطر 17 ، في
من عميل استيراد certbot
ملف "/usr/lib/python2.7/site-packages/certbot/client.py" ، السطر 10 ، في
من acme import client كـ acme_client
ملف "/usr/lib/python2.7/site-packages/acme/client.py" ، السطر 31 ، في
request.packages.urllib3.contrib.pyopenssl.inject_into_urllib3 () # type: ignore
ملف "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py" ، السطر 112 ، في injection_into_urllib3
_validate_dependencies_met ()
ملف "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py" ، السطر 149 ، في _validate_dependencies_met
رفع ImportError ("تفتقد الوحدة النمطية 'pyOpenSSL' الوظيفة المطلوبة."
ImportError: تفتقد الوحدة النمطية 'pyOpenSSL' الوظيفة المطلوبة. حاول الترقية إلى الإصدار v0.14 أو أحدث.

/usr/lib64/python2.7/site-packages/OpenSSL/crypto.so

يبدو هذا المسار مثل حزمة pyOpenSSL سابقة. هل يمكنك إزالة pyOpenSSL عبر yum والمحاولة مرة أخرى؟

أواجه نفس المشكلة على centos7. لا تساعد إزالة pyOpenSSL.x86_64 0: 0.13.1-3.el7 ، لأن yum install certbot سيعيد تثبيته مرة أخرى.

ومع ذلك ، وجدت حلاً بديلاً لعطل RPM:

yum remove pyOpenSSL.x86_64
cd
mkdir virtualenv
cd virtualenv/
virtualenv --no-site-packages -p /usr/bin/python2.7 certbot
. ~/virtualenv/certbot/bin/activate
pip import six packaging appdirs
pip install setuptools --upgrade                                                                                                                                                                                    pip install certbot
certbot help

نفس المشكلة هنا على تثبيت centos جديد.

rpm --query centos-release  # centos-release-7-3.1611.el7.centos.x86_64
wget ftp://ftp.muug.mb.ca/mirror/centos/7.3.1611/cloud/x86_64/openstack-mitaka/common/pyOpenSSL-0.15.1-1.el7.noarch.rpm
sudo rpm -Uvh pyOpenSSL-0.15.1-1.el7.noarch.rpm
sudo yum install certbot
certbot renew  # OK

أعتقد أن هذه مشكلة CentOS أكثر من كونها مشكلة certbot. هل يمكن لأي شخص إبلاغ CentOS بأن pyOpenSSL الخاص به قديم جدًا؟

استمرت المشكلة في نظامي حتى بعد الترقية إلى pyOpenSSL 16. شيء ما

حدثت نفس المشكلة مؤخرًا على جهاز CentOS 7 الخاص بي.
الحل الوحيد العملي هو pip install pyOpenSSL=0.13.1

في الشهرين الماضيين ، فشلت.
وحاولت مرة أخرى الآن ، لكنها فشلت مرة أخرى.

الإخراج:

>> sudo certbot certonly --standalone -d mydomain.com

<< Traceback (most recent call last):
  File "/bin/certbot", line 9, in <module>
    load_entry_point('certbot==0.12.0', 'console_scripts', 'certbot')()
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 378, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2566, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2260, in load
    entry = __import__(self.module_name, globals(),globals(), ['__name__'])
  File "/usr/lib/python2.7/site-packages/certbot/main.py", line 21, in <module>
    from certbot import client
  File "/usr/lib/python2.7/site-packages/certbot/client.py", line 10, in <module>
    from acme import client as acme_client
  File "/usr/lib/python2.7/site-packages/acme/client.py", line 31, in <module>
    requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3()
  File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 112, in inject_into_urllib3
    _validate_dependencies_met()
  File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 147, in _validate_dependencies_met
    raise ImportError("'pyOpenSSL' module missing required functionality. "
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.

ثم أحاول هذا وهو يعمل:

_20170502100430

رابط الإجابة: https://serverfault.com/questions/830284/certbot-for-letsencrypt-missing-pyopenssl-module

للإشارة فقط ... من غير الآمن عمومًا تحديث pyOpenSSL عبر pip على CentOS نظرًا لأنه من الممكن كسر yum بهذه الطريقة.

ما هي حزمة certbot التي تستخدمها؟ سأكون ممتنًا إذا كان بإمكانك تثبيت 0.13.0 من اختبار epel ، والتأكد دائمًا من أن نظامك لديه تحديث yum كامل.

قد تحتاج إلى استخدام yum لإعادة تثبيت pyOpenSSL لإصلاح نظامك (تحقق من حالته باستخدام rpm -qV pyOpenSSL).

هناك مشكلة في مؤقت تجديد systemd مع هذه الحزمة ، وهذا هو السبب في أنني لم أقم بدفعها إلى الاستقرار ، ولكن فقط أقوم بإجراء طلبات certbot وسيعمل تجديد certbot اليدوي.

الإصدار 0.14.0 في طريقه أيضًا ... وقد اختبرت ذلك للتو في AWS.

أشعر بالفضول - قام المؤلف الأصلي بتثبيته عبر مدير الحزم ، فأين سنثبّت إصدارًا من أجل النقطة؟
هل لا يزال الناس يعانون من هذه المشكلة؟ وإذا كان الأمر كذلك ، فما طريقة التثبيت التي تستخدمها؟

قد ترغب في تجربة الطريقة الموضحة في Dockerfile هذا ، والتي عملت معي:
https://github.com/identinetics/docker-nginx/blob/master/Dockerfile#L65

لا تزال تواجه المشكلة في نظام CentOS 7.3 المحدث والمثبت حديثًا.
تم إصلاح المشكلة عن طريق تثبيت pyOpenSSL rpm المحدث (بدا pyOpenSSL-0.14-3.fc222 كافياً ، بينما لم يعمل pyOpenSSL-16.2.0-1.fc25) ، ولكن كيف تتأكد من أنه لا يكسر أي شيء آخر؟!

https://www.rpmfind.net/linux/rpm2html/search.php؟query=pyOpenSSL

شكرا

@ tisc0 أنا مهتم جدًا بمزيد من التفاصيل حول كيفية تثبيت هذا

عندما أنشأت حزم centos7 certbot ، اختبرتها في AWS دون أي مشاكل - وبالتأكيد ليس ما وصفته أو وصفه لهذه المشكلة.

إنها لفكرة مروعة أن تقوم بتثبيت فيدورا rpm مثل ذلك مباشرة على centos7 - خاصة مع حزمة أساسية مثل pyOpenSSL.

مرحبا هوغارثج ،
آسف لقلة التفاصيل ، مشغول نوعا ما هذه الأيام :)
باختصار :

  • لم يحل تثبيت فيدورا rpm المشكلة (فقط certbot - help كانت تعمل ، على ما أذكر)
  • بعد اللعب لفترة طويلة مع الحزم ، والتحقق من أنها كانت تعمل بالفعل في centos 7 جديدة أخرى (بدون حزم خارج الصندوق) ، أعدت تثبيتها وحصلت أخيرًا على خطأ آخر حول urllib3 (طلب أيضًا تثبيت إصدار محدث ، والذي لم أشتري ؛]).
  • قررت إزالة / إعادة تثبيت urllib3 باستخدام yum (بدلاً من rpm -e) وجميع الحزم التابعة ؛ في هذه الحالة ، يحتاج عميل ipa أيضًا إلى بعض الحزم الشائعة ...
  • لقد أعدت تثبيت urllib3 و certbot (بهذا الترتيب): لقد نجح الأمر
  • لقد أعدت أخيرًا تثبيت عميل ipa وهو يعمل الآن.

[ root @ c7-dse ~] # echo N | yum يزيل python-urllib3 | awk "{print $ 1}"
(...)
التبعيات

==============
صفقة
إزالة:
python-urllib3
إزالة
سيرتبوت
ipa- العميل
طلبات بيثون
python2-acme
python2-certbot
python2-ipaclient
python2-ipalib

نرحب بأي فكرة لشرح سبب إعادة تثبيت بعض الحزم وجعلها تعمل :)

@ tisc0 شكرا على التفاصيل الإضافية

غالبًا ما يتسبب التثبيت / الإزالة الإجباري للحزم في حدوث مشكلات - كما هو الحال مع ترقيات مكتبات النظام.

نادرًا ما يكون من الجيد الحصول على حزمة Fedora لاستخدام CentOS دون إعادة بناء الحزمة نفسها من src.rpm

من خلال إعادة تثبيت الحزم (بدلاً من إجراء إزالة وتثبيت مع مشكلات التبعية ، يمكن أن تكون إعادة التثبيت هي المنقذ) يتم التحقق من صحة الملفات الأصلية.

أنا سعيد جدًا لسماع أن إعادة تثبيت حزم CentOS تعمل من أجلك :)

نظرًا لأن @ tisc0 يبدو أن لديه إعداد عمل الآن ،

بالنسبة إلى CentOS7 ، ما عليك سوى "mv /usr/lib64/python2.7/site-packages/OpenSSL /usr/lib64/python2.7/site-packages/pyOpenSSL" ، وهذا يعمل مثل السحر بالنسبة لي !!!

الاختراق القذر: 1st_place_medal: ؛)

واجهت نفس المشكلة ، وذلك لأن pip install -U قام بالكتابة فوق وحدات python المثبتة من RPM.

لحل هذا قمت بما يلي:

مشكلة

  File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 147, in _validate_dependencies_met
    raise ImportError("'pyOpenSSL' module missing required functionality. "
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.

المحلول

[root<strong i="12">@kolla</strong> ~]# rpm -qf /usr/lib64/python2.7/site-packages/OpenSSL/
pyOpenSSL-0.13.1-3.el7.x86_64
[root<strong i="13">@kolla</strong> ~]# rpm -qf /usr/lib/python2.7/site-packages/urllib3
python-urllib3-1.10.2-2.el7_1.noarch

[root<strong i="14">@kolla</strong> ~]# rpm --nodeps -e python-urllib3
[root<strong i="15">@kolla</strong> ~]# rm -rf /usr/lib/python2.7/site-packages/urllib3/
[root<strong i="16">@kolla</strong> ~]# yum -y install python-urllib3

مشكلة

  File "/usr/lib/python2.7/site-packages/requests/__init__.py", line 90, in <module>
    from urllib3.exceptions import DependencyWarning
ImportError: cannot import name DependencyWarning
[root<strong i="20">@kolla</strong> ~]# rpm -qf /usr/lib/python2.7/site-packages/requests
python-requests-2.6.0-1.el7_1.noarch

المحلول

[root<strong i="24">@kolla</strong> ~]# rpm --nodeps -e python-requests
[root<strong i="25">@kolla</strong> ~]# rm -rf /usr/lib/python2.7/site-packages/requests
[root<strong i="26">@kolla</strong> ~]# yum -y install python-requests   

تحديث من 29 يناير 2018:

واجهت نفس المشكلة مرة أخرى ، هذه المرة كان من الأسهل بكثير استخدام حاوية عامل الإرساء :)

alias certbot='docker run --rm -ti -v /etc/letsencrypt:/etc/letsencrypt -p 80:80 certbot/certbot:v0.21.1'

cnritng إنه يعمل أيضًا بالنسبة لي

أي شخص لا يزال يعاني من هذه المشكلة ، جرب هذا:

rpm --query centos-release  # centos-release-7-3.1611.el7.centos.x86_64
wget ftp://ftp.muug.ca/mirror/centos/7/cloud/x86_64/openstack-newton/common/pyOpenSSL-0.15.1-1.el7.noarch.rpm
sudo rpm -Uvh pyOpenSSL-0.15.1-1.el7.noarch.rpm
sudo yum install certbot
certbot renew  # OK

من sulliwane . لاحظ أن العنوان ftp://ftp.muug.ca/mirror/... قد تغير.

شكرا JellyBool

يا رفاق ، لا تخلط yum الحزم المثبتة من خلال pip . يتضمن الإصلاح المناسب إزالة حزم النقطة وتثبيت كل شيء بدءًا من yum . لقد حددتها هنا .

لا تحتاج إلى أحدث إصدار من pyOpenSSL على CentOS 7 لتشغيل certbot! كي لا نقول إن الاعتماد على الحزم الثالثة لن يقودك إلى أي شيء جيد ، في النهاية :)

pip uninstall requests
yum reinstall python-requests

pip uninstall six
yum reinstall python-six

pip uninstall urllib3
yum reinstall python-urllib3

الخطوات المذكورة أعلاه من dvershinin هي الحيلة بالنسبة لي

حصلت أيضًا على أشياء تعمل مع ما نشرته dvershinin . كان علينا تغيير السطر الأخير من "yum أعد تثبيت python-urllib3" إلى "yum install python-urllib3"

بالنسبة إلى CentOS7 ، ما عليك سوى "mv /usr/lib64/python2.7/site-packages/OpenSSL /usr/lib64/python2.7/site-packages/pyOpenSSL" ، وهذا يعمل مثل السحر بالنسبة لي !!!

دائمًا ما يواجه النظام الشبيه بالنافذة * المشاكل المماثلة: تبعية الملف معطلة.

يا رفاق ، لا تخلط yum الحزم المثبتة من خلال pip . يتضمن الإصلاح المناسب إزالة حزم النقطة وتثبيت كل شيء بدءًا من yum . لقد حددتها هنا .

لا تحتاج إلى أحدث إصدار من pyOpenSSL على CentOS 7 لتشغيل certbot! كي لا نقول إن الاعتماد على الحزم الثالثة لن يقودك إلى أي شيء جيد ، في النهاية :)

pip uninstall requests
yum reinstall python-requests

pip uninstall six
yum reinstall python-six

pip uninstall urllib3
yum reinstall python-urllib3

شكرا لك! إنه عمل!

dvershinin fix لا يعمل بالنسبة لي حاليًا - بعد اتباع الخطوات التي وصفها في Centos 7 ، أتلقى الخطأ التالي:

VersionConflict: (urllib3 1.10.2 (/usr/lib/python2.7/site-packages)، Requirement.parse ('urllib3> = 1.20، <1.26'))

@ keir-lavelle الإصلاح الخاص بي هو مجرد محاولة لاستعادة النظام إلى حالته الأصلية بعد تعرضه لأضرار بالغة باستخدام مستخدم pip تحت root (وهو ما يجعل الناس يفعلون ذلك ، دون مراعاة حقيقة أنه لا ينبغي أبدًا القيام بذلك في أنظمة CentOS / RHEL!)

لذلك إذا كنت تشعر بالمغامرة في إصلاحه ، يمكنك اتباع الرابط الذي قدمته والذي يحاول إصلاحه بشكل أكبر عن طريق إزالة جميع حزم Python (ضع في اعتبارك أن yum يعتمد على Python أيضًا) ، وهو علاوة على ذلك مشروع خطير . (لأنه يمكنك كسر المزيد).

  • إذا كان بإمكانك استعادة الخادم الخاص بك من بعض اللقطات / النسخ الاحتياطي حيث يعمل certbot ، فيجب أن تكون بخير
  • بخلاف ذلك ، يبدو أن "إزالة جميع حزم / إعادة تثبيت Python" هو الطريقة الوحيدة للإصلاح (ولكن تأكد من مراعاة عواقب القيام بذلك إذا لم تتمكن ، لسبب ما ، من الحصول على yum في حالة صالحة للعمل ).

وبالطبع ، من المفيد التذكر مرة أخرى: لا تستخدم تثبيتات pip أو python أقل من root . هذا كيف ينكسر في المقام الأول. إذا لم يحدث - فلن ينكسر.

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

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