【deepin 产品面对面】玲珑入门教程:从源代码开始构建玲珑格式应用

news2024/11/15 13:40:42

内容来源:deepin(深度)社区


请首先阅读玲珑官方文档 ll-builder 简介 | 玲珑,本文以构建 desktop-entry-editor 为例,该项目依赖较为简单,仅需玲珑官方文档中默认提供的基础运行环境即可成功构建运行。

第一步:前期准备

在终端中执行

sudo apt install linglong-builder --no-install-recommends

安装 ll-builder 工具

1.png

由于推荐安装依赖较多,此处跳过推荐依赖不进行安装。如有需要,去除命令中 --no-install-recommends 参数即可

第二步:创建项目

由于需要从源代码构建玲珑格式应用,故可以跳过 ll-builder create 操作,无需创建玲珑对应文件夹,直接在工程源代码顶层目录编写 linglong.yaml 文件即可(可使用官网提供的完整的 模板文件 )。

第三步:编辑 Linglong.yaml

version: "1"                            # linglong.yaml 文件语法的版本

package:                                # 软件包元信息配置
id: com.github.desktop-entry-editor     # 软件包 appid,类似 deb 格式软件包包名,区分不同玲珑格式软件包
name: desktop-entry-editor              # 应用名称
version: 1.4.6.1                        # 软件包版本
kind: app                               # 软件包类型,多数应用为 app,基础环境和运行时为 runtime
description: |                          # 软件包描述
   desktop entry editor for deepin os.

command:                                # 容器内可执行程序启动命令
 - /opt/apps/com.github.desktop-entry-editor/files/bin/desktop-entey-editor

base: org.deepin.foundation/23.0.0      # 基础环境
runtime: org.deepin.Runtime/23.0.1      # 运行时

source:                                 # 构建来源
 kind: local                           # 由于直接在工程源代码中构建,此处选择 local 即可,无需从 git 仓库拉取代码

build: |                                # 构建
 rm -rf build-linglong
 mkdir -p build-linglong

 qmake BUILD_VERSION=1.4.6 \
       PREFIX=${PREFIX} \
       LIB_INSTALL_DIR=${PREFIX}/lib/${TRIPLET} \
       INSTALL_ROOT=${PREFIX} \
       -spec linux-g++ CONFIG+=qtquickcompiler \
       -o build-linglong \
       desktop-entry-editor.pro

 make -C build-linglong -j$(nproc)
 make -C build-linglong -j$(nproc) install

以此 linglong.yaml 为例,软件包元信息按需填写即可。

  • 由于项目较为简单,仅需要基础的 Qt 和 Dtk 环境即可构建,使用模板文件中所示的 base 和 runtime 即可。更复杂的构建环境可参考构建 计算器,在构建应用前拉取所需依赖代码,优先构建所需依赖。

理解安装位置 “前缀”

以我们所熟知的方式来理解,一般可执行文件需要放到 /usr/bin 文件夹下,在终端尝试执行时才能被找到;.desktop 文件提供了启动的入口,想在启动器中看到应用图标,一般放到 /usr/share/applications 文件夹下;而图片文件会放到 /usr/share/icons 文件夹中具体的图标主题及尺寸和分类文件夹下。这其中,/usr 就是所有文件安装位置的 前缀

根据 GNU 编码标准,前缀 的默认值一般为 /usr/local;而构建 deb 格式软件包时,一般会使用 /usr 前缀。

而玲珑容器启动时,会将容器内容 files 文件夹 挂载至 /opt/apps/${appid} 文件夹下,故可以近似认为 前缀 为 /opt/apps/${appid}/files。以此类推,可执行文件的实际位置为 /opt/apps/${appid}/files/bin/可执行文件名称,所以 linglong.yaml 中 command 启动指令部分也需要如此填写,而不是常见的 /usr/bin/可执行文件名称

检查修改工程源代码

理解了 前缀 的概念,就要检查工程源代码的安装位置前缀了。qmake 工程中,默认安装位置前缀一般为 /opt/$${TARGET} 文件夹,如可执行文件就被放在 /opt/$${TARGET}/bin 文件夹中。此处可能需要修改 .pro 文件,将前缀修改为 /opt/apps/${appid}/files 文件夹,保证玲珑容器启动后文件位置正确。

或者如构建 计算器 所示,通过 qmake 参数从外部传入安装位置前缀,并在 .pro 文件中解析 ${PREFIX} 以实现控制文件安装位置。

第四步:构建应用

在工程源代码顶层目录(linglong.yaml 同级目录)打开终端,执行 ll-builder build 命令即可。

2.png

3.png

首次构建时需下载指定的 base 和 runtime,耗时较长,需要耐心等待。

第五步:测试运行应用

在工程源代码顶层目录(linglong.yaml 同级目录)打开终端,执行 ll-builder run --exec 可执行程序名称,可测试在玲珑容器环境内启动应用。

