Certbot: AttributeError: objek 'module' tidak memiliki atribut 'pyopenssl'

Dibuat pada 30 Agu 2018  ·  35Komentar  ·  Sumber: certbot/certbot

Ketika saya menjalankan certbot seperti ini:
sudo certbot --nginx
Saya mendapat:

Traceback (most recent call last):
  File "/bin/certbot", line 9, in <module>
    load_entry_point('certbot==0.26.1', 'console_scripts', 'certbot')()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 570, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2751, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2405, in load
    return self.resolve()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2411, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  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 16, in <module>
    from acme import client as acme_client
  File "/usr/lib/python2.7/site-packages/acme/client.py", line 39, in <module>
    urllib3.contrib.pyopenssl.inject_into_urllib3()
AttributeError: 'module' object has no attribute 'pyopenssl'

versi python saya adalah 2.7.12 dan linux os: 7.4

fedora / redhat / CentOS help wanted

Komentar yang paling membantu

Ini solusi saya:

pip install requests==2.6.0
easy_install --upgrade pip

Semua 35 komentar

Saya menduga ini karena konflik antara paket Python yang diinstal dari pengelola paket OS Anda dan pip seperti di # 6245.

Di OS Linux mana Anda dan bagaimana Anda menginstal Certbot?

Saya mendapatkan kesalahan yang sama (atau hampir sama):

# yum install certbot
...
Running transaction
  Installing : pyOpenSSL-0.13.1-3.el7.x86_64                                                                                                                                                            1/6
  Installing : python2-josepy-1.1.0-1.el7.noarch                                                                                                                                                        2/6
  Installing : python-ndg_httpsclient-0.3.2-1.el7.noarch                                                                                                                                                3/6
  Installing : python2-acme-0.26.1-1.el7.noarch                                                                                                                                                         4/6
  Installing : python2-certbot-0.26.1-2.el7.noarch                                                                                                                                                      5/6
  Installing : certbot-0.26.1-2.el7.noarch                                                                                                                                                              6/6
  Verifying  : pyOpenSSL-0.13.1-3.el7.x86_64                                                                                                                                                            1/6
  Verifying  : python2-josepy-1.1.0-1.el7.noarch                                                                                                                                                        2/6
  Verifying  : python2-acme-0.26.1-1.el7.noarch                                                                                                                                                         3/6
  Verifying  : python2-certbot-0.26.1-2.el7.noarch                                                                                                                                                      4/6
  Verifying  : certbot-0.26.1-2.el7.noarch                                                                                                                                                              5/6
  Verifying  : python-ndg_httpsclient-0.3.2-1.el7.noarch                                                                                                                                                6/6

Installed:
  certbot.noarch 0:0.26.1-2.el7

Dependency Installed:
  pyOpenSSL.x86_64 0:0.13.1-3.el7    python-ndg_httpsclient.noarch 0:0.3.2-1.el7    python2-acme.noarch 0:0.26.1-1.el7    python2-certbot.noarch 0:0.26.1-2.el7    python2-josepy.noarch 0:1.1.0-1.el7     

