OracleSES 10g(Secure Enterprise Search)をRedHat9にインストールする方法

RedHat9へのOracle SES 10gインストール

Windowsファイルサーバの内容を,全文検索したい. しかし全文検索のプログラムは,Linuxで動かしたい.

構成図

という構想を,実現できる時が来た.

過去に全文検索プログラムとしてnamazuを試したことがあったが, なぜかインデックス化途中でハングするという現象に見舞われて,挫折していた. そして,その後登場したGoogle Desktop SearchはWindows専用で, Linuxでは使えなかった.

今回,救世主としてOracle SES 10g (Secure Enterprise Search 10g)のLinux版が無料ダウンロードできるようになったので, 早速試してみた.

但し,Oracle SES 10gは,RedHat9には対応していないので注意.

今回はあくまで個人利用のために無理矢理インストールしただけです.ていうか,後述するように既におかしな動作が出ています.

※現在は,ファイルサーバの全文検索は,PostgreSQL8.3を用いた自作システムに乗り換えています.

今回使ったソフト

全文検索サーバの環境:

なお,搭載しているメモリは512MBで,ディスクは60GBです.

インストール,設定に必要な情報は,

から入手しました.


1.カーネルパラメータの変更

shmmax,semopm,file-maxの値が小さかった.

shmmaxは,物理メモリの半分にしろとのことなので,256MBとする.

/etc/sysctl.conf に追加

kernel.shmmax = 268435456
kernel.sem = 250 32000 100 128
fs.file-max = 65536

現在の状態に反映するために,以下を実行する.

# /sbin/sysctl -p
その他にも,いくつかある.

/etc/security/limits.conf に追加

*    soft    nproc   2047
*    hard    nproc   16384
*    soft    nofile  1024
*    hard    nofile  65536

/etc/pam.d/login に追加

session    required     /lib/security/pam_limits.so

2.インストール用ユーザの追加

SESのインストール及び実行に使用するOSグループおよびユーザを,作成する.

# groupadd dba
# useradd -G dba orases

今回は「dba」というグループを作成し,そこに属するユーザとして「orases」を作成した.


3.ユーザの環境設定

SESの実行に使用するユーザ(orases)に対して,ulimitの設定が必要.

~orases/.bash_profile に追加

ulimit -u 16384 -n 65536

4.SESに必要とされるパッケージのインストール

各自のRedHat環境に依存するが,OracleSESが必要とするRPMを入れておく必要がある.

インストーラを実行すると途中で足りないパッケージのチェックが行われるので, そこで表示されたパッケージをインストールすればよい.

私の場合は以下のRPMが足りないと言われたのでインストールした.全てRedHat9のCDからです.

  • compat-db-3.3.11-4.i386.rpm
  • compat-gcc-7.3-2.96.118.i386.rpm
  • compat-gcc-c++-7.3-2.96.118.i386.rpm
  • compat-libstdc++-7.3-2.96.118.i386.rpm
  • compat-libstdc++-devel-7.3-2.96.118.i386.rpm
  • openmotif-2.2.2-14.i386.rpm
  • tcl-8.3.5-88.i386.rpm


5.インストーラの起動

(1) OSの偽装

そもそも,RedHat9はSES 10gが対応していないOSなので,以下のようにしてインストーラをだます必要がある.

# cp /etc/redhat-release /etc/redhat-release.org
# echo 'Red Hat Enterprise Linux AS release 3 (Taroon)' > /etc/redhat-release

なおSESインストール終了後に,以下のようにして元に戻すのを忘れないように.

# cp /etc/redhat-release.org /etc/redhat-release

(2) インストーラの起動

2.で作成したorasesユーザでログインして,X上でインストーラを起動する.

$ LANG=C
$ cd
$ ~/setup/runInstaller
なお,~/setup/runInstaller というのはダウンロードして展開したSESがどこに存在するかによるので,当然各自の環境によりけり.

LANG=Cにしておかないと,インストーラの画面がまともに表示されなかった.

Xなしでインストールを行えるのかどうかは,不明.行えるという記述を見つけることはできなかった.

あとドキュメントによると,環境変数ORACLE_HOMEが設定されていると駄目らしい. 今回は新規ユーザなので特に気にする必要はない.

