LoginSignup
7
7

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-02-15

やりたいこと

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 を作って維持してれてる人たちはエライ!!

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7