2 个版本
0.1.1 | 2020 年 12 月 3 日 |
---|---|
0.1.0 | 2019 年 1 月 7 日 |
#9 在 #pop
93 星 & 14 关注者
205KB
5K 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)
- 创建一个任务,通过指定路径的文件升级恢复分区。
RecoveryUpgradeByRelease(version:s,arch:s,flags:q) -> (result: y)
- 创建一个任务,通过发布 API 使用定义的详细信息升级恢复分区。
- 如果可用软件包更新,则将先执行
FetchUpdates
任务。 how
定义了如何升级恢复分区。- 可能的选项有
file
和release
。
- 可能的选项有
version
定义了要获取的套件(例如:20.04
)arch
定义了要获取该版本的哪个变体(例如:nvidia
)flags
设置了任务的附加配置参数
RefreshOS() -> (result: y)
ReleaseCheck() -> (当前:s,下一个:s,构建:n)
- 快速检查当前的发布版本,确定下一个发布版本,并说明是否有更新可用。
ReleaseUpgrade(方式:q,从:s,到: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(结果:y)
- 指示恢复升级过程的最终结果
ReleaseUpgradeEvent(事件:q)
- 通知客户端已发生发布升级事件
ReleaseUpgradeResult(结果:y)
- 指示恢复升级过程的最终结果
恢复升级事件
获取
(1
):获取恢复文件同步
(2
):与恢复分区同步恢复文件验证
(3
):验证获取的文件校验和完成
(4
):恢复分区升级完成失败
(5
):恢复分区升级失败
发布升级事件
更新包列表
(1
):更新当前版本的包列表获取包
(2
):获取当前版本更新的包升级包
(3
):升级当前版本的包安装包
(4
):确保系统关键包已安装更新源列表
(5
):将源列表更新为新版本获取新版本包
(6
):获取新版本的包尝试在线升级
(7
):尝试在线升级到新版本尝试创建systemd单元
(8
):创建安装新版本的systemd单元尝试恢复
(9
):设置恢复分区以安装新版本成功
(10
):新版本准备就绪,可以安装在线成功
(11
):新版本已成功安装失败
(12
):在设置升级过程中发生错误
许可协议
根据GNU通用公共许可证,版本3.0授权,(LICENSE 或 https://www.gnu.org/licenses/gpl-3.0.en.html)
贡献
你提交的任何有意包含在工作中的贡献,应按照GNU GPLv3许可。
依赖关系
~31–63MB
~1M SLoC