web-dev-qa-db-ja.com

特定のUbuntuパッケージを正確なバージョンでインストールする方法は?

提供されているいくつかの指定されたパッケージ(名前とバージョン)で新しい仮想マシンをセットアップしたい。

たとえば、すべての依存関係を持つバージョン2.2.20-1ubuntu1のApache2。サーバーにこのパッケージの新しいバージョンがある場合でも、このパッケージをインストールする必要があります。

ソリューションは、複数(n)の「セットアップ」で動作/スケーリングする必要があります。別の仮想マシンには、Apache2の古いバージョンが必要になる場合があります。

私は現在、正確なパッケージをインストールする可能性をいくつか知っていますが、それほど良いスケールではありません:

  1. 必要なすべての*.debをすべての仮想マシンに手動でコピーし、次を入力します。dpkg -i ...->動作しますが、非常にエラーが発生しやすいです。 (手動スクリプトなど)
  2. セットアップごとに新しいUbuntuリポジトリを作成して使用します。 -> n個のリポジトリが必要になるため、機能しません。
  3. マシンを一度セットアップし、VMをコピーしてスナップショットを作成します。 -> n個のVMを保存する必要があるため、機能しません。

私の問題はパッチ管理として分類できますが、パッケージを現在のバージョンに更新したくありません。私の目標は、古いパッケージをインストールすることです。

220
ayckoster

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
223
fader

利用可能なバージョンを確認するには、次の方法で確認できます。

Sudo apt-cache madison ^Apache2

動作しない場合は、Sudo apt-get updateを実行してからパッケージリストを更新することを検討してください。

次に、バージョンをコピーするか、次の構文を使用します。

Sudo apt-get install Apache2=2.2\*

インストールされているバージョンを確認するには、次を実行します。

dpkg -l 'Apache2*' | grep ^i
66
kenorb

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.
15
gsf

実際には、古いバージョンはアーカイブに保持されないため、これは不可能です。したがって、古いバージョンのコピーがどこかにある場合を除き、インストールすることはできません。そもそも古いバージョンをインストールする理由を自問するべきです。安定したリリースでは、新しいバージョンがリリースされる主な理由はセキュリティの脆弱性を修正することであり、脆弱なサーバーを実行したくないですか?

7
psusi

Psusiが説明するように、古いバージョンはubuntuリポジトリに保持されませんが、明らかにランチパッドでそれらを見つけることができます。だから、あなたは(信頼とAMD64をあなたのubuntuバージョンとアーキテクチャに置き換えて)に行きます:

https://launchpad.net/ubuntu/trusty/AMD64/Apache2

必要なバージョンを選択します。次に、debをファイルとしてダウンロードし、次を使用してインストールします。

dpkg -i Apache2_2.4.7-1ubuntu4.20_AMD64.deb

繰り返しますが、ファイル名をファイルに置き換えます。多くのパッケージをダウングレードする必要がある場合、これは退屈になりますが、必死の場合は何もしないよりはましです。

2
soger