パッケージ管理

Solrのパッケージマネージャーを使用すると、Solrのクラスタ環境にSolr固有のパッケージをインストールおよび更新できます。

このシステムでは、*パッケージ*とは、1つ以上のSolrプラグインを含むJava jarファイル(通常は1つ)のセットです。各jarファイルには、署名文字列(提供された公開鍵に対して検証可能)も付属しています。

このシステムの重要な設計思想は、すべてのノードを再起動する必要なく、クラスタ環境でパッケージを安全にインストールまたは更新できることです。

設計のその他の要素には、リモートリポジトリからのインストール機能、パッケージの標準化、コマンドラインインターフェース(CLI)、パッケージストアなどがあります。

このセクションでは、パッケージマネージャーを使用してパッケージをインストールおよび更新する方法に焦点を当てます。技術的な詳細については、パッケージマネージャーの内部のセクションを参照してください。

パッケージマネージャーとの対話

パッケージマネージャー(CLI)では、次のことができます。

  • 信頼できるリポジトリを追加する

  • リポジトリのパッケージを一覧表示する

  • 必要なパッケージをインストールする

  • コレクションまたはクラスタにパッケージをデプロイおよびアンデプロイする

  • 更新が利用可能な場合にパッケージを更新する

パッケージマネージャーを有効にする

パッケージマネージャーはデフォルトで無効になっています。有効にするには、すべてのSolrノードを-Denable.packages=trueパラメーターで起動します。

$ bin/solr -c -Denable.packages=true
パッケージマネージャーを有効にすることには、セキュリティ上の影響があります。承認されていないユーザーがシステムにアクセスした場合、ZooKeeperへの書き込みアクセス権が付与され、信頼できないソースからパッケージをインストールする可能性があります。パッケージマネージャーを有効にする前に、必ずファイアウォールと認証と承認の設定を使用してSolrを保護してください。

信頼できるリポジトリを追加する

*リポジトリ*とは、1つまたは複数のパッケージをホストする場所です。多くの場合、これは、パッケージに関するメタ情報、ダウンロード用のパッケージアーティファクト、およびインストール中にjarファイルの署名を検証するための公開鍵を提供するWebサービスです。

Solrにパッケージをインストールするには、パッケージをホストするリポジトリを追加する必要があります。

$ bin/solr package add-repo <repository-name> <repository-url>
信頼していない、または制御していないリポジトリは追加しないでください。MITM攻撃から保護するために、HTTPSに基づくリポジトリのみを追加し、HTTPに基づくリポジトリは避けてください。

パッケージのリストとインストール

インストールされているパッケージを一覧表示するには

$ bin/solr package list-installed

追加されたリポジトリからインストール可能なパッケージを一覧表示するには

$ bin/solr package list-available

パッケージをインストールするには、リポジトリからアーティファクトをSolrの内部パッケージストアにコピーし、このパッケージを使用するためのクラスローダーを設定します。

$ bin/solr package install <package-name>[:<version>]

パッケージのデプロイ

パッケージがインストールされると、その中に含まれるプラグインはコレクションまたはクラスタレベルで使用できます。

これを行うには、CLIのdeployコマンドを使用するか、手動で行うかの2つの方法があります。

deploy コマンド

パッケージの作成者がサポートを表明している場合、パッケージはCLIのdeployコマンドでデプロイできます。

$ bin/solr package deploy <package-name>:[version] -collections <collection1>[,<collection2>,...] [-p <param1>=<val1> -p <param2>=<val2> ...

または

$ bin/solr package deploy <package-name>:[version] -cluster

パッケージがセットアップコマンドのパラメーターを受け入れる場合、(パッケージのドキュメントに従って)それらを指定できます。

$ bin/solr package deploy <snipped...> -p <param1>=<val1> -p <param2>=<val2>

作成者は、プロンプトを介してパッケージのデプロイを確認することを求める場合があります。コマンドに-yを渡すと、確認をスキップできます。

手動デプロイ

設定セットを編集し、コレクションをリロードすることにより、パッケージのコレクションレベルのプラグインを手動でデプロイすることも可能です。

たとえば、mypackageという名前のパッケージにリクエストハンドラーが含まれている場合、設定セットのsolrconfig.xmlに次のように追加します。

<requestHandler name="/myhandler" class="mypackage:full.path.to.MyClass"></requestHandler>

次に、コレクションAPIのRELOADコマンドまたは管理UIを使用して、コレクションをリロードします。

次に、このコレクションが使用しているパッケージのバージョンを設定します。コレクションの名前がcollection1、パッケージ名がmypackage、インストールされているバージョンが1.0.0の場合、コマンドは次のようになります。

curl  "https://127.0.0.1:8983/api/collections/collection1/config/params" \
   -H 'Content-type:application/json' -d "{set: {PKG_VERSIONS: {mypackage: '1.0.0'}}}"

クラスタレベルのプラグインを手動でインストールする方法については、クラスタレベルのリクエストハンドラーを参照してください。

デプロイの確認

デプロイ後、コレクションがパッケージを使用していることを確認します。

$ bin/solr package list-deployed -c <collection>

パッケージの更新

パッケージを更新するには、まず、上記のパッケージの一覧表示とインストールに示されているlist-availableコマンドを実行して、更新されたバージョンが追加されたリポジトリで使用可能であることを確認します。

次に、リポジトリからパッケージの新しいバージョンをインストールします。

$ bin/solr package install <package-name>:<version>

新しいバージョンをインストールしたら、各コレクションまたはクラスタレベルのプラグインを選択的に更新できます。パッケージmypackageの古いバージョンが1.0.0で、新しいバージョンが2.0.0であると仮定すると、コマンドは次のようになります。

$ bin/solr package deploy mypackage:2.0.0 --update -collections mycollection

または

$ bin/solr package deploy mypackage:2.0.0 --update -cluster

list-deployedコマンドを実行して、このコレクションが新しく追加されたバージョンを使用していることを確認できます。

パッケージのアンデプロイ

パッケージが、含まれているプラグインのアンデプロイをサポートしている場合(パッケージ作成者のドキュメントを確認してください)、以前にデプロイされたパッケージは次のようにアンデプロイできます。

$ bin/solr package undeploy <package-name> -collections <collection1>[,<collection2>,...]

パッケージのアンインストール

パッケージがアンデプロイされているか、デプロイされていない場合は、次のようにアンインストールできます。

$ bin/solr package uninstall <package-name>:<package-version>

または

$ bin/solr package deploy <package-name>:<package-version> -cluster

パッケージ名とバージョンの両方が必要です。

セキュリティ

Solrがリポジトリの公開鍵を取得する際に中間者攻撃を防ぐために、add-repo手順はHTTPSが有効なリポジトリURLのみを使用して実行する必要があります。このadd-repo手順は、信頼できるリポジトリの公開鍵を登録するため、パッケージストアAPIを使用して書き込むことができないパッケージストアの特別な場所であるパッケージストアのトラストストアに直接書き込みアクセスできるパッケージマネージャー(CLI)を使用してのみ実行できます。また、ZooKeeperを不正な書き込みアクセスから保護することが重要です。

また、リポジトリが追加されると、リポジトリから**任意の**パッケージをインストールできることに注意してください。本番環境で一部のパッケージを使用する場合は、管理制御が及ばない汎用サードパーティリポジトリを追加する代わりに、独自のリポジトリをセットアップしてSolrに追加することをお勧めします。独自の秘密鍵を使用してサードパーティリポジトリからパッケージに再署名し、独自のリポジトリでホストすることをお勧めします。