hidemium's blog

日々学んだことをアウトプットする。

CentOS6にChef Soloをインストールする

Ruby on Railsなどの環境構築を自動化するために、Chef Soloをインストールしてみました。

Chefを動かすにはRubyのインストールが必要なので、まず先にやっておきます。

※なお、Chef 11.12系をインストールして「knife configure」を実行したところ、下記のエラーで失敗したため、Chefとknife-soloはバージョンを指定してインストールしました。

$ knife configure
ERROR: Ohai::Exceptions::DependencyNotFound: Can not find a plugin for dependency os

Chefとknife-soloをインストールします。

$ gem install chef -v 11.10 # Chefをインストール
$ knife configure # 初期設定
$ gem install knife-solo -v 0.4.1 # knife-soloをインストール

Chefのリポジトリを作成します。

$ knife solo init chef-repo

cookbookを作成します。

$ cd chef-repo/
$ knife cookbook create httpd -o site-cookbooks
$ vi site-cookbooks/httpd/recipes/default.rb
# Apacheをインストール
# sudo yum install -y httpd
package "httpd" do
    action :install
end

サーバにChefをインストールします。

$ knife solo prepare <ユーザ名>@<サーバのIPアドレス>

サーバのIPアドレス.jsonのファイルが作成されるため、実行したいcookbookを指定します。

$ vi nodes/<サーバのIPアドレス>.json
{
  "run_list":[
    "recipe[httpd]"
  ]
}


この状態でもchef-soloを実行できますが、サーバへのログイン時とサーバでのsudoの実行時に何度がパスワードが聞かれるため、パスワードなしで実行できるように設定を行います。

サーバにパスワードなしで接続できるように、公開鍵認証の設定を行います。
ssh-keygenコマンドで認証用の鍵を作成し、対象サーバへ転送します。

$ ssh-keygen
$ scp ~/.ssh/id_rsa.pub <ユーザ名>@<サーバのIPアドレス>:
$ ssh <ユーザ名>@<サーバのIPアドレス> # サーバへログイン
$ mkdir ~/.ssh
$ mv id_rsa.pub ~/.ssh/authorized_keys

パスワードなしでsudoを実行する設定を行います。

$ sudo visudo
<ユーザ名> ALL=(ALL) NOPASSWD: ALL # ←最終行に追加
$ exit

環境が整ったため、最後にchef-soloを実行します。

$ knife solo cook <ユーザ名>@<サーバのIPアドレス>

後は、設定ごとにcookbookを作成し、default.rbやnodoファイルを編集することで様々な環境構築を自動化できます。