提供されているいくつかの指定されたパッケージ(名前とバージョン)で新しい仮想マシンをセットアップしたい。
たとえば、すべての依存関係を持つバージョン2.2.20-1ubuntu1
のApache2。サーバーにこのパッケージの新しいバージョンがある場合でも、このパッケージをインストールする必要があります。
ソリューションは、複数(n)の「セットアップ」で動作/スケーリングする必要があります。別の仮想マシンには、Apache2の古いバージョンが必要になる場合があります。
私は現在、正確なパッケージをインストールする可能性をいくつか知っていますが、それほど良いスケールではありません:
*.deb
をすべての仮想マシンに手動でコピーし、次を入力します。dpkg -i
...->動作しますが、非常にエラーが発生しやすいです。 (手動スクリプトなど)私の問題はパッチ管理として分類できますが、パッケージを現在のバージョンに更新したくありません。私の目標は、古いパッケージをインストールすることです。
Aptが認識しているアーカイブ内にある限り、apt-get
を使用して特定のバージョンのパッケージをインストールできます。 apt-get
マンページから:
パッケージの特定のバージョンをインストール用に選択するには、パッケージ名の後に「=」と選択するパッケージのバージョンを指定します。これにより、そのバージョンが検索され、インストール用に選択されます。または、パッケージ名の後にスラッシュとディストリビューションのバージョンまたはアーカイブ名(安定、凍結、不安定)を続けることにより、特定のディストリビューションを選択できます。
たとえば、次のことができます。
Sudo apt-get install Apache2=2.2.20-1ubuntu1
この場合、あなた自身でいくつかの依存関係の解決を行う必要があるかもしれないことに注意してください。しかし、問題がある場合、apt-getはそれらの原因を教えてくれます。 11.10システムでは、これを機能させるために以下を行う必要があります。
Sudo apt-get install Apache2=2.2.20-1ubuntu1 \
Apache2.2-common=2.2.20-1ubuntu1 \
Apache2.2-bin=2.2.20-1ubuntu1 \
Apache2-mpm-worker=2.2.20-1ubuntu1
利用可能なバージョンを確認するには、次の方法で確認できます。
Sudo apt-cache madison ^Apache2
動作しない場合は、Sudo apt-get update
を実行してからパッケージリストを更新することを検討してください。
次に、バージョンをコピーするか、次の構文を使用します。
Sudo apt-get install Apache2=2.2\*
インストールされているバージョンを確認するには、次を実行します。
dpkg -l 'Apache2*' | grep ^i
apt
ファミリーの他の便利なバージョン管理コマンドを使用して、以前の回答を拡張します。使用可能なバージョンを確認するには、apt-cache policy
を実行します。
# apt-cache policy Apache2
Apache2:
Installed: (none)
Candidate: 2.4.7-1ubuntu4.5
Version table:
2.4.10-1ubuntu1.1~ubuntu14.04.1 0
100 http://us.archive.ubuntu.com/ubuntu/ trusty-backports/main AMD64 Packages
2.4.7-1ubuntu4.5 0
500 http://security.ubuntu.com/ubuntu/ trusty-security/main AMD64 Packages
2.4.7-1ubuntu4 0
500 http://us.archive.ubuntu.com/ubuntu/ trusty/main AMD64 Packages
次に、別の場所で説明したように、特定のバージョンをapt-get
でインストールします。
# apt-get install Apache2=2.4.7-1ubuntu4.5
...
apt-cache policy
を再度実行すると、インストールしたバージョンを確認できます。
# apt-cache policy Apache2
Apache2:
Installed: 2.4.7-1ubuntu4.5
Candidate: 2.4.7-1ubuntu4.5
Version table:
2.4.10-1ubuntu1.1~ubuntu14.04.1 0
100 http://us.archive.ubuntu.com/ubuntu/ trusty-backports/main AMD64 Packages
*** 2.4.7-1ubuntu4.5 0
500 http://security.ubuntu.com/ubuntu/ trusty-security/main AMD64 Packages
100 /var/lib/dpkg/status
2.4.7-1ubuntu4 0
500 http://us.archive.ubuntu.com/ubuntu/ trusty/main AMD64 Packages
更新時に新しいバージョンをインストールしたくない場合は、apt-mark
でパッケージを固定します:
# apt-mark hold Apache2
Apache2 set on hold.
Apache2の新しいバージョンがパッケージインデックスに追加され、マシンがapt-get update
と同期されたとします。次回apt-get upgrade
を実行すると、これが表示されます。
# apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
Apache2
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
実際には、古いバージョンはアーカイブに保持されないため、これは不可能です。したがって、古いバージョンのコピーがどこかにある場合を除き、インストールすることはできません。そもそも古いバージョンをインストールする理由を自問するべきです。安定したリリースでは、新しいバージョンがリリースされる主な理由はセキュリティの脆弱性を修正することであり、脆弱なサーバーを実行したくないですか?
Psusiが説明するように、古いバージョンはubuntuリポジトリに保持されませんが、明らかにランチパッドでそれらを見つけることができます。だから、あなたは(信頼とAMD64をあなたのubuntuバージョンとアーキテクチャに置き換えて)に行きます:
https://launchpad.net/ubuntu/trusty/AMD64/Apache2
必要なバージョンを選択します。次に、debをファイルとしてダウンロードし、次を使用してインストールします。
dpkg -i Apache2_2.4.7-1ubuntu4.20_AMD64.deb
繰り返しますが、ファイル名をファイルに置き換えます。多くのパッケージをダウングレードする必要がある場合、これは退屈になりますが、必死の場合は何もしないよりはましです。