以前のバージョンのDebianパッケージがパッケージリポジトリで消えるのはなぜですか?(バージョン管理されたシステム構成に非常に関連)


39

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

最近、特定のパッケージバージョンがDebianリポジトリにないという問題に遭遇しました。一例:バージョン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パッケージの以前のバージョン(実際には古いバージョンではなく、数週間前のバージョン)はどこで入手できますか?一般的な方法でインストールプロセスを自動化することができるはずです。


1
リポジトリの構成に使用されるソフトウェアにある程度依存します。Reprepro、iircは、各パッケージの単一バージョンのみを許可します
muru

2
stable少なくとも次のポイントリリースまで、一貫性が保たれます。stable-updates、testing、unstableには、特定のパッケージの最新バージョンのみが含まれています。その他については、archive.debian.org(またはSKの回答に記載されているsnapshot.debian.org)を参照する必要があります
cas

5
置換ポリシーとピンバージョンを制御できる独自のリポジトリを実行していない理由はありますか(将来の自動インストールをローカルにする利点があります)。
エリックタワーズ

2
新しいlinuxpkg名は例外です。一般的に、Debian安定版のパッケージは同じパッケージ名を使用し、バージョン番号のみを変更します。linux-image-amd64名前を変更せず、常に最新のものに依存しlinux-image-4.9.0-*ます。新しいlinux-image-4.9.0-*pkg名は、一部のバグ修正をバックポートするために必要な互換性のないカーネルABI変更をマークし、カスタムビルドモジュール(dkmsなど)の必要な再コンパイルに対処できるようにします。同様にlinux-headers-*
イグニス

1
これらの更新の背後にあるアイデアは何ですか apt-get changelog packagename
イグニス

回答:


65

特定のセットアップを正確なバージョンまで再現できることが、Debianの要件ではなく、お客様の要件です。

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

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

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

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

ソースパッケージに関する状況はやや複雑であり、ライセンスの依存関係のため、アーカイブは特定のリリースでいくつかのソースパッケージの複数のバージョンを保持します。しかし、それはここでは関係ありません。サポートされているリリースのバイナリ:現在のポイントリリースの現在のバージョン、およびセキュリティリポジトリとアップデートリポジトリの更新、後者は次のポイントリリースで折りたたまれています。ポイントリリースが行われるたびにスナップショットを更新する限り、スナップショットに頼ります。)


いくつかの以前のバージョンが利用可能な場合があることに注意してください- 設定されたリポジトリを介して見るapt-cache madison packagenameことaptができるすべてのバージョンが表示されます。
ivanivan

5
(近くのミラーの代わりに不必要にスナップショット/アーカイブサーバーを使用して過負荷にしないでください。そのため、sources.listにスナップショットよりも高い優先度で通常のミラーを残します。 。)
ピーターコーデス

3
私が正しく理解していることを確認するために:実際には、パッケージをインストールするときに指定するバージョンではなく(古いバージョンが利用できない場合があるため)、使用しているパッケージリポジトリの状態ではありません。したがって、「新鮮な」Debian 9.8が必要な場合は、その状態のパッケージリポジトリ(スナップショットや自分で作成したリポジトリなど)が必要です。そして、もちろん、正しいlinux-header- *パッケージは引き続き利用可能です。Debian 9.9に移行したい場合は、パッケージリポジトリを関連する状態にし、apt-get dist-upgradeを実行します。これは正しいです?
フロー

2
それは正解です。
スティーブンキット

3
@Floは、ポイントリリース(debian X.9やX.8など)はダウンロード可能なisoのみを対象としているため、新規インストールでは大量のパッケージがダウンロードされないことに注意してください。リポジトリでは、ポイントリリースの間に区別はなく、常に最新のパッケージを取得します。
Braiam

16

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

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

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


8

ながら スティーブン・キットの答えは確かに一つの可能な解決策ですが、私はあなたが必要なパッケージの独自のコピーを保持することがより安全になると思います。

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

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

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


6
IMOのさらに良いアプローチは、ローカルAPTキャッシュを使用することです。これにより、3番目の段落の問題が回避され、収穫する必要もなくなり/var/cache/aptます。
スティーブンキット

3
これには2つのバリエーションがあります。1つはapt-mirrorのようなものを使用してリポジトリ全体を複製すること、もう1つは特定のパッケージと依存関係のみダウンロードすることです。次に、ディレクトリのスナップショットを作成します-たとえば、btrfs as pkgs-20190501を使用して、スナップショットディレクトリをリポジトリとして公開します。ビルド時に、バージョン管理されたリポジトリURL(例http://debmirror/pkgs-20190501/...:)をsources.list に入れてから、apt-get update、apt-get install $ pkgsなどを実行します
bain
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.