通过《如意玲珑应用构建指南(二):在玲珑容器中编译基于 Qt5 的开源应用》的学习后,相信大家已经基本了解了在玲珑容器中通过怎样的操作可以将基于 Qt5 的开源应用——qBittorrent 的项目源代码编译为可以运行的二进制程序文件。
今天, 我们在此基础上补齐玲珑应用构建基本步骤中的最后步骤——编写一份完整的玲珑应用构建工程配置文件 linglong.yaml, 主要实现以下的目标:
自动化拉取开源项目源代码;
自动应用对于源代码进行修改的 Patch;
自动执行编译构建、安装操作。
01前期准备
根据玲珑应用构建工程通用资源的规范要求,我们应当为一款图形化应用同时提供保障桌面用户体验的 icons 图标文件及 desktop 启动文件。因此,为了能够编写自动编译 qBittorrent 的完整 linglong.yaml,需要额外准备以下材料:
非二进制文件通用资源,icons图标、desktop文件;
主程序 qBittorrent 开源项目的仓库 Git 信息、Tag 版本、Commit 信息;
第三方运行库 libtorrent 开源项目的仓库 Git 信息、Tag版本、Commit信息。
1.1 通用资源准备
由于在上节教程中我们在玲珑容器内已经成功编译并运行了 qBittorrent,并且这款应用在安装到 $PREFIX 之后一并提供了 icons 目录、desktop 启动文件。
我们对这两项进行检查, 确认均符合 Freedesktop XDG 规范,因此我们仅需要直接从容器中复制到本地即可, 即复制到构建目录 /project 中。
ziggy@linyaps23:/project/src/qBittorrent-release-4.6.7-szbt2/build$ ls $PREFIX/share/applications/ org.qbittorrent.qBittorrent.desktop
ziggy@linyaps23:/project/src/qBittorrent-release-4.6.7-szbt2/build$ ls $PREFIX/share/icons/hicolor/128x128/apps/ qbittorrent.png
于是, 我们得到了非二进制文件通用资源,为了方便被构建组件使用,我这里将这些文件放到了构建目录的 template_app子目录中,现在呈现此类结构:
template_app ├── linglong.yaml └── template_app ├── applications │ └── org.qbittorrent.qBittorrent.desktop ├── icons │ └── hicolor │ ├── 128x128 │ │ ├── apps │ │ │ └── qbittorrent.png │ │ └── status │ │ └── qbittorrent-tray.png │ └── scalable │ ├── apps │ │ └── qbittorrent.svg │ └── status │ ├── qbittorrent-tray-dark.svg │ ├── qbittorrent-tray-light.svg │ └── qbittorrent-tray.svg
1.2desktop 启动文件定制
根据玲珑应用构建工程通用资源的规范,我们需要确保当前的 desktop 文件符合相关规范。
我们打开从容器中导出的 desktop 文件,检查 Exec 和 Icon 字段,得出以下结果:
[Desktop Entry] Categories=Network;FileTransfer;P2P;Qt; Exec=qbittorrent %U GenericName=BitTorrent client Comment=Download and share files over BitTorrent Icon=qbittorrent
Icon 字段值与图标文件一致,符合规范;
Exec字段值不为玲珑容器内编译的结果, 需要修改为符合玲珑应用构建工程通用资源的规范的内容,这里替换为绝对路径指向容器中的具体二进制文件,用于唤醒容器并启动该应用。
02构建?程配置?件 linglong.yaml
在准备图形化应用所必备的通用资源后,我们着手编写构建规则。
由于在上节教程中我们已经准备了一版简单但不具备完整构建功能的 linglong.yaml,因此我们可以在其基础上进行定制,现在是初始状态:
# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. # # SPDX-License-Identifier: LGPL-3.0-or-later version: "4.6.7.2" package: id: org.qbittorrent.qBittorrent name: "qBittorrent" version: 4.6.7.2 kind: app description: | qBittorrent binary base: org.deepin.foundation/23.0.0 runtime: org.deepin.Runtime/23.0.1 command: - /opt/apps/org.qbittorrent.qBittorrent/files/bin/qbittorrent sources: - kind: local name: "qBittorrent" build: | mkdir -p ${PREFIX}/bin/ ${PREFIX}/share/
2.1构建规则编写 & 测试
为了能够平滑过渡,我这里先将编译指令导入构建规则,暂不引入自动拉取 Git 仓库的内容,以确保我们编写的构建规则准确可用。
由于不建议在构建规则中执行过多 tar指令,因此我这里在构建目录下同时开启两个 Shell 窗口,分别用于玲珑容器操作和普通操作。
以下是正式开始改造的过程:
通过普通操作窗口使用 git 将 qBittorrent 和 libtorrent-rasterbar 源码拉取或解压到构建目录中,我这里通过源码压缩包单独解压到子目录中:
ziggy@linyaps23:/media/szbt/Data/ll-build/QT/qBittorrent-local$ tar -xvf qBittorrent-4.6.7-git-origin-src.tar.zst -C src/ ziggy@linyaps23:/media/szbt/Data/ll-build/QT/qBittorrent-local$ tar -xvf libtorrent-rasterbar-2.0.9.tar.gz -C 3rd/
从玲珑应用目录结构规范得知, 构建目录会被映射为 /project,,因此我们需要将上节课程中使用的手动编译命令写入 build 模块中。
build: | mkdir -p ${PREFIX}/bin/ ${PREFIX}/share/ ##Build 3rd libs 注释:进入 `libtorrent-rasterbar` 源码目录并编译安装到容器内 mkdir /project/3rd/libtorrent-rasterbar-2.0.9/build cd /project/3rd/libtorrent-rasterbar-2.0.9/build cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PREFIX .. make -j$(nproc) make install ##Build main 注释:进入 `qBittorrent` 源码目录并编译安装到容器内 mkdir /project/src/qBittorrent-release-4.6.7-szbt2/build cd /project/src/qBittorrent-release-4.6.7-szbt2/build cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PREFIX .. make -j$(nproc) make install ##Extract common res 注释: 将通用文件复制安装到容器对应目录内, 符合 `玲珑应用目录结构规范` cp -rf /project/template_app/* ${PREFIX}/share/
在将此块构建规则补全后,我们可以开始尝试通过自动化构建来将本地源码编译为二进制程序并导出玲珑应用安装包 binary.layer 了。
注:由于此版配置文件不提供解压、删除功能,因此每次重新构建前均需要将这些目录清空并重新解压。
2.2 本地一站构建测试
在补全 build 模块后, 此时的 linglong.yaml 状态:
# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. # # SPDX-License-Identifier: LGPL-3.0-or-later version: "2" package: id: org.qbittorrent.qBittorrent name: "qBittorrent" version: 4.6.7.2 kind: app description: | qBittorrent binary base: org.deepin.foundation/23.0.0 runtime: org.deepin.Runtime/23.0.1 command: - /opt/apps/org.qbittorrent.qBittorrent/files/bin/qbittorrent source: - kind: local name: "qBittorrent" build: | ##Build 3rd libs mkdir -p ${PREFIX}/bin/ ${PREFIX}/share/ mkdir /project/3rd/libtorrent-rasterbar-2.0.9/build cd /project/3rd/libtorrent-rasterbar-2.0.9/build cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PREFIX .. make -j$(nproc) make install ##Build main mkdir /project/src/qBittorrent-release-4.6.7-szbt2/build cd /project/src/qBittorrent-release-4.6.7-szbt2/build cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PREFIX .. make -j$(nproc) make install ##Extract common res cp -rf /project/template_app/* ${PREFIX}/share/
此刻我们可以返回构建目录,开始构建测试了,执行:
ziggy@linyaps23:/media/szbt/Data/ll-build/QT/qBittorrent-local$ ll-builder build -v
得益于在玲珑容器中的编译笔记,此次构建很快就成功结束了,我们执行以下指令来将容器导出为玲珑应用安装包 binary.layer:
ziggy@linyaps23:/media/szbt/Data/ll-build/QT/qBittorrent-local$ ll-builder export --layer
03本地构建结果测试
在得到玲珑应用安装包后,可以在不同支持玲珑环境的主流发行版上尝试体验,来确认通过玲珑容器构建的二进制程序是否存在通用性。
deepin 23
openKylin 2.0
Ubuntu 2404
OpenEuler 2403
由此可见,基于 Qt5 的开源应用--qBittorrent 构建完成后,在支持如意玲珑应用方案的第三方发行版中可以成功运行!本教程至此结束,欢迎大家上手体验!
关于项目
如意玲珑(Linyaps)是一种新型的独立包管理工具集,专注于解决 Linux 系统下由传统软件包格式的复杂性和交叉依赖关系引起的兼容性问题。项目通过先进的隔离技术,将应用与系统完全解耦,从根本上解决因环境变化引发的应用兼容性问题,实现“一个架构,一次构建”,致力于简化软件开发流程、降低维护成本、加强数据安全,促进技术与平台间的协同合作,构建一个更加繁荣、安全和高效的 Linux 软件生态环境。
-
开源
+关注
关注
3文章
3759浏览量
44053 -
容器
+关注
关注
0文章
513浏览量
22525 -
代码
+关注
关注
30文章
4906浏览量
71126 -
编译
+关注
关注
0文章
680浏览量
34263
原文标题:如意玲珑应用构建指南(三):如意玲珑应用构建规则实用案例
文章出处:【微信号:linux_deepin,微信公众号:深度操作系统】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
安谋中国“玲珑”i3/i5 系列详解及定位

【NanoPi M1试用体验】开箱评测 小巧玲珑
###神轰%>小巧玲珑眼睛红,地上蹦跳自家园。Fanny 范妮
(:小巧玲珑眼睛红,地上蹦跳自家园
推理规则链的确定性构建
玲珑ISP处理器的主要技术特点
ARM中国发布首款ISP玲珑监控系统
ARM中国发布 “玲珑”ISP处理器
安谋科技发布“玲珑”DPU和新一代VPU
如意玲珑应用构建的基础知识

评论