Complete!
# certbot --version
Traceback (most recent call last):
  File "/bin/certbot", line 9, in <module>
    load_entry_point('certbot==0.26.1', '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 16, in <module>
    from acme import client as acme_client
  File "/usr/lib/python2.7/site-packages/acme/client.py", line 39, in <module>
    urllib3.contrib.pyopenssl.inject_into_urllib3()
AttributeError: 'module' object has no attribute 'pyopenssl'

Versi OS: CentOS Linux rilis 7.5.1804 (Core)

Edit2: Sehubungan dengan https://github.com/certbot/certbot/issues/6245 , python-urllib3 telah diinstal menggunakan yum, dan versi saat ini (1.10.2-5.el7) tidak memiliki symlink yang disebutkan di packages/ssl_match_hostname tetapi sebagai direktori biasa dengan file di dalamnya.

Mencoba mereproduksi masalah membawa saya ke ini:

# python
Python 2.7.5 (default, Jul 13 2018, 13:06:57)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib3.contrib.pyopenssl
>>> urllib3.contrib.pyopenssl.inject_into_urllib3()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 118, in inject_into_urllib3                                                                                                   
    _validate_dependencies_met()
  File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 153, in _validate_dependencies_met                                                                                            
    raise ImportError("'pyOpenSSL' module missing required functionality. "
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.
>>>
# yum info pyOpenSSL
...
Installed Packages
Name        : pyOpenSSL
Arch        : x86_64
Version     : 0.13.1
Release     : 3.el7
Size        : 628 k
Repo        : installed

Jadi tampaknya ada ketergantungan versi diam untuk urllib3.contrib.pyopenssl pada pyOpenSSL v0.14, yang tidak disediakan oleh Centos7 pada saat ini.

Sunting: Setelah menginstal versi yang lebih baru (0.15.1) dari https://cbs.centos.org/koji/buildinfo?buildID=1500 kesalahan di atas hilang, tetapi bukan kesalahan yang dihasilkan oleh certbot.

Beberapa percobaan-dan-kesalahan dengan usr/lib/python2.7/site-packages/acme/client.py membawa saya pada penemuan bahwa ketika saya mengomentari impor from requests_toolbelt.adapters.source import SourceAddressAdapter , kesalahan itu hilang!
Untungnya, ini hanya digunakan sekali, jadi selama saya memberikan source_address saya bisa lolos dengan perbaikan yang tidak terlalu halus ini. :)

@ github-abcde, saya merekomendasikan posting di https://community.letsencrypt.org. Pada pemasangan CentOS 7 baru, keduanya:

python -c 'import requests; requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3()'

dan

python -c 'import urllib3.contrib.pyopenssl; urllib3.contrib.pyopenssl.inject_into_urllib3()'

bekerja untuk saya.

Selain itu, setelah menginstal python-urllib3 1.10.2-5.el7 , /usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py tidak berisi kode untuk memunculkan pengecualian jika versi pyOpenSSL kurang dari 0,14.

Saya rasa Anda memiliki campuran paket dari berbagai sumber. Ada komunitas yang lebih besar di https://community.letsencrypt.org yang dapat membantu Anda melacak masalahnya.

Kamu benar. Setelah beberapa pencarian mendalam, ternyata sesuatu yang seharusnya menginstal modul menggunakan pip3, sebenarnya menginstalnya menggunakan python -m pip ... menggunakan python2.7 dan menimpa urllib3/conrtib/pyopenssl.py ... Terima kasih atas petunjuk Anda, yang memaksa saya untuk melihat lebih jauh :)

Masalah yang sama saya miliki di sini.

File "/usr/lib/python2.7/site-packages/acme/client.py", baris 39, di
urllib3.contrib.pyopenssl.inject_into_urllib3 ()
AttributeError: objek 'module' tidak memiliki atribut 'pyopenssl'

centos 7.3

Ini solusi saya:

pip install requests==2.6.0
easy_install --upgrade pip

Saya melihat ini sekarang juga. Instalasi Centos 7 baru, tidak ada lagi yang diinstal melalui pip, dan certbot diinstal melalui yum

Linux localhost.localdomain 3.10.0-862.2.3.el7.x86_64 # 1 SMP Rabu 9 Mei 18:05:47 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux

Tip @monkeyWie tidak berhasil untuk saya

[ gelandangan @ localhost ~] $ pip permintaan pemasangan == 2.6.0
Persyaratan sudah terpenuhi: request == 2.6.0 di /usr/lib/python2.7/site-packages

Saya menggunakan certbot dengan baik sampai beberapa hari yang lalu ketika saya tidak bisa membuatnya berfungsi sama sekali pada salah satu build centos 7 baru saya.

