bbo*_*sak 13 upgrade release-management
Ubuntu 如何在操作系统仍在运行的情况下无缝升级到更新的发行版?我是从 10.10 升级到 11.04,之前也升级过几次了,就是运行 update-manager -d 下载安装,然后重启一样简单。
这究竟是如何工作的?升级管理器如何在操作系统仍在使用时对其进行更新?
Pau*_*sch 17
这里有更详细的过程描述。对不起,文字太长了。
我的经验源于 Debian,Ubuntu 中使用的整个打包和升级系统最初是为此发明的。每日 Ubuntu 安全升级对应于apt-get upgrade通常不会删除任何软件的运行。大版本升级对应于apt-get dist-upgrade软件包可以完全交换的时期。
实际上,在版本升级期间通常不会交换非常低级别的组件。升级后,您应该立即在 /boot 目录中找到两个内核和 initrd 映像。这是因为不同的程序内核组件不能很好地互换。如果在升级过程中需要加载新的设备驱动程序,则这些驱动程序必须与正在运行的内核兼容。系统使用新内核启动后,可以删除旧内核。上次我检查这件事必须手动完成,我不知道当前的更新程序如何处理。这是顺便说一句。主要原因,为什么内核映像在文件名中包含其版本号 - 因此您可以同时安装不同的内核版本。模块路径相同 (/lib/modules/...)
软件包被一个一个升级,从依赖层次结构中最低的包开始。这些通常是程序库,如 libc 和其他程序库。然而,包更新的顺序不是硬编码的,而是随着包依赖关系的解决而动态计算的。在大多数情况下,旧程序可以与新库一起运行,所以如果这些库先被替换,问题就不大了。
在这里你必须明白,系统区分手动安装的包(即你自己直接请求安装的包,即chromium)和自动安装的包,它们只安装来满足手动安装的包的依赖关系(以及这些依赖关系的依赖关系) )。
对于每个手动安装的程序,更新程序只会寻找更新的版本。通常这些程序只是像“ubuntu-desktop”这样的元包,它不包含数据,只包含依赖项。新版本的依赖库将被引入,因为它们是由直接更新(手动请求)的程序所请求的。更新程序将始终尝试安装任何依赖包的最新可用版本(在任何升级期间,而不仅仅是发布升级)。
不能在新库版本下运行的程序在库升级之后和程序本身升级之前都不能启动。如果这些程序应该在库升级之前已经在运行,但是它们将继续运行,因为只要旧的库版本仍在使用中,它就会保留在内存中。在升级之前启动的程序也是如此。在终止并重新启动之前,它们不会提供新功能。
更新后,一些库(或一般的依赖项)将被孤立。这些是旧程序版本需要但新版本不再需要的库。由于这些包被标记为自动安装,并且由于手动安装的程序不再与它们相关,因此可以轻松定位和删除这些包。您甚至可以将其视为更新过程的最后一步(更新程序说“删除过时的包”或类似内容)。
一些软件包将被安装,这些软件包以前没有安装,这些只是新的依赖项,它们被标记为自动安装,如果将来对它们的需求消失,可以将其删除。
这种机制甚至允许交换整个用户程序。例如从 Gnome2 切换到 Unity。由于两者都只是 ubuntu-desktop 的自动依赖项,ubuntu-desktop 是少数几个包之一,实际上首先需要为其提供新版本。
程序通常不依赖于特定版本的操作系统内核,因此它们通常可以与正在运行的内核一起正常工作。
除此之外,我怀疑Ubuntu 更新程序将一些特定的修复程序和变通方法混入其中,以规避该理论破裂的情况。
正如您在更新过程中看到的那样,在非常好的情况下,系统只能在有限的部分使用。是否应走的东西,你在更新过程中错将最有可能留下一个破碎系统。通常甚至是不容易修复的,因为升级程序也会受到影响。请记住,依赖项已损坏的程序可以继续运行,但不能重新启动,只要依赖项已损坏,更新程序也是如此。
您可以使用命令行程序apt-mark找出哪些包标记为手动安装,哪些已自动安装。您也可以使用相同的程序切换这些标记。这将直接影响更新过程。
在更复杂的软件设置中,更新程序有时会要求您手动解决依赖项。即,当一个手动安装的程序更新并请求库的新版本而另一个手动安装的程序依赖于同一库的旧版本并且无法使用新版本时。然后,您将不得不做出选择,要么放弃其中一个程序,要么不升级这两个程序。由于依赖项通常很复杂,这会很快变得非常混乱(您可能听说过“依赖地狱”一词)。
现在回答具体问题:
如果您还有其他问题,请问我。
根据我的经验,我假设当包和模块运行时,它们保存在内存中,并且不会太多地引用它们在硬盘驱动器上的副本。如果您在 ubuntu 中运行一个程序,然后在其运行时删除相关的软件包,您就会看到这一点。它会继续运行,但如果关闭它,则无法重新启动它。
我认为发行版升级也会发生同样的情况。与 ubuntu 原始版本相关的所有软件包仍在运行,即使它们已被删除并替换为新软件包,因此当它们最终在系统重新启动时停止时,新软件包将接管。
| 归档时间: |
|
| 查看次数: |
4527 次 |
| 最近记录: |