【deepin 邀您体验】玲珑 10 分钟快速构建指南!

玲珑

作为一种新型的独立包管理工具集,玲珑主要提供分层与隔离的运行环境,解决传统包管理系统强依赖导致的兼容性问题,以及权限松散导致的安全问题。当前,玲珑已支持 4 个发行版,包括 deepin、统信 UOS 以及 Debian 和 Ubuntu。玲珑的隔离技术可以将应用与系统进行完全解耦,从而彻底解决系统与应用、应用与应用之间因升级和适配引起的兼容性冲突等问题。这对开发者而言,可以有效降低开发成本;对客户而言,能够降低企业运维成本;而对整个行业而言,将助力行业稳健发展。

安装玲珑

此文将为大家介绍 UOS 1070deepin V23 玲珑安装。

备注:此文档适用于 1.5.0, 请使用 ll-cli --version 检查您的玲珑程序版本。

玲珑由三部分组成:

  • ll-builder 用来构建和调试玲珑应用,由 linglong-builder 提供;
    ll-box 沙箱容器,由 linglong-box 提供;
    ll-cli 管理和运行玲珑应用,由 linglong-bin 提供。

1、UOS 1070

目前支持 amd64、arm64、loongarch64(龙芯旧世界)架构。

1)添加玲珑仓库源

echo "deb [trusted=yes] https://ci.deepin.com/repo/deepin/deepin-community/linglong-repo/ unstable main" | sudo tee -a /etc/apt/sources.list

2)安装玲珑构建工具包

sudo apt update

sudo apt install linglong-builder linglong-box linglong-bin

2、deepin V23

目前支持 amd64、arm64 架构。

sudo apt install linglong-builder linglong-box linglong-bin

安装 pica 工具

本工具目前提供 deb 包转换为玲珑包的能力,生成构建玲珑应用需要的 linglong.yaml 文件,并依赖 ll-builder 来实现应用构建和导出。

1、UOS 1070

目前支持 amd64、arm64 架构。

根据玲珑安装步骤,添加玲珑仓库源

sudo apt install linglong-pica

2、deepin V23

目前支持 amd64、arm64 架构。

sudo apt install linglong-pica

邀您体验 10 分钟快速构建

访问玲珑官网(首页 | 玲珑)获取10分钟快速构建指南。

1、从零构建示例

以 deepin-calculator 作为从源码构建玲珑应用的例子。玲珑应用的 appid 需要使用倒置域名的方式命名。

1)创建

mkdir org.deepin.calculator

目录下创建 linglong.yaml 文件

touch org.deepin.calculator/linglong.yaml

进入目录

cd org.deepin.calculator

使用文本编辑器编辑 linglong.yaml

linglong.yaml 文件遵循 yaml 语法规范。

2)构建

ll-builder build

等待玲珑应用构建完成。

3)运行玲珑应用

ll-builder run

ll-builder run 运行成功输出如下:

为了便于调试,可以使用额外的 --exec /bin/bash 参数,替换进入容器后默认执行的程序,如:

ll-builder run --exec /bin/bash

2、转换 deb 应用

以百度网盘为例,介绍将 deb 包转为玲珑包的过程。目前只支持转换遵循应用商店打包规范的软件。

1)获取 deb 包文件

apt download com.baidu.baidunetdisk

2)转换应用

ll-pica convert -c com.baidu.baidunetdisk_4.17.7_amd64.deb -w work -b

进入目录

cd work/package/com.baidu.baidunetdisk/amd64

3)安装 layer 文件

ll-cli install ./com.baidu.baidunetdisk_4.17.7.0_x86_64_runtime.layer

4)运行应用

ll-cli run com.baidu.baidunetdisk

常见问题

1、常见构建问题

1)cmake 类型构建,出现 -lxxx 失败,但 ldconfig 与 pkg-config 均能查询到该库信息。

链接库路径不在常规路径,新路径为 /runtime/lib。

添加环境变量 LIBRARY_PATH=<libpath>,目前构建环境已默认包含该环境变量。

2)构建时 link 静态库失败,要求重新使用 fPIC 构建。

构建静态库时使用 -fPIC 参数。

3)构建时启动 box 失败,如下图:

内核不支持 unprivilege namespace,开启 unprivilege namespace 解决。

sudo sysctl -w kernel.unprivileged_userns_clone=1

