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://gnu.ac.cn/licenses/gpl-3.0.en.html)
贡献
您提交的任何有意包含在作品中的贡献,都应使用GNU GPLv3授权。
依赖
~32–62MB
~1M SLoC