ニフクラ ブログ

ニフクラ/FJ Cloud-Vやクラウドの技術について、エンジニアが語るブログです。

ニフティクラウド探検隊 CentOSで手軽に最新のソフトウエアを使いたい!

こんにちは。
ニフティでインフラを守るお仕事をしている五月女です。

Photo_2

「前々回の記事」で紹介した通り、ニフティクラウドは標準提供OSとして「CentOS」や「RHEL」を提供してくれています。
中でもCentOSは、商用のRHELと完全互換を目指したフリーなOSとして、企業向けのサーバ構築で人気のディストリビューションです。
ただ、強いEnterprise指向が故に、標準状態では利用出来るソフトウエアのパッケージが古かったり、欲しいソフトウエアのパッケージが無かったりと多少不便な所があります。

そこで今回は、そんなCentOSで最新のソフトウエアを手軽に利用する簡単な手順を紹介したいと思います。( ̄ー ̄)bグッ!

※内容は、2011年08月現在時点の情報です。
※ニフティクラウドで提供されている「CentOS 5.6 64bit Plain」を対象とした記事です

■標準提供のCentOSで不便な所

CentOSが標準で提供するソフトウエアのパッケージを見てみると、必要とするバージョンが提供されてない場合があります。
例えば、LAMP環境の構築を考えた場合、標準では下記のバージョンが提供されています。

  • Aapache
    • 2.2.3
  • MySQL
    • 5.0.77
  • PHP
    • 5.1.6
    • 5.3.3
  • Ruby
    • 1.8.5
 

この状態では、「MySQL5.5」でビルドインされたInnoDBを利用したり、より高速化された「Ruby1.9」を利用するといった事が出来ません。
また、最近人気のバージョン管理システムである「git」や、LAMPにおけるMySQLの管理フロントエンドとしてよく利用される「phpMyAdmin」についても、パケージ提供されてないため自前で導入する必要があります。

こうした点の解決策として、最新パッケージや便利なパッケージが追加されている「サードパーティリポジトリ」と、ソースコードからソフトウエアのパケージを作成する「chekinstall」のセットアップを行います。

■便利なCentOS環境のセットアップ

サードパーティリポジトリの追加

今回は著名な3つのリポジトリを追加したいと思います。

RPMforgeリポジトリを追加

RPMforgeは元々CentOSの開発チームにいたDag Wieersさんらが公開されているレポジトリです。

※本家はhttp://apt.sw.be/ですが、今回は速度も考慮し、国内ミラーであるhttp://ftp.riken.jp/Linux/dag/を使います。

[root@localhost ~]# rpm --import http://ftp.riken.jp/Linux/dag/RPM-GPG-KEY.dag.txt
[root@localhost ~]# rpm -ivh http://ftp.riken.jp/Linux/dag/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
http://ftp.riken.jp/Linux/dag/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm を取得中
準備中...                ########################################### [100%]
1:rpmforge-release       ########################################### [100%]
[root@localhost ~]#

デフォルトでは利用しない様に設定変更する

[root@localhost ~]# vi /etc/yum.repos.d/rpmforge.repo
enabled=1
↓書き換える
enabled=0
EPELリポジトリを追加

EPEL(Extra Packages for Enterprise Linux)は先進的な取り組みを行っているFedoraで開発・テストされている最新のパッケージを、CentOS等のEnterpriseLinuxでも利用出来る様に取り組んでいるリポジトリです。

※本家はhttp://download.fedora.redhat.com/pub/epel/ですが、今回は速度も考慮し、国内ミラーであるhttp://ftp.riken.jp/Linux/fedora/epel/を使います。

[root@localhost ~]# rpm --import http://ftp.riken.jp/Linux/fedora/epel/RPM-GPG-KEY-EPEL
[root@localhost ~]# rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/5/x86_64/epel-release-5-4.noarch.rpm
http://ftp.riken.jp/Linux/fedora/epel/5/x86_64/epel-release-5-4.noarch.rpm を取得中
準備中...                ########################################### [100%]>
1:epel-release           ########################################### [100%]
[root@localhost ~]#

