#upgrade #recovery #partition #pop #packages #os #ubuntu

bin+lib pop-os/pop-upgrade

用于升级 Pop!_OS 及其恢复分区到新版本的实用工具

2 个版本

0.1.1 2020 年 12 月 3 日
0.1.0 2019 年 1 月 7 日

#9#pop

93 星 & 14 关注者

GPL-3.0 许可证

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)
    • 创建一个任务,用于获取所有可用的更新,包括额外的软件包。
    • 如果有更新任务正在执行,则 completedtotal 将具有非零值。
    • 如果 updates_available 返回 false,则没有可获取的软件包。
    • 除非指定 download_onlytrue,否则将安装软件包。
  • RecoveryUpgradeByFile(path:s) -> (result: y)
    • 创建一个任务,通过指定路径的文件升级恢复分区。
  • RecoveryUpgradeByRelease(version:s,arch:s,flags:q) -> (result: y)
    • 创建一个任务,通过发布 API 使用定义的详细信息升级恢复分区。
    • 如果可用软件包更新,则将先执行 FetchUpdates 任务。
    • how 定义了如何升级恢复分区。
      • 可能的选项有 filerelease
    • 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 文件
      • 如果源列表缺失任何关键存储库,也将解析和修正它们
  • 状态() -> (状态:q,子状态:q)
    • 报告守护进程的当前状态,其中零表示不活动。
    • 如果 statussub_status,则将其设置为非零值。
    • 主状态的有效状态如下
      • 0:不活动,
      • 1:获取软件包,
      • 2:恢复升级,
      • 3:发布升级,
      • 4:软件包升级
  • UpgradePackages()
    • 升级当前版本的软件包,类似于执行正常的非交互式升级。

DBus 信号

  • PackageFetchResult(状态:q)
    • 指示 FetchUpdates 任务已完成
    • 状态为 0 表示成功,而 1 表示失败
  • PackageFetched(软件包:s,完成:u,总数:u)
    • FetchUpdates 任务已获取软件包时,触发的事件。
    • package 指的是已获取的软件包的名称。
    • completedtotal 可用于跟踪任务进度。
  • 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授权,(LICENSEhttps://www.gnu.org/licenses/gpl-3.0.en.html)

贡献

你提交的任何有意包含在工作中的贡献,应按照GNU GPLv3许可。

依赖关系

~31–63MB
~1M SLoC