Vagrant+Chef-Soloを使って、LAMPサーバを構築する

2013年12月18日 23時12分

201312182312VCHW00.png

はじめに

本ブログでは、これまで仮想化ソフトウエアについて多く取り上げて来ましたが、構築系の話は全くと言って良いほどありませんでした。そこで今回は、Chef-Soloを使ったLAMPサーバの構築方法を解説します。

Chefとは

Chefは、米国のChef Software Incが開発するサーバ構成管理ツールです。構成管理ツールと言うと難しく感じますが、ひと言で言うと、サーバ設定情報を一元管理するツールと言えます。

Chefでは、サーバの設定情報を管理するサーバ(Chefサーバ)と、Chefサーバによって管理されるサーバ(Chefクライアント)があり、Chefサーバのサーバの構成情報を元にChefクライアントのメンテナンスを行います。このようなクラサバ構成を取る事で、これまでサーバ毎に行って来たサーバ設定情報をChefサーバで一元管理し、サーバのインストールや変更を全てChefサーバから変更できるようになっています。

今回使用するChef-Soloは、Chefサーバとクライアントの機能を1つにしたツールですので、Chef-Solo単体でサーバの構成を管理できるようになっています。

前提条件

作業の前提条件は、下記のとおりです。

ソフトウエアバージョン
OSWindows 7 Ultimate 32bit
CygwinSetup Version 2.831
VirtualBox4.3.4 r91027
Vagrant1.3.5
rbenv2.1.0-preview1

Chef環境の構築

サーバ構成管理に必要なChef環境を構築します。

  1. vagrant-omunibusのインストール

    vagrant-omnibusプラグインをインストールします。
    vagrant-omnibusは、起動するBoxにChefがインストールされているか確認し、Chefがインストールされていない場合、Chefをインストールします。また、既にChefがインストールされている場合、Chefのバージョンアップを行います。

    $ vagrant plugin install vagrant-omnibus
    
    Installing the 'vagrant-omnibus' plugin. This can take a few minutes...
    Installed the plugin 'vagrant-omnibus (1.2.1)'!
    
    201312182312VCHW01.png
  2. Chefのインストール

    サーバ構成管理に必要なChefを、ホストOS側にインストールします。

    $ gem i chef --no-ri --no-rdoc
    
    DL is deprecated, please use Fiddle
    Fetching: mixlib-config-2.0.0.gem (100%)
    Successfully installed mixlib-config-2.0.0
    Fetching: mixlib-cli-1.3.0.gem (100%)
    Successfully installed mixlib-cli-1.3.0
    Fetching: mixlib-log-1.6.0.gem (100%)
    Successfully installed mixlib-log-1.6.0
    Fetching: mixlib-authentication-1.3.0.gem (100%)
    Successfully installed mixlib-authentication-1.3.0
    Fetching: mixlib-shellout-1.2.0.gem (100%)
    Successfully installed mixlib-shellout-1.2.0
    Fetching: systemu-2.5.2.gem (100%)
    Successfully installed systemu-2.5.2
    Fetching: yajl-ruby-1.1.0.gem (100%)
    Building native extensions.  This could take a while...
    Successfully installed yajl-ruby-1.1.0
    Fetching: ipaddress-0.8.0.gem (100%)
    Successfully installed ipaddress-0.8.0
    Fetching: ohai-6.20.0.gem (100%)
    Successfully installed ohai-6.20.0
    Fetching: rest-client-1.6.7.gem (100%)
    Successfully installed rest-client-1.6.7
    Fetching: net-ssh-gateway-1.2.0.gem (100%)
    Successfully installed net-ssh-gateway-1.2.0
    Fetching: net-ssh-multi-1.1.gem (100%)
    Successfully installed net-ssh-multi-1.1
    Fetching: erubis-2.7.0.gem (100%)
    Successfully installed erubis-2.7.0
    Fetching: hashie-2.0.5.gem (100%)
    Successfully installed hashie-2.0.5
    Fetching: moneta-0.6.0.gem (100%)
    Successfully installed moneta-0.6.0
    Fetching: rack-1.5.2.gem (100%)
    Successfully installed rack-1.5.2
    Fetching: chef-zero-1.7.1.gem (100%)
    Successfully installed chef-zero-1.7.1
    Fetching: puma-1.6.3.gem (100%)
    Building native extensions.  This could take a while...
    Successfully installed puma-1.6.3
    Fetching: coderay-1.1.0.gem (100%)
    Successfully installed coderay-1.1.0
    Fetching: slop-3.4.7.gem (100%)
    Successfully installed slop-3.4.7
    Fetching: method_source-0.8.2.gem (100%)
    Successfully installed method_source-0.8.2
    Fetching: pry-0.9.12.3.gem (100%)
    Successfully installed pry-0.9.12.3
    Fetching: chef-11.8.0.gem (100%)
    Successfully installed chef-11.8.0
    23 gems installed
    
    201312182312VCHW02.png
    201312182312VCHW03.png
  3. バージョン確認

    インストールしたchef-soloおよび、knifeコマンドのバージョンを確認します。

    $ chef-solo -v && knife -v
    
    DL is deprecated, please use Fiddle
    Chef: 11.8.0
    Chef: 11.8.0
    
    201312182312VCHW04.png

基本設定レシピ作成

サーバのホスト名、ファイアウォール無効化などの基本設定を行う、レシピを作成します。

  1. Cookbook作成

    $ knife cookbook create base -o site-cookbooks
    
    ** Creating cookbook base
    ** Creating README for cookbook: base
    ** Creating CHANGELOG for cookbook: base
    ** Creating metadata for cookbook: base
    
    201312182312VCHW05.png
  2. レシピ作成

    $ vi site-cookbooks/base/recipes/default.rb
    
    #
    # Cookbook Name:: base
    # Recipe:: default
    #
    # サーバ基本設定レシピ
    #
    # IPアドレスとホスト名を/etc/hostsに追加する
    #
    bash "update hosts" do
      user "root"
      code <<-EOC
      addr=`ifconfig eth1 | grep 'inet addr' | awk '{print $2}' | sed 's/addr://'`
      if [ `grep -c $addr /etc/hosts` -eq 0 ]; then
        echo "$addr `hostname` `hostname -s`"  | tee -a /etc/hosts
      fi
      EOC
      only_if "ifconfig eth1"
    end
    
    # Firewall無効化
    %w{iptables ip6tables}.each do |s|
      service s do
        action [:stop, :disable]
      end
    end
    
    # SELinux無効化
    bash "ignore SELinux" do
      user "root"
      code <<-EOC
      sed -i -e 's/^SELINUX=.*$/SELINUX=disabled/' /etc/sysconfig/selinux
      EOC
      not_if "grep -q 'SELINUX=disabled' /etc/sysconfig/selinux"
    end
    
    # 起動オプション設定
    bash "set grub.conf" do
      user "root"
      code <<-EOC
      sed -i -e 's/quiet.*$/quiet enforcing=0/' /etc/grub.conf
      EOC
      not_if "grep -q enforcing /etc/grub.conf"
    end
    
    # MACアドレスの自動保存無効化
    bash "ignore MAC" do
      user "root"
      code <<-EOC
      sed -i -e 's|/etc/udev/rules.d/70-persistent-net.rules|/dev/null|g' /lib/udev/write_net_rules
      EOC
      only_if "grep -q '70-persistent-net' /lib/udev/write_net_rules"
    end
    
    # fastestmirror.conf設定
    bash "set fastestmirror" do
      user "root"
      code <<-EOC
      echo "include_only=.jp" | tee -a /etc/yum/pluginconf.d/fastestmirror.conf
      EOC
      not_if "grep -q ^'include_only=.jp' /etc/yum/pluginconf.d/fastestmirror.conf"
    end
    
    # TimeZone設定
    bash "set timezone" do
      user "root"
      code <<-EOC
      cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
      EOC
      not_if "strings /etc/localtime | grep -q 'JST'"
    end
    
    # Locale設定
    bash "set locale" do
      user "root"
      code <<-EOC
      sed -i -e 's/LANG.*$/LANG="ja_JP.utf8"/' /etc/sysconfig/i18n
      EOC
      not_if "grep -q ja_JP /etc/sysconfig/i18n"
    end
    
    # .bashrc設定
    template "bashrc" do
      path "/home/vagrant/.bashrc"
      source "bashrc.erb"
      mode 0644
    end
    
    # VIM設定
    %w{git vim-enhanced}.each do |p|
      package p do
        action :install
      end
    end
    
    git "/home/vagrant/dotfiles" do
      repository "git://github.com/yuroyoro/dotfiles.git"
      reference "master"
      user "vagrant"
      group "vagrant"
      action :sync
    end
    
    bash "dotfiles" do
      user "root"
      code <<-EOC
      grep -v yuroyoro256 /home/vagrant/dotfiles/.vimrc.colors > /tmp/$$
      cp -p /tmp/$$ /home/vagrant/dotfiles/.vimrc.colors
      rm -f /tmp/$$
      chown -R vagrant:vagrant /home/vagrant/dotfiles
      EOC
      only_if "test -d /home/vagrant/dotfiles"
    end
    
    template "vimrc" do
      path "/home/vagrant/.vimrc"
      source "vimrc.erb"
      owner "vagrant"
      group "vagrant"
      mode 0644
      action :create_if_missing
    end
    
    # システム更新
    bash "update system" do
      user "root"
      code <<-EOC
      yum -y update
      EOC
    end
    
  3. テンプレート作成

    レシピ内で使用するbashrcのテンプレートを作成します。

    $ vi site-cookbooks/base/recipes/default.rb
    
    if [ -f /etc/bashrc ]; then
      . /etc/bashrc
    fi
    
    alias cls=clear
    alias h='history 50'
    alias off='sudo shutdown -h now'
    

リポジトリレシピ作成

EPELremirpmforgeリポジトリをインストールする、リポジトリ設定レシピを作成します。

  1. Cookbook作成

    $ knife cookbook create repo -o site-cookbooks
    
    ** Creating cookbook repo
    ** Creating README for cookbook: repo
    ** Creating CHANGELOG for cookbook: repo
    ** Creating metadata for cookbook: repo
    
    201312182312VCHW06.png
  2. レシピ作成

    $ vi site-cookbooks/repo/recipes/default.rb
    
    #
    # Cookbook Name:: repo
    # Recipe:: default
    #
    # サードパーティリポジトリ設定レシピ
    #
    # GPG署名のインストール
    remote_file "/tmp/#{node['epel']['gpg_name']}" do
      source "#{node['epel']['remote_gpg']}"
      not_if { ::File.exists?("/tmp/#{node['epel']['gpg_name']}") }
    end
    
    remote_file "/tmp/#{node['remi']['gpg_name']}" do
      source "#{node['remi']['remote_gpg']}"
      not_if { ::File.exists?("/tmp/#{node['remi']['gpg_name']}") }
    end
    
    remote_file "/tmp/#{node['rpmforge']['gpg_name']}" do
      source "#{node['rpmforge']['remote_gpg']}"
      not_if { ::File.exists?("/tmp/#{node['rpmforge']['gpg_name']}") }
    end
    
    bash "import GPG Signature" do
      user "root"
      code <<-EOC
      for gpg in "/tmp/#{node['epel']['gpg_name']}" "/tmp/#{node['remi']['gpg_name']}" "/tmp/#{node['rpmforge']['gpg_name']}"
      do
        rpm --import $gpg
      done
      EOC
    end
    
    # EPELリポジトリのインストール
    remote_file "/tmp/#{node['epel']['file_name']}" do
      source "#{node['epel']['remote_uri']}"
      not_if { ::File.exists?("/tmp/#{node['epel']['file_name']}") }
    end
    
    package node['epel']['file_name'] do
      action :install
      provider Chef::Provider::Package::Rpm
      source "/tmp/#{node['epel']['file_name']}"
      not_if "yum list installed | grep installed | grep -q epel"
    end
    
    # remiリポジトリのインストール
    remote_file "/tmp/#{node['remi']['file_name']}" do
      source "#{node['remi']['remote_uri']}"
      not_if { ::File.exists?("/tmp/#{node['remi']['file_name']}") }
    end
    
    package node['remi']['file_name'] do
      action :install
      provider Chef::Provider::Package::Rpm
      source "/tmp/#{node['remi']['file_name']}"
      not_if "yum list installed | grep installed | grep -q remi"
    end
    
    # RPMForgeリポジトリのインストール
    remote_file "/tmp/#{node['rpmforge']['file_name']}" do
      source "#{node['rpmforge']['remote_uri']}"
      not_if { ::File.exists?("/tmp/#{node['rpmforge']['file_name']}") }
    end
    
    package node['rpmforge']['file_name'] do
      action :install
      provider Chef::Provider::Package::Rpm
      source "/tmp/#{node['rpmforge']['file_name']}"
      not_if "yum list installed | grep installed | grep -q rpmforge"
    end
    
    # リポジトリの設定変更
    bash 'repo' do
      user 'root'
      code <<-EOC
    cd /etc/yum.repos.d
    for r in epel.repo remi.repo rpmforge.repo; do cp -p $r $r.old; cat $r.old | sed 's/^enabled.*$/enabled = 0/' > $r; done
      EOC
      not_if "grep -q 'enabled = 0' /etc/yum.repos.d/epel.repo"
    end
    
  3. Cookbookパラメタ設定

    レシピ内で使用するパラメタを設定します。

    $ vi site-cookbooks/repo/attributes/default.rb
    
    # EPEL
    default['epel']['gpg_name']   = "RPM-GPG-KEY-EPEL-6"
    default['epel']['remote_gpg'] = "http://ftp.riken.jp/Linux/fedora/epel/RPM-GPG-KEY-EPEL-6"
    default['epel']['file_name']  = "epel-release-6-8.noarch.rpm"
    default['epel']['remote_uri'] = "http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm"
    
    # remi
    default['remi']['gpg_name']   = "RPM-GPG-KEY-remi"
    default['remi']['remote_gpg'] = "http://rpms.famillecollet.com/RPM-GPG-KEY-remi"
    default['remi']['file_name']  = "remi-release-6.rpm"
    default['remi']['remote_uri'] = "http://rpms.famillecollet.com/enterprise/remi-release-6.rpm"
    
    # RPMForge
    default['rpmforge']['gpg_name']   = "RPM-GPG-KEY.dag.txt"
    default['rpmforge']['remote_gpg'] = "http://apt.sw.be/RPM-GPG-KEY.dag.txt"
    default['rpmforge']['file_name']  = "rpmforge-release-0.5.3-1.el6.rf.i686.rpm"
    default['rpmforge']['remote_uri'] = "http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.i686.rpm"
    

