ChefでMySQLをインストール

Standard

前回に引き続きChefでMySQLのインストールと設定をします。
 
前回と同様、OPSCODEからMySQLのCookbookを探してcloneしました。
https://github.com/bugcloud/mysql
 
今回はほとんどカスタムしていません。
templates/default/my.cnf.erbにデフォルトのcharacter-setを下記のように追加しました。

[client]
port            = < %= node['mysql']['port'] %>
socket          = < %= node['mysql']['socket'] %>

# set default-character-set
default-character-set = utf8


[mysqld]

# I need only utf8 databases.
character-set-server = utf8
skip-character-set-client-handshake

 
 
これをGitHubにpushしたら、前回作成した自分用のCookbooksにSubmoduleとして追加します。パスワードの自動生成に必要なOpenSSLモジュールも追加しておきます。

cd cookbooks
git submodule add git://github.com/opscode-cookbooks/openssl.git
git submodule add git://github.com/bugcloud/mysql.git

また、Chef-Solo用のjsonファイルも更新します。
cookbook/chef.json

{
  "mysql": {
    "server_root_password": "iloverandompassword",
    "server_repl_password": "iloverandompassword",
    "server_debian_password": "iloverandompassword"
  },
  "run_list": [
    "recipe[nginx]",
    "recipe[mysql::server]"
    ]
}

Chef-Soloを実行した時は、['mysql']['server_root_password']がrootユーザのパスワードとして設定されます。
 
これをcommit & pushしたら、Chef-Soloの実行は前回と同様です。

cd ~
git clone https://github.com/bugcloud/chef-cookbooks.git cookbooks
cd cookbooks
git submodule init
git submodule update
git submodule foreach 'git checkout master'
rvmsudo chef-solo -c solo.rb -j chef.json

VirtualBox上のUbuntu Serverをクリーンな時点のスナップショットに戻して実行したら、nginxとMySQLがインストール、設定されました。
 
 

Chefでnginxの設定を自動化してみた

Standard

chef-solo はじめてのLinux環境構築の自動化入門
を読んでChef(chef-solo)を使ってみました。nginxのインストールと設定まで。VirtualBox上にでUbuntu Server 12.04をインストールして、Open SSH Serverのインストールまで済んだところからスタート。
 
 

RubyのインストールとChefのインストール

curl https://raw.github.com/gist/3368108/6479ac671fe30489754b3a88b1271868d3b8af0a/setup-chef > install.sh
chmod +x install.sh
./install.sh

 
RVMを使って、Ruby 1.9.3とgemでChefをインストールします。
シェルの中で”rvm use xxx”を使う方法がわかりませんでした。。上をやったら

RVM is not a function, selecting rubies with ‘rvm use …’ will not work.
You need to change your terminal settings to allow shell login.
Please visit https://rvm.io/workflow/screen/ for example.

と出てしまうので、手動で

rvm use 1.9.3 --default
gem install chef --no-rdoc --no-ri

でChefをインストールします。
 
 

Cookbookの作成

とりあえず最初にココに行けば大量のCookbookが見つかります。
http://community.opscode.com/
今回はその中からnginxのCookbookをForkして、カスタムしました。
https://github.com/bugcloud/nginx
php-fpmも一緒にインストールして、*.phpはFastCGIで動かすようにしました。
recipes/xxx.rbに実行する命令、
attributes/xxx.rbに実行時に使う変数、
templates/xxx/yyy.erbに設定ファイル等のテンプレート
を配置するみたいです。ChefのWikiと、GitHubで”chef recipe”とかで検索して、人の書いたCookbookを読めばなんとなく書けました。
自分用のcookbooksリポジトリを作って、nginxのCookbookをSubmoduleとして追加しておきます。

mkdir cookbooks
cd cookbooks
git init
echo 'My chef cookbooks.' > README.md
touch chef.json
touch solo.rb
git submodule add https://github.com/bugcloud/nginx.git
git add .
git commit -m 'first commit.'

chef.json

{
  "run_list": [ "recipe[nginx]" ]
}

solo.rb

file_cache_path "/tmp/chef-solo"
cookbook_path   "/home/bugcloud/cookbooks" # full path only

https://github.com/bugcloud/chef-cookbooks
 
 

シェフに腕をふるってもらう

cd ~
git clone https://github.com/bugcloud/chef-cookbooks.git cookbooks
cd cookbooks
git submodule init
git submodule update
git submodule foreach 'git checkout master'
rvmsudo chef-solo -c solo.rb -j chef.json

/home/bugcloud/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require’: cannot load such file — openssl (LoadError)

みたいなエラーが出てしまった場合は、

rvm pkg install openssl
rvm reinstall 1.9.3 --with-openssl-dir=$rvm_path/usr

でrubyを再インストールします。

