EPEL リポジトリを活用して CentOS 5.x で Python 2.6 をインストールする

Twitter を眺めていると、こういった声をちらほら聞くのでその対策をまとめてみます。

背景

CentOS 5.x で標準インストールされている Python のバージョンは 2.4.3 です。現在の Python 2 の最新バージョンは 2.7.1 であり、Good night, Posterous でも 2.6 以上を使うことが良さそうだと伺えます。私も個人的なアプリケーションを書くときは、2.4 を見限って 2.6 以上で書いています。私が 2.6 以上で使うようになったものとしては、構文では標準で提供されるようになった with 文 や、クラスデコレータ などがあります。標準ライブラリでは、abc, io, json, multiprocessing などがあります *1

Python に慣れ親しんでいる開発者なら、ライブラリは PyPI - the Python Package Index : Python Package Index から勝手にインストールするから別に気にならないという場合もあるでしょう。とは言え、お仕事で Python のアプリケーションを提供するときにユーザが実行環境を作らなければいけない場合、easy_install や pip でこれとこれをインストールして!というのは一手間あって面倒だと思われることがあるかもしれません。またインストール中に依存ライブラリのビルドに失敗するかもしれません。それよりは RPM でインストールして!と言う方がシステム管理者の視点から見ても管理面でメリットがあります。さらに RPM を使うことで、インストールとアンインストールをクリーンに行えます。

Debian/Ubuntu を使えば良いんじゃないの?と思う方もいるかもしれません。RHEL/CentOS もシェアが大きいので、お仕事だと必要に迫られて使わなければならないこともあるでしょう。 W3TechsUsage Statistics and Market Share of Linux for Websites, January 2015 によると、Web サイトで利用されているサーバの Linux ディストリビューション別のシェアが以下になります。


CentOSRHEL/Fedora

wikipedia:CentOS というのは、RHEL が公開しているソースコードを自分たちのビルド環境でビルドしている Linux ディストリビューションです。RHELソースコード在りきなディストリビューションなので、RHEL と全く同じバージョンのパッケージしか提供されません *2 。そのため、CentOS の新バージョンが出たとしても、必ずその前の RHEL で提供しているパッケージのバージョンと同じです。そして、RHELエンタープライズなサーバを提供することが主目的なので、どうしても含まれるパッケージのバージョンが最新ではない ( = 少し枯れてて安定している) ものになります。RHEL のマイナーバージョンアップで個別パッケージのバージョンを大きくアップグレードすることは基本的にはありません。つまり RHEL 5.0 で Python-2.4.3 をリリースしたなら、RHEL 5.10 がリリースされたとしても Python-2.4 より上がることはないと思われます。それは、なるべく wikipedia:Application_Binary_Interface の互換性を保持しようと努めているからです *3

「新しい機能を提供したい」と「安定した機能を提供したい」という2つの要望は、どうしてもトレードオフになってしまいます。そこで Red Hat 社は、新しい機能はコミュニティベースの wikipedia:Fedora で、安定した機能はエンタープライズwikipedia:RHEL で提供するという体制に移行しました。Fedora プロジェクトはコミュニティベースではありますが、Red Hat 社がスポンサーとして出資しているディストリビューションでもあります。


CentOS と EPEL リポジトリ

体制は分かりました。じゃあ RHELCentOS では Python 2.6 や最新のパッケージを使うことはできないのか。そうは言ってもやっぱり欲しいものは欲しい。そこで EPEL (いーぺる) という拡張リポジトリが設けられました。EPEL プロジェクトは Fedora プロジェクトの一環なので、Fedora プロジェクトのインフラに加え、そのノウハウ (パッケージング、レビュー、テスト等) がそのまま適用されています。野良ビルドした RPM よりは信頼性の高いパッケージだと考えられます。EPEL については EPEL/FAQ/ja - FedoraProject を参照してください。


EPEL を追加する

CentOS に EPEL を追加する方法は簡単です。拡張リポジトリの情報をもつ epel-release パッケージをインストールします。現在は CentOS 5.6 がリリースされていますが、バージョンは 5.4 のままです。変更する必要性がなければ、バージョン番号があわないこともあるようです。

# rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/5/x86_64/epel-release-5-4.noarch.rpm
http://ftp.iij.ad.jp/pub/linux/fedora/epel/5/x86_64/epel-release-5-4.noarch.rpm を取得中

準備中...                ########################################### [100%]
   1:epel-release   ########################################### [100%]

このままの状態だと、通常のアップデートも全て EPEL リポジトリからアップグレードしてしまいます。必要なものだけ EPEL リポジトリを使うことが望ましいので、デフォルトでは EPEL リポジトリを使わないように [epel] の enabled を 1 -> 0 に変更します。

# vi /etc/yum.repos.d/epel.repo
[epel]
...
enabled=0
...

準備は整いました。

# yum search python26
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * addons: rsync.atworks.co.jp
 * base: rsync.atworks.co.jp
 * extras: rsync.atworks.co.jp
 * updates: ftp.iij.ad.jp
Warning: No matches found for: python26
No Matches found

通常のリポジトリを見に行くので python26 パッケージは見つかりません。EPEL リポジトリを見にいくようにするには --enablerepo=epel オプションを付けます。

# yum search python26 --enablerepo=epel
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * addons: rsync.atworks.co.jp
 * base: rsync.atworks.co.jp
 * epel: ftp.riken.jp
 * extras: rsync.atworks.co.jp
 * updates: ftp.iij.ad.jp
dpm-python26.x86_64 : Disk Pool Manager (DPM) python bindings
lfc-python26.x86_64 : LCG File Catalog (LFC) python bindings
python26.x86_64 : An interpreted, interactive, object-oriented programming language
python26-Cython.x86_64 : A language for writing Python extension modules
...

python26-* がたくさん見つかりましたね。

Python 2.6 をインストールする

それでは、Python 2.6 をインストールしてみましょう。

# yum -y install python26 --enablerepo=epel
# python26 
Python 2.6.5 (r265:79063, Feb 28 2011, 21:55:45) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

動きました o(^ ^)o

EPEL リポジトリに python26 パッケージがあるって知ってました?

私自身、CentOS 5.x での Python のバージョンは諦めていたのですが、573151 レビューリクエスト: python26 - EPEL5 に Python 2.6 を共存させてインストールする でリクエストされて、2010年5月頃に EPEL リポジトリに追加されていたようです。2〜3ヶ月あれば、EPEL リポジトリに新パッケージを追加できるんだということが伺えます。

Python26/ja - FedoraProject に、その他にインストールできる python26 系のパッケージのリストもあります (yum search した方が確実ですが) 。追加要望も受け付けているようです (英語の方に追加してね) 。

*1:詳細は What’s New in Python 2.6 — Python 2.6ja2 documentation を参照してください

*2:一部 RHEL の商用パッケージは提供されません

*3:RHEL4 まではマイナーバージョン間で ABI の互換性が保証されていましたが、RHEL5 からそれがなくなりました