一些文档

一些文档

我不知道是否、如何以及何时添加到 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升级仅限于“错误修复和安全补丁”(参见)。

一些文档

apt-get upgrade说:

检索并升级当前安装且有新版本可用的软件包;在任何情况下都不会删除当前安装的软件包,也不会检索和安装尚未安装的软件包。

apt upgrade

将安装新软件包如果需要满足依赖关系[...]。

其他发行版

作为额外的奖励,也许 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 的新版本

答案3

这绝不是一个权威的答案,它基本上只记录了我自己的一些浅薄的理解。

新软件包永远不会被视为错误或安全修复[需要引证]。它们被视为操作系统的新程序和新功能[需要引证]。新软件包永远不会添加到 Ubuntu 版本中,因为它是“冰冻“。

新的软件包将添加到下一个 Ubuntu 版本中,该版本应该在6个月

即使删除已经发布的包“从技术上来说不可能“而必须将其清空。

归根结底,我猜问题中提出的例子——无论它们看起来多么有效——在现实生活中从未发生过?例如,Canonical 从未独立开发过新的作为错误或安全修复的一部分进行打包。

相关内容