#升级 #恢复 #分区 #pop #事件 #操作系统 #升级中

bin+lib pop-os/pop-upgrade-gtk

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

2 个版本

0.1.1 2020 年 12 月 3 日
0.1.0 2019 年 9 月 6 日

#731GUI

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)
    • 创建一个任务,将获取所有可用的更新,包括附加的软件包。
    • 如果已有更新任务正在执行,则 completedtotal 将具有非零值。
    • 如果 updates_available 返回 false,则没有要获取的软件包。
    • 除非指定 download_onlytrue,否则还将安装软件包。
  • RecoveryUpgradeByFile(path:s) -> (result: y)
    • 创建一个任务,将通过 path 中指定的文件升级恢复分区。
  • RecoveryUpgradeByRelease(版本:s,架构:s,标志:q) -> (result: y)
    • 创建一个任务,通过发布API使用定义的详细信息升级恢复分区。
    • 如果可用包更新,将先执行一个FetchUpdates任务。
    • how定义了如何升级恢复分区。
      • 可能选项为filerelease
    • 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文件
      • 如果源列表缺少任何关键存储库,也将解析和纠正
  • 状态() -> (状态:q,子状态:q)
    • 报告守护进程的当前状态,其中零表示不活动。
    • 如果该status有一个sub_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(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授权(LICENSEhttps://www.gnu.org/licenses/gpl-3.0.en.html

贡献

您提交的任何有意包含在作品中的贡献,都应使用GNU GPLv3授权。

依赖

~32–62MB
~1M SLoC