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 秒程度で完了する処理なので、パッケージのインストールが必要なビルドでは実行した方が良さそうです。