问题描述
我们知道do-release-upgrade
“进行了版本升级”。但在更低的水平,它真正做到了什么?
我打算在设置源之后进行更多的手动升级,例如Debian方式:aptitude update
和aptitude full-upgrade
。实际上,我计划与aptitude
完全互动。但这让我对do-relase-upgrade
的其他功能感到好奇,除了收集我的sources.list。
最佳解决思路
do-release-upgrade
是“update-manager-core”包的一部分。该脚本似乎确定您要升级到哪个版本,尝试找出它是否受支持并抱怨后者。 – 如果它确信有效,它会下载release-specific UpgradeTool并运行它。
“update-manager-core”包的一部分是文件/etc/update-manager/meta-release
,您可以在其中找到URL http://changelogs.ubuntu.com/meta-release,在那里您可以找到要下载的UpgradeTool的URL。
下载的UpgradeTool tarball从源包“ubuntu-release-upgrader”打包(在“update-manager”之前)。该版本对应于目标版本的最新更新。
来源有一个旧的自述文件,来自肮脏和白痴的发布时间。它讨论了在发布升级期间应该做什么。它还提到了一个指向more detailed UpgradeTool proposal的链接。
我在这里列出了那里提到的行动,并检查它们是否实际实施:
-
存储库相关
-
切换到新的sources.list条目
-
删除未知的第三方存储库
-
可能交换镜像(未实现)
-
-
包相关
-
检查升级前是否有破损的包裹
-
升级前更新当前版本(仅限
apt-get update
) -
删除并安装特定的包
-
检查是否安装了{ubuntu,kubuntu,edubuntu} -desktop
-
摆脱旧内核
-
有一个removal-blacklist和-whitelist
-
删除或替换早期版本中存在的过时软件包
-
-
配置相关(可能在怪癖中:见下文)
-
将默认用户添加到新组(未对我检查的版本执行)
-
检查一些配置文件
-
使用以下文件为每个版本配置UpgradeTool(打开它们以查看!):
-
DistUpgrade.cfg
-
UpgradeTool-related配置
-
release-related配置
-
存储库(例如[Sources] ValidMirrors)
-
自定义更改([Distro] PostInstallScript)
-
特别套餐;仅由DistUpgradeController.py处理:
-
[Distro] RemoveObsoletes,ForcedObsoletes,BaseMetaPkgs,MetaPkgs
-
[meta_package_name] ForcedObsoletes
-
-
……和DistUpgradeCache.py:
-
[Distro] MetaPkgs,RemovalBlacklist,RemoveEssentialOk,BadVersions,BaseMetaPkgs,PurgeObsoletes,Demotions,KeyDependencies
-
[Distro和meta_package_name] KeepInstalledPkgs,KeepInstalledSection,PostUpgrade *
-
[KernelRemoval] *
-
-
-
-
运行(发布)特定功能(相同文件)和插件(
plugins
目录) -
函数必须具有特定名称(例如
from_nattyPreCacheOpen()
)和插入特殊condition
属性(例如*
或PostInitialUpdate
) -
其中一个函数
StartUpgrade()
是另一个grab-bag本身:其中包括调用_applyPatches()
,它遍历patches
目录中的文件 -
所有这些在我的安装上几乎没有任何作用(i386,包装不比natty-updates早)
-
-
更多来自DistUpgradeCache.py
-
运行
get_kernel_list.sh
(不可靠)并确保安装了一个内核 -
一些处理Nvidia驱动程序
-
检查版本:
-
natty→oneiric
-
oneiric→精确
-
精确→可靠(最终截至2014-04-18)
-
可靠→乌托邦(2014-10-23发布前几小时)