kylin-system-updater/backend/interface.md

15 KiB
Executable File
Raw Blame History

DBUS接口

[TOC]

描述

实现系统升级以python apt库和aptdeamon的形式

Dbus接口信息

名称 含义
BUS类型 SYSTEM BUS
DBUS名称 com.kylin.systemupgrade
OBJECT路径 /com/kylin/systemupgrade
INTERFACES名称 com.kylin.systemupgrade.interface

方法列表

Method Name Input Args Output Args means 异步任务
UpdateDetect b 更新cache产生组升级列表JSON文件
DistUpgradeAll b b 全部升级
DistUpgradePartial b,as b 部分升级
DistUpgradeSystem b b 全盘升级
CancelDownload b 取消升级
InsertInstallState ss b 向display表插入数据
GtDownloadspeedLimitValue b 获取当前限速
SetDownloadspeedMax sb b 设置限速
GetBackendStatus i 控制获取后端状态
UnattendedUpgradeValue ss bs 获取是否允许关机前更新
PurgePackages as b 卸载软件包
InstalldebFile ssbb b 安装本地deb包
DataBackendCollect ss b
CheckRebootRequired s b 检查是否需要重启的方法,以及弹窗提示

Method分析

UpdateDetect

  • 简介:更新cache对象完成从之后拿到系统中所有可升级的包再经过源过滤、白名单等等的过滤最后输出当前`可升级的包以及分组JSON配置 输出目录: /var/lib/kylin-system-updater

  • 入参:

  • 出参:True or False

  • 对应信号:

    • UpdateDetectStatusChanged: 更新的进度信息和状态信息
    • UpdateDetectFinished:更新的完成的信号

DistUpgradeAll

  • 简介:升级全部可升级的分组

  • 入参: b: False模式只进行获取升级列表以及计算修复依赖关系以及计算是否存在删除的包True模式:直接进行安装的操作 注意必须选使用False模式获取升级列表以及计算依赖关系再进行True模式

  • 出参:True or False

  • 对应信号:

    • UpdateDependResloveStatus: 升级计算依赖修复反馈信号
    • UpdateDloadAndInstStaChanged:升级安装过程的进度信号以及状态
    • UpdateInstallFinished: 升级安装完成的信号

UpdateDownloadInfo

  • 介绍: 发送下载包信息信号

  • 出参: i:当前正在下载的项,i:所有下载的项,i:当前下载的字节,i:总的需要下载的字节,i:下载速度

  • 示例:

    current_items = 1, total_items = 1, currenty_bytes = 45 kB, total_bytes = 45 kB, current_cps = 0 kB/s
    
    

GetBackendStatus

  • 介绍: 获取后端的状态,现在正在处理那些任务

  • 出参: i:当前任务ID整型数字

  • 示例:

    ACTION_DEFUALT_STATUS = -1			#默认状态空闲状态
    ACTION_UPDATE = 0					#处于更新cache状态
    ACTION_INSTALL = 1					#处于升级安装包括部分升级、全部升级、q状态
    ACTION_INSTALL_DEB = 2				#处于安装deb的状态
    ACTION_CHECK_RESOLVER = 3			#处于计算依赖过程
    ACTION_DOWNLOADONLY = 4				#单独下载软件包过程
    ACTION_FIX_BROKEN = 5				#修复依赖的过程
    ACTION_REMOVE_PACKAGES = 6			#卸载包的状态中
    

UnattendedUpgradeValue

  • 介绍: 设置或获取是否允许关机前更新

  • 入参: s:operation("get"/"set")s:value将要设置的值

  • 示例:

    operation = "set", value = "false"
    
    

InstalldebFile

  • 简介:安装本地deb包

  • 入参: source:(string) 安装来源,path:(string)本地deb包绝对路径_check_local_dep:(bool)出现依赖问题时是否查询本路径下是否存在满足的包,_auto_satisfy:(bool)出现依赖问题时是否通过网络下载并安装依赖包

  • 出参:True or False

  • 对应信号:

    • InstalldebStatusChanged:安装过程的进度信号以及状态
    • InstalldebFinished:安装完成的信号
  • 示例:

    source = 'kylin-installer', path = '/home/kylin/kylin-video_3.1.0-94.5_amd64.deb', _check_local_dep = 0, _auto_satisfy = 1
    
    

PurgePackages

  • 简介:卸载系统中的软件包

  • 入参: as: 需要卸载的包列表

  • 出参:True or False 出参值不做任何参考意义 注意:其中False的时候表示后端正在处理其他任务会报错其中完成信号也会反馈结果故不采用方法的返回值来判断错误类型

  • 对应信号:

    • PurgePkgStatusChanged:卸载过程的进度信号以及状态
    • PurgePackagesFinished: 卸载完成的信号
  • 示例:

    _purge_list = ['kylin-video','tree']
    

DataBackendCollect

  • 介绍: 后端数据采集

  • 入参: messageType: 消息埋点(string) uploadMessage: 上传数据(json格式字符串),必须包含的字段: "packageName"

  • 示例:

    messageType = "UpdateInfos", uploadMessage = "{\"packageName\":\"kylin-system-updater\",\"source\":\"kylin-system-updater\",\"status\":\"True\",\"errorCode\":\"\",\"versionOld\":\"1.2.13.2kord\",\"versionNew\":\"1.2.17.1kord\"}"
    
    messageType: 消息埋点(string) "UpdateInfos""InstallInfos""RemoveInfos"...
    source: 安装来源 "kylin-installer""unattented-upgrade""kylin-software-center""kylin-system-updater"...
    status: 安装或卸载状态 "True"/"False"
    errorCode: 错误信息 ""/"..."
    versionOld: 旧版本号 "1.2.13.2kord"
    versionNew: 新版本号 "1.2.17.1kord"
    
    

CheckRebootRequired

  • 介绍: 检查是否需要重启的方法,以及弹窗提示
  • 入参: s:标识那个应用调的此接口如自动更新可填入字符串“autoyupgrade”
  • 出参:True or False 执行的结果

Signal列表

Signal Name Output Args means
UpdateDetectStatusChanged i,s 更新进度信息以及状态信息
UpdateDetectFinished b,as,s,s 更新完成信号
UpdateDloadAndInstStaChanged as,i,s,s 升级的进度信号以及状态
UpdateInstallFinished b,as,s,s 升级完成的信号
UpdateDownloadInfo i,i,u,u,i 发送下载包信息信号
UpdateDependResloveStatus b,b,s 更新依赖修复信息
DistupgradeDependResloveStatus b,s 更新全盘修复信息
Cancelable b 是否可取消
UpdateSqlitSingle
FixBrokenStatusChanged iiisss 修复依赖的状态信号
PurgePackagesFinished iss 卸载完成信号
PurgePkgStatusChanged bss 卸载进度信息以及状态信息
RebootLogoutRequired s 请求重启或者注销的信号

Signal分析

UpdateDetectStatusChanged

  • 介绍:更新的进度信息和状态信息

  • 出参:i:更新的进度信息从0-100%s:更新的状态信息,

  • 示例:

    progress = 9 , status = 正在解决依赖关系
    progress = 92 , status = 正在载入软件列表
    progress = 92 , status = 完成
    

UpdateDetectFinished

  • 介绍:更新的完成的信号

  • 出参: b:更新是否成功,as:可升级的组列表,s:产生错误的结果,s:产生错误的原因

  • 示例:

    success = True , upgrade_group = ['kylin-update-desktop-system', 'tree', 'texinfo', 'kylin-update-manager', 'dnsmasq-base', 'vino', 'dpkg-dev', 'ghostscript', 'atril', 'wpasupplicant', 'eom', 'eom-common', 'fcitx-bin', 'fcitx-data', 'fcitx-frontend-gtk2', 'wps-office'], error_string =  , error_desc = 
    
    error_string = 获取更新软件推送失败,请稍后再进行尝试更新 , error_desc = 推送服务器连接异常 
    
    

UpdateDependResloveStatus

  • 介绍:升级计算依赖修复反馈信号

  • 出参: b:修复依赖关系是否成功,b:是否存在升级需要卸载的包,as:卸载的包列表,as:卸载的包的描述信息,as:卸载此包的原因 升级安装那些包导致的,s:产生错误的结果,s:产生错误的原因

  • 示例:

    UpdateDependResloveStatus:resolver_status = True , remove_status = True , remove_pkgs = ['kylin-burner-i18n'],pkg_raw_description = ['Sophisticated CD/DVD burning application - localizations files'] ,delete_desc = ['kylin-burner-i18n 将要被删除,由于升级 kylin-burner'],error_string =  , error_desc =  
    
    

UpdateDloadAndInstStaChanged

  • 介绍: 升级安装过程的进度信号以及状态

  • 出参: as:当前那些组在升级安装 i:更新的进度信息从0-100%s:更新的状态信息 s:下载的细节信息

  • 示例:

    groups_list = ['kylin-update-desktop-system'] progress = 15 , status = 下载中 current_details = 下载中 tree
    

UpdateInstallFinished

  • 介绍: 升级安装完成的信号

  • 出参: b:升级是否成功,as:可升级的组列表,s:产生错误的结果,s:产生错误的原因

  • 示例:

    pdateInstallFinished success = True , upgrade_group = ['tree'], error_string = 系统升级完成。 , error_desc =
    
    

FixBrokenStatusChanged

  • 介绍: 修复依赖过程中的状态反馈信号

  • 出参: i:修复依赖是否完成 i:修复依赖过程是否成功注意:只有修复完成时,修复依赖是否成功才有意义i:修复的进度信息 s:修复的状态信息 s:产生错误的结果,s:产生错误的原因

  • 示例:

    emit FixBrokenStatusChanged finished = False , success = True,progress = 66 , status = 正在应用更改,error_string =  , error_desc = 
    

PurgePkgStatusChanged

  • 介绍:卸载的进度信息和状态信息以及状态的细节信息

  • 出参:i:卸载的进度信息从0-100%s:卸载的状态信息,s:卸载的细节信息

  • 示例:

    INFO:emit PurgePkgStatusChanged progress = 63 , status = 正在应用更改 ,current_details = 正在准备删除 kylin-video
    INFO:emit PurgePkgStatusChanged progress = 76 , status = 正在应用更改 ,current_details = 正在卸载 kylin-video
    
    

PurgePackagesFinished

  • 介绍:卸载的完成的信号

  • 出参: b:卸载是否成功,s:产生错误的结果,s:产生错误的原因

  • 示例:

    #卸载完成
    PurgePackagesFinished success = True , error_string = 卸载完成。 , error_desc = 
    
    #卸载失败
    PurgePackagesFinished success = False , error_string = 软件包不存在 , error_desc = 检查包名的拼写是否正确,以及是否启用了相应的仓库。
    PurgePackagesFinished success = False , error_string = 软件包没有安装 , error_desc = 不需要进行卸载。
    
    #卸载失败 由于正在处理其他任务也同样会报错
    PurgePackagesFinished success = False , error_string = 其他任务正在更新升级中,请稍后再卸载。 , error_desc = 
    

InstalldebStatusChanged

  • 介绍:安装的进度信息和状态信息以及状态的细节信息

  • 出参:i:安装的进度信息从0-100%s:安装的状态信息,s:安装的细节信息

  • 示例:

    InstalldebStatusChanged progress = 57 , status = 正在应用更改 ,current_details = 正在配置 python3-bandit
    InstalldebStatusChanged progress = 57 , status = 正在应用更改 ,current_details = python3-bandit 已安装
    
    

InstalldebFinished

  • 介绍:安装的完成的信号

  • 出参: b:安装是否成功,s:产生错误的结果,s:产生错误的原因

  • 示例:

    #安装完成
    InstalldebFinished success = True , error_string =  , error_desc =
    
    #安装失败 缺少依赖的
    InstalldebFinished success = False , error_string = bandit dependency is not satisfied  , error_desc = python3-bandit
    
    #安装失败 选择从网络拉依赖 网络断开 报网络错误
    InstalldebFinished success = False , error_string = 下载软件包文件失败 , error_desc = 检查您的网络连接。
    

RebootLogoutRequired

  • 介绍:请求重启和注销的信号

  • 出参: s: "reboot" 表示重启 "logout"表示注销

  • 示例:

    Emitting RebootLogoutRequired required_status = reboot
    

后端日志:/var/log/kylin-system-updater/kylin-system-updater.log.1

更新过程报错信息总结

错误信息 错误原因 解决办法
下载软件仓库信息失败 源存在问题使用apt update检查若存在报错则更新管理器无问题 检查源是否可以使用
无法访问源管理服务器 源管理服务器存在问题 源管理服务器是否可用或者检查源服务器配置
软件索引已经损坏 当前系统中cache被破坏apt无法使用 终端检查错误原因进行解决
无法初始化软件包信息 apt存在某些问题 具体错误原因查看日志相应解决
无法获取组配置软件包 源中不存在kylin-update-desktop-config 将此包放入源仓库或者写配置文件不强制安装
无法读取推送升级列表 读取推送列表出现问题 检查important.list是否存在
获取软件推送失败 老版本文案同 无法访问源管理服务器解决

安装过程报错信息总结

错误信息 错误原因 解决办法
软件包操作失败 被升级的软件包有问题 检查后端log日志查看那个包存在问题
下载软件包文件失败 网络原因的或者这个软件包的仓库 检查网络以及源仓库
磁盘空间不足 磁盘的空间不足 查看日志那些目录空间不足
不能计算升级 无法计算依赖关系 检查日志那个包出现的问题,相应解决