Как правильно понизить версию пакета и зависимостей apt?

Мой пример выхода в один лайнер:

COMAND || ( echo "ERROR – executing COMAND, exiting..." ; exit 77 );[ "$?" -eq 77 ] && exit
1
25.11.2019, 15:50
4 ответа

В соответствии с руководством apt это можно сделать либо выполнив одну из следующих команд:

sudo apt-get install <package-name>=<package-version-number>ИЛИ

sudo apt-get -t=<target release> install <package-name>
-1
28.01.2020, 00:00

Я боролся с той же ситуацией и нашел решение, которое сработало для меня.

В моем случае мне нужно переключаться между версиямиpsql-dev(postgresql ),поэтому сначала я должен добавить репозиторий 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

После закрепления выпуска с приоритетом 1001или выше будут установлены зависимости из этого выпуска, в данном случае все зависимости, соответствующие версии 9.6*.

0
28.01.2020, 00:00

При понижении версии зависимостей система aptдолжна знать, до какой версии следует понизить каждую зависимость.

На практике часто требуется понизить версию пакета вместе с его зависимостями до заданного выпуска с помощью параметра -t.Таким образом, вы будете использоватьsudo apt-get -t=<target release> install <package-name>

Но есть одна загвоздка. :Выпуск должен быть настроен так, чтобы разрешать переход на более раннюю версию. Это означает, что его предпочтение должно быть больше, чем 1000, иначе apt сохранит текущую установленную версию. Подробнее см. https://linux-tips.com/t/downgrade-a-package-with-its-dependencies/261

.
0
18.08.2020, 01:53

aptотказывается понижать версии пакетов, которые вы уже установили, если вы не попросите сделать это явно.

Один из способов сделать это, как вы выяснили, — указать каждую версию вручную в команде install. Если вы хотите убедиться, что зависимости будут удалены при удалении pigpio, вы можете пометить их как autoс помощью apt-markпосле установки.

Более простой способ — сначала удалить эти обновленные пакеты :

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

Обычно это должно работать, но по какой-то причине это не работает для pigpio, возможно потому, что в выпуске по умолчанию есть только один пакет. Что работает с pigpio, так это опция -t release,а узнать к какому релизу относится пакет можно с помощью apt-cacheилиapt 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. Обратите внимание, что указание старых версий пакетов вручную в этом случае также не сработает.

1
21.11.2021, 18:40

Теги

Похожие вопросы