いつの間にやらminissdpdというデーモンがDebian busterなこのサーバーで動いていた。というか、動いていなかった。というのも先日、USB接続のNICを交換した後、どうやら立ち上がっていなかったようなのだ。
このデーモン、いったい何をするものなのかというとどうやらLAN内のUPnPなサービスのアナウンスを自動的にキャッシュしてUPnPなサービスのディスカバリーを高速化するためのものらしい。
で、これが動いていないと何が問題かというとbusterからbullseyeへのアップグレードを行ったときに、minissdpdのパッケージが更新された後、サービスの起動に失敗してapt full-upgradeの進行がその時点で中断してしまうからだ。
で、このデーモン、やっかいなことにパッケージインストール時の対話的なダイアログを使ってその時点でのネットワークインターフェースを/etc/default/minissdpdに書き込んでしまう。これがデーモン起動時のデフォルト設定として使われ、それ以外にはユーザーが変更可能な設定ファイル等をおかないというはなはだ時代錯誤な仕組みになっているのだ。
というわけで、NICが変更されるたびにパッケージの再設定が必要になる。
dpkg-reconfigure minissdpd
デーモンを自動起動するかどうか、有効にするインターフェース名、IPv6を使用するかどうかを答えれば再設定される。しかし、UPnPというユーザー側がわざわざ設定しなくても自動で接続できるサービスのためのツールが、いちいち手動でインターフェースを明示的に再設定しないと動かないというのは本末転倒だよな。
余談だが、これを行えばパッケージのアップグレードは進行するようになるものの、このデーモン、ネットワークが有効になるのを待たずに起動しようとするという、systemctlのお作法でちゃんと依存関係を設定してないバカなデーモンなのだ。結果、USBデバイスが有効になるまでインターフェースが起動しないUSBなNICではスタートアップ時の起動に失敗する。
このminissdpdはどうやらtransmission-daemonの依存上流で入っているものの、transmission-daemon自体はこれがサービスで動いていなくても問題なく動くらしいので、さっきの対話的設定でスタートアップ時に起動しないように設定することにした。さらば。