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

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

Только сегодня попробовал обновить 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все еще удерживается - но теперь я также получаю тонну пакетов, которые нужно удалить, как "больше не нужны", а также тонну пакетов для установки. И это как-то раздражает меня, потому что я не могу сказатькоторыйпакет (зависимость), в частности, вызывает либо установку новых, либо удаление старых пакетов по причине их «большей ненадобности».

Итак, мой вопрос - есть ли какой-то подробный режим или переключатель, 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)
...

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

Есть ли что-нибудь подобное?

решение1

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

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

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

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

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) и, пока отображаются списки пакетов для установки и/или удаления, нажмитегчтобы увидеть информацию о зависимости. Или во время использования full-upgradeвы можете нажатьочтобы увидеть предлагаемое решение разрешения зависимостей. Это покажет вам, почему пакет будет установлен или удален.

Проверьте эти ссылки для получения дополнительной информации -

Связанный контент