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 4月 10 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 のインストールは完了です。
Oreilly & Associates Inc
売り上げランキング: 27,988
Manning Pubns Co
売り上げランキング: 43,263