デフォルトでは利用しない様に設定変更する

[root@localhost ~]# vi /etc/yum.repos.d/epel.repo
enabled=1
↓書き換える
enabled=0
Remiリポジトリを追加

Remiは元々Fedoraのパッケージ開発者でもあるRemiさんが、Fedoraにも含まれない、さらに先進的なパッケージをテストするために公開しているレポジトリです。

[root@localhost ~]# rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
[root@localhost ~]# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
http://rpms.famillecollet.com/enterprise/remi-release-5.rpm を取得中
準備中...                ########################################### [100%]
1:remi-release           ########################################### [100%]
[root@localhost ~]#
追加したリポジトリを確認する

追加したリポジトリを有効した状態でリポジトリの一覧を取得する

[root@localhost ~]# yum --enablerepo=rpmforge,epel,remi repolist all
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* epel: ftp.kddilabs.jp
* extras: ftp.iij.ad.jp
* remi: rpms.famillecollet.com
* rpmforge: fr2.rpmfind.net
* updates: ftp.iij.ad.jp
epel                                                                                                                 | 3.7 kB     00:00
remi                                                                                                                 | 2.5 kB     00:00
remi/primary_db                                                                                                      | 259 kB     00:01
rpmforge                                                                                                             | 1.1 kB     00:00
repo id                                       repo name                                                                                status
・
・
省略
・
・
base                                          CentOS-5 - Base                                                                enabled:  3,535
epel                                          Extra Packages for Enterprise Linux 5 - x86_64                                 enabled:  6,642
extras                                        CentOS-5 - Extras                                                              enabled:    299
remi                                          Les RPM de remi pour Enterprise Linux 5 - x86_64                               enabled:    625
rpmforge                                      RHEL 5 - RPMforge.net - dag                                                    enabled: 10,695
updates                                       CentOS-5 - Updates                                                             enabled:    765
・
・
省略
・
・
repolist: 22,561
[root@localhost ~]#

パッケージ総数22,561個!!

ちなみに標準のパッケージだけだと・・・

[root@localhost ~]# yum repolist all
・
・
省略
・
・
repolist: 4,599
[root@localhost ~]#

4,599個と表示されていますので、今回のリポジトリ追加によって約5倍のパッケージが選択出来る様になった事が分かります。

パッケージ作成ツール「chekinstall」のインストール

追加したサードパーティリポジトリにも存在しないソフトウエアはソースコードからコンパイルしてインストールする事になります。
しかし、この場合もchekinstallを利用して一旦パッケージ化してからインストールする事で、
rpmコマンドやyumコマンドを使って他のパッケージと同様に管理する事が可能になります。

ソフトウエアを、単純にソースコードからコンパイルしてインストールした場合、
最初は問題無いのですが、インストールするソフトウエアが増え、
さらには、インストールしたソフトウエアのバージョンが上がったりすると管理の煩雑さが上昇します。
管理の煩雑さから開放されるためにもchekinstallを利用したパケージ化をお勧めします。

chekinstallのソースコードを取得

chekinstall自体がソースコードで頒布されているソフトウエアになります。まずはソースコードを取得します。

[root@localhost ~]# wget 'http://www.asic-linux.com.mx/~izto/checkinstall/files/source/checkinstall-1.6.2.tar.gz'
--2011-08-24 00:49:07--  http://www.asic-linux.com.mx/~izto/checkinstall/files/source/checkinstall-1.6.2.tar.gz
www.asic-linux.com.mx をDNSに問いあわせています... 208.75.85.226
www.asic-linux.com.mx|208.75.85.226|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 129577 (127K) [application/x-tar]
checkinstall-1.6.2.tar.gz' に保存中
100%[============================================================================================================>] 129,577     52.0K/s 時間 2.4s
2011-08-24 00:49:11 (52.0 KB/s) -checkinstall-1.6.2.tar.gz' へ保存完了 [129577/129577]
[root@localhost ~]#

解凍

[root@localhost ~]# tar vzxf checkinstall-1.6.2.tar.gz
依存パッケージのインストール