vagrant<strong i="14">@localhost</strong> ~]$ sudo certbot --nginx
Traceback (most recent call last):
  File "/usr/bin/certbot", line 9, in <module>
    load_entry_point('certbot==0.27.1', 'console_scripts', 'certbot')()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 484, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2714, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2332, in load
    return self.resolve()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2338, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  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 16, in <module>
    from acme import client as acme_client
  File "/usr/lib/python2.7/site-packages/acme/client.py", line 36, in <module>
    requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3()  # type: ignore
  File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 118, in inject_into_urllib3
    _validate_dependencies_met()
  File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 153, in _validate_dependencies_met
    raise ImportError("'pyOpenSSL' module missing required functionality. "
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.

Masalah seperti ini disebabkan oleh pemasangan paket secara global dari yum dan pip . Sayangnya, saya tidak dapat membantu Anda membersihkan lingkungan Python di sistem Anda tetapi jika Anda memposting ke https://community.letsencrypt.org, ada basis pengguna yang besar di sana yang dapat membantu.

Saya memiliki instalasi bersih dari Centos 7.6 dan menambahkan Certbot dari repo Epel menyebabkan masalah yang sama. Memperbaiki masalah dengan menjalankan
pip install requests==2.6.0

Saya melihat ini masih menjadi masalah.

Sama.
Rilis CentOS Linux 7.6.1810 (Core)
Install:

sudo yum install certbot python2-certbot-nginx

Dan lari:

# certbot --help
Traceback (most recent call last):
  File "/usr/bin/certbot", line 9, in <module>
    load_entry_point('certbot==0.31.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 16, in <module>
    from acme import client as acme_client
  File "/usr/lib/python2.7/site-packages/acme/client.py", line 40, in <module>
    urllib3.contrib.pyopenssl.inject_into_urllib3()
AttributeError: 'module' object has no attribute 'pyopenssl'

Ini solusi saya:

pip install requests==2.6.0
easy_install --upgrade pip

Bekerja untuk saya di Centos 7

Sepakat. Penginstalan default menggunakan yum tidak berfungsi. Perlu memperbaikinya setelah
penginstalan awal. Orang ingin menginstalnya dalam kondisi kerja.

Pada Sun, 14 Apr 2019, 07:54 Michael Lindner, [email protected]
menulis:

Ini solusi saya:

permintaan pemasangan pip == 2.6.0
easy_install --upgrade pip

Bekerja untuk saya di Centos 7

-
Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/certbot/certbot/issues/6328#issuecomment-482922170 ,
atau nonaktifkan utasnya
https://github.com/notifications/unsubscribe-auth/AMsov79Wu4KJJLs0jJUN-fhs6WO2YROuks5vgsKzgaJpZM4WS5Gq
.

Jika ada yang dapat memberikan instruksi tentang cara mereproduksi ini, idealnya dalam sesuatu seperti Docker, saya akan senang untuk melihatnya lagi, tetapi saya masih percaya ini hanya terjadi jika Anda telah menginstal paket Python dari berbagai sumber.

Hal ini biasanya disebabkan oleh penginstalan paket dari yum dan pip dan menghapus paket yang telah Anda instal dengan pip dan menginstal ulang dengan yum seharusnya menyelesaikan isu.

Saya dapat mengonfirmasi bahwa itu terjadi dengan penginstalan Centos 7.6 yang bersih menggunakan file
Repo EPEL untuk menambahkan certbot.

Pada hari Senin, 15 Apr 2019, 19:35 Brad Warren, [email protected] menulis:

Jika ada yang bisa memberikan instruksi bagaimana mereproduksi ini, idealnya di
sesuatu seperti Docker, dengan senang hati saya akan melihatnya lagi, tapi saya tetap melakukannya
percaya ini hanya terjadi jika Anda telah menginstal paket Python dari beberapa
sumber.

Ini biasanya disebabkan oleh penginstalan paket dari yum dan pip dan
menghapus paket yang telah Anda instal dengan pip dan menginstalnya kembali
dengan yum harus menyelesaikan masalah.

-
Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/certbot/certbot/issues/6328#issuecomment-483346939 ,
atau nonaktifkan utasnya
https://github.com/notifications/unsubscribe-auth/AMsovzeRLjz2j0odmgWGxyyAVy9VBp3Tks5vhLhLgaJpZM4WS5Gq
.

Saya punya masalah ini (centos)
[bob<strong i="6">@bla</strong> ~]# certbot renew 2>&1 | tail -2 urllib3.contrib.pyopenssl.inject_into_urllib3() AttributeError: 'module' object has no attribute 'pyopenssl'
dan pip tidak terpasang
[bob<strong i="10">@bla</strong> ~]# pip install requests==2.6.0 -bash: pip: command not found

Saya dapat mengonfirmasi bahwa itu terjadi dengan instalasi bersih Centos 7.6 menggunakan repo EPEL untuk menambahkan certbot.

Sayangnya, saya tidak dapat mereproduksinya di Docker atau VPS.

Saya masih ingin melihat seseorang berhasil mereproduksi ini dengan sesuatu yang mudah diulang seperti Docker, tetapi sementara itu untuk seseorang yang mengalami masalah, apa output dari perintah berikut

python -c 'import certbot, requests, urllib3, OpenSSL; print("certbot :", certbot.__version__); print("requests: ", requests.__version__); print("urllib3 :", urllib3.__version__); print("OpenSSL :", OpenSSL.__version__)'
ls /usr/lib/python2.7/site-packages/urllib3/contrib

Menarik. Ini adalah instalasi bersih kedua yang saya buat untuk Centos 7.

Kali ini saya melakukan instalasi bersih menggunakan ISO minimal dan berhasil. Saya melihat paket permintaan Centos yang diinstal adalah 2.6 juga. Kemungkinan permintaan telah diperbarui sejak awalnya mengalami masalah ini.
python2-requests-2.6.0-0.el7.noarch

[root<strong i="9">@centos7</strong> ~]# python -c 'import certbot, requests, urllib3, OpenSSL; print("certbot :", certbot.__version__); print("requests: ", requests.__version__); print("urllib3 :", urllib3.__version__); print("OpenSSL :", OpenSSL.__version__)'
('certbot :', '0.31.0')
('requests: ', '2.6.0')
('urllib3 :', '1.10.2')
('OpenSSL :', '0.13.1')
[root<strong i="10">@centos7</strong> ~]# ls /usr/lib/python2.7/site-packages/urllib3/contrib
__init__.py  __init__.pyc  __init__.pyo  ntlmpool.py  ntlmpool.pyc  ntlmpool.pyo  pyopenssl.py  pyopenssl.pyc  pyopenssl.pyo
[root<strong i="11">@centos7</strong> ~]# certbot
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Certbot doesn't know how to automatically configure the web server on this system. However, it can still get a certificate for you. Please run "certbot certonly" to do so. You'll need to manually configure your web server to use the resulting certificate.

Masalah ini terjadi pada saya di centos 7.6 bersama dengan ovirt 4.3. Versi paket adalah

from EPEL:
certbot-0.31.0-2.el7.noarch

from ovirt-4.3-centos-opstools:
python2-requests-2.19.1-4.el7.noarch 
python2-pyOpenSSL-17.3.0-3.el7.noarch

Sepertinya sesuatu yang aneh terjadi dengan namespace urllib3.contrib atau sesuatu?

>>> import requests
>>> requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'pyopenssl'
>>> import urllib3.contrib.pyopenssl
>>> urllib3.contrib.pyopenssl.inject_into_urllib3()
>>> dir(urllib3.contrib)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'pyopenssl', 'socks']
>>> from acme import client as acme_client
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/site-packages/acme/client.py", line 40, in <module>
    urllib3.contrib.pyopenssl.inject_into_urllib3()
AttributeError: 'module' object has no attribute 'pyopenssl'
>>> dir(urllib3.contrib)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'appengine']

