0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如意玲珑应用构建规则实用案例

深度操作系统 ? 来源:深度操作系统 ? 2025-03-25 11:17 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

通过《如意玲珑应用构建指南(二):在玲珑容器中编译基于 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

ff546e0a-063b-11f0-9310-92fbcf53809c.png

openKylin 2.0

ff6595cc-063b-11f0-9310-92fbcf53809c.png

Ubuntu 2404

ff93a750-063b-11f0-9310-92fbcf53809c.png

OpenEuler 2403

ffb24552-063b-11f0-9310-92fbcf53809c.png

由此可见,基于 Qt5 的开源应用--qBittorrent 构建完成后,在支持如意玲珑应用方案的第三方发行版中可以成功运行!本教程至此结束,欢迎大家上手体验!

关于项目

如意玲珑(Linyaps)是一种新型的独立包管理工具集,专注于解决 Linux 系统下由传统软件包格式的复杂性和交叉依赖关系引起的兼容性问题。项目通过先进的隔离技术,将应用与系统完全解耦,从根本上解决因环境变化引发的应用兼容性问题,实现“一个架构,一次构建”,致力于简化软件开发流程、降低维护成本、加强数据安全,促进技术与平台间的协同合作,构建一个更加繁荣、安全和高效的 Linux 软件生态环境。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开源
    +关注

    关注

    3

    文章

    3759

    浏览量

    44053
  • 容器
    +关注

    关注

    0

    文章

    513

    浏览量

    22525
  • 代码
    +关注

    关注

    30

    文章

    4906

    浏览量

    71126
  • 编译
    +关注

    关注

    0

    文章

    680

    浏览量

    34263

原文标题:如意玲珑应用构建指南(三):如意玲珑应用构建规则实用案例

文章出处:【微信号:linux_deepin,微信公众号:深度操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    安谋中国“玲珑”i3/i5 系列详解及定位

    无论是工业还是消费领域,随着AI的发展,ISP图像信号处理的应用越来与广泛、深入。近日,安谋中国发布了首款ISP处理器:玲珑i3/i5,其灵活可配置的设计和出色的动态效果得到业内众多厂家的青睐与合作
    的头像 发表于 12-07 14:58 ?3313次阅读
    安谋中国“<b class='flag-5'>玲珑</b>”i3/i5 系列详解及定位

    节日快乐万事如意

    祝论坛新老朋友新春佳节节日愉快,万事如意
    发表于 01-29 16:16

    【NanoPi M1试用体验】开箱评测 小巧玲珑

    `小巧玲珑真的很开心,竟然真的申请到了,感谢电子发烧友论坛;终于收到了期盼的NanoPi M1,出乎意料,真的很小巧:做工非常的好。`
    发表于 08-09 21:00

    ###神轰%>小巧玲珑眼睛红,地上蹦跳自家园。Fanny 范妮

    V+心【 7908-2588 】###神轰%>小巧玲珑眼睛红,地上蹦跳自家园。Fanny 范妮V+心【 7908-2588 】
    发表于 03-27 19:10

    (:小巧玲珑眼睛红,地上蹦跳自家园

    \/+芯【 7 9 0 8 - 2 5 8 8 】(:小巧玲珑眼睛红,地上蹦跳自家园\/+芯【 7 9 0 8 - 2 5 8 8 】
    发表于 03-27 19:12

    玲珑GUI在小熊派开发板上是怎样去移植的

    玲珑GUI是什么?玲珑GUI在小熊派开发板上是怎样去移植的?
    发表于 12-21 07:53

    推理规则链的确定性构建

    推理是人工智能领域研究的重点。推理过程一般是非确定的,会产生许多冗余的推理分支。本文针对专家系统中常用的产生式规则,提出了一种确定性构造推理链的方法。方法运用逻辑代数理论,首先确立了规则集与逻辑函数
    发表于 12-05 17:30 ?0次下载

    玲珑ISP处理器的主要技术特点

    今天,ARM中国(安谋中国)发布了全新的“玲珑”系列多媒体产品线,首款产品是ISP图像信号处理器,ARM中国本土团队历时2年多自主研发而来。
    的头像 发表于 12-04 09:05 ?2400次阅读

    ARM中国发布首款ISP玲珑监控系统

    今天,ARM中国(安谋中国)发布了全新的“玲珑”系列多媒体产品线,首款产品是ISP图像信号处理器,ARM中国本土团队历时2年多自主研发而来。
    的头像 发表于 12-04 10:29 ?2305次阅读

    ARM中国发布 “玲珑”ISP处理器

    继 周易、星辰、山海之后,安谋中国日前发布了第四条自主 IP 产品线 --玲珑多媒体产品线,其首款产品为 玲珑i3/i5 ISP 处理器。 据安谋中国产品研发常务副总裁刘澍介绍,二者之间存在着一定
    的头像 发表于 12-06 09:12 ?2132次阅读

    安谋科技发布“玲珑”DPU和新一代VPU

    安谋科技(中国)有限公司在自研技术道路上再迈坚实步伐,近日震撼发布首款“玲珑”系列DPU(数据处理单元)及新一代VPU(视频处理单元)。此次推出的“玲珑”D8/D6/D2显示处理器,以及“玲珑”V510/V710视频处理器,均源
    的头像 发表于 09-24 14:33 ?690次阅读

    如意玲珑社区2024年度工作总结

    2024年,如意玲珑社区在社区发展及软件生态建设领域迈出了坚实的步伐。作为开放原子开源基金会的孵化项目,在这一年里稳步推进各项工作,在多个关键层面取得了切实的成果。
    的头像 发表于 02-05 11:45 ?914次阅读
    <b class='flag-5'>如意</b><b class='flag-5'>玲珑</b>社区2024年度工作总结

    如意玲珑应用构建的基础知识

    在Linux生态中,软件包的分发与管理一直是开发者与用户关注的焦点。如意玲珑(Linyaps)作为一种新兴的容器化应用格式,凭借其轻量化、强隔离、跨发行版兼容等特性,正在为 Linux 应用生态注入新的活力。无论是开发者还是技术爱好者,掌握
    的头像 发表于 03-03 09:53 ?508次阅读
    <b class='flag-5'>如意</b><b class='flag-5'>玲珑</b>应用<b class='flag-5'>构建</b>的基础知识

    如何在玲珑容器中编译qBittorrent并测试运行

    通过《如意玲珑应用构建指南(一):规范体系与配置文件全解析》的学习后,相信大家已经对玲珑应用构建工程基础知识有了一定的了解。 在接下来的系列
    的头像 发表于 03-10 11:26 ?535次阅读
    如何在<b class='flag-5'>玲珑</b>容器中编译qBittorrent并测试运行

    如何将Linux安装包快速转成玲珑

    本篇将以 motrix 为例为大家展示如何将 Linux 安装包快速转成玲珑包。
    的头像 发表于 03-12 16:01 ?645次阅读
    如何将Linux安装包快速转成<b class='flag-5'>玲珑</b>包