[Application sharing] 玲珑杀手:玲珑应用自助打包系统,放下hack,立地成佛
Tofloor
default avatar
System233
deepin
2025-01-18 14:35
Author

Linglong Killer Self-Service (ll-killer 玲珑杀手)

这几天研究了下如何突破玲珑限制,根除玲珑打包问题。相信任何一个尝试过打包玲珑应用的人都曾被玲珑容器的路径限制和依赖库问题弄得焦头烂额,相当令人抓狂。这些问题是玲珑生态的发展的巨大阻碍,为了解决这些困难,ll-killer就此诞生。

ll-killer是一个新工具,旨在解决容器环境下构建应用时的常见问题。它不需要 root 权限,能够绕过容器内的路径限制,完全重塑容器路径。在构建时支持将容器文件系统挂载为可写,再通过apt安装和收集依赖;在运行时支持恢复构建时的文件系统,并支持环境的重入(重入环境尚不会继承重入时的环境变量)。

为了进一步降低使用成本,我将其编写为了一个Github Action工作流,用户只需在issue区按照模板格式发帖,系统即会自动根据帖子内容开始打包,并回复打包结果和下载链接,最简情况下只需提供deb包名。

特点

  • 一键打包:突破容器限制,直接apt安装依赖,并自动提取文件系统差异,无需再手动处理依赖。
  • 自动规范图标:自动更正desktop内的绝对路径图标。
  • 自动构建:只需要根据模板提交 GitHub Issue,系统会自动进行构建。
  • 灵活配置:支持自定义构建参数,如APT源和依赖包。

使用方法

  1. 提交构建请求
  2. 自动构建: 提交后,构建会自动开始,构建完成后提供下载链接。

示例:

提交以下内容即可构建 GIMP:

Package: gimp Version: 2.10.38-1deepin2 Depends: librsvg2-common APT-Sources: deb [trusted=yes] https://mirrors.tuna.tsinghua.edu.cn/deepin/beige beige main commercial community Description: GNU Image Manipulation Program

构建成功后,会返回下载链接,方便你获取构建好的包。

除了Package和APT-Sources字段比较重要,其他字段都是可选的,不填写的情况下由系统自动从apt仓库提取。

构建效果

  • GIMP 图像处理软件

[self-build] GIMP · Issue #1 · System233/linglong-killer-self-service

  • WPS Office

[self-build] cn.wps.wps-office · Issue #2 · System233/linglong-killer-self-service

  • WPS Office Prc(V20系统)

[self-build] cn.wps.wps-office-pro · Issue #3 · System233/linglong-killer-self-service

如何获取包的构建参数

在正常的Deepin或UOS系统中使用命令 apt show "deb包名",如获取curl包的信息

