[ Content contribution] 【教程】简单构建一个玲珑应用实例-Demo-htop
Tofloor
default avatar
neko
deepin
Ecological co-builder
Resources Team Moderator
2024-05-24 17:02
Author

以htop为例,实现一个简单的玲珑应用Demo

先创建一个linglong.yaml配置文件用于构建容器:
linglong.yaml:

version: "1" package: id: demo.htop.linyaps #ID name: demo.htop #包名 version: 3.3.0.0 #版本号 kind: app #应用类型 description: | 描述:这是一个Demo command: - RUN #执行你的二进制文件,建议自己创建一个RUN文件方便给应用配置环境变量 base: org.deepin.foundation/23.0.0 #runtime: org.deepin.Runtime/23.0.1 #该应用用不到qt库所以可以注释掉减少体积 build: | #把除了yaml、layer、linglong的其它文件复制到玲珑容器内部 cp -av $(ls -A | grep -vE '\.yaml$|Makefile$|.deb$|ld-test$|missing_lib.list$|\.layer$|^linglong$|^tmp$') $PREFIX; #将要执行的二进制文件放到本文件同级的bin目录下 #将二进制文件依赖的库放到本文件同级的lib目录下

然后我们再创建2个目录分别是bin和lib,现在目录结构如下

image.png

其中bin目录里面放我们要构建的二进制文件htop,lib目录里面放二进制文件所依赖的库文件,现在目录结构如下:

image.png

htop是哪里来的:
#假设当前目录为demo,即yaml配置文件所在的目录

cp /usr/bin/htop bin #复制系统的htop到demo/bin/目录

RUN文件:

#!/bin/bash export TERM=xterm-256color #设置所需的环境变量 htop #启动程序 #为什么创建RUN而不是执行在yaml里面启动htop? #因为yaml里面的command:只支持一个参数,这样就没办法配置环境变量,所以写个RUN文件作为桥梁。

lib目录里面的库文件:

image.png
这两个是htop所需要的库。
我们试试删除它用来看看会发生什么

image.png

#开始构建 ll-builder build

image.png

#尝试运行 ll-builder run

image.png

哦豁,报错了。提示找不到"libnl-3.so.200"库
现在怎么办?

#由于我们本地安装了htop说明本地已经具备了运行的库文件 #那么我们可以利用dpkg -S 查询这个库 dpkg -S libnl-3.so.200

image.png

然后我们复制到demo的lib目录

cp /lib/x86_64-linux-gnu/libnl-3.so.200 lib

现在结构如下,然后我们用这个方法把缺失的另一个库也补全,最终结果就是开始的那张图
image.png

现在我们尝试构建成玲珑包并运行看看

ll-builder build #开始构建 ll-builder run #尝试运行,确定运行正常我们就可以导出玲珑包了 ll-builder export #导出玲珑包

最终runtime.layer结尾的就是我们需要的玲珑包

image.png

看看最终运行效果:

image.png
本Demo源码下载:demo.zip
解压后在demo目录打开终端执行下面命令测试构建和运行

ll-builder build && ll-builder export && ll-builder run

小工具cplib,由ChatGPT编写,作用是读取二进制所依赖的库并复制到指定位置。
用法:

#用法:cplib 二进制文件位置 复制到目标位置 ./cplib bin/htop lib

cplib.zip

image.png

Reply Favorite View the author
All Replies
璀璨星空
deepin
2024-05-24 17:24
#1

眼睛👀:原来如此。

脑子🧠:你确定你懂了?

Reply View the author
陈陈菌
deepin
2024-05-24 18:04
#2

不错,帖子来的很及时。

补充下 command 那里似乎可以 以 [echo, -e, hello world] 的这种形式使用多个参数。

Reply View the author
neko
deepin
Ecological co-builder
Resources Team Moderator
2024-05-24 18:16
#3
陈陈菌

不错,帖子来的很及时。

补充下 command 那里似乎可以 以 [echo, -e, hello world] 的这种形式使用多个参数。

学到了XD

