问题描述
我想知道为什么upgrade
有时不想升级系统的某些部分,而dist-upgrade
的确如此。这是运行apt-get upgrade
后的一个例子:
apt-get upgrade
:
rimmer@rimmer-Lenovo-IdeaPad-S10-2:~$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages have been kept back:
linux-generic linux-headers-generic linux-image-generic
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
与apt-get dist-upgrade
:
rimmer@rimmer-Lenovo-IdeaPad-S10-2:~$ sudo apt-get dist-upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
linux-headers-3.0.0-13 linux-headers-3.0.0-13-generic
linux-image-3.0.0-13-generic
The following packages will be upgraded:
linux-generic linux-headers-generic linux-image-generic
3 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 48.5 MB of archives.
After this operation, 215 MB of additional disk space will be used.
Do you want to continue [Y/n]?
换句话说,为什么不能由upgrade
执行?
最佳解决办法
来自apt-get
手册:
upgrade
upgrade is used to install the newest versions of all packages
currently installed on the system from the sources enumerated in
/etc/apt/sources.list. Packages currently installed with new
versions available are retrieved and upgraded; under no
circumstances are currently installed packages removed, or packages
not already installed retrieved and installed. New versions of
currently installed packages that cannot be upgraded without
changing the install status of another package will be left at
their current version. An update must be performed first so that
apt-get knows that new versions of packages are available.
dist-upgrade
dist-upgrade in addition to performing the function of upgrade,
also intelligently handles changing dependencies with new versions
of packages; apt-get has a "smart" conflict resolution system, and
it will attempt to upgrade the most important packages at the
expense of less important ones if necessary. So, dist-upgrade
command may remove some packages. The /etc/apt/sources.list file
contains a list of locations from which to retrieve desired package
files. See also apt_preferences(5) for a mechanism for overriding
the general settings for individual packages.
随着新的apt
工具从14.04开始提供:
full-upgrade
full-upgrade performs the function of upgrade but may also remove
installed packages if that is required in order to resolve a
package conflict.
例如,在我的例子中,我看到linux-headers
是一个由linux-headers-3.0.0-12
和linux-headers-3.0.0-13
提供的虚拟包,听起来像dist-upgrade
处理的那种包安装和删除,而不是upgrade
。
次佳解决办法
apt-get upgrade
仅限于需要使用较新版本替换软件包的情况,但不需要添加或删除软件包。例如,新版本的Firefox应该可以使用apt-get upgrade
进行安装。
但是,当更新版本需要添加或删除时,apt-get upgrade
将拒绝工作。例如,如果安装了内核linux-image-3.2.0-10-generic
并且出现linux-image-3.2.0-11-generic
,则linux-image-generic
程序包会更新为依赖于较新的版本。为了安装新内核,您需要运行apt-get dist-upgrade
。
请注意apt-get upgrade
如何说内核软件包是held back
。这是使用apt-get dist-upgrade
的提示。
第三种解决办法
基本上升级只会将现有的软件包从一个版本升级到另一个版本。它不会安装或删除软件包,即使需要升级其他软件包也是如此。在内核更新的情况下,升级linux-generic软件包需要安装新的linux-3.0.0-13-generic软件包,并且由于升级拒绝安装或删除软件包,它拒绝升级linux-generic。
有时,软件包之间的各种不兼容需要删除一些软件包以升级其他软件包,并且还需要dist-upgrade。内核更新将始终需要dist-upgrade,因为它们是如何处理的。每次都会创建一个全新的内核软件包,而不是更新内核软件包,而是更新内核元数据包以取决于新的内核软件包而不是旧的软件包。这样做是为了保留旧的内核版本,以便万一在启动新内核时出现问题,您可以从启动菜单中选择旧的内核并恢复。
第四种办法
apt-get upgrade
命令通常只会将更新(或修复程序)安装到当前安装的软件包。例如,通常会使用此命令安装新版本的Mozilla Firefox。
但是,apt-get upgrade
通常不会安装新版本,其中主要更改(包括删除软件包或需要GRUB更新)。例如,当新的Linux内核(linux-image-3.x.x-xx-generic等)可用时,该软件包将不会被安装。
为了安装新内核,您需要运行apt-get dist-upgrade
。当您运行apt-get upgrade
时,您会收到通知,因为它会说某些软件包已被阻止。这是你的使用提示:apt-get dist-upgrade
。