ちょっとしたファイルシステム(共有フォルダなど)を全文検索できるサーチエンジンとしては、古くはNamazuが一世風靡した時代もあったのですが、さすがに現代的でないので、今回はFessをインストールしてみます。
バージョンはFess 12.1.1、インストール先はWindows 10 64bit版です。
基本的には
- Javaです。
- debとrpmとzipが配布されていますが、Windowsにインストールできるのはzipだけです。
- GUIなインストーラーはありません。batファイルの、正直ちょーっとイケてない感じの、インストーラーが付属します。
- ElasticsearhはFess本体に組み込まれているものを使う方法と、別途インストールする方法があります。本稿では前者、Fess本体に組み込まれているElasticsearhを使う方法を採用します。
こんなところです。ではレッツゴー。
#事前準備
Javaは既にインストール済みであるものとします。まだの人はこちらへどうぞ。ちなみに筆者はJava8 Update 161を使っております。Java9以降で動作するかは分かりません。。。すみません。
まずは環境変数JAVA_HOME
を例えばC:\Program Files\Java\jre1.8.0_161
みたいな感じで設定します。この環境変数は、インストーラーを改造するのでない限り、必須です。
#ダウンロードして展開する
Fess本体はここから取ってきます。本稿執筆時点での最新バージョンは12.1.1です。
これを適当なディレクトリ、例えばC:\fess-12.1.1
あたりに展開します。
#普通に実行する
サービスとして登録するのではなく、単なるプロセスとしてFessを実行するには、bin
ディレクトリにあるfess.bat
を実行します。この状態でポート8080で立ち上がりますので、ブラウザから http://localhost:8080/ にアクセスするとFessが動いています。
#Fessをサービスとして登録する
この作業をする前に決めておくことがあります。それは、Fessをどのアカウントで動かすかです。Fessが動作するアカウント上で環境変数JAVA_HOME
が設定されている必要があります。
まずは コマンド プロンプト を「管理者として実行」し、Fessのbin
ディレクトリに入ります。ここでservice.bat
をコマンドラインオプションなしで実行すると、簡単なUsageが表示されます。
C:\fess-12.1.1\bin>service.bat
Usage: service.bat install|remove|start|stop|manager [SERVICE_ID]
次に、以下のコマンドを入力します。
service.bat install
これでサービス登録されるのですが__ここで注意!__service.bat start
へ進む前にやるべきことがあります。
サービス管理ツールを開き(手順としては スタートボタン→Windows管理ツール→サービス)、Fess (fess-service-x64) を選択し、プロパティを開きます。ここで ログオン タブを選択すると、__ローカル システム アカウント__が選択されていますので、これを アカウント に変更し、Fessを動かすアカウントとパスワードを入力します。ここがローカル システム アカウントのままだと、環境変数JAVA_HOME
が設定されていないためFessが動きません。何らかの理由で動いたとしても、セキュリティ上お勧めできません。
ここまできたら、プロパティシートの 全般 タブから 開始 ボタンを押してスタートです。または、コマンドラインからservice.bat start
でもOKです。この状態でブラウザから http://localhost:8080/ にアクセスするとFessが動いています。
さらに、常時起動したい場合は、 スタートアップの種類 を 自動 にします。
#Q&A
Q. 動かんぞ!
A. logs
ディレクトリの下にログができますので、頑張って解読して下さい。
私が経験したところでは、Fessを実行するアカウントは一アカウントに統一する必要があります。そうでないと内部ファイルの所有者が複数混在になってしまい、全ての内部ファイルにアクセスできるアカウントが一つもない状態に陥って動作しなくなります。
Q. 公式の Windowsサービスへの登録 に書いてある通りにインストールすればいいんじゃないのか?
A. 公式のは、Fess本体に組み込まれているElasticsearchではなく別途インストールする前提の手順になっています。また、後述する間違い(fess.bat
→fess.in.bat
)があります。
Q. ポート番号を8080から別のに変更したい。
A. fess.in.bat
を書き換えます。
公式の システム関連の設定 には
Windows 環境であれば bin\fess.bat のset FESS_JAVA_OPTS=%FESS_JAVA_OPTS% -Dfess.port=8080
を変更します。
~~と書いてありますが、この記述は正確ではありません。正しくはfess.bat
ではなくfess.in.bat
です。~~→この間違いは直ったようです。
また、 Windowsサービスへの登録 の
Fess の検索画面、管理画面のデフォルトのポート番号は 8080 になっています。80 番に変更する場合は c:\opt\fess\bin\fess.bat の fess.port を変更します。
~~も、同様にfess.bat
ではなくfess.in.bat
です。~~→この間違いも直ったようです。
Q. 環境変数JAVA_HOME
を設定したくない。または、JAVA_HOME
とは別の場所にインストールされているJVMを使いたい。
A. fess.bat
かservice.bat
を書き換えます。
fess.bat
の場合は、先頭のほうに
SET JAVA_HOME=C:\Program Files\Java\jre1.8.0_161
こんな行を追加すれば行けます。service.bat
の場合は、さらにこれに加えて、166行目の二か所の%%
を%
に書き換えます。diff形式にすると以下のような感じです。
--- service.bat 2018-03-18 16:00:14.000000000 +0900
+++ service.new.bat 2018-04-16 22:42:54.382083400 +0900
@@ -1,5 +1,6 @@
@echo off
SETLOCAL enabledelayedexpansion
+SET JAVA_HOME=C:\Program Files\Java\jre1.8.0_161
TITLE Fess Service
@@ -163,7 +164,7 @@
)
)
- "%EXECUTABLE%" //IS//%SERVICE_ID% --Startup %FESS_START_TYPE% --StopTimeout %FESS_STOP_TIMEOUT% --StartClass org.codelibs.fess.FessBoot --StopClass org.codelibs.fess.FessBoot --StartMethod main --StopMethod shutdown --Classpath "%FESS_CLASSPATH%" --JvmSs %JVM_SS% --JvmMs %JVM_XMS% --JvmMx %JVM_XMX% --JvmOptions %JVM_OPTS% ++JvmOptions %FESS_PARAMS% %LOG_OPTS% --PidFile "%SERVICE_ID%.pid" --DisplayName "%SERVICE_DISPLAY_NAME%" --Description "%SERVICE_DESCRIPTION%" --Jvm "%%JAVA_HOME%%%JVM_DLL%" --StartMode jvm --StopMode jvm --StartPath "%FESS_HOME%" %SERVICE_PARAMS% ++StartParams start
+ "%EXECUTABLE%" //IS//%SERVICE_ID% --Startup %FESS_START_TYPE% --StopTimeout %FESS_STOP_TIMEOUT% --StartClass org.codelibs.fess.FessBoot --StopClass org.codelibs.fess.FessBoot --StartMethod main --StopMethod shutdown --Classpath "%FESS_CLASSPATH%" --JvmSs %JVM_SS% --JvmMs %JVM_XMS% --JvmMx %JVM_XMX% --JvmOptions %JVM_OPTS% ++JvmOptions %FESS_PARAMS% %LOG_OPTS% --PidFile "%SERVICE_ID%.pid" --DisplayName "%SERVICE_DISPLAY_NAME%" --Description "%SERVICE_DESCRIPTION%" --Jvm "%JAVA_HOME%%JVM_DLL%" --StartMode jvm --StopMode jvm --StartPath "%FESS_HOME%" %SERVICE_PARAMS% ++StartParams start
if not errorlevel 1 goto installed
echo Failed installing '%SERVICE_ID%' service
Q. Cygwinから起動したい。
A. シェルスクリプトbin/fess
のソースコードを読んで行くと、一見Cygwinに対応しているっぽい書きっぷりになっているのですが、試してみたところ正常に動きませんでした。batファイルを使うしかないようです。
以上!幸運を祈る。