アジェンダ
Let’s Encryptって便利だが・・・
amazon linuxに限らず、無料証明書で有名なLet’s Encryptはたびたびエラーを吐く。
特にpython絡み(アップデートとか)でエラーを吐いてきて解消の仕方を忘れるので書いておく。
事象
rootユーザで証明書更新コマンドを打つと、以下のエラーが出る。
[root@tatoeba-web01]# ./letsencrypt-auto renew Error: couldn't get currently installed version for /root/.local/share/letsencrypt/bin/letsencrypt: 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 7, 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
前にpythonのバージョンが古くて、それはそれでLet's Encryptから「pythonアップデートしろよ」って言われて素直に従ったらこの仕打ち(笑)
ということでこのエラーが吐かれた場合は以下の方法で解消できる。
環境変数
# env | grep PYTHON_INSTALL_LAYOUT PYTHON_INSTALL_LAYOUT=amzn
環境変数にamznがセットされているので、これをunsetする。
[root@tatoeba-web01]# unset PYTHON_INSTALL_LAYOUT
renewを実行
それぞれの環境に合わせて証明書更新コマンドを実行する。
[root@tatoeba-web01]# $LETSENCRYPT_HOME/letsencrypt-auto -v もしくは [root@tatoeba-web01]# $LETSENCRYPT_HOME/certbot-auto -v
僕の環境の場合はこれだけではエラーがまだ残った。
[root@tatoeba-web01]# ./letsencrypt-auto -v Error: couldn't get currently installed version for /root/.local/share/letsencrypt/bin/letsencrypt: 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 7, 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
上記エラーがまだ発生する場合は次の作業をする。
.localの削除
上記エラーに記述されている.localディレクトリを削除する。
[root@tatoeba-web01]# rm -rf /root/.local
これにて再度、証明書更新コマンドを実行する。
renewコマンド実行
[root@tatoeba-web01]# $LETSENCRYPT_HOME/letsencrypt-auto -v --debug もしくは [root@tatoeba-web01]# $LETSENCRYPT_HOME/certbot-auto -v --debug
今度はうまくいくはず。
すると、2点ほど質問されるので答えていく。
Which names would you like to activate HTTPS for? ------------------------------------------------------------------------------- 1: tatoeba-kimiga.com ------------------------------------------------------------------------------- Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel): 1
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. ------------------------------------------------------------------------------- 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. ------------------------------------------------------------------------------- Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
正常終了すれば、証明書更新コマンドも打てるはずだ。
[root@tatoeba-web01]# ./letsencrypt-auto --force-renew
まとめ
Let's Encryptはpythonと深く関わってる感じなので、やっぱインフラエンジニアはpythonを理解してたほうがよさそうだ。