Reply View the author
把一切操作变成GUI
deepin
Backbone of ecological co-construction group
2024-05-24 22:13
#4

出现gnome-sudoku: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.38' not found (required by /opt/apps/gitlab.gnome.gnome-sudoku.linyaps/files/lib/libadwaita-1.so.0)
怎么解决?

Reply View the author
MDGA
deepin
2024-05-24 22:22
#5

thanks

Reply View the author
neko
deepin
Ecological co-builder
Resources Team Moderator
2024-05-24 23:36
#6
把一切操作变成GUI

出现gnome-sudoku: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.38' not found (required by /opt/apps/gitlab.gnome.gnome-sudoku.linyaps/files/lib/libadwaita-1.so.0)
怎么解决?

催玲珑更新org.deepin.foundation XD

Reply View the author
W2J
deepin
2024-05-25 02:55
#7

额,

libc.so.6 libm.so.b 这些基础lib支持能随便替换吗?很危险吧

Reply View the author
W2J
deepin
2024-05-25 02:57
#8

ChatGPT若随意替换lib基础,明显不怀好意。

Reply View the author
把一切操作变成GUI
deepin
Backbone of ecological co-construction group
2024-05-25 03:43
#9
W2J

ChatGPT若随意替换lib基础,明显不怀好意。

容器内有什么问题?

Reply View the author
neko
deepin
Ecological co-builder
Resources Team Moderator
2024-05-25 04:22
#10
把一切操作变成GUI

出现gnome-sudoku: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.38' not found (required by /opt/apps/gitlab.gnome.gnome-sudoku.linyaps/files/lib/libadwaita-1.so.0)
怎么解决?

Reply View the author
神末shenmo
deepin
Spark-App
Solutions Team Moderator
2024-05-25 06:08
#11
find -type f ! -name '*.yaml' ! -name '*.layer' ! -name 'linglong' -exec cp --parents '{}' $PREFIX \;

一定要这样写吗

还是说可以手动放好

Reply View the author
zccrs
deepin
2024-05-25 06:51
#12
把一切操作变成GUI

出现gnome-sudoku: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.38' not found (required by /opt/apps/gitlab.gnome.gnome-sudoku.linyaps/files/lib/libadwaita-1.so.0)
怎么解决?

你的这个不是自己编译的吧,直接复制的二进制?

Reply View the author
zccrs
deepin
2024-05-25 06:51
#13

教程写的通俗易懂,非常棒

Reply View the author
neko
deepin
Ecological co-builder
Resources Team Moderator
2024-05-25 07:29
#14
神末shenmo
find -type f ! -name '*.yaml' ! -name '*.layer' ! -name 'linglong' -exec cp --parents '{}' $PREFIX \;

一定要这样写吗

还是说可以手动放好

可以手动放,我这样只是方便点全部复制过去

Reply View the author
W2J
deepin
2024-05-25 07:33
#15
把一切操作变成GUI

容器内有什么问题?

bwrap容器替换时,用cplib自然没问题,上下文误会了。

Reply View the author
阿顺呀
deepin
2024-05-26 13:04
#16

官方文档要玲珑1.5.0

我的是1.4.0 怎么升级
image.png

Reply View the author
neko
deepin
Ecological co-builder
Resources Team Moderator
2024-05-26 14:18
#17
阿顺呀

官方文档要玲珑1.5.0

我的是1.4.0 怎么升级
image.png

deepin23加内测源更新

Reply View the author
阿顺呀
deepin
2024-05-26 14:20
#18
neko

deepin23加内测源更新

我现在是V23RC 加了内测的

玲珑版本还是1.4.0

image.png

image.png

Reply View the author
neko
deepin
Ecological co-builder
Resources Team Moderator
2024-05-26 17:31
#19
阿顺呀

我现在是V23RC 加了内测的

玲珑版本还是1.4.0

image.png

image.png

dpkg -l |grep linglong

那个1.5版本是linglong-builder的不是ll-cli
执行这个看看
image.png

Reply View the author
阿顺呀
deepin
2024-05-27 00:22
#20

那应该没问题
image.png

Reply View the author