Amazon Linux 2023でPGroongaをソースビルドしたら pg_config が壊れたシンボリックリンクだった話
- Amazon Linux 2023に
postgresql16-private-develを入れてもpg_configが動かない - 正体は 壊れたシンボリックリンク(リンク先
pg_server_configがシステム上に存在しない) - 実は PGroongaは公式にAmazon Linuxのサポートを終了している ため、そもそも公式パッケージが存在せずソースビルドするしかなかった
- さらにAL2023のPostgreSQL devel系パッケージ自体に構造的な不具合がAWS公式リポジトリのIssueで複数報告されている
- 最終的な回避策は
postgresql16-private-develを捨ててlibpq-develに置き換える こと
背景
NextNavinity(マルチテナントSaaS)のDB全文検索用に、EC2(Amazon Linux 2023)上でPostgreSQL 16 + PGroongaの環境を構築していました。手順自体はAlmaLinux向けの公式ドキュメントを参考にしていたのですが、Amazon Linux 2023特有の問題にぶつかり、深夜に数時間格闘する羽目になりました。同じ地雷を踏む人を減らすため、原因と対処法を残しておきます。
発生した現象
postgresql16-private-devel パッケージ(PostgreSQLのヘッダファイルや pg_config を含む開発用パッケージ)をインストールしても、pg_config が動作しません。
$ pg_config --version
-bash: /usr/bin/pg_config: No such file or directory
rpm -ql でパッケージの中身を見ると、たしかに /usr/bin/pg_config は含まれています。
$ rpm -ql postgresql16-private-devel
/usr/bin/pg_config
/usr/include/libpq-events.h
/usr/include/libpq-fe.h
...
しかし実体を見ると、これは壊れたシンボリックリンクでした。
$ ls -la /usr/bin/pg_config
lrwxrwxrwx. 1 root root 16 Aug 28 07:57 /usr/bin/pg_config -> pg_server_config
リンク先の pg_server_config がシステム上のどこにも存在しません。
$ find / -name "pg_server_config" 2>/dev/null
# 何も見つからない
find / -name "pg_config" -type f でシステム全体を探しても、pg_config の実行ファイル本体はどこにも存在しませんでした。パッケージのメタ情報上は「入っている」ことになっているのに、実体が存在しないという厄介な状態です。
当然、この状態では make も失敗します。
$ cd ~/pgroonga
$ make
make[1]: pg_config: No such file or directory
make[1]: *** No rule to make target 'clean'. Stop.
なぜこんなことが起きるのか
1. PGroongaはそもそもAmazon Linuxのサポートを終了している
これが一番の根本原因です。PGroonga公式ドキュメントには、はっきりとこう書かれています。
Amazon Linuxのサポートは終了しました。
参考: PGroonga - Amazon Linux にインストール
AlmaLinuxやDebianには、PGDG(PostgreSQL公式)リポジトリを追加して dnf install postgresql16-pgdg-pgroonga のように1コマンドで入る公式RPMパッケージが用意されています。しかしAmazon Linux向けにはこの手順自体が存在しません。つまり今回のようなソースからのビルドが、実質的に唯一の選択肢だったわけです。「公式にサポートされていない環境で無理にビルドしようとしていた」という前提を最初から認識していれば、心構えも変わっていたと思います。
2. Amazon Linux 2023のPostgreSQL devel系パッケージ自体が不安定
追い打ちをかけるように、AL2023の postgresql*-devel 系パッケージには構造的な不具合がいくつも報告されています。
Issue: pg_config has wrong LDFLAGS set
amazonlinux/amazon-linux-2023 #529
libpq-devel パッケージの pg_config --ldflags の出力に、存在しないリンカースクリプトファイル(.package_note-*.ld)へのパスが含まれており、ビルド時にリンクエラーになるという報告です。しかも同issueの中で「以前にも同じ問題があった(#239)、デジャブだ」とコメントされており、繰り返し発生している既知の問題であることが分かります。
Issue: postgresql-devel パッケージが提供されていない
amazonlinux/amazon-linux-2023 #351
Djangoアプリのpsycopg2ビルドに必要な postgresql-devel パッケージ自体がAL2023には存在しない、という報告もありました。AL2ではyumで普通に入っていたパッケージ体系が、AL2023では再編されて分かりにくくなっている印象です。
つまり今回遭遇した「pg_configが壊れたシンボリックリンクになっている」現象は、単発の事故ではなく、AL2023のPostgreSQL関連devel系パッケージ全体に漂う構造的な不安定さの一例だったと考えられます。
迷走した対処の記録
実際にどう手を動かしたか、そのまま記録しておきます(同じ轍を踏まないためのアンチパターン集として)。
-
pg_config --versionを実行 →No such file or directory - リンク先の
pg_server_configをfindで探す → 見つからない -
echo $PATHでパスの通り方を確認 → 問題なし(/usr/binは含まれている) -
make clean→pg_config: No such file or directoryで結局失敗 - PostgreSQLを公式リポジトリから入れ直すか、PGroongaを諦めるかの二択を検討
- → 最終的に
postgresql16-private-develをlibpq-develに置き換えることで解決
3と4は「パスは通っているのに実行できない」という状態で、原因がリンク切れであることに気づくまで少し時間がかかりました。ls -la でリンク先まで確認するのが一番の近道です。
解決策
postgresql16-private-devel を諦めて、libpq-devel パッケージを使います。
# 事前準備: 開発ツール一式
sudo dnf install -y gcc gcc-c++ make cmake git xxhash-devel
# postgresql16-private-devel を削除して libpq-devel に置き換える
sudo dnf install -y libpq-devel --allowerasing
# pg_config が動くことを確認
pg_config --version
# → PostgreSQL 16.x と表示されればOK
--allowerasing を付けないと、既存パッケージとの競合でインストールが止まることがあるので必須です。
Groongaのビルド
cd ~
wget https://packages.groonga.org/source/groonga/groonga-latest.tar.gz
tar xzf groonga-latest.tar.gz
cd groonga-*
./configure
make
sudo make install
sudo ldconfig
PGroongaのビルド
cd ~
git clone https://github.com/pgroonga/pgroonga.git
cd pgroonga
make
sudo make install
PostgreSQLへの適用
sudo systemctl restart postgresql
sudo -u postgres psql
CREATE EXTENSION pgroonga;
\dx
\dx の一覧に pgroonga が表示されれば成功です。
まとめ
- Amazon Linux 2023で
postgresql16-private-develのpg_configが動かない場合、壊れたシンボリックリンクを疑う - 対処法は
libpq-develへの置き換え(--allowerasing必須) - そもそも PGroongaはAmazon Linuxのサポートを終了している ため、ソースビルドが前提になる
- AL2023のPostgreSQL devel系パッケージには、今回とは別の既知の不具合(LDFLAGS問題など)も複数報告されており、devel系パッケージ全般の信頼性を最初から疑ってかかるのが安全
PGroongaを日本語全文検索の用途でAL2023に載せたい人は、無難にAlmaLinuxやDebian系のコンテナ上でビルドする、あるいはPGDG公式パッケージが使えるOSを選ぶ方が近道かもしれません。それでもAL2023でどうしても動かす必要がある場合は、この記事の手順を参考にしてください。