Building from source#

警告

このオプションは、開発者および上級ユーザーを対象としています。 EDBによって構築およびテストされたソフトウェアのみがEDBによってサポートされています。 Self-Managed Supported Open Source Software を参照してください。

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

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

クイックスタート#

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

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に固有です。

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以外のものをビルドできます。

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

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

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

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

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 を追加して、代わりにホストマシンからソースを直接取得するように指定できます。

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ボリューム定義のリストが含まれます。

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 が実行され、すべてのコンポーネントがリビルドされます。