web-dev-qa-db-ja.com

依存関係を削除せずにパッケージをダウングレードするにはどうすればよいですか?

システムをアップグレードできるようにPPAをパージする前に、PPAバージョンにアップグレードしたメサパッケージがいくつかあります。バージョンの違いはわずかです(技術的には同じです。ライブラリの1セットのみがgitからのものであり、他は最終バージョンです)。

Synaptic、apt-get、またはaptitudeを使用してダウングレードしようとすると、依存関係の地獄に投げ込まれます。

パッケージを手動で(おそらく1つずつ)ダウングレードし、依存パッケージを(それが理にかなっている場合)完了するまでマークする方法はありますか?

追伸この質問: apt-getでパッケージをダウングレードする方法 は少し異なり、この状況を解決しません。

16
RolandiXor

私は以前これで遊んだことはありませんが、トラブルを引き起こす依存関係のバージョンをhold(またはlock)にすることをお勧めします。このようにaptには可能なソリューションの数が制限されており、他のパッケージをダウングレードしようとしても混乱しないでしょう。


他に何も機能しない場合は、この回答で提案されている手動のアプローチを取ることができます: apt-getを使用してパッケージをダウングレードする方法 。基本的に、必要な.debパッケージを手動でダウンロードしてから、下位レベルのdpkgとその強力な引数の1つである--ignore-depends--force-depends--force-depends-version、または--force-allです。

上記と同じ精神で、--force-downgrade引数があります:

          downgrade(*): Install a package, even if newer version of
          it is already installed.

          Warning:  At  present  dpkg  does  not  do any dependency
          checking on downgrades and therefore will not warn you if
          the  downgrade  breaks the dependency of some other pack‐
          age. This can  have  serious  side  effects,  downgrading
          essential system components can even make your whole sys‐
          tem unusable. Use with care.

しかし、これはman dpkgを読んでいることと、あなたが何をするかを理解していることを前提としています:

          Warning: These options are mostly intended to be used  by
          experts  only.  Using  them  without  fully understanding
          their effects may break your whole system.

エラー:数字で始まるバージョン番号ではありません および Javaの古いバージョンをインストールする方法 および liquid 2.2のようなパッケージの古いバージョンをインストールする方法)を参照してください。 2? の例:

Sudo dpkg --force-downgrade -i your_mesa_package.deb

また、 依存関係をインストールせずにパッケージをインストールするにはどうすればよいですか? (適切な警告とともに)の例を参照してください。

Sudo dpkg --force-all -i your_mesa_package.deb

さらに別のアプローチは、equivsパッケージ(およびおそらくわずかに異なる名前)を使用して、ダミーの.debパッケージを作成することです。次に、ダミーパッケージをインストールすると、関連する依存関係を維持したまま「true」パッケージを削除してから、古いバージョンをインストールできます。これがどのように機能するかはわかりませんが、詳細についてはこの関連スレッドを確認してください: 依存関係を削除せずにdebを削除する方法

13
landroni

最初にapt-markを使用して、ターゲットパッケージのすべての依存関係をマークできます(推奨される/推奨されるものも)システムに手動インストールとしてインストールされますそれを行った後、apt-getが明示的にバージョンに言及しているソフトウェアの以前のバージョンをインストールします。

  • ターゲットパッケージの依存関係、推奨パッケージ、推奨パッケージを一覧表示するには:

    apt-cache show <target-package-name>
    
  • パッケージを手動インストールとしてマーク:

    Sudo apt-mark manual <package-name(s)>
    

    (これをすべての依存関係に使用し、推奨および提案します。)

  • ターゲットパッケージを削除します。

    Sudo apt-get remove <target-package-name>
    
  • ダウングレード/アップグレードできるパッケージバージョンのリストを表示するには、次を使用します。

    apt-cache policy <target-package-name>
    
  • 必要なパッケージのターゲットバージョンをインストールします。

    Sudo apt-get install <target-package-name>=<target-package-version-number> 
    

    または

    Sudo apt-get -t=<target release> install <target-package-name>
    

PS。 dependencies/recommended/suggestedパッケージのリスト、つまりapt-markでマークされるパッケージが大きい場合、apt-cache show <target-package-name>でパッケージ化された出力の目的のリストを任意のファイルに保存します/path/to/fooと言い、次のようなコンボでapt-markを使用します。

cat /path/to/foo | xargs -imarkthese Sudo apt-mark manual markthese
4
precise

パッケージのアップストリームバージョンにアップグレードしてからダウングレードすることを決定するという苦痛を経験しました。これは、メンテナーのプライベートリポジトリを介して行われました。私の場合、これは最新のsystemd 233バージョン(まだリリースされていない)を試すことについてでした。

重要なのは、ダウングレードする必要があるすべてのパッケージを指定する必要があることを理解することです。あなたがこれを正しく行えば、チャンスはあなたが望むことをするでしょう。何かを見逃した場合、aptはアクションによって多くのパッケージが削除されることを通知します。実際に実行する前に、「-s」フラグを使用してダウングレードを試してください。

したがって、実行する必要がある手順は次のとおりです。

1)アップストリームにアップグレードされたすべての依存関係をリストします(状況が異なる場合は、他のキーワードを使用します)。

dpkg -l|grep upstream

これにより、アップストリームバージョン番号付きのパッケージのリストが表示されます。

2)各パッケージの正しい安定バージョンをリストします。

for i in libnss-resolve:AMD64 libsystemd0:AMD64 libpam-systemd:AMD64 libsystemd0:i386 libudev1:AMD64 libudev1:i386 systemd systemd-sysv udev; do apt-cache show $i; done|grep Version

3)すべてのダブルチェックが良好であること:

apt -s --allow-downgrades --no-remove --reinstall install libnss-resolve:AMD64=232-21ubuntu5 libsystemd0:AMD64=232-21ubuntu5 libpam-systemd:AMD64=232-21ubuntu5 libsystemd0:i386=232-21ubuntu5 libudev1:AMD64=232-21ubuntu5 libudev1:i386=232-21ubuntu5 systemd=232-21ubuntu5 systemd-sysv=232-21ubuntu5 udev=232-21ubuntu5

0 to upgrade, 0 to newly install, 9 to downgrade, 0 to remove and 0 not to upgrade.

(--reinstallが必要かどうかはわかりませんが、これは私がやったことです)

4)-sを削除して実行します。

apt --allow-downgrades --no-remove --reinstall install libnss-resolve:AMD64=232-21ubuntu5 libsystemd0:AMD64=232-21ubuntu5 libpam-systemd:AMD64=232-21ubuntu5 libsystemd0:i386=232-21ubuntu5 libudev1:AMD64=232-21ubuntu5 libudev1:i386=232-21ubuntu5 systemd=232-21ubuntu5 systemd-sysv=232-21ubuntu5 udev=232-21ubuntu5
1
user2427436