いつも便利に利用させていただいている「5分で簡単に構築可能な全文検索サーバー」FessはJavaで書かれていて、先日発見されたLog4jの脆弱性対応が必要です。
FessのWebPageでは13.15.3
へアップデートするようにとアナウンスが出ています。
※やんごとなき理由でアップデートできない場合の対応策も書かれています。
現状困っていないのならLog4jで問題になっているclassファイルを消すという対応が楽そうです。しかし、うちの環境はElasticsearch-7.12.1, Fess-13.12.1 と少し古く、良い機会なのでアップデートを行うことにしました。
アップデート作業
事前作業
設定ファイル群のバックアップ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
_bk_date=$(date +%Y%m%d) cp -pi /etc/fess/fess_config.properties{,.$_bk_date} cp -pi /etc/fess/fess_env_crawler.properties{,.$_bk_date} cp -pi /etc/fess/fess_env_suggest.properties{,.$_bk_date} cp -pi /etc/fess/system.properties{,.$_bk_date} cp -pi /etc/fess/logging.properties{,.$_bk_date} cp -pi /usr/share/fess/app/WEB-INF/classes/crawler/contentlength.xml{,.$_bk_date} cp -pi /etc/default/fess{,.$_bk_date} cp -pi /etc/default/elasticsearch{,.$_bk_date} cp -pi /etc/elasticsearch/elasticsearch.keystore{,.$_bk_date} cp -pi /etc/elasticsearch/jvm.options{,.$_bk_date} cp -pi /etc/elasticsearch/log4j2.properties{,.$_bk_date} cp -pi /etc/elasticsearch/elasticsearch.yml{,.$_bk_date} unset _bk_date |
ロストできない重要データがある場合は、elasticsearchのバックアップを検討する必要があるでしょう。うちの環境ではロストしても全く問題ないのでバックアップを取得せずにアップグレードを行います。
elasticsearch の アップデート
今回、Fess-13.15.3 をインストールしますから、対応するelasticsearch-7.15.xx をインストールします。インストール可能なバージョンを調べると7.15.2
が良さそうです。
※ elasticsearchもJavaで書かれていますが、今回のLog4j脆弱性の影響は無いと書かれています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# apt list elasticsearch -a Listing... Done elasticsearch/stable 7.16.1 amd64 [upgradable from: 7.12.1] elasticsearch/stable 7.16.0 amd64 elasticsearch/stable 7.15.2 amd64 elasticsearch/stable 7.15.1 amd64 elasticsearch/stable 7.15.0 amd64 elasticsearch/stable 7.14.2 amd64 elasticsearch/stable 7.14.1 amd64 elasticsearch/stable 7.14.0 amd64 elasticsearch/stable 7.13.4 amd64 elasticsearch/stable 7.13.3 amd64 elasticsearch/stable 7.13.2 amd64 elasticsearch/stable 7.13.1 amd64 elasticsearch/stable 7.13.0 amd64 elasticsearch/stable,now 7.12.1 amd64 [installed,upgradable to: 7.16.1] elasticsearch/stable 7.12.0 amd64 elasticsearch/stable 7.11.2 amd64 (以下略) |
1 |
# apt install elasticsearch=7.15.2 |
アップデートで設定ファイルが変更された場合は、内容をよく比較して必要な修正を行います。
設定ファイルを修正したら、すぐにサービスを起動したくなりますが、古いpluginが残っている場合は起動に失敗しますので落ち着いてpluginの入れ替えを行います。java.lang.NoClassDefFoundError: org/elasticsearch/common/unit/TimeValue
こんなんが出たら、古い何かが残っている可能性が高いです。
elasticsearchのplugin入れ替え
elasticsearch pluginは、fessのバージョンで指定されるものが変わります。注意深ドキュメントを参照します。13.15 インストールマニュアル
1 2 3 4 5 6 7 8 |
cd /usr/share/elasticsearch/bin/ ./elasticsearch-plugin list ./elasticsearch-plugin remove analysis-extension ./elasticsearch-plugin remove analysis-fess ./elasticsearch-plugin remove minhash ./elasticsearch-plugin install org.codelibs:elasticsearch-analysis-fess:7.15.0 ./elasticsearch-plugin install org.codelibs:elasticsearch-analysis-extension:7.15.0 ./elasticsearch-plugin install org.codelibs:elasticsearch-minhash:7.15.0 |
configsyncの導入
基本的にマニュアルの手順通りです。注意点は、古いconfigsyncを読み込まないように古いものは削除する必要があるというところです。
1 2 3 4 5 |
curl -o /tmp/configsync.zip https://repo.maven.apache.org/maven2/org/codelibs/elasticsearch-configsync/7.15.0/elasticsearch-configsync-7.15.0.zip cd /usr/share/elasticsearch/modules mv -f ./configsync /tmp/configsync.old mkdir -p ./configsync unzip -d ./configsync /tmp/configsync.zip |
fessのアップデート
ダウンロードページから導入したいバージョン(今回は13.15.3)を取得します。
1 2 3 |
cd /tmp wget https://github.com/codelibs/fess/releases/download/fess-13.15.3/fess-13.15.3.deb dpkg -i ./fess-13.15.3.deb |
先に取得した設定ファイルのバックアップと比較して、必要なパラメータがあれば変更しておきます。
このあたり。
1 2 |
/etc/fess/* /usr/share/fess/app/WEB-INF/classes/crawler/contentlength.xml |
プロセス起動
elasticsearch -> fess の順で起動していきます。
1 2 3 4 |
# systemctl start elasticsearch # netstat -nap |grep -w LISTEN|grep -E ":9[23]00" # systemctl start fess |
無事にアップデートが完了しました 🙂
thumbnail生成スクリプト
サムネイル生成スクリプト(/usr/share/fess/generate-thumbnail
)に修正が入っていましたが、redhat系ディストリビューション向けの修正で、debian系ディストリビューションでは以前このblogで書いたように修正が必要です。
パッチを作って投げようかと思ったのですが、他の環境での動作確認はできないし、そもそもpdf以外を検索していないということもあり、断念しました。