らくがきちょう

なんとなく

Amazon Linux で Let's Encrypt のエラーが出た場合の対処

無料で SSL/TLS サーバ証明書を取得するには Let’s Encrypt が便利です。 Let’s Encrypt は Amazon Linux をまだ正式サポートしていないものの、とりあえず動作はするようです。 しかし、Amazon Linux 上で Let’s Encrypt を実行するとエラーが出る場合があります。 今回は「環境変数 PYTHON_INSTALL_LAYOUT を削除」し、更に「~/.local ディレクトリを削除」することで Let’s Encrypt を実行出来るようになりましたので、手順をメモしておきます。

Amazon Linux で Let’s Encrypt を実行した際のエラー

Amazon Linux で Let’s Encrypt で取得した証明書を更新しようとすると、以下のエラーになりました。

# ./certbot-auto renew
Upgrading certbot-auto 0.12.0 to 0.14.2...
Replacing certbot-auto...
Creating virtual environment...
Installing Python packages...
Installation succeeded.
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_INSTALL_LAYOUT」の削除

環境変数PYTHON_INSTALL_LAYOUT」を削除します。

# env | grep PYTHON_INSTALL_LAYOUT
PYTHON_INSTALL_LAYOUT=amzn
# unset PYTHON_INSTALL_LAYOUT
# env | grep PYTHON_INSTALL_LAYOUT
#

しかし、今度は別のエラーになりました。

# ./certbot-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

~/.local の削除

次に ~/.local を削除します(今回は移動し、実質的に削除されたのと同じ状態にしました)。

# mv ~/.local ~/.local.bak

Let’s Encrypt を再実行する

Let’s Encrypt を再実行します。 --debug オプションが無い為、Amazon Linux では実行出来ないよ、と怒られました。

# ./certbot-auto renew
FATAL: Amazon Linux support is very experimental at present...
if you would like to work on improving it, please ensure you have backups
and then run this script again with the --debug flag!
Alternatively, you can install OS dependencies yourself and run this script
again with --no-bootstrap.

--debug オプションを指定することで無事、証明書が更新されました!

./certbot-auto renew --debug