2 个版本
0.1.1 | 2020 年 12 月 3 日 |
---|---|
0.1.0 | 2019 年 9 月 6 日 |
#731 在 GUI
93 星 & 14 关注者
78KB
2K SLoC
pop-upgrade
用于将 Pop!_OS 和其恢复分区升级到新版本的实用工具。此工具将作为 Ubuntu 的 do-release-upgrade
脚本的替代品。目标是减少错误,确保在升级时保留关键软件包,并与 Pop!_OS 更好地集成。
DBus API
以守护进程模式启动时(需要 root 权限),将注册一个新 Dbus 服务,以下为详细信息
- 接口:
com.system76.PopUpgrade
- 名称:
com.system76.PopUpgrade
- 路径:
/com/system76/PopUpgrade
DBus 方法
FetchUpdates(additional_strings: as,download_only:b) -> (updates_available: b, completed: s, total: s)
- 创建一个任务,将获取所有可用的更新,包括附加的软件包。
- 如果已有更新任务正在执行,则
completed
和total
将具有非零值。 - 如果
updates_available
返回false
,则没有要获取的软件包。 - 除非指定
download_only
为true
,否则还将安装软件包。
RecoveryUpgradeByFile(path:s) -> (result: y)
- 创建一个任务,将通过
path
中指定的文件升级恢复分区。
- 创建一个任务,将通过
RecoveryUpgradeByRelease(版本:s,架构:s,标志:q) -> (result: y)
- 创建一个任务,通过发布API使用定义的详细信息升级恢复分区。
- 如果可用包更新,将先执行一个
FetchUpdates
任务。 how
定义了如何升级恢复分区。- 可能选项为
file
和release
。
- 可能选项为
version
定义了要获取的套件(例如:20.04
)arch
定义了要获取该版本的哪个变体(例如:nvidia
)flags
为任务设置额外的配置参数
RefreshOS() -> (result: y)
ReleaseCheck() -> (当前:s,下一个:s,构建:n)
- 快速检查当前发布版本,确定下一个发布版本,并说明更新是否
available
。
- 快速检查当前发布版本,确定下一个发布版本,并说明更新是否
ReleaseUpgrade(how:q,from:s,to:s)
- 创建一个任务以启动发行版发布升级。
from
定义了要升级的套件。to
定义了要升级到的套件。- 执行的升级方法由
how
确定。1
将使用systemd执行离线升级。2
将使用恢复分区执行离线升级。- 任何其他值将导致错误。
ReleaseRepair()
- 执行可能影响系统操作的任何问题的自动修复
- 如果某些挂载丢失或挂载错误的ID,将纠正
/etc/fstab
文件 - 如果源列表缺少任何关键存储库,也将解析和纠正
- 如果某些挂载丢失或挂载错误的ID,将纠正
- 执行可能影响系统操作的任何问题的自动修复
状态() -> (状态:q,子状态:q)
- 报告守护进程的当前状态,其中零表示不活动。
- 如果该
status
有一个sub_status
,则将其设置为非零值。 - 主状态的可用状态为
0
:不活动,1
:获取包,2
:恢复升级,3
:发布升级,4
:包升级
UpgradePackages()
- 升级当前发布的包,类似于执行正常的非交互式升级。
DBus 信号
PackageFetchResult(状态:q)
- 表示
FetchUpdates
任务已完成 - 状态为
0
表示成功,而1
表示失败
- 表示
PackageFetched(包:s,完成:u,总:u)
- 当
FetchUpdates
任务获取包时,会触发一个事件。 package
指的是获取的包的名称。completed
和total
可以用来跟踪任务的进度。
- 当
PackageFetching(包:s)
- 当
FetchUpdates
任务开始获取新包时,会触发一个事件。 package
指的是获取的包的名称
- 当
PackageUpgrade(事件:a{ss})
- ADT表示为字段值对的映射。
RecoveryDownloadProgress(进度:t,总:t)
- 跟踪获取恢复文件的进度
RecoveryUpgradeEvent(事件:q)
- 通知客户端发生了恢复升级事件
RecoveryUpgradeResult(result:y)
- 表示恢复升级过程的最终结果
ReleaseUpgradeEvent(事件:q)
- 通知客户端发生了发布升级事件
ReleaseUpgradeResult(result:y)
- 表示恢复升级过程的最终结果
恢复升级事件
Fetching
(1
): 获取恢复文件Syncing
(2
): 与恢复分区同步恢复文件Verifying
(3
): 验证获取文件的校验和Complete
(4
): 恢复分区升级完成Failed
(5
): 恢复分区升级失败
发布升级事件
UpdatingPackageLists
(1
): 更新当前版本的软件包列表FetchingPackages
(2
): 获取当前版本的更新软件包UpgradingPackages
(3
): 升级当前版本的软件包InstallingPackages
(4
): 确保安装系统关键软件包UpdatingSourceLists
(5
): 将源列表更新到新版本FetchingPackagesForNewRelease
(6
): 获取新版本的软件包AttemptingLiveUpgrade
(7
): 尝试对新版本进行在线升级AttemptingSystemdUnit
(8
): 为安装新版本创建systemd单元AttemptingRecovery
(9
): 设置恢复分区以安装新版本Success
(10
): 新版本准备就绪,可以安装SuccessLive
(11
): 新版本安装成功Failure
(12
): 在设置升级过程中发生了错误
许可证
根据GNU通用公共许可证版本3.0授权(LICENSE 或 https://www.gnu.org/licenses/gpl-3.0.en.html)
贡献
您提交的任何有意包含在作品中的贡献,都应使用GNU GPLv3授权。
依赖
~32–62MB
~1M SLoC