適切なパッケージと依存関係をダウングレードする正しい方法は何ですか?

適切なパッケージと依存関係をダウングレードする正しい方法は何ですか?

変更をテストするためにPigpioインストールをロールバックしようとしましたが、次の問題が発生しました。

pi@MyPi:~ $ sudo apt install pigpio=1.68-3+rpi1
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 pigpio : Depends: libpigpiod-if2-1 (= 1.68-3+rpi1) but 1.71-0~rpt1 is to be installed
          Depends: libpigpiod-if1 (= 1.68-3+rpi1) but 1.71-0~rpt1 is to be installed
          Depends: libpigpiod-if-dev (= 1.68-3+rpi1) but 1.71-0~rpt1 is to be installed
          Depends: pigpio-tools (= 1.68-3+rpi1) but 1.71-0~rpt1 is to be installed
          Depends: libpigpio1 (= 1.68-3+rpi1) but 1.71-0~rpt1 is to be installed
          Depends: libpigpio-dev (= 1.68-3+rpi1) but 1.71-0~rpt1 is to be installed
          Depends: pigpiod (= 1.68-3+rpi1) but 1.71-0~rpt1 is to be installed
E: Unable to correct problems, you have held broken packages.

最後の行にエラーメッセージが含まれていますが、問題ではないようです。

pi@MyPi:~ $ apt-mark showhold
pi@MyPi:~ $

パッケージを追加すると、予約済みとしてマークされます。

Pigpioも削除しました。

pi@MyPi:~ $ sudo apt purge pigpio -y && sudo apt autoremove -y

各パッケージを以前のバージョンに手動で指定することで問題を解決できますが、必ずしも必要とは思えません。

pi@MyPi:~ $ sudo apt install pigpio=1.68-3+rpi1 libpigpiod-if2-1=1.68-3+rpi1 libpigpiod-if1=1.68-3+rpi1 libpigpiod-if-dev=1.68-3+rpi1 pigpio-tools=1.68-3+rpi1 libpigpio1=1.68-3+rpi1 libpigpio-dev=1.68-3+rpi1 pigpiod=1.68-3+rpi1

特にこれは後で削除すると依存pigpio関係が消去されないという意味だと思います。

apt私が逃した簡単なオプションはありますか?

答え1

apt明示的に要求されない限り、インストールしたパッケージをダウングレードしないでください。

発見したようにこれを達成する1つの方法は、コマンドで各バージョンを手動で指定することですinstallpigpioアンインストール時に依存関係が削除されたことを確認するには、インストール後に表示する必要がありますautoapt-mark

より簡単な方法まず、アップグレードされたパッケージを削除してください。

apt-get remove pigpio
apt-get autoremove
apt-get install pigpio=1.68-3+rpi1

これは通常は機能しますが、何らかの理由で機能しませんpigpio。それはおそらく、基本バージョンにパッケージが1つしかないからです。機能は、パッケージが属するバージョンをpigpio使用または確認するためのオプションです。-t releaseapt-cacheapt policy

pi@raspberrypi:~ $ apt-cache madison pigpio
    pigpio | 1.78-1+rpi1 | http://raspbian.raspberrypi.org/raspbian bullseye/main armhf Packages
    pigpio | 1.68-3+rpi1 | http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages

pi@raspberrypi:~ $ apt policy pigpio
pigpio:
  Installed: (none)
  Candidate: 1.78-1+rpi1
  Version table:
     1.78-1+rpi1 500
        500 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf Packages
     1.68-3+rpi1 500
        500 http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages

pi@raspberrypi:~ $ sudo apt-get -t buster install pigpio
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  libpigpio-dev libpigpio1 libpigpiod-if-dev libpigpiod-if1 libpigpiod-if2-1 pigpio-tools pigpiod
The following NEW packages will be installed:
  libpigpio-dev libpigpio1 libpigpiod-if-dev libpigpiod-if1 libpigpiod-if2-1 pigpio pigpio-tools pigpiod
0 upgraded, 8 newly installed, 0 to remove and 7 not upgraded.
Need to get 328 kB of archives.
After this operation, 990 kB of additional disk space will be used.

すべての依存関係が削除されない場合は、autoremoveシステム内の他の項目がこれらのパッケージに依存していることを意味します。その項目を削除するかpigpio

答え2

私は同じ状況で苦労し、私に合った解決策を見つけました。

私の場合は、(postgresql)バージョンを切り替える必要があるpsql-devため、最初に展開インストールに使用できる各バージョンを含むpostgresql aptリポジトリを追加する必要がありました。

cat /etc/apt/sources.list.d/pgdg.list
deb http://apt.postgresql.org/pub/repos/apt xenial-pgdg 9.4 9.5 9.6 10 11

11*これだけで発生したバグのため、バージョンからバージョンにダウングレードできないことを意味します。9.6*技術は次のように説明されていますこの記事:

cat /etc/apt/preferences.d/xenial-pgdg.pref
Explanation: postgresql: xenial-pgdg
Package: *
Pin: release c=9.6
Pin-Priority: 1001

優先順位が0以上のバージョンを固定した後、1001そのバージョンの依存関係をインストールします(この場合はバージョンと一致するすべての依存関係)9.6*

答え3

依存関係をダウングレードするとき、システムはapt各依存関係をどのバージョンにダウングレードする必要があるかを知る必要があります。

実際には、パッケージとその依存関係を特定のパッケージにダウングレードしたいことがよくあります。解放するオプションを使用するだけ-tです。sudo apt-get -t=<target release> install <package-name>

しかし、問題があります。バージョンはダウングレードを許可するように構成する必要があります。これは、好みがより高くなければならないことを意味します。1000それ以外の場合、apt は現在インストールされているバージョンを保持します。詳細については、次を参照してください。https://linux-tips.com/t/downgrade-a-package-with-its-dependent/261

答え4

~によると簡単手動で次のいずれかのコマンドを実行してこれを実行できます。

sudo apt-get install <package-name>=<package-version-number>または

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

関連情報