Perl+DB2環境をUbuntu 12.04にPerlbrewで構築する

Perlからデータベース(RDB)に接続するには、DBIというデータベースアクセスの共通インターフェースを使用します。DBIはRDBの接続方法の差異を吸収するためのライブラリで、DB2を含む多くのデータベースに対応しています。

このエントリでは、PerlからDB2にアクセスできる環境を構築する方法を解説します。OSはUbuntu Linux 12.04 (32bit版)を使用していますので、前提としてOSの導入が必要です。PerlはUbuntuに付属するものではなく、Perlbrewでインストールを行います。これは、いくつかのメリットがあるのですが、OS標準のperlとは独立して色々なPerlやモジュールを試すことができるというのが大きなメリットだと思います。

また、UbuntuにはDB2を導入するために必須のパッケージを導入しておく必要があります。詳細は以下で紹介しているDB2インストールの情報を参照してください。

DB2をインストールする

OSが準備できたらDB2を導入します。DB2のエディションは問いませんし、おそらくほとんどのバージョンで動くと思いますが、このエントリでは無料で使えるDB2 Express-Cのv10.1を使用しています。DB2 Express-Cは下記リンクからダウンロード可能です。

インストールは以下のクイックインストールで説明している、GUIのウィザードでステップバイステップで進める方法で実行することも可能ですし、その下のリンク(DB2、基本の「き」)で説明している応答ファイル(レスポンスファイル)を使ってGUI無しで導入することも可能です。

今回は応答ファイルを使った方法でDB2 Express-Cを導入しました。上記の記事にある方法とほとんど同じですが、ご参考までに私が使用した応答ファイルを以下に置いておきます。この後Perlから接続するためのドライバをコンパイルするので、DB2の開発ツール(ヘッダやライブラリ)の導入が必要です

今回は以下の内容で応答ファイル(db2expc.rsp)を作成して ./db2setup -r db2expc.rsp としてDB2をインストールしました。 COMP=APPLICATION_DEVELOPMENT_TOOLSを指定することで開発ツールを導入しています。GUIのセットアップでも「カスタマイズ」を選択することで、開発ツールの導入が可能です。

DB2をインストールした後は、インスタンスとデータベースを作成します。詳しくは上記インストール方法のリンクを参照してください。

Perl環境のインストール(Perlbrew)

PerlはOSに含まれていますが、今回はOS付属のPerlは使わずに、ソースからコンパイルしてユーザが読み書き可能なディレクトリ(~/perl5/以下)に別途Perlを導入します。これにはいくつかのメリットがあります。

  • 最新バージョンのPerlを導入できる。複数のバージョンを使い分ける事もできる
  • モジュール類も好きなバージョンが導入できる
  • ユーザが読み回アクセス可能なディレクトリに導入するため、Perl本体や、各種モジュールの導入時にroot権限が必要無い

開発の場合は色々なバージョンで試すことが必要なケースがありますので、OS付属のPerlとは別に準備するのが便利です。また通常OSに含まれるPerlは最新バージョンでは無いので、最新を試す事ができるというのもメリットですね。(執筆時、Ubuntu 12.04に付属のPerlはv5.14.2でした)

ソースをダウンロードして、configureして…というステップでPerlを導入して良いのですが、Perlbrewというスクリプトを使用すると楽に導入が可能ですので、ここではこれを使用します。Perlbrewには複数バージョンのPerlを導入して切り替える機能があるので、とても便利です。

ここではsimというユーザの環境にPerlbrewを導入しています。simはDB2のインスタンスオーナーでもあります。つまり、DB2のコマンドを発行できる環境にPerlbrewを導入しています。特にPerlBrewを導入するユーザを決めていない場合、インスタンスオーナー(一般的にはdb2inst1といったID)でこの後の作業をするのがお勧めです。ただしインスタンスオーナー以外であってもPerlからDB2に接続する環境を構築可能です。

Perlbrewを導入するには、curlコマンドでシェルスクリプトファイルを取得して実行する事が推奨されているのですが、Ubuntu 12.04にはデフォルトでcurlが入っていないので、まずはapt-getでcurlを導入します。

次にcurlを使ってシェルスクリプトファイルを取得して、bashで実行します。Perlbrewのホームページに書かれているように、curl -kL http://install.perlbrew.pl | bash と実行します。

上記のように実行すると、~/perl5/以下にPerlbrew環境が準備されます。あとはメッセージに出ている、source ~/perl5/perlbrew/etc/bashrc を ~/.bashrcの最後に追記します。(メッセージには~/.bash_profileと書かれていますが、ubuntu環境では~/.bashrcが適切です)