bugcloud@chef-demo:~/cookbooks$ rvmsudo chef-solo -c solo.rb -j chef.json
[2012-08-16T18:47:28+09:00] INFO: *** Chef 10.12.0 ***
[2012-08-16T18:47:28+09:00] INFO: Setting the run_list to ["recipe[nginx]"] from JSON
[2012-08-16T18:47:28+09:00] INFO: Run List is [recipe[nginx]]
[2012-08-16T18:47:28+09:00] INFO: Run List expands to [nginx]
[2012-08-16T18:47:28+09:00] INFO: Starting Chef Run for chef-demo
[2012-08-16T18:47:28+09:00] INFO: Running start handlers
[2012-08-16T18:47:28+09:00] INFO: Start handlers complete.
[2012-08-16T18:47:28+09:00] INFO: Processing package[nginx] action install (nginx::default line 21)
[2012-08-16T18:47:28+09:00] INFO: Processing package[php5-fpm] action install (nginx::default line 22)
[2012-08-16T18:47:28+09:00] INFO: Processing directory[/home/Sites/www] action create (nginx::default line 24)
[2012-08-16T18:47:28+09:00] INFO: directory[/home/Sites/www] created directory /home/Sites/www
[2012-08-16T18:47:28+09:00] INFO: directory[/home/Sites/www] owner changed to 33
[2012-08-16T18:47:28+09:00] INFO: Processing directory[/home/Sites/log] action create (nginx::default line 31)
[2012-08-16T18:47:28+09:00] INFO: directory[/home/Sites/log] created directory /home/Sites/log
[2012-08-16T18:47:28+09:00] INFO: directory[/home/Sites/log] owner changed to 33
[2012-08-16T18:47:28+09:00] INFO: Processing template[/usr/sbin/nxensite] action create (nginx::default line 38)
[2012-08-16T18:47:28+09:00] INFO: template[/usr/sbin/nxensite] mode changed to 755
[2012-08-16T18:47:28+09:00] INFO: template[/usr/sbin/nxensite] updated content
[2012-08-16T18:47:28+09:00] INFO: Processing template[/usr/sbin/nxdissite] action create (nginx::default line 38)
[2012-08-16T18:47:28+09:00] INFO: template[/usr/sbin/nxdissite] mode changed to 755
[2012-08-16T18:47:28+09:00] INFO: template[/usr/sbin/nxdissite] updated content
[2012-08-16T18:47:28+09:00] INFO: Processing template[nginx.conf] action create (nginx::default line 46)
[2012-08-16T18:47:28+09:00] INFO: template[nginx.conf] backed up to /var/chef/backup/etc/nginx/nginx.conf.chef-20120816184728
[2012-08-16T18:47:28+09:00] INFO: template[nginx.conf] mode changed to 644
[2012-08-16T18:47:28+09:00] INFO: template[nginx.conf] updated content
[2012-08-16T18:47:28+09:00] INFO: Processing template[/etc/nginx/sites-available/default] action create (nginx::default line 54)
[2012-08-16T18:47:28+09:00] INFO: template[/etc/nginx/sites-available/default] backed up to /var/chef/backup/etc/nginx/sites-available/default.chef-20120816184728
[2012-08-16T18:47:28+09:00] INFO: template[/etc/nginx/sites-available/default] mode changed to 644
[2012-08-16T18:47:28+09:00] INFO: template[/etc/nginx/sites-available/default] updated content
[2012-08-16T18:47:28+09:00] INFO: Processing service[nginx] action enable (nginx::default line 61)
[2012-08-16T18:47:28+09:00] INFO: Processing service[nginx] action start (nginx::default line 61)
[2012-08-16T18:47:29+09:00] INFO: service[nginx] started
[2012-08-16T18:47:29+09:00] INFO: Chef Run complete in 0.710541714 seconds
[2012-08-16T18:47:29+09:00] INFO: Running report handlers
[2012-08-16T18:47:29+09:00] INFO: Report handlers complete

 
こんな感じのログ出力がされて、nginxのインストール、設定、サービスの起動が完了します。
cookbooksを充実させれば便利どころじゃないですね。WordPressの設定ぐらいだったら簡単に自動化できそうなので、次はMySQLのCookbookを作ってみたいと思います。
 
 

Google Street Viewで道案内する

Standard

なんか去年ぐらいに駅から会社までのビデオ撮って道案内コンテンツを作るみたいなのを職場の人がやってて、会社案内とかのページに地図だけあるよりおもしろいけど、ビデオ撮るの大変だなっていうのを大好きなトイレでふと思ったのでストリートビューでやってみました。横浜駅から逗子海岸まで。
 
http://bugcloud.github.com/google-street-view-navi/
https://github.com/bugcloud/google-street-view-navi
 
車酔いした。