web-dev-qa-db-ja.com

以前のバージョンのDebianパッケージがパッケージリポジトリで消えてしまうのはなぜですか? (バージョン管理されたシステム構成との関連性が高い)

シナリオ:Puppet、Chefなどに基づくバージョン管理されたシステム構成では、特定のシステム状態を再現する必要があります。これは、システムパッケージのバージョンを明示的に指定することによって行われます。

最近、特定のパッケージバージョンがDebianリポジトリで見つからないという問題が発生しました。 1つの例:「patch」パッケージはバージョン2.7.5-1 + deb9u1で必要でしたが、2.7.5-1 + deb9u2しか使用できませんでした。別のさらに深刻な例:「関連するカーネルがインストールされているため」「linux-headers-4.9.0-9-common」が必要であり、「linux-headers-4.9.0-11-common」のみが利用可能です。

これにより、システムの特定の状態を再現できなくなります。

上記のパッケージは単なる例です(実際に私が遭遇しました)。一般的な問題の理解と解決に興味があります。

これらの更新、「消失」パッケージおよびパッケージバージョンの背後にあるアイデアは何ですか?

Debianパッケージの以前のバージョン(実際には古いバージョンではなく、数週間前のバージョン)はどこで入手できますか?一般的な方法でインストールプロセスを自動化できるはずです。

39
Flo

特定の設定を正確なバージョンまで再現できることは、your要件であり、Debianの要件ではありません。

Debianは、特定のリリースの各バイナリパッケージの単一バージョンのみをサポートしています。これに対応するのは、特定のリリースでのパッケージの更新によってリグレッションが発生しないように細心の注意が払われ、そのような注意が不可能な場合はその事実を文書化することです。特定のパッケージの複数のバージョンを維持すると、サポートの負担とテスト要件が増えるだけです。たとえば、パッケージのメンテナーは、現在サポートされているバージョンだけでなく、使用するライブラリのすべての利用可能なバージョンに対して更新されたパッケージをテストする必要があります... ie深刻なバグ(セキュリティの問題を含む)を修正するために、パッケージは本当に必要な場合にのみ安定版リリースで更新されます。カーネルの場合、これはカーネルABIが変更され、その結果としてパッケージ名が変更されることを意味する場合があります(依存パッケージの再構築を強制するため)。 ABIをハードコーディングする代わりにプルインできるメタパッケージがあります(linux-image-AMD64linux-headers-AMD64など)。

ただし、状況には回避策があります。公開されたすべてのソースとバイナリパッケージは snapshot.debian.org にアーカイブされます。バージョン付きのセットアップを作成するときに、対応するスナップショット(たとえば、 2019年9月のスナップショット のいずれか)を選択し、それをリポジトリURLとして使用できます。

deb https://snapshot.debian.org/archive/debian/20190930T084755Z/ buster main

最終的にこれに依存する場合は、 Apt-Cacher NG など、ある種のキャッシュミラーを使用してください。これにより、スナップショットサーバーの負荷が軽減されるだけでなく、必要なすべてのパッケージのローカルコピーが確保されます。

sourceパッケージに関する状況は少し複雑であり、アーカイブは、ライセンスにより、特定のリリースでいくつかのソースパッケージの複数のバージョンを実行します依存関係ですが、ここでは関係ありません。厳密に言えば、Debianはサポートされているリリースでいくつかのバイナリの複数のバージョンを提供しています。現在のポイントリリースの現在のバージョンと、セキュリティリポジトリおよびアップデートリポジトリの更新。後者は、次のポイントリリース。ポイントリリースが作成されるたびに更新する限り、スナップショットに頼らずに、再現可能なバージョン管理されたシステム構成を維持することが可能です。

65
Stephen Kitt

特定のシステム状態を再現するために、制御下にないサーバーに依存しないでください。 Debianサーバーはかなり信頼できると思っていても、将来何が起こるかはわかりません。これは、他のリポジトリと特に関係があります。

再現可能なシステム状態を取得するには、独自のミラーを維持する必要があります。このようにして、通常のシステムの実稼働状態と、新しい構成のいくつかのテスト状態を設定できます。

リポジトリ管理ツール aptly は、リポジトリのミラーを作成できます。ミラーリングするパッケージを選択し、特定の時点でリポジトリコンテンツのスナップショットを作成し、複数のミラーまたはスナップショットを1つのリポジトリに結合できます。これにより、システム状態を完全に再現できます。

16
Charleston

Stephen Kitt's answer は確かに1つの可能な解決策ですが、必要なパッケージのコピーを自分で保持する方が安全だと思います。

システム設定を記録するときは、.deb/var/cache/apt/archives/ファイルのコピーを必ず保存してください。 apt-get downloadも使用できます。

システムセットアップを復元するときは、潜在的に危険な自動アクションのトリガーを回避するために、aptを非常に厳密にする必要があります。

dpkgを直接使用して、必要なものを正確にインストールする方がおそらく簡単です。

8
Stig Hemmer