CircleCI で postgresql-client パッケージをインストールできない問題
CircleCI でとある Rails プロジェクトをビルドする際、structure.sql
を使っている関係で psql
コマンドを実行する必要があり postgresql-client
パッケージをインストールしています。
しかし 2019/05 上旬から bin/rails db:test:prepare
を実行するタスクで Please check the output above for any errors and make sure that psql is installed in your PATH and has proper permissions.
というエラーが表示されてビルドが失敗するようになりました。
CircleCI のビルドログを確認してみると、postgresql-client
をインストールするタスクでエラーが発生していました。
バージョン 9.6.11
のパッケージをインストールしようとしたけど、パッケージが 404 Not Found になっているようです。
Docker イメージは circleci/ruby:2.6.1-node-browsers
を使用しています。
#!/bin/bash -eo pipefail
sudo apt install -y postgresql-client
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
postgresql-client-9.6 postgresql-client-common
Suggested packages:
postgresql-9.6 postgresql-doc-9.6
The following NEW packages will be installed:
postgresql-client postgresql-client-9.6 postgresql-client-common
0 upgraded, 3 newly installed, 0 to remove and 2 not upgraded.
Need to get 1416 kB of archives.
After this operation, 6001 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian stretch/main amd64 postgresql-client-common all 181+deb9u2 [79.2 kB]
Err:2 http://deb.debian.org/debian stretch/main amd64 postgresql-client-9.6 amd64 9.6.11-0+deb9u1
404 Not Found
Get:3 http://deb.debian.org/debian stretch/main amd64 postgresql-client all 9.6+181+deb9u2 [55.8 kB]
Fetched 135 kB in 0s (0 B/s)
E: Failed to fetch http://deb.debian.org/debian/pool/main/p/postgresql-9.6/postgresql-client-9.6_9.6.11-0+deb9u1_amd64.deb 404 Not Found
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
エラーメッセージの最後に apt-get update
を実行してみて、と書かれています。パッケージ情報が古くなっていそうですね。
パッケージ情報を更新する
プロジェクトの .circleci/config.yml
で、postgresql-client
をインストールする前に apt update
を実行し、パッケージ情報を更新するようにしました。
- run: sudo apt update
- run: sudo apt install -y postgresql-client
再度、ビルドを実行したところ、バージョン 9.6.12
がインストールされて、ビルドが成功するようになりました。
#!/bin/bash -eo pipefail
sudo apt install -y postgresql-client
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libpq-dev libpq5 postgresql-client-9.6 postgresql-client-common
Suggested packages:
postgresql-doc-9.6 postgresql-9.6
The following NEW packages will be installed:
postgresql-client postgresql-client-9.6 postgresql-client-common
The following packages will be upgraded:
libpq-dev libpq5
2 upgraded, 3 newly installed, 0 to remove and 35 not upgraded.
Need to get 1767 kB of archives.
After this operation, 6007 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian stretch/main amd64 libpq-dev amd64 9.6.12-0+deb9u1 [216 kB]
Get:2 http://deb.debian.org/debian stretch/main amd64 libpq5 amd64 9.6.12-0+deb9u1 [136 kB]
Get:3 http://deb.debian.org/debian stretch/main amd64 postgresql-client-common all 181+deb9u2 [79.2 kB]
Get:4 http://deb.debian.org/debian stretch/main amd64 postgresql-client-9.6 amd64 9.6.12-0+deb9u1 [1281 kB]
Get:5 http://deb.debian.org/debian stretch/main amd64 postgresql-client all 9.6+181+deb9u2 [55.8 kB]
Fetched 1767 kB in 0s (61.2 MB/s)
debconf: delaying package configuration, since apt-utils is not installed
(Reading database ... 41645 files and directories currently installed.)
Preparing to unpack .../libpq-dev_9.6.12-0+deb9u1_amd64.deb ...
Unpacking libpq-dev (9.6.12-0+deb9u1) over (9.6.11-0+deb9u1) ...
Preparing to unpack .../libpq5_9.6.12-0+deb9u1_amd64.deb ...
Unpacking libpq5:amd64 (9.6.12-0+deb9u1) over (9.6.11-0+deb9u1) ...
Selecting previously unselected package postgresql-client-common.
Preparing to unpack .../postgresql-client-common_181+deb9u2_all.deb ...
Unpacking postgresql-client-common (181+deb9u2) ...
Selecting previously unselected package postgresql-client-9.6.
Preparing to unpack .../postgresql-client-9.6_9.6.12-0+deb9u1_amd64.deb ...
Unpacking postgresql-client-9.6 (9.6.12-0+deb9u1) ...
Selecting previously unselected package postgresql-client.
Preparing to unpack .../postgresql-client_9.6+181+deb9u2_all.deb ...
Unpacking postgresql-client (9.6+181+deb9u2) ...
Setting up libpq5:amd64 (9.6.12-0+deb9u1) ...
Processing triggers for libc-bin (2.24-11+deb9u4) ...
Setting up postgresql-client-common (181+deb9u2) ...
Setting up libpq-dev (9.6.12-0+deb9u1) ...
Setting up postgresql-client-9.6 (9.6.12-0+deb9u1) ...
update-alternatives: using /usr/share/postgresql/9.6/man/man1/psql.1.gz to provide /usr/share/man/man1/psql.1.gz (psql.1.gz) in auto mode
Setting up postgresql-client (9.6+181+deb9u2) ...
apt update
は 1 秒程度で完了する処理なので、パッケージのインストールが必要なビルドでは実行した方が良さそうです。