上記のsource ~/perl5/perlbrew/etc/bashrc を実行することで環境変数等が設定されてPerlbrewが実行可能になりますので、別のコンソールを開く(もしくはログオフしてログインし直す)等して~/.bashrcを実行するか、コンソール上で直接 source ~/perl5/perlbrew/etc/bashrc を実行してPerlbrewを実行可能にしてください。Perlbrewが実行できるかどうかは、helpオプションを付けて実行してみると良いでしょう。

availableオプションを実行すると、導入可能なPerlのバージョン一覧が表示されます。

ここでは、安定版として(執筆時点で)最新のPerl v.5.16.1を導入します。多くのケースではperlbrew install perl-5.16.1とだけ実行すれば良いようなのですが、Ubuntu 12.04の場合、-Dusethreadsを付けてスレッドを使うように指定しないとうまく構築できませんでしたので、以下のようにしてインストールします。(もし、-Dusethreadsを付けてもエラーが出る場合は、 -Dplibpth=/usr/lib/i386-linux-gnu 同時に指定するとうまくいくかもしれません。これは32bitの場合のパスで、64bit環境で、-Dusethreads -Dplibpth=/usr/lib/x86_64-linux-gnu を指定します)

perlのソースコード一式をインターネット経由で取得してコンパイルするため、インターネット接続が必要です。また、コンパイル(とテスト)には環境によりますが、ある程度の時間が掛かります。私の環境では以下のように19分掛かりました。

無事にインストールできたので、インストールしたPerlを使えるかどうか試してみます。perlbrewコマンドのswitchオプションで使用したいPerlを指定すると、そのバージョンのPerlに切り替えて使用できるようになります。以下では切り替え後にperl -vでバージョンを確認していますが、v5.16.1が使用できるようになっているのが分かります。

このswitchオプションを使用すると、その後別のターミナルにログインしてもswitchで選択したPerlが使用できるようになっています(OSをシャットダウンしてもswitchで切り替えた内容は有効です)。Perlbrewで複数のperlを導入していて、一時的に現在のコンソールでだけPerlを切り替えたい場合は、useオプションを使用します。

cpanmのインストール

Perlのモジュール(拡張機能)は、CPAN(Comprehensive Perl Archive Network)という仕組みで管理されています。cpanmはそのCPAN経由でモジュールを導入するためのコマンドで、まずはこのcpanmをインストールします。perlbrew環境では以下のようにperlbrew install-cpanmとするだけで簡単に導入できます。

Perl DBIのインストール

Perl DBIは、perlから各種データベースにアクセスするための共通のインターフェースです。DBIはインターフェースを提供するだけですので、実際のデータベースへのアクセス部分はDBDと呼ばれるモジュールが必要になりますが、まずDBIを導入します。先ほどcpanmを導入していますので、cpanmを使って簡単にDBIを導入できます。以下のようにcpanmにモジュール名の引数を付けて実行するとソースの取得とコンパイルが自動的に行われます。

DBIのバージョンを指定していないので、執筆時点で最新のDBI v1.622がインストールされました。

DBD::DB2のインストール

DBD::DB2はPerl DBI経由でDB2にアクセスするためのモジュールです。これも同様にcpanmで導入しますが、先に環境変数の設定が必要です。(コンパイル時にDB2のクライアントライブラリの位置などを指定するため)

まず、インスタンスオーナー以外で作業をしている場合は、接続したいインスタンスオーナーの~ユーザ名/sqllib/db2profileをsouceで取り込みます。例えば以下のように実行します。

このようにすることで、そのインスタンスに接続するために必要な環境変数が設定されます。(インスタンスオーナーで作業している場合は上記は不要です)

次にDBD::DB2をコンパイルする際に使用するDB2クライアントライブラリの位置を環境変数DB2LIBに設定します。一般的には以下のパスです。(64bit環境の場合は、/opt/ibm/db2/V10.1/lib64/を指定してください)

これで準備が出来ましたので、あとはcpanmでDBD::DB2を導入します。

執筆時点での最新版であるDBD::DB2 v1.84が導入されて、PerlからDB2に接続する環境が整いました。

テストプログラムの実行

導入が完了したので、簡単なテストプログラムを実行してみましょう。以下のようなスクリプトを作成して、testdb2.plという名前で保存します。これはSAMPLEデータベースの中にあるデータをクエリー(SELECT)して画面に表示するプログラムです。DB2導入時にSAMPLEデータベースを作成していない場合は、(DB2インスタンスオーナーで)db2samplコマンドを実行することで作成できます。

保存したファイルをperlで実行するとDB2から取得したデータが画面に表示されます。なおDB2インスタンスオーナー以外で実行している場合は、ソースコードの中でIDとパスワードを指定する必要があります。スクリプト内のDBI->connectの第2引数にID、第3引数にパスワードを指定するように修正してから実行してください。

正しく設定できている場合、以下のように表示されます。これで動作確認ができました。

参考情報

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">