Debian GNU/Linux 12から13へのアップグレード覚書

はじめに

管理しているサーバがDebian12のため、13にアップグレードする。その際のメモ。

いかに従ってアップグレードする。

Debian12を最新へ

最新の状態にする。

% export LANG=C
% sudo apt update
% sudo apt upgrade -y
% cat /etc/debian_version
12.13

利用されなくなったパッケージを削除する。

4.9. 利用されなくなったパッケージに従って、利用されなくなったパッケージを削除する。以下のコマンドで表示されたパッケージを削除する。

% apt list '?obsolete'
% sudo su
# apt purge '?obsolete'

Debian 由来でないパッケージを削除する

% sudo apt install apt-forktracer
% apt list '?narrow(?installed, ?not(?origin(Debian)))'
% apt-forktracer | sort

上記で表記されたパッケージを削除する。

% sudo apt purge パッケージ名

sources.listをdeb822書式に合わせる

既存のsources.listを保存し、推奨のファイルに変更する。参考:4.3. APT sources ファイルの準備

% cd /etc/apt
% sudo cp -p sources.list sources.list.bookworm
% sudo mv sources.list sources.list.d/debian.sources

deb822書式版に従いdebian.sourcesを以下のように書き直す(参考:SOURCES.LIST(5))。

Types: deb
URIs: http://cdn.debian.net/debian/
Suites: trixie trixie-updates
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

Types: deb
URIs: http://security.debian.org/debian-security
Suites: trixie-security
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

aptを用いたアップグレード

% sudo apt update
% sudo apt upgrade --without-new-pkgs
% sudo apt full-upgrade

私の環境にはdovecotが稼働しており、このdovecotのためfull-upgradeが途中でとまった。たぶん、Debian13ではdovecotの設定ファイルの書式が変わるため(参考:5.1.18. Dovecot configuration changes)。dovecotの設定ファイルについては、メンテナの推奨版に置き替えておく。

再度、full-upgradeを実行したら完了した。

% sudo apt full-upgrade

再起動する。

アップグレード後の後始末

バージョンを確認する。

% export LANG=C

% cat /etc/debian_version
13.3

% uname -a
Linux rook 6.12.74+deb13+1-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.74-2 (2026-03-08) x86_64 GNU/Linux

不要になったパッケージを削除する。

% sudo apt update
% sudo apt upgrade
% sudo apt autoremove
% sudo apt autoclean

削除したパッケージの設定ファイルを削除する。

% apt list '?config-files'
% sudo apt purge '?config-files'

WordPressへの対応

Debian12から13へのアップグレードにともない、動いていたWordPress 6.9.4 が動かなくなった。アップグレード前の「利用されなくなったパッケージを削除する」および「Debian 由来でないパッケージを削除する」でPHPを削除したこと、および、Debian13ではphpのバージョンが8.4になったので、それに合わせたライブラリー(libapache2-mod-php8.4)がインストールされていないため。

phpをインストールする(私の環境ではApache 2がインストール済みのため、libapache2-mod-php8.4は自動でインストールされる)。

% sudo apt install -y php php-mysql
% php -v
PHP 8.4.16 (cli) (built: Dec 18 2025 21:19:25) (NTS)
Copyright (c) The PHP Group
Built by Debian
Zend Engine v4.4.16, Copyright (c) Zend Technologies
    with Zend OPcache v8.4.16, Copyright (c), by Zend Technologies

WordPressのサイトヘルスステータスの機能でいくつかの推奨PHPモジュールが足りないというメッセージがでていたので追加した。

% sudo apt install php-curl
% sudo apt install php-dom
% sudo apt install php-imagick
% sudo apt install php-mbstring
% sudo apt install php-zip
% sudo apt install php-gd
% sudo apt install php-intl
% sudo systemctl restart apache2

gitlab-ceのアップグレード

GitLabをDebian 10から11へアップグレードするに従い、gitlab-ceをaptで更新できるようにしていた。Debian13用に対応させる。

まず、GPG鍵を最新版に更新する。GitLab:Manual Installationのページに記載のあるコマンドを参考にGPG鍵をダウンロードする。今回は /usr/share/keyrings/gitlab-ce.gpg として保存する。

% sudo su
#  curl -fsSL https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey | gpg --dearmor > /usr/share/keyrings/gitlab-ce.gpg
# exit

続いて、deb822書式のソースファイルを/etc/apt/sources.list.d/gitlab-ce.sources として作成する。gitlab-ce.sourcesの中身は以下のようにする。

Types: deb
URIs: https://packages.gitlab.com/gitlab/gitlab-ce/debian/
Suites: trixie
Components: main
Signed-By: /usr/share/keyrings/gitlab-ce.gpg

gitlab-ceをアップグレードする。エラーがでて失敗した。

% sudo apt update
% sudo apt upgrade
~省略~
gitlab preinstall: It seems you are upgrading from 18.7 to 18.9.
gitlab preinstall: It is required to upgrade to the latest 18.8.x version first before proceeding.
gitlab preinstall: Please follow the upgrade documentation at https://docs.gitlab.com/ee/update/index.html#upgrade-paths
dpkg: アーカイブ /var/cache/apt/archives/gitlab-ce_18.9.2-ce.0_amd64.deb の処理中にエラーが発生しました (--unpack):
 new gitlab-ce package pre-installation script subprocess returned error exit status 1
処理中にエラーが発生しました:
 /var/cache/apt/archives/gitlab-ce_18.9.2-ce.0_amd64.deb
Error: Sub-process /usr/bin/dpkg returned an error code (1)

Debian12(bookworm)上でのgitlab-ceのバージョンが18.7で、Debian13(trixie)上のバージョンが18.9のため、うまくいかなかった様子。現在のgitlab-ceのバージョンを確かめるために以下のコマンドを実行したところ、データベースの方にも問題が。

% sudo gitlab-rake gitlab:env:info
WARNING:  database "データベース名" has a collation version mismatch
DETAIL:  The database was created using collation version 2.36, but the operating system provides version 2.41.
HINT:  Rebuild all objects in this database that use the default collation and run ALTER DATABASE データベース名 REFRESH COLLATION VERSION, or build PostgreSQL with the right library version.
WARNING:  database "データベース名" has a collation version mismatch
DETAIL:  The database was created using collation version 2.36, but the operating system provides version 2.41.
HINT:  Rebuild all objects in this database that use the default collation and run ALTER DATABASE データベース名 REFRESH COLLATION VERSION, or build PostgreSQL with the right library version.
WARNING:  database "データベース名" has a collation version mismatch
DETAIL:  The database was created using collation version 2.36, but the operating system provides version 2.41.
HINT:  Rebuild all objects in this database that use the default collation and run ALTER DATABASE データベース名 REFRESH COLLATION VERSION, or build PostgreSQL with the right library version.

System information
System:         Debian 13
Current User:   git
Using RVM:      no
Ruby Version:   3.2.8
Gem Version:    3.7.1
Bundler Version:2.7.1
Rake Version:   13.0.6
Redis Version:  7.2.11
Sidekiq Version:7.3.9
Go Version:     unknown
WARNING:  database "データベース名" has a collation version mismatch
DETAIL:  The database was created using collation version 2.36, but the operating system provides version 2.41.
HINT:  Rebuild all objects in this database that use the default collation and run ALTER DATABASE データベース名 REFRESH COLLATION VERSION, or build PostgreSQL with the right library version.

GitLab information
Version:        18.7.0
Revision:       ef8306c4594
Directory:      /opt/gitlab/embedded/service/gitlab-rails
DB Adapter:     PostgreSQL
DB Version:     16.10
URL:            https://hogehoge.jp
HTTP Clone URL: https://hogehoge.jp/some-group/some-project.git
SSH Clone URL:  git@hogehoge.jp:some-group/some-project.git
Using LDAP:     no
Using Omniauth: yes
Omniauth Providers:

GitLab Shell
Version:        14.45.5
Repository storages:
- default:      unix:/var/opt/gitlab/gitaly/gitaly.socket
GitLab Shell path:              /opt/gitlab/embedded/service/gitlab-shell

Gitaly
- default Address:      unix:/var/opt/gitlab/gitaly/gitaly.socket
- default Version:      18.7.0
- default Git Version:  2.50.1

【PostgreSQL】database has a collation version mismatchへの対処法およびOmnibus gitlab-ce Debian 13 (trixie)を参考にPostgreSQLのインデックスをリフレッシュする。

% sudo su
# /opt/gitlab/bin/gitlab-psql
> ALTER DATABASE データベース名 REFRESH COLLATION VERSION;
> \q
# exit

データベースに関するエラーが出ないか確かめる。

% sudo gitlab-rake gitlab:env:info

エラーが出ないことを確認したら、現在のgitlab-ceのバージョン18.7の次のバージョン18.8をインストールする。18.8の最新パッケージ名を
https://packages.gitlab.com/gitlab/gitlab-ce から探す。今回は 18.8.6-ce.0 だった。以下のコマンドで18.8へアップグレードする。

% sudo apt install gitlab-ce=18.8.6-ce.0

続いて、最新版へアップグレードする。

% sudo apt update
% sudo apt upgrade

無事、GitLabをアップグレードできた。

dovecotの設定ファイルの修正

Debian12ではdovecot 2.3だが、Debian13ではdovecot 2.4に変更されている。
dovecotは2.3から2.4で設定ファイルの書式が変わっているため、修正が必要となる。
このため、Debian12から13へのアップグレード時(apt full-upgrade)の際にdovecot関連の設定ファイルはメンテナ推奨の設定ファイルに置き換えておく必要がある。

私の元の設定は以下の通りだった。

大まかには以下の通り

  1. dovecotはIMAPで用いている。
  2. メールは各ユーザディレクトリにメールディレクトリ形式で保存している。
  3. IMAPのログインにpamを利用している。

dovecotの設定ファイルは /etc/dovecot に置いてある。

  • /etc/dovecot/dovecot.conf (メンテナ推奨の設定ファイル、修正せず)
  • /etc/dovecot/conf.d/10-auth.conf(メンテナ推奨の設定ファイル、修正)
  • /etc/dovecot/conf.d/10-logging.conf(メンテナ推奨の設定ファイル、修正せず)
  • /etc/dovecot/conf.d/10-mail.conf(メンテナ推奨の設定ファイル、修正)
  • /etc/dovecot/conf.d/10-master.conf(メンテナ推奨の設定ファイル、修正)
  • /etc/dovecot/conf.d/10-ssl.conf(メンテナ推奨の設定ファイル、修正)
  • /etc/dovecot/conf.d/15-lda.conf(メンテナ推奨の設定ファイル、修正せず)
  • /etc/dovecot/conf.d/20-lmtp.conf(メンテナ推奨の設定ファイル、修正せず)
  • /etc/dovecot/conf.d/20-pop3.conf(メンテナ推奨の設定ファイル、修正せず)
  • /etc/dovecot/conf.d/90-quota.conf(メンテナ推奨の設定ファイル、修正せず)
  • /etc/dovecot/conf.d/auth-system.conf.ext(メンテナ推奨の設定ファイル、修正せず)

メンテナ推奨の設定ファイルを10-auth.conf.orgとしている。基本はコメントアウトしているだけ。

% diff 10-auth.conf.org 10-auth.conf
10c10
< #auth_allow_cleartext = yes
---
> auth_allow_cleartext = yes
40c40
< #auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
---
> auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
49c49
< #auth_username_format = %{user|username|lower}
---
> auth_username_format = %{user|username|lower}
93c93
< #auth_mechanisms = plain login
---
> auth_mechanisms = plain login

メンテナ推奨の設定ファイルを10-mail.conf.orgとしている。デフォルトはメールボックス式だが、メールディレクトリ式に変更している。

% diff 10-mail.conf.org 10-mail.conf
36,39c36,42
< mail_driver = mbox
< mail_home = /home/%{user | username}
< mail_path = %{home}/mail
< mail_inbox_path = /var/mail/%{user}
---
> #mail_driver = mbox
> #mail_home = /home/%{user | username}
> #mail_path = %{home}/mail
> #mail_inbox_path = /var/mail/%{user}
> mail_driver = maildir
> mail_path = ~/Maildir
>

メンテナ推奨の設定ファイルを10-master.conf.orgとしている。IMAPとSMPT認証の設定をしている。

% diff 10-master.conf.org 10-master.conf
22,23c22,23
<     #port = 993
<     #ssl = yes
---
>     port = 993
>     ssl = yes
29c29
<   #service_restart_request_count = 1
---
>   service_restart_request_count = 1
40c40
<     #port = 110
---
>     port = 110
43,44c43,44
<     #port = 995
<     #ssl = yes
---
>     port = 995
>     ssl = yes
58,59c58,61
<   unix_listener lmtp {
<     #mode = 0666
---
>   unix_listener /var/spool/postfix/private/dovecot-lmtp {
>     mode = 0666
>     group = postfix
>     user = postfix
110,112c112,116
<   #unix_listener /var/spool/postfix/private/auth {
<   #  mode = 0666
<   #}
---
>   unix_listener /var/spool/postfix/private/auth {
>     mode = 0666
>     user = postfix
>     group = postfix
>   }

メンテナ推奨の設定ファイルを10-ssl.conf.orgとしている。Dovecot 2.4からDH鍵は不要になったとのこと。

diff 10-ssl.conf.org 10-ssl.conf
18c18,19
< ssl_server_cert_file = /etc/dovecot/private/dovecot.pem
---
> #ssl_server_cert_file = /etc/dovecot/private/dovecot.pem
> ssl_server_cert_file = サーバ認証ファイルの絶対パス表記
20c21,22
< ssl_server_key_file = /etc/dovecot/private/dovecot.key
---
> #ssl_server_key_file = /etc/dovecot/private/dovecot.key
> ssl_server_key_file = サーバ鍵ファイルの絶対パス表記

/etc/dovecot/conf.d/10-director.conf を削除する。

% cd /etc/dovecot/conf.d/
% sudo mv 10-director.conf 10-director.conf.org

ちゃんと動くか確かめる。

% sudo systemctl start dovecot

うまく動かない場合は以下のコマンドでまずいところを確認し、適宜修正する。

% sudo systemctl status dovecot --no-pager