4)qtbase 构建成功,但无法构建 qt 应用,提示 module,mkspec 相关错误。

低版本 fuse-overlay mount 存在问题,导致 qtbase commit 时文件内容被污染 ,无法正常使用。使用 fuse-overlayfs >= 1.7 版本。

2、常见运行问题

1)应用运行读取 /usr/share 下应用安装资源文件,为什么读取失败?

玲珑应用是在容器环境中运行,应用数据会挂载到 /opt/apps/<appid>/下。/usr/share 目录只会存在系统数据,不会存在应用相关数据。因此直接读取 /usr/share 会失败。

建议:采用 XDG_DATA_DIRS 环境变量读取资源,/opt/apps/<appid>/files/share 会存在此环境变量搜索路径中。

2)应用运行时找不到字体库文件?为什么 deb 包安装时能读取到对应的字体库?

deb 包安装时,会依赖带入对应的字体库文件。而玲珑包格式采用自给自足打包格式。

除了基本的系统库、runtime 里面提供的 Qt 库与 DTK 库文件不用自己提供,其他依赖数据文件,均需自己提供。

建议:对应的数据文件放入 files/share,采用环境变量 XDG_DATA_DIRS 读取路径。

3)玲珑应用 runtime 里面有什么?能不能往里面添加一些库文件进去?

目前玲珑应用依赖的 runtime 里面提供的是 Qt 库与 DTK 库。因 runtime 有严格的大小限制,目前不允许往 runtime 里面添加额外的库文件。

4)应用在容器内运行,运行过程中是否能往容器任意路径下创建配置文件?

可以在 XDG_CONFIG_HOME 下创建配置文件。

5)应用数据保存到哪里?在容器外哪里能找到?

因玲珑应用遵循互不干涉的原则。

XDG_DATA_HOME、

XDG_CONFIG_HOME、

XDG_CACHE_HOME

环境变量被定义到宿主机 ~/.linglong/<appid>/ 对应的路径下,因此用户应用数据会保存在此路径下。应用运行过程中写入数据,也应该读取对应的环境变量写入数据。禁止读写其它应用的配置。

6)应用提供了 dbus service 文件,如何放置?Exec 段写什么?

应用提供  dbus service 文件时,需要放到 entries/dbus-1/services 目录下。如果 Exec 执行玲珑包内二进制,使用 --exec 选项参数执行对应的二进制。

7)应用安装后,启动器无法找到?

TryExec=xxx, 当 xxx 在 $PATH 路径中不存在时,会认为该应用不存在不予显示。

8)为什么图标显示为小黑点?

desktop 写了 Icon 字段,Icon 字段名称不对或者使用绝对路径。

9)为什么图标显示为齿轮?

desktop 未提供 Icon 字段。

10)图标存放在哪个路径?

svg →$PREFIX/share/icons/hicolor/scalable/apps/

其他格式按分辨率存放,如16X16

png/xpm → $PREFIX/share/icons/hicolor/16X16/apps/

11)应用自带的 xdg-open、xdg-email 为什么失效?

runtime 中玲珑特殊处理了 xdg-open、xdg-email,因此应用禁止执行自己携带的 xdg-open、xdg-email 可执行文件或者脚本。

12)应用使用系统环境变量未生效,为什么?

当使用环境变量时,需要确认容器内是否存在对应的环境变量。如果没有,需要联系玲珑团队处理。

13)应用运行需要的库文件没找到,如何提供?

应用需要使用的资源文件,与库文件需要应用自身提供。库文件放到 $PREFIX/lib 路径下。

14)应用运行时,为什么 Qt WebEngine 渲染进程崩溃?

因系统升级了 glibc,导致应用使用内置浏览器时失败,需要应用重新适配。

临时解决方案是设置环境变量:

export QTWEBENGINE_DISABLE_SANDBOX=1。

15)应用运行时,找不到 libqxcb.so 库或者 qtwebengine 报错?

存在 qt.conf 文件时,在文件中配置正确路径,或者使用

QTWEBENGINEPROCESS_PATH、

QTWEBENGINE_RESOURCES_PATH、

QT_QPA_PLATFORM_PLUGIN_PATH、

QT_PLUGIN_PATH 环境变量配置搜索路径。

16)应用能否自己携带数据库文件,并在运行中往数据库中写入数据?

容器内文件系统是只读文件系统,不允许往应用资源文件中写入数据。