Masalahnya hilang ketika saya melakukan ini di acme/client.py :

if sys.version_info < (2, 7, 9):  # pragma: no cover
    import requests.packages.urllib3.contrib.pyopenssl  # pylint: disable=import-error
    requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3()  # type: ignore

Ini solusi saya:

pip install requests==2.6.0
easy_install --upgrade pip

bekerja untuk saya di CentOS 7

Terima kasih @monkeyWie - bekerja untuk saya di CentOS7

Ini solusi saya:

pip install requests==2.6.0
easy_install --upgrade pip

pip install acme
bekerja untuk saya di Centos 7 setelah saya melihat kesalahan ini

EROR: certbot 1.0.0 memerlukan acme> = 0.40.0, yang tidak diinstal.

PS Instal semuanya dari pip, daripada paket Centos, kadang-kadang mereka sudah tua

Saya dapat mengonfirmasi bahwa itu terjadi dengan instalasi bersih Centos 7.6 menggunakan repo EPEL untuk menambahkan certbot.

Sayangnya, saya tidak dapat mereproduksinya di Docker atau VPS.

Saya masih ingin melihat seseorang berhasil mereproduksi ini dengan sesuatu yang mudah diulang seperti Docker, tetapi sementara itu untuk seseorang yang mengalami masalah, apa output dari perintah berikut

