적절한 패키지와 종속성을 다운그레이드하는 올바른 방법은 무엇입니까?

적절한 패키지와 종속성을 다운그레이드하는 올바른 방법은 무엇입니까?

변경 사항을 테스트하기 위해 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명시적으로 요청하지 않는 한, 설치한 패키지를 다운그레이드하지 마세요.

발견한 대로 이를 달성하는 한 가지 방법은 명령에서 각 버전을 수동으로 지정하는 것입니다 install. pigpio제거 시 종속성이 제거되었는지 확인하려면 설치 후에 표시 하면 됩니다 auto.apt-mark

더 간단한 방법먼저 업그레이드된 패키지를 제거하세요.

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

이는 일반적으로 작동하지만 어떤 이유로 작동하지 않습니다 pigpio. 아마도 기본 버전에 패키지가 하나만 있기 때문일 것입니다. 작동하는 것은 패키지가 속한 버전을 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해당 버전의 종속성을 설치합니다(이 경우 version 과 일치하는 모든 종속성) 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>

관련 정보