CentOS Linux versão 7.3.1611
Gerenciador de empacotador de sistema operacional
Traceback (última chamada mais recente):
Arquivo "/ bin / certbot", linha 7, em
de certbot.main import main
Arquivo "/usr/lib/python2.7/site-packages/certbot/main.py", linha 17, em
do cliente de importação certbot
Arquivo "/usr/lib/python2.7/site-packages/certbot/client.py", linha 10, em
do cliente de importação acme como acme_client
Arquivo "/usr/lib/python2.7/site-packages/acme/client.py", linha 31, em
request.packages.urllib3.contrib.pyopenssl.inject_into_urllib3 () # type: ignore
Arquivo "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", linha 112, em inject_into_urllib3
_validate_dependencies_met ()
Arquivo "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", linha 147, em _validate_dependencies_met
raise ImportError ("Módulo 'pyOpenSSL' sem funcionalidade necessária."
ImportError: módulo 'pyOpenSSL' sem a funcionalidade necessária. Tente atualizar para v0.14 ou mais recente.
Deve renovar com sucesso em vez de erros.
/var/log/letsencrypt
por padrão. Sinta-se à vontade para redigir domínios, endereços de e-mail e IP conforme desejar.Sem entradas de registro. Eu removi o pyopenssl e o reinstalei.
Nome: pyOpenSSL
Versão: 16.2.0
Resumo: Módulo wrapper Python em torno da biblioteca OpenSSL
Página inicial: https://pyopenssl.readthedocs.io/
Autor: Hynek Schlawack
E-mail do autor: [email protected]
Licença: Licença Apache, Versão 2.0
Localização: /usr/lib64/python2.7/site-packages
Requer: seis, criptografia
Mas o erro ainda persiste. Qualquer ideia ?
Talvez existam várias versões de pyOpenSSL para que urllib3 fique confuso. Em /usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py, deve haver algumas linhas como esta:
# 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.")
Você poderia adicionar alguns códigos de depuração e ver qual é o resultado?
# 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.")
Esteja ciente de que o Python não gosta de guias. Sempre insira espaços para identificação. Além disso, você precisa do root para modificar este arquivo.
Aqui está o resultado:
Traceback (última chamada mais recente):
Arquivo "/ bin / certbot", linha 7, em
de certbot.main import main
Arquivo "/usr/lib/python2.7/site-packages/certbot/main.py", linha 17, em
do cliente de importação certbot
Arquivo "/usr/lib/python2.7/site-packages/certbot/client.py", linha 10, em
do cliente de importação acme como acme_client
Arquivo "/usr/lib/python2.7/site-packages/acme/client.py", linha 31, em
request.packages.urllib3.contrib.pyopenssl.inject_into_urllib3 () # type: ignore
Arquivo "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", linha 112, em inject_into_urllib3
_validate_dependencies_met ()
Arquivo "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", linha 149, em _validate_dependencies_met
raise ImportError ("Módulo 'pyOpenSSL' sem funcionalidade necessária."
ImportError: módulo 'pyOpenSSL' sem a funcionalidade necessária. Tente atualizar para v0.14 ou mais recente.
/usr/lib64/python2.7/site-packages/OpenSSL/crypto.so
Este caminho se parece com um pacote pyOpenSSL anterior. Você poderia remover o pyOpenSSL via yum e tentar novamente?
Estou tendo o mesmo problema no centos7. Remover pyOpenSSL.x86_64 0: 0.13.1-3.el7 não ajuda, porque yum install certbot
irá reinstalá-lo novamente.
No entanto, encontrei uma solução alternativa para o RPM quebrado:
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
O mesmo problema aqui em uma instalação de centos nova.
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
Acho que isso é mais um problema do CentOS do que do certbot. Alguém pode informar ao CentOS que seu pyOpenSSL é muito antigo?
O problema persistiu no meu sistema, mesmo após uma atualização para pyOpenSSL 16.algo
O mesmo problema ocorreu recentemente em minha máquina CentOS 7.
A única solução alternativa é pip install pyOpenSSL=0.13.1
Nos últimos dois meses, ele falhou.
E tentei de novo agora, mas falhou de novo.
A saída:
>> 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.
Então eu tento e funciona:
O link da resposta: https://serverfault.com/questions/830284/certbot-for-letsencrypt-missing-pyopenssl-module
Apenas para referência ... geralmente não é seguro atualizar o pyOpenSSL via pip no CentOS, pois é possível quebrar o yum dessa forma.
Qual pacote certbot você está usando? Eu apreciaria se você pudesse instalar o 0.13.0 a partir do epel-testing e sempre garantir que seu sistema tenha uma atualização completa do yum.
Você pode precisar usar yum reinstalar pyOpenSSL para reparar seu sistema (verifique o estado dele com rpm -qV pyOpenSSL).
Há um problema com o cronômetro de renovação do systemd com esse pacote, e é por isso que não o empurrei para estável, mas apenas fazer solicitações de certbot e uma renovação manual de certbot funcionará.
A versão 0.14.0 também está a caminho ... e eu literalmente acabei de testar isso na AWS.
Estou curioso - o autor original o instalou por meio de um gerenciador de pacotes, então onde colocaríamos uma versão para o pip?
As pessoas ainda estão tendo esse problema? E se sim, qual método de instalação você está usando?
Você pode tentar o método descrito neste Dockerfile, que funcionou para mim:
https://github.com/identinetics/docker-nginx/blob/master/Dockerfile#L65
Ainda tendo o problema no novo centOS instalado e atualizado 7.3.
Corrigido o problema instalando pyOpenSSL rpm atualizado (pyOpenSSL-0.14-3.fc222 parecia suficiente, enquanto pyOpenSSL-16.2.0-1.fc25 não funcionava), mas como ter certeza de que não está quebrando mais nada?!
https://www.rpmfind.net/linux/rpm2html/search.php?query=pyOpenSSL
Obrigado
@ tisc0 Estou muito interessado em mais detalhes sobre exatamente como você instalou e executou isso para resolver esse problema.
Quando criei os pacotes do certbot centos7, testei-os na AWS sem problemas - certamente não o que você descreveu ou esse problema descreve.
É uma péssima ideia instalar um fedora rpm como esse diretamente no centos7 - especialmente com um pacote básico como o pyOpenSSL.
Oi Hogarthj,
Desculpem a falta de detalhes, estou meio ocupado hoje em dia :)
Resumidamente :
[ root @ c7-dse ~] # echo N | yum remove python-urllib3 | awk '{print $ 1}'
(...)
Dependências
==============
Pacote
Removendo:
python-urllib3
Removendo
certbot
cliente ipa
solicitações-python
python2-acme
python2-certbot
python2-ipaclient
python2-ipalib
Qualquer ideia para explicar por que reinstalar alguns pacotes fez com que funcionasse é bem-vinda :)
@ tisc0 obrigado pelo detalhe adicional
A instalação / remoção forçada de pacotes pode frequentemente causar problemas - assim como atualizações pip das bibliotecas do sistema.
Raramente é uma boa ideia apenas pegar um pacote Fedora para uso CentOS sem realizar uma reconstrução do próprio pacote a partir do src.rpm
Reinstalando os pacotes (em vez de remover e instalar com problemas de dependência, o yum reinstalar pode ser um salva-vidas), os arquivos originais são verificados para estarem no lugar.
Estou muito feliz em saber que reinstalar os pacotes CentOS está funcionando para você :)
Como @ tisc0 parece ter uma configuração funcionando agora, encerrarei este problema. Se alguém ainda estiver tendo problemas, registre um novo problema, pois este tópico está ficando muito lotado.
para CentOS7, basta fazer "mv /usr/lib64/python2.7/site-packages/OpenSSL /usr/lib64/python2.7/site-packages/pyOpenSSL", e isso funciona como um encanto para mim !!!
Hack sujo: 1st_place_medal:;)
Só tive o mesmo problema, isso porque pip install -U
substituiu os módulos python instalados a partir do RPM.
Para resolver isso, fiz o seguinte:
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
Encontrei o mesmo problema novamente, desta vez era muito mais fácil usar o contêiner do docker :)
alias certbot='docker run --rm -ti -v /etc/letsencrypt:/etc/letsencrypt -p 80:80 certbot/certbot:v0.21.1'
@cnritng Também funciona para mim
Qualquer pessoa que ainda tenha esse problema, tente o seguinte:
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
de @sulliwane . observe que o endereço ftp://ftp.muug.ca/mirror/...
mudou.
Obrigado @JellyBool
fez isso e consertou tudo. yum install http://cbs.centos.org/kojifiles/packages/pyOpenSSL/16.2.0/3.el7/noarch/python2-pyOpenSSL-16.2.0-3.el7.noarch.rpm
Pessoal, não misture yum
pacotes instalados com pip
uns. A correção adequada envolve remover pacotes pip e instalar tudo de yum
. Eu o esbocei aqui .
Você não precisa do pyOpenSSL mais recente no CentOS 7 para executar o certbot! Não quer dizer que confiar em terceiros pacotes não levará você a nada de bom, eventualmente :)
pip uninstall requests
yum reinstall python-requests
pip uninstall six
yum reinstall python-six
pip uninstall urllib3
yum reinstall python-urllib3
As etapas acima de @dvershinin funcionaram para mim
também fez as coisas funcionarem com o que @dvershinin postou. só tive que mudar a última linha de "yum reinstalar python-urllib3" para "yum install python-urllib3"
para CentOS7, basta fazer "mv /usr/lib64/python2.7/site-packages/OpenSSL /usr/lib64/python2.7/site-packages/pyOpenSSL", e isso funciona como um encanto para mim !!!
O sistema similar ao * nix sempre tem problemas semelhantes: dependência de arquivo quebrada.
https://github.com/certbot/certbot/issues/4514#issuecomment -375741595
trabalhou para mim
aqui talvez a verdadeira razão e solução:
https://www.getpagespeed.com/trou troubleshooting/fix-importerror-pyopenssl-module-missing-required-functionality-try-upgrading-to-v0-14-or-newer
Pessoal, não misture
yum
pacotes instalados compip
uns. A correção adequada envolve remover pacotes pip e instalar tudo deyum
. Eu o esbocei aqui .Você não precisa do pyOpenSSL mais recente no CentOS 7 para executar o certbot! Não quer dizer que confiar em terceiros pacotes não levará você a nada de bom, eventualmente :)
pip uninstall requests yum reinstall python-requests pip uninstall six yum reinstall python-six pip uninstall urllib3 yum reinstall python-urllib3
Obrigado! Isso funciona!
A correção
VersionConflict: (urllib3 1.10.2 (/usr/lib/python2.7/site-packages), Requirement.parse ('urllib3> = 1.20, <1.26'))
@ keir-lavelle minha correção é apenas uma tentativa de restaurar um sistema ao estado original depois que ele foi severamente danificado usando pip
sob root
user (o que tantos tutoriais por aí fazem as pessoas fazerem, sem levar em conta o fato de que nunca deve ser feito em sistemas CentOS / RHEL!)
Então, se você se sentir aventureiro em consertá-lo, você pode seguir o link que eu dei que tenta consertá-lo ainda mais removendo todos os pacotes Python (veja bem, yum
é baseado em Python), que é uma empresa ainda mais perigosa . (porque você pode quebrar mais).
certbot
funcionou, então você deve estar bemyum
em um estado de funcionamento )E é claro que ajuda lembrar novamente: não use pip
ou python
instalações em root
. É assim que quebra em primeiro lugar. Se não acontecesse - não iria quebrar.
Obrigado por me explicar, estou apenas testando coisas no momento, então o servidor está descartável, então não é grande coisa se ele quebrar, mas agradeço a informação
Comentários muito úteis
Pessoal, não misture
yum
pacotes instalados compip
uns. A correção adequada envolve remover pacotes pip e instalar tudo deyum
. Eu o esbocei aqui .Você não precisa do pyOpenSSL mais recente no CentOS 7 para executar o certbot! Não quer dizer que confiar em terceiros pacotes não levará você a nada de bom, eventualmente :)