(3) インストール

[1枚目の画面]

  • HTTP portは,1024以下にする場合は後で追加の作業が必要なので注意.とりあえずデフォルトの7777としておいた
  • Data Storage Locationもデフォルトのまま.もし変更するならパーミッションに注意.(orasesへの書き込み権限が必要)
  • あと,ProductLanguagesで,Japaneseを追加しておく

[2枚目の画面]

  • specify operating system group...で,2.で作成したグループ(dba)を選択する
  • Nextをクリックすると,rootでoraInst.shを実行しろというメッセージが表示されるので,表示された通りにスクリプトを,別窓を開いてrootユーザで実行する

その後,インストール前のチェックが行われて色々表示される. 特にパッケージについて色々表示された

  • compat関係のライブラリのバージョンが古いと言われたが,無視した
  • setarch-1.3-1が足りないといわれるが,大容量メモリの関係らしいので無視した
  • メモリが1G必要といわれるが,ないものは仕方がないので無視した

こんなのでいいのだろうか...

ここを突破すれば後はすんなり進行して,インストールは正常に終わった.


6.sambaのインストール

SESの本筋からははずれるが,Windowsファイルサーバからファイルを収集するためにsambaのクライアントが必要なので,インストールした.

(1) sambaの準備

とりあえず家にあったソースアーカイブ

  • samba-2.2.8a-ja-1.1.tar.gz

を引っ張り出してきた.古いかも知れません.

(2) インストール

以下の内容を実行した.
$ tar xzof samba-2.2.8a-ja-1.1.tar.gz
$ cd samba-2.2.8a-ja-1.1
$ cd source
$ ./configure --with-i18n-swat --with-smbmount
$ make
# make install

(3) 設定ファイル作成

sambaクライアントとしての設定.

/usr/local/samba/lib/smb.conf を作成

[global]
  workgroup = kamoland
  client code page = 932
  coding system = euc
workgroupは,MSネットワークのワークグループ名で,各自の環境に依存する.

(4) リンクの作成

必須ではないが,使いやすくするために,主要なファイルへのリンクをパスが通っている箇所に作成しておく.
# ln -s /usr/local/samba/bin/smbclient /usr/local/bin/smbclient
# ln -s /usr/local/samba/bin/smbmount /usr/local/bin/smbmount

(5) ファイルサーバのマウント

# mkdir -p /mnt/fileserver/home
# mount -t smbfs -o username=user01,password=xxxxx,codepage=cp932,iocharset=euc-jp //fileserver/home /mnt/fileserver/home

「fileserver」というのがファイルサーバのホスト名.

ここで共有指定しているhomeディレクトリを,全文検索サーバの/mnt/fileserver/homeディレクトリにマウントした. usernameとpasswordは,fileserverのhomeを参照できるように記述する.

(6) 日本語ファイル名についての注意

日本語ファイル名は,全文検索サーバのOSが対応しているロケールで見えるようにしておく.

今回はRedHat9が対応しているeucjpにするため,smbマウント時の設定でiocharset=euc-jpとした.

こうしておけば,ファイルをSESに認識させることが可能.


7.SESの設定

(1) 日本語ファイル名への対応

~orases/oracle/product/10.1.6/ses1/bin/searchctl の4行目あたりに,以下の内容を挿入しておく.

searchctlに挿入

export LC_LANG=ja_JP.eucjp
export LANG=ja_JP.eucjp

挿入後,SESを再起動する.

~orases/oracle/product/10.1.6/ses1/bin/searchctl restartall

これ以降の内容は,ブラウザで管理用ページにアクセスしておこなう.私の場合は,以下のURLだった.

http://zenbun:7777/search/admin/index.jsp

(2) グローバル設定

クローラ構成
  • クロールの深さ:制限なし
  • デフォルト言語:日本語
  • デフォルト・キャラクタ・セット:日本語(SHIFT_JIS)

ここでいうキャラクタセットとは,ファイル内容の文字コード. SESが自動判別に失敗した場合に,デフォルトが適用されるらしい. 私のファイルサーバはWindowsで作成したファイルがほとんどなので,ShiftJISとなる.

