2014/01/08

[余談] CentOS 6.x で Oracle のインストーラで文字化けをさせず日本語でインストールする

新年早々ではあるが、昔の書きかけをずっとほったらかしていたのを世に出しておく。
仮想化と何の関係があるか?と言われると意外とある Oracle DBのインストールについてだが...。以下本文。


vCenterServer や View と付き合ってるとどうしてもリレーショナルデータベース(RDBMS)とのつきあいが深くなる。

ここ1年以上、5 Host / 50VM を越える場合は Oracle を使っている。特に vCenterServer での利用ではコスト面で10倍近くの差がある。意外に思われるかも知れないが、CPUライセンスでなければならない MS SQL Server Standard より、Named User が通る Oracle Standard One の方が大幅に安すくなるのだ。

さて、あらたに環境を作るに当たって、久方ぶりに Oracle を新規インストールしようとしたところで大きくハマってしまった。

事の元凶は CentOS 6 を使ってしまったこと。これまでは Oracle Linux か CentOS 5.x を利用していたが、後者は普通にインストールするとあまりに余計なもの、例えば X Window Server 、をインストールしてしまうので少々閉口していたのだ。

CentOS 6 はそうした余計なものをインストールしない、なんせ Perl すらデフォルトでは入らない、という事に好感を持っていた。

そのせいでついうっかりと CentOS 6 のテンプレートをデプロイしてそこに Oracle を突っ込もうとしたのだが...、甘かった。
いくつかあるのだが、一つ目はパッケージ名の問題。Oracle Linux や CentOS 5 で必要としてたRPMと名前が異なるため、一々確認と yum  install のし直しが起こってしまった。

Oracle Linux 6 ではどうしているのか気になってみてみたら、どうも "専用のRPM"を用意して対処してしまった模様。この専用RPM、RHEL互換なら Oracle Linux でなくても突っ込めそうな感じだが、さすがに CentOS6 にこのRPMを入れるのは気が引けたので、地道に調べることとなった。(しかし、pdksh をいまさら ksh に変更するのは勘弁して欲しかった...。)


パッケージは地道に調べれば何とかなる。しかし、それだけではうまくいかい。
そう、CentOS 6 の日本語フォントを入れてもインストーラが文字化けする(下図)

Oracle のインストーラは Java を使っているが、Linux の場合、X Window System を必要とする。Mac の XQuartz とか、Xming など Windows でのディスプレイサーバを使うことはできるが、XLib など Xの基本システム一式は Oracle をインストールする Linux にインストールしておく必要がある。

RHEL5互換のOSの場合、それだけで日本語インストーラががちゃんと立ち上がったのだが、RHEL6互換の CentOSでは、Xの日本語フォントをちゃんと入れても文字が豆腐になるのだ。

これは、JRE で定義されているフォントと実際のフォントがあってないとこういうことが起こっているためだ。一般的な対処は、JRE の持つ定義ファイルを書き換えることなのだが、Oracle のインストーラはJREを自前で抱えており、インストーラ起動時に JRE (正確にはJDK)を展開し起動前に差し替える手が存在しない。

色々あまり言えない手を使って調べたところ、Oracle のインストーラの抱えるJREは RHEL互換環境ではさざなみフォント(kochi-*-subst)があることを仮定している。RHEL6 系統は VLフォントとIPAフォントはあるが、さざなみフォントが入っていない。

そこで、IPAフォントをさざなみフォントに誤認させることで対処を行った。
ざっくり言うと、手順は以下の通り。


  1. ipa-gothic, ipa-mincho の RPM をインストールしておく
  2. cd /usr/share/fonts ;  mkdir -p ja/TrueType を実行し「/usr/share/fonts/ja/TrueType/」ディレクトリを作っておく
  3. cd /usr/share/fonts/ja/TrueType ; ln -s ../../ipa-gothic/ipag.ttf ./kochi-gothic-subst.ttf を実行
  4. cd /usr/share/fonts/ja/TrueType ; ln -s ../../ipa-mincho/ipam.ttf ./kochi-mincho-subst.ttf を実行
  5. runInstaller を実行して Oracle のインストールを始める
さざなみフォントは「/usr/share/fonts/ja/TrueType/kochi-{gothic, mincho}-subst.ttf」にあることになっている。なのでシンボリックリンクで IPAフォントを配置してしまう訳だ。


これによりインストーラが日本語で起動した。


なお、日本語が化けた状態のままインストールをしてもインストールは可能で、Oracle のデータベース自体は問題なく動作する。ただし、Enterprise Manager の一部のボタンが文字化けしてしまう。これは、インストール時にボタンのGIFファイルなどを動的生成しているのだが、フォントがないためボタンに書き込むべき文字がレンダリングできないためだ。

Oracle のインストールぐらいは日本語がなくても困らないが、後で人にメンテナンスさせることを考えると Enterprise Manager がちゃんと表示されないのは少々困る。

上記対処を行ってからインストールすればこの問題は発生しないが、化けたままインストールしてしまった場合は、まず上記対処で強制的にフォントを割り当ててからEnterpriseManager を停止し、キャッシュとして作成されているGIFファイルを削除してしまうといい。Enterprise Manager  を起動し直すと、その時にGIFファイルを再生成してくれる。
インストール直後にフォントが割り当てられてなかったので文字が豆腐になってしまってるが、今回の再生成時にはフォントが強制割り当てされているので文字が書き込まれ、正しいボタンができてくれる。

...なお全くの余談だが、私は Java が大嫌いだ。