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からです.
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 LANG=Cにしておかないと,インストーラの画面がまともに表示されなかった. Xなしでインストールを行えるのかどうかは,不明.行えるという記述を見つけることはできなかった. あとドキュメントによると,環境変数ORACLE_HOMEが設定されていると駄目らしい. 今回は新規ユーザなので特に気にする必要はない.
(3) インストール[1枚目の画面]
[2枚目の画面]
その後,インストール前のチェックが行われて色々表示される. 特にパッケージについて色々表示された
こんなのでいいのだろうか... ここを突破すれば後はすんなり進行して,インストールは正常に終わった.
6.sambaのインストールSESの本筋からははずれるが,Windowsファイルサーバからファイルを収集するためにsambaのクライアントが必要なので,インストールした.
(1) sambaの準備とりあえず家にあったソースアーカイブ
を引っ張り出してきた.古いかも知れません.
(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
(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) グローバル設定
クローラ構成
ここでいうキャラクタセットとは,ファイル内容の文字コード. SESが自動判別に失敗した場合に,デフォルトが適用されるらしい. 私のファイルサーバはWindowsで作成したファイルがほとんどなので,ShiftJISとなる.
問い合わせ構成
問合せ統計を有効にすると,どういうキーワードで検索が行われたかを集計してくれるが, 使うのは自分だけなので不要.検索性能が上がるらしい.
(3) ソースの作成マウントしたファイルサーバの内容を使って全文検索のインデックスを作成するが, そのためにはマウントしたディレクトリを指す「ファイルソース」を登録する必要がある.
ファイル・ソースの作成
開始URLで,スキームに大文字でFILEと指定するのがポイント.もし小文字だと日本語のファイル名が正しく扱えない. 入力後,「作成及びカスタマイズ」でカスタマイズに進む.
ファイル・ソースのカスタマイズ[ドキュメント・タイプ]
が,インデックス化対象としてデフォルトで有効になっている.これだけで十分だ.一太郎やLotus関係その他のファイルを追加することもできるようだ.
[表示URL]
作業用マシンからは,直接ネットワークコンピュータから「\\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) そこで試しに... $ 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> 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 SQL> select name, log_mode from v$database; NAME LOG_MODE --------- ------------ SES 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 |