4.png

若找不到可执行程序,请检查工程源代码中文件安装位置是否正确。可查看工程顶层目录下 linglong/output/runtime/files/bin 文件夹中是否生成可执行文件。

若启动应用失败,参考 文档 在容器内进行调试。

第六步:导出 layer 文件

在工程源代码顶层目录(linglong.yaml 同级目录)打开终端,执行 ll-builder export 命令,即可在目录中生成 ${appid}_${version}_${arch}_develop.layer 和 ${appid}_${version}_${arch}runtime.layer 文件。

5.png

第七步:测试安装 layer 文件

在工程源代码顶层目录(linglong.yaml 同级目录)打开终端,输入 ll-cli install 并输入空格分隔后,将文件夹中的 runtime.layer 文件拖入终端,按回车执行,将 layer 文件安装至本地玲珑环境中。

6.png

安装成功后,应该可以在启动器中看到该应用,并进行启动和使用测试。

7.png

若启动器中无法找到该应用,请检查工程源代码中文件安装位置是否正确。可查看工程顶层目录下 linglong/output/runtime/entries/share/applications 文件夹中是否生成 .desktop 文件。

若存在启动失败情况,可查看对应 .desktop 文件并复制 Exec 字段内容至终端中执行,观察启动输出日志。若提示缺少玲珑对应版本的 base 或 runtime 环境,需手动执行 ll-cli install 环境名称/版本号 进行安装以排除故障(e.g. ll-cli install org.deepin.Runtime/23.0.1)。

至此,从源代码构建玲珑格式应用已完成。

本文举例的项目使用 qmake 构建,依赖简单,且支持构建时外部传入 ${PREFIX} 设置文件安装位置,构建为玲珑格式应用非常简单。若项目使用 cmake 或其他工具构建,同理需在工程内修改安装前缀,或在 linglong.yaml 构建部分传入参数进行设置,否则即使构建成功,也会出现容器内无法找到可执行文件,或安装后启动器没有图标等各种问题。

关于【产品面对面】

【产品面对面】 deepin 社区 2024 年 5 月新推出的专题栏目,在本栏目中,我们将会邀请不同产品的产品经理来跟大家分享交流好玩好用的 deepin 或 Linux 相关应用,产品经理们也会在 deepin 论坛与所有用户进行交流答疑。今天分享的文章来自 deepin 社区应用产品经理,同时也是 deepin 社区的论坛用户【yicold】,希望大家持续关注 deepin 论坛专栏活动【产品面对面】。

附录:

1)玲珑官方文档:https://linglong.dev/guide/ll-builder/introduction.html

2)deepin 系统历史版本镜像获取(含 deepin V15):https://distrowatch.com/index.php?distribution=deepin

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1814080.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

web基础htTP协议

web基础 域名概述: 域名空间结构 网页的概念 HTML概述 DNS解析的三种方式 /etc/hosts 在Linux系统中,/etc/hosts 文件负责快速解析,它包含了IP地址与主机名的映射关系。在没有DNS服务器的情况下,可以使用本地/etc/hosts 文件完成…

用户管理与服务器远程管理

用户管理 服务器系统版本介绍 windows服务器系统:win2000 win2003 win2008 win2012 linux服务器系统:Redhat Centos 用户管理 用户概述 (1)每一个用户登录系统后,拥有不同的操作权限。 (2)…

【实例分享】访问后端服务超时,银河麒麟服务器操作系统分析及处理建议

1.服务器环境以及配置 【机型】 处理器: Intel 32核 内存: 128G 整机类型/架构: x86_64虚拟机 【内核版本】 4.19.90-25.22.v2101.kylin.x86_64 【OS镜像版本】 kylin server V10 SP2 【第三方软件】 开阳k8s 2.问题现象描述 …

三十二、 数据跨境传输场景下的 PIA 与数据出境风险自评估是一回事吗?

PIA 与数据出境风险自评估并不相同。PIA 是《个人信息保护法》第五十五条明确提出要求企业在向境外提供个人信息前应当开展的自评估工作,而数据出境风险自评估则是《评估办法》第五条提出的要求符合数据出境安全评估申报情形的企业在申报前应当开展的自评估工作。 换…

使用 SPICE 模型模拟 MOSFET 电流-电压特性

绘制漏极电流与漏极电压的关系图 我们首先绘制漏极电流 ( I D ) 与漏源电压 ( V DS ) 的基本图。为此,我们将栅极电压设置为远高于阈值电压的固定值,然后执行直流扫描模拟,其中V DD的值逐渐增加。图 1 显示了我们将使用的原理图。 LTspice N…

❎35岁程序员,转行了么?

新职业 在Boss直聘、智联等招聘网站中,您是否遇见过这样的职位邀请?它的名字叫做LORA模型训练师。 从图上我们可以看出其需要的技能大致是下面的样子: Stable Diffusion: 机器学习、神经网络、模型训练的知识;Lora: 训练Lora模型…

css系列:音频播放效果-波纹律动

介绍 语音播放的律动效果,通俗来说就是一个带动画的特殊样式的进度条,播放的部分带有上下律动的动画,未播放的部分是普通的灰色竖状条。 实现中夹带了less变量、继承和循环遍历,可以顺带学习一下。 结果展示 大致效果如图所示…

在调用接口上map与forEach的区别

在场景:一个表格数据需要上传,每行表格需要上传图片->这就需要在提交时对数据也就是数组进行处理(先将每个元素图片上传拿到图片id 这种情况我刚开始就用的map处理,然后问题来了,提交的接口调用了,但是…

linux搭建harbor镜像仓库

安装docker-compose:安装docker-compose_安装 docker-compose-CSDN博客 安装harbor,我安装的是v2.4.3 #下载安装包 wget https://github.com/goharbor/harbor/releases/download/v2.4.3/harbor-offline-installer-v2.4.3.tgz#解压 tar -zxvf harbor-off…

【Python】selenium的异常类selenium.common.exceptions的汇总

我们在使用selenium爬虫的过程中,可能会遇到各种报错,例如: 这些报错是selenium.common.exceptions 是 Selenium WebDriver 库中的一个模块,它包含了 WebDriver 操作中可能遇到的各种异常类。这些异常类帮助开发者在自动化测试过…

Nodejs 第七十七章(MQ高级)

MQ介绍和基本使用在75章介绍过了,不再重复 MQ高级用法-延时消息 什么是延时消息? Producer 将消息发送到 MQ 服务端,但并不期望这条消息立马投递,而是延迟一定时间后才投递到 Consumer 进行消费,该消息即延时消息 插件安装 R…

el-tree回显复选框时半选中和全选中的树

项目需求如下:当我点击“编辑”后,需要在tree树上全勾中和半勾中选项,由于后端接口返回的tree树是含了父级节点id的数组集合,所以我们回显时需要处理好这个全勾中和半勾中的问题。 主要思路如下,我们通过setData方法获…

服务器数据恢复—热备盘未完全启用导致raid5阵列崩溃的数据恢复案例

服务器存储故障: 一台EMC某型号存储由于存储中raid5阵列出现故障导致服务器崩溃,由于数据涉密,需要工程师到现场恢复数据。 服务器数据恢复工程师到现场后对数据进行检测,经过检测发现服务器崩溃是由于raid中某些硬盘掉线所导致。…

【深度学习】数竹签演示软件系统

往期文章列表: 【YOLO深度学习系列】图像分类、物体检测、实例分割、物体追踪、姿态估计、定向边框检测演示系统【含源码】 【深度学习】物体检测/实例分割/物体追踪/姿态估计/定向边框/图像分类检测演示系统【含源码】 【深度学习】YOLOV8数据标注及模型训练方法整…

meilisearch的Managing API keys,自己趟过的坑

Elasticsearch 做为老牌搜索引擎,功能基本满足,但复杂,重量级,适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求,极快,单文件,超轻量。 所以,对于中小型项目来说…

电商比价系统的搭建需要哪些方面着手准备?

搭建一个淘宝/京东比价系统所需的时间取决于多个因素,包括但不限于系统的复杂度、开发团队的规模与经验、数据源获取的难易程度、技术选型等。以下是一个大致的时间估计和考虑因素: 需求分析与设计: 确定系统的主要功能,如商品搜…

Python基于 GPU 的机器学习算法库之cuml使用详解

概要 在大数据和机器学习的时代,高效的数据处理和模型训练变得尤为重要。传统的 CPU 计算方式在处理大规模数据时往往显得力不从心,而 GPU 的并行计算能力为此提供了一种解决方案。cuml 是 RAPIDS AI 项目的一部分,它提供了一组基于 GPU 的机器学习算法,能够极大地提升数据…

【数据结构与算法】哈夫曼树与哈夫曼编码

文章目录 哈夫曼树(最优二叉树)定义举个🌰(WPL的计算) 哈夫曼树的构造(最优二叉树的构造)举个🌰 哈夫曼编码定义构造 哈夫曼树(最优二叉树) 在介绍哈夫曼树之…

中间件复习之-分布式存储系统

单机存储系统介绍 存储引擎:存储系统的发动机,提供数据的增、删、改、查能力,直接决定存储系统的功能(支持怎么样的查询,锁能锁到什么程度)和性能(增删改查速度)。 性能因素 写入方…

1939springboot VUE 高等院校求职信息管理系统开发mysql数据库web结构java编程计算机网页源码maven项目前后端分离

一、源码特点 springboot VUE高等院校信息(求职)管理系统是一套完善的完整信息管理类型系统 前后端分离,结合springboot框架和VUE完成本系统,对理解vue java编程开发语言有帮助系统采用springboot框架(MVC模式开发&a…