17)为什么执行携带 suid、guid 权限二进制失效?

玲珑容器为保证系统安全,容器内禁止执行此类权限二进制。

18)uab 离线包格式在 Debian、Ubuntu 下输入法无法使用?

建议安装 fictx 输入法后体验。

19)怎么知道容器环境中安装了哪些包?

ll-builder run --exec bash 进入容器环境,使用 cat /var/lib/dpkg/status | grep "^Package: " 命令查看预装的软件包,另外源码编译的库可以使用 cat /runtime/packages.list 查看。

扫描下方二维码加入玲珑社群:

附录:

deepin V23 RC 镜像:最新版本 – 深度科技社区

deepin 历史版本镜像(含 deepin V15):DistroWatch.com: Put the fun back into computing. Use Linux, BSD.

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

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

相关文章

golang 中的复合类型

前言 所有的api文档都可以使用bash命令 go doc 查看文档的帮助信息 从 Go 1.13 开始&#xff0c;godoc 不再随 Go 发行版一起安装&#xff0c;你需要单独安装它。 需要单独安装 1. go install golang.org/x/tools/cmd/godoclatest 2执行命令 godoc -http:1111 打开浏览器 http:…

MDK(μVsion3)问题总结及解决方法

问题 1&#xff1a;MDK 工具的 CARM 编译器&#xff1f; 我原来对 CARM 编译器比较熟悉&#xff0c;想用 CARM 编译器编译工程&#xff0c;但是却弹出一个不能执 行“cc”的错误&#xff0c;到 KEIL 网站查下才知道原因&#xff1a;由于 CARM 编译器是比较老的编译器&#xff0…

java之基础2笔记

1 类型转换 1.1 自动类型转换&#xff08;隐式类型转换&#xff09; 从小的数据类型到大的数据类型的转换&#xff08;如 int 到 long&#xff09;。 从低精度的数据类型到高精度的数据类型的转换&#xff08;如 float 到 double&#xff09;。 1.2 强制类型转换&#xff0…

什么是接地电阻柜呢?

接地电阻柜是一种用于保护电气设备和人身安全的设备&#xff0c;它可以有效地防止电气设备因接地故障而受到损害。 接地电阻柜的主要作用是将电气设备的接地电阻降低到安全范围内&#xff0c;以防止接地故障引起的火灾、爆炸等事故。接地电阻柜通常由接地电阻、接地母线、接地开…

pytest中钩子函数的使用

收集测试结果&#xff1a; 2. pytest_terminal_summary(terminalreporter, exitstatus,config) 在测试执行完毕后&#xff0c;用于生成并显示最终的测试摘要信息到终端&#xff0c;你可以实现自定义的测试报告汇总和显示。 例如&#xff1a;你可以在此钩子函数中计算测试用例…

TypeScript基础语法和使用规则+对象初始化

TypeScript (TS) 是一种由微软开发的开源语言&#xff0c;它是 JavaScript 的一个超集&#xff0c;添加了可选的静态类型和基于类的面向对象编程。它旨在开发大型应用程序并将 JavaScript 编译成清晰和简洁的代码。 一、基础语法和使用规则 1. 类型注解 类型注解是 TypeScri…

关于Apache Tomcat请求走私漏洞(CVE-2023-46589)

一、 基本情况 Apache Tomcat是一个流行的开源Web服务器和Java Servlet容器。 二、 漏洞描述 Apache Tomcat中修复了一个请求走私漏洞&#xff08;CVE-2023-46589&#xff09;。 由于Tomcat未能正确解析HTTP Trailer标头&#xff0c;超出标头大小限制的特制Trailer标头可能…

儿童护眼灯哪个好?带你了解适合儿童的护眼灯款式分享

儿童护眼灯哪个好&#xff1f;作为我们日常生活中极为实用的小家电&#xff0c;为了确保使用台灯时的舒适性并且保护视力&#xff0c;选择一款专业的护眼台灯成为了一个明智的决定。这样的台灯能够提供更舒适、均匀的照明环境&#xff0c;那么到底儿童护眼灯哪个好你&#xff1…

实现手机空号过滤或手机号码有效性验证

手机空号过滤或手机号码有效性验证通常涉及使用专门的API接口来查询手机号码的状态。这些API接口通常由第三方服务提供商提供&#xff0c;它们会与电信运营商合作或利用自己的数据库来验证手机号码是否真实存在、是否已被分配、是否处于空号状态等。 以下是一些步骤和考虑因素…

