Quando executo o certbot assim:
sudo certbot --nginx
Eu recebo:
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'
minha versão python é 2.7.12 e linux os: 7.4
Suspeito que isso seja devido a um conflito entre os pacotes Python instalados do gerenciador de pacotes do seu sistema operacional e pip
como em # 6245.
Em qual sistema operacional Linux você está e como instalou o Certbot?
Eu tenho o mesmo (ou quase igual) erro:
# 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'
Versão do sistema operacional: CentOS Linux versão 7.5.1804 (Core)
Edit2: Com relação a https://github.com/certbot/certbot/issues/6245 , python-urllib3 foi instalado usando yum, e a versão atual (1.10.2-5.el7) não tem o link simbólico mencionado em packages/ssl_match_hostname
mas como um diretório regular com arquivos nele.
Tentar reproduzir o problema me leva a isto:
# 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
Portanto, aparentemente há uma dependência de versão silenciosa para urllib3.contrib.pyopenssl
em pyOpenSSL
v0.14, que não é fornecida pelo Centos7 neste ponto.
Edit: Depois de instalar uma versão mais recente (0.15.1) de https://cbs.centos.org/koji/buildinfo?buildID=1500 o erro acima vai embora, mas não o erro gerado pelo certbot.
Algumas tentativas e erros com usr/lib/python2.7/site-packages/acme/client.py
me levaram a descobrir que quando eu comento a importação de from requests_toolbelt.adapters.source import SourceAddressAdapter
, o erro desaparece!
Felizmente, isso é usado apenas uma vez, portanto, desde que eu forneça source_address
, posso me safar com essa correção não tão sutil. :)
@ github-abcde, recomendo postar em https://community.letsencrypt.org. Em uma nova instalação do CentOS 7, ambos:
python -c 'import requests; requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3()'
e
python -c 'import urllib3.contrib.pyopenssl; urllib3.contrib.pyopenssl.inject_into_urllib3()'
trabalhe para mim.
Além disso, depois de instalar python-urllib3 1.10.2-5.el7
, /usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py
não contém código para gerar uma exceção se a versão pyOpenSSL for menor que 0,14.
Acho que você tem uma mistura de pacotes de várias fontes. Existe uma comunidade maior em https://community.letsencrypt.org que deve ser capaz de ajudá-lo a rastrear o problema.
Você está certo. Após uma pesquisa aprofundada, parecia que algo que deveria estar instalando um módulo usando pip3, na verdade o instalou usando python -m pip
... usando python2.7 e substituindo o urllib3/conrtib/pyopenssl.py
... Obrigado por suas dicas, que me forçaram a procurar mais :)
O mesmo problema que tenho aqui.
Arquivo "/usr/lib/python2.7/site-packages/acme/client.py", linha 39, em
urllib3.contrib.pyopenssl.inject_into_urllib3 ()
AttributeError: o objeto 'módulo' não tem atributo 'pyopenssl'
centos 7.3
Esta é a minha solução:
pip install requests==2.6.0
easy_install --upgrade pip
Também estou vendo isso agora. Uma nova instalação do Centos 7, sem nada mais instalado via pip, e certbot instalado via yum
Linux localhost.localdomain 3.10.0-862.2.3.el7.x86_64 # 1 SMP Quarta, 9 de maio 18:05:47 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux
A dica de @monkeyWie não funcionou para mim
[ vagrant @ localhost ~] solicitações de instalação $ pip == 2.6.0
Requisito já satisfeito: solicitações == 2.6.0 em /usr/lib/python2.7/site-packages
Eu estava usando certbot muito bem até alguns dias atrás, quando não consigo fazê-lo funcionar em nenhuma das minhas novas compilações do centos 7.
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.
Problemas como este são causados pela instalação de pacotes globalmente de yum
e pip
. Infelizmente, não posso ajudá-lo a limpar o ambiente Python em seu sistema, mas se você postar em https://community.letsencrypt.org, há uma grande base de usuários lá que poderá ajudar.
Eu tinha uma instalação limpa do Centos 7.6 e adicionei o Certbot do repositório Epel que causou o mesmo problema. Corrigido o problema ao executar
pip install requests==2.6.0
Vejo que isso ainda é um problema.
Mesmo.
CentOS Linux versão 7.6.1810 (Core)
Instalar:
sudo yum install certbot python2-certbot-nginx
E corra:
# 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'
Esta é a minha solução:
pip install requests==2.6.0 easy_install --upgrade pip
Trabalhou para mim no Centos 7
Acordado. A instalação padrão usando yum não está funcionando. Precisa consertar depois
instalação inicial. Seria desejável que ele fosse instalado em um estado de funcionamento.
No domingo, 14 de abril de 2019, 07:54 Michael Lindner, [email protected]
escrevi:
Esta é a minha solução:
solicitações de instalação pip == 2.6.0
easy_install --upgrade pipTrabalhou para mim no Centos 7
-
Você está recebendo isto porque comentou.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/certbot/certbot/issues/6328#issuecomment-482922170 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/AMsov79Wu4KJJLs0jJUN-fhs6WO2YROuks5vgsKzgaJpZM4WS5Gq
.
Se alguém puder fornecer instruções sobre como reproduzir isso, idealmente em algo como o Docker, ficaria feliz em dar uma outra olhada, mas ainda acredito que isso só ocorre se você instalou pacotes Python de várias fontes.
Isso geralmente é causado pela instalação de pacotes de yum
e pip
e pela remoção dos pacotes que você instalou com pip
e reinstalá-los com yum
deve resolver o questão.
Posso confirmar que isso acontece com uma instalação limpa do Centos 7.6 usando o
Repo EPEL para adicionar certbot.
Na segunda-feira, 15 de abril de 2019, 19:35, Brad Warren, [email protected] escreveu:
Se alguém puder fornecer instruções sobre como reproduzir isso, idealmente em
algo como Docker, ficaria feliz em dar uma outra olhada, mas ainda
acredito que isso só ocorre se você instalou pacotes Python de vários
fontes.Isso geralmente é causado pela instalação de pacotes do yum e pip e
removendo os pacotes que você instalou com pip e reinstalando-os
com o yum deve resolver o problema.-
Você está recebendo isto porque comentou.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/certbot/certbot/issues/6328#issuecomment-483346939 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/AMsovzeRLjz2j0odmgWGxyyAVy9VBp3Tks5vhLhLgaJpZM4WS5Gq
.
Eu tive esse problema (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'
e pip não está instalado
[bob<strong i="10">@bla</strong> ~]# pip install requests==2.6.0
-bash: pip: command not found
Posso confirmar que isso acontece com uma instalação limpa do Centos 7.6 usando o repositório EPEL para adicionar o certbot.
Infelizmente, não posso reproduzi-lo no Docker ou em um VPS.
Eu ainda adoraria ver alguém conseguir reproduzir isso em algo facilmente repetível como o Docker, mas enquanto isso, para alguém que está resolvendo o problema, qual é a saída dos seguintes comandos
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
Interessante. Esta é a segunda instalação limpa que fiz para o Centos 7.
Desta vez, fiz uma instalação limpa usando o ISO mínimo e está funcionando. Vejo que o pacote de solicitações Centos instalado também é 2.6. Possível que as solicitações tenham sido atualizadas porque originalmente apresentavam este problema.
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.
Este problema acontece comigo no centos 7.6 junto com ovirt 4.3. As versões do pacote são
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
Parece que algo estranho aconteceu com o namespace urllib3.contrib
ou algo assim?
>>> 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']
O problema desaparece quando eu faço isso em 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
Esta é a minha solução:
pip install requests==2.6.0 easy_install --upgrade pip
funcionou para mim no CentOS 7
Obrigado @monkeyWie - funcionou para mim no CentOS7
Esta é a minha solução:
pip install requests==2.6.0 easy_install --upgrade pip
pip install acme
funcionou para mim no Centos 7 depois que vi este erro
ERRO: o certbot 1.0.0 requer acme> = 0.40.0, que não está instalado.
PS Instale tudo do pip, ao invés de pacotes Centos, eles são antigos às vezes
Posso confirmar que isso acontece com uma instalação limpa do Centos 7.6 usando o repositório EPEL para adicionar o certbot.
Infelizmente, não posso reproduzi-lo no Docker ou em um VPS.
Eu ainda adoraria ver alguém conseguir reproduzir isso em algo facilmente repetível como o Docker, mas enquanto isso, para alguém que está resolvendo o problema, qual é a saída dos seguintes comandos
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 meus resultados são os seguintes:
('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
o que parece certo para mim. mas esses outros testes parecem falhar:
$ 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.
A versão de urllib3
empacotada em sistemas baseados em RHEL 7 é 1.10.2, mas você tem 1.25.7. Provavelmente foi instalado por meio de pip
. Remover urllib3
e reinstalá-lo por meio de yum
deve resolver esse problema.
Se você precisar de ajuda adicional com isso, recomendo postar em https://community.letsencrypt.org, onde há um grande grupo de pessoas familiarizadas com Certbot e administração de servidor que devem ser capazes de ajudá-lo.
JFYI. Eu tive o mesmo problema, mas não tenho pip
/ pip2
ou qualquer pacote pip instalado manualmente.
No meu caso, eu tinha centos-release-opstools
que trouxe python2-urllib3 1.21.1-1.el7 and
python2-requests 2.19.1-4.el7`.
Depois de desabilitar aquele repo e reinstalar os pacotes relevantes (eles foram renomeados para python-urllib3 1.10.2-7.el7
e python-requests 2.6.0-8.el7_7
partir do CentOS 7.7), o problema desapareceu.
@grossws , obrigado pela informação. Você se lembra qual foi a sua mensagem de erro?
Quando tento recriar essa configuração, o Certbot falha com:
# 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'))
Isso ocorre porque o pacote python2-pyOpenSSL 17.3.0-3.el7
alega que requer python-cryptography >= 1.3.0
, mas a dependência especificada em Python é cryptography>=1.9
que não está instalada.
@bmw , tive https://github.com/certbot/certbot/issues/6328#issuecomment -482531925
Tentei reproduzi-lo em um contêiner com apenas epel-release
+ centos-release-opstools
mas obtive o mesmo conflito de versão sobre cryptography
. Eu olhei no sistema original onde encontrei um erro e descobri que tenho um repo python2-cryptography
mais recente de centos-release-ovirt42
.
Portanto, para reproduzir você pode executar o docker container com centos:7
e fazer
yum install -y epel-release centos-release-opstools centos-release-ovirt42
yum install -y certbot
certbot --help`
Isso é divertido (dependendo da sua definição de diversão).
Na imagem centos:7
Docker, se você executar:
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()'
O primeiro comando Python terá êxito, enquanto o segundo falhará. A única diferença é a importação de from requests_toolbelt.adapters.source import SourceAddressAdapter
.
Estamos planejando descartar o suporte ao Python 2 nos próximos meses, momento em que podemos excluir este código. Por causa disso, a pequena equipe que mantém o Certbot provavelmente não vai gastar muito tempo nisso, mas se alguém quiser se aprofundar, acho que seria bom fazer com que o que quer que esteja causando esse problema seja relatado aos mantenedores do pacote .
Estou reabrindo isso por agora.
Acho que a suposição de alguma forma de corrupção está correta. Eu não tinha um pip python2 instalado, então não tenho certeza do que quebrei. No entanto, isso resolveu as coisas:
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
Espero que ajude alguém.
Isso funcionou no meu ambiente (centos 7 com urllib3 atualizado de pip como @bmw descrito acima .. meu comando "pip" também estava retornando erros, então precisei reinstalar):
sudo yum install -y python2-pip
sudo pip uninstall urllib3
sudo yum install -y python-urllib3
Mantenedor do certbot do Fedora / CentOS aqui: NUNCA instale módulos em /usr/lib
usando pip
. Alguns pacotes CentOS são modificados para não duplicar o código existente ou para fortalecer as configurações de segurança. Os empacotadores da distribuição devem se certificar de que todos os pacotes necessários estão instalados.
Você pode verificar a instalação de pacotes Python não gerenciados com este comando:
LANG=C rpm -qf /usr/lib/python2.7/site-packages/* | grep 'is not owned by any package'
Você não deve obter nenhuma saída.
Além disso, adicionar outros repositórios yum pode ser problemático. O Fedora EPEL deve funcionar 100% com os repositórios básicos da Red Hat / CentOS, mas não podemos levar em consideração nenhum outro repositório.
Se você apenas tiver os repositórios CentOS padrão (+ EPEL) habilitados e ainda assim travar, informe-nos. O melhor método é criar um problema no Bugzilla, mas @ -mentioning me aqui funciona bem (por enquanto - os mantenedores do certbot no Fedora / EPEL podem mudar).
@FelixSchwarz , e os pacotes de repo do CentOS SIG como centos-release-opstools
? Normalmente uso repos + epel padrão, mas fluentd
está disponível apenas em opstools
(
Em alguns casos, acabei de criar env virtual usando python3 -mvenv /path/to/new/venv
e instalando o software necessário lá (digamos, certbot
+ verificador de dns obrigatório). Felizmente, ele não polui /usr/lib
.
@grossws Fedora EPEL deve funcionar com tudo do RHEL Base (então pode haver outros produtos Red Hat em camadas que causam conflitos). Todas as outras fontes podem ser incompatíveis, a menos que esses repositórios sejam muito cuidadosos para não enviarem o mesmo material que o RHEL / EPEL.
Acabei de verificar os repositórios de
0.5.6-5.el7
, opstools 0.4.6-3.el7
(não é relevante para certbot
mas para borgbackup que também mantenho no Fedora / EPEL.2.6.0-0.el7
, opstools 2.19.1-4.el7
1.10.2-7.el7
( python-urllib3
), opstools 1.21.1-1.el7
2.4-1.el7
, opstools 2.5-1.el7
( python2-idna
)Isso não significa que o centos-opstools
repo não funcione com os pacotes certbot
da EPEL, mas existem alguns conflitos e esta é definitivamente uma configuração não testada. Além disso, centos-opstools
substitui um pacote na base do RHEL, o que significa que você deve ser extremamente cuidadoso, pois isso também pode quebrar muitas coisas na distro principal.
tl; dr: Se você usa os pacotes certbot da EPEL, não deve usar outros repositórios yum / dnf, pois eles são provavelmente incompatíveis. Peça ao provedor de repo a compatibilidade com a base RHEL e Fedora EPEL.
Além disso, descobri que não foi tão difícil contribuir para o Fedora EPEL, então se você estiver perdendo um pacote, considere se tornar um mantenedor do pacote (envie um ping se precisar de orientação).
Acho que a suposição de alguma forma de corrupção está correta. Eu não tinha um pip python2 instalado, então não tenho certeza do que quebrei. No entanto, isso resolveu as coisas:
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
Espero que ajude alguém.
Isso ajudou no meu caso (outras soluções deste tópico não ajudaram). Obrigado.
Comentários muito úteis
Esta é a minha solução: