Pine Roomの日々!

仕事や毎日の日々の生活で見つけた事、考えた事、感じた事、など、ちょっとしたことを書いてみようと思います。

AS400にLinuxODBCで接続する備忘録

2015-01-22 10:25:34 | 情報管理

職場でAS400(今はPower520)が稼動しています。この環境にLinux上に構築したWebサーバを経由してODBC接続してデータを取得し、ユーザに表示するシステムを構築し運用しています。

当初環境は、Debian5.0(32ビット版)+Apache2.x+PHP5.3?でしたが、この環境が壊れたため、CentOS6.5(64ビット版)+Apache/2.2.15+PHP5.6.4で再構築しようとしました。ところがこれがなかなかうまく行かず、悪戦苦闘すること半月余り、ようやく環境ができたので、備忘録と世の中の方への情報提供を兼ねてアップしたいと思います。

最終的に環境構築できた構成は以下の通りとなります。

OS:CentOS6.6(32ビット版)+Apache/2.2.15(Unix)+PHP5.6.4(cli)+iSeriesAccess.i386   6.1.0-1.0

なお、php-odbcを利用するためunixODBC.i686 2.2.14-14.el6もインストールしてあります。

さて、何が問題を複雑にしたかと言うと、こうした環境を作ろうとすると幾つか問題があります。

1点めは、iSeriesAccessのインストールモジュールの入手の難しさです。そもそもこのソフトはIBMより無償提供されているソフトなのですが、最近はセキュリティが厳しく、ソフトウェアライセンス契約の情報がないとIBMのダウンロードページに入れず、入手ができないからです。ネットを検索してたまたまiSeriesAccess-6.1.0-1.0.XXX.rpmを置いているサイトを見つけれたので、今回はセットアップできましたが、今後は入手がさらに難しくなるかもしれません。

2点めは、iSeriesAccess64版にはバグがあり、64ビット環境で環境を構築すると、利用できる設定はできるのですが、テキストフィールドにNULLデータがあるフィールドをフェッチするとセグメンテーションフォールとしてしまうバグがあるので、利用できません。パッチはリリースされているようですが、ライセンス契約が無い私の場合は、入手を断念し、32ビット版で環境を作ることにしました。

3点めは、iSeriesAccessはlibodbc.so.1とlibodbcinst.so.1の2つのライブラリが必要なのですが、unixODBCをCentOS6レベルの通常インストールでunixODBCをインストールすると、libodbc.so.2とlibodbcinst.so.2がインストールされるので、yum install iSeriesAccess-6.1.0-1.0.i386.rpmとするとライブラリが無いと怒られ、インストールできない問題があります。

こうした問題が明らかになるまで色々インストールとアンインストールを重ねたわけですが、最終的に次の手順で構築が環境できました。

  1. OS環境を構築する(私の場合CentOS6.6 Linux 32ビット版を利用)
  2. apache,php,sambaなどWeb環境とそれにアクセスするsambaサーバの設定などを行う
  3. pdo_odbcを使うので、unixODBCをインストール。phpinfoでPDO_ODBCを使えるようにします。また、必要に応じて、pdo_mysql(私の場合MySQLも利用しています)など、必要なものをインストールしておきます
  4. いよいよiSeriesAccessをインストールします。何も問題が無いならばyum install iSeriesAccess-6.1.0-1.0.i386.rpmとすればよいところですが、ライブラリの問題があるので、ライブラリ非依存でインストールし、ライブラリにシンボリックリンクを張って少々だましてやります。
    rpm -ivh iSeriesAccess-6.1.0-1.0.i386.rpm --nodeps
    cd /usr/lib
    ln libodbcinst.so.2 libodbcinst.so.1
    ln libodbc.so.2 libodbc.so.1
  5. /etc/odbcinst.iniを確認し、DSN情報を/etc/odbc.iniに設定します。
  6. 動作確認は、isqlコマンドを利用し、
    isql DSN名 ユーザ名 パスワード
    でDBに接続し、SQL文でデータが参照できることを確認します。

以上で、接続環境ができたので、Web側にODBC経由でデータを取得し、表示するPHPプログラムなどを設定して利用します。

以上が備忘録です。いつもネット検索し、わからないことがあれば何らか有効な情報がないと探す私です。上記の文章は私にはわかるのですが、こうした情報をお探しの人でも何を言っているのか、もう少し詳細な手順は書いてくれないのかと思われるかもしれませんが、そこはご容赦ください。

特に今回ご提供できる情報のポイントは、iSeriesAccess-6.1.0-1.0の64版にはバグがあること。他のバージョンはどうかは詳しくは知りません。unixODBCの持つライブラリとiSeriesAccessの想定するライブラリのファイル名に相違がある、ことの2点です。何かのご参考になれば幸いでーーーす!

以上

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする