Переменные изменения зависимостей для обновления apt-get (причины сдерживания пакетов)

4

Только сегодня, пытаясь обновить Ubuntu 14.04:

$ sudo apt-get update # ...
$ sudo apt-get upgrade 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  phablet-tools ubuntu-sdk ubuntu-sdk-ide
The following packages will be upgraded:
  cgroup-lite curl libcurl3 libcurl3-gnutls python3-update-manager
  update-manager update-manager-core xserver-xorg-core-lts-xenial
8 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Need to get 2,305 kB of archives.
After this operation, 13.3 kB of additional disk space will be used.
Do you want to continue? [Y/n] ^C

Итак, из этого я собрал phablet-tools , ubuntu-sdk и ubuntu-sdk-ide пакетов, которые имели изменения зависимостей в этом обновлении, и, следовательно, мне пришлось бы называть dist-upgrade ; поэтому я делаю:

$ sudo apt-get dist-upgrade 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages were automatically installed and are no longer required:
  at dctrl-tools devscripts distro-info-data dput intltool
  libcommon-sense-perl libdistro-info-perl libexporter-lite-perl
  libio-stringy-perl libjson-perl libjson-xs-perl libparse-debcontrol-perl
  unity-scope-tool
Use 'apt-get autoremove' to remove them.
The following NEW packages will be installed:
  autopilot-desktop gir1.2-gconf-2.0 gir1.2-upstart-app-launch-2
  libautopilot-gtk libautopilot-qt liblxc1 libseccomp2 libxpathselect1.4
  lxc-common lxcfs lxd lxd-client python-autopilot python-autopilot-trace
  python-autopilot-vis python-contextlib2 python-decorator python-evdev
  python-extras python-fixtures python-junitxml python-mimeparse python-psutil
  python-subunit python-testscenarios python-testtools squashfs-tools
  ubuntu-sdk-tools uidmap
The following packages have been kept back:
  ubuntu-sdk
The following packages will be upgraded:
  cgroup-lite curl libcurl3 libcurl3-gnutls python3-update-manager
  ubuntu-sdk-ide update-manager update-manager-core
  xserver-xorg-core-lts-xenial
9 upgraded, 29 newly installed, 0 to remove and 1 not upgraded.
Need to get 50.2 MB of archives.
After this operation, 66.9 MB of additional disk space will be used.
Do you want to continue? [Y/n] ^C

Во-первых, ubuntu-sdk все еще удерживается - но теперь я также получаю тонну пакетов, которые нужно удалить, как «больше не требуется», а также тонну пакетов для установки. И это раздражает меня, потому что я не могу сказать, что , который package (dependency), в частности, вызывает либо установку новых, либо удаление из-за необходимости «старых» пакетов.

Итак, мой вопрос: есть ли какой-то подробный режим или коммутатор apt-get , aptitude или подобных программ, который будет перечислять изменения изменений зависимостей от текущей до новой? Я знаю, что могу:

$ apt-cache depends ubuntu-sdk
ubuntu-sdk
  Depends: autopilot-desktop
  Depends: intltool
  Depends: phablet-tools
  Depends: ubuntu-device-flash
  Depends: ubuntu-sdk-ide

... но я прочитал это как состояние текущей версии; я бы хотел что-то вроде (псевдокод)

$ apt-command --show-dependency-changes ubuntu-sdk
ubuntu-sdk:
  Installed: 1.126.2~0ubuntu1~trusty2 # as in 'apt-cache policy ubuntu-sdk'  
  Candidate: 1.266~0ubuntu1~0trusty
Depends: autopilot-desktop (installed v. XXX, candidate no longer required)
Depends: intltool (installed v. XXX, candidate v. YYY)
Depends: dctrl-tools (installed no dependency, candidate v. YYY)
...

... Т.е. я хотел бы подробное объяснение причины того, что конкретный пакет будет вновь установлен или удален.

Что-нибудь вроде этого?

    
задан sdaau 08.09.2016 в 11:08
источник

1 ответ

0

Из man-страницы apt-get , команда upgrade делает

  
    

... Загружаются и обновляются пакеты, установленные в настоящее время с новыми версиями; ни при каких обстоятельствах в настоящее время не установлены удаленные пакеты или пакеты, которые еще не были установлены, извлечены и установлены. Новые версии установленных пакетов, которые не могут быть обновлены без изменения статуса установки другого пакета, будут оставлены в их текущей версии.

  

Это означает, что apt-get upgrade не будет устанавливать или удалять пакет при выполнении обновления. Даже если пакет имеет более высокую версию. В этом случае этот конкретный пакет (и любые связанные с ним пакеты, которые требуются для этого) будут удерживаться. Это для безопасности системы.

Но, из man-страницы apt-get , dist-upgrade is

  
    

dist-upgrade в дополнение к выполнению функции обновления, также разумно обрабатывает изменения зависимостей с новыми версиями пакетов; apt-get имеет "умную" систему разрешения конфликтов, и при необходимости будет пытаться обновить наиболее важные пакеты за счет менее важных. Поэтому команда dist-upgrade может удалить некоторые пакеты.

  

Итак, здесь мы видим, что dist-upgrade более жестоко, чем upgrade . Он попытается установить более новую версию важных пакетов, даже если это требует удаления некоторых пакетов и / или установки новых пакетов. Вот почему dist-upgrade может инициировать установку / удаление других пакетов, таких как ваша ситуация в вопросе.

Также обратите внимание, что для некоторых других случаев пакет может быть held-back , например, пиннинг. Если вы привяжете пакет, это не будет обновлено.

held-back также может возникать, когда более новая версия пакета не может быть установлена ​​из-за отсутствия одного или нескольких пакетов зависимостей.

  

Я хотел бы подробное объяснение причины, по которой конкретный пакет будет установлен или удален.

Полезный метод будет означать имена пакетов, которые будут установлены, и вручную проверять их изменения зависимости между версиями.

В вашем конкретном случае вы можете проверить изменение зависимости ubuntu-sdk , используя apt-cache depends ubuntu-sdk=<version-installed> и apt-cache depends ubuntu-sdk=<version-candidate> . Вы увидите новые версии, требующие дополнительных пакетов.

Вы также можете использовать aptitude safe-upgrade (для upgrade ) или aptitude full-upgrade для ( dist-upgrade ), и пока он показывает списки пакетов для установки и / или удаления, нажмите d , чтобы увидеть информация о зависимости. Или, пока вы используете full-upgrade , вы можете нажать o , чтобы увидеть предлагаемое решение разрешения зависимостей. Это покажет вам, почему пакет будет установлен или удален.

Проверьте эти ссылки для более -

ответ дан Anwar 08.09.2016 в 12:22