Ubuntu 26.04アップグレード後にDovecotが起動しない原因と2.4設定移行手順
Ubuntu 26.04ではDovecotが2.4になり、2.3時代のdovecot.confはそのままでは読めません。doveconfで旧設定を確かめ、1項目ずつ2.4形式に直す手順と、名前の変更では移行できない機能、本番を壊さない作業の順番をまとめました。
結論: 設定ファイルは変わっていません。Dovecot が変わりました
Ubuntu 24.04 から 26.04 にアップグレードしたあと Dovecot が起動しないのは、26.04 の Dovecot が 2.4 系になり、2.3 形式の設定ファイルを読めなくなったためです。/etc/dovecot/ の中身は 1 文字も変わっていません。変わったのは、そのファイルを読むプログラムのほうです。直し方は、設定を 2.4 形式に書き換えて doveconf で確認し、そのあとでパッケージの設定処理をやり直すことです。
この記事は、数年前の日本語の構築記事を見ながら Postfix と Dovecot を VPS に入れ、do-release-upgrade で 26.04 に上げた人を想定しています。症状は 2 つのどちらかです。IMAP(Internet Message Access Protocol、メールソフトがサーバー上のメールを読むための仕組み)につながらなくなった。または、アップグレードが dovecot-core の設定処理で止まった。
なぜ Ubuntu 26.04 で Dovecot が起動しなくなるのか
Launchpad のパッケージ情報では、Ubuntu 24.04(noble)の Dovecot は 2.3 系、Ubuntu 26.04(resolute)の Dovecot は 2.4 系です。メジャーバージョンが変わったので、設定の書き方も変わりました。
Dovecot の上流の移行ガイド(2.3 から 2.4 へ)は、はっきりこう書いています。「Dovecot 2.3.x settings will NOT work unless the configuration is changed as described in this section.」つまり、2.3 の設定は書き換えないと動きません。同じページには「the configuration syntax has been changed」ともあります。これは不具合ではなく、2.4 の仕様です。
Ubuntu 側でもこの問題は報告されています。Launchpad のバグ LP #2150663 は「Old config file incompatible with new version shipped in Resolute」という題で、状態は Confirmed です。報告者は 24.04 から 26.04 に上げたところ、dovecot-core の設定処理が失敗し、サービスが起動しませんでした。報告に載っているログには次の行があります。
The first setting must be dovecot_config_version.トリアージのコメントでは、Ubuntu の開発者がこれを「a known issue」と呼び、理由を「the config format changed a lot」と説明しています。そして、アップグレード中は古い設定ファイルを残し、あとで手で変換するやり方を示しています。2026 年 10 月 12 日の時点で、このバグページには修正もアップグレード時の自動変換も載っていません。自動で直ることは期待せず、自分で変換する前提で進めてください。
本番を壊さない作業の順番
いちばん安全な順番は次のとおりです。
- 本番 VPS のスナップショットを取る。
- 本番の Dovecot の設定を 1 つのファイルに書き出す。
- 使い捨ての 26.04 の VPS を 1 台作り、そこで変換と確認をする。
- 変換した設定が
doveconfを通ってから、本番をアップグレードする。
スナップショットは、コントロールパネルから取るのがいちばん確実です。アップグレードで困ったときに、24.04 の状態へそのまま戻せるからです。検証用の VPS は、作業が終わったら削除してかまいません。
すでに本番でアップグレードを始めてしまい、途中で止まっている場合も、この順番の 2 と 3 は同じです。止まったアップグレードの扱い方全般は、途中で失敗した Ubuntu のリリースアップグレードを復旧する方法にまとめています。
手順 1: 24.04 の本番で設定を 1 ファイルに書き出す
Ubuntu の Dovecot の設定は、/etc/dovecot/dovecot.conf と /etc/dovecot/conf.d/ の下の多数のファイルに分かれています。日本語の構築記事の多くは、10-mail.conf や 10-auth.conf、10-ssl.conf を直接書き換える手順でした。どのファイルを触ったかを覚えている人は少ないはずです。
そこで、まだ 24.04 で動いているうちに、実際に効いている設定だけを書き出します。doveconf -n は、既定値と違う設定だけを表示します。
sudo doveconf -n > ~/dovecot-2.3-n.conf
less ~/dovecot-2.3-n.confこのファイルが、これから変換する対象です。分割された conf.d を 1 枚ずつ追う必要がなくなります。ファイルの中に、パスワードや SQL(データベース)の接続情報が含まれていないかも、ここで確認しておいてください。あとで外部のツールに貼り付けるかどうかを判断するときに必要になります。
認証に SQL や LDAP を使っている場合、接続情報は dovecot.conf ではなく /etc/dovecot/dovecot-sql.conf.ext のような別ファイルに入っていることがあります。そのファイルも一緒にコピーしておきます。
手順 2: 26.04 の検証機に dovecot-core を入れる
使い捨ての Ubuntu 26.04 の VPS で、次を実行します。
sudo apt update
sudo apt install -y dovecot-core
apt-cache policy dovecot-coreapt-cache policy の Installed: の行に、入ったバージョンが表示されます。Ubuntu の dovecot-core のバージョン番号には、先頭にエポックの 1: が付きます。そのため、この行は 2.4 ではなく 1:2.4 で始まります。1: のすぐ後ろが 2.4 になっていることを確認してください。2026 年 10 月 12 日の時点で、26.04 の dovecot-core は 1:2.4.2+dfsg1-3ubuntu2.1 です。参考までに、24.04 では 1:2.3.21+dfsg1-2ubuntu6.5 です。バージョンの細かい番号は、セキュリティ更新のたびに変わります。自分の画面に出た番号を記録しておいてください。
手順 3: 2.3 形式の設定を doveconf に読ませる
本番の設定をそのまま使う前に、日本語の構築記事でよく使われていた設定だけを集めた、小さなテスト用の設定で練習します。中身は次の 5 種類です。
mail_locationでメールの置き場所を指定するssl_cert = <パスの形で証明書を指定するdisable_plaintext_authで平文認証を止める- 名前のない
passdb { }とuserdb { }のブロック - Sieve(メールの振り分けルール)の設定を入れた
plugin { }のブロック
mkdir -p ~/dovecot-test
cat > ~/dovecot-test/old-2.3.conf <<'EOF'
mail_location = maildir:~/Maildir
ssl_cert = </etc/letsencrypt/live/mail.example.jp/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.jp/privkey.pem
disable_plaintext_auth = yes
passdb {
driver = pam
}
userdb {
driver = passwd
}
plugin {
sieve = file:~/sieve;active=~/.dovecot.sieve
}
EOFmail.example.jp は例です。自分のドメインに置き換えてください。
doveconf を動かす前に、ファイルが名前を挙げているパスが検証機に本当にあるかを確認します。パスがないことと、書き方が間違っていることを、同じエラーとして見間違えないためです。
sudo ls -l /etc/letsencrypt/live/mail.example.jp/fullchain.pem /etc/letsencrypt/live/mail.example.jp/privkey.pemNo such file or directory と出たら、そのファイルは検証機にはありません。本番から証明書をコピーするか、検証機に実際にある証明書のパスに書き換えてから先に進みます。
準備ができたら、-c でこのファイルを指定して読ませます。-c を付けると、doveconf は /etc/dovecot/dovecot.conf ではなく、指定したファイルを読みます。
sudo doveconf -n -c ~/dovecot-test/old-2.3.conf
echo "exit status: $?"ここで大事なのは、表示されたメッセージをそのまま読むことです。この記事ではエラー文をあらかじめ書きません。バージョンや設定の中身によって、最初に止まる行が変わるからです。表示されたエラーが指している行と設定名をメモし、exit status: の値も控えてください。0 以外の値は、doveconf がこのファイルを設定として受け付けなかったことを表します。
LP #2150663 の報告者が見たのは、先ほどの dovecot_config_version についてのメッセージでした。2.4 は設定の最初の行でこの値を宣言することを求めているので、2.3 の設定ではこの点がまず問題になります。
手順 4: 1 項目ずつ 2.4 形式に変換する
変換の根拠は、すべて上流の 2.3 から 2.4 への移行ガイドと、2.4 の設定一覧です。一度に全部を書き換えず、1 項目直すたびに doveconf を実行すると、どの変更で何が変わったかが分かります。
dovecot_config_version と dovecot_storage_version を先頭に書く
移行ガイドは「The first setting in dovecot.conf MUST now be dovecot_config_version.」と書いています。必ず最初の設定にします。もう 1 つ、dovecot_storage_version も新しく必須になりました。
dovecot_config_version = 2.4.0
dovecot_storage_version = 2.4.0dovecot_config_version を 2.4.0 にする理由は、既定値を固定するためです。上流の 2.4.x 向けの移行ページには、2.4.1 以降で変わった既定値は dovecot_config_version を引き上げるまで効かない、と書かれています。たとえば mailbox_directory_name_legacy の既定値は 2.4.2 で変わりましたが、2.4.0 を指定している限り 2.4.0 の既定値が使われます。ただし例外が 1 つあり、2.4.1 で入ったメモリ関係の環境変数の変更は、この値に関係なく常に入ります。「何も変わらない」ではなく「2.4.0 の既定値が保たれる」と理解してください。
dovecot_storage_version は、設定一覧の説明によると、このサーバーが書いたファイルを読める必要がある、もっとも古い Dovecot のバージョンです。2.4 だけで運用するなら 2.4.0 を指定します。
mail_location を mail_driver と mail_path に分ける
mail_location は廃止され、複数の mail_* の設定に分かれました。メールボックスの形式は mail_driver、メールを置くディレクトリは mail_path で指定します。mail_path は絶対パスで書く必要がありますが、上流の例どおり ~/ は使えます。上流のドキュメントによると、~/ はあとでホームディレクトリに展開されるからです。
mail_driver = maildir
mail_path = ~/Maildirこれは上流の Maildir のページにある例と同じ形です。mail_location に :INDEX= や :LAYOUT= のようなオプションを付けていた場合は、それぞれ別の設定(mail_index_path や mailbox_list_layout など)になります。対応はメールボックスの形式ごとのページで確認してください。
ssl_cert と ssl_key の名前とパスの書き方
ssl_cert は ssl_server_cert_file に、ssl_key は ssl_server_key_file に名前が変わりました。2.4 のドキュメントの例では、パスの前に < を付けていません。この例に合わせて、< は外します。
ssl_server_cert_file = /etc/letsencrypt/live/mail.example.jp/fullchain.pem
ssl_server_key_file = /etc/letsencrypt/live/mail.example.jp/privkey.pemdisable_plaintext_auth は値を反転させる
ここは名前を変えるだけでは間違えます。2.3 の disable_plaintext_auth = yes は「平文認証を禁止する」という意味でした。2.4 の auth_allow_cleartext は「平文認証を許可するか」という意味なので、意味が逆向きです。
auth_allow_cleartext = noauth_allow_cleartext の既定値は no です。設定一覧によると、no のときは TLS(Transport Layer Security、通信の暗号化)を使っていない接続で LOGIN コマンドなどの平文認証ができません。2.3 で disable_plaintext_auth = yes だった人は、この行を書かなくても同じ動きになります。ただ、意図を残すために明示しておくのもよい方法です。disable_plaintext_auth = no だった人は、auth_allow_cleartext = yes に変換します。名前だけ機械的に置き換えると、disable_plaintext_auth = yes が auth_allow_cleartext = yes になり、意図と逆の設定になるので注意してください。
passdb と userdb のブロックに名前を付ける
移行ガイドには「passdb and userdb sections now require a name」とあります。2.3 の名前のないブロックはそのままでは使えません。PAM(Pluggable Authentication Modules、Linux のログイン認証の仕組み)とシステムユーザーを使う構成なら、上流の PAM のページの例にならって、次のように書きます。
passdb pam {
}
userdb passwd {
}2.3 で args = ... に書いていたオプションは、2.4 では名前の付いた個別の設定になっています。たとえば PAM のサービス名は service_name です。自分の args の中身を 1 つずつ、2.4 の各認証方式のページで対応する設定名を探してください。
変換後のテスト設定
ここまでをまとめると、テスト用の設定は次のようになります。plugin { } のブロックは次の節で別に扱うので、ここでは入れていません。
cat > ~/dovecot-test/new-2.4.conf <<'EOF'
dovecot_config_version = 2.4.0
dovecot_storage_version = 2.4.0
mail_driver = maildir
mail_path = ~/Maildir
ssl_server_cert_file = /etc/letsencrypt/live/mail.example.jp/fullchain.pem
ssl_server_key_file = /etc/letsencrypt/live/mail.example.jp/privkey.pem
auth_allow_cleartext = no
passdb pam {
}
userdb passwd {
}
EOF
sudo doveconf -n -c ~/dovecot-test/new-2.4.conf
echo "exit status: $?"変換が通れば、doveconf はエラーを出さずに設定の内容を表示し、終了ステータスは 0 になります。表示された内容に、自分が書いた mail_driver の行があることも確認してください。エラーが出た場合は、メッセージが指している設定名を移行ガイドの表で探し、その 1 項目だけを直して、もう一度実行します。
本番から書き出した ~/dovecot-2.3-n.conf には、この例より多くの行があるはずです。protocols の行、service や namespace のブロックなどです。同じやり方で、1 項目ずつ移行ガイドの表と照らし合わせて変換してください。
%u などの 1 文字の変数はどう書き換えるか
仮想ユーザーで運用している構成では、%u や %d のような変数をよく使います。移行ガイドには「All old one-letter %variables have been removed」とあり、1 文字の変数はすべて廃止されました。2.4 では %{名前} の形で書きます。対応の例は次のとおりです。
%uは%{user}%dは%{user | domain}%hは%{home}
上流の例では、ホームディレクトリを持たないユーザーのメールの置き場所を mail_path = /home/%{user}/Maildir と書いています。2.4 では、知らない変数や書き間違えた変数はエラーになります。このほかの変数を使っている場合は、移行ガイドの変数の表で 1 つずつ確認してください。記憶や古い記事から推測して書くのは避けてください。
plugin { } ブロックの中身はどこへ行くのか
移行ガイドの設定の変換表では、plugin の行に「All plugin settings are now global settings.」とあります。plugin { } のブロックに書いていた設定は、すべてグローバルな設定になりました。ただし、ブロックを外して中身を上に出すだけでは足りません。多くのプラグインで、設定名そのものが変わっているからです。
テスト設定に入れた Sieve の例では、2.3 の sieve = file:~/sieve;active=~/.dovecot.sieve という 1 行が、2.4 では名前付きのブロックになります。上流の Sieve のページの例は次のとおりです。
sieve_script personal {
driver = file
path = ~/sieve
active_path = ~/.dovecot.sieve
}Sieve の設定を doveconf で確認するときは、検証機にも Sieve のパッケージを入れておきます。
sudo apt install -y dovecot-sieveSieve は LDA か LMTP(どちらもメールを配送する仕組み)でメールを受け取るときに動きます。上流のページでは、この 2 つのプロトコルの mail_plugins で Sieve を有効にするよう説明しています。書き方は Sieve のドキュメントの例を写して使ってください。quota(容量制限)など、ほかのプラグインも同じです。プラグインごとに 2.4 のページを開き、設定名を 1 つずつ確認します。
名前の変更では直らないもの: 2.4 で削除された機能
ここまでの変換は、設定名と書き方の問題でした。しかし、2.4 では機能そのものが削除されたものもあります。こちらは書き換えでは直りません。移行ガイドに載っている削除された機能には、たとえば次のものがあります。
- Director。複数台のサーバーにユーザーを振り分ける仕組みです。
- replicator。上流は代わりに NFS などの共有ファイルシステムを使うよう案内しています。
- 全文検索(FTS)の
fts-luceneとfts-squat。代わりはfts-flatcurveかfts-solrです。 zlibプラグイン。代わりはmail_compress_write_methodを使うmail-compressプラグインです。shadow認証ドライバー。代わりは PAM です。checkpassword認証データベース。代わりは Lua です。
このほかにも、dsync コマンド(doveadm sync に置き換え)や TCP wrapper のサポートなどが削除されています。完全な一覧は移行ガイドで確認してください。
日本語の構築記事の中には、driver = shadow を使う例があります。この場合は PAM に切り替えれば移行できます。一方で、2 台のサーバーを replicator で同期している構成や、Director で振り分けている構成は、設計からやり直しになります。
設計のやり直しにすぐ時間を取れないなら、いまは 24.04 のまま運用を続けるのも正しい判断です。26.04 への移行は、設定の変換と動作確認を検証機で終えてからでかまいません。別の選択肢として、メールサーバーのソフトウェアそのものを替える方法もあります。乗り換え先の一例は Stalwart で VPS にメールサーバーを構築する方法で説明しています。そもそも自前で続けるかどうかを考え直したい場合は、メールサーバーの自前運用をまだ続ける価値があるかも参考になります。
dovecot.org の Web 変換ツールを使う場合の注意
Dovecot の公式サイトには、2.3 の設定を貼り付けると 2.4 形式に変換する Web ツール(dovecot.org/upgrader)があります。手作業の変換で詰まったときの助けになります。使うかどうかは任意です。
ツールのページ自身が「This tool is not 100% perfect and can make mistakes.」と書いています。出力は必ず doveconf -n -c で確認してください。
貼り付ける前に、パスワードと SQL の接続情報は必ず消してください。これは上流の注意書きではなく、このサイトからのお勧めです。ページには「No config files are stored locally」とありますが、変換がブラウザの中で行われるのか、サーバーに送られるのかは書かれていません。connect = の行や、設定に直接書いたパスワードは、password=xxxx のようなダミーに置き換えてから貼り付けます。
本番でアップグレードを実行する
ここからは、読者が自分の本番 VPS で実行する手順の例です。検証機での確認とは違い、結果はそれぞれの環境で変わります。各コマンドのあとで、表示を必ず確認してください。
まず、スナップショットを取ったことを確認します。次に、24.04 のパッケージを最新にしてから、リリースアップグレードを始めます。上流の移行ガイドも、その場でアップグレードする場合は、先に 2.3 の最新リリースへ上げてから 2.4 に上げるよう書いています。
sudo apt update && sudo apt full-upgrade -y
sudo do-release-upgradeアップグレード全体の流れと、始める前の確認項目は、Ubuntu 24.04 から 26.04 へのアップグレード手順にあります。
アップグレードの途中で、変更済みの Dovecot の設定ファイルをどうするか聞かれることがあります。LP #2150663 のトリアージで示されたやり方は、古いファイルを残して、あとで手で変換することです。アップグレードが dovecot-core の設定処理で止まったら、検証機で doveconf を通した設定を /etc/dovecot/ に置き、本番でも同じ確認をします。
sudo doveconf -n
echo "exit status: $?"ここでエラーが出なくなってから、止まっていたパッケージの設定処理をやり直します。
sudo dpkg --configure -a
sudo systemctl restart dovecot
systemctl status dovecot --no-pager
journalctl -u dovecot -n 50 --no-pagersystemctl status が active (running) と表示すれば、Dovecot は起動しています。起動しない場合は、journalctl の最後の数行に、止まった理由が出ます。
最後に、実際のメールアカウントでログインできるかを確かめます。サーバー上では doveadm auth test で認証だけを試せます。taro は例なので、自分のメールユーザー名に置き換えてください。
sudo doveadm auth test taroそのあと、Thunderbird や Outlook などのメールソフトから IMAP でログインし、受信トレイが表示されることと、新しいメールが届くことを確認します。メールが届かない場合は、Postfix 側のログ(journalctl -u postfix)も見てください。
Debian 13 でも同じことが起きる
Debian 12 の Dovecot は 2.3 系、Debian 13 の Dovecot は 2.4 系(2.4.1)です。Debian 12 から 13 に上げる人も、この記事と同じ 2.3 から 2.4 への変換が必要です。
FAQ
Ubuntu 26.04 にしたら Dovecot が起動しません。原因は何ですか?
Ubuntu 26.04 の Dovecot は 2.4 系で、2.3 形式の設定ファイルをそのままでは読めないからです。上流の移行ガイドも、2.3 の設定は変更しないと動かないと明記しています。Ubuntu のバグ LP #2150663 でも、24.04 から 26.04 へのアップグレードで同じ失敗が報告され、既知の問題として扱われています。設定を 2.4 形式に変換し、sudo doveconf -n でエラーが出ないことを確認してから、sudo dpkg --configure -a と sudo systemctl restart dovecot を実行してください。
dovecot_config_version には何を書けばよいですか?
設定ファイルの最初の行に dovecot_config_version = 2.4.0 と書くのが分かりやすい方法です。2.4.1 以降で変わった既定値は、この値を引き上げるまで効かないので、2.4.0 の既定値が保たれます。あわせて、2.4 で新しく必須になった dovecot_storage_version も書いてください。
disable_plaintext_auth = yes は auth_allow_cleartext = yes に置き換えればよいですか?
いいえ。意味が逆なので、値も反転させる必要があります。2.3 の disable_plaintext_auth = yes は平文認証の禁止で、2.4 では auth_allow_cleartext = no に当たります。auth_allow_cleartext の既定値は no なので、書かなくても TLS を使わない平文認証は拒否されます。
replicator や fts-lucene を使っています。26.04 に上げられますか?
設定の書き換えだけでは上げられません。Dovecot 2.4 では replicator、Director、fts-lucene、fts-squat、zlib プラグイン、shadow と checkpassword の認証方式などが削除されました。上流の移行ガイドに、それぞれの代わりの方法が書かれています。たとえば全文検索なら fts-flatcurve か fts-solr です。構成を作り直す時間が取れるまで、24.04 のまま運用を続けるのも正しい判断です。