問い合わせ構成
  • 問合せ統計の有効化:いいえ

問合せ統計を有効にすると,どういうキーワードで検索が行われたかを集計してくれるが, 使うのは自分だけなので不要.検索性能が上がるらしい.

(3) ソースの作成

マウントしたファイルサーバの内容を使って全文検索のインデックスを作成するが, そのためにはマウントしたディレクトリを指す「ファイルソース」を登録する必要がある.

ファイル・ソースの作成
  • ソース名:doc
  • 開始URL:FILE://localhost/mnt/fileserver/home

開始URLで,スキームに大文字でFILEと指定するのがポイント.もし小文字だと日本語のファイル名が正しく扱えない.

入力後,「作成及びカスタマイズ」でカスタマイズに進む.

ファイル・ソースのカスタマイズ
[ドキュメント・タイプ]
  • HTML
  • Microsoft Excelドキュメント
  • Microsoft PowerPointドキュメント
  • Microsoft Wordドキュメント
  • PDFドキュメント
  • プレーン・テキスト

が,インデックス化対象としてデフォルトで有効になっている.これだけで十分だ.一太郎やLotus関係その他のファイルを追加することもできるようだ.

[表示URL]

  • ファイルURL接頭辞:file://localhost/mnt/fileserver/home
  • 表示URL接頭辞:file:////fileserver/home

作業用マシンからは,直接ネットワークコンピュータから「\\fileserver」でファイルサーバにアクセスできるため, 表示URLにはそれを反映する必要がある. ファイルURL接頭辞のスキームは,今度は大文字ではなくて小文字なので注意.

このあたりでかなりハマったため,実際には(3)の作業には数時間を費やしている. この文章を読んでいる人はラッキーだ.

[クロールパラメータ]

  • クロールの深さ:制限なし

余談だが,ファイルシステムからインデックスを作成する「ファイルソース」以外にも, Webの内容から作成する「Webソース」,テーブルの内容から作成する「表ソース」等色々使える.

表ソースではリモートのOracleデータベースにリスナー経由で接続して, 任意のテーブルの任意のカラムの内容をインデックス化するわけだが, 使い道はともかくとして,何か凄い.さすがOracleというか何というか.

(4) スケジュールの作成

初回は,スケジュールの編集で

  • クローラ再クロール・ポリシーの更新:全ドキュメントの処理

を指定して,全ファイルのインデックス化を行うようにする. 指定後に,クローラ・スケジュールから該当行を選択して「開始」ボタン押下で,インデックス化が行われる. それなりに時間はかかる.

一度全ファイルのインデックス化が終われば,再クロールポリシーは「変更されたドキュメントの処理」に戻しておいて良いと思う. 頻度の設定は適当に.


8.検索

これで,ブラウザで検索ページにアクセスすれば,ファイルサーバの全文検索を行える.

http://zenbun:7777/search/query/search

素晴らしい,のだが,後述するようにいくつか課題が残ってしまっている.


9.未解決の課題

(a) 検索結果画面のリンクから飛べない

検索結果画面のリンクをクリックすると,
リクエストを処理中に問題が発生しました。
次のことに注意してください:
ページが見つかりません。検索結果リストが期限切れの可能性があります。再度検索を行ってください。
と言われる. 画面上の表示文字としては,
file:////fileserver/home/doc/...
という正しいパスが表示されているのだが,アンカーの内容がおかしいのか, あるいは無理矢理インストールした影響でアンカーのリンク先のモジュールが壊れているのか,不明.

しかしファイルを編集しないのであればキャッシュを見れば事足りるので,まぁ何とか我慢できる.

→この件については, RedHat9へのOracle SES 10gインストール #2で無理矢理対応を行いました. (2006.03.29)

(b) キャッシュでテキストファイルが改行されない

ということでキャッシュを見ると,テキストファイルが改行されずに表示される. 読みにくいことこの上ない.

ただこの改行については,ブラウザにもよるのかも知れない.

まぁ,かなり強引にインストールしたので,不具合が出るのは仕方がないことではあります.


10.Oracleで遊ぶ