HTTPサーバレシピ作成

  1. Cookbook作成

    $ knife cookbook create httpd -o site-cookbooks
    
    ** Creating cookbook httpd
    ** Creating README for cookbook: httpd
    ** Creating CHANGELOG for cookbook: httpd
    ** Creating metadata for cookbook: httpd
    
    201312182312VCHW07.png
  2. レシピ作成

    $ vi site-cookbooks/httpd/recipes/default.rb
    
    #
    # Cookbook Name:: httpd
    # Recipe:: default
    #
    # HTTPサーバ設定
    #
    # httpd.conf設定
    template "httpd.conf" do
      path "/etc/httpd/conf/httpd.conf"
      source "httpd.conf.erb"
      mode 0644
      action :nothing
    end
    
    # パッケージインストール
    package "httpd" do
      action :install
      notifies :create, resources( :template => "httpd.conf" )
      not_if "yum list installed | grep -q 'httpd\.'"
    end
    
    # サービス起動と自動起動設定
    service "httpd" do
      action [:start, :enable]
    end
    
  3. httpd.confテンプレート作成

    インストールするhttpd.confのテンプレートを作成します。

    $ vi site-cookbooks/httpd/templates/default/httpd.conf.erb
    
    #
    # This is the main Apache server configuration file.  It contains the
    # configuration directives that give the server its instructions.
    # See <URL:http://httpd.apache.org/docs/2.2/> for detailed information.
    # In particular, see
    # <URL:http://httpd.apache.org/docs/2.2/mod/directives.html>
    # for a discussion of each configuration directive.
    #
    #
    # Do NOT simply read the instructions in here without understanding
    # what they do.  They're here only as hints or reminders.  If you are unsure
    # consult the online docs. You have been warned.  
    #
    # The configuration directives are grouped into three basic sections:
    #  1. Directives that control the operation of the Apache server process as a
    #     whole (the 'global environment').
    #  2. Directives that define the parameters of the 'main' or 'default' server,
    #     which responds to requests that aren't handled by a virtual host.
    #     These directives also provide default values for the settings
    #     of all virtual hosts.
    #  3. Settings for virtual hosts, which allow Web requests to be sent to
    #     different IP addresses or hostnames and have them handled by the
    #     same Apache server process.
    #
    # Configuration and logfile names: If the filenames you specify for many
    # of the server's control files begin with "/" (or "drive:/" for Win32), the
    # server will use that explicit path.  If the filenames do *not* begin
    # with "/", the value of ServerRoot is prepended -- so "logs/foo.log"
    # with ServerRoot set to "/etc/httpd" will be interpreted by the
    # server as "/etc/httpd/logs/foo.log".
    #
    
    ### Section 1: Global Environment
    #
    # The directives in this section affect the overall operation of Apache,
    # such as the number of concurrent requests it can handle or where it
    # can find its configuration files.
    #
    
    #
    # Don't give away too much information about all the subcomponents
    # we are running.  Comment out this line if you don't mind remote sites
    # finding out what major optional modules you are running
    ServerTokens OS
    
    #
    # ServerRoot: The top of the directory tree under which the server's
    # configuration, error, and log files are kept.
    #
    # NOTE!  If you intend to place this on an NFS (or otherwise network)
    # mounted filesystem then please read the LockFile documentation
    # (available at <URL:http://httpd.apache.org/docs/2.2/mod/mpm_common.html#lockfile>);
    # you will save yourself a lot of trouble.
    #
    # Do NOT add a slash at the end of the directory path.
    #
    ServerRoot "/etc/httpd"
    
    #
    # PidFile: The file in which the server should record its process
    # identification number when it starts.  Note the PIDFILE variable in
    # /etc/sysconfig/httpd must be set appropriately if this location is
    # changed.
    #
    PidFile run/httpd.pid
    
    #
    # Timeout: The number of seconds before receives and sends time out.
    #
    Timeout 60
    
    #
    # KeepAlive: Whether or not to allow persistent connections (more than
    # one request per connection). Set to "Off" to deactivate.
    #
    KeepAlive Off
    
    #
    # MaxKeepAliveRequests: The maximum number of requests to allow
    # during a persistent connection. Set to 0 to allow an unlimited amount.
    # We recommend you leave this number high, for maximum performance.
    #
    MaxKeepAliveRequests 100
    
    #
    # KeepAliveTimeout: Number of seconds to wait for the next request from the
    # same client on the same connection.
    #
    KeepAliveTimeout 15
    
    ##
    ## Server-Pool Size Regulation (MPM specific)
    ## 
    
    # prefork MPM
    # StartServers: number of server processes to start
    # MinSpareServers: minimum number of server processes which are kept spare
    # MaxSpareServers: maximum number of server processes which are kept spare
    # ServerLimit: maximum value for MaxClients for the lifetime of the server
    # MaxClients: maximum number of server processes allowed to start
    # MaxRequestsPerChild: maximum number of requests a server process serves
    <IfModule prefork.c>
    StartServers       8
    MinSpareServers    5
    MaxSpareServers   20
    ServerLimit      256
    MaxClients       256
    MaxRequestsPerChild  4000
    </IfModule>
    
    # worker MPM
    # StartServers: initial number of server processes to start
    # MaxClients: maximum number of simultaneous client connections
    # MinSpareThreads: minimum number of worker threads which are kept spare
    # MaxSpareThreads: maximum number of worker threads which are kept spare
    # ThreadsPerChild: constant number of worker threads in each server process
    # MaxRequestsPerChild: maximum number of requests a server process serves
    <IfModule worker.c>
    StartServers         4
    MaxClients         300
    MinSpareThreads     25
    MaxSpareThreads     75 
    ThreadsPerChild     25
    MaxRequestsPerChild  0
    </IfModule>
    
    #
    # Listen: Allows you to bind Apache to specific IP addresses and/or
    # ports, in addition to the default. See also the <VirtualHost>
    # directive.
    #
    # Change this to Listen on specific IP addresses as shown below to 
    # prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
    #
    #Listen 12.34.56.78:80
    Listen 80
    
    #
    # Dynamic Shared Object (DSO) Support
    #
    # To be able to use the functionality of a module which was built as a DSO you
    # have to place corresponding `LoadModule' lines at this location so the
    # directives contained in it are actually available _before_ they are used.
    # Statically compiled modules (those listed by `httpd -l') do not need
    # to be loaded here.
    #
    # Example:
    # LoadModule foo_module modules/mod_foo.so
    #
    LoadModule auth_basic_module modules/mod_auth_basic.so
    LoadModule auth_digest_module modules/mod_auth_digest.so
    LoadModule authn_file_module modules/mod_authn_file.so
    LoadModule authn_alias_module modules/mod_authn_alias.so
    LoadModule authn_anon_module modules/mod_authn_anon.so
    LoadModule authn_dbm_module modules/mod_authn_dbm.so
    LoadModule authn_default_module modules/mod_authn_default.so
    LoadModule authz_host_module modules/mod_authz_host.so
    LoadModule authz_user_module modules/mod_authz_user.so
    LoadModule authz_owner_module modules/mod_authz_owner.so
    LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
    LoadModule authz_dbm_module modules/mod_authz_dbm.so
    LoadModule authz_default_module modules/mod_authz_default.so
    LoadModule ldap_module modules/mod_ldap.so
    LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
    LoadModule include_module modules/mod_include.so
    LoadModule log_config_module modules/mod_log_config.so
    LoadModule logio_module modules/mod_logio.so
    LoadModule env_module modules/mod_env.so
    LoadModule ext_filter_module modules/mod_ext_filter.so
    LoadModule mime_magic_module modules/mod_mime_magic.so
    LoadModule expires_module modules/mod_expires.so
    LoadModule deflate_module modules/mod_deflate.so
    LoadModule headers_module modules/mod_headers.so
    LoadModule usertrack_module modules/mod_usertrack.so
    LoadModule setenvif_module modules/mod_setenvif.so
    LoadModule mime_module modules/mod_mime.so
    LoadModule dav_module modules/mod_dav.so
    LoadModule status_module modules/mod_status.so
    LoadModule autoindex_module modules/mod_autoindex.so
    LoadModule info_module modules/mod_info.so
    LoadModule dav_fs_module modules/mod_dav_fs.so
    LoadModule vhost_alias_module modules/mod_vhost_alias.so
    LoadModule negotiation_module modules/mod_negotiation.so
    LoadModule dir_module modules/mod_dir.so
    LoadModule actions_module modules/mod_actions.so
    LoadModule speling_module modules/mod_speling.so
    LoadModule userdir_module modules/mod_userdir.so
    LoadModule alias_module modules/mod_alias.so
    LoadModule substitute_module modules/mod_substitute.so
    LoadModule rewrite_module modules/mod_rewrite.so
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
    LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
    LoadModule proxy_http_module modules/mod_proxy_http.so
    LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
    LoadModule proxy_connect_module modules/mod_proxy_connect.so
    LoadModule cache_module modules/mod_cache.so
    LoadModule suexec_module modules/mod_suexec.so
    LoadModule disk_cache_module modules/mod_disk_cache.so
    LoadModule cgi_module modules/mod_cgi.so
    LoadModule version_module modules/mod_version.so
    
    #
    # The following modules are not loaded by default:
    #
    #LoadModule asis_module modules/mod_asis.so
    #LoadModule authn_dbd_module modules/mod_authn_dbd.so
    #LoadModule cern_meta_module modules/mod_cern_meta.so
    #LoadModule cgid_module modules/mod_cgid.so
    #LoadModule dbd_module modules/mod_dbd.so
    #LoadModule dumpio_module modules/mod_dumpio.so
    #LoadModule filter_module modules/mod_filter.so
    #LoadModule ident_module modules/mod_ident.so
    #LoadModule log_forensic_module modules/mod_log_forensic.so
    #LoadModule unique_id_module modules/mod_unique_id.so
    #
    
    #
    # Load config files from the config directory "/etc/httpd/conf.d".
    #
    Include conf.d/*.conf
    
    #
    # ExtendedStatus controls whether Apache will generate "full" status
    # information (ExtendedStatus On) or just basic information (ExtendedStatus
    # Off) when the "server-status" handler is called. The default is Off.
    #
    #ExtendedStatus On
    
    #
    # If you wish httpd to run as a different user or group, you must run
    # httpd as root initially and it will switch.  
    #
    # User/Group: The name (or #number) of the user/group to run httpd as.
    #  . On SCO (ODT 3) use "User nouser" and "Group nogroup".
    #  . On HPUX you may not be able to use shared memory as nobody, and the
    #    suggested workaround is to create a user www and use that user.
    #  NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET)
    #  when the value of (unsigned)Group is above 60000; 
    #  don't use Group #-1 on these systems!
    #
    User apache
    Group apache
    
    ### Section 2: 'Main' server configuration
    #
    # The directives in this section set up the values used by the 'main'
    # server, which responds to any requests that aren't handled by a
    # <VirtualHost> definition.  These values also provide defaults for
    # any <VirtualHost> containers you may define later in the file.
    #
    # All of these directives may appear inside <VirtualHost> containers,
    # in which case these default settings will be overridden for the
    # virtual host being defined.
    #
    
    #
    # ServerAdmin: Your address, where problems with the server should be
    # e-mailed.  This address appears on some server-generated pages, such
    # as error documents.  e.g. admin@your-domain.com
    #
    ServerAdmin <%= node[:httpd][:admin] %>
    ServerName <%= node[:httpd][:fqdn] %>:<%= node[:httpd][:port] %>
    
    #
    # UseCanonicalName: Determines how Apache constructs self-referencing 
    # URLs and the SERVER_NAME and SERVER_PORT variables.
    # When set "Off", Apache will use the Hostname and Port supplied
    # by the client.  When set "On", Apache will use the value of the
    # ServerName directive.
    #
    UseCanonicalName Off
    
    #
    # DocumentRoot: The directory out of which you will serve your
    # documents. By default, all requests are taken from this directory, but
    # symbolic links and aliases may be used to point to other locations.
    #
    DocumentRoot "/var/www/html"
    
    #
    # Each directory to which Apache has access can be configured with respect
    # to which services and features are allowed and/or disabled in that
    # directory (and its subdirectories). 
    #
    # First, we configure the "default" to be a very restrictive set of 
    # features.  
    #
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    
    #
    # Note that from this point forward you must specifically allow
    # particular features to be enabled - so if something's not working as
    # you might expect, make sure that you have specifically enabled it
    # below.
    #
    
    #
    # This should be changed to whatever you set DocumentRoot to.
    #
    <Directory "/var/www/html">
    
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.2/mod/core.html#options
    # for more information.
    #
        Options Indexes FollowSymLinks
    
    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
        AllowOverride None
    
    #
    # Controls who can get stuff from this server.
    #
        Order allow,deny
        Allow from all
    
    </Directory>
    
    #
    # UserDir: The name of the directory that is appended onto a user's home
    # directory if a ~user request is received.
    #
    # The path to the end user account 'public_html' directory must be
    # accessible to the webserver userid.  This usually means that ~userid
    # must have permissions of 711, ~userid/public_html must have permissions
    # of 755, and documents contained therein must be world-readable.
    # Otherwise, the client will only receive a "403 Forbidden" message.
    #
    # See also: http://httpd.apache.org/docs/misc/FAQ.html#forbidden
    #
    <IfModule mod_userdir.c>
        #
        # UserDir is disabled by default since it can confirm the presence
        # of a username on the system (depending on home directory
        # permissions).
        #
        UserDir disabled
    
        #
        # To enable requests to /~user/ to serve the user's public_html
        # directory, remove the "UserDir disabled" line above, and uncomment
        # the following line instead:
        # 
        #UserDir public_html
    
    </IfModule>
    
    #
    # Control access to UserDir directories.  The following is an example
    # for a site where these directories are restricted to read-only.
    #
    #<Directory /home/*/public_html>
    #    AllowOverride FileInfo AuthConfig Limit
    #    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    #    <Limit GET POST OPTIONS>
    #        Order allow,deny
    #        Allow from all
    #    </Limit>
    #    <LimitExcept GET POST OPTIONS>
    #        Order deny,allow
    #        Deny from all
    #    </LimitExcept>
    #</Directory>
    
    #
    # DirectoryIndex: sets the file that Apache will serve if a directory
    # is requested.
    #
    # The index.html.var file (a type-map) is used to deliver content-
    # negotiated documents.  The MultiViews Option can be used for the 
    # same purpose, but it is much slower.
    #
    DirectoryIndex index.html index.html.var
    
    #
    # AccessFileName: The name of the file to look for in each directory
    # for additional configuration directives.  See also the AllowOverride
    # directive.
    #
    AccessFileName .htaccess
    
    #
    # The following lines prevent .htaccess and .htpasswd files from being 
    # viewed by Web clients. 
    #
    <Files ~ "^\.ht">
        Order allow,deny
        Deny from all
        Satisfy All
    </Files>
    
    #
    # TypesConfig describes where the mime.types file (or equivalent) is
    # to be found.
    #
    TypesConfig /etc/mime.types
    
    #
    # DefaultType is the default MIME type the server will use for a document
    # if it cannot otherwise determine one, such as from filename extensions.
    # If your server contains mostly text or HTML documents, "text/plain" is
    # a good value.  If most of your content is binary, such as applications
    # or images, you may want to use "application/octet-stream" instead to
    # keep browsers from trying to display binary files as though they are
    # text.
    #
    DefaultType text/plain
    
    #
    # The mod_mime_magic module allows the server to use various hints from the
    # contents of the file itself to determine its type.  The MIMEMagicFile
    # directive tells the module where the hint definitions are located.
    #
    <IfModule mod_mime_magic.c>
    #   MIMEMagicFile /usr/share/magic.mime
        MIMEMagicFile conf/magic
    </IfModule>
    
    #
    # HostnameLookups: Log the names of clients or just their IP addresses
    # e.g., www.apache.org (on) or 204.62.129.132 (off).
    # The default is off because it'd be overall better for the net if people
    # had to knowingly turn this feature on, since enabling it means that
    # each client request will result in AT LEAST one lookup request to the
    # nameserver.
    #
    HostnameLookups Off
    
    #
    # EnableMMAP: Control whether memory-mapping is used to deliver
    # files (assuming that the underlying OS supports it).
    # The default is on; turn this off if you serve from NFS-mounted 
    # filesystems.  On some systems, turning it off (regardless of
    # filesystem) can improve performance; for details, please see
    # http://httpd.apache.org/docs/2.2/mod/core.html#enablemmap
    #
    #EnableMMAP off
    
    #
    # EnableSendfile: Control whether the sendfile kernel support is 
    # used to deliver files (assuming that the OS supports it). 
    # The default is on; turn this off if you serve from NFS-mounted 
    # filesystems.  Please see
    # http://httpd.apache.org/docs/2.2/mod/core.html#enablesendfile
    #
    #EnableSendfile off
    
    #
    # ErrorLog: The location of the error log file.
    # If you do not specify an ErrorLog directive within a <VirtualHost>
    # container, error messages relating to that virtual host will be
    # logged here.  If you *do* define an error logfile for a <VirtualHost>
    # container, that host's errors will be logged there and not here.
    #
    ErrorLog logs/error_log
    
    #
    # LogLevel: Control the number of messages logged to the error_log.
    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    #
    LogLevel warn
    
    #
    # The following directives define some format nicknames for use with
    # a CustomLog directive (see below).
    #
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    LogFormat "%{Referer}i -> %U" referer
    LogFormat "%{User-agent}i" agent
    
    # "combinedio" includes actual counts of actual bytes received (%I) and sent (%O); this
    # requires the mod_logio module to be loaded.
    #LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    
    #
    # The location and format of the access logfile (Common Logfile Format).
    # If you do not define any access logfiles within a <VirtualHost>
    # container, they will be logged here.  Contrariwise, if you *do*
    # define per-<VirtualHost> access logfiles, transactions will be
    # logged therein and *not* in this file.
    #
    #CustomLog logs/access_log common
    
    #
    # If you would like to have separate agent and referer logfiles, uncomment
    # the following directives.
    #
    #CustomLog logs/referer_log referer
    #CustomLog logs/agent_log agent
    
    #
    # For a single logfile with access, agent, and referer information
    # (Combined Logfile Format), use the following directive:
    #
    CustomLog logs/access_log combined
    
    #
    # Optionally add a line containing the server version and virtual host
    # name to server-generated pages (internal error documents, FTP directory
    # listings, mod_status and mod_info output etc., but not CGI generated
    # documents or custom error documents).
    # Set to "EMail" to also include a mailto: link to the ServerAdmin.
    # Set to one of:  On | Off | EMail
    #
    ServerSignature On
    
    #
    # Aliases: Add here as many aliases as you need (with no limit). The format is 
    # Alias fakename realname
    #
    # Note that if you include a trailing / on fakename then the server will
    # require it to be present in the URL.  So "/icons" isn't aliased in this
    # example, only "/icons/".  If the fakename is slash-terminated, then the 
    # realname must also be slash terminated, and if the fakename omits the 
    # trailing slash, the realname must also omit it.
    #
    # We include the /icons/ alias for FancyIndexed directory listings.  If you
    # do not use FancyIndexing, you may comment this out.
    #
    Alias /icons/ "/var/www/icons/"
    
    <Directory "/var/www/icons">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
    
    #
    # WebDAV module configuration section.
    # 
    <IfModule mod_dav_fs.c>
        # Location of the WebDAV lock database.
        DAVLockDB /var/lib/dav/lockdb
    </IfModule>
    
    #
    # ScriptAlias: This controls which directories contain server scripts.
    # ScriptAliases are essentially the same as Aliases, except that
    # documents in the realname directory are treated as applications and
    # run by the server when requested rather than as documents sent to the client.
    # The same rules about trailing "/" apply to ScriptAlias directives as to
    # Alias.
    #
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
    
    #
    # "/var/www/cgi-bin" should be changed to whatever your ScriptAliased
    # CGI directory exists, if you have that configured.
    #
    <Directory "/var/www/cgi-bin">
        AllowOverride None
        Options None
        Order allow,deny
        Allow from all
    </Directory>
    
    #
    # Redirect allows you to tell clients about documents which used to exist in
    # your server's namespace, but do not anymore. This allows you to tell the
    # clients where to look for the relocated document.
    # Example:
    # Redirect permanent /foo http://www.example.com/bar
    
    #
    # Directives controlling the display of server-generated directory listings.
    #
    
    #
    # IndexOptions: Controls the appearance of server-generated directory
    # listings.
    #
    IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8
    
    #
    # AddIcon* directives tell the server which icon to show for different
    # files or filename extensions.  These are only displayed for
    # FancyIndexed directories.
    #
    AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
    
    AddIconByType (TXT,/icons/text.gif) text/*
    AddIconByType (IMG,/icons/image2.gif) image/*
    AddIconByType (SND,/icons/sound2.gif) audio/*
    AddIconByType (VID,/icons/movie.gif) video/*
    
    AddIcon /icons/binary.gif .bin .exe
    AddIcon /icons/binhex.gif .hqx
    AddIcon /icons/tar.gif .tar
    AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
    AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
    AddIcon /icons/a.gif .ps .ai .eps
    AddIcon /icons/layout.gif .html .shtml .htm .pdf
    AddIcon /icons/text.gif .txt
    AddIcon /icons/c.gif .c
    AddIcon /icons/p.gif .pl .py
    AddIcon /icons/f.gif .for
    AddIcon /icons/dvi.gif .dvi
    AddIcon /icons/uuencoded.gif .uu
    AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
    AddIcon /icons/tex.gif .tex
    AddIcon /icons/bomb.gif core
    
    AddIcon /icons/back.gif ..
    AddIcon /icons/hand.right.gif README
    AddIcon /icons/folder.gif ^^DIRECTORY^^
    AddIcon /icons/blank.gif ^^BLANKICON^^
    
    #
    # DefaultIcon is which icon to show for files which do not have an icon
    # explicitly set.
    #
    DefaultIcon /icons/unknown.gif
    
    #
    # AddDescription allows you to place a short description after a file in
    # server-generated indexes.  These are only displayed for FancyIndexed
    # directories.
    # Format: AddDescription "description" filename
    #
    #AddDescription "GZIP compressed document" .gz
    #AddDescription "tar archive" .tar
    #AddDescription "GZIP compressed tar archive" .tgz
    
    #
    # ReadmeName is the name of the README file the server will look for by
    # default, and append to directory listings.
    #
    # HeaderName is the name of a file which should be prepended to
    # directory indexes. 
    ReadmeName README.html
    HeaderName HEADER.html
    
    #
    # IndexIgnore is a set of filenames which directory indexing should ignore
    # and not include in the listing.  Shell-style wildcarding is permitted.
    #
    IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
    
    #
    # DefaultLanguage and AddLanguage allows you to specify the language of 
    # a document. You can then use content negotiation to give a browser a 
    # file in a language the user can understand.
    #
    # Specify a default language. This means that all data
    # going out without a specific language tag (see below) will 
    # be marked with this one. You probably do NOT want to set
    # this unless you are sure it is correct for all cases.
    #
    # * It is generally better to not mark a page as 
    # * being a certain language than marking it with the wrong
    # * language!
    #
    # DefaultLanguage nl
    #
    # Note 1: The suffix does not have to be the same as the language
    # keyword --- those with documents in Polish (whose net-standard
    # language code is pl) may wish to use "AddLanguage pl .po" to
    # avoid the ambiguity with the common suffix for perl scripts.
    #
    # Note 2: The example entries below illustrate that in some cases 
    # the two character 'Language' abbreviation is not identical to 
    # the two character 'Country' code for its country,
    # E.g. 'Danmark/dk' versus 'Danish/da'.
    #
    # Note 3: In the case of 'ltz' we violate the RFC by using a three char
    # specifier. There is 'work in progress' to fix this and get
    # the reference data for rfc1766 cleaned up.
    #
    # Catalan (ca) - Croatian (hr) - Czech (cs) - Danish (da) - Dutch (nl)
    # English (en) - Esperanto (eo) - Estonian (et) - French (fr) - German (de)
    # Greek-Modern (el) - Hebrew (he) - Italian (it) - Japanese (ja)
    # Korean (ko) - Luxembourgeois* (ltz) - Norwegian Nynorsk (nn)
    # Norwegian (no) - Polish (pl) - Portugese (pt)
    # Brazilian Portuguese (pt-BR) - Russian (ru) - Swedish (sv)
    # Simplified Chinese (zh-CN) - Spanish (es) - Traditional Chinese (zh-TW)
    #
    AddLanguage ca .ca
    AddLanguage cs .cz .cs
    AddLanguage da .dk
    AddLanguage de .de
    AddLanguage el .el
    AddLanguage en .en
    AddLanguage eo .eo
    AddLanguage es .es
    AddLanguage et .et
    AddLanguage fr .fr
    AddLanguage he .he
    AddLanguage hr .hr
    AddLanguage it .it
    AddLanguage ja .ja
    AddLanguage ko .ko
    AddLanguage ltz .ltz
    AddLanguage nl .nl
    AddLanguage nn .nn
    AddLanguage no .no
    AddLanguage pl .po
    AddLanguage pt .pt
    AddLanguage pt-BR .pt-br
    AddLanguage ru .ru
    AddLanguage sv .sv
    AddLanguage zh-CN .zh-cn
    AddLanguage zh-TW .zh-tw
    
    #
    # LanguagePriority allows you to give precedence to some languages
    # in case of a tie during content negotiation.
    #
    # Just list the languages in decreasing order of preference. We have
    # more or less alphabetized them here. You probably want to change this.
    #
    LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW
    
    #
    # ForceLanguagePriority allows you to serve a result page rather than
    # MULTIPLE CHOICES (Prefer) [in case of a tie] or NOT ACCEPTABLE (Fallback)
    # [in case no accepted languages matched the available variants]
    #
    ForceLanguagePriority Prefer Fallback
    
    #
    # Specify a default charset for all content served; this enables
    # interpretation of all content as UTF-8 by default.  To use the 
    # default browser choice (ISO-8859-1), or to allow the META tags
    # in HTML content to override this choice, comment out this
    # directive:
    #
    AddDefaultCharset UTF-8
    
    #
    # AddType allows you to add to or override the MIME configuration
    # file mime.types for specific file types.
    #
    #AddType application/x-tar .tgz
    
    #
    # AddEncoding allows you to have certain browsers uncompress
    # information on the fly. Note: Not all browsers support this.
    # Despite the name similarity, the following Add* directives have nothing
    # to do with the FancyIndexing customization directives above.
    #
    #AddEncoding x-compress .Z
    #AddEncoding x-gzip .gz .tgz
    
    # If the AddEncoding directives above are commented-out, then you
    # probably should define those extensions to indicate media types:
    #
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    
    #
    #   MIME-types for downloading Certificates and CRLs
    #
    AddType application/x-x509-ca-cert .crt
    AddType application/x-pkcs7-crl    .crl
    
    #
    # AddHandler allows you to map certain file extensions to "handlers":
    # actions unrelated to filetype. These can be either built into the server
    # or added with the Action directive (see below)
    #
    # To use CGI scripts outside of ScriptAliased directories:
    # (You will also need to add "ExecCGI" to the "Options" directive.)
    #
    #AddHandler cgi-script .cgi
    
    #
    # For files that include their own HTTP headers:
    #
    #AddHandler send-as-is asis
    
    #
    # For type maps (negotiated resources):
    # (This is enabled by default to allow the Apache "It Worked" page
    #  to be distributed in multiple languages.)
    #
    AddHandler type-map var
    
    #
    # Filters allow you to process content before it is sent to the client.
    #
    # To parse .shtml files for server-side includes (SSI):
    # (You will also need to add "Includes" to the "Options" directive.)
    #
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
    
    #
    # Action lets you define media types that will execute a script whenever
    # a matching file is called. This eliminates the need for repeated URL
    # pathnames for oft-used CGI file processors.
    # Format: Action media/type /cgi-script/location
    # Format: Action handler-name /cgi-script/location
    #
    
    #
    # Customizable error responses come in three flavors:
    # 1) plain text 2) local redirects 3) external redirects
    #
    # Some examples:
    #ErrorDocument 500 "The server made a boo boo."
    #ErrorDocument 404 /missing.html
    #ErrorDocument 404 "/cgi-bin/missing_handler.pl"
    #ErrorDocument 402 http://www.example.com/subscription_info.html
    #
    
    #
    # Putting this all together, we can internationalize error responses.
    #
    # We use Alias to redirect any /error/HTTP_<error>.html.var response to
    # our collection of by-error message multi-language collections.  We use 
    # includes to substitute the appropriate text.
    #
    # You can modify the messages' appearance without changing any of the
    # default HTTP_<error>.html.var files by adding the line:
    #
    #   Alias /error/include/ "/your/include/path/"
    #
    # which allows you to create your own set of files by starting with the
    # /var/www/error/include/ files and
    # copying them to /your/include/path/, even on a per-VirtualHost basis.
    #
    
    Alias /error/ "/var/www/error/"
    
    <IfModule mod_negotiation.c>
    <IfModule mod_include.c>
        <Directory "/var/www/error">
            AllowOverride None
            Options IncludesNoExec
            AddOutputFilter Includes html
            AddHandler type-map var
            Order allow,deny
            Allow from all
            LanguagePriority en es de fr
            ForceLanguagePriority Prefer Fallback
        </Directory>
    
    #    ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
    #    ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
    #    ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
    #    ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
    #    ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
    #    ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
    #    ErrorDocument 410 /error/HTTP_GONE.html.var
    #    ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
    #    ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
    #    ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
    #    ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
    #    ErrorDocument 415 /error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var
    #    ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
    #    ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
    #    ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
    #    ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
    #    ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var
    
    </IfModule>
    </IfModule>
    
    #
    # The following directives modify normal HTTP response behavior to
    # handle known problems with browser implementations.
    #
    BrowserMatch "Mozilla/2" nokeepalive
    BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
    BrowserMatch "RealPlayer 4\.0" force-response-1.0
    BrowserMatch "Java/1\.0" force-response-1.0
    BrowserMatch "JDK/1\.0" force-response-1.0
    
    #
    # The following directive disables redirects on non-GET requests for
    # a directory that does not include the trailing slash.  This fixes a 
    # problem with Microsoft WebFolders which does not appropriately handle 
    # redirects for folders with DAV methods.
    # Same deal with Apple's DAV filesystem and Gnome VFS support for DAV.
    #
    BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
    BrowserMatch "MS FrontPage" redirect-carefully
    BrowserMatch "^WebDrive" redirect-carefully
    BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully
    BrowserMatch "^gnome-vfs/1.0" redirect-carefully
    BrowserMatch "^XML Spy" redirect-carefully
    BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully
    
    #
    # Allow server status reports generated by mod_status,
    # with the URL of http://servername/server-status
    # Change the ".example.com" to match your domain to enable.
    #
    #<Location /server-status>
    #    SetHandler server-status
    #    Order deny,allow
    #    Deny from all
    #    Allow from .example.com
    #</Location>
    
    #
    # Allow remote server configuration reports, with the URL of
    #  http://servername/server-info (requires that mod_info.c be loaded).
    # Change the ".example.com" to match your domain to enable.
    #
    #<Location /server-info>
    #    SetHandler server-info
    #    Order deny,allow
    #    Deny from all
    #    Allow from .example.com
    #</Location>
    
    #
    # Proxy Server directives. Uncomment the following lines to
    # enable the proxy server:
    #
    #<IfModule mod_proxy.c>
    #ProxyRequests On
    #
    #<Proxy *>
    #    Order deny,allow
    #    Deny from all
    #    Allow from .example.com
    #</Proxy>
    
    #
    # Enable/disable the handling of HTTP/1.1 "Via:" headers.
    # ("Full" adds the server version; "Block" removes all outgoing Via: headers)
    # Set to one of: Off | On | Full | Block
    #
    #ProxyVia On
    
    #
    # To enable a cache of proxied content, uncomment the following lines.
    # See http://httpd.apache.org/docs/2.2/mod/mod_cache.html for more details.
    #
    #<IfModule mod_disk_cache.c>
    #   CacheEnable disk /
    #   CacheRoot "/var/cache/mod_proxy"
    #</IfModule>
    #
    
    #</IfModule>
    # End of proxy directives.
    
    ### Section 3: Virtual Hosts
    #
    # VirtualHost: If you want to maintain multiple domains/hostnames on your
    # machine you can setup VirtualHost containers for them. Most configurations
    # use only name-based virtual hosts so the server doesn't need to worry about
    # IP addresses. This is indicated by the asterisks in the directives below.
    #
    # Please see the documentation at 
    # <URL:http://httpd.apache.org/docs/2.2/vhosts/>
    # for further details before you try to setup virtual hosts.
    #
    # You may use the command line option '-S' to verify your virtual host
    # configuration.
    
    #
    # Use name-based virtual hosting.
    #
    #NameVirtualHost *:80
    #
    # NOTE: NameVirtualHost cannot be used without a port specifier 
    # (e.g. :80) if mod_ssl is being used, due to the nature of the
    # SSL protocol.
    #
    
    #
    # VirtualHost example:
    # Almost any Apache directive may go into a VirtualHost container.
    # The first VirtualHost section is used for requests without a known
    # server name.
    #
    #<VirtualHost *:80>
    #    ServerAdmin webmaster@dummy-host.example.com
    #    DocumentRoot /www/docs/dummy-host.example.com
    #    ServerName dummy-host.example.com
    #    ErrorLog logs/dummy-host.example.com-error_log
    #    CustomLog logs/dummy-host.example.com-access_log common
    #</VirtualHost>
    

MySQLレシピ作成

  1. Cookbook作成

    $ knife cookbook create mysql -o site-cookbooks
    
    ** Creating cookbook mysql
    ** Creating README for cookbook: mysql
    ** Creating CHANGELOG for cookbook: mysql
    ** Creating metadata for cookbook: mysql
    
    201312182312VCHW08.png
  2. レシピ作成

    $ vi site-cookbooks/mysql/recipes/default.rb
    
    #
    # Cookbook Name:: mysql
    # Recipe:: default
    #
    # my.cnf設定
    template "my.cnf" do
      path "/etc/my.cnf"
      source "my.cnf.erb"
      mode 0644
      action :nothing
    end
    
    # パッケージインストール
    package "mysql-server" do
      action :install
      options "--enablerepo=remi"
      notifies :create, resources( :template => "my.cnf" )
      not_if "yum list installed | grep -q ^mysql-server"
    end
    
    # サービス起動と自動起動設定
    service "mysqld" do
      action [:start, :enable]
    end
    
    # セキュリティ設定
    # 匿名ユーザーの削除
    # リモートからのrootユーザー接続を禁止
    # testデータベースの削除
    # rootユーザーパスワードの設定
    # 権限データベースのリロード
    script "secure_setting" do
      interpreter 'bash'
      user "root"
      not_if "mysql -u root -p#{node[:mysql][:passwd]} -e 'show status'"
      code <<-EOC
    mysql -u root -e "DELETE FROM mysql.user WHERE User='';"
    mysql -u root -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');"
    mysql -u root -e "DROP DATABASE test;"
    mysql -u root -e "UPDATE mysql.user SET Password=PASSWORD('#{node[:mysql][:passwd]}') WHERE User='root';"
    mysql -u root -e "FLUSH PRIVILEGES;"
      EOC
      notifies :restart, "service[mysqld]"
    end
    

PHP55レシピ作成

  1. Cookbook作成

    $ knife cookbook create php55 -o site-cookbooks
    
    ** Creating cookbook php55
    ** Creating README for cookbook: php55
    ** Creating CHANGELOG for cookbook: php55
    ** Creating metadata for cookbook: php55
    
    201312182312VCHW09.png
  2. レシピ作成

    $ vi site-cookbooks/php55/recipes/default.rb
    
    #
    # Cookbook Name:: php55
    # Recipe:: default
    #
    # php.ini設定
    template "php.ini" do
      path "/etc/php.ini"
      source "php.ini.erb"
      mode 0644
      action :nothing
    end
    
    # PHPサンプル
    template "phpinfo.php" do
      path "/var/www/html/phpinfo.php"
      source "phpinfo.php.erb"
      mode 0644
      action :nothing
    end
    
    # パッケージインストール
    package "php" do
      action :install
      options "--enablerepo=remi-php55"
      notifies :create, resources( :template => "php.ini" )
      notifies :create, resources( :template => "phpinfo.php" )
      notifies :restart, 'service[httpd]'
      not_if "yum list installed | grep ^'php\.'"
    end
    
    # 関連パッケージのインストール
    %w{
      php-mysql
      php-gd
      php-pdo
      php-pear
      php-mbstring
      php-devel
    }.each do |p|
      package p do
        action :install
        options "--enablerepo=remi-php55,remi"
        not_if "yum list installed | grep ^$p"
      end
    end
    
    # php-mcryptパッケージのインストール
    package "php-mcrypt" do
      action :install
      options "--enablerepo=epel,remi-php55,rpmforge"
      not_if "yum list installed | grep ^'php-mcrypt'"
    end
    
  3. php.iniテンプレートの作成

    php.iniのテンプレートを作成します。

    $ vi site-cookbooks/php55/templates/default/php.ini.erb
    
    [PHP]
    
    ;;;;;;;;;;;;;;;;;;;
    ; About php.ini   ;
    ;;;;;;;;;;;;;;;;;;;
    ; PHP's initialization file, generally called php.ini, is responsible for
    ; configuring many of the aspects of PHP's behavior.
    
    ; PHP attempts to find and load this configuration from a number of locations.
    ; The following is a summary of its search order:
    ; 1. SAPI module specific location.
    ; 2. The PHPRC environment variable. (As of PHP 5.2.0)
    ; 3. A number of predefined registry keys on Windows (As of PHP 5.2.0)
    ; 4. Current working directory (except CLI)
    ; 5. The web server's directory (for SAPI modules), or directory of PHP
    ; (otherwise in Windows)
    ; 6. The directory from the --with-config-file-path compile time option, or the
    ; Windows directory (C:\windows or C:\winnt)
    ; See the PHP docs for more specific information.
    ; http://php.net/configuration.file
    
    ; The syntax of the file is extremely simple.  Whitespace and lines
    ; beginning with a semicolon are silently ignored (as you probably guessed).
    ; Section headers (e.g. [Foo]) are also silently ignored, even though
    ; they might mean something in the future.
    
    ; Directives following the section heading [PATH=/www/mysite] only
    ; apply to PHP files in the /www/mysite directory.  Directives
    ; following the section heading [HOST=www.example.com] only apply to
    ; PHP files served from www.example.com.  Directives set in these
    ; special sections cannot be overridden by user-defined INI files or
    ; at runtime. Currently, [PATH=] and [HOST=] sections only work under
    ; CGI/FastCGI.
    ; http://php.net/ini.sections
    
    ; Directives are specified using the following syntax:
    ; directive = value
    ; Directive names are *case sensitive* - foo=bar is different from FOO=bar.
    ; Directives are variables used to configure PHP or PHP extensions.
    ; There is no name validation.  If PHP can't find an expected
    ; directive because it is not set or is mistyped, a default value will be used.
    
    ; The value can be a string, a number, a PHP constant (e.g. E_ALL or M_PI), one
    ; of the INI constants (On, Off, True, False, Yes, No and None) or an expression
    ; (e.g. E_ALL & ~E_NOTICE), a quoted string ("bar"), or a reference to a
    ; previously set variable or directive (e.g. ${foo})
    
    ; Expressions in the INI file are limited to bitwise operators and parentheses:
    ; |  bitwise OR
    ; ^  bitwise XOR
    ; &  bitwise AND
    ; ~  bitwise NOT
    ; !  boolean NOT
    
    ; Boolean flags can be turned on using the values 1, On, True or Yes.
    ; They can be turned off using the values 0, Off, False or No.
    
    ; An empty string can be denoted by simply not writing anything after the equal
    ; sign, or by using the None keyword:
    
    ;  foo =         ; sets foo to an empty string
    ;  foo = None    ; sets foo to an empty string
    ;  foo = "None"  ; sets foo to the string 'None'
    
    ; If you use constants in your value, and these constants belong to a
    ; dynamically loaded extension (either a PHP extension or a Zend extension),
    ; you may only use these constants *after* the line that loads the extension.
    
    ;;;;;;;;;;;;;;;;;;;
    ; About this file ;
    ;;;;;;;;;;;;;;;;;;;
    ; PHP comes packaged with two INI files. One that is recommended to be used
    ; in production environments and one that is recommended to be used in
    ; development environments.
    
    ; php.ini-production contains settings which hold security, performance and
    ; best practices at its core. But please be aware, these settings may break
    ; compatibility with older or less security conscience applications. We
    ; recommending using the production ini in production and testing environments.
    
    ; php.ini-development is very similar to its production variant, except it's
    ; much more verbose when it comes to errors. We recommending using the
    ; development version only in development environments as errors shown to
    ; application users can inadvertently leak otherwise secure information.
    
    ; This is php.ini-production INI file.
    
    ;;;;;;;;;;;;;;;;;;;
    ; Quick Reference ;
    ;;;;;;;;;;;;;;;;;;;
    ; The following are all the settings which are different in either the production
    ; or development versions of the INIs with respect to PHP's default behavior.
    ; Please see the actual settings later in the document for more details as to why
    ; we recommend these changes in PHP's behavior.
    
    ; display_errors
    ;   Default Value: On
    ;   Development Value: On
    ;   Production Value: Off
    
    ; display_startup_errors
    ;   Default Value: Off
    ;   Development Value: On
    ;   Production Value: Off
    
    ; error_reporting
    ;   Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
    ;   Development Value: E_ALL
    ;   Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
    
    ; html_errors
    ;   Default Value: On
    ;   Development Value: On
    ;   Production value: On
    
    ; log_errors
    ;   Default Value: Off
    ;   Development Value: On
    ;   Production Value: On
    
    ; max_input_time
    ;   Default Value: -1 (Unlimited)
    ;   Development Value: 60 (60 seconds)
    ;   Production Value: 60 (60 seconds)
    
    ; output_buffering
    ;   Default Value: Off
    ;   Development Value: 4096
    ;   Production Value: 4096
    
    ; register_argc_argv
    ;   Default Value: On
    ;   Development Value: Off
    ;   Production Value: Off
    
    ; request_order
    ;   Default Value: None
    ;   Development Value: "GP"
    ;   Production Value: "GP"
    
    ; session.bug_compat_42
    ;   Default Value: On
    ;   Development Value: On
    ;   Production Value: Off
    
    ; session.bug_compat_warn
    ;   Default Value: On
    ;   Development Value: On
    ;   Production Value: Off
    
    ; session.gc_divisor
    ;   Default Value: 100
    ;   Development Value: 1000
    ;   Production Value: 1000
    
    ; session.hash_bits_per_character
    ;   Default Value: 4
    ;   Development Value: 5
    ;   Production Value: 5
    
    ; short_open_tag
    ;   Default Value: On
    ;   Development Value: Off
    ;   Production Value: Off
    
    ; track_errors
    ;   Default Value: Off
    ;   Development Value: On
    ;   Production Value: Off
    
    ; url_rewriter.tags
    ;   Default Value: "a=href,area=href,frame=src,form=,fieldset="
    ;   Development Value: "a=href,area=href,frame=src,input=src,form=fakeentry"
    ;   Production Value: "a=href,area=href,frame=src,input=src,form=fakeentry"
    
    ; variables_order
    ;   Default Value: "EGPCS"
    ;   Development Value: "GPCS"
    ;   Production Value: "GPCS"
    
    ;;;;;;;;;;;;;;;;;;;;
    ; php.ini Options  ;
    ;;;;;;;;;;;;;;;;;;;;
    ; Name for user-defined php.ini (.htaccess) files. Default is ".user.ini"
    ;user_ini.filename = ".user.ini"
    
    ; To disable this feature set this option to empty value
    ;user_ini.filename =
    
    ; TTL for user-defined php.ini files (time-to-live) in seconds. Default is 300 seconds (5 minutes)
    ;user_ini.cache_ttl = 300
    
    ;;;;;;;;;;;;;;;;;;;;
    ; Language Options ;
    ;;;;;;;;;;;;;;;;;;;;
    
    ; Enable the PHP scripting language engine under Apache.
    ; http://php.net/engine
    engine = On
    
    ; This directive determines whether or not PHP will recognize code between
    ; <? and ?> tags as PHP source which should be processed as such. It is
    ; generally recommended that <?php and ?> should be used and that this feature
    ; should be disabled, as enabling it may result in issues when generating XML
    ; documents, however this remains supported for backward compatibility reasons.
    ; Note that this directive does not control the <?= shorthand tag, which can be
    ; used regardless of this directive.
    ; Default Value: On
    ; Development Value: Off
    ; Production Value: Off
    ; http://php.net/short-open-tag
    short_open_tag = Off
    
    ; Allow ASP-style <% %> tags.
    ; http://php.net/asp-tags
    asp_tags = Off
    
    ; The number of significant digits displayed in floating point numbers.
    ; http://php.net/precision
    precision = 14
    
    ; Output buffering is a mechanism for controlling how much output data
    ; (excluding headers and cookies) PHP should keep internally before pushing that
    ; data to the client. If your application's output exceeds this setting, PHP
    ; will send that data in chunks of roughly the size you specify.
    ; Turning on this setting and managing its maximum buffer size can yield some
    ; interesting side-effects depending on your application and web server.
    ; You may be able to send headers and cookies after you've already sent output
    ; through print or echo. You also may see performance benefits if your server is
    ; emitting less packets due to buffered output versus PHP streaming the output
    ; as it gets it. On production servers, 4096 bytes is a good setting for performance
    ; reasons.
    ; Note: Output buffering can also be controlled via Output Buffering Control
    ;   functions.
    ; Possible Values:
    ;   On = Enabled and buffer is unlimited. (Use with caution)
    ;   Off = Disabled
    ;   Integer = Enables the buffer and sets its maximum size in bytes.
    ; Note: This directive is hardcoded to Off for the CLI SAPI
    ; Default Value: Off
    ; Development Value: 4096
    ; Production Value: 4096
    ; http://php.net/output-buffering
    output_buffering = 4096
    
    ; You can redirect all of the output of your scripts to a function.  For
    ; example, if you set output_handler to "mb_output_handler", character
    ; encoding will be transparently converted to the specified encoding.
    ; Setting any output handler automatically turns on output buffering.
    ; Note: People who wrote portable scripts should not depend on this ini
    ;   directive. Instead, explicitly set the output handler using ob_start().
    ;   Using this ini directive may cause problems unless you know what script
    ;   is doing.
    ; Note: You cannot use both "mb_output_handler" with "ob_iconv_handler"
    ;   and you cannot use both "ob_gzhandler" and "zlib.output_compression".
    ; Note: output_handler must be empty if this is set 'On' !!!!
    ;   Instead you must use zlib.output_handler.
    ; http://php.net/output-handler
    ;output_handler =
    
    ; Transparent output compression using the zlib library
    ; Valid values for this option are 'off', 'on', or a specific buffer size
    ; to be used for compression (default is 4KB)
    ; Note: Resulting chunk size may vary due to nature of compression. PHP
    ;   outputs chunks that are few hundreds bytes each as a result of
    ;   compression. If you prefer a larger chunk size for better
    ;   performance, enable output_buffering in addition.
    ; Note: You need to use zlib.output_handler instead of the standard
    ;   output_handler, or otherwise the output will be corrupted.
    ; http://php.net/zlib.output-compression
    zlib.output_compression = Off
    
    ; http://php.net/zlib.output-compression-level
    ;zlib.output_compression_level = -1
    
    ; You cannot specify additional output handlers if zlib.output_compression
    ; is activated here. This setting does the same as output_handler but in
    ; a different order.
    ; http://php.net/zlib.output-handler
    ;zlib.output_handler =
    
    ; Implicit flush tells PHP to tell the output layer to flush itself
    ; automatically after every output block.  This is equivalent to calling the
    ; PHP function flush() after each and every call to print() or echo() and each
    ; and every HTML block.  Turning this option on has serious performance
    ; implications and is generally recommended for debugging purposes only.
    ; http://php.net/implicit-flush
    ; Note: This directive is hardcoded to On for the CLI SAPI
    implicit_flush = Off
    
    ; The unserialize callback function will be called (with the undefined class'
    ; name as parameter), if the unserializer finds an undefined class
    ; which should be instantiated. A warning appears if the specified function is
    ; not defined, or if the function doesn't include/implement the missing class.
    ; So only set this entry, if you really want to implement such a
    ; callback-function.
    unserialize_callback_func =
    
    ; When floats & doubles are serialized store serialize_precision significant
    ; digits after the floating point. The default value ensures that when floats
    ; are decoded with unserialize, the data will remain the same.
    serialize_precision = 17
    
    ; open_basedir, if set, limits all file operations to the defined directory
    ; and below.  This directive makes most sense if used in a per-directory
    ; or per-virtualhost web server configuration file. This directive is
    ; *NOT* affected by whether Safe Mode is turned On or Off.
    ; http://php.net/open-basedir
    ;open_basedir =
    
    ; This directive allows you to disable certain functions for security reasons.
    ; It receives a comma-delimited list of function names. This directive is
    ; *NOT* affected by whether Safe Mode is turned On or Off.
    ; http://php.net/disable-functions
    disable_functions =
    
    ; This directive allows you to disable certain classes for security reasons.
    ; It receives a comma-delimited list of class names. This directive is
    ; *NOT* affected by whether Safe Mode is turned On or Off.
    ; http://php.net/disable-classes
    disable_classes =
    
    ; Colors for Syntax Highlighting mode.  Anything that's acceptable in
    ; <span style="color: ???????"> would work.
    ; http://php.net/syntax-highlighting
    ;highlight.string  = #DD0000
    ;highlight.comment = #FF9900
    ;highlight.keyword = #007700
    ;highlight.default = #0000BB
    ;highlight.html    = #000000
    
    ; If enabled, the request will be allowed to complete even if the user aborts
    ; the request. Consider enabling it if executing long requests, which may end up
    ; being interrupted by the user or a browser timing out. PHP's default behavior
    ; is to disable this feature.
    ; http://php.net/ignore-user-abort
    ;ignore_user_abort = On
    
    ; Determines the size of the realpath cache to be used by PHP. This value should
    ; be increased on systems where PHP opens many files to reflect the quantity of
    ; the file operations performed.
    ; http://php.net/realpath-cache-size
    ;realpath_cache_size = 16k
    
    ; Duration of time, in seconds for which to cache realpath information for a given
    ; file or directory. For systems with rarely changing files, consider increasing this
    ; value.
    ; http://php.net/realpath-cache-ttl
    ;realpath_cache_ttl = 120
    
    ; Enables or disables the circular reference collector.
    ; http://php.net/zend.enable-gc
    zend.enable_gc = On
    
    ; If enabled, scripts may be written in encodings that are incompatible with
    ; the scanner.  CP936, Big5, CP949 and Shift_JIS are the examples of such
    ; encodings.  To use this feature, mbstring extension must be enabled.
    ; Default: Off
    ;zend.multibyte = Off
    
    ; Allows to set the default encoding for the scripts.  This value will be used
    ; unless "declare(encoding=...)" directive appears at the top of the script.
    ; Only affects if zend.multibyte is set.
    ; Default: ""
    ;zend.script_encoding =
    
    ;;;;;;;;;;;;;;;;;
    ; Miscellaneous ;
    ;;;;;;;;;;;;;;;;;
    
    ; Decides whether PHP may expose the fact that it is installed on the server
    ; (e.g. by adding its signature to the Web server header).  It is no security
    ; threat in any way, but it makes it possible to determine whether you use PHP
    ; on your server or not.
    ; http://php.net/expose-php
    expose_php = On
    
    ;;;;;;;;;;;;;;;;;;;
    ; Resource Limits ;
    ;;;;;;;;;;;;;;;;;;;
    
    ; Maximum execution time of each script, in seconds
    ; http://php.net/max-execution-time
    ; Note: This directive is hardcoded to 0 for the CLI SAPI
    max_execution_time = 30
    
    ; Maximum amount of time each script may spend parsing request data. It's a good
    ; idea to limit this time on productions servers in order to eliminate unexpectedly
    ; long running scripts.
    ; Note: This directive is hardcoded to -1 for the CLI SAPI
    ; Default Value: -1 (Unlimited)
    ; Development Value: 60 (60 seconds)
    ; Production Value: 60 (60 seconds)
    ; http://php.net/max-input-time
    max_input_time = 60
    
    ; Maximum input variable nesting level
    ; http://php.net/max-input-nesting-level
    ;max_input_nesting_level = 64
    
    ; How many GET/POST/COOKIE input variables may be accepted
    ; max_input_vars = 1000
    
    ; Maximum amount of memory a script may consume (128MB)
    ; http://php.net/memory-limit
    memory_limit = 128M
    
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; Error handling and logging ;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    
    ; This directive informs PHP of which errors, warnings and notices you would like
    ; it to take action for. The recommended way of setting values for this
    ; directive is through the use of the error level constants and bitwise
    ; operators. The error level constants are below here for convenience as well as
    ; some common settings and their meanings.
    ; By default, PHP is set to take action on all errors, notices and warnings EXCEPT
    ; those related to E_NOTICE and E_STRICT, which together cover best practices and
    ; recommended coding standards in PHP. For performance reasons, this is the
    ; recommend error reporting setting. Your production server shouldn't be wasting
    ; resources complaining about best practices and coding standards. That's what
    ; development servers and development settings are for.
    ; Note: The php.ini-development file has this setting as E_ALL. This
    ; means it pretty much reports everything which is exactly what you want during
    ; development and early testing.
    ;
    ; Error Level Constants:
    ; E_ALL             - All errors and warnings (includes E_STRICT as of PHP 5.4.0)
    ; E_ERROR           - fatal run-time errors
    ; E_RECOVERABLE_ERROR  - almost fatal run-time errors
    ; E_WARNING         - run-time warnings (non-fatal errors)
    ; E_PARSE           - compile-time parse errors
    ; E_NOTICE          - run-time notices (these are warnings which often result
    ;                     from a bug in your code, but it's possible that it was
    ;                     intentional (e.g., using an uninitialized variable and
    ;                     relying on the fact it's automatically initialized to an
    ;                     empty string)
    ; E_STRICT          - run-time notices, enable to have PHP suggest changes
    ;                     to your code which will ensure the best interoperability
    ;                     and forward compatibility of your code
    ; E_CORE_ERROR      - fatal errors that occur during PHP's initial startup
    ; E_CORE_WARNING    - warnings (non-fatal errors) that occur during PHP's
    ;                     initial startup
    ; E_COMPILE_ERROR   - fatal compile-time errors
    ; E_COMPILE_WARNING - compile-time warnings (non-fatal errors)
    ; E_USER_ERROR      - user-generated error message
    ; E_USER_WARNING    - user-generated warning message
    ; E_USER_NOTICE     - user-generated notice message
    ; E_DEPRECATED      - warn about code that will not work in future versions
    ;                     of PHP
    ; E_USER_DEPRECATED - user-generated deprecation warnings
    ;
    ; Common Values:
    ;   E_ALL (Show all errors, warnings and notices including coding standards.)
    ;   E_ALL & ~E_NOTICE  (Show all errors, except for notices)
    ;   E_ALL & ~E_NOTICE & ~E_STRICT  (Show all errors, except for notices and coding standards warnings.)
    ;   E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR  (Show only errors)
    ; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
    ; Development Value: E_ALL
    ; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
    ; http://php.net/error-reporting
    error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
    
    ; This directive controls whether or not and where PHP will output errors,
    ; notices and warnings too. Error output is very useful during development, but
    ; it could be very dangerous in production environments. Depending on the code
    ; which is triggering the error, sensitive information could potentially leak
    ; out of your application such as database usernames and passwords or worse.
    ; It's recommended that errors be logged on production servers rather than
    ; having the errors sent to STDOUT.
    ; Possible Values:
    ;   Off = Do not display any errors
    ;   stderr = Display errors to STDERR (affects only CGI/CLI binaries!)
    ;   On or stdout = Display errors to STDOUT
    ; Default Value: On
    ; Development Value: On
    ; Production Value: Off
    ; http://php.net/display-errors
    display_errors = Off
    
    ; The display of errors which occur during PHP's startup sequence are handled
    ; separately from display_errors. PHP's default behavior is to suppress those
    ; errors from clients. Turning the display of startup errors on can be useful in
    ; debugging configuration problems. But, it's strongly recommended that you
    ; leave this setting off on production servers.
    ; Default Value: Off
    ; Development Value: On
    ; Production Value: Off
    ; http://php.net/display-startup-errors
    display_startup_errors = Off
    
    ; Besides displaying errors, PHP can also log errors to locations such as a
    ; server-specific log, STDERR, or a location specified by the error_log
    ; directive found below. While errors should not be displayed on productions
    ; servers they should still be monitored and logging is a great way to do that.
    ; Default Value: Off
    ; Development Value: On
    ; Production Value: On
    ; http://php.net/log-errors
    log_errors = On
    
    ; Set maximum length of log_errors. In error_log information about the source is
    ; added. The default is 1024 and 0 allows to not apply any maximum length at all.
    ; http://php.net/log-errors-max-len
    log_errors_max_len = 1024
    
    ; Do not log repeated messages. Repeated errors must occur in same file on same
    ; line unless ignore_repeated_source is set true.
    ; http://php.net/ignore-repeated-errors
    ignore_repeated_errors = Off
    
    ; Ignore source of message when ignoring repeated messages. When this setting
    ; is On you will not log errors with repeated messages from different files or
    ; source lines.
    ; http://php.net/ignore-repeated-source
    ignore_repeated_source = Off
    
    ; If this parameter is set to Off, then memory leaks will not be shown (on
    ; stdout or in the log). This has only effect in a debug compile, and if
    ; error reporting includes E_WARNING in the allowed list
    ; http://php.net/report-memleaks
    report_memleaks = On
    
    ; This setting is on by default.
    ;report_zend_debug = 0
    
    ; Store the last error/warning message in $php_errormsg (boolean). Setting this value
    ; to On can assist in debugging and is appropriate for development servers. It should
    ; however be disabled on production servers.
    ; Default Value: Off
    ; Development Value: On
    ; Production Value: Off
    ; http://php.net/track-errors
    track_errors = Off
    
    ; Turn off normal error reporting and emit XML-RPC error XML
    ; http://php.net/xmlrpc-errors
    ;xmlrpc_errors = 0
    
    ; An XML-RPC faultCode
    ;xmlrpc_error_number = 0
    
    ; When PHP displays or logs an error, it has the capability of formatting the
    ; error message as HTML for easier reading. This directive controls whether
    ; the error message is formatted as HTML or not.
    ; Note: This directive is hardcoded to Off for the CLI SAPI
    ; Default Value: On
    ; Development Value: On
    ; Production value: On
    ; http://php.net/html-errors
    html_errors = On
    
    ; If html_errors is set to On *and* docref_root is not empty, then PHP
    ; produces clickable error messages that direct to a page describing the error
    ; or function causing the error in detail.
    ; You can download a copy of the PHP manual from http://php.net/docs
    ; and change docref_root to the base URL of your local copy including the
    ; leading '/'. You must also specify the file extension being used including
    ; the dot. PHP's default behavior is to leave these settings empty, in which
    ; case no links to documentation are generated.
    ; Note: Never use this feature for production boxes.
    ; http://php.net/docref-root
    ; Examples
    ;docref_root = "/phpmanual/"
    
    ; http://php.net/docref-ext
    ;docref_ext = .html
    
    ; String to output before an error message. PHP's default behavior is to leave
    ; this setting blank.
    ; http://php.net/error-prepend-string
    ; Example:
    ;error_prepend_string = "<span style='color: #ff0000'>"
    
    ; String to output after an error message. PHP's default behavior is to leave
    ; this setting blank.
    ; http://php.net/error-append-string
    ; Example:
    ;error_append_string = "</span>"
    
    ; Log errors to specified file. PHP's default behavior is to leave this value
    ; empty.
    ; http://php.net/error-log
    ; Example:
    ;error_log = php_errors.log
    ; Log errors to syslog (Event Log on NT, not valid in Windows 95).
    ;error_log = syslog
    
    ;windows.show_crt_warning
    ; Default value: 0
    ; Development value: 0
    ; Production value: 0
    
    ;;;;;;;;;;;;;;;;;
    ; Data Handling ;
    ;;;;;;;;;;;;;;;;;
    
    ; The separator used in PHP generated URLs to separate arguments.
    ; PHP's default setting is "&".
    ; http://php.net/arg-separator.output
    ; Example:
    ;arg_separator.output = "&amp;"
    
    ; List of separator(s) used by PHP to parse input URLs into variables.
    ; PHP's default setting is "&".
    ; NOTE: Every character in this directive is considered as separator!
    ; http://php.net/arg-separator.input
    ; Example:
    ;arg_separator.input = ";&"
    
    ; This directive determines which super global arrays are registered when PHP
    ; starts up. G,P,C,E & S are abbreviations for the following respective super
    ; globals: GET, POST, COOKIE, ENV and SERVER. There is a performance penalty
    ; paid for the registration of these arrays and because ENV is not as commonly
    ; used as the others, ENV is not recommended on productions servers. You
    ; can still get access to the environment variables through getenv() should you
    ; need to.
    ; Default Value: "EGPCS"
    ; Development Value: "GPCS"
    ; Production Value: "GPCS";
    ; http://php.net/variables-order
    variables_order = "GPCS"
    
    ; This directive determines which super global data (G,P,C,E & S) should
    ; be registered into the super global array REQUEST. If so, it also determines
    ; the order in which that data is registered. The values for this directive are
    ; specified in the same manner as the variables_order directive, EXCEPT one.
    ; Leaving this value empty will cause PHP to use the value set in the
    ; variables_order directive. It does not mean it will leave the super globals
    ; array REQUEST empty.
    ; Default Value: None
    ; Development Value: "GP"
    ; Production Value: "GP"
    ; http://php.net/request-order
    request_order = "GP"
    
    ; This directive determines whether PHP registers $argv & $argc each time it
    ; runs. $argv contains an array of all the arguments passed to PHP when a script
    ; is invoked. $argc contains an integer representing the number of arguments
    ; that were passed when the script was invoked. These arrays are extremely
    ; useful when running scripts from the command line. When this directive is
    ; enabled, registering these variables consumes CPU cycles and memory each time
    ; a script is executed. For performance reasons, this feature should be disabled
    ; on production servers.
    ; Note: This directive is hardcoded to On for the CLI SAPI
    ; Default Value: On
    ; Development Value: Off
    ; Production Value: Off
    ; http://php.net/register-argc-argv
    register_argc_argv = Off
    
    ; When enabled, the ENV, REQUEST and SERVER variables are created when they're
    ; first used (Just In Time) instead of when the script starts. If these
    ; variables are not used within a script, having this directive on will result
    ; in a performance gain. The PHP directive register_argc_argv must be disabled
    ; for this directive to have any affect.
    ; http://php.net/auto-globals-jit
    auto_globals_jit = On
    
    ; Whether PHP will read the POST data.
    ; This option is enabled by default.
    ; Most likely, you won't want to disable this option globally. It causes $_POST
    ; and $_FILES to always be empty; the only way you will be able to read the
    ; POST data will be through the php://input stream wrapper. This can be useful
    ; to proxy requests or to process the POST data in a memory efficient fashion.
    ; http://php.net/enable-post-data-reading
    ;enable_post_data_reading = Off
    
    ; Maximum size of POST data that PHP will accept.
    ; Its value may be 0 to disable the limit. It is ignored if POST data reading
    ; is disabled through enable_post_data_reading.
    ; http://php.net/post-max-size
    post_max_size = 8M
    
    ; Automatically add files before PHP document.
    ; http://php.net/auto-prepend-file
    auto_prepend_file =
    
    ; Automatically add files after PHP document.
    ; http://php.net/auto-append-file
    auto_append_file =
    
    ; By default, PHP will output a character encoding using
    ; the Content-type: header.  To disable sending of the charset, simply
    ; set it to be empty.
    ;
    ; PHP's built-in default is text/html
    ; http://php.net/default-mimetype
    default_mimetype = "text/html"
    
    ; PHP's default character set is set to empty.
    ; http://php.net/default-charset
    ;default_charset = "UTF-8"
    
    ; Always populate the $HTTP_RAW_POST_DATA variable. PHP's default behavior is
    ; to disable this feature. If post reading is disabled through
    ; enable_post_data_reading, $HTTP_RAW_POST_DATA is *NOT* populated.
    ; http://php.net/always-populate-raw-post-data
    ;always_populate_raw_post_data = On
    
    ;;;;;;;;;;;;;;;;;;;;;;;;;
    ; Paths and Directories ;
    ;;;;;;;;;;;;;;;;;;;;;;;;;
    
    ; UNIX: "/path1:/path2"
    ;include_path = ".:/php/includes"
    ;
    ; Windows: "\path1;\path2"
    ;include_path = ".;c:\php\includes"
    ;
    ; PHP's default setting for include_path is ".;/path/to/php/pear"
    ; http://php.net/include-path
    
    ; The root of the PHP pages, used only if nonempty.
    ; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root
    ; if you are running php as a CGI under any web server (other than IIS)
    ; see documentation for security issues.  The alternate is to use the
    ; cgi.force_redirect configuration below
    ; http://php.net/doc-root
    doc_root =
    
    ; The directory under which PHP opens the script using /~username used only
    ; if nonempty.
    ; http://php.net/user-dir
    user_dir =
    
    ; Directory in which the loadable extensions (modules) reside.
    ; http://php.net/extension-dir
    ; extension_dir = "./"
    ; On windows:
    ; extension_dir = "ext"
    
    ; Directory where the temporary files should be placed.
    ; Defaults to the system default (see sys_get_temp_dir)
    ; sys_temp_dir = "/tmp"
    
    ; Whether or not to enable the dl() function.  The dl() function does NOT work
    ; properly in multithreaded servers, such as IIS or Zeus, and is automatically
    ; disabled on them.
    ; http://php.net/enable-dl
    enable_dl = Off
    
    ; cgi.force_redirect is necessary to provide security running PHP as a CGI under
    ; most web servers.  Left undefined, PHP turns this on by default.  You can
    ; turn it off here AT YOUR OWN RISK
    ; **You CAN safely turn this off for IIS, in fact, you MUST.**
    ; http://php.net/cgi.force-redirect
    ;cgi.force_redirect = 1
    
    ; if cgi.nph is enabled it will force cgi to always sent Status: 200 with
    ; every request. PHP's default behavior is to disable this feature.
    ;cgi.nph = 1
    
    ; if cgi.force_redirect is turned on, and you are not running under Apache or Netscape
    ; (iPlanet) web servers, you MAY need to set an environment variable name that PHP
    ; will look for to know it is OK to continue execution.  Setting this variable MAY
    ; cause security issues, KNOW WHAT YOU ARE DOING FIRST.
    ; http://php.net/cgi.redirect-status-env
    ;cgi.redirect_status_env =
    
    ; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
    ; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
    ; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
    ; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
    ; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
    ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
    ; http://php.net/cgi.fix-pathinfo
    ;cgi.fix_pathinfo=1
    
    ; FastCGI under IIS (on WINNT based OS) supports the ability to impersonate
    ; security tokens of the calling client.  This allows IIS to define the
    ; security context that the request runs under.  mod_fastcgi under Apache
    ; does not currently support this feature (03/17/2002)
    ; Set to 1 if running under IIS.  Default is zero.
    ; http://php.net/fastcgi.impersonate
    ;fastcgi.impersonate = 1
    
    ; Disable logging through FastCGI connection. PHP's default behavior is to enable
    ; this feature.
    ;fastcgi.logging = 0
    
    ; cgi.rfc2616_headers configuration option tells PHP what type of headers to
    ; use when sending HTTP response code. If it's set 0 PHP sends Status: header that
    ; is supported by Apache. When this option is set to 1 PHP will send
    ; RFC2616 compliant header.
    ; Default is zero.
    ; http://php.net/cgi.rfc2616-headers
    ;cgi.rfc2616_headers = 0
    
    ;;;;;;;;;;;;;;;;
    ; File Uploads ;
    ;;;;;;;;;;;;;;;;
    
    ; Whether to allow HTTP file uploads.
    ; http://php.net/file-uploads
    file_uploads = On
    
    ; Temporary directory for HTTP uploaded files (will use system default if not
    ; specified).
    ; http://php.net/upload-tmp-dir
    ;upload_tmp_dir =
    
    ; Maximum allowed size for uploaded files.
    ; http://php.net/upload-max-filesize
    upload_max_filesize = 2M
    
    ; Maximum number of files that can be uploaded via a single request
    max_file_uploads = 20
    
    ;;;;;;;;;;;;;;;;;;
    ; Fopen wrappers ;
    ;;;;;;;;;;;;;;;;;;
    
    ; Whether to allow the treatment of URLs (like http:// or ftp://) as files.
    ; http://php.net/allow-url-fopen
    allow_url_fopen = On
    
    ; Whether to allow include/require to open URLs (like http:// or ftp://) as files.
    ; http://php.net/allow-url-include
    allow_url_include = Off
    
    ; Define the anonymous ftp password (your email address). PHP's default setting
    ; for this is empty.
    ; http://php.net/from
    ;from="john@doe.com"
    
    ; Define the User-Agent string. PHP's default setting for this is empty.
    ; http://php.net/user-agent
    ;user_agent="PHP"
    
    ; Default timeout for socket based streams (seconds)
    ; http://php.net/default-socket-timeout
    default_socket_timeout = 60
    
    ; If your scripts have to deal with files from Macintosh systems,
    ; or you are running on a Mac and need to deal with files from
    ; unix or win32 systems, setting this flag will cause PHP to
    ; automatically detect the EOL character in those files so that
    ; fgets() and file() will work regardless of the source of the file.
    ; http://php.net/auto-detect-line-endings
    ;auto_detect_line_endings = Off
    
    ;;;;;;;;;;;;;;;;;;;;;;
    ; Dynamic Extensions ;
    ;;;;;;;;;;;;;;;;;;;;;;
    
    ; If you wish to have an extension loaded automatically, use the following
    ; syntax:
    ;
    ;   extension=modulename.extension
    ;
    ; For example, on Windows:
    ;
    ;   extension=msql.dll
    ;
    ; ... or under UNIX:
    ;
    ;   extension=msql.so
    ;
    ; ... or with a path:
    ;
    ;   extension=/path/to/extension/msql.so
    ;
    ; If you only provide the name of the extension, PHP will look for it in its
    ; default extension directory.
    
    ;;;;
    ; Note: packaged extension modules are now loaded via the .ini files
    ; found in the directory /etc/php.d; these are loaded by default.
    ;;;;
    
    ;;;;;;;;;;;;;;;;;;;
    ; Module Settings ;
    ;;;;;;;;;;;;;;;;;;;
    
    [CLI Server]
    ; Whether the CLI web server uses ANSI color coding in its terminal output.
    cli_server.color = On
    
    [Date]
    ; Defines the default timezone used by the date functions
    ; http://php.net/date.timezone
    date.timezone ='<%= node[:php55][:timezone] %>'
    
    ; http://php.net/date.default-latitude
    ;date.default_latitude = 31.7667
    
    ; http://php.net/date.default-longitude
    ;date.default_longitude = 35.2333
    
    ; http://php.net/date.sunrise-zenith
    ;date.sunrise_zenith = 90.583333
    
    ; http://php.net/date.sunset-zenith
    ;date.sunset_zenith = 90.583333
    
    [filter]
    ; http://php.net/filter.default
    ;filter.default = unsafe_raw
    
    ; http://php.net/filter.default-flags
    ;filter.default_flags =
    
    [iconv]
    ;iconv.input_encoding = ISO-8859-1
    ;iconv.internal_encoding = ISO-8859-1
    ;iconv.output_encoding = ISO-8859-1
    
    [intl]
    ;intl.default_locale =
    ; This directive allows you to produce PHP errors when some error
    ; happens within intl functions. The value is the level of the error produced.
    ; Default is 0, which does not produce any errors.
    ;intl.error_level = E_WARNING
    
    [sqlite]
    ; http://php.net/sqlite.assoc-case
    ;sqlite.assoc_case = 0
    
    [sqlite3]
    ;sqlite3.extension_dir =
    
    [Pcre]
    ;PCRE library backtracking limit.
    ; http://php.net/pcre.backtrack-limit
    ;pcre.backtrack_limit=100000
    
    ;PCRE library recursion limit.
    ;Please note that if you set this value to a high number you may consume all
    ;the available process stack and eventually crash PHP (due to reaching the
    ;stack size limit imposed by the Operating System).
    ; http://php.net/pcre.recursion-limit
    ;pcre.recursion_limit=100000
    
    [Pdo]
    ; Whether to pool ODBC connections. Can be one of "strict", "relaxed" or "off"
    ; http://php.net/pdo-odbc.connection-pooling
    ;pdo_odbc.connection_pooling=strict
    
    ;pdo_odbc.db2_instance_name
    
    [Pdo_mysql]
    ; If mysqlnd is used: Number of cache slots for the internal result set cache
    ; http://php.net/pdo_mysql.cache_size
    pdo_mysql.cache_size = 2000
    
    ; Default socket name for local MySQL connects.  If empty, uses the built-in
    ; MySQL defaults.
    ; http://php.net/pdo_mysql.default-socket
    pdo_mysql.default_socket=
    
    [Phar]
    ; http://php.net/phar.readonly
    ;phar.readonly = On
    
    ; http://php.net/phar.require-hash
    ;phar.require_hash = On
    
    ;phar.cache_list =
    
    [mail function]
    ; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
    ; http://php.net/sendmail-path
    sendmail_path = /usr/sbin/sendmail -t -i
    
    ; Force the addition of the specified parameters to be passed as extra parameters
    ; to the sendmail binary. These parameters will always replace the value of
    ; the 5th parameter to mail(), even in safe mode.
    ;mail.force_extra_parameters =
    
    ; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
    mail.add_x_header = On
    
    ; The path to a log file that will log all mail() calls. Log entries include
    ; the full path of the script, line number, To address and headers.
    ;mail.log =
    ; Log mail to syslog (Event Log on NT, not valid in Windows 95).
    ;mail.log = syslog
    
    [SQL]
    ; http://php.net/sql.safe-mode
    sql.safe_mode = Off
    
    [ODBC]
    ; http://php.net/odbc.default-db
    ;odbc.default_db    =  Not yet implemented
    
    ; http://php.net/odbc.default-user
    ;odbc.default_user  =  Not yet implemented
    
    ; http://php.net/odbc.default-pw
    ;odbc.default_pw    =  Not yet implemented
    
    ; Controls the ODBC cursor model.
    ; Default: SQL_CURSOR_STATIC (default).
    ;odbc.default_cursortype
    
    ; Allow or prevent persistent links.
    ; http://php.net/odbc.allow-persistent
    odbc.allow_persistent = On
    
    ; Check that a connection is still valid before reuse.
    ; http://php.net/odbc.check-persistent
    odbc.check_persistent = On
    
    ; Maximum number of persistent links.  -1 means no limit.
    ; http://php.net/odbc.max-persistent
    odbc.max_persistent = -1
    
    ; Maximum number of links (persistent + non-persistent).  -1 means no limit.
    ; http://php.net/odbc.max-links
    odbc.max_links = -1
    
    ; Handling of LONG fields.  Returns number of bytes to variables.  0 means
    ; passthru.
    ; http://php.net/odbc.defaultlrl
    odbc.defaultlrl = 4096
    
    ; Handling of binary data.  0 means passthru, 1 return as is, 2 convert to char.
    ; See the documentation on odbc_binmode and odbc_longreadlen for an explanation
    ; of odbc.defaultlrl and odbc.defaultbinmode
    ; http://php.net/odbc.defaultbinmode
    odbc.defaultbinmode = 1
    
    ;birdstep.max_links = -1
    
    [Interbase]
    ; Allow or prevent persistent links.
    ibase.allow_persistent = 1
    
    ; Maximum number of persistent links.  -1 means no limit.
    ibase.max_persistent = -1
    
    ; Maximum number of links (persistent + non-persistent).  -1 means no limit.
    ibase.max_links = -1
    
    ; Default database name for ibase_connect().
    ;ibase.default_db =
    
    ; Default username for ibase_connect().
    ;ibase.default_user =
    
    ; Default password for ibase_connect().
    ;ibase.default_password =
    
    ; Default charset for ibase_connect().
    ;ibase.default_charset =
    
    ; Default timestamp format.
    ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
    
    ; Default date format.
    ibase.dateformat = "%Y-%m-%d"
    
    ; Default time format.
    ibase.timeformat = "%H:%M:%S"
    
    [MySQL]
    ; Allow accessing, from PHP's perspective, local files with LOAD DATA statements
    ; http://php.net/mysql.allow_local_infile
    mysql.allow_local_infile = On
    
    ; Allow or prevent persistent links.
    ; http://php.net/mysql.allow-persistent
    mysql.allow_persistent = On
    
    ; If mysqlnd is used: Number of cache slots for the internal result set cache
    ; http://php.net/mysql.cache_size
    mysql.cache_size = 2000
    
    ; Maximum number of persistent links.  -1 means no limit.
    ; http://php.net/mysql.max-persistent
    mysql.max_persistent = -1
    
    ; Maximum number of links (persistent + non-persistent).  -1 means no limit.
    ; http://php.net/mysql.max-links
    mysql.max_links = -1
    
    ; Default port number for mysql_connect().  If unset, mysql_connect() will use
    ; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
    ; compile-time value defined MYSQL_PORT (in that order).  Win32 will only look
    ; at MYSQL_PORT.
    ; http://php.net/mysql.default-port
    mysql.default_port =
    
    ; Default socket name for local MySQL connects.  If empty, uses the built-in
    ; MySQL defaults.
    ; http://php.net/mysql.default-socket
    mysql.default_socket =
    
    ; Default host for mysql_connect() (doesn't apply in safe mode).
    ; http://php.net/mysql.default-host
    mysql.default_host =
    
    ; Default user for mysql_connect() (doesn't apply in safe mode).
    ; http://php.net/mysql.default-user
    mysql.default_user =
    
    ; Default password for mysql_connect() (doesn't apply in safe mode).
    ; Note that this is generally a *bad* idea to store passwords in this file.
    ; *Any* user with PHP access can run 'echo get_cfg_var("mysql.default_password")
    ; and reveal this password!  And of course, any users with read access to this
    ; file will be able to reveal the password as well.
    ; http://php.net/mysql.default-password
    mysql.default_password =
    
    ; Maximum time (in seconds) for connect timeout. -1 means no limit
    ; http://php.net/mysql.connect-timeout
    mysql.connect_timeout = 60
    
    ; Trace mode. When trace_mode is active (=On), warnings for table/index scans and
    ; SQL-Errors will be displayed.
    ; http://php.net/mysql.trace-mode
    mysql.trace_mode = Off
    
    [MySQLi]
    
    ; Maximum number of persistent links.  -1 means no limit.
    ; http://php.net/mysqli.max-persistent
    mysqli.max_persistent = -1
    
    ; Allow accessing, from PHP's perspective, local files with LOAD DATA statements
    ; http://php.net/mysqli.allow_local_infile
    ;mysqli.allow_local_infile = On
    
    ; Allow or prevent persistent links.
    ; http://php.net/mysqli.allow-persistent
    mysqli.allow_persistent = On
    
    ; Maximum number of links.  -1 means no limit.
    ; http://php.net/mysqli.max-links
    mysqli.max_links = -1
    
    ; If mysqlnd is used: Number of cache slots for the internal result set cache
    ; http://php.net/mysqli.cache_size
    mysqli.cache_size = 2000
    
    ; Default port number for mysqli_connect().  If unset, mysqli_connect() will use
    ; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
    ; compile-time value defined MYSQL_PORT (in that order).  Win32 will only look
    ; at MYSQL_PORT.
    ; http://php.net/mysqli.default-port
    mysqli.default_port = 3306
    
    ; Default socket name for local MySQL connects.  If empty, uses the built-in
    ; MySQL defaults.
    ; http://php.net/mysqli.default-socket
    mysqli.default_socket =
    
    ; Default host for mysql_connect() (doesn't apply in safe mode).
    ; http://php.net/mysqli.default-host
    mysqli.default_host =
    
    ; Default user for mysql_connect() (doesn't apply in safe mode).
    ; http://php.net/mysqli.default-user
    mysqli.default_user =
    
    ; Default password for mysqli_connect() (doesn't apply in safe mode).
    ; Note that this is generally a *bad* idea to store passwords in this file.
    ; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw")
    ; and reveal this password!  And of course, any users with read access to this
    ; file will be able to reveal the password as well.
    ; http://php.net/mysqli.default-pw
    mysqli.default_pw =
    
    ; Allow or prevent reconnect
    mysqli.reconnect = Off
    
    [mysqlnd]
    ; Enable / Disable collection of general statistics by mysqlnd which can be
    ; used to tune and monitor MySQL operations.
    ; http://php.net/mysqlnd.collect_statistics
    mysqlnd.collect_statistics = On
    
    ; Enable / Disable collection of memory usage statistics by mysqlnd which can be
    ; used to tune and monitor MySQL operations.
    ; http://php.net/mysqlnd.collect_memory_statistics
    mysqlnd.collect_memory_statistics = Off
    
    ; Size of a pre-allocated buffer used when sending commands to MySQL in bytes.
    ; http://php.net/mysqlnd.net_cmd_buffer_size
    ;mysqlnd.net_cmd_buffer_size = 2048
    
    ; Size of a pre-allocated buffer used for reading data sent by the server in
    ; bytes.
    ; http://php.net/mysqlnd.net_read_buffer_size
    ;mysqlnd.net_read_buffer_size = 32768
    
    [OCI8]
    
    ; Connection: Enables privileged connections using external
    ; credentials (OCI_SYSOPER, OCI_SYSDBA)
    ; http://php.net/oci8.privileged-connect
    ;oci8.privileged_connect = Off
    
    ; Connection: The maximum number of persistent OCI8 connections per
    ; process. Using -1 means no limit.
    ; http://php.net/oci8.max-persistent
    ;oci8.max_persistent = -1
    
    ; Connection: The maximum number of seconds a process is allowed to
    ; maintain an idle persistent connection. Using -1 means idle
    ; persistent connections will be maintained forever.
    ; http://php.net/oci8.persistent-timeout
    ;oci8.persistent_timeout = -1
    
    ; Connection: The number of seconds that must pass before issuing a
    ; ping during oci_pconnect() to check the connection validity. When
    ; set to 0, each oci_pconnect() will cause a ping. Using -1 disables
    ; pings completely.
    ; http://php.net/oci8.ping-interval
    ;oci8.ping_interval = 60
    
    ; Connection: Set this to a user chosen connection class to be used
    ; for all pooled server requests with Oracle 11g Database Resident
    ; Connection Pooling (DRCP).  To use DRCP, this value should be set to
    ; the same string for all web servers running the same application,
    ; the database pool must be configured, and the connection string must
    ; specify to use a pooled server.
    ;oci8.connection_class =
    
    ; High Availability: Using On lets PHP receive Fast Application
    ; Notification (FAN) events generated when a database node fails. The
    ; database must also be configured to post FAN events.
    ;oci8.events = Off
    
    ; Tuning: This option enables statement caching, and specifies how
    ; many statements to cache. Using 0 disables statement caching.
    ; http://php.net/oci8.statement-cache-size
    ;oci8.statement_cache_size = 20
    
    ; Tuning: Enables statement prefetching and sets the default number of
    ; rows that will be fetched automatically after statement execution.
    ; http://php.net/oci8.default-prefetch
    ;oci8.default_prefetch = 100
    
    ; Compatibility. Using On means oci_close() will not close
    ; oci_connect() and oci_new_connect() connections.
    ; http://php.net/oci8.old-oci-close-semantics
    ;oci8.old_oci_close_semantics = Off
    
    [PostgreSQL]
    ; Allow or prevent persistent links.
    ; http://php.net/pgsql.allow-persistent
    pgsql.allow_persistent = On
    
    ; Detect broken persistent links always with pg_pconnect().
    ; Auto reset feature requires a little overheads.
    ; http://php.net/pgsql.auto-reset-persistent
    pgsql.auto_reset_persistent = Off
    
    ; Maximum number of persistent links.  -1 means no limit.
    ; http://php.net/pgsql.max-persistent
    pgsql.max_persistent = -1
    
    ; Maximum number of links (persistent+non persistent).  -1 means no limit.
    ; http://php.net/pgsql.max-links
    pgsql.max_links = -1
    
    ; Ignore PostgreSQL backends Notice message or not.
    ; Notice message logging require a little overheads.
    ; http://php.net/pgsql.ignore-notice
    pgsql.ignore_notice = 0
    
    ; Log PostgreSQL backends Notice message or not.
    ; Unless pgsql.ignore_notice=0, module cannot log notice message.
    ; http://php.net/pgsql.log-notice
    pgsql.log_notice = 0
    
    [Sybase-CT]
    ; Allow or prevent persistent links.
    ; http://php.net/sybct.allow-persistent
    sybct.allow_persistent = On
    
    ; Maximum number of persistent links.  -1 means no limit.
    ; http://php.net/sybct.max-persistent
    sybct.max_persistent = -1
    
    ; Maximum number of links (persistent + non-persistent).  -1 means no limit.
    ; http://php.net/sybct.max-links
    sybct.max_links = -1
    
    ; Minimum server message severity to display.
    ; http://php.net/sybct.min-server-severity
    sybct.min_server_severity = 10
    
    ; Minimum client message severity to display.
    ; http://php.net/sybct.min-client-severity
    sybct.min_client_severity = 10
    
    ; Set per-context timeout
    ; http://php.net/sybct.timeout
    ;sybct.timeout=
    
    ;sybct.packet_size
    
    ; The maximum time in seconds to wait for a connection attempt to succeed before returning failure.
    ; Default: one minute
    ;sybct.login_timeout=
    
    ; The name of the host you claim to be connecting from, for display by sp_who.
    ; Default: none
    ;sybct.hostname=
    
    ; Allows you to define how often deadlocks are to be retried. -1 means "forever".
    ; Default: 0
    ;sybct.deadlock_retry_count=
    
    [bcmath]
    ; Number of decimal digits for all bcmath functions.
    ; http://php.net/bcmath.scale
    bcmath.scale = 0
    
    [browscap]
    ; http://php.net/browscap
    ;browscap = extra/browscap.ini
    
    [Session]
    ; Handler used to store/retrieve data.
    ; http://php.net/session.save-handler
    session.save_handler = files
    
    ; Argument passed to save_handler.  In the case of files, this is the path
    ; where data files are stored. Note: Windows users have to change this
    ; variable in order to use PHP's session functions.
    ;
    ; The path can be defined as:
    ;
    ;     session.save_path = "N;/path"
    ;
    ; where N is an integer.  Instead of storing all the session files in
    ; /path, what this will do is use subdirectories N-levels deep, and
    ; store the session data in those directories.  This is useful if you
    ; or your OS have problems with lots of files in one directory, and is
    ; a more efficient layout for servers that handle lots of sessions.
    ;
    ; NOTE 1: PHP will not create this directory structure automatically.
    ;         You can use the script in the ext/session dir for that purpose.
    ; NOTE 2: See the section on garbage collection below if you choose to
    ;         use subdirectories for session storage
    ;
    ; The file storage module creates files using mode 600 by default.
    ; You can change that by using
    ;
    ;     session.save_path = "N;MODE;/path"
    ;
    ; where MODE is the octal representation of the mode. Note that this
    ; does not overwrite the process's umask.
    ; http://php.net/session.save-path
    
    ; RPM note : session directory must be owned by process owner
    ; for mod_php, see /etc/httpd/conf.d/php.conf
    ; for php-fpm, see /etc/php-fpm.d/*conf
    ;session.save_path = "/tmp"
    
    ; Whether to use strict session mode.
    ; Strict session mode does not accept uninitialized session ID and regenerate
    ; session ID if browser sends uninitialized session ID. Strict mode protects
    ; applications from session fixation via session adoption vulnerability. It is
    ; disabled by default for maximum compatibility, but enabling it is encouraged.
    ; https://wiki.php.net/rfc/strict_sessions
    session.use_strict_mode = 0
    
    ; Whether to use cookies.
    ; http://php.net/session.use-cookies
    session.use_cookies = 1
    
    ; http://php.net/session.cookie-secure
    ;session.cookie_secure =
    
    ; This option forces PHP to fetch and use a cookie for storing and maintaining
    ; the session id. We encourage this operation as it's very helpful in combating
    ; session hijacking when not specifying and managing your own session id. It is
    ; not the end all be all of session hijacking defense, but it's a good start.
    ; http://php.net/session.use-only-cookies
    session.use_only_cookies = 1
    
    ; Name of the session (used as cookie name).
    ; http://php.net/session.name
    session.name = PHPSESSID
    
    ; Initialize session on request startup.
    ; http://php.net/session.auto-start
    session.auto_start = 0
    
    ; Lifetime in seconds of cookie or, if 0, until browser is restarted.
    ; http://php.net/session.cookie-lifetime
    session.cookie_lifetime = 0
    
    ; The path for which the cookie is valid.
    ; http://php.net/session.cookie-path
    session.cookie_path = /
    
    ; The domain for which the cookie is valid.
    ; http://php.net/session.cookie-domain
    session.cookie_domain =
    
    ; Whether or not to add the httpOnly flag to the cookie, which makes it inaccessible to browser scripting languages such as JavaScript.
    ; http://php.net/session.cookie-httponly
    session.cookie_httponly =
    
    ; Handler used to serialize data.  php is the standard serializer of PHP.
    ; http://php.net/session.serialize-handler
    session.serialize_handler = php
    
    ; Defines the probability that the 'garbage collection' process is started
    ; on every session initialization. The probability is calculated by using
    ; gc_probability/gc_divisor. Where session.gc_probability is the numerator
    ; and gc_divisor is the denominator in the equation. Setting this value to 1
    ; when the session.gc_divisor value is 100 will give you approximately a 1% chance
    ; the gc will run on any give request.
    ; Default Value: 1
    ; Development Value: 1
    ; Production Value: 1
    ; http://php.net/session.gc-probability
    session.gc_probability = 1
    
    ; Defines the probability that the 'garbage collection' process is started on every
    ; session initialization. The probability is calculated by using the following equation:
    ; gc_probability/gc_divisor. Where session.gc_probability is the numerator and
    ; session.gc_divisor is the denominator in the equation. Setting this value to 1
    ; when the session.gc_divisor value is 100 will give you approximately a 1% chance
    ; the gc will run on any give request. Increasing this value to 1000 will give you
    ; a 0.1% chance the gc will run on any give request. For high volume production servers,
    ; this is a more efficient approach.
    ; Default Value: 100
    ; Development Value: 1000
    ; Production Value: 1000
    ; http://php.net/session.gc-divisor
    session.gc_divisor = 1000
    
    ; After this number of seconds, stored data will be seen as 'garbage' and
    ; cleaned up by the garbage collection process.
    ; http://php.net/session.gc-maxlifetime
    session.gc_maxlifetime = 1440
    
    ; NOTE: If you are using the subdirectory option for storing session files
    ;       (see session.save_path above), then garbage collection does *not*
    ;       happen automatically.  You will need to do your own garbage
    ;       collection through a shell script, cron entry, or some other method.
    ;       For example, the following script would is the equivalent of
    ;       setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
    ;          find /path/to/sessions -cmin +24 -type f | xargs rm
    
    ; PHP 4.2 and less have an undocumented feature/bug that allows you to
    ; to initialize a session variable in the global scope.
    ; PHP 4.3 and later will warn you, if this feature is used.
    ; You can disable the feature and the warning separately. At this time,
    ; the warning is only displayed, if bug_compat_42 is enabled. This feature
    ; introduces some serious security problems if not handled correctly. It's
    ; recommended that you do not use this feature on production servers. But you
    ; should enable this on development servers and enable the warning as well. If you
    ; do not enable the feature on development servers, you won't be warned when it's
    ; used and debugging errors caused by this can be difficult to track down.
    ; Default Value: On
    ; Development Value: On
    ; Production Value: Off
    ; http://php.net/session.bug-compat-42
    session.bug_compat_42 = Off
    
    ; This setting controls whether or not you are warned by PHP when initializing a
    ; session value into the global space. session.bug_compat_42 must be enabled before
    ; these warnings can be issued by PHP. See the directive above for more information.
    ; Default Value: On
    ; Development Value: On
    ; Production Value: Off
    ; http://php.net/session.bug-compat-warn
    session.bug_compat_warn = Off
    
    ; Check HTTP Referer to invalidate externally stored URLs containing ids.
    ; HTTP_REFERER has to contain this substring for the session to be
    ; considered as valid.
    ; http://php.net/session.referer-check
    session.referer_check =
    
    ; How many bytes to read from the file.
    ; http://php.net/session.entropy-length
    ;session.entropy_length = 32
    
    ; Specified here to create the session id.
    ; http://php.net/session.entropy-file
    ; Defaults to /dev/urandom
    ; On systems that don't have /dev/urandom but do have /dev/arandom, this will default to /dev/arandom
    ; If neither are found at compile time, the default is no entropy file.
    ; On windows, setting the entropy_length setting will activate the
    ; Windows random source (using the CryptoAPI)
    ;session.entropy_file = /dev/urandom
    
    ; Set to {nocache,private,public,} to determine HTTP caching aspects
    ; or leave this empty to avoid sending anti-caching headers.
    ; http://php.net/session.cache-limiter
    session.cache_limiter = nocache
    
    ; Document expires after n minutes.
    ; http://php.net/session.cache-expire
    session.cache_expire = 180
    
    ; trans sid support is disabled by default.
    ; Use of trans sid may risk your users security.
    ; Use this option with caution.
    ; - User may send URL contains active session ID
    ;   to other person via. email/irc/etc.
    ; - URL that contains active session ID may be stored
    ;   in publicly accessible computer.
    ; - User may access your site with the same session ID
    ;   always using URL stored in browser's history or bookmarks.
    ; http://php.net/session.use-trans-sid
    session.use_trans_sid = 0
    
    ; Select a hash function for use in generating session ids.
    ; Possible Values
    ;   0  (MD5 128 bits)
    ;   1  (SHA-1 160 bits)
    ; This option may also be set to the name of any hash function supported by
    ; the hash extension. A list of available hashes is returned by the hash_algos()
    ; function.
    ; http://php.net/session.hash-function
    session.hash_function = 0
    
    ; Define how many bits are stored in each character when converting
    ; the binary hash data to something readable.
    ; Possible values:
    ;   4  (4 bits: 0-9, a-f)
    ;   5  (5 bits: 0-9, a-v)
    ;   6  (6 bits: 0-9, a-z, A-Z, "-", ",")
    ; Default Value: 4
    ; Development Value: 5
    ; Production Value: 5
    ; http://php.net/session.hash-bits-per-character
    session.hash_bits_per_character = 5
    
    ; The URL rewriter will look for URLs in a defined set of HTML tags.
    ; form/fieldset are special; if you include them here, the rewriter will
    ; add a hidden <input> field with the info which is otherwise appended
    ; to URLs.  If you want XHTML conformity, remove the form entry.
    ; Note that all valid entries require a "=", even if no value follows.
    ; Default Value: "a=href,area=href,frame=src,form=,fieldset="
    ; Development Value: "a=href,area=href,frame=src,input=src,form=fakeentry"
    ; Production Value: "a=href,area=href,frame=src,input=src,form=fakeentry"
    ; http://php.net/url-rewriter.tags
    url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
    
    ; Enable upload progress tracking in $_SESSION
    ; Default Value: On
    ; Development Value: On
    ; Production Value: On
    ; http://php.net/session.upload-progress.enabled
    ;session.upload_progress.enabled = On
    
    ; Cleanup the progress information as soon as all POST data has been read
    ; (i.e. upload completed).
    ; Default Value: On
    ; Development Value: On
    ; Production Value: On
    ; http://php.net/session.upload-progress.cleanup
    ;session.upload_progress.cleanup = On
    
    ; A prefix used for the upload progress key in $_SESSION
    ; Default Value: "upload_progress_"
    ; Development Value: "upload_progress_"
    ; Production Value: "upload_progress_"
    ; http://php.net/session.upload-progress.prefix
    ;session.upload_progress.prefix = "upload_progress_"
    
    ; The index name (concatenated with the prefix) in $_SESSION
    ; containing the upload progress information
    ; Default Value: "PHP_SESSION_UPLOAD_PROGRESS"
    ; Development Value: "PHP_SESSION_UPLOAD_PROGRESS"
    ; Production Value: "PHP_SESSION_UPLOAD_PROGRESS"
    ; http://php.net/session.upload-progress.name
    ;session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS"
    
    ; How frequently the upload progress should be updated.
    ; Given either in percentages (per-file), or in bytes
    ; Default Value: "1%"
    ; Development Value: "1%"
    ; Production Value: "1%"
    ; http://php.net/session.upload-progress.freq
    ;session.upload_progress.freq =  "1%"
    
    ; The minimum delay between updates, in seconds
    ; Default Value: 1
    ; Development Value: 1
    ; Production Value: 1
    ; http://php.net/session.upload-progress.min-freq
    ;session.upload_progress.min_freq = "1"
    
    [MSSQL]
    ; Allow or prevent persistent links.
    mssql.allow_persistent = On
    
    ; Maximum number of persistent links.  -1 means no limit.
    mssql.max_persistent = -1
    
    ; Maximum number of links (persistent+non persistent).  -1 means no limit.
    mssql.max_links = -1
    
    ; Minimum error severity to display.
    mssql.min_error_severity = 10
    
    ; Minimum message severity to display.
    mssql.min_message_severity = 10
    
    ; Compatibility mode with old versions of PHP 3.0.
    mssql.compatibility_mode = Off
    
    ; Connect timeout
    ;mssql.connect_timeout = 5
    
    ; Query timeout
    ;mssql.timeout = 60
    
    ; Valid range 0 - 2147483647.  Default = 4096.
    ;mssql.textlimit = 4096
    
    ; Valid range 0 - 2147483647.  Default = 4096.
    ;mssql.textsize = 4096
    
    ; Limits the number of records in each batch.  0 = all records in one batch.
    ;mssql.batchsize = 0
    
    ; Specify how datetime and datetim4 columns are returned
    ; On => Returns data converted to SQL server settings
    ; Off => Returns values as YYYY-MM-DD hh:mm:ss
    ;mssql.datetimeconvert = On
    
    ; Use NT authentication when connecting to the server
    mssql.secure_connection = Off
    
    ; Specify max number of processes. -1 = library default
    ; msdlib defaults to 25
    ; FreeTDS defaults to 4096
    ;mssql.max_procs = -1
    
    ; Specify client character set.
    ; If empty or not set the client charset from freetds.conf is used
    ; This is only used when compiled with FreeTDS
    ;mssql.charset = "ISO-8859-1"
    
    [Assertion]
    ; Assert(expr); active by default.
    ; http://php.net/assert.active
    ;assert.active = On
    
    ; Issue a PHP warning for each failed assertion.
    ; http://php.net/assert.warning
    ;assert.warning = On
    
    ; Don't bail out by default.
    ; http://php.net/assert.bail
    ;assert.bail = Off
    
    ; User-function to be called if an assertion fails.
    ; http://php.net/assert.callback
    ;assert.callback = 0
    
    ; Eval the expression with current error_reporting().  Set to true if you want
    ; error_reporting(0) around the eval().
    ; http://php.net/assert.quiet-eval
    ;assert.quiet_eval = 0
    
    [mbstring]
    ; language for internal character representation.
    ; http://php.net/mbstring.language
    ;mbstring.language = Japanese
    
    ; internal/script encoding.
    ; Some encoding cannot work as internal encoding.
    ; (e.g. SJIS, BIG5, ISO-2022-*)
    ; http://php.net/mbstring.internal-encoding
    ;mbstring.internal_encoding = UTF-8
    
    ; http input encoding.
    ; http://php.net/mbstring.http-input
    ;mbstring.http_input = UTF-8
    
    ; http output encoding. mb_output_handler must be
    ; registered as output buffer to function
    ; http://php.net/mbstring.http-output
    ;mbstring.http_output = pass
    
    ; enable automatic encoding translation according to
    ; mbstring.internal_encoding setting. Input chars are
    ; converted to internal encoding by setting this to On.
    ; Note: Do _not_ use automatic encoding translation for
    ;       portable libs/applications.
    ; http://php.net/mbstring.encoding-translation
    ;mbstring.encoding_translation = Off
    
    ; automatic encoding detection order.
    ; auto means
    ; http://php.net/mbstring.detect-order
    ;mbstring.detect_order = auto
    
    ; substitute_character used when character cannot be converted
    ; one from another
    ; http://php.net/mbstring.substitute-character
    ;mbstring.substitute_character = none
    
    ; overload(replace) single byte functions by mbstring functions.
    ; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
    ; etc. Possible values are 0,1,2,4 or combination of them.
    ; For example, 7 for overload everything.
    ; 0: No overload
    ; 1: Overload mail() function
    ; 2: Overload str*() functions
    ; 4: Overload ereg*() functions
    ; http://php.net/mbstring.func-overload
    ;mbstring.func_overload = 0
    
    ; enable strict encoding detection.
    ;mbstring.strict_detection = On
    
    ; This directive specifies the regex pattern of content types for which mb_output_handler()
    ; is activated.
    ; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml\+xml)
    ;mbstring.http_output_conv_mimetype=
    
    [gd]
    ; Tell the jpeg decode to ignore warnings and try to create
    ; a gd image. The warning will then be displayed as notices
    ; disabled by default
    ; http://php.net/gd.jpeg-ignore-warning
    ;gd.jpeg_ignore_warning = 0
    
    [exif]
    ; Exif UNICODE user comments are handled as UCS-2BE/UCS-2LE and JIS as JIS.
    ; With mbstring support this will automatically be converted into the encoding
    ; given by corresponding encode setting. When empty mbstring.internal_encoding
    ; is used. For the decode settings you can distinguish between motorola and
    ; intel byte order. A decode setting cannot be empty.
    ; http://php.net/exif.encode-unicode
    ;exif.encode_unicode = ISO-8859-15
    
    ; http://php.net/exif.decode-unicode-motorola
    ;exif.decode_unicode_motorola = UCS-2BE
    
    ; http://php.net/exif.decode-unicode-intel
    ;exif.decode_unicode_intel    = UCS-2LE
    
    ; http://php.net/exif.encode-jis
    ;exif.encode_jis =
    
    ; http://php.net/exif.decode-jis-motorola
    ;exif.decode_jis_motorola = JIS
    
    ; http://php.net/exif.decode-jis-intel
    ;exif.decode_jis_intel    = JIS
    
    [Tidy]
    ; The path to a default tidy configuration file to use when using tidy
    ; http://php.net/tidy.default-config
    ;tidy.default_config = /usr/local/lib/php/default.tcfg
    
    ; Should tidy clean and repair output automatically?
    ; WARNING: Do not use this option if you are generating non-html content
    ; such as dynamic images
    ; http://php.net/tidy.clean-output
    tidy.clean_output = Off
    
    [soap]
    ; Enables or disables WSDL caching feature.
    ; http://php.net/soap.wsdl-cache-enabled
    soap.wsdl_cache_enabled=1
    
    ; Sets the directory name where SOAP extension will put cache files.
    ; http://php.net/soap.wsdl-cache-dir
    
    ; RPM note : cache directory must be owned by process owner
    ; for mod_php, see /etc/httpd/conf.d/php.conf
    ; for php-fpm, see /etc/php-fpm.d/*conf
    soap.wsdl_cache_dir="/tmp"
    
    ; (time to live) Sets the number of second while cached file will be used
    ; instead of original one.
    ; http://php.net/soap.wsdl-cache-ttl
    soap.wsdl_cache_ttl=86400
    
    ; Sets the size of the cache limit. (Max. number of WSDL files to cache)
    soap.wsdl_cache_limit = 5
    
    [sysvshm]
    ; A default size of the shared memory segment
    ;sysvshm.init_mem = 10000
    
    [ldap]
    ; Sets the maximum number of open links or -1 for unlimited.
    ldap.max_links = -1
    
    [mcrypt]
    ; For more information about mcrypt settings see http://php.net/mcrypt-module-open
    
    ; Directory where to load mcrypt algorithms
    ; Default: Compiled in into libmcrypt (usually /usr/local/lib/libmcrypt)
    ;mcrypt.algorithms_dir=
    
    ; Directory where to load mcrypt modes
    ; Default: Compiled in into libmcrypt (usually /usr/local/lib/libmcrypt)
    ;mcrypt.modes_dir=
    
    [dba]
    ;dba.default_handler=
    
    [curl]
    ; A default value for the CURLOPT_CAINFO option. This is required to be an
    ; absolute path.
    ;curl.cainfo =
    
    ; Local Variables:
    ; tab-width: 4
    ; End:
    
  4. PHPサンプルページテンプレートの作成

    HTTPサーバに設置するPHPのサンプルページのテンプレートを作成します。

    $ vi site-cookbooks/php55/templates/default/phpinfo.php.erb
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>phpinfo</title>
    </head>
    <body>
    <?php
    phpinfo();
    ?>
    </body>
    </html>
    

LAMPサーバの構築

LAMPサーバ構築レシピが作成できましたので、Vagrantfileを編集してLAMPサーバを構築します。

  1. Vagrantfileの編集
    $ vi Vagrantfile
    
    VAGRANTFILE_API_VERSION = "2"
    
    Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
      config.vm.box = "test-box"
      config.vm.box_url = "file://d:/temp/CentOS-6.4-i386-minimal.box"
      config.vm.network "public_network"
    
      # 最新バージョンのChefをインストール
      config.omnibus.chef_version = :latest
    
      # Chefプロビジョニング
      config.vm.provision :chef_solo do |chef|
        # Cookbook検索パスの設定
        chef.cookbooks_path = "../site-cookbooks"
    
        # レシピ指定
        chef.add_recipe "base"    # サーバ基本設定
        chef.add_recipe "repo"    # リポジトリ設定
        chef.add_recipe "httpd"   # HTTPサーバ設定
        chef.add_recipe "mysql"   # MySQL設定
        chef.add_recipe "php55"   # PHP55設定
    
        # レシピパラメタの指定
        chef.json = {
          httpd: {
            admin: "root@chef-centos-6.4-i386-php55.vagrantup.local",
            fqdn: "chef-centos-6.4-i386-php55.vagrantup.local",
            port: 80
          },
          mysql: {
            passwd: "admin"
          },
          php55: {
            timezone: "Asia/Tokyo"
          },
        }
      end
    end
    
  2. Box起動

    BoxにChefがインストールされた後、レシピが実行されてBoxが起動します。

    $ vagrant up
    
    Bringing machine 'default' up with 'virtualbox' provider...
    [default] Box 'test-box' was not found. Fetching box from specified URL for
    the provider 'virtualbox'. Note that if the URL does not have
    a box for this provider, you should interrupt Vagrant now and add
    the box yourself. Otherwise Vagrant will attempt to download the
    full box prior to discovering this error.
    Downloading or copying the box...
    Extracting box...ate: 101M/s, Estimated time remaining: --:--:--)
    Successfully added box 'test-box' with provider 'virtualbox'!
    [default] Importing base box 'test-box'...
    [default] Matching MAC address for NAT networking...
    [default] Setting the name of the VM...
    [default] Clearing any previously set forwarded ports...
    [default] Creating shared folders metadata...
    [default] Clearing any previously set network interfaces...
    [default] Preparing network interfaces based on configuration...
    [default] Forwarding ports...
    [default] -- 22 => 2222 (adapter 1)
    [default] Booting VM...
    [default] Waiting for machine to boot. This may take a few minutes...
    [default] Machine booted and ready!
    GuestAdditions versions on your host (4.3.4) and guest (4.2.18) do not match.
    
    Generating chef JSON and uploading...
    Running chef-solo...
    [2013-12-18T20:38:33+09:00] INFO: Forking chef instance to converge...
    [2013-12-18T20:38:33+09:00] INFO: *** Chef 11.8.0 ***
    [2013-12-18T20:38:33+09:00] INFO: Chef-client pid: 2327
    [2013-12-18T20:38:36+09:00] INFO: Setting the run_list to ["recipe[base]", "recipe[repo]", "recipe[httpd]", "recipe[mysql]", "recipe[php55]"] from CLI options
    [2013-12-18T20:38:36+09:00] INFO: Run List is [recipe[base], recipe[repo], recipe[httpd], recipe[mysql], recipe[php55]]
    [2013-12-18T20:38:36+09:00] INFO: Run List expands to [base, repo, httpd, mysql, php55]
    [2013-12-18T20:38:36+09:00] INFO: Starting Chef Run for localhost
    [2013-12-18T20:38:36+09:00] INFO: Running start handlers
    [2013-12-18T20:38:36+09:00] INFO: Start handlers complete.
    [2013-12-18T20:38:37+09:00] INFO: bash[update hosts] ran successfully
    [2013-12-18T20:38:38+09:00] INFO: bash[set grub.conf] ran successfully
    [2013-12-18T20:38:38+09:00] INFO: template[bashrc] backed up to /var/chef/backup/home/vagrant/.bashrc.chef-20131218203838.975621
    [2013-12-18T20:38:38+09:00] INFO: template[bashrc] updated file contents /home/vagrant/.bashrc
    [2013-12-18T20:38:43+09:00] INFO: package[git] installing git-1.7.1-3.el6_4.1 from base repository
    [2013-12-18T20:38:51+09:00] INFO: package[vim-enhanced] installing vim-enhanced-7.2.411-1.8.el6 from base repository
    [2013-12-18T20:38:57+09:00] INFO: git[/home/vagrant/dotfiles] cloning repo git://github.com/yuroyoro/dotfiles.git to /home/vagrant/dotfiles
    [2013-12-18T20:39:02+09:00] INFO: git[/home/vagrant/dotfiles] checked out branch: master onto: deploy reference: 0a85350a3914a24359ef436474ef2c7125a82ed3
    [2013-12-18T20:39:02+09:00] INFO: bash[dotfiles] ran successfully
    [2013-12-18T20:39:02+09:00] INFO: template[vimrc] created file /home/vagrant/.vimrc
    [2013-12-18T20:39:02+09:00] INFO: template[vimrc] updated file contents /home/vagrant/.vimrc
    [2013-12-18T20:39:02+09:00] INFO: template[vimrc] owner changed to 500
    [2013-12-18T20:39:02+09:00] INFO: template[vimrc] group changed to 500
    [2013-12-18T20:39:02+09:00] INFO: template[vimrc] mode changed to 644
    [2013-12-18T20:43:23+09:00] INFO: bash[update system] ran successfully
    [2013-12-18T20:43:23+09:00] INFO: remote_file[/tmp/RPM-GPG-KEY-EPEL-6] created file /tmp/RPM-GPG-KEY-EPEL-6
    [2013-12-18T20:43:23+09:00] INFO: remote_file[/tmp/RPM-GPG-KEY-EPEL-6] updated file contents /tmp/RPM-GPG-KEY-EPEL-6
    [2013-12-18T20:43:23+09:00] INFO: remote_file[/tmp/RPM-GPG-KEY-remi] created file /tmp/RPM-GPG-KEY-remi
    [2013-12-18T20:43:25+09:00] INFO: remote_file[/tmp/RPM-GPG-KEY-remi] updated file contents /tmp/RPM-GPG-KEY-remi
    [2013-12-18T20:43:25+09:00] INFO: remote_file[/tmp/RPM-GPG-KEY.dag.txt] created file /tmp/RPM-GPG-KEY.dag.txt
    [2013-12-18T20:43:25+09:00] INFO: remote_file[/tmp/RPM-GPG-KEY.dag.txt] updated file contents /tmp/RPM-GPG-KEY.dag.txt
    [2013-12-18T20:43:26+09:00] INFO: bash[import GPG Signature] ran successfully
    [2013-12-18T20:43:26+09:00] INFO: remote_file[/tmp/epel-release-6-8.noarch.rpm] created file /tmp/epel-release-6-8.noarch.rpm
    [2013-12-18T20:43:26+09:00] INFO: remote_file[/tmp/epel-release-6-8.noarch.rpm] updated file contents /tmp/epel-release-6-8.noarch.rpm
    [2013-12-18T20:43:28+09:00] INFO: remote_file[/tmp/remi-release-6.rpm] created file /tmp/remi-release-6.rpm
    [2013-12-18T20:43:30+09:00] INFO: remote_file[/tmp/remi-release-6.rpm] updated file contents /tmp/remi-release-6.rpm
    [2013-12-18T20:43:30+09:00] INFO: remote_file[/tmp/rpmforge-release-0.5.3-1.el6.rf.i686.rpm] created file /tmp/rpmforge-release-0.5.3-1.el6.rf.i686.rpm
    [2013-12-18T20:43:35+09:00] INFO: remote_file[/tmp/rpmforge-release-0.5.3-1.el6.rf.i686.rpm] updated file contents /tmp/rpmforge-release-0.5.3-1.el6.rf.i686.rpm
    [2013-12-18T20:43:36+09:00] INFO: bash[repo] ran successfully
    [2013-12-18T20:43:38+09:00] INFO: package[httpd] installing httpd-2.2.15-30.el6.centos from updates repository
    [2013-12-18T20:43:45+09:00] INFO: service[httpd] started
    [2013-12-18T20:43:46+09:00] INFO: service[httpd] enabled
    [2013-12-18T20:43:59+09:00] INFO: package[mysql-server] installing mysql-server-5.5.37-1.el6.remi from remi repository
    [2013-12-18T20:44:36+09:00] INFO: service[mysqld] started
    [2013-12-18T20:44:37+09:00] INFO: service[mysqld] enabled
    [2013-12-18T20:44:38+09:00] INFO: script[secure_setting] ran successfully
    [2013-12-18T20:44:44+09:00] INFO: package[php] installing php-5.5.12-1.el6.remi from remi-php55 repository
    [2013-12-18T20:45:34+09:00] INFO: package[php-mcrypt] installing php-mcrypt-5.5.12-1.el6.remi from remi-php55 repository
    [2013-12-18T20:45:49+09:00] INFO: package[httpd] sending create action to template[httpd.conf] (delayed)
    [2013-12-18T20:45:49+09:00] INFO: template[httpd.conf] backed up to /var/chef/backup/etc/httpd/conf/httpd.conf.chef-20131218204549.376598
    [2013-12-18T20:45:49+09:00] INFO: template[httpd.conf] updated file contents /etc/httpd/conf/httpd.conf
    [2013-12-18T20:45:49+09:00] INFO: package[mysql-server] sending create action to template[my.cnf] (delayed)
    [2013-12-18T20:45:49+09:00] INFO: template[my.cnf] backed up to /var/chef/backup/etc/my.cnf.chef-20131218204549.459837
    [2013-12-18T20:45:49+09:00] INFO: template[my.cnf] updated file contents /etc/my.cnf
    [2013-12-18T20:45:49+09:00] INFO: script[secure_setting] sending restart action to service[mysqld] (delayed)
    [2013-12-18T20:45:56+09:00] INFO: service[mysqld] restarted
    [2013-12-18T20:45:56+09:00] INFO: package[php] sending create action to template[php.ini] (delayed)
    [2013-12-18T20:45:57+09:00] INFO: template[php.ini] backed up to /var/chef/backup/etc/php.ini.chef-20131218204557.104997
    [2013-12-18T20:45:57+09:00] INFO: template[php.ini] updated file contents /etc/php.ini
    [2013-12-18T20:45:57+09:00] INFO: package[php] sending create action to template[phpinfo.php] (delayed)
    [2013-12-18T20:45:57+09:00] INFO: template[phpinfo.php] created file /var/www/html/phpinfo.php
    [2013-12-18T20:45:57+09:00] INFO: template[phpinfo.php] updated file contents /var/www/html/phpinfo.php
    [2013-12-18T20:45:57+09:00] INFO: template[phpinfo.php] mode changed to 644
    [2013-12-18T20:45:57+09:00] INFO: package[php] sending restart action to service[httpd] (delayed)
    [2013-12-18T20:45:59+09:00] INFO: service[httpd] restarted
    [2013-12-18T20:45:59+09:00] INFO: Chef Run complete in 442.735151681 seconds
    [2013-12-18T20:45:59+09:00] INFO: Running report handlers
    [2013-12-18T20:45:59+09:00] INFO: Report handlers complete
    
    201312182312VCHW10.png