10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

apt-keyが非推奨になったけどAnsibleではどう書けばいいのか

Last updated at Posted at 2023-02-15

apt-keyが非推奨になったけどAnsibleではどう書けばいいのか

TL;DR

  • get_urlでgpg keyを適切な場所に置く
    • /etc/apt/trusted.gpg.dは望ましくない
    • 適切な場所として/etc/apt/keyrings/usr/local/share/keyringsが考えられる
      • apt_repositoryのrepoで[signed-by=<パス>]を指定する
  • テキスト形式の鍵は*.asc、バイナリ形式の鍵は*.gpgという名前で保存する

環境

  • Debian 11

背景

apt-keyコマンドは非推奨であり、Debian 11とUbuntu 22.04の次のバージョンから消えるらしいです。

apt-keyのmanpagesより

Use of apt-key is deprecated, except for the use of apt-key del in maintainer scripts to remove existing keys from the main keyring. If such usage of apt-key is desired the additional installation of the GNU Privacy Guard suite (packaged in gnupg) is required.

apt-key(8) will last be available in Debian 11 and Ubuntu 22.04.

個人的に運用しているAnsible playbookにてdockerとkubernetesのインストールをapt_keyモジュールで行っていましたが、
これを使わない方法に改めることにしました。

調べてみると/etc/apt/trusted.gpg.dに鍵を置く例が見つかりましたが、
これはapt-key addと同じように他のリポジトリでも有効になってしまうので望ましくありません
そこで、別の場所に鍵を置き、sources内のsigned-byで鍵を指定します。

鍵の置き場所として、Docker Engineの公式インストール手順kubeadmの公式インストール手順ではいずれも/etc/apt/keyringsを使っているので、ここを使用することにします。

テキスト形式の鍵

DockerのGPG keyはテキスト形式で配布されていました。
公式手順ではgpg --dearmor -o /etc/apt/keyrings/docker.gpgによって、バイナリ形式に変換してから格納していますが、
.asc (ascii armor)という拡張子で保存すればそのまま使えます。

従って、Ansibleでは次のようにします。

- name: Add docker gpg key
  get_url:
    url: https://download.docker.com/linux/debian/gpg
    dest: /etc/apt/keyrings/docker.asc
    mode: '0644'
    force: true

- name: Add docker apt repository
  apt_repository:
    repo: deb [arch={{ deb_architecture[ansible_architecture] }} signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/{{ ansible_system | lower }}/{{ ansible_distribution | lower }} {{ ansible_distribution_release }} stable
    state: present

architectureを指定するために、次のような変数を用意し、playbookから参照できるようにします。

deb_architecture: {
  "armv6l": "armhf",
  "armv7l": "armhf",
  "aarch64": "arm64",
  "x86_64": "amd64",
  "i386": "i386"
}
  • architectureの指定はこちらを参考にしました

バイナリ形式の鍵

kubernetesのGPG keyはバイナリ形式でした。
従って、*.gpgという拡張子で保存します。

- name: Add kubernetes gpg key
  get_url:
    url: https://packages.cloud.google.com/apt/doc/apt-key.gpg
    dest: /etc/apt/keyrings/kubernetes-archive-keyring.gpg
    mode: '0644'
    force: true

- name: Add kubernetes apt repository
  apt_repository:
    repo: "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main"
    state: present

その他

apt-keyには関係ないですが、失効した鍵があるとapt update時に失敗するので、鍵の更新をapt updateが走る前に行っておく必要があります。
aptモジュールでupdate_cache: trueになっている場合や、apt_repositoryモジュールのデフォルト動作でapt updateがかかるのを見落としがちなので、気をつけます。

10
4
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
10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?