PCがあれば何でもできる!

へっぽこアラサープログラマーが、覚えたての知識を得意げにお届けします

CentOS6でLet's Encryptを使おうとするとpython2.7が入らずに詰まる

無料でSSL証明書が発行できると話題のLet's Encrypt。
先日、CentOS6のサーバに試しに入れてみようとしたところ、python2.7が入らずに詰まってしまいました。

最初に

OSはCentOS 6.7で、gcc, git, nginx以外ほとんど入っていない状態。

導入の参考にしたのはこちらのサイト。
nginxの設定など細かく書いてくださっているので、非常に参考になります。

光の速さのWEBサーバー(nginx)をlet's encryptでSSL化及びHTTP/2化。ついでにセキュリティ評価をA+にする。 - Qiita

現象

Gitでclone後、letsencrypt-autoを叩くと、必要なものが自動でインストールされるわけなのですが、virtualenvがなくて止まります。

$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt/
$ ./letsencrypt-auto --help
Bootstrapping dependencies for RedHat-based OSes...
yum is /usr/bin/yum
Loaded plugins: fastestmirror
Setting up Install Process
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
Package python-2.6.6-64.el6.x86_64 already installed and latest version
No package python-virtualenv available.
No package python-pip available.

〜 省略 〜

Creating virtual environment...
./letsencrypt-auto: line 165: virtualenv: command not found

上記の、

Package python-2.6.6-64.el6.x86_64 already installed and latest version
No package python-virtualenv available.
No package python-pip available.

が根本的な原因ですね。

どうやらletsencrypt-autoはpython2.7でないと動かないようですが、CentOS標準のリポジトリではpython2.6までしか落とせず、関連するパッケージについても同様ということのようです。pythonにはあまり詳しくないので、パッケージの詳細については割愛します。

色々調べて、結局このスレッドにたどり着きました。こちらの最後のコメントが解決策になります。
CentOS 6.7 + Python 2.7 errors on letsencrypt-auto run · Issue #1106 · letsencrypt/letsencrypt · GitHub

まとめると、このような感じです。

# SCLをインストール
$ sudo yum install centos-release-SCL

# python2.7 と scl utilsをインストール
$ sudo yum update
$ sudo yum install scl-utils python27 python27-scldevel

# python2.7をbash上で有効化
$ scl enable python27 bash

yum updateはご自身の判断で行ってください。ここまでやってあげると、問題なく動くようになります。

$ ./letsencrypt-auto --help
〜 省略(インストール後、ヘルプが表示される) 〜

SCLはRedHatが提供しているもので、従来のリポジトリにはない新し目のパッケージを、従来のリポジトリと競合しない形でインストールおよび利用できる仕組みのようです。(主に言語系のパッケージ、Ruby, PHPなどなど)

まず、最初のcentos-release-SCLのインストールでyumのリポジトリが追加され、上記で言うとpython27がyumでインストールできるようになる。

そして、scl-utilsをインストールすることで、sclコマンドで簡単にバージョンを切り替えることができるようになる、ということみたいです。

めちゃくちゃ便利ですね!