SESを起動すると,以下のような見覚えのあるプロセスが動作する.
$ ps -ef|grep ora
#501       363     1  0 Mar25 ?        00:00:00 /home/oses/oracle/product/10.1.6/ses1/bin/tnslsnr LISTENER -inherit
orases   28219     1  0 01:29 ?        00:00:00 /home/orases/oracle/product/10.1.6/ses1/bin/tnslsnr LISTENER -inherit
orases   28231     1  0 01:29 ?        00:00:00 ora_pmon_ses
orases   28233     1  0 01:29 ?        00:00:00 ora_mman_ses
orases   28235     1  0 01:29 ?        00:00:04 ora_dbw0_ses
orases   28237     1  0 01:29 ?        00:00:08 ora_lgwr_ses
orases   28239     1  0 01:29 ?        00:00:00 ora_ckpt_ses
orases   28241     1  0 01:29 ?        00:00:04 ora_smon_ses
orases   28243     1  0 01:29 ?        00:00:00 ora_reco_ses
orases   28245     1  0 01:29 ?        00:00:00 ora_cjq0_ses
orases   28247     1  0 01:29 ?        00:00:00 ora_d000_ses
orases   28249     1  0 01:29 ?        00:00:00 ora_s000_ses
orases   28255     1  0 01:29 ?        00:00:00 ora_qmnc_ses
orases   28257     1  0 01:29 ?        00:00:00 ora_mmon_ses
orases   28259     1  0 01:29 ?        00:00:00 ora_mmnl_ses
orases   28276     1  0 01:29 ?        00:00:46 /home/orases/oracle/product/10.1.6/ses1/jdk/bin/java -Dhttp.webdir.enable=false
 -Doracle.oc4j.localhome=/home/orases/oracle/product/10.1.6/ses1/search -Djava.security.properties=/home/orases/oracle/produc
t/10.1.6/ses1/oc4j/j2ee/home/config/jazn.security.props -Doracle.sec
orases   30271     1  0 02:24 ?        00:00:00 esd -terminate -nobeeps -as 2 -spawnfd 19
orases   30434     1  0 02:50 ?        00:00:00 ora_q001_ses
orases   32116     1  0 14:41 ?        00:00:01 oracleses (LOCAL=NO)
これは,内部でOracleインスタンスが動いているとしか思えない.

そこで試しに...

$ export ORACLE_SID=ses
$ export ORACLE_HOME=~orases/oracle/product/10.1.6/ses1
$ $ORACLE_HOME/bin/sqlplus eqsys/xxxxx (xxxxxはSES管理用パスワード)
 
SQL*Plus: Release 10.1.0.5.0 - Production on Sun Mar 26 15:24:06 2006
 
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.5.0 - Production
With the Partitioning and Data Mining options
 
SQL>
SQL*Plus,キター!

調子に乗って,色々調べてみる.

SQL> select name,value from v$parameter where name like 'sga%' or name like 'pga%';
 
sga_max_size
167772160
 
sga_target
167772160
 
pga_aggregate_target
16777216
SGAは自動チューニングで最大160MB,PGAは最大16MBか.
SQL> select name, log_mode from v$database;
 
NAME      LOG_MODE
--------- ------------
SES       NOARCHIVELOG
NOARCHIVELOGモードですか.

リスナーはどうかな.

$ $ORACLE_HOME/bin/lsnrctl status
 
LSNRCTL for Linux: Version 10.1.0.5.0 - Production on 26-MAR-2006 15:41:47
 
Copyright (c) 1991, 2004, Oracle.  All rights reserved.
 
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=zenbun)(PORT=1522)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 10.1.0.5.0 - Production
Start Date                26-MAR-2006 01:29:09
Uptime                    0 days 14 hr. 12 min. 38 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /home/orases/oracle/product/10.1.6/ses1/network/admin/listener.ora
Listener Log File         /home/orases/oracle/product/10.1.6/ses1/network/log/listener.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=zenbun)(PORT=1522)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1522)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "ses.zenbun" has 1 instance(s).
  Instance "ses", status READY, has 1 handler(s) for this service...
Service "sesXDB.zenbun" has 1 instance(s).
  Instance "ses", status READY, has 1 handler(s) for this service...
The command completed successfully
ポート番号には,1522が使われていますね.


© 2023 KMIソフトウェア