Lightsail上で動かしているDebian BusterをBullseyeにアップグレードした話

今月（2021年8月、投稿時点）Debianの新しいバージョン、Debian 11 Bullseyeがリリースされた。早速試したい[^reason]のだが、AWS LightsailではまだBullseyeでのインスタンス作成はできなかった。

ということで、すでに動かしているBusterからのアップグレードを試みた。

## 環境

### サーバーの概要

- 主な用途は外部から（グローバルIPを持たない）自宅サーバへアクセスするためのVPNゲートウェイ
- AWS Lightsailの一番安いインスタンスで運用
- OSは Debian 10 Buster（更新前）

### OSのバージョン

```
$ uname -a
Linux beaver 4.19.0-17-cloud-amd64 #1 SMP Debian 4.19.194-2 (2021-06-21) x86_64 GNU/Linux
$ cat /etc/debian_version 
10.10
```

## 手順

手順自体は[公式の手順](https://www.debian.org/releases/stable/i386/release-notes/ch-upgrading.ja.html)通りで問題ないので、詳細はそちらを参照のこと。


### （スナップショットの作成）

念の為Lightsailのコンソールからインスタンスのスナップショットを撮っておく。

### パッケージ取得先の設定の変更

Debian系のパッケージマネージャーは`/etc/apt/source.list`内で指定されているサーバーからパッケージを取得している（らしい）。
Debianの場合[^ubuntu]以下のようにバージョン名（今回の例であれば`buster`）も指定されているため、アップグレードにあたってこれを`bullseye`に書き替える必要がある

Before

```conf:/etc/apt/sources.list
deb http://cdn-aws.deb.debian.org/debian buster main
deb-src http://cdn-aws.deb.debian.org/debian buster main
deb http://security.debian.org/debian-security buster/updates main
deb-src http://security.debian.org/debian-security buster/updates main
deb http://cdn-aws.deb.debian.org/debian buster-updates main
deb-src http://cdn-aws.deb.debian.org/debian buster-updates main
deb http://cdn-aws.deb.debian.org/debian buster-backports main
deb-src http://cdn-aws.deb.debian.org/debian buster-backports main
```

After

```conf:/etc/apt/sources.list
deb http://cdn-aws.deb.debian.org/debian bullseye main
deb-src http://cdn-aws.deb.debian.org/debian bullseye main
#deb http://security.debian.org/debian-security bullseye/updates main
#deb-src http://security.debian.org/debian-security bullseye/updates main
deb http://cdn-aws.deb.debian.org/debian bullseye-updates main
deb-src http://cdn-aws.deb.debian.org/debian bullseye-updates main
deb http://cdn-aws.deb.debian.org/debian bullseye-backports main
deb-src http://cdn-aws.deb.debian.org/debian bullseye-backports main
```

2行コメントアウトしているのはまだ該当のディレクトリがなく、エラーになったため。
一つでもエラーがあると更新しないということなので、該当の行のみだけコメントアウトして対応。


### 更新

まずはパッケージのリストを更新する

```
$ sudo apt update
```

 
公式に習って更新は2工程に分けて行う[^2step]

まず最小アップグレードを行う

```
apt upgrade --without-new-pkgs
```

問題は起きなかったので続いてシステム全体のアップグレードを行う。 

```
sudo apt full-upgrade
```

#### 衝突の解消
パッケージの更新に伴い設定ファイルの更新もあり、この際（主に自分が手動で修正した）既存の設定ファイルと衝突するものがいくつか出てきたため、都度以下のいずれかの対処をする必要があった。

- 従来のを**維持**
- 新しいので**上書き**する
- 一旦更新を止めて手動で**マージ**



名前|対処|備考
:--|:--|:--
nsd|上書き|特に設定を変えた覚えがないのと、後日別で設定を見返す予定のため更新 [^nsd]
chrony|上書き| 特に設定を変えた覚えがないのと、後日別で設定を見返す予定のため更新 [^chrony]
sysctl|維持|変更箇所はIPフォワードに関する設定だけだったので残した。
squid|維持|過去に中継サーバの設定をしていたので残した。 [^squid]
sshd|マージ|ほぼ従来のままだが、include文が増えていたのでそれだけ追加



## 結果

```bash
$ cat /etc/debian_version 
11.0
$ uname -a
Linux beaver 5.10.0-8-cloud-amd64 #1 SMP Debian 5.10.46-4 (2021-08-03) x86_64 GNU/Linux
```


ひとまず日常的に使っている機能（`wireguard`、`dnsmasq`と`ssh`）は問題なく使えているのでヨシ。


[^reason]: 具体的にBullseyeに更新したい動機としては、~~[`nftables`でのファイヤーウォールの時間での許可不許可の切り替え機能を試したかった](https://unix.stackexchange.com/questions/551821/how-do-you-filter-packets-differently-based-on-time-of-day-in-nftables)~~のだが、よく読んだら結局実装されていなかった模様。ちゃんと資料は最後まで読まないとだめだなと反省。 ~~そもそも新しい機能が使いたいなら素直にUbuntuを使えばいい話ではある~~
[^ubuntu]: Debianの場合、と書いたのはUbuntuでは違って、`souces.list`を書き換えなくてもアップグレードできるらしいので
[^2step]: 今回のケースでは問題ないとは思うが念のため
[^nsd]: 現在稼働している`dnsmasq`から移行する予定でインストールしたがまだ設定していないので更新。
[^chrony]: おそらくLightsail用の初期設定がされていたのではないかという気がする。自宅サーバやクライアントとの同期用にNTPサーバとしての設定も遠からず見返す予定なのでそのまま更新。
[^squid]: squidのデフォルトの設定ファイルはコメント行が非常に多く、真面目に更新内容を確認するのが現実的ではないためまともに読むのは確認するのはあきらめた。トラブったらその時対応する。