SambaでSpotlightを使えるようにした
https://qiita.com/ftns/items/b023160d5a759eec2b77
前提
「Spotlightが動作した」と言うだけであり、それ以上の検証は行っていない。
筆者はJavaやelasticsearchでは ど素人 なので、elasticsearchやfscrawlerの設定には ほぼ確実に 不適切な所があると思われる。ご指摘頂ければ幸いである。
elasticsearchへのアクセスにはパスワードすら設定できない。これはsamba4.1.13でパスワード等を指定する手段が無い為。おそらく近い将来のバージョンでサポートされると思われる。
以下の例では、sambaサーバ上の/shareと言うディレクトリを、Shareと言う名前で公開している。
環境
OS: FreeBSD 12.2-RELEASE-p11 amd64
samba: 4.13.14
samba
sambaのコンパイル
ports/pkg の sambaは、Spotlight非対応である。よってportsをSpotlight対応に設定した上で、コンパイル&インストールする必要がある。
# cd /usr/ports/net/samba413
# make config
(SPOTLIGHTにチェックを入れる)
# make clean all deinstall reinstall
smb4.conf
最低限必要な設定は、[global]セクションに
[global]
# Spotlight
spotlight backend = elasticsearch
elasticsearch:address = 127.0.0.1
elasticsearch:port = 9200
を追加し、Spotlightをサポートするボリュームに、
[Share]
spotlight=yes
を加えれば良い。
参考までに筆者が運用しているsmb4.confの抜粋を以下の折りたたみ部分に示す。
smb4.confの例
elasticsearch
インストール
# pkg install elasticsearch7 openjdk15
設定
elasticsearch本体の設定
/usr/local/etc/elasticsearch/elasticsearch.yml
cluster.name: samba
node.name: node1
path.data: /var/db/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 127.0.0.1
http.port: 9200
xpack.ml.enabled: false
discovery.type: single-node
xpack.security.enabled: false
JVMの設定
/usr/local/etc/elasticsearch/jvm.options
####################################
## IMPORTANT: JVM heap size
####################################
:
(略)
:
##
## -Xms4g
## -Xmx4g
##
を、以下のように変更(heap sizeを2GByteにする場合)
-Xms2g
-Xmx2g
elasticsearchは、デフォルトでは物理メモリの半分を確保してしまう。Spotlightのみに使うなら、2Gbyte程度で十分である。
以下のscript(esmem.py)でelasticsearchが消費しているheapの割合を調べられるので、割り当て量が妥当か確認できる。
スクリプト: esmem.py
/etc/rc.conf
以下を追加
# elasticsearch
elasticsearch_enable=”YES”
elasticsearch_java_home=”/usr/local/openjdk15″
起動
$ sudo service elasticsearch start
起動後の設定
以下の設定により、クラスタヘルスが yellow → greenとなった。
# 新しく作られるインデックスのレプリカ数を 0 に設定する。
$ curl -H “Content-Type: application/json” -XPUT localhost:9200/_templadte/template_1 -d ‘
{
“template” : “*”,
“settings” : {
“number_of_shards” : 1, “number_of_replicas” : 0
}
}’
# 既にインデックスが存在する場合、レプリカ数を 0 に変更する。
$ curl -H “Content-Type: application/json” -XPUT localhost:9200/*/_settings -d ‘{“number_of_replicas”:0}’
fscrawler
インストール
こちらから適切なパッケージをダウンロードし、適当なディレクトリに展開する。
ここでは例として、/usr/local/fscrawler-es7-2.7/に展開し、/usr/local/fscrawler -> fscrawler-es7-2.7と言うシンボリックリンクを張っておく。
$ cd /usr/local
$ sudo unzip <somewhere>/fscrawler-es7-2.7.zip
$ sudo ln -s fscrawler-es7-2.7 fscrawler
設定
実行時の設定
fscrawlerの実行時の設定ファイルは、実行ユーザの$HOME/.fscrawler/以下に置かれる。
ここでは /usr/local/fscrawler/config/以下に置く事とする。
$ sudo JAVA_HOME=/usr/local/openjdk15 /usr/local/fscrawler/bin/fscrawler job_share –config_dir /usr/local/fscrawler/config/
上を実行すると、/usr/local/fscrawler/config/job_share/_settings.yaml が生成されるので、これを編集する。
/usr/local/fscrawler/config/job_share/_settings.yaml
—
name: “job_share”
fs:
url: “/share”
update_rate: “15m”
excludes:
– “*/~*”
– “*/.*”
– “*/*~”
json_support: false
filename_as_id: false
add_filesize: true
remove_deleted: true
add_as_inner_object: false
store_source: false
index_content: true
attributes_support: false
raw_metadata: false
xml_support: false
index_folders: true
lang_detect: false
continue_on_error: true
ocr:
language: “eng”
enabled: true
pdf_strategy: “ocr_and_text”
follow_symlinks: false
elasticsearch:
nodes:
– url: “http://127.0.0.1:9200”
bulk_size: 100
flush_interval: “5s”
byte_size: “10mb”
ssl_verification: false
変更したのは、name(セッション名), url(インデックスを作る対象のpath), excludes(インデックス対象から除外するpath), continue_on_error(エラー発生時に続けるか), ssl_verification(SSL証明書の検証を行うか)のみである。
cron
fscrawlerはsambaサーバ上に常駐させる事もできるが、ここではcronで定期的に動作させる事にする。
/usr/local/sbin/fscrawler.sh
#!/bin/sh
export JAVA_HOME=/usr/local/openjdk15
args=”$@ –silent –loop 1 –config_dir /usr/local/fscrawler/config”
jobs=”job_share”
for job in $jobs; do
/usr/local/fscrawler/bin/fscrawler $job $args
done
/etc/cron.d/fscrawler.cron
# fscrawler
#%M %H %d %m %w user command
0 4 * * 1-6 root /usr/local/sbin/fscrawler.sh
0 4 * * 0 root /usr/local/sbin/fscrawler.sh –restart
その他
fscrawlerにインデックスを作らせたくないディレクトリには、.fscrawlerignore と言うファイルを作っておく。
$ cd somewhere-you-want-to-hide-from-spotlight
$ touch .fscrawlerignore
なお上記設定では、.(dot)で始まるか、~(tilde)が先頭か最後に付いているファイル・ディレクトリを無視するように設定している。
参考
Samba with macOS Spotlight on FreeBSD with Elasticsearch
このページを元に調べた
Spotlight – SambaWiki
Samba projectによるSpotlight解説
Elasticsearchリファレンス [5.4] | Elastic
古いバージョン向けの日本語ドキュメント
Elasticsearch Guide [7.16] | Elastic
英語ドキュメントは、最新版が公開されている
Welcome to FSCrawler’s documentation! — FSCrawler 2.9-SNAPSHOT documentation
FSCrawlerのドキュメント

コメント