Installed: (none) と報告するVPNパッケージは存在しないのではなく、単にインストールされていないだけです。インストールできるかどうかを決めるのは Candidate 行で、APT はこれをインデックス、suite 名、アーキテクチャ、および有効なピン留め規則から導きます。VPNパッケージが消えたという報告の多くは、パッケージングの問題ではなく候補の問題であることが分かります。ソースの項目に触れる前に、両方の行を読んでください。

候補を最初に確認するのは、コマンド一つで済み、よくある推測の半分を排除できるからです。

apt-cache policy の出力が示すもの

apt-cache policy はネットワークではなく、ローカルのパッケージキャッシュを読みます。インストール済みのバージョン、候補のバージョン、そしてそのパッケージを提供する各インデックスの表を、付随する優先度とともに出力します。

apt-cache policy openvpn
apt-cache madison openvpn
apt list -a network-manager-openvpn

候補とは、APT が今選ぶバージョンです。madison は各ソースが提供するものとその優先度を一覧し、インデックスには存在するがピン留めの競争に負けているパッケージを、こうやって見つけます。apt-cache のマニュアルはどちらもキャッシュの読み取りとして説明しているので、どちらもミラーに今到達できることを証明しません。

候補の行が空か (none) と表示されるなら、設定されているソースの中に、このシステムでそのまま使えるものはありません。

候補が消える四つの理由

実際には原因はほぼ常に四つのうちのどれかで、それぞれ対処法が異なります。

ソースの suite 名は、パッケージがビルドされたディストリビューションと一致しなければなりません。trixie ミラーを向いた Debian bookworm システムや、アップグレード中に sources.list.d ファイルで名前を変えられた Ubuntu リリースは、もう一方の suite にしかないパッケージについては何も解決しません。各項目の suite フィールドと lsb_release -cs を比較してください。

APT が見るのは、dpkg が知っているアーキテクチャ向けにビルドされたパッケージだけです。32ビットのコンテナ、arm64 イメージ、amd64 向けにしか配布されないパッケージを要求する Raspberry Pi へのインストールは、エラーメッセージではなく空の候補を受け取ります。dpkg --print-architecture と dpkg --print-foreign-architectures が、実際にどの集合にいるかを教えてくれます。

コンポーネントも重要です。contrib や non-free のパッケージは main だけが有効なときは見えず、Ubuntu の universe も同じように振る舞います。インデックスは存在し、パッケージもそこにありますが、有効なコンポーネントの一覧にそれが含まれていないだけです。

ピン留めは静かな原因です。/etc/apt/preferences.d のファイルがパッケージをインストールのしきい値より下に抑え込むと、完全に良好な候補が出力から消えるのに、インデックスはまだそれを一覧しています。policy は各ソースの横に優先度を出力するので、どのソースも低いピン番号を持っているパッケージが手がかりです。

古いインデックスはパッケージ欠落のように見える

キャッシュはスナップショットです。最後の apt update が一つのインデックスで失敗したなら、問い合わせは古いコピーから答えたままで、期待するパッケージがそのコピーにない可能性があります。

apt update はインデックスごとにエラーを出力するので、最後の行までスクロールするのではなく、それらを読んでください。

署名エラー、期限切れの release ファイル、到達不能なミラーで更新が失敗すると、以前のインデックスがそのまま残ります。これは賢明な設計で、ミラーが一時的に落ちているときも動くキャッシュを保てます。副作用は、リポジトリがオフラインでも検索が成功しうることです。また、インデックスが最後に取得されたのがいつかを知るまで、パッケージの不在は何も証明しません。パッケージ名を責める前に /var/lib/apt/lists の下のファイル日付を確認してください。

本当に必要なパッケージを名指しする

OpenVPN はデーモンで、人が普通に欲しがる部分は別々のパッケージです。

エンジン、NetworkManager プラグイン、デスクトップエディターは三つの名前を持つ三つのパッケージで、プラグインにはディストリビューションごとに名前が異なる GTK 版があります。apt-cache search --names-only openvpn は説明ではなく名前と提供名に一致し、その物の名前がおおよそ分かっているときに欲しいのはこれです。

名前が本当に不明なら、説明を一度検索してから正確な名前に戻ってください。別のディストリビューションから借りた -gui 接尾辞を付けて、パッケージがもう存在しないと結論づけないでください。

ソースの変更は最後にし、それからトランザクションを確認する

リポジトリを追加すると更新の提供元が変わるので、それは調査の最後に属し、最初ではありません。

その前に、リリース、アーキテクチャ、コンポーネント、ピン留めの状態を確認してください。四つのうちどれを確認したかを書き留め、次の人が同じ確認を繰り返さないようにします。四つすべてが正しく、それでも候補がないなら、正直な結論はこのリリースはそのパッケージを出荷していないということです。残る選択肢は backport、ベンダーのパッケージ、別のサポート対象リリースで、どれも当て推量ではなく意図的な選択です。

候補が現れたら確定する前に、パッケージ名を付けた apt-get install --simulate で何が取り込まれ何が削除されるかをシミュレーションしてください。パッケージの可用性、インストール、動作するトンネルは依然として三つの別々の段階で、トンネルはトラフィックを運ぶ前にプロファイル、資格情報、ルート、DNS を必要とします。

関連記事