Building from source
====================

..  Warning::
   このオプションは、開発者および上級ユーザーを対象としています。  EDBによって構築およびテストされたソフトウェアのみがEDBによってサポートされています。 `Self-Managed Supported Open Source Software <https://www.enterprisedb.com/product-compatibility/edb-supported-open-source-software.pdf>`_ を参照してください。

.. ::
   TPAは、Postgresおよびその他の必要なコンポーネントをソースからビルドし、デフォルトのパッケージインストールの場合とまったく同じ構成でクラスターを展開できます。これにより、ソースから繰り返し展開して、アーキテクチャやプラットフォームに関係なく、特定のセットアップのあらゆる側面を再現する現実的な完全構成のクラスターで変更をすばやくテストすることができます。

特定のコンポーネントのパッケージインストールを他のコンポーネントのソースビルドと組み合わせることもできます。たとえば、パッケージからPostgresをインストールし、ソースからpglogicalとPGDをコンパイルできますが、パッケージの依存関係により、ソースからpglogicalをインストールし、パッケージからPGDをインストールできません。

ソースビルドは、開発、テスト、およびサポート操作で使用することを目的としています。

クイックスタート
----------------

2ndQPostgres、pglogical3、およびbdrはすべて安定したブランチからビルドされたものを使用してクラスターをスピンアップします。

.. code:: shell

   tpaexec configure ~/clusters/speedy -a BDR-Always-ON          \
       --layout bronze                                             \
       --harp-consensus-protocol etcd                              \
       --install-from-source                                       \
         2ndqpostgres:2QREL_13_STABLE_dev                          \
         pglogical3:REL3_7_STABLE                                  \
         bdr3:REL3_7_STABLE

上記と同様ですが、公式gitリポジトリから2ndQPostgresソースコードをビルドし、指定されたローカルワークツリーを使用してpglogicalおよびBDRをビルドするクラスターをセットアップします。この機能はDockerに固有です。

.. code:: shell

   tpaexec configure ~/clusters/speedy                           \
       --architecture BDR-Always-ON --layout bronze                \
       --harp-consensus-protocol etcd                              \
       --platform docker                                           \
       --install-from-source 2ndqpostgres:2QREL_13_STABLE_dev      \
         pglogical3 bdr3                                           \
       --local-source-directories                                  \
         pglogical3:~/src/pglogical bdr3:~/src/bdr

クラスターを展開した後、後続の実行で\ ``tpaexec deploy … --skip-tags build-clean``
を使用して、ビルドディレクトリを再利用できます。それ以外の場合、ビルドディレクトリはビルドを開始する前に空にされます。

カスタムの場所とビルドパラメーターを使用してPostgres、pglogical、
BDR、およびその他のコンポーネントをビルドする方法の詳細な説明を読んでください。

構成
----

ソースビルドの構成には2つの側面があります。

特定のソースの組み合わせを実行するクラスターのみが必要な場合は、
``tpaexec configure``
を実行して、選択したコンポーネントをダウンロード、コンパイル、およびインストールするための合理的なデフォルトで構成を生成します。上記の例に示すように、
PostgresまたはPostgres Extended、
pglogical、およびBDRをビルドし、ビルドするブランチ名を指定できます。

基になるメカニズムは、コマンドラインオプションで許可される以上の機能を備えています。
config.ymlを編集することにより、さまざまなソースリポジトリのクローンを作成したり、ビルドの場所を変更したり、別のconfigureまたはbuildパラメーターを指定したり、buildコマンドを完全に再定義したりできます。したがって、
Postgres、pglogical、およびBDR以外のものをビルドできます。

使用可能なオプションはここに文書化されています。

- :ref:`Postgres source installation <Postgres source installation>` 

- :ref:`ソースからのビルドとインストール <ソースからのビルドとインストール>` 

ローカルソースディレクトリ
--------------------------

TPAを使用して、GitリポジトリからではなくローカルソースディレクトリからPostgresおよび/または拡張機能をビルドするDockerコンテナをプロビジョニングできます。

``--install-from-source``
を使用して、ビルドするものを宣言しているとします。

.. code:: shell

   tpaexec configure ~/clusters/speedy                           \
       --architecture BDR-Always-ON --layout bronze                \
       --harp-consensus-protocol etcd                              \
       --platform docker                                           \
       --install-from-source 2ndqpostgres:2QREL_13_STABLE_dev      \
         pglogical3:REL3_7_STABLE bdr3:REL3_7_STABLE               \
         …

デフォルトでは、これはPostgres
Extended、pglogical3、およびbdr3の既知のリポジトリのクローンを作成し、指定されたブランチをチェックアウトして、ビルドします。ただし、
``--local-source-directories``
を追加して、代わりにホストマシンからソースを直接取得するように指定できます。

.. code:: shell

   tpaexec configure ~/clusters/speedy                           \
       --architecture BDR-Always-ON --layout bronze                \
       --harp-consensus-protocol etcd                              \
       --platform docker                                           \
       --install-from-source 2ndqpostgres:2QREL_13_STABLE_dev      \
         pglogical3 bdr3                                           \
       --local-source-directories                                  \
         pglogical3:~/src/pglogical bdr3:~/src/bdr                 \
       …

この構成でもPostgres
Extendedはリポジトリからインストールされますが、ホスト上の指定されたディレクトリからpglogical3およびbdr3ソースを取得します。これらのディレクトリは、gitリポジトリがクローン作成されるのと同じ場所にあるDockerコンテナに読み取り専用でバインドマウントされ、デフォルトのツリー外ビルドが通常のように続行されます。

コンポーネントのローカルソースディレクトリを指定する場合、ビルドするブランチを指定することはできません。上記の例の\ ``--install-from-source``
の\ ``pglogical3:REL3_7_STABLE`` と\ ``pglogical3``
を参照してください。ソースディレクトリはコンテナに読み取り専用でマウントされるため、TPAはそれを変更することはできません。\ ``git pull``
も\ ``git checkout``
も。ローカルにチェックアウトしたブランチ、コミットされていない変更などを取得します。

``--local-source-directories``
を使用すると、config.ymlにDockerボリューム定義のリストが含まれます。

.. code:: yaml

   local_source_directories:
     - /home/ams/src/pglogical:/opt/postgres/src/pglogical:ro
     - /home/ams/src/bdr:/opt/postgres/src/bdr:ro
     - ccache-bdr_src_36-20200828200021:/root/.ccache:rw

ccache
^^^^^^

TPAは、すべての種類のソースビルドにデフォルトでccacheをインストールします。ローカルソースディレクトリでDockerクラスターを使用している場合、デフォルトでは、新しいDockerボリュームがクラスターのコンテナに接続され、共有ccacheディレクトリとして機能します。このボリュームはホストから完全に分離され、クラスターがプロビジョニング解除されるときに削除されます。

``--shared-ccache /path/to/host/ccache``
configureオプションを使用して、有効期間の長い共有ccacheディレクトリを指定します。このディレクトリは、コンテナにr/wバインドマウントされ、そのコンテンツはホストとコンテナの間で共有されます。

デザインとして、ホストでコンパイルされたバイナリをコンテナに直接インストールする方法はありません。

リビルド
--------

ソースからビルドされたコンポーネントを使用してクラスターを展開した後、
``tpaexec rebuild-sources`` コマンドを使用して\ ``tpaexec deploy``
を再実行せずに、これらのコンポーネントをすばやくリビルドできます。これにより、コンテナ上のgitリポジトリからビルドされたコンポーネントに対して\ ``git pull``
が実行され、すべてのコンポーネントがリビルドされます。
