気まぐれな備忘録(仮)

いちようSEしてるので、プログラミングの備忘録的なものを書いてます

Vagrant環境でredis3.0を構築

Redis3.0がStableになったとのことで、Vagrant環境にredisを入れてみた。
ちなみに私はvagrantに詳しくないので、どこかから拾ってきたVagrantfileを流用している。
もっといい、ちゃんとしたやり方がありましたら、どなたか教えてください。

Vagrantfile

Vagrant.configure("2") do |config|
  config.vm.box = "centos6.5.3"
  config.vm.box_url = "https://github.com/2creatives/vagrant-centos/" +
    "releases/download/v6.5.3/centos65-x86_64-20140116.box"
# (途中の設定は中略)
  config.vm.provision :shell, path: "provision/redis-server.sh"
end

ここでは、

config.vm.provision :shell, path: "provision/redis-server.sh"

を追加しただけ。config.vm.provisionにて、redisをインストールするスクリプトを読み込んでいる。


そしてこちらが、メインのスクリプト
redisをDLした後、/opt/配下でmake実行、ついでにサービス設定も行っている。

provision/redis-server.sh

#!/bin/bash

redis="redis-3.0.0"
redis_home="/opt/${redis}"

if [[ ! -d ${redis_home} ]]; then
  wget http://download.redis.io/releases/${redis}.tar.gz
  tar xzvf ${redis}.tar.gz
  mv ${redis} /opt/
  pushd ${redis_home}
  make

  mkdir -p /etc/redis
  mkdir -p /var/log/redis
  cp -p ${redis_home}/utils/redis_init_script /etc/init.d/redis
  cp -p ${redis_home}/redis.conf /etc/redis/6379.conf

  sed -i -e "s/daemonize no/daemonize yes/g" /etc/redis/6379.conf
  sed -i -e "s/pidfile \/var\/run\/redis.pid/pidfile \/var\/run\/redis_6379.pid/g" /etc/redis/6379.conf
  sed -i -e "s/logfile \"\"/logfile \/var\/log\/redis\/redis.log/g" /etc/redis/6379.conf
  sed -i -e "s/dir .\//dir \/var\/log\/redis\//g" /etc/redis/6379.conf

  sed -i -e "3i # chkconfig:   - 85 15" /etc/init.d/redis
  sed -i -e "4i # description:  redis-server" /etc/init.d/redis
  sed -i -e "5i # processname: redis" /etc/init.d/redis

  ln -s ${redis_home}/src/redis-server /usr/local/bin/redis-server
  ln -s ${redis_home}/src/redis-cli /usr/local/bin/redis-cli

  /etc/init.d/redis start
  chkconfig --add redis
  chkconfig redis on

  popd
fi

redis3.0のrpmが見つからなかったので、redisの公式サイトからtar.gzをダウンロードする。

wget http://download.redis.io/releases/${redis}.tar.gz

${redis}は適宜インストールしたいバージョンに書き換えてください。

そして/opt配下にインストール。

  tar xzvf ${redis}.tar.gz
  mv ${redis} /opt/
  pushd ${redis_home}
  make

ホントはmake testすべきなんだけど、tclを入れる必要があったり、ちょっと手間だったので飛ばした。

redisのインストール自体はここまで。とってもカンタン。
以降はredisをサービス起動するための設定。ここからが一手間。
vagrantにログインして直接設定すれば苦労しないけど、そしたらvagrant使っている意味ないからね。

ちなみにここからの設定はhttp://blog.livedoor.jp/tattyamm/archives/4147335.htmlを参考にしました。

  mkdir -p /etc/redis
  mkdir -p /var/log/redis
  cp -p ${redis_home}/utils/redis_init_script /etc/init.d/redis
  cp -p ${redis_home}/redis.conf /etc/redis/6379.conf

まずは、必要なディレクトリを作成して、サービス起動用のスクリプトと設定ファイルをコピー。

  sed -i -e "s/daemonize no/daemonize yes/g" /etc/redis/6379.conf
  sed -i -e "s/pidfile \/var\/run\/redis.pid/pidfile \/var\/run\/redis_6379.pid/g" /etc/redis/6379.conf
  sed -i -e "s/logfile \"\"/logfile \/var\/log\/redis\/redis.log/g" /etc/redis/6379.conf
  sed -i -e "s/dir .\//dir \/var\/log\/redis\//g" /etc/redis/6379.conf

設定ファイルを気合で書き換え。書き換え後の設定は以下のようになります。

daemonize yes # デーモン化の設定を有効化
pidfile /var/run/redis_6379.pid # pidファイル名を変更
logfile /var/log/redis/redis.log # 出力先を標準出力からファイルに変更
dir /var/log/redis/ # dumpファイルを出力するディレクトリを変更

次に起動スクリプトを書き換え。

  sed -i -e "3i # chkconfig:   - 85 15" /etc/init.d/redis
  sed -i -e "4i # description:  redis-server" /etc/init.d/redis
  sed -i -e "5i # processname: redis" /etc/init.d/redis

  ln -s ${redis_home}/src/redis-server /usr/local/bin/redis-server
  ln -s ${redis_home}/src/redis-cli /usr/local/bin/redis-cli

chkconfigに必要な設定を追加しているのと、あとは起動スクリプト内に記載されているパスにシンボリックリンクを追加。

ここまでで、vagrant upしてログインすると、既にredis-serverが起動している状態になっていた。

ホントはredis-clusterを構築したいなぁと思いつつ、今日はここまで。