python -c 'import certbot, requests, urllib3, OpenSSL; print("certbot :", certbot.__version__); print("requests: ", requests.__version__); print("urllib3 :", urllib3.__version__); print("OpenSSL :", OpenSSL.__version__)'
ls /usr/lib/python2.7/site-packages/urllib3/contrib

@bmw hasil saya sbb:

('certbot :', '1.0.0')
('requests: ', '2.6.0')
('urllib3 :', '1.25.7')
('OpenSSL :', '0.13.1')

_appengine_environ.py   appengine.py   __init__.py   ntlmpool.py   pyopenssl.py   _securetransport    securetransport.pyc  socks.pyc
_appengine_environ.pyc  appengine.pyc  __init__.pyc  ntlmpool.pyc  pyopenssl.pyc  securetransport.py  socks.py

yang menurut saya baik-baik saja. tetapi tes lain ini tampaknya gagal:

$ python -c 'import requests; requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3()'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
AttributeError: 'module' object has no attribute 'packages'

$ python -c 'import urllib3.contrib.pyopenssl; urllib3.contrib.pyopenssl.inject_into_urllib3()'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 118, in inject_into_urllib3
    _validate_dependencies_met()
  File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 160, in _validate_dependencies_met
    "'pyOpenSSL' module missing required functionality. "
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.

Versi urllib3 dikemas dalam sistem berbasis RHEL 7 adalah 1.10.2 tetapi Anda memiliki 1.25.7. Ini mungkin dipasang melalui pip . Menghapus urllib3 dan menginstalnya kembali melalui yum seharusnya menyelesaikan masalah ini.

Jika Anda memerlukan bantuan tambahan dalam hal ini, saya sarankan untuk memposting ke https://community.letsencrypt.org di mana ada sekelompok besar orang yang mengenal Certbot dan administrasi server yang seharusnya dapat membantu Anda.

JFYI. Saya memiliki masalah yang sama tetapi saya tidak memiliki pip / pip2 atau paket pip apa pun yang diinstal secara manual.

