EPEL リポジトリを活用して CentOS 5.x で Python 2.6 をインストールする
— Hajime Nakagami (@hajime_nakagami) 2011, 4月 8
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 もシェアが大きいので、お仕事だと必要に迫られて使わなければならないこともあるでしょう。 W3Techs の Usage Statistics and Market Share of Linux for Websites, January 2015 によると、Web サイトで利用されているサーバの Linux ディストリビューション別のシェアが以下になります。
CentOS と RHEL/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 リポジトリ
体制は分かりました。じゃあ RHEL や CentOS では 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 した方が確実ですが) 。追加要望も受け付けているようです (英語の方に追加してね) 。