checkinstallをコンパイルするのに必要なパッケージをインストールします。

[root@localhost ~]# yum -y install gcc readline-devel gettext rpm-build
chekinstallののインストール

コンパイルしてインストールを実施する

[root@localhost ~]# cd checkinstall-1.6.2
[root@localhost checkinstall-1.6.2]# make
[root@localhost checkinstall-1.6.2]# make install

chekinstall自体をパッケージ化する

[root@localhost checkinstall-1.6.2]# checkinstall -R
・
・
省略
・
・
このパッケージは以下の内容で構成されます:
1 -  Summary: [ CheckInstall installations tracker, version 1.6.2 ]
2 -  Name:    [ checkinstall ]
3 -  Version: [ 1.6.2 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ Applications/System ]
7 -  Architecture: [ x86_64 ]
8 -  Source location: [ checkinstall-1.6.2 ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [ checkinstall ]
変更するものの番号を入力してください。Enterで続行します: [Enter]
・
・
省略
・
・


Done. The new package has been saved to /usr/src/redhat/RPMS/x86_64/checkinstall-1.6.2-1.x86_64.rpm You can install it in your system anytime using: rpm -i checkinstall-1.6.2-1.x86_64.rpm


[root@localhost checkinstall-1.6.2]#

chekinstallを作成したパッケージで上書きインストールする

[root@localhost checkinstall-1.6.2]# rpm -ivh /usr/src/redhat/RPMS/x86_64/checkinstall-1.6.2-1.x86_64.rpm
準備中...                ########################################### [100%]
1:checkinstall           ########################################### [100%]
[root@localhost checkinstall-1.6.2]#
chekinstallの確認

パッケージで管理されているか確認する

[root@localhost checkinstall-1.6.2]# rpm -qa | grep checkinstall
checkinstall-1.6.2-1

インストールされたバージョンを確認する

[root@localhost ~]# checkinstall -v
checkinstall 1.6.2, Copyright 2009 Felipe Eduardo Sanchez Diaz Duran
このソフトウェアはGNU GPLの下でリリースしています。

■セットアップしたCentOSを使ってみる

最新のパッケージを導入する

実際にサードパーティリポジトリを追加した事で、どの様な変化があったのか確認してみます。

MySQLをインストール

標準状態では「5.0系」しかインストール出来ません。

[root@localhost ~]# yum info mysql.x86_64 mysql-server.x86_64
・
省略
・
Name       : mysql
Arch       : x86_64
Version    : 5.0.77
Release    : 4.el5_6.6
Size       : 4.8 M
Repo       : updates
・
省略
・
Name       : mysql-server
Arch       : x86_64
Version    : 5.0.77
Release    : 4.el5_6.6
Size       : 9.8 M
Repo       : updates

しかし、追加したリポジトリを利用すると「5.5系」のインストールがパッケージから簡単に行える様になっています。

[root@localhost ~]# yum --enablerepo=rpmforge,epel,remi info mysql.x86_64 mysql-server.x86_64
・
省略
・
Name       : mysql
Arch       : x86_64
Version    : 5.5.15
Release    : 1.el5.remi
Size       : 7.4 M
Repo       : remi
・
省略
・
Name       : mysql-server
Arch       : x86_64
Version    : 5.5.15
Release    : 1.el5.remi
Size       : 12 M
Repo       : remi
gitをインストール

標準状態ではパッケージが存在しないgitですが

[root@localhost ~]# yum info git
Error: No matching Packages to list

追加リポジトリを利用する事でパッケージからインストールが出来る様になります

[root@localhost ~]# yum --enablerepo=rpmforge,epel,remi info git
・
省略
・
Name       : git
Arch       : x86_64
Version    : 1.7.6
Release    : 1.el5.rf
Size       : 6.5 M
Repo       : rpmforge
ソースコードからパッケージを作成する

追加したサードパーティリポジトリにも存在しないパッケージは自前でパッケージ化してインストールします。

ruby1.9のパッケージを作成

Rubyはサードパーティリポジトリを追加しても、「1.8系」しか利用出来ません。
さらに高速で正規表現が強化された「1.9系」を利用するために、ソースコードからパッケージを作成します。

ソースコードを取得

[root@localhost ~]# wget 'ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p290.tar.bz2'
--2011-08-24 01:51:39--  ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p290.tar.bz2
=> ruby-1.9.2-p290.tar.bz2'
ftp.ruby-lang.org をDNSに問いあわせています... 221.186.184.68
ftp.ruby-lang.org|221.186.184.68|:21 に接続しています... 接続しました。
anonymous としてログインしています... ログインしました!
==> SYST ... 完了しました。    ==> PWD ... 完了しました。
==> TYPE I ... 完了しました。  ==> CWD /pub/ruby/1.9 ... 完了しました。
==> SIZE ruby-1.9.2-p290.tar.bz2 ... 8811237
==> PASV ... 完了しました。    ==> RETR ruby-1.9.2-p290.tar.bz2 ... 完了しました。
長さ: 8811237 (8.4M)
100% [============================================================================================================>] 8,811,237   4.31M/s 時間 1.9s
2011-08-24 01:51:42 (4.31 MB/s) -ruby-1.9.2-p290.tar.bz2' へ保存終了 [8811237]

解凍

[root@localhost ~]# tar lxvf ruby-1.9.2-p290.tar.bz2

依存パッケージをインストール

[root@localhost ~]# yum -y --enablerepo=rpmforge,epel,remi install gcc zlib-devel rpm-build openssl-devel readline-devel

パッケージを作成

[root@localhost ~]# cd ruby-1.9.2-p290
[root@localhost ruby-1.9.2-p290]# ./configure --prefix=/usr
[root@localhost ruby-1.9.2-p290]# make && make test
[root@localhost ruby-1.9.2-p290]# checkinstall -R --fstrans=no
・
・
省略
・
・


* RPM package creation selected


このパッケージは以下の内容で構成されます: 1 - Summary: [ Package created with checkinstall 1.6.2 ] 2 - Name: [ ruby-1.9.2 ] 3 - Version: [ p290 ] 4 - Release: [ 1 ] 5 - License: [ GPL ] 6 - Group: [ Applications/System ] 7 - Architecture: [ x86_64 ] 8 - Source location: [ ruby-1.9.2-p290 ] 9 - Alternate source location: [ ] 10 - Requires: [ ] 11 - Provides: [ ruby-1.9.2 ] 変更するものの番号を入力してください。Enterで続行します: [Enter] ・ ・ 省略 ・ ・


Done. The new package has been saved to /usr/src/redhat/RPMS/x86_64/ruby-1.9.2-p290-1.x86_64.rpm You can install it in your system anytime using: rpm -i ruby-1.9.2-p290-1.x86_64.rpm **********************************************************************

作成したパッケージからインストール

[root@localhost ruby-1.9.2-p290]# rpm -ivh /usr/src/redhat/RPMS/x86_64/ruby-1.9.2-p290-1.x86_64.rpm
準備中...                ########################################### [100%]
1:ruby-1.9.2             ########################################### [100%]
[ root@localhost ruby-1.9.2-p290]#

インストールを確認

[root@localhost ruby-1.9.2-p290]# ruby --version
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]

■まとめ

いかがだったでしょうか。
手軽に最新のソフトウエアが利用出来る環境を用意する事で、アプリケーションの可能性が広がり、新しいアイデアが生まれる事があります。
また、「つくろう!」と思っていたツールが、意外と追加したパッケージの中に見つかったりして、余計な車輪の再発明を防ぐ事もあります(^_^;)

さらに、今回導入したchekinstallは自作ソフトウエアをパッケージ化する際にも役に立ちます。
むしろ、ソフトウエアだけでなく、設定ファイルやアプリケーションのパッチをパッケージ化して配布する!なんて事にも使えます。
ある程度の自家製パッケージが揃ったら、個人的なリポジトリや社内向けのリポジトリを作るってのもチャレンジしてみてはいかがでしょうか。