Dalam kasus saya, saya memiliki centos-release-opstools yang membawa python2-urllib3 1.21.1-1.el7 and python2-request 2.19.1-4.el7`.

Setelah saya menonaktifkan repo itu dan menginstal ulang paket yang relevan (mereka berganti nama menjadi python-urllib3 1.10.2-7.el7 dan python-requests 2.6.0-8.el7_7 pada CentOS 7.7) masalah menghilang.

@grossws , terima kasih atas infonya. Apakah Anda ingat pesan kesalahan Anda?

Ketika saya mencoba dan membuat ulang pengaturan itu, Certbot mengalami crash dengan:

# certbot --help
Traceback (most recent call last):
  File "/usr/bin/certbot", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 3011, in <module>
    parse_requirements(__requires__), Environment()
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 630, in resolve
    raise VersionConflict(dist,req) # XXX put more info here
pkg_resources.VersionConflict: (cryptography 1.7.2 (/usr/lib64/python2.7/site-packages), Requirement.parse('cryptography>=1.9'))

Ini karena paket python2-pyOpenSSL 17.3.0-3.el7 mengklaim membutuhkan python-cryptography >= 1.3.0 , tetapi ketergantungan seperti yang ditentukan di Python adalah cryptography>=1.9 yang belum diinstal.

@bmw , saya memiliki stacktrace yang mirip dengan yang ada di https://github.com/certbot/certbot/issues/6328#issuecomment -482531925

Saya mencoba mereproduksinya dalam wadah hanya dengan epel-release + centos-release-opstools tetapi mendapatkan konflik versi yang sama tentang cryptography . Saya melihat sistem asli di mana saya mendapat kesalahan dan menemukan bahwa saya memiliki python2-cryptography dari centos-release-ovirt42 repo.

Jadi untuk mereproduksi Anda dapat menjalankan kontainer buruh pelabuhan dengan centos:7 dan lakukan

yum install -y epel-release centos-release-opstools centos-release-ovirt42
yum install -y certbot
certbot --help`

Itu menyenangkan (tergantung definisi kesenangan Anda).

Pada gambar centos:7 Docker, jika Anda menjalankan:

yum install -y epel-release centos-release-opstools centos-release-ovirt42
yum install -y python-requests-toolbelt python2-urllib3
python -c 'import urllib3.contrib.pyopenssl; urllib3.contrib.pyopenssl.inject_into_urllib3()'
python -c 'from requests_toolbelt.adapters.source import SourceAddressAdapter; import urllib3.contrib.pyopenssl; urllib3.contrib.pyopenssl.inject_into_urllib3()'

Perintah Python pertama akan berhasil sedangkan yang kedua akan gagal. Satu-satunya perbedaan adalah impor from requests_toolbelt.adapters.source import SourceAddressAdapter .

Kami berencana menghentikan dukungan Python 2 dalam beberapa bulan ke depan di mana kami dapat menghapus kode ini. Karena itu, tim kecil yang mengelola Certbot mungkin tidak akan menghabiskan banyak waktu untuk ini sendiri, tetapi jika seseorang ingin menggalinya, saya pikir akan lebih baik jika apa pun yang menyebabkan masalah ini dilaporkan ke pengelola paket. .

Saya membuka kembali ini untuk saat ini.

Saya pikir anggapan beberapa bentuk korupsi benar. Saya tidak memasang pip python2, jadi saya tidak yakin apa yang saya rusak. Namun, ini menyelesaikan semuanya:

yum remove python-urllib3
rm -rf /usr/lib/python2.7/site-packages/urllib3 # yes, you need this too
yum reinstall $(yum list installed | grep python | grep -v python3 | awk '{print $1}')
yum install python-urllib3
yum install certbot

Semoga itu bisa membantu seseorang.

Ini berfungsi di lingkungan saya (centos 7 dengan urllib3 yang ditingkatkan dari pip seperti @bmw dijelaskan di atas .. perintah "pip" saya juga mengembalikan kesalahan, jadi perlu instal ulang):

sudo yum install -y python2-pip
sudo pip uninstall urllib3
sudo yum install -y python-urllib3

Pemelihara sertifikat Fedora / CentOS di sini: JANGAN PERNAH menginstal modul ke /usr/lib menggunakan pip . Beberapa paket CentOS dimodifikasi sehingga tidak menggandakan kode yang ada atau untuk memperkuat pengaturan keamanan. Pemaket distro harus memastikan bahwa semua paket yang diperlukan telah diinstal.

