GitLab | apt update 実行時にエラーが発生したしたときの対処方法

コードの管理のほとんどは GitHub に移行したのだが、一部はまだローカルの GitLab に残っている。 久しぶりに GitLab のバージョンアップを行ったところエラーが発生したので、対処方法をメモしてみた。

エラーの発生

sudo apt update コマンド実行時に以下のエラーが発生する。

1
2
Err:7 https://packages.gitlab.com/gitlab/gitlab-ce/debian stretch InRelease
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 3F01618A51312F3F

対応

エラーメッセージの内容から公開鍵が無効なようだが、過去にインストールできているので間違っているというよりは有効期限切れだと考えられる。

公開鍵の更新に使えそうなコマンドを探すと、apt-key というコマンドを見つけた。

1
2
3
4
$ man -k apt pubkey
...
apt-key (8) - APT key management utility
...

次に、apt-key で使えそうなコマンドを探すと adv というコマンドを見つけた。

1
2
3
4
5
6
7
8
$ man apt-key | grep -3 gpg
List fingerprints of trusted keys.

adv
Pass advanced options to gpg. With adv --recv-key you can e.g. download key from keyservers directly into
the the trusted set of keys. Note that there are no checks performed, so it is easy to completely
undermine the apt-secure(8) infrastructure if used without care.
...

apt-key adv コマンドを –recv-keys オプションをエラーメッセージに表示されているキーを指定して実行する。

1
2
3
4
5
$ sudo apt-key adv --recv-keys 3F01618A51312F3F
Executing: /tmp/tmp.dWSXwA9GJn/gpg.1.sh --recv-keys
3F01618A51312F3F
gpg: no keyserver known (use option --keyserver)
gpg: keyserver receive failed: bad URI

どうやら、keyserver というオプションも指定しないといけないらしい。

システム内でキーサーバーの設定を見つけられないかったので、ググったところ keyserver.ubuntu.com を指定するらしい。

1
2
3
4
5
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3F01618A51312F3F
Executing: /tmp/apt-key-gpghome.1POowe0nVT/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys 3F01618A51312F3F
gpg: key 3F01618A51312F3F: public key "GitLab B.V. (package repository signing key) <packages@gitlab.com>" imported
gpg: Total number processed: 1
gpg: imported: 1

imported となっているので、おそらく成功だと思う。

取得した鍵情報は apt-key list コマンドで確認できる。

1
2
3
4
5
6
7
8
9
10
11
12
13
$ sudo apt-key list
...
/etc/apt/trusted.gpg
--------------------
pub rsa4096 2015-04-17 [SC] [expired: 2020-04-15]
1A4C 919D B987 D435 9396 38B9 1421 9A96 E15E 78F4
uid [ expired] GitLab B.V. (package repository signing key) <packages@gitlab.com>
...
pub rsa4096 2020-03-02 [SC] [expires: 2022-03-02]
F640 3F65 44A3 8863 DAA0 B6E0 3F01 618A 5131 2F3F
uid [ unknown] GitLab B.V. (package repository signing key) <packages@gitlab.com>
sub rsa4096 2020-03-02 [E] [expires: 2022-03-02]
...

しまった。更新する前に expire していることを確認するべきだった。