关于我做了一个python项目的总结

前言: 首先,我通过python的爬虫技术做了一个关于音乐的项目,实现的功能有搜索音乐,输出歌词,保存歌词,下载音乐 项目构思: 在刚开始时,首先是构思,构思自己要去做哪个方面的,并且要怎么去实现我想实现的功能,然后我就想到要去做一个关于音乐方面的 项目实现: 确定了自己的方向…

爬虫——有道云翻译

废话不多说直接上代码 固定文本内容 import timefrom selenium import webdriver from selenium.common.exceptions import NoSuchElementException, TimeoutException from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWai…

Day 41 NGINX详解

Nginx详解 一、HTTP协议 HTTP协议是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写,是用于从万维网&#xff08;WWW:World Wide Web &#xff09;服务器传输超文本到本地浏览器的传送协议。 1、HTTP 工作原理 HTTP协议通信流程 WEB Server&…

超维小课堂 | 6、MAVROS与机载电脑Jetson nano通信

MAVROS与机载电脑Jetson nano通信 ROS系统镜像——Jetson nano b01 4G 链接: 百度云镜像链接 链接&#xff1a;https://pan.baidu.com/s/1NoIEvVdsiYLPvVOWM98hjQ 提取码&#xff1a;cwkj 简介&#xff1a;MAVROS和Jetson nano通信&#xff0c;设置飞控参数和MAVROS文件&am…

Starlette

Starlette是一个轻量级的ASGI框架和工具包&#xff0c;主要用于构建高性能的asyncio服务。它具备以下特点&#xff1a; 轻量级HTTP Web框架&#xff1a;Starlette提供了一个简单且复杂度低的HTTP Web框架。WebSocket支持&#xff1a;允许在应用中实现WebSocket功能。后台任务&…

程序猿大战Python——了解Python

了解Python 编程语言的发展 目标&#xff1a;了解编程语言。 我们知道&#xff0c;咱们的日常沟通交流使用的语言&#xff1a;普通话。 那什么是编程语言呢&#xff1f; 【官方解释】编程语言是用来定义程序的语言形式&#xff0c;也就是说&#xff0c;我们可以通过编程语言…

学习使用js监测浏览器窗口大小变化

学习使用js监测浏览器窗口大小变化 在JavaScript中&#xff0c;可以通过监听resize事件来检测浏览器窗口的大小变化。以下是一个简单的示例代码&#xff0c;用于检测浏览器窗口大小的变化并在控制台输出新的窗口尺寸&#xff1a; javascript // 定义一个处理窗口大小变化的函数…

el-table后台接口返回数据动态合并单元格

在实际工作中&#xff0c;通常数据都是后台接口返回的&#xff0c;有时需要对数据进行合并&#xff0c;可利用el-table的span-method方法&#xff0c;结合数据处理&#xff0c;进行合并&#xff0c;如下实例 <el-table :data"dataTable"borderrow-key"id&qu…

root账号,cmd命令行能用ssh连上服务器,但是vscode连接报错Permission denied,please try again

☆ 问题描述 但是cmd能连接上 ★ 解决方案 点击 然后add到自己的配置文件下 重新选择 这个时候就会出现刚刚添加的&#xff0c;点击选择 输入密码 然后就ok了 ✅ 总结 只能说&#xff1a;玄学&#xff01;

剪画小程序:自媒体必备神器:【视频翻译】自动识别语言、翻译、配音,让外语视频秒变母语!

Hello&#xff0c;大家好呀&#xff01;我是不会画画的小画~ 今天给大家带来一款敲实用的视频翻译工具一一 小程序【剪画】 我们有很小伙伴在学习他国语言时&#xff0c;最大的障碍就是语言的问题了&#xff0c;想要 理解其中的内容&#xff0c;在这之前要下很大的功夫去掌握…

创业新风口:智能售货机的崛起

随着科技的飞速发展&#xff0c;智能售货机已经不再是简单的自动贩卖机&#xff0c;它们变得更加智能、灵活&#xff0c;能够适应各种场景需求&#xff0c;从传统的饮料、零食到新鲜水果、便当、甚至是电子产品&#xff0c;无所不包。这种24小时无人值守的商业模式&#xff0c;…