2014年11月23日日曜日

perl DBD::Oracle モジュールの rpm 化 (改訂版)


perl DBD::Oracle モジュールの rpm 化 (http://dba-ha.blogspot.jp/2012/02/perl-dbdoracle-rpm.html) の改訂版です。

cpan2rpm のリンク切れもあり、spec ファイルを一から書き起こしました。
rhel7(x86_64), rhel6(x86_64,i686), rhel5(x86_64, i386) で動作確認しました。

perl の DBD::Oracle モジュールを rpm 化します。

Oracle instant client をインストールし、spec ファイルを作成し、rpm パッケージを作成・インストールし、動作確認します。

RHEL6 x86_64 用のもの(Oracle インスタントクライアントは 11.2.0.4.0)を例示していきます。異なる部分は読み替えてください。

Oracle Database Instant Client (http://www.oracle.com/technetwork/database/features/instant-client/index.html) のページにアクセスし以下のようにリンクをたどります。

[See Instant Client downloads for all platforms]
[Instant Client for Linux x86-64]

[Accept License Agreement] をチェックし、以下のファイルをダウンロードします。ダウンロードに際し、サインインするように促されます。
現時点で11バージョンの rpm がダウンロード可能です。11.2.0.4.0の場合を例示します。zip 版は対応していません。

oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm
oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm

必要であれば、以下のファイルもダウンロードします。

oracle-instantclient11.2-jdbc-11.2.0.4.0-1.x86_64.rpm
oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm
oracle-instantclient11.2-tools-11.2.0.4.0-1.x86_64.rpm

Precompiler パッケージも必要であれば、以下のリンクからダウンロードします。
[Instant Client Package - Precompiler:]

oracle-instantclient11.2-precomp-11.2.0.4.0-1.x86_64.rpm

必要なパッケージがそろったらインストールします。


sudo rpm -ivh oracle-instantclient11.2-*-11.2.0.4.0-1.x86_64.rpm


※ 環境により、compat-libstdc++-33 パッケージをインストールする必要があります。最小構成で RHEL をインストールした場合、libaio パッケージも必要となります。

※ RHEL7 では、10g 用クライアントが動きません。以下のようなエラーが発生します。
/lib64/libstdc++.so.5: version `CXXABI_1.2' not found (required by /usr/lib/oracle/10.2.0.3/client64/lib/libocci.so.10.1)
シンボリックリンクを作成(ln -s /lib64/libstdc++.so.6 /lib64/libstdc++.so.5)しても動きません。RHEL7 に compat-libstdc++-33 パッケージを移植したら動くのだと思われますが試していません。

※ RHEL5 x86_64 では、11g、12c 用クライアントを動かす際に、以下のようにシンボリックリンクを作成する必要があります。
sudo ln -s libocci.so.11.1 \
  /usr/lib/oracle/11.2/client64/lib/libocci.so.10.1
sudo ln -s libclntsh.so.11.1 \
  /usr/lib/oracle/11.2/client64/lib/libclntsh.so.10.1


Oracle Database や Oracle Client、別バージョンの Oracle instant client 等をインストールしないのであれば、以下のように登録しておくと便利です。必須ではありません。他プロセスへの影響を考慮して登録しない、という考えも当然あります。登録されていない前提で例示が続きます。


cat << EOF | sudo tee /etc/profile.d/oic.sh
export ORACLE_HOME=$(rpm -ql oracle-instantclient11.2-sqlplus | sed -n -e 's;^\(/usr/lib/oracle/.*\)/bin/sqlplus$;\1;p')
export PATH=\$ORACLE_HOME/bin:\$PATH
EOF
cat << EOF | sudo tee /etc/ld.so.conf.d/oic.conf
$(rpm -ql oracle-instantclient11.2-sqlplus | sed -n -e 's;^\(/usr/lib/oracle/.*\)/bin/sqlplus$;\1;p')/lib
EOF
sudo /sbin/ldconfig


動作確認してみます。


ORACLE_HOME=/usr/lib/oracle/11.2/client64 \
LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib \
/usr/lib/oracle/11.2/client64/bin/sqlplus \
system/password@hostname:1521/sid << 'EOF'
select * from v$instance;
EOF


DBD::Oracle モジュールをビルドするための環境を整えます。


sudo yum -y groupinstall "Development Tools"
sudo yum -y install perl-ExtUtils-MakeMaker perl-DBI libaio compat-libstdc++-33
mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

if grep -q '5\.' /etc/redhat-release; then
  cat << EOF | tee ~/.rpmmacros
%_topdir        $HOME/rpmbuild
%dist           .el5
EOF
fi


CPAN(http://www.cpan.org/authors/id/P/PY/PYTHIAN/) より、DBD::Oracle モジュールのソースコードをダウンロードします。2014年4月24日にリリースされた最新のもの(バージョン1.74)を選択しました。7か月ほど安定版が新規リリースされていないので、いい感じだと期待しています。


curl -L -o ~/rpmbuild/SOURCES/DBD-Oracle-1.74.tar.gz \
  http://search.cpan.org/CPAN/authors/id/P/PY/PYTHIAN/DBD-Oracle-1.74.tar.gz


spec ファイルを作成します。GitHub に置きましたので、ダウンロードします。


curl -L -o ~/rpmbuild/SPECS/perl-DBD-Oracle.spec \
  https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle.spec


spec ファイルは以下のようになっています。


%define name perl-DBD-Oracle
%define pkgname %(echo %{name}| sed 's/perl-//')
%{!?version:%define version 1.74}
%{!?oi_ver:%define oi_ver instantclient11.2}
%{!?oi_release:%define oi_release 11.2.0.4.0}
%define release %{oi_release}%{dist}
%define perl_vendorarch %(eval "$(%{__perl} -V:installvendorarch)"; echo $installvendorarch)
%define _use_internal_dependency_generator 0
%define custom_find_req %{_tmppath}/%{pkgname}-%{version}-find-requires
%define __find_requires %{custom_find_req}
%define __perl_requires %{custom_find_req}

Name:      %{name}
Version:   %{version}
Release:   %{release}
Summary:   DBD-Oracle - Oracle database driver for the DBI module
Group:     Development/Libraries
Vendor:    Tim Bunce <timb@cpan.org>, John Scoles <byterock@cpan.org>, Yanick Champoux <yanick@cpan.org>, Martin J. Evans <mjevans@cpan.org>
Packager:  dba@ha <hamada@pc-office.net>
License:   GPL+ or Artistic
URL:       https://github.com/pythian/DBD-Oracle
Source0:   %{pkgname}-%{version}.tar.gz
BuildRoot: %{_tmppath}/perl-DBD-Oracle-buildroot/
Requires:  libaio
Requires:  perl(:MODULE_COMPAT_%(eval "$(%{__perl} -V:version)"; echo $version))
Requires:  perl(ExtUtils::MakeMaker) >= 6.30
Requires:  perl(DBI) >= 1.51
Requires:  oracle-%{oi_ver}-basic = %{oi_release}
BuildRequires: oracle-%{oi_ver}-devel = %{oi_release}
BuildRequires: oracle-%{oi_ver}-sqlplus = %{oi_release}
Provides:  perl(DBD-Oracle) = %{version}

%description
DBD::Oracle is a Perl module which works with the DBI module to provide
access to Oracle databases.
This documentation describes driver specific behaviour and restrictions.
It is not supposed to be used as the only reference for the user.
In any case consult the DBI documentation first!

%prep
%setup -q -n %{pkgname}-%{version}
chmod -R u+w %{_builddir}/%{pkgname}-%{version}

%build
export ORACLE_HOME=$(dirname $(dirname $(rpm -ql oracle-%{oi_ver}-sqlplus | grep '/usr/lib/oracle/.*/sqlplus')))
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
MKFILE=$(rpm -ql oracle-%{oi_ver}-devel | grep demo.mk)
%{__perl} Makefile.PL -m $MKFILE INSTALLDIRS="vendor" PREFIX=%{_prefix} -V %{oi_release}
%{__make} %{?_smp_mflags} OPTIMIZE="%{optflags}"

%install
[ "%{buildroot}" != "/" ] && rm -rf %{buildroot}
cat << 'EOF' > %{custom_find_req}
#!/bin/sh
/usr/lib/rpm/redhat/find-requires | grep -v -e 'libclntsh.so.' -e 'libocci.so.'
EOF
chmod 755 %{custom_find_req}
%{__make} PREFIX=$RPM_BUILD_ROOT%{_prefix} pure_install
rm -f $(find $RPM_BUILD_ROOT -type f -name perllocal.pod -o -name .packlist)

%clean
[ "%{buildroot}" != "/" ] && rm -rf %{buildroot}
rm -f %{custom_find_req}

%files
%defattr(-,root,root)
%defattr(-,root,root)
%{perl_vendorarch}/auto/DBD/
%{perl_vendorarch}/DBD/
%{_mandir}/man3/*

%changelog
* Fri Nov 21 2014 dba@ha <hamada@pc-office.net>
- Initial build.



version, oi_version, oi_release をコマンドラインで指定可能にしているので、spec ファイル自体を書き換えなくてもバージョンアップに対応可能です。「rpmbuild -bb --define "version 1.74" --define "oi_ver instantclient12.1" --define "oi_release 12.1.0.2.0" ~/rpmbuild/SPECS/perl-DBD-Oracle.spec」のように指定します。src.rpm を作成する場合には、spec ファイルの太字部分を書き直した方がよいと思います。

ビルドしてインストールします。


rpmbuild -bb ~/rpmbuild/SPECS/perl-DBD-Oracle.spec
sudo yum localinstall ~/rpmbuild/RPMS/x86_64/perl-DBD-Oracle-1.74-11.2.0.4.0.el6.x86_64.rpm


※ ビルドした rpm を実行環境に持っていく場合、「yum localinstall perl-DBD-Oracle-*.rpm」コマンドを実行すれば依存関係で必要となるものが入るようにしています。ただし、10g クライアントをインストールする場合には、compat-libstdc++-33 パッケージを別途インストールする必要があります。本来、Oracleインスタントクライアントの rpm がカバーすべき範囲ですが、libaio も含め、依存関係が定義されていません。libaio は perl-DBD-Oracle の依存関係に含めましたが、RHEL7 に compat-libstdc++-33 パッケージが存在しないので、依存関係に入れませんでした。

動作確認します。


cat << 'EOF' | tee test.pl
#!/usr/bin/perl
use strict;
use DBI;
my $hDb = DBI->connect('dbi:Oracle:host=hostname;sid=sid;port=1521', "system/password") or die "CONNECT ERROR $DBI::errstr";
my $hSt = $hDb->prepare('select * from v$instance');
my $nRes = $hSt->execute;
while(my $raRes = $hSt->fetchrow_arrayref) {
  print join("\t", @$raRes), "\n";
}
$hSt->finish;
$hDb->disconnect;
EOF
chmod 755 test.pl
ORACLE_HOME=/usr/lib/oracle/11.2/client64 LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib ./test.pl


ビルドしたパッケージも記念に GitHub におきました。環境ごとにビルドしなおすことをお勧めしておきます。
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-10.2.0.3.el5.i386.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-10.2.0.3.el5.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-10.2.0.3.el5.x86_64.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-10.2.0.3.el6.i686.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-10.2.0.3.el6.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-10.2.0.3.el6.x86_64.rpm

https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-10.2.0.4.el5.i386.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-10.2.0.4.el5.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-10.2.0.4.el5.x86_64.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-10.2.0.4.el6.i686.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-10.2.0.4.el6.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-10.2.0.4.el6.x86_64.rpm

https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-10.2.0.5.el5.i386.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-10.2.0.5.el5.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-10.2.0.5.el5.x86_64.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-10.2.0.5.el6.i686.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-10.2.0.5.el6.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-10.2.0.5.el6.x86_64.rpm

https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.1.0.1.el5.i386.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.1.0.1.el5.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.1.0.1.el5.x86_64.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.1.0.1.el6.i686.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.1.0.1.el6.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.1.0.1.el6.x86_64.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.1.0.1.el7.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.1.0.1.el7.x86_64.rpm

https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.1.0.7.0.el5.i386.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.1.0.7.0.el5.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.1.0.7.0.el5.x86_64.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.1.0.7.0.el6.i686.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.1.0.7.0.el6.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.1.0.7.0.el6.x86_64.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.1.0.7.0.el7.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.1.0.7.0.el7.x86_64.rpm

https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.1.0.el5.i386.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.1.0.el5.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.1.0.el5.x86_64.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.1.0.el6.i686.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.1.0.el6.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.1.0.el6.x86_64.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.1.0.el7.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.1.0.el7.x86_64.rpm

https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.2.0.el5.i386.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.2.0.el5.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.2.0.el5.x86_64.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.2.0.el6.i686.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.2.0.el6.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.2.0.el6.x86_64.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.2.0.el7.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.2.0.el7.x86_64.rpm

https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.3.0.el5.i386.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.3.0.el5.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.3.0.el5.x86_64.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.3.0.el6.i686.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.3.0.el6.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.3.0.el6.x86_64.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.3.0.el7.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.3.0.el7.x86_64.rpm

https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.4.0.el5.i386.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.4.0.el5.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.4.0.el5.x86_64.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.4.0.el6.i686.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.4.0.el6.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.4.0.el6.x86_64.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.4.0.el7.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-11.2.0.4.0.el7.x86_64.rpm

https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-12.1.0.1.0.el5.i386.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-12.1.0.1.0.el5.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-12.1.0.1.0.el5.x86_64.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-12.1.0.1.0.el6.i686.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-12.1.0.1.0.el6.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-12.1.0.1.0.el6.x86_64.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-12.1.0.1.0.el7.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-12.1.0.1.0.el7.x86_64.rpm

https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-12.1.0.2.0.el5.i386.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-12.1.0.2.0.el5.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-12.1.0.2.0.el5.x86_64.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-12.1.0.2.0.el6.i686.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-12.1.0.2.0.el6.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-12.1.0.2.0.el6.x86_64.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-12.1.0.2.0.el7.src.rpm
https://raw.githubusercontent.com/pcserver-jp/perl-DBD-Oracle/master/perl-DBD-Oracle-1.74-12.1.0.2.0.el7.x86_64.rpm
以下のコマンドでビルドしました。


sudo yum -y remove oracle-instantclient\* perl-DBD-Oracle
rm -f rpmbuild/RPMS/*86*/* rpmbuild/SRPMS/*

if ! grep -q '7\.' /etc/redhat-release; then
sudo rpm -Uvh oracle-instantclient-{basic,devel,sqlplus}-10.2.0.3-1.*86*.rpm
sed -i \
  -e 's/version \([0-9.]*\)/version 1.74/' \
  -e 's/oi_ver instantclient[012.]*/oi_ver instantclient/' \
  -e 's/oi_release [0-9.]*/oi_release 10.2.0.3/' \
  ~/rpmbuild/SPECS/perl-DBD-Oracle.spec
rpmbuild -ba ~/rpmbuild/SPECS/perl-DBD-Oracle.spec
sudo rpm -Uvh ~/rpmbuild/RPMS/*86*/perl-DBD-Oracle-1.74-10.2.0.3.el?.*86*.rpm
[ $(uname -m) = x86_64  ] && ORACLE_HOME=/usr/lib/oracle/10.2.0.3/client64 LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.3/client64/lib ./test.pl
[ $(uname -m) = x86_64  ] || ORACLE_HOME=/usr/lib/oracle/10.2.0.3/client LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.3/client/lib ./test.pl
sudo rpm -e oracle-instantclient-{basic,devel,sqlplus} perl-DBD-Oracle
fi

if ! grep -q '7\.' /etc/redhat-release; then
sudo rpm -Uvh oracle-instantclient-{basic,devel,sqlplus}-10.2.0.4-1.*86*.rpm
sed -i \
  -e 's/version [0-9.]*/version 1.74/' \
  -e 's/oi_ver instantclient[012.]*/oi_ver instantclient/' \
  -e 's/oi_release [0-9.]*/oi_release 10.2.0.4/' \
  ~/rpmbuild/SPECS/perl-DBD-Oracle.spec
rpmbuild -ba ~/rpmbuild/SPECS/perl-DBD-Oracle.spec
sudo rpm -Uvh ~/rpmbuild/RPMS/*86*/perl-DBD-Oracle-1.74-10.2.0.4.el?.*86*.rpm
[ $(uname -m) = x86_64  ] && ORACLE_HOME=/usr/lib/oracle/10.2.0.4/client64 LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.4/client64/lib ./test.pl
[ $(uname -m) = x86_64  ] || ORACLE_HOME=/usr/lib/oracle/10.2.0.4/client LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.4/client/lib ./test.pl
sudo rpm -e oracle-instantclient-{basic,devel,sqlplus} perl-DBD-Oracle
fi

if ! grep -q '7\.' /etc/redhat-release; then
sudo rpm -Uvh oracle-instantclient-{basic,devel,sqlplus}-10.2.0.5-1.*86*.rpm
sed -i \
  -e 's/version [0-9.]*/version 1.74/' \
  -e 's/oi_ver instantclient[012.]*/oi_ver instantclient/' \
  -e 's/oi_release [0-9.]*/oi_release 10.2.0.5/' \
  ~/rpmbuild/SPECS/perl-DBD-Oracle.spec
rpmbuild -ba ~/rpmbuild/SPECS/perl-DBD-Oracle.spec
sudo rpm -Uvh ~/rpmbuild/RPMS/*86*/perl-DBD-Oracle-1.74-10.2.0.5.el?.*86*.rpm
[ $(uname -m) = x86_64  ] && ORACLE_HOME=/usr/lib/oracle/10.2.0.5/client64 LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.5/client64/lib ./test.pl
[ $(uname -m) = x86_64  ] || ORACLE_HOME=/usr/lib/oracle/10.2.0.5/client LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.5/client/lib ./test.pl
sudo rpm -e oracle-instantclient-{basic,devel,sqlplus} perl-DBD-Oracle
fi

sudo rpm -Uvh oracle-instantclient-{basic,devel,sqlplus}-11.1.0.1-1.*86*.rpm
sed -i \
  -e 's/version [0-9.]*/version 1.74/' \
  -e 's/oi_ver instantclient[012.]*/oi_ver instantclient/' \
  -e 's/oi_release [0-9.]*/oi_release 11.1.0.1/' \
  ~/rpmbuild/SPECS/perl-DBD-Oracle.spec
rpmbuild -ba ~/rpmbuild/SPECS/perl-DBD-Oracle.spec
sudo rpm -Uvh ~/rpmbuild/RPMS/*86*/perl-DBD-Oracle-1.74-11.1.0.1.el?.*86*.rpm
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo ln -s libocci.so.11.1 /usr/lib/oracle/11.1.0.1/client64/lib/libocci.so.10.1
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo ln -s libclntsh.so.11.1 /usr/lib/oracle/11.1.0.1/client64/lib/libclntsh.so.10.1
[ $(uname -m) = x86_64  ] && ORACLE_HOME=/usr/lib/oracle/11.1.0.1/client64 LD_LIBRARY_PATH=/usr/lib/oracle/11.1.0.1/client64/lib ./test.pl
[ $(uname -m) = x86_64  ] || ORACLE_HOME=/usr/lib/oracle/11.1.0.1/client LD_LIBRARY_PATH=/usr/lib/oracle/11.1.0.1/client/lib ./test.pl
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo rm /usr/lib/oracle/11.1.0.1/client64/lib/libocci.so.10.1
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo rm /usr/lib/oracle/11.1.0.1/client64/lib/libclntsh.so.10.1
sudo rpm -e oracle-instantclient-{basic,devel,sqlplus} perl-DBD-Oracle

sudo rpm -Uvh oracle-instantclient11.1-{basic,devel,sqlplus}-11.1.0.7.0-1.*86*.rpm
sed -i \
  -e 's/version [0-9.]*/version 1.74/' \
  -e 's/oi_ver instantclient[012.]*/oi_ver instantclient11.1/' \
  -e 's/oi_release [0-9.]*/oi_release 11.1.0.7.0/' \
  ~/rpmbuild/SPECS/perl-DBD-Oracle.spec
rpmbuild -ba ~/rpmbuild/SPECS/perl-DBD-Oracle.spec
sudo rpm -Uvh ~/rpmbuild/RPMS/*86*/perl-DBD-Oracle-1.74-11.1.0.7.0.el?.*86*.rpm
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo ln -s libocci.so.11.1 /usr/lib/oracle/11.1/client64/lib/libocci.so.10.1
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo ln -s libclntsh.so.11.1 /usr/lib/oracle/11.1/client64/lib/libclntsh.so.10.1
[ $(uname -m) = x86_64  ] && ORACLE_HOME=/usr/lib/oracle/11.1/client64 LD_LIBRARY_PATH=/usr/lib/oracle/11.1/client64/lib ./test.pl
[ $(uname -m) = x86_64  ] || ORACLE_HOME=/usr/lib/oracle/11.1/client LD_LIBRARY_PATH=/usr/lib/oracle/11.1/client/lib ./test.pl
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo rm /usr/lib/oracle/11.1/client64/lib/libocci.so.10.1
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo rm /usr/lib/oracle/11.1/client64/lib/libclntsh.so.10.1
sudo rpm -e oracle-instantclient11.1-{basic,devel,sqlplus} perl-DBD-Oracle

sudo rpm -Uvh oracle-instantclient11.2-{basic,devel,sqlplus}-11.2.0.1.0-1.*86*.rpm
sed -i \
  -e 's/version [0-9.]*/version 1.74/' \
  -e 's/oi_ver instantclient[012.]*/oi_ver instantclient11.2/' \
  -e 's/oi_release [0-9.]*/oi_release 11.2.0.1.0/' \
  ~/rpmbuild/SPECS/perl-DBD-Oracle.spec
rpmbuild -ba ~/rpmbuild/SPECS/perl-DBD-Oracle.spec
sudo rpm -Uvh ~/rpmbuild/RPMS/*86*/perl-DBD-Oracle-1.74-11.2.0.1.0.el?.*86*.rpm
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo ln -s libocci.so.11.1 /usr/lib/oracle/11.2/client64/lib/libocci.so.10.1
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo ln -s libclntsh.so.11.1 /usr/lib/oracle/11.2/client64/lib/libclntsh.so.10.1
[ $(uname -m) = x86_64  ] && ORACLE_HOME=/usr/lib/oracle/11.2/client64 LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib ./test.pl
[ $(uname -m) = x86_64  ] || ORACLE_HOME=/usr/lib/oracle/11.2/client LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client/lib ./test.pl
grep -q '5\.' /etc/redhat-release && sudo rm /usr/lib/oracle/11.2/client64/lib/libocci.so.10.1
grep -q '5\.' /etc/redhat-release && sudo rm /usr/lib/oracle/11.2/client64/lib/libclntsh.so.10.1
sudo rpm -e oracle-instantclient11.2-{basic,devel,sqlplus} perl-DBD-Oracle

sudo rpm -Uvh oracle-instantclient11.2-{basic,devel,sqlplus}-11.2.0.2.0.*86*.rpm
sed -i \
  -e 's/version [0-9.]*/version 1.74/' \
  -e 's/oi_ver instantclient[012.]*/oi_ver instantclient11.2/' \
  -e 's/oi_release [0-9.]*/oi_release 11.2.0.2.0/' \
  ~/rpmbuild/SPECS/perl-DBD-Oracle.spec
rpmbuild -ba ~/rpmbuild/SPECS/perl-DBD-Oracle.spec
sudo rpm -Uvh ~/rpmbuild/RPMS/*86*/perl-DBD-Oracle-1.74-11.2.0.2.0.el?.*86*.rpm
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo ln -s libocci.so.11.1 /usr/lib/oracle/11.2/client64/lib/libocci.so.10.1
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo ln -s libclntsh.so.11.1 /usr/lib/oracle/11.2/client64/lib/libclntsh.so.10.1
[ $(uname -m) = x86_64  ] && ORACLE_HOME=/usr/lib/oracle/11.2/client64 LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib ./test.pl
[ $(uname -m) = x86_64  ] || ORACLE_HOME=/usr/lib/oracle/11.2/client LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client/lib ./test.pl
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo rm /usr/lib/oracle/11.2/client64/lib/libocci.so.10.1
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo rm /usr/lib/oracle/11.2/client64/lib/libclntsh.so.10.1
sudo rpm -e oracle-instantclient11.2-{basic,devel,sqlplus} perl-DBD-Oracle

sudo rpm -Uvh oracle-instantclient11.2-{basic,devel,sqlplus}-11.2.0.3.0-1.*86*.rpm
sed -i \
  -e 's/version [0-9.]*/version 1.74/' \
  -e 's/oi_ver instantclient[012.]*/oi_ver instantclient11.2/' \
  -e 's/oi_release [0-9.]*/oi_release 11.2.0.3.0/' \
  ~/rpmbuild/SPECS/perl-DBD-Oracle.spec
rpmbuild -ba ~/rpmbuild/SPECS/perl-DBD-Oracle.spec
sudo rpm -Uvh ~/rpmbuild/RPMS/*86*/perl-DBD-Oracle-1.74-11.2.0.3.0.el?.*86*.rpm
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo ln -s libocci.so.11.1 /usr/lib/oracle/11.2/client64/lib/libocci.so.10.1
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo ln -s libclntsh.so.11.1 /usr/lib/oracle/11.2/client64/lib/libclntsh.so.10.1
[ $(uname -m) = x86_64  ] && ORACLE_HOME=/usr/lib/oracle/11.2/client64 LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib ./test.pl
[ $(uname -m) = x86_64  ] || ORACLE_HOME=/usr/lib/oracle/11.2/client LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client/lib ./test.pl
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo rm /usr/lib/oracle/11.2/client64/lib/libocci.so.10.1
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo rm /usr/lib/oracle/11.2/client64/lib/libclntsh.so.10.1
sudo rpm -e oracle-instantclient11.2-{basic,devel,sqlplus} perl-DBD-Oracle

sudo rpm -Uvh oracle-instantclient11.2-{basic,devel,sqlplus}-11.2.0.4.0-1.*86*.rpm
sed -i \
  -e 's/version [0-9.]*/version 1.74/' \
  -e 's/oi_ver instantclient[012.]*/oi_ver instantclient11.2/' \
  -e 's/oi_release [0-9.]*/oi_release 11.2.0.4.0/' \
  ~/rpmbuild/SPECS/perl-DBD-Oracle.spec
rpmbuild -ba ~/rpmbuild/SPECS/perl-DBD-Oracle.spec
sudo rpm -Uvh ~/rpmbuild/RPMS/*86*/perl-DBD-Oracle-1.74-11.2.0.4.0.el?.*86*.rpm
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo ln -s libocci.so.11.1 /usr/lib/oracle/11.2/client64/lib/libocci.so.10.1
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo ln -s libclntsh.so.11.1 /usr/lib/oracle/11.2/client64/lib/libclntsh.so.10.1
[ $(uname -m) = x86_64  ] && ORACLE_HOME=/usr/lib/oracle/11.2/client64 LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib ./test.pl
[ $(uname -m) = x86_64  ] || ORACLE_HOME=/usr/lib/oracle/11.2/client LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client/lib ./test.pl
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo rm /usr/lib/oracle/11.2/client64/lib/libocci.so.10.1
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo rm /usr/lib/oracle/11.2/client64/lib/libclntsh.so.10.1
sudo rpm -e oracle-instantclient11.2-{basic,devel,sqlplus} perl-DBD-Oracle

sudo rpm -Uvh oracle-instantclient12.1-{basic,devel,sqlplus}-12.1.0.1.0-1.*86*.rpm
sed -i \
  -e 's/version [0-9.]*/version 1.74/' \
  -e 's/oi_ver instantclient[012.]*/oi_ver instantclient12.1/' \
  -e 's/oi_release [0-9.]*/oi_release 12.1.0.1.0/' \
  ~/rpmbuild/SPECS/perl-DBD-Oracle.spec
rpmbuild -ba ~/rpmbuild/SPECS/perl-DBD-Oracle.spec
sudo rpm -Uvh ~/rpmbuild/RPMS/*86*/perl-DBD-Oracle-1.74-12.1.0.1.0.el?.*86*.rpm
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo ln -s libocci.so.12.1 /usr/lib/oracle/12.1/client64/lib/libocci.so.10.1
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo ln -s libclntsh.so.12.1 /usr/lib/oracle/12.1/client64/lib/libclntsh.so.10.1
[ $(uname -m) = x86_64  ] && ORACLE_HOME=/usr/lib/oracle/12.1/client64 LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib ./test.pl
[ $(uname -m) = x86_64  ] || ORACLE_HOME=/usr/lib/oracle/12.1/client LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client/lib ./test.pl
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo rm /usr/lib/oracle/12.1/client64/lib/libocci.so.10.1
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo rm /usr/lib/oracle/12.1/client64/lib/libclntsh.so.10.1
sudo rpm -e oracle-instantclient12.1-{basic,devel,sqlplus} perl-DBD-Oracle

sudo rpm -Uvh oracle-instantclient12.1-{basic,devel,sqlplus}-12.1.0.2.0-1.*86*.rpm
sed -i \
  -e 's/version [0-9.]*/version 1.74/' \
  -e 's/oi_ver instantclient[012.]*/oi_ver instantclient12.1/' \
  -e 's/oi_release [0-9.]*/oi_release 12.1.0.2.0/' \
  ~/rpmbuild/SPECS/perl-DBD-Oracle.spec
rpmbuild -ba ~/rpmbuild/SPECS/perl-DBD-Oracle.spec
sudo rpm -Uvh ~/rpmbuild/RPMS/*86*/perl-DBD-Oracle-1.74-12.1.0.2.0.el?.*86*.rpm
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo ln -s libocci.so.12.1 /usr/lib/oracle/12.1/client64/lib/libocci.so.10.1
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo ln -s libclntsh.so.12.1 /usr/lib/oracle/12.1/client64/lib/libclntsh.so.10.1
[ $(uname -m) = x86_64  ] && ORACLE_HOME=/usr/lib/oracle/12.1/client64 LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib ./test.pl
[ $(uname -m) = x86_64  ] || ORACLE_HOME=/usr/lib/oracle/12.1/client LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client/lib ./test.pl
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo rm /usr/lib/oracle/12.1/client64/lib/libocci.so.10.1
grep -q '5\.' /etc/redhat-release && [ $(uname -m) = x86_64  ] && sudo rm /usr/lib/oracle/12.1/client64/lib/libclntsh.so.10.1
sudo rpm -e oracle-instantclient12.1-{basic,devel,sqlplus} perl-DBD-Oracle


微妙にパッケージ命名規則が異なっていたり、リリース番号の付け方が異なっていたり、demo.mk のパスが変わっていたりと、すべての場合(oicが11バージョン、OSが3バージョン2アーキテクチャ)でノーエラーとするのに苦労しました。DBD::Oracle のバージョンが上がるたびにビルドする気はないので、各自必要な部分を切り出し、書き換えていただければと思います。

0 件のコメント:

コメントを投稿