Chef入門(No.02 : パッケージインストール)

Chefのレシピ編です。
Chefのインストールは[こちら](http://qiita.com/KisaragiZin/items/57c8532b862bf4b8a8d8)から。

今回はパッケージのインストールです。
サーバ構築での利用頻度は高いでしょう。
手始めにApache httpdをインストールしてみます。

最新のhttpdをインストールする為、以下の手順で実施します。

1. レポジトリ追加インストール
2. レポジトリURLの変更
3. httpdインストール


## cookbook作成

まずはcookbook作成です。

```bash:cookbook作成
$ cd chef-repo

# cookbook作成
$ knife cookbook create httpd -o site-cookbooks
```

## レポジトリ追加インストール
CentOSのデフォルトレポジトリの場合、Version 2.2.15までのインストールになる。
このため、最新のパッケージ(2.2.27)が配信されているレポジトリを別にインストールする。

```bash:site-cookbooks/httpd/recipes/default.rb
# レシピ編集
$ vi site-cookbooks/httpd/recipes/default.rb

# 以下を入力

# RPMファイル取得
remote_file "/tmp/centalt-release-6-1.noarch.rpm"do
    source "http://mirror.sysadminguide.net/centalt/repository/centos/6/x86_64/centalt-release-6-1.noarch.rpm"
    # インストールしてない場合、ファイルを取得する
    not_if "rpm -qa | grep -q '^centalt-release'"
    action :create
    # ファイル取得後に指定レシピを実施
    notifies :install, "rpm_package[centalt-release]", :immediately
end

# RPMパッケージインストール
rpm_package "centalt-release" do
    source "/tmp/centalt-release-6-1.noarch.rpm"
    action :install
end
```

レシピ適用ノード情報を編集する。

```bash:remote_ip.json
$ vi nodes/remote_ip.json
# run_listに以下を追加する
# 前項目への,(カンマ)の追加忘れに注意
"recipe[httpd]"
```

準備ができたので、Let's Cook!!

```bash:Let's_Cook!!
$ knife solo cook remote_ip -i ../id_rsa
```

## レポジトリURLの変更

インストールしたレポジトリのURLが現在利用不可の為、変更が必要です。

まずは以下のファイルを作成します。

```bash:site-cookbooks/httpd/files/default/centalt.repo
[CentALT]
name=CentALT Packages for Enterprise Linux 6 - $basearch
# baseurl=http://centos.alt.ru/repository/centos/6/$basearch/
baseurl=http://mirror.sysadminguide.net/centalt/repository/centos/6/$basearch/
enabled=1
gpgcheck=0
```

レシピに追記します。

```bash:site-cookbooks/httpd/recipes/default.rb
# レシピ編集
$ vi site-cookbooks/httpd/recipes/default.rb

# 以下を追記
# レポジトリ設定ファイルを配置する
cookbook_file "/etc/yum.repos.d/centalt.repo" do
    source "centalt.repo"
    mode '644'
    owner 'root'
    group 'root'
end
```

準備ができたので、Let's cook!!

```bash:Let's_Cook!!
$ knife solo cook remote_ip -i ../id_rsa
```

## httpdインストール

前準備ができたのでhttpdをインストールします。

レシピに追記します。

```bash:site-cookbooks/httpd/recipes/default.rb
# レシピ編集
$ vi site-cookbooks/httpd/recipes/default.rb

# 以下を追記
# httpdインストール
package "httpd" do
    action:install
    # CentALTレポジトリを利用する
    options "--enablerepo=CentALT"
end

# httpdの自動起動(enable)と起動(start)
service "httpd" do
    action [ :enable, :start ]
end

```

準備ができたので、Let's cook!!

```bash:レポジトリインストール
$ knife solo cook remote_ip -i ../id_rsa
```

構築対象サーバへブラウザでアクセスして動作確認をしてください。
httpdの初期画面が表示されれば正常に稼動しています。

今回は一般的なパッケージインストールについて学習しました。
一度レシピを作るだけで使い回しが出来るので積極的に使っていきましょう。

## おまけ

httpdの設定ファイルも同じように配布することができます。
まずは元の設定ファイルをコピーします。

```bash:httpd.confのコピーと編集
# デフォルト設定ファイルを以下のディレクトリにコピーしておく。
$ scp -i <ssh private key> <remote ip>:/etc/httpd/conf/httpd.conf site-cookbooks/httpd/templates/default/httpd.conf.erb

# site-cookbooks/httpd/templates/default/httpd.conf.erb を編集する
```

```bash:site-cookbooks/httpd/recipes/default.rb
# 設定ファイルを配置するレシピを追記する
service "httpd" do
    # 設定ファイル配置後に実施するreloadを許可する
    supports :status => true, :restart => true, :reload => true
    action [ :enable, :start ]
end

# 設定ファイル(httpd.conf)を配置
template "httpd.conf" do
    path "/etc/httpd/conf/httpd.conf"
    source "httpd.conf.erb"
    owner 'root'
    group 'root'
    mode '644'

    # 配置後httpdを即時reloadする
    notifies :reload, "service[httpd]", :immediately
end
```

後は同じようにCookして配布します。
これでWebサーバに配布する設定ファイルを一箇所で管理することができます。