Как я могу понизить пакеты, не удаляя их иждивенцев?

У меня есть несколько меза-пакетов, которые я обновил до версии PPA, прежде чем очистить PPA, чтобы я мог обновить свою систему. Различия в версиях незначительны (технически они одинаковы, только один набор библиотек был из git, а остальные - окончательные версии).

Если я попытаюсь понизить рейтинг с помощью Synaptic, apt-get или aptitude, я попаду в ад зависимости.

Есть ли способ понизить пакеты вручную (возможно, один за другим) и пометить их зависимые пакеты как неподвижные (если это имеет смысл), пока я не закончу?

P.S. этот вопрос: Как понизить версию пакета с помощью apt-get? немного отличается и не помогает в этой ситуации.

17
задан 13 April 2017 в 15:24

3 ответа

Я никогда не играл с этим раньше, но я бы предложил вам hold (или lock) версию зависимостей, которые вызывают у вас проблемы. Таким образом, apt имеет более ограниченное число возможных решений и, возможно, не запутается, когда вы попытаетесь понизить версию других пакетов.


Если ничего не работает, вы можете воспользоваться ручным подходом, предложенным в этом ответе: Как понизить пакет через apt-get? . В основном, загрузите необходимые пакеты .deb вручную, затем установите их один за другим, используя нижний уровень 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

Еще один подход заключается в создании фиктивного пакета .deb с использованием пакета equivs (и, возможно, немного другого имени). Затем установка фиктивного пакета должна позволить вам удалить «истинный» пакет, сохраняя при этом соответствующие deps, а затем установить более старую версию. Я не уверен, как именно это будет работать, но проверьте подробности в этой соответствующей теме: Как удалить deb, не удаляя его зависимости .

0
ответ дан 13 April 2017 в 15:24

Сначала вы могли бы использовать 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
0
ответ дан 13 April 2017 в 15:24
  • 1
    Если я runsudo lshw-c видео я могу теперь видеть и свой VGA, интегрированное и ATI один. Как я могу просто использовать ATI один? – abierto 24 July 2015 в 18:47

Я только что прошел через боль в процессе обновления до версии пакета, выпущенной в апстриме, а затем решил перейти на более раннюю версию. Это было через частный репозиторий сопровождающих. В моем случае это было все о том, чтобы опробовать последнюю версию 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
0
ответ дан 13 April 2017 в 15:24

Другие вопросы по тегам:

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