phpにOracle Clientをインストール

php5.4からOracleにアタッチするとかでOracleクライアントのインストール要請。php5.4はすでにyumでインストールされているとして、手順は以下のステップ。

  1. Oracleクライアントのrpmをダウンロード
  2. rpmで上記インストール
  3. Oracleクライアントのライブラリを参照可能なところへリンク
  4. php-oci8をyumでインストール
  5. apache環境変数文字コードを設定

Oracleクライアントのrpmをダウンロード

ブツは http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html このあたりにあります。仕様するアーキテクチャとプラットフォームにあったものをダウンロード。
私の場合は以下の二つをダウンロードしました。

oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm

この二つをrpmでインストール

あまり考えない。あぁでも順番はあるかも。

# rpm -ivh oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
# rpm -ivh oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm

Oracleクライアントのライブラリを参照可能なところへリンク

上記rpmをインストールすると、下記のライブラリが/usr/lib/oracle/12.1/client64/libへインストールされるので、これらを/usr/lib64とか適当なところへリンク。

  libclntsh.so.12.1
  libmql1.so
  libipc1.so
  libnnz12.so
  libons.so
  libclntshcore.so.12.1
  libocci.so
  libclntshcore.so
  libclntsh.so
  libociei.so
  liboramysql12.so

php-oci8をyumでインストール

# yum install php-oci8

apache環境変数文字コードを設定

/etc/sysconfig/httpdへ以下一行追加。もちろん使用する文字コードに合わせて調整。

export NLS_LANG Japanese_Japan.UTF8

chefのレシピとかattributesとか

上記の作業はすべてchef経由で実施しています。レシピとかattributesとかは以下の通り。oracleクライアントのインストールに関する設定は以下。

files/default

以下のファイルを二つ置く。

oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm
attributes/default.rb
default['oracle_client']['rpms'] = [
  {rpm_package_name:"oracle-instantclient12.1-basic",
   rpm_file_name:"oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm"
  } ,
  {rpm_package_name:"oracle-instantclient12.1-devel" ,
   rpm_file_name:"oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm"
  }
]
default['oracle_client']['directory'] = "/usr/lib/oracle/12.1/client64/lib"
default['oracle_client']['todir'] = "/usr/lib64"
default['oracle_client']['libraries'] = [
  "libclntsh.so.12.1",
  "libmql1.so",
  "libipc1.so",
  "libnnz12.so",
  "libons.so",
  "libclntshcore.so.12.1",
  "libocci.so",
  "libclntshcore.so",
  "libclntsh.so",
  "libociei.so",
  "liboramysql12.so"
]
recipes/default.rb
libdir = node['oracle_client']['directory']
todir = node['oracle_client']['todir']

node['oracle_client']['rpms'].each do |rpms|
  cookbook_file "/tmp/#{rpms['rpm_file_name']}" do
    source rpms['rpm_file_name']
  end
  package rpms['rpm_package_name'] do
    provider Chef::Provider::Package::Rpm
    guard_interpreter :bash
    source "/tmp/#{rpms['rpm_file_name']}"
    action :install
  end
end

#
#インストールされるライブラリを/usr/lib64へリンクする。
#
node['oracle_client']['libraries'].each do |libs|
  link "#{todir}/#{libs}" do
    to "#{libdir}/#{libs}"
    link_type :symbolic
  end
end
php-oci8のインストール

phpのインストールレシピ中で適当に。

package "php-oci8" do
  action [:install, :upgrade]
  options "--enablerepo=remi"
end
apache文字コード設定はapacheのattributesに以下を追加
default['apache']['sysconfig_additional_params'] = {"export NLS_LANG"=>"Japanese_Japan.UTF8"}


9年前のエントリSolaris上でphp+oracleの環境をビルドした記事がありました。これと比べると隔世の感がありますね。

3月26日追記

肝心なphp-oci8のインストールが抜けていました。追記しておきました。