kikumotoのメモ帳

インフラ・ミドル周りを中心に、興味をもったことを適当な感じで。twitter : @takakiku

さくらのVPSにchef-serverをインストール

久しぶりのブログ更新!!

サーバを増やすときに各種パケッケージのインストールだけでなく、必要な設定も含めて自動化していきたいと思い、最近はChefを勉強中。

chef-serverをさくらのVPSにインストールしたときの作業をメモしておく。さくらのVPSへのchef-serverインストールについては、id:masa_to さんが、さくらVPSにchef-serverをインストールする - happytanの足跡 で「Manual Chef Server Configuration」に従ってインストールしたものを記述されていますが、とりあえず試してみたい(よくわかってなくて、手を抜きたい)私は「Bootstrap Chef RubyGems Installation」に従ってインストールしてみた。

インストール先は、さくらのVPS 512 の CentOS 5.5 i386

Ubuntu の場合はドキュメントの通りだったけど、CentOS5.5 の場合は少しだけ違ったので、一応やったことをすべてメモしおく。

Ruby/RubyGemsのインストール

CentOSのデフォルトのrubyは若干古いので、他のYUMレポジトリからインストールする(それでもインストールされるのは 1.8.6*1 だけど、、、)。sudo 環境なんて整えてないから root で実行。

# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
# rpm -Uvh http://download.elff.bravenet.com/5/i386/elff-release-5-3.noarch.rpm
# yum install ruby ruby-shadow ruby-ri ruby-rdoc gcc gcc-c++ ruby-devel ruby-static

RubyGemsの方はソースからインストール。

# wget http://production.cf.rubygems.org/rubygems/rubygems-1.3.7.tgz
# tar  zxf rubygems-1.3.7.tgz
# cd rubygems-1.3.7
# ruby setup.rb --no-format-executable

Chef本体

Chef本体は、gem コマンド一発

# gem install chef

chef-soloの設定

chef-server自体は Chef 自身にインストールさせるため、chef-server を必要とせず単独で Chef の実行ができる chef-solo 使う。その chef-solo 向けの設定。

まず

# mkdir /etc/chdef

で、ディレクトリを作って、/etc/chef/solo.rb を以下のように記述。

file_cache_path "/tmp/chef-solo"
cookbook_path "/tmp/chef-solo/cookbooks"

で、chef-server と webui もインストールさせるために、インストールのための設定として ~/chef.json を以下のように記述した。

{
  "chef": {
    "server_url": "http://localhost:4000",
    "webui_enabled": true,
    "init_style": "init"
  },
  "run_list": [ "recipe[chef::bootstrap_server]" ]
}

CentOSなので、init_style を "init" にする必要があるので、これは忘れずに。

chef-serverインストール

インストールは chef-solo コマンドを実行する。

# chef-solo -c /etc/chef/solo.rb -j ~/chef.json -r http://s3.amazonaws.com/chef-solo/bootstrap-latest.tar.gz

実行に成功すれば、「Verify That All Components are Running」の通りにプロセスが動いていればいいのだけど、webui が起動していない。

rackのバージョンが新しすぎるようなので、以下のようにしてバージョンを下げた。

# gem uninstall rack
# gem install -v 1.1.0 rack

これで

# /etc/init.d/chef-server-webui restart

を実行して、無事に起動を確認。ブラウザからもアクセスできることを確認(http://[ホスト名]:4040/)。ちなみに、デフォルトのアカウント/パスワードは、admin/p@ssw0rd1。

しかし、CentOS環境では、chef-server, chef-server-webui とも chef ユーザで実行される。このためこのままでは、/etc/chef/valication.pem を読み込むことができず、このあとの Client 登録で失敗する。

Ubuntu 環境では root で実行されていたのでそれにならうことにした。そこで、/etc/sysconfig/chef-server, /etc/sysconfig/chef-server-webui ともに以下のように記述した。

SERVER_USER=root
SERVER_GROUP=root

これで、chef-server, chef-server-webui を再起動しておく。

Command Line Clientの登録

Chef では chef-server とやりとりするのに knife コマンドを多様する。これを chef-server に登録する。chef-server 上に適当にユーザを作って、登録した。

入力内容を含めて以下のような実行をした。

# useradd kikumoto
# mkdir ~kikumoto/.chef
# cp /etc/chef/validation.pem /etc/chef/webui.pem ~kikumoto/.chef
# chown -R kikumoto.kikumoto ~kikumoto/.chef
# su - kikumoto
$ knife configure -i
/usr/lib/ruby/gems/1.8/gems/rest-client-1.6.1/lib/restclient/abstract_response.rb:50: warning: parenthesize argument(s) for future version
Where should I put the config file? [~/.chef/knife.rb] 
Please enter the chef server URL: [http://localhost:4000] 
Please enter a clientname for the new client: [root] admin_kikumoto
Please enter the existing admin clientname: [chef-webui] 
Please enter the location of the existing admin client's private key: [/etc/chef/webui.pem] .chef/webui.pem
Please enter the validation clientname: [chef-validator] 
Please enter the location of the validation key: [/etc/chef/validation.pem] .chef/validation.pem
Please enter the path to a chef repository (or leave blank): 
WARN: Creating initial API user...
INFO: Created (or updated) client[admin_kikumoto]
WARN: Configuration file written to /home/kikumoto/.chef/knife.rb

登録に成功していれば knife client list を実行したときに、登録した clientname が表示される。

最後に

という感じで、とりあえず chef-server がインストールできて、cookbook にデータを登録する準備まではできた。

この後は、cookbook 作成/登録用のクライアントと、構築対象の Node を登録する。それはまた後日。

ちなみに、chef-cliet サービスが自動起動するようになっているので、このサーバを再起動すると chef-server にこのサーバが1つの Node として登録される。

*1:1.9.2での記事はこちら