0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Amazon Linux 2023でPGroongaをソースビルドしたら pg_config が壊れたシンボリックリンクだった話

0
Posted at

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系パッケージ全体に漂う構造的な不安定さの一例だったと考えられます。

迷走した対処の記録

実際にどう手を動かしたか、そのまま記録しておきます(同じ轍を踏まないためのアンチパターン集として)。

  1. pg_config --version を実行 → No such file or directory
  2. リンク先の pg_server_config を find で探す → 見つからない
  3. echo $PATH でパスの通り方を確認 → 問題なし(/usr/bin は含まれている)
  4. make clean → pg_config: No such file or directory で結局失敗
  5. PostgreSQLを公式リポジトリから入れ直すか、PGroongaを諦めるかの二択を検討
  6. → 最終的に 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でどうしても動かす必要がある場合は、この記事の手順を参考にしてください。

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?