Vagrantとchef-soloでCentOS6.4にPHP5.4を入れる
調べても「どんぴしゃ!」な情報がなかったのでまとめておきます。
1.前提情報
- OS
- Vagrant
- Vagrant version 1.0.7
- 利用するbox
- CentOS 6.4 x86_64 Minimal (VirtualBox Guest Additions 4.2.8, Chef 11.4.0, Puppet 3.1.0)
2.下ごしらえ
boxをadd、initして、upしておきます。
事件が起きた際にロールバックできるよう、sandboxモードをonにしておくと良いでしょう。
【参考】
また、クックブックを格納するためのディレクトリ「cookbooks」を「Vagrantfile」のある階層に作成しておきます。
3.iusリポジトリを追加するためのレシピを追加
yumからPHP5.4系をインストールするためには、ius等の外部リポジトリをyumに登録する必要があります。
yumリポジトリに関するクックブック、opscode-cookbooks/yum · GitHub を利用させてもらいます。
クックブックをcloneする
> cd cookbooks > git clone https://github.com/opscode-cookbooks/yum
レシピをVagrantfileに追加
実際に利用するレシピは、「cookbooks/yum/recipes/ius.rb」 となります。
Vagrantfileの中ほどにある、chef-soloに関する記述部分を以下のように編集します。
# Enable provisioning with chef solo, specifying a cookbooks path, roles # path, and data_bags path (all relative to this Vagrantfile), and adding # some recipes and/or roles. # config.vm.provision :chef_solo do |chef| chef.cookbooks_path = "./cookbooks" chef.add_recipe "yum::ius" # You may also specify custom JSON attributes: chef.json = { 'yum' => { 'ius_release' => '1.0-11' } } end
chef.jsonに、iusのバージョン(1.0-11)を指定しています。
ただ、このバージョンは「cookbooks/yum/attributes/default.rb」内で
default['yum']['ius_release'] = '1.0-11'
というデフォルト指定がされていますので、省略しても大丈夫です。
なお、iusリポジトリを追加する場合、一緒にepelリポジトリも追加しなければなりませんが、
ius.rbの冒頭にある以下の記述によって自動的に行われます。
include_recipe "yum::epel" package "epel-release"
4.PHP5.4をインストールするためのレシピを追加
せっかくなので、クックブックを作ってやってみました。
クックブックの作成
Vagrantfileのある場所で、knifeを使います。
> knife cookbook create php54 -o cookbooks ** Creating cookbook php54 ** Creating README for cookbook: php54 ** Creating CHANGELOG for cookbook: php54 ** Creating metadata for cookbook: php54
レシピを記述
「cookbooks/php54/recipes/default.rb」を以下のように編集します。
%w(php54 php54-mbstring php54-pecl-xdebug).each do |package| yum_package package do action :install end end
レシピをVagrantfileに追加
yumの下に追加します。
# Enable provisioning with chef solo, specifying a cookbooks path, roles # path, and data_bags path (all relative to this Vagrantfile), and adding # some recipes and/or roles. # config.vm.provision :chef_solo do |chef| chef.cookbooks_path = "./cookbooks" chef.add_recipe "yum::ius" chef.add_recipe "php54" # You may also specify custom JSON attributes: chef.json = { 'yum' => { 'ius_release' => '1.0-11' } } end
5.レッツ、クック!
> vagrant provision
でお料理できます。
が、
[default] Running provisioner: Vagrant::Provisioners::ChefSolo... Shared folders that Chef requires are missing on the virtual machine. This is usually due to configuration changing after already booting the machine. The fix is to run a `vagrant reload` so that the proper shared folders will prepared and mounted on the VM.
と言われたので、素直に従い、vagrant reloadしました。
でろでろ、と結構な出力がありますが、抜粋すると、、、
epelリポジトリの追加
INFO: Processing yum_key[RPM-GPG-KEY-EPEL-6] action add (yum::epel line 22) INFO: Adding RPM-GPG-KEY-EPEL-6 GPG key to /etc/pki/rpm-gpg/
先にキーの追加をしていますね。
INFO: Processing package[epel-release] action install (yum::ius line 22) INFO: package[epel-release] installing epel-release-6-8 from epel repository
epel-release-6-8が入りました。
iusリポジトリの追加
INFO: Processing remote_file[/tmp/vagrant-chef-1/ius-release-1.0-11.ius.el6.noarch.rpm] action create (yum::ius line 27) INFO: remote_file[/tmp/vagrant-chef-1/ius-release-1.0-11.ius.el6.noarch.rpm] updated INFO: remote_file[/tmp/vagrant-chef-1/ius-release-1.0-11.ius.el6.noarch.rpm] sending install action to rpm_package[ius-release] (immediate) INFO: Processing rpm_package[ius-release] action install (yum::ius line 33)
rpmをローカルに落としてインストールしています。
phpのインストール
INFO: Processing yum_package[php54] action install (php54::default line 10) INFO: yum_package[php54] installing php54-5.4.14-1.ius.el6 from ius repository INFO: Processing yum_package[php54-mbstring] action install (php54::default line 10) INFO: yum_package[php54-mbstring] installing php54-mbstring-5.4.14-1.ius.el6 from ius repository INFO: Processing yum_package[php54-pecl-xdebug] action install (php54::default line 10) INFO: yum_package[php54-pecl-xdebug] installing php54-pecl-xdebug-2.2.2-1.ius.el6 from ius repository
レシピ通り、3つインストールしています。
6.いただきます!
vagrant sshして、確認します。
yumのリポジトリの追加
$ ls -l /etc/yum.repos.d/ total 44 -rw-r--r--. 1 root root 1926 Feb 25 08:57 CentOS-Base.repo -rw-r--r--. 1 root root 638 Feb 25 08:57 CentOS-Debuginfo.repo -rw-r--r--. 1 root root 630 Feb 25 08:57 CentOS-Media.repo -rw-r--r--. 1 root root 3664 Feb 25 08:57 CentOS-Vault.repo -rw-r--r-- 1 root root 278 May 13 08:04 epel.repo -rw-r--r-- 1 root root 957 Nov 5 2012 epel.repo.rpmnew -rw-r--r-- 1 root root 1056 Nov 5 2012 epel-testing.repo -rw-r--r-- 1 root root 1090 Mar 25 19:08 ius-archive.repo -rw-r--r-- 1 root root 1072 Mar 25 19:08 ius-dev.repo -rw-r--r-- 1 root root 1013 Mar 25 19:08 ius.repo -rw-r--r-- 1 root root 1090 Mar 25 19:08 ius-testing.repo
epel, iusの2つが追加されています。