Ubuntu Server 22.04.1 LTS を実機にインストールした。
現在、私が管理しているサーバーは1台を除いて全て Ubuntu Server 20.04 LTS を採用している。その1台だけ OS 起動後に謎のリブートがかかるという問題があったため Debian 11 をインストールしていたが、今後のアップデートも見据え、検証目的も含めて Ubuntu Server 22.04.1 を入れてみた。
結論から述べると、特に躓くことなくインストールは完了し、今のところ何の不具合も見られない。Ubuntu Server 18.04 LTS の時代に作ってメンテナンスしている Ansible は少し修正する必要があったが、軽微な変更のみだった。基本的に Docker さえ動いてしまえば良いという環境なので難しい設定は何もしてない。
1# https://docs.docker.com/engine/install/ubuntu/
2# https://docs.docker.com/engine/install/debian/
3
4- name: uninstall old versions
5 become: true
6 apt:
7 name: "{{ packages }}"
8 state: absent
9 vars:
10 packages:
11 - docker
12 - docker-engine
13 - docker.io
14 - containerd
15 - runc
16
17- name: install packages
18 become: true
19 apt:
20 name: "{{ packages }}"
21 state: present
22 vars:
23 packages:
24 - ca-certificates
25 - curl
26 - gnupg
27 - lsb-release
28
29- name: mkdir -p /etc/apt/keyrings
30 become: true
31 file:
32 path: /etc/apt/keyrings
33 state: directory
34 mode: '0755'
35
36- name: add Docker's official GPG key
37 become: true
38 # https://stackoverflow.com/a/9708556
39 shell: "curl -fsSL https://download.docker.com/linux/{{ ansible_facts['distribution'] | lower }}/gpg | gpg --batch --yes --dearmor -o /etc/apt/keyrings/docker.gpg"
40
41- name: get architecture
42 command: dpkg --print-architecture
43 register: dpkg_architecture
44
45- name: get lsb_release
46 command: lsb_release -cs
47 register: lsb_release
48
49- name: set up the stable repository
50 become: true
51 apt_repository:
52 repo: "deb [arch={{ dpkg_architecture.stdout }} signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/{{ ansible_facts['distribution'] | lower }} {{ lsb_release.stdout }} stable"
53 filename: docker
54 state: present
55
56- name: install docker
57 become: true
58 apt:
59 name: "{{ packages }}"
60 state: present
61 update_cache: yes
62 vars:
63 packages:
64 - docker-ce
65 - docker-ce-cli
66 - containerd.io
67 - docker-compose-plugin
上記 yaml は Docker 公式ドキュメントの手動インストールを素直に ansible で書き起こしただけの role の一例である。
Ubuntu | Docker Docs

アーキテクチャの取得や lsb_release
を実行しているところは、ansible_facts
の中に必要な値が含まれていそうな気がする。気が向いたら対応しようかなと思う。
Discovering variables: facts and magic variables —...
Ubuntu で、しかもサーバー版を利用しており、使い勝手はここ何年も変わってない印象だが、その中でも、本記事では以降、20.04 から 22.04 へのアップデートで、大きく変わったなと感じた2つの変更を紹介する。
目次
apt-key の廃止
第675回 apt-keyはなぜ廃止予定となったのか | gihyo.jp

対応策だけ雑に取り出すと、apt-key
ではなく gpg
を使えということらしい。ただし、既にファイルが存在するときに、上書きするかどうかの確認が出てくる。Ansible のような自動構成ツールを使っているとき、この確認で止まってしまうことがあるので、自動で上書きさせるオプション --batch --yes
を付けた。
gnupg - How to automatically overwrite the output file...

いくつかのミドルウェアの公式ドキュメントを眺めていると、個別リポジトリの鍵は /etc/apt/trusted.gpg.d/
よりも /etc/apt/keyrings/
に置いてるケースが多かったので、それに倣って設定を進めた。
needrestart の導入
第718回 needrestartで学ぶパッケージのフック処理 | gihyo.jp

needrestart
というプロセス再起動の仕組みが初期状態で導入された。今回、セットアップしたサーバーは開発(実験)用途で、再起動を意識しなければならないプロセスはないはずなので、必要な時に自動で再起動させるよう設定した。
1# Restart mode: (l)ist only, (i)nteractive or (a)utomatically.
2#
3# ATTENTION: If needrestart is configured to run in interactive mode but is run
4# non-interactive (i.e. unattended-upgrades) it will fallback to list only mode.
5#
6$nrconf{restart} = 'a';
上記設定ファイルを /etc/needrestart/conf.d/
以下に置いた。
NVIDIA 公式ドライバーのインストール
20.04 から 22.04 へのアップデートには関係ないが、NVIDIA 公式ドライバーをインストールする際にいつも下記の記事を参考にしている。
第454回 Ubuntu 16.04 LTSにNVIDIA製ドライバーをインストールする3つの方法 |...

以上、完全にありがとう柴田さん!をお送りしました。
サーバー版のUbuntu 22.04 LTSなどでapt upgradeするたびに表示されるようになった、あれの話です。 #ubuntujp
— 村人 (@MurabitoL) June 8, 2022
ちなみにDockerfileでapt-get upgradeする際は、DEBIAN_FRONTEND=noninteractiveを指定すると思います。 その場合は、needrestartで止まることはないので心配しなくても大丈夫です。 https://t.co/UBfeaLwxHz