我不知道是否、如何以及何时添加到 Ubuntu 存储库的新软件包作为已安装软件包进入我的计算机除非我明确地安装了它。
例如,如果 Ubuntu18.04
发布了,但一周后,Canonical 意识到他们忘记包含软件包foo
。 包含软件包foo
绝对至关重要,因为每晚都会有一个 cronjob 运行,调用仅包含在软件包 中的命令foo
。 因此,在该软件包推广到所有 Ubuntu 18.04 机器之前,它们将继续在每个午夜崩溃。
再举一个例子,最新和最好的版本运行良好,直到 Canonical 发现存在一个巨大的安全漏洞,只有通过安装新的软件包才能“修补” bar
。
据我了解,目前apt-get upgrade
重点apt upgrade
是升级已安装包。apt-get dist-upgrade
并且apt full-upgrade
还可以引入新的包甚至删除包依赖项。1 2
但是,如果像我之前的例子一样,一个全新的软件包被添加到操作系统版本/存储库中,该怎么办?我是否必须关注某个博客,以便知道如何手动安装新发布的软件包?
1apt-get dist-upgrade
像和这样的整洁命令apt full-upgrade
基本上是相同的,upgrade
但是处理依赖关系的方式不同——具体如何,我不明白。
2升级仅限于“错误修复和安全补丁”(参见这)。
一些文档
检索并升级当前安装且有新版本可用的软件包;在任何情况下都不会删除当前安装的软件包,也不会检索和安装尚未安装的软件包。
将安装新软件包如果需要满足依赖关系[...]。
其他发行版
作为额外的奖励,也许 Linux 专家愿意添加一条说明,说明如何在其他发行版上处理所有这些问题。
说实话,我不太确定我是否理解了发布、软件包和存储库之间的关系,可能是缺少了与此相关的一些信息,让我的思路混乱。尤其是当我阅读滚动发行版,哈哈。
无论如何...非常非常感谢您!
答案1
当产品 A 中发现安全故障时,将发布针对产品 A 的新软件包,其版本更高。此软件包列表(存储库的一部分)中会更新此软件包。
当您运行 时sudo apt update
,您将下载可用软件包列表。稍后,当您运行 时sudo apt upgrade
,假设您已安装产品 A,您将下载新版本并安装它。
如果您没有安装产品 A,则不会下载或安装该软件包。
你的整个系统都是由软件包组成的。如果在某个组件(例如内核)中发现安全问题,那包将更新为新版本,但包名称完全相同。
因此,这可以有效确保您获得适合所安装软件的安全补丁。
如果你通过 Ubuntu 存储库以外的其他方式安装了软件,你将不是通过 Ubuntu 存储库获取更新。
这与 Windows 模型有些不同,Windows 模型会提供更新,但实际上不会告诉您更新了哪个模块或操作系统的哪个部分,您也无法选择要安装什么。但在 Ubuntu(和其他发行版)中,所有内容都是一个包 - 您可以从非常小的系统(不到 1 GB,没有任何图形环境)到完整的桌面或服务器中进行选择。
现在我有一个可以在我拥有的盒子上更新的包 - Firefox:
[~]$ 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:
xserver-xorg-hwe-16.04
The following packages will be upgraded:
firefox
1 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
Need to get 0 B/43.7 MB of archives.
After this operation, 21.5 kB of additional disk space will be used.
Do you want to continue? [Y/n] n
Abort.
让我们看一下这个包,使用apt-cache policy firefox
:
[~]$ apt-cache policy firefox
firefox:
Installed: 57.0.1+build2-0ubuntu0.16.04.1
Candidate: 57.0.3+build1-0ubuntu0.16.04.1
Version table:
57.0.3+build1-0ubuntu0.16.04.1 500
500 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages
*** 57.0.1+build2-0ubuntu0.16.04.1 500
500 http://no.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
100 /var/lib/dpkg/status
45.0.2+build1-0ubuntu1 500
500 http://no.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
[~]$
这里显示我安装了 57.0.1+build2-0ubuntu0.16.04.1,但是还有 57.0.3+build1-0ubuntu0.16.04.1 可用。如果我选择升级,我将获得新版本的 Firefox。
在上面的例子中,被xserver-xorg-hwe-16.04
保留了下来,因为它依赖于xserver-xorg-legacy-hwe-16.04
,而 尚未安装。因此,apt upgrade
除非我执行 ,否则不会触及它sudo apt-get install xserver-xorg-legacy-hwe-16.04
:
[~]$ sudo apt-get install xserver-xorg-hwe-16.04
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
xserver-xorg-legacy-hwe-16.04
The following packages will be REMOVED:
xserver-xorg-legacy
The following NEW packages will be installed:
xserver-xorg-legacy-hwe-16.04
The following packages will be upgraded:
xserver-xorg-hwe-16.04
1 upgraded, 1 newly installed, 1 to remove and 1 not upgraded.
Need to get 41.1 kB of archives.
After this operation, 3,072 B of additional disk space will be used.
Do you want to continue? [Y/n]
因此,只要包没有列出新的依赖项,它就会被升级。
答案2
在 Debian / Ubuntu 上,你必须更新软件包列表,然后升级
sudo apt update && sudo apt upgrade
其他发行版有点偏离主题,有些发行版将这两个步骤合并为一个
例如在 Fedora 上你只需要
sudo dnf upgrade
在 Ubuntu 上,你可以根据需要启用自动升级
askubuntu.com/questions/9/how-do-i-enable-automatic-updates
查看 man apt
update (apt-get(8)) update 用于从所有已配置的源下载软件包信息。其他命令可对这些数据进行操作,例如执行软件包升级或搜索并显示所有可供安装的软件包的详细信息
do-release-upgrade 升级到 Ubuntu 的新版本