LetsEncrypt no soporta python 2.6 ( versión por defecto de centos 6 ), lo cual es un problema bastante importante para algunos, ya que centos 6 tiene soporte para varios años más y mucha gente sigue usandolo centos 6 con plesk el problema es que no se puede actualizar python 2.6 ya que si se hace se rompe el sistema principalmente yum, esto ya lo sabemos pero tenia que decirlo por si alguien no lo sabe y el otro día me tope con este error en plesk 12.5 con centos 6 y el modulo letsencript instalado desde el catalogo de módulos de plesk
Así que si usamos Plesk con centos 6 y hemos instalado letsencrypt puede que nos salga este feo error:
Error: Error de instalación del certificado SSL Let’s Encrypt: Failed letsencrypt execution: /usr/local/psa/var/modules/letsencrypt/venv.xxxx/lib/python2.6/site-packages/cryptography/__init__.py:25: DeprecationWarning: Python 2.6 is no longer supported by the Python core team, please upgrade your Python.
El error completo:
Error: Let's Encrypt SSL certificate installation failed: Failed letsencrypt execution: /usr/local/psa/var/modules/letsencrypt/venv.5qCQD/lib/python2.6/site-packages/cryptography/__init__.py:25: DeprecationWarning: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. DeprecationWarning Traceback (most recent call last): File "/usr/local/psa/var/modules/letsencrypt/venv/bin/letsencrypt", line 11, in <module> sys.exit(main()) File "/usr/local/psa/var/modules/letsencrypt/venv.5qCQD/lib/python2.6/site-packages/letsencrypt/cli.py", line 1950, in main plugins = plugins_disco.PluginsRegistry.find_all() File "/usr/local/psa/var/modules/letsencrypt/venv.5qCQD/lib/python2.6/site-packages/letsencrypt/plugins/disco.py", line 168, in find_all plugin_ep = PluginEntryPoint(entry_point) File "/usr/local/psa/var/modules/letsencrypt/venv.5qCQD/lib/python2.6/site-packages/letsencrypt/plugins/disco.py", line 31, in __init__ self.plugin_cls = entry_point.load() File "/usr/local/psa/var/modules/letsencrypt/venv.5qCQD/lib/python2.6/site-packages/pkg_resources/__init__.py", line 2201, in load self.require(*args, **kwargs) File "/usr/local/psa/var/modules/letsencrypt/venv.5qCQD/lib/python2.6/site-packages/pkg_resources/__init__.py", line 2218, in require items = working_set.resolve(reqs, env, installer) File "/usr/local/psa/var/modules/letsencrypt/venv.5qCQD/lib/python2.6/site-packages/pkg_resources/__init__.py", line 835, in resolve raise VersionConflict(dist, req).with_context(dependent_req) ContextualVersionConflict: (cryptography 1.1 (/usr/local/psa/var/modules/letsencrypt/venv.5qCQD/lib/python2.6/site-packages), Requirement.parse('cryptography>=1.3'), set(['PyOpenSSL']))
Oh si, bastante feo el error, nos recomienda actualizar python 2.6 pero no es posible como ya comente, la página del desarrollador en github no dice nada, básicamente que instales una nueva versión de python y que el modulo intentará detectarlo, esto no es cierto así que he tenido que meter mano para resolver el problema.
Así que bueno, vamos a parchear el problema metiendo un nuevo python sin dañar el sistema, vamos a usar los de ius y también epel que si no ius no funciona.
Instalamos epel:
yum install epel-release
Instalamos los de ius:
rpm -ivh https://rhel6.iuscommunity.org/ius-release.rpm
Ahora instalamos python 2.7:
yum install python27 python27-devel python27-pip python27-setuptools
IUS se activa automáticamente pero si no es así en su caso por cualquier motivo pueden usar el argumento –enablerepo=ius al final.
Esto nos instala python 2.7 como versión adicional:
# ls -lha /usr/bin/ |grep python -rwxr-xr-x 2 root root 4,8K jul 23 2015 python lrwxrwxrwx 1 root root 6 ago 10 2015 python2 -> python -rwxr-xr-x 2 root root 4,8K jul 23 2015 python2.6 -rwxr-xr-x 1 root root 1,4K jul 23 2015 python2.6-config -rwxr-xr-x 1 root root 4,8K dic 7 12:26 python2.7 -rwxr-xr-x 1 root root 1,9K dic 7 12:26 python2.7-config lrwxrwxrwx 1 root root 16 mar 27 07:28 python-config -> python2.6-config
Ahora viene lo divertido, copiamos la ruta que viene en el error y accedemos
cd /usr/local/psa/var/modules/letsencrypt/venv.XXXXX/bin
Esta ruta es diferente el venv.xxxx parece que se genera aleatoriamente por eso revisen bien y accedemos a la carpeta bin como ven arriba.
Hacemos un backup del binario python ( renombrandolo )
mv python{,-bk}
Y hacemos un enlace simbólico a python 2.7:
ln -s /usr/bin/python2.7 /usr/local/psa/var/modules/letsencrypt/venv.5qCQD/bin/python
Hasta aquí todo bien cuando lo hice dije «voy a probar seguro que funciona ya» pero no es así.
Faltan algunas dependencias:
Instalamos libffi-devel necesario para instalar cffi y gcc para poder compilarlo:
yum install libffi-devel gcc
Ahora podemos instalar cffi con pip
/usr/bin/pip2.7 install cffi
También cryptography si no no podemos generar el ssl:
Antes instalamos openssl-devel para poder compilarlo es necesario algunas librerías:
yum install openssl-devel
Posteriormente:
/usr/bin/pip2.7 install cryptography
Por último instalamos lo más importante letsencrypt-plesk:
/usr/bin/pip2.7 letsencrypt-plesk
Con esto desaparece el error y podemos usar letsencrypt en todos nuestros dominios, si da un error dns es que no tenemos apuntando el dominio en cuestión.
Espero que esta solución les sirva, me tomo un rato dar con la tecla pero si ayuda a alguien más me quedo satisfecho y claro lo dejemos como base de conocimientos ya que me tocará corregirlo en más de un plesk y por eso he hecho este script aunque no lo he probado pero sobre papel funciona ya que ejecuta los mismos comandos.
Recomiendo la ejecución manual de los anteriores pasos, el script hace lo mismo pero por falta de tiempo he omitido checkeos y respuestas de error y demás, básicamente si falla en instalar algo note dirá nada.
Descargamos y ejecutamos.
wget mirror.skamasle.com/scripts/fixletsencrypt.sh sh fixletsencrypt.sh