$ `apt show "curl" Package: curl Version: 8.11.0-0deepin1 Priority: optional Section: web Maintainer: Debian Curl Maintainers <team+curl@tracker.debian.org> Installed-Size: 482 kB Depends: libc6 (>= 2.38), libcurl3-gnutls (= 8.11.0-0deepin1), zlib1g (>= 1:1.1.4) Homepage: https://curl.se/ Download-Size: 255 kB APT-Sources: https://mirrors.tuna.tsinghua.edu.cn/deepin/beige beige/main amd64 Packages Description: command line tool for transferring data with URL syntax curl is a command line tool for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP. . curl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, kerberos...), file transfer resume, proxy tunneling and a busload of other useful tricks.

可以看到包来自 APT-Sources: https://mirrors.tuna.tsinghua.edu.cn/deepin/beige beige/main amd64 Packages 以及Version等信息。

构建参数与此APT输出基本相同,看起来是普通的 KEY: VAL键值对形式,唯一要注意的是多行字段中,行首必须是空格。

此外,在声明APT源时请指定[trusted=yes]参数忽略签名,避免因仓库签名引起的构建失败。

总结

以上是关于ll-killer的简要介绍,如有问题欢迎讨论。

Reply Favorite View the author
All Replies
1 / 2
To page
马小松
deepin
2025-01-18 16:57
#1

牛,期待详细的原理教学贴。

Reply View the author
蓝鲸
deepin
2025-01-19 00:26
#2

机器牛马诞生,解放打包人!kissing_heart

Reply View the author
131******26
deepin
2025-01-19 02:12
#3

我这边用的是玲珑打包的龙芯浏览器,发现玲珑版的其他应用拉不起来,把龙芯浏览器设为默认的话,我vscode就拉不起来,自带浏览器可以拉起来。不知道是啥原因,V25预览版

Reply View the author
把一切操作变成GUI
deepin
Backbone of ecological co-construction group
2025-01-19 04:29
#4
131******26

我这边用的是玲珑打包的龙芯浏览器,发现玲珑版的其他应用拉不起来,把龙芯浏览器设为默认的话,我vscode就拉不起来,自带浏览器可以拉起来。不知道是啥原因,V25预览版

V25只是个预览版,连测试版都不算,还有很多问题需要修复的,另外,玲珑好像是隔离开了,貌似没法唤醒,不知道后面会不会改进。

Reply View the author
mozixun
Moderator
2025-01-19 05:15
#5
131******26

我这边用的是玲珑打包的龙芯浏览器,发现玲珑版的其他应用拉不起来,把龙芯浏览器设为默认的话,我vscode就拉不起来,自带浏览器可以拉起来。不知道是啥原因,V25预览版

你试一下玲珑里安装Thorium通用版会不会出现类似问题

Reply View the author
HualetWang
deepin
2025-01-20 02:37
#6

赞,头像看起来挺熟悉confused

Reply View the author
ailingyue
deepin
2025-01-20 07:41
#7

可以支持 AppImage 包吗?

Reply View the author
System233
deepin
2025-01-20 09:46
#8
ailingyue

可以支持 AppImage 包吗?

目前打包服务依赖apt命令,无法下载appimage,不过工具是通用的,可以通过ll-killer强制覆盖容器目录,来解决appimage应用中的路径问题。

此外还需要处理appimage的快捷方式信息和图标问题,出于安全考虑,尚不能在服务器上执行自定义命令。

整体而言还是能够实现自助转制appimage的,只需要提供URL链接以及快捷方式的生成参数。

Reply View the author
System233
deepin
2025-01-20 09:48
#9
HualetWang

赞,头像看起来挺熟悉confused

没错,就是我

yeah

Reply View the author
System233
deepin
2025-01-20 09:50
#10
131******26

我这边用的是玲珑打包的龙芯浏览器,发现玲珑版的其他应用拉不起来,把龙芯浏览器设为默认的话,我vscode就拉不起来,自带浏览器可以拉起来。不知道是啥原因,V25预览版

意思是指龙芯浏览器内启动其他应用吗?还是指vscode启动龙芯/其他浏览器

Reply View the author
System233
deepin
2025-01-20 09:55
#11
蓝鲸

机器牛马诞生,解放打包人!kissing_heart

今天添加了自动补全依赖功能,牛马能力又增强了

Reply View the author
System233
deepin
2025-01-20 09:56
#12
马小松

牛,期待详细的原理教学贴。

后续反响不错的话再出一篇详细的原理介绍帖~kissing_heart

Reply View the author
System233
deepin
2025-01-20 10:23
#13

编辑不了帖子,老是提示有敏感词,每次提示都还不一样sweat 把更新内容放下面了

调整后的填写模板

Linglong Killer Self-Service 的 GitHub 页面
原模板已移除,更换为此更直观的填写模板

限制

  • 目前在线服务仅支持apt仓库的deb包转制
  • 出于安全考虑,暂不支持在服务中运行自定义构建脚本,可以将仓库下载到本地使用。

本地运行

ll-killer可以在本地运行,但目前仅测试了在项目根目录下工作,尚未测试其他工作目录。

运行步骤

  1. 在工作目录新建一个package.info文件,填入上述项目构建参数。
  2. 运行./ll-killer generate package.info命令,生成linglong.yaml
  3. 运行./ll-killer build-and-check命令,过程中自动构建项目一到两次,并自动补全缺失依赖

项目调试

通过ll-builder run命令进入容器,自动执行linglong.yaml内配置的entrypoint.sh入口命令,并进入重塑文件系统后的容器环境,$PREFIX中的内容将无视玲珑容器限制,直接叠加到玲珑容器根目录。
此时可以通过shell命令检查容器内映射后的文件布局。

使用自定义构建脚本

可以创建新的shell脚本,并在linglong.yaml中的build指令替换如下

./ll-killer -- <你的构建脚本> #你可以在脚本中以root身份写入任意目录 ./ll-killer install #复制收集到的文件更改到$PREFIX ./ll-killer setup #修复share中的符号链接、快捷方式和桌面图标

ll-killer命令说明

用法: ll-killer mode [...args] 模式说明: build-and-check 构建并自动补全依赖 ldd-check <output> 检查动态库依赖并记录日志 运行前必须至少使用ll-builder build构建一次项目 ldd-search <input> [found] [missing] 搜索动态库依赖 主机上必须安装apt-file 输出到 ldd-missing.log 和 ldd-found.loglocal [...args] 切换到隔离的APT环境。 generate <package.info> 生成linglong.yaml脚本。 shell 执行交互式 shell * 显示本帮助信息。 ll-builder build 构建模式容器内模式: root 切换到 root 模式,全局可写。 build 执行安装和构建脚本。 dpkg-install 使用 dpkg 安装模式安装sources目录下的deb。 extract 使用 dpkg 解压模式安装sources目录下的deb。 clean 清理搜集的依赖文件和目录。 copy 拷贝收集的依赖到$PREFIX。 install 清理并拷贝文件(clean + copy)。 setup 配置应用的快捷方式和图标文件。 dev 切换到隔离环境。 -- 切换到默认的 root 模式。 ll-killer 内部模式,除非你知道是什么,否则不要使用: mount 挂载 FUSE 和根文件系统,准备合并目录。 pivot_root 切换根文件系统到合并目录,并执行 shelllocal-env 配置本地 APT 环境,绑定相关目录,更新包信息。 dev-host 配置开发主机环境,并切换根文件系统。 示例: ll-killer generate package.info 通过package.info生成linglong.yaml ll-killer build-and-check 构建并自动补全依赖 ll-killer ldd-check ldd-check.log 检查容器内是否有缺失依赖,输出缺失文件名到ldd-check.log ll-killer ldd-search ldd-check.log ldd-found.log ldd-missing.log 搜索ldd-check.log中的依赖 ll-killer -- bash 在容器内切换到root模式 ```## 250120 更新 1. 添加了自动补全依赖功能 2. 优化了填写模板 3. 添加了ll-killer命令帮助
Reply View the author
鲜衣怒马
deepin
2025-02-05 06:50
#14

仰望大佬!

Reply View the author
mozixun
Moderator
2025-02-05 06:51
#15
ailingyue

可以支持 AppImage 包吗?

appimage可以直接自己打包

Reply View the author
神末shenmo
deepin
Spark-App
2025-02-05 08:12
#16

真好啊applaud

Reply View the author
把一切操作变成GUI
deepin
Backbone of ecological co-construction group
2025-02-05 08:38
#17

有一说一,的确好用,我个人觉得比官方的pica好用

Reply View the author
流星追月
deepin
2025-02-05 11:23
#18

把这个打包框架建立在deepseek上,是不是目前的商业软件都可以自动打包?

理论上已经不存在生态问题了,请教!

Reply View the author
哄哄
deepin
2025-02-05 12:23
#19

玲珑的包太过臃肿了,感觉还是electron包小

Reply View the author
jmjoy
deepin
2025-02-06 02:01
#20

linglong现在能打包wine应用吗?

Reply View the author
1 / 2
To page