Windows
Fess

FessをWindowsにインストールする

ちょっとしたファイルシステム(共有フォルダなど)を全文検索できるサーチエンジンとしては、古くはNamazuが一世風靡した時代もあったのですが、さすがに現代的でないので、今回はFessをインストールしてみます。
バージョンはFess 12.1.1、インストール先はWindows 10 64bit版です。

基本的には

  1. Javaです。
  2. debとrpmとzipが配布されていますが、Windowsにインストールできるのはzipだけです。
  3. GUIなインストーラーはありません。batファイルの、正直ちょーっとイケてない感じの、インストーラーが付属します。
  4. 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.batfess.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.batservice.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ファイルを使うしかないようです。

以上!幸運を祈る。