Chef-solo+knife-solo+Vagrantでサーバ構築を自動化してみる - その4 redis
今回は、githubのcookbookを使って、redisをインストールしてみます。
※環境は前回と同じです。
今回の流れ
- Berksfileでgithubのリポジトリを指定する
- サーバに適用してみる
- forkして修正する
- サーバに適用してみる
超シンプル。
Berksfileでgithubのリポジトリを指定する
さて、今回は https://github.com/miah/chef-redis こちらのクックブックを利用させて頂きます。
Berksfile
site :opscode cookbook 'sudo' cookbook 'nginx' cookbook 'redis', git: 'https://github.com/miah/chef-redis.git'
nodes/chef-test.json
{ "users": [ { "name": "yagi", "group": "deploy"}, { "name": "deploy", "group": "deploy"} ], "authorization": { "sudo": { "groups": ["vagrant", "deploy"], "users": ["vagrant", "deploy", "yagi"], "passwordless": true, "sudoers_defaults": [ "env_reset", "mail_badpass", "secure_path=\"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\"" ] } }, "nginx":{ "version": "1.4.1", "install_method": "source", "source": { "version": "1.4.1" }, "port" : 80, "worker_processes": 2 }, "redis": { "install_type": "source", "source": { "version": "2.6.14" }, "symlink_binaries": true }, "run_list":[ "recipe[users]", "recipe[sudo]", "recipe[nginx]", "recipe[redis::server]" ] }
今回は、バージョン指定でソースからインストールしたかった為、こんな感じにしてみました。
redis-cli
も欲しかったので、"symlink_binaries": true
も入れました。
サーバに適用してみる
では早速、cookしてみます。
$ bundle exec knife solo cook chef-test
サーバにログインして確認してみます。
(いい加減serverspec書きたい、、、)
$ ssh chef-test $ ps aux | grep redis redis 7699 0.1 0.0 35124 1908 ? Ssl 13:22 0:00 /opt/redis/bin/redis-server /etc/redis/server.conf vagrant 7864 0.0 0.0 8128 664 pts/1 R+ 13:23 0:00 grep --color=auto redis
起動はしてるっぽいので、redis-cli
からアクセスしてみます。
$ redis-cli Sorry, command-not-found has crashed! Please file a bug report at: (省略)
おぉ、、、怒られました。
forkして修正する
https://github.com/miah/chef-redis/blob/master/recipes/server_source.rb#L45
この辺を見ると、/sbin/
あたりにsymlinkを貼っているっぽいので、確認します。
$ ll /sbin/redis* lrwxrwxrwx 1 root root 20 Sep 9 13:21 /sbin/redis-cli -> /opt/redis/redis-cli lrwxrwxrwx 1 root root 23 Sep 9 13:21 /sbin/redis-server -> /opt/redis/redis-server
赤いので、すぐに分かりますが、一応/opt
の方も確認。
$ ll /opt/redis/ total 12 drwxr-xr-x 3 redis redis 4096 Sep 9 13:22 ./ drwxr-xr-x 5 root root 4096 Sep 9 13:21 ../ drwxr-xr-x 2 redis root 4096 Sep 9 13:22 bin/ $ ll /opt/redis/bin/ total 8452 drwxr-xr-x 2 redis root 4096 Sep 9 13:22 ./ drwxr-xr-x 3 redis redis 4096 Sep 9 13:22 ../ -rwxr-xr-x 1 redis root 2224534 Sep 9 13:22 redis-benchmark* -rwxr-xr-x 1 redis root 30547 Sep 9 13:22 redis-check-aof* -rwxr-xr-x 1 redis root 63507 Sep 9 13:22 redis-check-dump* -rwxr-xr-x 1 redis root 2326559 Sep 9 13:22 redis-cli* -rwxr-xr-x 1 redis root 3986254 Sep 9 13:22 redis-server*
どーやら、/opt/redis/bin/
配下にあるっぽい。
なので、リポジトリをforkして直してみます。
https://github.com/yagince/chef-redis/commit/d7ef9d763ade63f6c62817156e1499fc0d083321
直してみました。
サーバに適用してみる
直したので、こっちのリポジトリを見るようにして、再度cookしてみたいと思います。
Berksfile
site :opscode cookbook 'sudo' cookbook 'nginx' cookbook 'redis', git: 'https://github.com/yagince/chef-redis.git'
$ bundle exec knife solo cook chef-test
(省略)
* link[/sbin/redis-server] action create (up to date)
* link[/sbin/redis-cli] action create (up to date)
(省略)
ありゃ、up to date
と言われてしまった。。。
とりあえず、symlinkを手動で消して実行しなおしてみます。
$ sudo rm /sbin/redis-*
$ bundle exec knife solo cook chef-test (省略) * link[/sbin/redis-server] action create - create symlink at /sbin/redis-server to /opt/redis/redis-server * link[/sbin/redis-cli] action create - create symlink at /sbin/redis-cli to /opt/redis/redis-cli (省略)
作成されたっぽい。けど、pathが変わってない???
んー、クックブックがキャッシュされとるのか?
というわけで、updateしてみます。
$ bundle exec berks update Using sudo (2.1.4) Using nginx (1.7.0) Installing redis (2.1.1) from git: 'https://github.com/yagince/chef-redis.git' with branch: 'master' at ref: 'd7ef9d763ade63f6c62817156e1499fc0d083321' Using build-essential (1.4.0) Using yum (2.3.0) Using apt (2.0.0) Using runit (1.1.6) Using ohai (1.1.10) Using stunnel (2.0.4) Using discovery (0.2.0)
updateされたっぽいので、cookしてみます。
$ bundle exec knife solo cook chef-test (省略) * link[/sbin/redis-server] action create - unlink existing file at /sbin/redis-server - create symlink at /sbin/redis-server to /opt/redis/bin/redis-server * link[/sbin/redis-cli] action create - unlink existing file at /sbin/redis-cli - create symlink at /sbin/redis-cli to /opt/redis/bin/redis-cli (省略)
ちゃんとunlink
して、/opt/redis/bin
配下にsymlink貼ってるようです。
$ ssh chef-test $ redis-cli redis 127.0.0.1:6379>
ちゃんとアクセスできました。
まとめ
今日はgithubのcookbookを直接見る方法をメモりました。
branch: 'hoge'
でブランチも指定できるようです。Bundler風。
※tag
もある。
今回までに作った物は https://github.com/yagince/chef-sample こちらに置いてあります。