EUC-JPで運用している Amazon Linux で Let’s Encrypt の証明書更新エラー

Let’s Encrypt で取得したSSL証明書をインストールした、EUC-JPで運用しているAmazon LinuxのEC2インスタンスがあります。

このインスタンスで、自動更新のcertbot-autoがエラーとなりました。エラーメッセージは以下です。

Traceback (most recent call last):
File "/usr/bin/virtualenv", line 11, in <module>
load_entry_point('virtualenv==15.1.0', 'console_scripts', 'virtualenv')()
File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 717, in main
symlink=options.symlink)
File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 949, in create_environment
download=download,
File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 905, in install_wheel
call_subprocess(cmd, show_stdout=False, extra_env=env, stdin=SCRIPT)
File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 801, in call_subprocess
% (cmd_desc, proc.returncode))
OSError: Command /opt/eff.org/certbot/venv/bin/python2.7 - setuptools pip wheel failed with error code 1

いろいろ調べると、pipをアップグレードしろという記事もあったので、pipのアップグレードを実施しましたが、以下のエラーとなりました。

# pip install --upgrade pip
Exception:
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 215, in main
status = self.run(options, args)
File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 272, in run
with self._build_session(options) as session:
File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 72, in _build_session
insecure_hosts=options.trusted_hosts,
File "/usr/lib/python2.7/dist-packages/pip/download.py", line 329, in __init__
self.headers["User-Agent"] = user_agent()
File "/usr/lib/python2.7/dist-packages/pip/download.py", line 93, in user_agent
from pip._vendor import distro
File "/usr/lib/python2.7/dist-packages/pip/_vendor/distro.py", line 1050, in <module>
_distro = LinuxDistribution()
File "/usr/lib/python2.7/dist-packages/pip/_vendor/distro.py", line 594, in __init__
if include_lsb else {}
File "/usr/lib/python2.7/dist-packages/pip/_vendor/distro.py", line 922, in _get_lsb_release_info
stdout, stderr = stdout.decode('utf-8'), stderr.decode('utf-8')
File "/usr/lib64/python2.7/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa5 in position 22: invalid start byte

エラーの中で「utf8」の文字コード関連でエラーとなっていることがわかります。

EUC-JP環境で実行していることがエラーの原因でした。
コマンドの前に文字コード指定を入れ、以下のようにすれば正常終了しました。

# LANG=ja_JP.UTF-8 /usr/bin/certbot-auto renew --debug --post-hook "sudo service httpd restart"

上記内容をcronに記載します。

実は、Let’s Encrypt でSSL証明書をインストールする際にも、同じエラーではまってしまっていました。SSL証明書インストール時には以下のコマンドで対応します。

# LANG=ja_JP.UTF-8 certbot-auto certonly --webroot -w /var/www/xxxxx -d xxxxx.com --email hoge@xxxxx.com --debug

コメントを残す

コメントは当サイト運営者の承認後に反映されます。
お名前はニックネームでも結構です。

Comments are allowed only in Japanese. / 日本語が含まれない投稿は無視されますのでご注意ください。