[如意玲珑生态指南] 应用构建教程(1) #ll-pica & adep

deepin 23平台上的Pica转制工具教程&adep模块运用实例

ll-pica为玲珑应用构建工具体系中的一款辅助工具,目前提供 deb 包转换为玲珑包的能力,生成构建玲珑应用需要的 linglong.yaml 文件,并依赖 ll-builder 来实现应用构建和导出。截止目前为止,Pica转换工具目前仅支持在deepin V23环境上使用.
ll-pica目前仅完整支持转换符合应用商店打包规范的软件包,若源deb包本身存在依赖关系不清晰、运行库函数兼容性不明确等问题,则可能出现转换成功、运行异常的情况.
需要注意的是,deepin V23 RC2中仅预装了玲珑主程序及运行组件,ll-pica属于构建组件,需要自行安装.具体安装方法可查阅玲珑文档库中的安装板块

结合活动迁移脚本便捷转换本地deb包

通过对近期玲珑生态活动成果的总结分析,目前已知通过Pica转换工具将应用商店中的Electron based应用转换为玲珑版本的成功率较高,也更具备模板性,因此本案例中将选取deepin V23应用商店中的”百度网盘”作为来作为演示应用.
除玲珑组件中的Pica转换工具之外,近期玲珑生态活动同时提供了便捷脚本用于搭配Pica转换工具来将deepin应用商店中在架的传统deb格式应用转换为玲珑格式.
打开工具的使用手册,我们可以得知在开始转换任务前,需要准备需要转换应用在应用商店中对应的包名.
在获取上述材料后,打开脚本修改工作区,执行时输入包名即可一键转换应用并导出玲珑安装文件”layer”.该脚本目前最新版本已经支持导出后自动安装玲珑安装文件,所以在转换构建成功后直接通过启动器来检查应用启动结果即可.

adep模块运用实例

adep模块为ll-pica中的一项重要功能,用于在使用ll-pica转换deb应用时添加源deb包暂未声明的其他软件包,以此来解决部分应用构建后运行时出现的动态运行库缺失的问题.
需要注意的是,adep功能需要向构建工程所属的”linglong.yaml”配置文件写入依赖包信息,若当前目录下不存在或未指定具体yaml配置文件,则无法使该用法生效.
这次我们选取deepin V23应用商店中的”迅雷Linux版”进行演示,在获取包名信息后按照上文的方法使用脚本通过ll-pica将应用导出为玲珑安装文件”layer”.
在构建完成后,启动器顺利出现了”迅雷”的启动入口,但是很快就可以发现点击该入口并不能正常启动应用.此时我们可以通过命令行来打开调试通道,通过 “ll-cli run package_name” 的格式将包名替换到 “package_name” 中,查看是否存在错误信息输出.除此之外,你还可以通过另外一种更方便的方法来进行途径,每次项目保存完配置文件时,不进行build和export操作,进入当前构建项目yaml所在的目录执行ll-builder run来临时运行.
正如预期的一样,执行启动应用的指令后返回了 “libdbus-glib-1.so.2” 运行库丢失的报错,这意味着该应用尽管在使用ll-pica转换为玲珑格式时自动获取并处理了deb包中所记录的依赖条件信息,但从返回的调试结果来看,该包维护者在封装deb包时并未正确填写该应用运行所需的所有运行库、依赖包,导致在转换后未能在玲珑环境中安装对应的运行库.
前文提到了ll-pica下属adep模块支持单独添加依赖,但在这之前,我们需要确定包含该运行库的软件包名.一般运行库类软件包命名格式可以简要理解为”lib某库”,如 “openssl3.2” 对应的运行库所属包名为 “libssl3” .

1.png

目前deepin V23兼容apt包管理工具,因此我们可以通过以下两种方案来确认该运行库所属包名:

  1. 模糊搜索
    本案例中可知缺失的运行库为”libdbus-glib-1.so.2″,通过上文对运行库包名命名规则可以猜测,该库对应的包名可能为”libdbus-glib”,因此通过apt搜索可以得出相关的包名列表
ziggy@ziggy-linglong1:~$ apt search libdbus-glib

通常在执行上述操作后,你将会得到数个软件包的候选列表,此时我们可以通过比对包名称、描述等信息综合评判哪一个是我们需要使用到的包.通常来说,lib类包

ziggy@ziggy-linglong1:~$ apt search libdbus-glib
正在排序... 完成
全文搜索... 完成  
libdbus-glib-1-2/未知,now 0.112-2 amd64 [已安装]
  deprecated library for D-Bus IPC

libdbus-glib-1-2-dbgsym/未知 0.112-2 amd64
  debug symbols for libdbus-glib-1-2

libdbus-glib-1-dev/未知 0.112-2 amd64
  deprecated library for D-Bus IPC (development files)

尽管该方案属于模糊搜索,但对操作者有一定基础知识要求,如果你对主流运行库并不熟悉,我建议你使用下面的精确搜索方案.

  1. 精确搜索
    apt包管理工具除了自带的search功能支持搜索软件包外,可以自行安装”apt-file”模块来提供增强功能,主要用于查看仓库源中各软件包中所包含的文件以及通过文件名信息来搜索某文件是否存在于本仓库的某包中.
    运用到本实例中,我们可以根据上述操作返回的动态库文件名来搜索确认是否仓库源中有软件包含有本文件.
    在开始搜索前,你需要先刷新apt-file的相关索引缓存
root@ziggy-PC:~# apt-file update
ziggy@ziggy-PC:/$ apt-file search libdbus-glib-1.so.2

libdbus-glib-1-2: /usr/lib/x86_64-linux-gnu/libdbus-glib-1.so.2
libdbus-glib-1-2: /usr/lib/x86_64-linux-gnu/libdbus-glib-1.so.2.3.5

在搜索结果沉淀后,我们可以得到一系列的模糊搜索结果,如果该文件唯一性足够高,那么就会输出一个更精确的结果.比如在当前仓库源中, “libdbus-glib-1.so.2” 只有 “libdbus-glib-1-2” 软件包内含有该文件,因此很快可以得出结果.注: “apt-file”仅支持索引当前所有仓库源中包含的软件包,若包含该文件的软件包不存在当前所有仓库源中,则无法得出正确结果
在上述操作后,我们因此得知本轮”迅雷”转换成玲珑应用之后无法运行是动态运行库包 “libdbus-glib-1-2” 缺失导致,所以接下来我们即将使用 “ll-pica adep” 模块来添加缺失的运行库依赖包.需要注意的是,adep模块支持直接联网获取依赖包并导入到玲珑项目中.为了能够方便添加缺失的库,你需要满足以下条件:

  1. 你添加的依赖包需要存在于当前系统仓库源中
  2. 添加依赖时仅需要填写包名,暂不支持指定具体版本号,因此建议在添加依赖导入项目前确保该运行库可以解决问题
  3. 执行”ll-pica adep”操作时,当前目录下必须存在该项目所属的yaml配置文件,否则你需要指定依赖添加目的地项目的yaml配置文件
ziggy@ziggy-PC:/$ ll-pica adep -d "libdbus-glib-1-2" -p /path/to/linglong.yaml

由于这里执行命令的目录就是项目yaml所在目录,因此不需要单独指定yaml所在路径

ziggy@ziggy-PC:/$ ll-pica adep -d "libdbus-glib-1-2"

如此操作之下就可以很方便将缺失的库导入项目中了,添加完成后我们进行人工手动构建导出,通过运行验证是否启动流程问题已经得到解决


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注