Amazon Linux で yum を実行するたびにドキドキするのが Let’s Encrypt の状態。
(特に python のパッケージでアップデートがあると恐怖)
これまでも、Python の Virtual Env 環境がいつの間にか壊れていることが何度かありました・・・。
今回も、certbot-auto renew の実行でエラーになっていたのですが、前回の問題とは別のようです。

再度、エラーの解決に挑戦してみましょう。
早く Python2.7 から脱却したいところです・・・。
(AmazonLinux2 を使っても、現状、このあたりは同じなのかな・・・)
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won’t be maintained after that date. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Python 2.7は2020年1月1日にサポートが終了しました。Python2.7はメンテナンスされなくなったため、Pythonをアップグレードしてください。 pip 21.0は、2021年1月にPython 2.7のサポートを終了します。pipでのPython 2サポートの詳細については、https://pip.pypa.io/en/latest/development/release-process/#python-2-supportをご覧ください。 pip 21.0では、この機能のサポートが削除されます。
エラーの内容
今回も、SSL のサーバ証明書が更新されずに残り 1 ヶ月を切っていたので、Let’s Encrypt から警告のメールが届いていました。
cron で週に 1 回、更新チェックするようにしているのですけどね・・・。
案の定、手動で certbot-auto を実行してみるとエラーが出力されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | $ certbot-auto --debug -v Bootstrapping dependencies for Amazon... (you can skip this with --no-bootstrap) yum is /usr/bin/yum yum is hashed (/usr/bin/yum) Loaded plugins: priorities, update-motd, upgrade-helper 16 packages excluded due to repository priority protections Package gcc-4.8.5-1.22.amzn1.noarch already installed and latest version Package augeas-libs-1.0.0-5.7.amzn1.x86_64 already installed and latest version Package 1:openssl-1.0.2k-16.151.amzn1.x86_64 already installed and latest version Package 1:openssl-devel-1.0.2k-16.151.amzn1.x86_64 already installed and latest version Package libffi-devel-3.0.13-16.5.amzn1.x86_64 already installed and latest version Package system-rpm-config-9.0.3-42.28.amzn1.noarch already installed and latest version Package ca-certificates-2018.2.22-65.1.22.amzn1.noarch already installed and latest version Package python27-devel-2.7.18-2.139.amzn1.x86_64 already installed and latest version Package python27-virtualenv-15.1.0-1.14.amzn1.noarch already installed and latest version Package python27-tools-2.7.18-2.139.amzn1.x86_64 already installed and latest version Package python27-pip-9.0.3-1.27.amzn1.noarch already installed and latest version Nothing to do Creating virtual environment... 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/pkg_resources/__init__.py", line 564, in load_entry_point return get_distribution(dist).load_entry_point(group, name) File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2662, in load_entry_point return ep.load() File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2316, in load return self.resolve() File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2326, in resolve raise ImportError(str(exc)) ImportError: 'module' object has no attribute 'main' Traceback (most recent call last): File "<stdin>", line 27, in <module> File "<stdin>", line 19, in create_venv File "/usr/lib64/python2.7/subprocess.py", line 190, in check_call raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: Command '['virtualenv', '--no-site-packages', '--python', '/usr/bin/python2.7', '/opt/eff.org/certbot/venv']' returned non-zero exit status 1 |
これだけでは、何が原因なのかわからないですよね。
virtualenvのバージョン確認
このパターンで考えられるのは、virtualenv のバージョン不一致。
上記のエラーでは「virtualenv==15.1.0」のパッケージを期待しているようですが、前回、20.0.30 から 16.7.9 にダウングレードして対応した経緯があります。
yum でインストールしている python27-virtualenv は 15.1.0 なので、やはりこのバージョンに合わせておいた方が良かったでしょうか。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | $ yum info python27-virtualenv Loaded plugins: priorities, update-motd, upgrade-helper 16 packages excluded due to repository priority protections Installed Packages Name : python27-virtualenv Arch : noarch Version : 15.1.0 Release : 1.14.amzn1 Size : 2.8 M Repo : installed From repo : amzn-main Summary : Tool to create isolated Python environments URL : http://pypi.python.org/pypi/virtualenv License : MIT Description : virtualenv is a tool to create isolated Python environments. virtualenv : is a successor to workingenv, and an extension of virtual-python. It is : written by Ian Bicking, and sponsored by the Open Planning Project. It is : licensed under an MIT-style permissive license. : : This package is meant to be used with Python 2.7. |
virtualenvのバージョン調整
その前に pip のバージョンも最新にしておきましょう。
1 2 3 4 5 6 7 8 9 | $ python -m pip install -U pip Collecting pip Using cached https://files.pythonhosted.org/packages/4e/5f/528232275f6509b1fff703c9280e58951a81abe24640905de621c9f81839/pip-20.2.3-py2.py3-none-any.whl Installing collected packages: pip Found existing installation: pip 19.3.1 Uninstalling pip-19.3.1: Successfully uninstalled pip-19.3.1 Successfully installed pip-20.2.3 |
ちなみに、virtualenv も最新の 20.0.31 を試したのですが解決しなかったので、やはり 15.1.0 で python27-virtualenv のバージョンと合わせておくしかないですね。
1 2 3 4 5 6 7 8 9 10 11 | $ python -m pip install -U virtualenv==15.1.0 Collecting virtualenv==15.1.0 Downloading virtualenv-15.1.0-py2.py3-none-any.whl (1.8 MB) |████████████████████████████████| 1.8 MB 9.5 MB/s Installing collected packages: virtualenv Attempting uninstall: virtualenv Found existing installation: virtualenv 20.0.31 Uninstalling virtualenv-20.0.31: Successfully uninstalled virtualenv-20.0.31 Successfully installed virtualenv-15.1.0 |
これで無事に certbot-auto renew が実行できるようになりました。