Help us understand the problem. What is going on with this article?

chef というか berkshelf での cookbook の利用が難しい

More than 5 years have passed since last update.

やりたいこと

recipe を書かなくても vagrant chef.run_list や chef.json のみで CentOS6.6 + PHP5.5 + MySQL5.6 + Apache2.2 環境を作りたい。

最初に考えていたイメージ

以下のような各ファイル内容をイメージしていたけど、、、
全然ダメでした。

Berksfile
source "https://supermarket.chef.io"

cookbook 'yum-epel'
cookbook 'yum-remi'
cookbook 'iptables'
cookbook 'apache2'
cookbook 'mysql'
cookbook "php"
Vagrantfile
  config.vm.provision :chef_solo do |chef|
    chef.log_level = "debug"
    chef.cookbooks_path = "./cookbooks"

    # 開発環境用に設定を上書きする。
    chef.json = {
      php: {
        version: "5.5"
      },
      mysql: {
        version: "5.6",
        server_root_password: ""
      }
    }

    chef.run_list = %w[
      recipe[yum-epel]
      recipe[yum-remi]
      recipe[iptables::disabled]
      recipe[apache]
      recipe[apache::mod_ssl]
      recipe[apache::mod_rewrite]
      recipe[mysql::client]
      recipe[mysql::server]
      recipe[php]
    ]
  end

イメージと異なった点

https://supermarket.chef.io/ ここにある cookbook が CentOS に向いてないとか、自分の理解が浅い、もしくは、勘違いが影響している。

確認した cookbook のバージョン

cookbook url version
https://supermarket.chef.io/cookbooks/php 1.5.0
https://supermarket.chef.io/cookbooks/mysql 6.0.13
https://supermarket.chef.io/cookbooks/apache2 3.0.1
https://supermarket.chef.io/cookbooks/httpd 0.2.6

cookbook 「php」

PHP 5.3 のみの提供みたい。
PHP 5.5 にする場合、自分で recipe を書いた方が良さそう。

http://wiki.centos.org/AdditionalResources/Repositories を見ると、remi より ius の方が良いみたい。外部リポジトリってググってパッとって感じでやってしまってるので、少し調べるクセをつけるようにしないとー。

recipes/default.rb
# php インストール
%w[php php-devel php-common php-cli php-pear php-pdo php-mysqlnd php-xml php-process php-mbstring php-mcrypt php-pecl-xdebug].each do |p|
  package p do
    action :install
    options "--enablerepo=remi --enablerepo=remi-php55"
  end
end

# php 設定
template "php.ini" do
  path "/etc/php.ini"
  source "php.ini.erb"
  mode 0644
end

cookbook 「mysql」

これ、version 6系から大きく内容が変わってる。
version 5系にすれば、chef.run_list で使えるんだけど、version 6系からは、LWRP(lightweight resource and provider) としての提供のみになったみたい。

なので、recipe を書く必要はありそう。

以下のような recipe を書くのは良いのだけど、
この default の部分が困る。

recipes/default.rb
mysql_service 'default' do
  version '5.6'
  initial_root_password 'password'
  action [:create, :start]
end

既存の /etc/mysql/my.cnf とかはそのままに新たに /etc/mysql-default/my.cnf を作っちゃう。

単純に

$ mysql -u root

としても繋がらなくて、

$ sudo mysql --defaults-file=/etc/mysql-default/my.cnf -u root

とする必要があった。あと mysql 各ディレクトリを見るときにちょっと困っちゃう。

何個もインスタンスをたちあげれるようにっということなんだろうけど、普通は1つのインスタンスがあれば、事足りることが多いんじゃないかなー。

cookbook 「apache2」

これは、CentOS の apache 2.2 を入れても apache 2.4 のディレクトリ構成になってる気する。
もっと良い cookbook がないかなっと探して、見つけたのが次の cookbook。

cookbook 「httpd」

これも mysql version 6系のように LWRP(lightweight resource and provider) のみの提供。

recipes/default.rb
httpd_service 'default' do
  mpm 'prefork'
  action [:create, :start]
end

のような感じで簡単に使えるんだけど、やっぱり何個もインスタンスをたちあげることを意識しているので、いろいろなファイルやディレクトリに -default がついてる。
例えば、apache を再起動したい場合は

$ sudo /etc/init.d/httpd-default restart

みたいな感じで。

これも、version 0.1.5 までは、既存の設定を上書きできるようにする方法があったけど version 0.2.0 からなくなったところをみると、あえてこようなインスタンスごとに設定するということにしてるんだと思う。

考え方なんだろうなー。

結論

chef / cookbook / berkshelf について、知識不足すぎ。
もっといろんなサイトを見て、ベストな方法を学ぶ必要がある。

まずは、cookbook は、yum-epel とか程度に限定して、各サーバーの設定とかは、自分で recipe を書いた方がはやそう。
知識を得たら、もっと cookbook を活用させていく!!

mysql / httpd の cookbook libraries をみるとクロスプラットフォーム対応の大変さがわかった。
バージョンやプラットフォームで、いろいろと分岐してる。
これ維持するのが大変そう。流行ってるうちは維持されるんだろうけど、いつまで維持されるんだろう。。。

LWRP を自力で作ってメンテするのは無理。
でも、この LWRP をきちんと利用できれば、自分でもクロスプラットフォームの recipe を書ける。

LWRP を作って維持してれてる人たちはエライ!!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away