akishin999の日記

調べた事などを書いて行きます。

Redis 2.6 の RPM を作成する

ちょっと使う必要があったので、Redis の最新版の RPM を作成してみました。

環境は CentOS 6.3 です。

まずは RPM の作成に必要な rpmbuild、rpmdevtools をインストールします。

# yum install -y rpm-build rpmdevtools

次に RPM 作成用のユーザを作成して su します。

# useradd rpmdevel
# su - rpmdevel

rpmdevtools でインストールされる rpmdev-setuptree コマンドを実行します。
rpmdev-setuptree コマンドを実行すると、RPM の作成に必要なディレクトリや .rpmmacros ファイルを生成してくれます。

$ rpmdev-setuptree

生成された ~/.rpmmacros の中身は以下のようになっていました。

%_topdir      %(echo $HOME)/rpmbuild
%_smp_mflags  -j3
%__arch_install_post   /usr/lib/rpm/check-rpaths   /usr/lib/rpm/check-buildroot

これで RPM 作成環境は整ったので、次は Redis の SRPM をインストールします。
先ほど作成した rpmdevel ユーザのままでインストールして下さい。

SRPM は EPEL のものを使用しました。

$ rpm -ivh http://dl.fedoraproject.org/pub/epel/6/SRPMS/redis-2.4.10-1.el6.src.rpm

ここで必要なのは SPEC ファイルなので、旧バージョンのソースコードは紛らわしいので削除しておきます。

$ rm ~/rpmbuild/SOURCES/redis-2.4.10.tar.gz

SPEC ファイルを編集します。

$ vi ~/rpmbuild/SPECS/redis.spec

ここではバージョン文字列を修正します。
また、TODO ファイルは存在しないので、 %doc から除去しておきます。

・・・略・・・
Version:          2.6.12
・・・略・・・
%doc 00-RELEASENOTES BUGS CONTRIBUTING COPYING README
・・・略・・・

Redis 公式サイトから Redis 2.6.12 のソースコードを取得します。

$ wget http://redis.googlecode.com/files/redis-2.6.12.tar.gz

EPEL の SPEC では CentOS の環境に合うように redis.conf にパッチを当てています。
パッチ自体はバージョン違いのためそのままでは適用できないのですが、変更内容は同じなので、ここで 2.6 用のパッチを作成します。

まずは設定ファイルを取り出すため、一旦 tar ボールを展開します。

$ tar xzf redis-2.6.12.tar.gz

展開したら設定ファイルをコピー。

$ cp -p redis-2.6.12/redis.conf redis-2.6.12/redis.conf.orig

コピー元の redis.conf の方を編集します。

$ vi redis-2.6.12/redis.conf

SRPM に含まれている ~/rpmbuild/SOURCES/redis-2.4.8-redis.conf.patch の内容を参考に、以下の値を変更しました。

daemonize yes
・・・
pidfile /var/run/redis/redis.pid
・・・
bind 127.0.0.1
・・・
logfile /var/log/redis/redis.log
・・・
dir /var/lib/redis/
・・・

編集が完了したら先ほどのパッチを上書きします。

$ diff -up redis-2.6.12/redis.conf.orig redis-2.6.12/redis.conf > ~/rpmbuild/SOURCES/redis-2.4.8-redis.conf.patch

これでパッチの準備は OK です。

先ほど取得したソースコードの tar ボールを ~/rpmbuild/SOURCES/ 以下に配置します。

$ mv redis-2.6.12.tar.gz ~/rpmbuild/SOURCES/

いよいよ rpmbuild コマンドの実行です。

$ rpmbuild -ba ~/rpmbuild/SPECS/redis.spec

しばらく待って無事完了したら、 RPM ファイルが作成されている事を確認します。

$ ls -lh /home/rpmdevel/rpmbuild/RPMS/x86_64/
合計 716K
-rw-rw-r--. 1 rpmdevel rpmdevel 715K  410 21:46 2013 redis-2.6.12-1.el6.x86_64.rpm

RPM ファイル内容も念のため確認しておきます。

$ rpm -qlp /home/rpmdevel/rpmbuild/RPMS/x86_64/redis-2.6.12-1.el6.x86_64.rpm
/etc/logrotate.d/redis
/etc/rc.d/init.d/redis
/etc/redis.conf
/usr/bin/redis-benchmark
/usr/bin/redis-check-aof
/usr/bin/redis-check-dump
/usr/bin/redis-cli
/usr/sbin/redis-server
/usr/share/doc/redis-2.6.12
/usr/share/doc/redis-2.6.12/00-RELEASENOTES
/usr/share/doc/redis-2.6.12/BUGS
/usr/share/doc/redis-2.6.12/CONTRIBUTING
/usr/share/doc/redis-2.6.12/COPYING
/usr/share/doc/redis-2.6.12/README
/var/lib/redis
/var/log/redis
/var/run/redis

問題無さそうですね。

インストールは root になり RPM コマンドで。

$ su -
# rpm -ivh /home/rpmdevel/rpmbuild/RPMS/x86_64/redis-2.6.12-1.el6.x86_64.rpm
準備中...                ########################################### [100%]
   1:redis                  ########################################### [100%]

RPM 作成とは関係ありませんが、このままデフォルトで redis を起動するとログに以下のような Warning が出力されます。

[11449] 10 Apr 21:49:16.871 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

Redis は上記の通りメモリオーバコミットの設定を変更しないと毎回ログに警告が出ます。
なので忘れないうちにここで設定しておきます。

# echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
# sysctl -p

設定したら Redis を起動。

# service redis start

ログに警告が出ていない事を確認します。

# tail /var/log/redis/redis.log
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

[11488] 10 Apr 21:52:41.666 # Server started, Redis version 2.6.12
[11488] 10 Apr 21:52:41.666 * DB loaded from disk: 0.000 seconds
[11488] 10 Apr 21:52:41.666 * The server is now ready to accept connections on port 6379

問題なければ、サーバへ接続できることを確認します。

# redis-cli PING
PONG

以上で CentOS 6 への最新の redis のインストールは完了です。


Redis Cookbook
Redis Cookbook
posted with amazlet at 13.06.05
Tiago Macedo Fred Oliveria
Oreilly & Associates Inc
売り上げランキング: 27,988

Redis in Action
Redis in Action
posted with amazlet at 13.06.05
Josiah L. Carlson
Manning Pubns Co
売り上げランキング: 43,263