我们知道do-release-upgrade
“发布会升级”。但在更低的层次上它到底起什么作用?
我计划进行更手动的升级,例如 Debian 方式:在设置源aptitude update
后进行升级aptitude full-upgrade
。实际上,我计划完全与 交互aptitude
。但这让我很好奇,别的 do-relase-upgrade
确实如此,除了破坏我的 sources.list。
答案1
do-release-upgrade
是“update-manager-core”软件包的一部分。该脚本似乎会确定您要升级到哪个版本,尝试找出它是否受支持,并对后者提出投诉。- 如果确信它可以工作,它会下载特定于版本的升级工具并运行它。
“update-manager-core” 软件包的一部分是文件/etc/update-manager/meta-release
,您可以在其中找到 URLhttp://changelogs.ubuntu.com/meta-release在那里您可以找到要下载升级工具的 URL。
下载的升级工具压缩包是从源包“ubuntu-release-upgrader”(之前是“update-manager”)打包而来的。版本对应于目标版本的最新更新。
源代码中有一份老旧的 README 文件,来自 warty 和 hoary 发布时间。它讨论了在发布升级期间应该做什么。它还提到了一个链接,指向更详细的升级工具建议。
我在这里列出了那里提到的行动并检查它们是否实际实施了:
- 存储库相关
- 切换到新的 sources.list 条目
- 删除未知的第三方存储库
- 可能交换镜像(未实现)
- 包相关
- 升级前检查没有损坏的软件包
- 升级前更新当前版本(
apt-get update
仅限) - 删除并安装特定包
- 检查 {ubuntu,kubuntu,edubuntu}-desktop 是否已安装
- 删除旧内核
- 有一个删除黑名单和白名单
- 删除或替换早期版本中存在的过时软件包
- 配置相关(可能存在怪癖:见下文)
- 将默认用户添加到新组(我检查的版本没有这样做)
- 检查一些配置文件
升级工具是配置对于每个版本使用以下文件(打开它们查看!):
- 升级配置文件
- UpgradeTool相关配置
- 发布相关配置
- 存储库(例如 [Sources] ValidMirrors)
- 自定义更改([Distro] PostInstallScript)
- 特殊包;仅由 DistUpgradeController.py 处理:
- [发行版] RemoveObsoletes、ForcedObsoletes、BaseMetaPkgs、MetaPkgs
- [meta_package_name] ForcedObsoletes
- ...通过 DistUpgradeCache.py:
- [发行版] MetaPkgs、RemovalBlacklist、RemoveEssentialOk、BadVersions、BaseMetaPkgs、PurgeObsoletes、Demotions、KeyDependencies
- [发行版和元软件包名称] KeepInstalledPkgs、KeepInstalledSection、PostUpgrade*
- [内核移除] *
- DistUpgradeQuirks.py
- 运行(发布)特定函数(同一文件)和插件(
plugins
目录) - 函数必须有特定的名称(例如
from_nattyPreCacheOpen()
)并且插件必须有特殊的condition
属性(例如*
或PostInitialUpdate
) - 其中一个函数
StartUpgrade()
是,它本身就是另一个大杂烩:它调用了其他函数,用于遍历目录_applyPatches()
中的文件patches
- 所有这些都几乎不做任何事情我的安装(i386,不早于 natty-updates 的软件包)
- 运行(发布)特定函数(同一文件)和插件(
- DistUpgradeCache.py 的更多内容
- 运行
get_kernel_list.sh
(不可信)并确保安装了一个内核 - 关于Nvidia驱动的一些处理
- 运行
检查的版本:
- 整洁 → 梦幻
- 梦幻的→精确的
- 精确 → 可信 (2014-04-18 最终版本)
- trusty → utopic (2014-10-23 发布前几个小时)