
テストサーバーと本番サーバーという2つのサーバーがあるとします。まずapt-get upgrade
テストサーバーでやりましょう。その後、2週間の広範なテストを行った後、本番サーバーがパッケージ化されたときとまったく同じ状態になることを望みます。apt-get upgrade
常に最新の状態を維持せずに特定の状態を達成することは可能ですか?
答え1
OPは、サーバーがどの展開が使用されているかを教えてくれませんでした。したがって、デフォルトではDebianが「apt
発明」し、必要なサービスはDebianでのみ利用可能であるため、Debianであると仮定します。
単一のパッケージの場合は、そのバージョンを強制するの=
が良いと便利ですが、特にまだ利用可能な場合は復元することをお勧めしますが、パッケージグループの場合、満たされていない依存関係のために迅速に問題になる可能性があります。
できることは、以下で構築されたリポジトリURLを使用することです。https://snapshot.debian.org/。このサービスは、2009年以降に作成されたすべてのパッケージバージョンのコピーを保持します。2010年から公式発足:
さらに、スナップショットサービスを使用すると、管理者は指定された日付のアーカイブビューを使用して予測可能でテスト済みのパッケージセットをインストールできます。この機能により、管理者はステージング環境でアップグレードパスをテストし、本番環境でプロセスを繰り返して完全にテストされたアップグレードを実行していることを確認できます。スナップショットはアーカイブ全体とすべてのスイートをカバーするため、制御された方法でテストを追跡したい環境だけでなく、すべての信頼できる更新プログラムをロールアウトする前に完全に監査したいより厳格な変更制御機能を備えた環境にも適用できます。
最初の要件は、httpsトランスポートが利用可能でなければならないことです。 (apt-get install apt-transport-https
申し訳ありませんが、同時にアップグレードされた可能性があるいくつかの依存関係を取得できます。)
2週間前の2018-12-07のパッケージが欲しいとしましょう。ウェブサイトの指示に従って、以下を閲覧できます。
https://snapshot.debian.org/archive/debian/20181207/
これは以下を指します。より細かいURL、おそらくUTC時間でしょう。その後、必要に応じて「時間を通して」ナビゲートできます。これには少し次の変更」。
適切な時期になると、これを resources.list ファイルのデフォルトの deb URL として使用します。
たとえば、/etc/apt/sources.d/snapshot-20181207.list
コンテンツは次のようになります。
deb https://snapshot.debian.org/archive/debian/20181207T090635Z/ stretch main
スナップショットは以前のパッケージバージョンを使用する過去なので、デフォルトの選択をaptにしておくと、とにかく最新バージョンを使用し、そこで利用可能なバージョンを常に無視します。 aptフラグ-t
はまだ同じバージョンなので、この場合は役に立ちません。だから適切な好み調整が必要です。たとえば、.pref
ファイルに で終わる項目があります(ここでは基本設定の順序が重要な場合があります)。/etc/apt/preferences.d/
/etc/apt/preferences.d/00-snapshot-20181207.list
Package: *
Pin: origin "snapshot.debian.org"
Pin-Priority: 900
これは、snapshot.debian.orgのすべてのパッケージの優先順位をデフォルト(および最新の)パッケージの500より高い900に設定し、セキュリティを含む他のリポジトリよりも短期間の優先順位を与えます。主なアップデートソース。追加されたときよりも優先順位が低いため、-t stable
2018-12-07ステータスにアップグレードすることと今日のステータスにアップグレードすることの違いを比較できます。
1001を使用すると、パッケージがダウングレードされることを許可(および強制)して危険になる可能性があります(たとえば、パッケージの変更によってファイルがあるパッケージから別のパッケージに移動すると、ファイルがダウングレードされる可能性があります)。 )、それでもまだ便利です。
apt-get update
リリースファイルが古くなっていると文句を言う場合(Webサイトに記載されているように12日後に発生します)、ソースエントリにapt-get -o Acquire::Check-Valid-Until=false update
または(Debian 9以降)追加を使用してスキャンを無効にする必要があります。[check-valid-until=no]
これがhttpsトランスポートを使用する理由です。とにかく追加のセキュリティ層があるからです。したがって、内容をsnapshot-20181207.list
次のように置き換えてください。
deb [check-valid-until=no] https://snapshot.debian.org/archive/debian/20181207T090635Z/ stretch main
アップデート:セキュリティは別々のスナップショットアーカイブにあります。Debian セキュリティ。したがって、このアイテム(または他の日付のアイテム)も追加する必要があります。
deb [check-valid-until=no] https://snapshot.debian.org/archive/debian-security/20181206T212649Z/ stretch/updates main
通常どおり、apt-get update
すべてのapt-get upgrade
パッケージをバージョン2018-12-07にアップグレードする必要があります。
答え2
はい、可能です。バラよりhttps://askubuntu.com/questions/92019/how-to-install-特異的-ubuntu-packages-with-exact-version
つまり、バージョン2.5にアップグレードするには、次のfoo
ように実行できます。apt upgrade foo
apt upgrade foo=2.5
これは、テストサーバーにインストールされているバージョンをダンプし、その情報を使用して本番サーバーを同じ状態にする必要があることを意味します。