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