Anda dapat memeriksa instalasi Anda untuk paket Python yang tidak dikelola dengan perintah ini:

LANG=C rpm -qf /usr/lib/python2.7/site-packages/* | grep 'is not owned by any package'

Anda seharusnya tidak mendapatkan keluaran apa pun.

Menambahkan repo yum lain juga bisa menjadi masalah. Fedora EPEL seharusnya bekerja 100% dengan repo dasar dari Red Hat / CentOS tetapi kami tidak dapat mempertimbangkan repo lain.

Jika Anda baru saja mengaktifkan repo CentOS (+ EPEL) default dan Anda masih macet, beri tahu kami. Metode terbaik adalah membuat masalah Bugzilla tetapi @ -menyebut saya di sini juga berfungsi (untuk saat ini - pengelola certbot di Fedora / EPEL dapat berubah).

@FelixSchwarz , bagaimana dengan paket repo CentOS SIG seperti centos-release-opstools ? Saya biasanya menggunakan repo standar + epel tetapi fluentd hanya tersedia di opstools (

Dalam beberapa kasus saya baru saja selesai membuat virtual env menggunakan python3 -mvenv /path/to/new/venv dan menginstal perangkat lunak yang diperlukan di sana (katakanlah certbot + verifier dns yang diperlukan). Untungnya itu tidak mencemari /usr/lib .

@grossws Fedora EPEL harus bekerja dengan semua dari RHEL Base (jadi mungkin ada produk Red Hat berlapis lain yang menyebabkan konflik). Semua sumber lain mungkin tidak kompatibel kecuali repo ini sangat hati-hati sehingga mereka tidak mengirimkan barang yang sama seperti RHEL / EPEL.

Saya baru saja memeriksa repo centos-opstools dan segera melihat beberapa konflik dengan Fedora EPEL:

  • python2-msgpack: EPEL 7 memiliki 0.5.6-5.el7 , opstools 0.4.6-3.el7 (tidak relevan untuk certbot tetapi untuk borgbackup yang juga saya pertahankan di Fedora / EPEL.
  • python2-request: EPEL 7 memiliki 2.6.0-0.el7 , opstools 2.19.1-4.el7
  • python2-urllib3: EPEL 7 1.10.2-7.el7 ( python-urllib3 ), opstools 1.21.1-1.el7
  • python-idna: RHEL Base mengirimkan 2.4-1.el7 , opstools 2.5-1.el7 ( python2-idna )

Itu tidak berarti centos-opstools repo tidak bekerja dengan paket certbot EPEL tetapi ada beberapa konflik dan ini jelas merupakan konfigurasi yang belum teruji. Juga centos-opstools menggantikan paket di basis RHEL yang berarti Anda harus ekstra hati -

tl; dr: Jika Anda menggunakan paket certbot EPEL, Anda tidak boleh menggunakan repo yum / dnf lain karena kemungkinan besar ini tidak kompatibel. Mintalah penyedia repo untuk kompatibilitas dengan basis RHEL dan Fedora EPEL.

Saya juga merasa tidak sulit untuk berkontribusi ke Fedora EPEL jadi jika Anda melewatkan sebuah paket, pertimbangkan untuk menjadi pengelola paket (ping saya jika Anda memerlukan panduan).

Saya pikir anggapan beberapa bentuk korupsi benar. Saya tidak memasang pip python2, jadi saya tidak yakin apa yang saya rusak. Namun, ini menyelesaikan semuanya:

yum remove python-urllib3
rm -rf /usr/lib/python2.7/site-packages/urllib3 # yes, you need this too
yum reinstall $(yum list installed | grep python | grep -v python3 | awk '{print $1}')
yum install python-urllib3
yum install certbot

Semoga itu bisa membantu seseorang.

Ini membantu dalam kasus saya (solusi lain dari topik ini tidak). Terima kasih.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat