我们知道do-release-upgrade
“进行发布升级”。但在稍低的层面上,它到底做了什么呢?
我打算进行更多手动升级,例如按照Debian的方式:设置源后执行aptitude update
和aptitude full-upgrade
。实际上,我计划完全使用aptitude
进行交互操作。但这让我对do-release-upgrade
除了搞乱我的sources.list之外还做了什么感到好奇。
我们知道do-release-upgrade
“进行发布升级”。但在稍低的层面上,它到底做了什么呢?
我打算进行更多手动升级,例如按照Debian的方式:设置源后执行aptitude update
和aptitude full-upgrade
。实际上,我计划完全使用aptitude
进行交互操作。但这让我对do-release-upgrade
除了搞乱我的sources.list之外还做了什么感到好奇。
do-release-upgrade
是“update-manager-core”软件包的一部分。该脚本似乎确定您要升级到哪个版本,并尝试查找是否支持该版本,如果不支持则会进行投诉。- 如果它确信可以工作,它会下载特定于该版本的UpgradeTool并运行它。
“update-manager-core”软件包的一部分是文件/etc/update-manager/meta-release
,您可以在其中找到URL http://changelogs.ubuntu.com/meta-release,然后在那里找到UpgradeTool的下载链接。
下载的UpgradeTool tarball是从源代码软件包“ubuntu-release-upgrader”打包而来的(之前是“update-manager”)。该版本对应于目标版本的最新更新。
该源代码有一个来自warty和hoary发布时间的旧README。它讨论了在升级过程中应该做什么。它还提到了一个更详细的UpgradeTool建议的链接。
我在这里列出了其中提到的操作,并检查它们是否实际实现:
升级工具通过以下文件进行每个版本的配置(打开它们以查看!):
DistUpgrade.cfgplugins
目录)from_nattyPreCacheOpen()
),插件必须具有特殊的 condition
属性(例如 *
或 PostInitialUpdate
)StartUpgrade()
本身就是一个杂糅物:其中之一是调用 _applyPatches()
,该函数遍历 patches
目录中的文件get_kernel_list.sh
(在 trusty 中不存在),并确保安装了一个内核已核对版本: