
作为独立开发者,写完代码、发个 deb 包,似乎就完成了任务。但现实往往是:用户要在不同的 Linux 发行版里折腾依赖、解决环境冲突,最终因为“装不上”而流失。
社区开发者 @米饭虚拟机 在分享了自己的软件后,被小伙伴催更“如意玲珑包”。在踩坑填坑后,他总结了一套极简流程。今天,我们就从他的实战出发,看看如何通过补齐“玲珑打包”这项技能,让你的软件在多发行版生态中丝滑落地。
对于独立开发者而言,写代码只是第一步,让用户“顺畅地用上”,才是产品闭环的最后一公里。
如意玲珑(Linyaps)是由开放原子开源基金会孵化及运营的开源项目,通过轻量级容器化技术,让应用在 deepin、UOS、Debian、Ubuntu、Arch 等多个 Linux 发行版上保持一致运行。容器化隔离和写时复制机制,兼顾了效率与安全。
对 deepin 用户来说,玲珑已经是“老朋友”了。deepin 25 将玲珑作为应用分发的重要基础设施,系统默认集成运行环境。社区里也有越来越多的开发者主动把软件打成玲珑包,让好用的工具不再被发行版边界卡住。
下面以 Motrix 为例,只需 4步,完整走一遍流程。
第一步:把环境准备好
deepin 和 UOS 部分版本已经预装如意玲珑,请先执行 ll-cli --version查看;如果你的系统里还没有,执行:
sudo apt update && sudo apt install linglong-bin linglong-builder -y
Arch 用户则用:
sudo pacman -Syu linyaps
linglong 文件夹和 linglong.yaml 文件:
mkdir linglong && touch linglong.yaml

接下来以 Motrix 为例,把准备好的 deb 包放进 linglong 目录并解包。用 GUI 工具解包会更方便。

解包后,删掉 deb 文件和 DEBIAN 文件夹——DEBIAN 里的控制信息在玲珑打包中用不上。

第二步:改造目录结构,这是最容易踩坑的地方
玲珑对应用的文件布局有明确要求:主程序目录必须放在 /opt/apps/包名/files/ 下,否则构建时会直接报错。
以 Motrix 为例:
原来的 /opt/Motrix/* 需要整体改为 /opt/apps/app.agalwood.motrix/files/*

原来的结构

改动后的结构,符合玲珑打包标准
这里有两个细节值得留意:
-
包名推荐使用倒置域名(rDNS 风格),比如
app.agalwood.motrix,并且全部小写; -
usr 文件夹的结构可以保持原样,但里面的
.desktop文件需要跟着改。
.desktop 文件的关键改动在于 Exec 和 Icon:Exec 的路径要对应新的文件结构,Icon 填图标名。同时,.desktop 文件的文件名也要改成与包名一致:

进入linglong目录,.desktop 文件的文件名改为对应的包名。
cd linglong
mv ./usr/share/applications/motrix.desktop ./usr/share/applications/app.agalwood.motrix.desktop
注意 /usr 前面的那个点,不要漏掉。

第三步:写好 linglong.yaml,构建成功一大半
linglong.yaml 是玲珑打包的核心配置文件。这里贴出了 Motrix 的完整配置,可以直接对照自己的软件修改:
version: '1'
package:
id: app.agalwood.motrix
name: motrix
version: 2.0.1.0
kind: app
description: |
motrix,基于aria2的下载器
architecture: x86_64
channel: main
command: [/opt/apps/app.agalwood.motrix/files/motrix]
base: org.deepin.base/25.2.2
sources:
- kind: git
url: https://github.com/agalwood/Motrix.git
commit: 7eecee9a6138cb3610d3dc88f9c5223e540476f4
version: main
build: |
cp -a /project/linglong/opt/apps/app.agalwood.motrix/files/. "${PREFIX}/"
install -Dm644 /project/linglong/usr/share/applications/app.agalwood.motrix.desktop \
"${PREFIX}/share/applications/app.agalwood.motrix.desktop"
mkdir -p "${PREFIX}/share/icons/hicolor"
cp -a /project/linglong/usr/share/icons/hicolor/. "${PREFIX}/share/icons/hicolor/"
buildext:
apt:
depends:
[libgtk-3-0, libnotify4, libnss3, libxss1, libxtst6, xdg-utils, libatspi2.0-0, libuuid1, libsecret-1-0]
作者特别标出了几个容易翻车的点:
-
version 必须是四元组(
a.b.c.d),写成三段会报错; -
command的值必须用中括号 [ ] 括起来,哪怕只有一条命令;
-
architecture 按架构填写:amd64 写
x86_64,arm64 写arm64,龙架构新世界写loong64; -
sources 必须填,
kind推荐git,url和commit可以随便填,version推荐main或master;打包时加--offline参数会跳过 sources 的读写; -
buildext.apt.depends 里列的是构建时需要的依赖包,按自己软件的实际情况增减即可;不知道依赖可以不填。
第四步:构建、导出,然后安装
以上文件就位后,返回上一层级目录,执行构建:
cd ..
ll-builder build --offline

编译中
出现 Build completed successfully 说明编译成功。接着导出成玲珑包,加上 -z zstd 可以让产物更小:
ll-builder export -z zstd

安装:
ll-cli install ./*.uab
执行:
ll-cli install app.agalwood.motrix
注意:普通用户安装时需要输入密码。

玲珑的意义,不止于“多一种格式”
对普通用户来说,玲珑包意味着同一个应用可以在 deepin、UOS、Debian、Ubuntu、Arch 上获得一致的运行体验,不用再为不同发行版找不同的安装方式。
对社区开发者来说,把软件打包成如意玲珑,表面上是多学了一门构建工具,实际上是补全了在 Linux 生态中的“分发短板”——这是让你的作品被更多 Linux 用户看见、用上的最短路径之一。
一个架构、一次构建,全平台分发。如果你手里也有一个“想让它跑在各大 Linux 发行版上”的软件,不妨从这篇打包教程开始。

English