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


17

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

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

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

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


ppa-purge最初にやってみませんか?
ランドローニ14

たとえばsynaptic、xyzパッケージを選択すると、デフォルトですべての依存関係が選択されますが、常にすべての依存関係の選択を解除してメインパッケージをインストールするだけで、後ですべての依存関係をインストールすることができます。これは、再インストールする準備ができている場合にのみ機能します。
登録ユーザー14

@landroniパージすると、削除したくないパッケージが削除されます。
RolandiXor

回答:


13

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


他に何も機能しない場合は、この回答で提案されている手動のアプローチを取ることができます:apt-getを使用してパッケージをダウングレードするには?。基本的には、必要に応じてダウンロード.debし、それらに低レベルを使用して1つずつインストールし、手動でパッケージをdpkg、その強力な引数のいずれかを:--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の古いバージョンをインストールする方法、液体2.2.2などの古いバージョンのパッケージをインストールする方法は?例:

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

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

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

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


4

最初に、システムに手動インストールとしてインストールされた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。リストならば、依存関係/推奨/提案パッケージが付いたことになっているもの、つまりapt-markによりパッケージ出力の意図リストのセーブ大きい、apt-cache show <target-package-name>任意のファイルと言うこと/path/to/fooと、使用しapt-mark、このようなコンボに:

cat /path/to/foo | xargs -imarkthese sudo apt-mark manual markthese

この方法は機能する可能性がありますが、100個を超えるパッケージをマークする代わりに、他の答えを使用しました。
RolandiXor

@RolandiXor、あなたが使用することができますapt-cache policy <target-package-name>。..へのアップグレード/ダウングレードすることがパッケージのバージョンのリストを持つために
正確な

..投稿に行われた編集を参照してください。ファイルの数が多いほどマークされるのであれば、あなたは...含まれるコマンドのコンボを使用することができます
正確な

あなたは私を理解しているとは思わない。とにかく、私はそれを今修正し、賞金を与えました(それを切り替えることはできません)。
RolandiXor

1

パッケージのアップストリームバージョンにアップグレードしてからダウングレードすることを決定するという苦痛を経験しました。これは、メンテナーのプライベートリポジトリを介して行われました。私の場合、これは最新の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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.