I’ve started using Let’s Encrypt for the SSL certificates a while back. I installed it on all the web servers, irrelevant of the need for SSL, just to have it there, when I need it (thanks to this Ansible role). One of those old web servers needed an SSL certificate recently, so I thought it’d be no problem to generate one.
But I was wrong. The letsencrypt-auto tool got outdated and was failing to execute, throwing some Python exception about missing zope.interface module. A quick Google search brought this StackOverflow discussion, with the exact issue I was having.
Traceback (most recent call last): File "/root/.local/share/letsencrypt/bin/letsencrypt", line 7, in <module> from certbot.main import main File "/root/.local/share/letsencrypt/local/lib/python2.7/dist-packages/certbot/main.py", line 12, in <module> import zope.component File "/root/.local/share/letsencrypt/local/lib/python2.7/dist-packages/zope/component/__init__.py", line 16, in <module> from zope.interface import Interface ImportError: No module named interface
However, the solution didn’t fix the problem for me:
unset PYTHON_INSTALL_LAYOUT /opt/letsencrypt/letsencrypt-auto -v
Even pulling the updated version from the GitHub repository didn’t solve it.
After poking around for a while more, I found this bug report from the last year, which solved my problem.
- Running rm -rf /root/.local/share/letsencrypt. This removes your installation of letsencrypt, but keeps all configuration files, certificates, logs, etc.
- Make sure you have an up to date copy of letsencrypt-auto. It can be found here.
- Run letsencrypt-auto again.
If you get the same behavior, you can try installing zope.interface manually by running:
/root/.local/share/letsencrypt/bin/pip install zope.interface
Hopefully, next time I’ll remember to search my blog’s archives …
Update (May 31, 2017): check out my brother’s follow up post with even better way of fixing this issue.