Explore the field guideDocumentationField guidesCommunitySearchStoreJournal

2025-01-18

ll-killer: the community self-service application packaging system

Explore the ll-killer self-service build workflow, request parameters, local execution, custom scripts and documented security boundaries.

On this pageHow to get the build parameters of a packageUser GuideRun locallyll-killer command descriptionContribution GuidelinesTechnology stack

This article is reproduced from community contributor System233 and the project linglong-killer-self-service , Original link>>>


Linglong Killer Self-Service (ll-killer Linyaps killer)

In the past few days, I have been studying how to break through the limitations of Linyaps and eradicate Linyaps packaging problems. I believe that anyone who has tried to package a Linyaps application has been frustrated by the path restrictions and dependency library issues of the Linyaps container, which is quite frustrating. These problems are huge obstacles to the development of Linyaps ecology. In order to solve these difficulties, ll-killer was born.

ll-killer is a new tool designed to solve common problems when building applications in a container environment. It does not require root permissions and can bypass path restrictions within the container and completely reshape the container path. Supports mounting the container file system as writable during build, and then installing and collecting dependencies through apt; supports restoring the file system during build at runtime, and supports re-entry of the environment (the re-entry environment will not inherit the environment variables at the time of re-entry).

In order to further reduce the cost of use, I wrote it as a Github Action workflow. Users only need to post in the issue area according to the template format, and the system will automatically start packaging based on the content of the post, and reply with packaging results and download links. In the simplest case, only the deb package name is required.

Features

  • One-click packaging : Break through container limitations, directly apt install dependencies, and automatically extract file system differences, eliminating the need to manually handle dependencies.
  • Autonorm icon : Automatically correct the absolute path icon in the desktop.
  • Automatic build : Just submit a GitHub Issue according to the template, and the system will automatically build it.
  • Flexible configuration : Support custom build parameters, such as APT sources and dependent packages.

How to use

  1. Submit build request :
  2. Automatic build : After submission, the build will start automatically, and a download link will be provided after the build is completed.

Example:

Build GIMP by submitting:

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

After the build is successful, the download link will be returned to facilitate you to obtain the built package.

Except for the Package and APT-Sources fields, which are important, other fields are optional. If not filled in, the system will automatically extract them from the apt repository.

Build effects

  • GIMP image processing software

[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 system)

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

How to get the build parameters of a package

Using the command in a normal Deepin or UOS system apt show "deb包名" , such as obtaining curl package information

$ `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.

You can see that the package comes from APT-Sources: https://mirrors.tuna.tsinghua.edu.cn/deepin/beige beige/main amd64 Packages and Version and other information.

The build parameters are basically the same as this APT output and appear to be ordinary KEY: VAL In the form of key-value pairs, the only thing to note is that in multi-line fields, the beginning of the line must be a space.

In addition, please specify the [trusted=yes] parameter to ignore the signature when declaring the APT source to avoid build failures caused by repository signatures.

User Guide

1. Submit build request

on GitHub Issue Initiate a new Issue in the district, select the self-service construction template, and fill in the content in the following format:

Package: 软件包名称
Name: 应用显示名称(可选)
Version: 软件版本号(可选,默认最新)
Base: 构建基础环境(可选)
Runtime: 构建 Runtime 环境(可选,不建议使用)
Depends: 依赖包列表(可选)
APT-Sources: sources.list 格式的 APT 仓库定义,请使用 [trusted=yes] 忽略签名,支持多个源(可选,支持多行)
Description: 软件描述信息(可选,支持多行)
  • Just provide Package and APT-Sources , other fields will be automatically generated by the system.
  • For multi-line content, ensure there are normal spaces at the beginning of the line.
  • can be obtained by running apt-cache show "deb包名" to view package details.
  • If you need to adjust the build parameters, please edit the issue directly and save it.

2. Build parameter description

The following is a detailed description of each field in the template:

field Is it necessary Description
Package Yes deb Package name, must exist in the APT repository.
Name No The display name of the application, defaults to the package name.
Version No deb Package version number, default is the latest version.
Base No Linyaps container Base, default is org.deepin.base/23.1.0。
Runtime No Linyaps container runtime, this option is generally not recommended.
Depends No A list of optional dependencies for the software package, separated by commas or spaces, including the dependencies of optional plug-ins.
APT-Sources No APT software source address used in the build process, supports multiple sources, please use [trusted=yes] Ignore signatures.
Description No Software package description information supports multi-line content, and there must be a normal space at the beginning of the line.

2.1 Known Base examples

Base name Target application environment
org.deepin.base/23.1.0Deepin V23
org.deepin.foundation/20.0.0Deepin V20
org.deepin.foundation/23.0.0Deepin V23
com.uniontech.foundation/20.0.1UOS

2.2 Examples of known APT sources

  • Deepin V23
    deb [trusted=yes] https://mirrors.tuna.tsinghua.edu.cn/deepin/beige beige main commercial community
  • Deepin V23 Store
    deb [trusted=yes] https://com-store-packages.uniontech.com/appstorev23 beige appstore
  • Deepin V20
    deb [trusted=yes] https://mirrors.tuna.tsinghua.edu.cn/deepin/apricot apricot main contrib non-free
  • UOS Store
    deb [trusted=yes] https://pro-store-packages.uniontech.com/appstore eagle-pro appstore

2.3 Sample application configuration:

3. Build process

  • After submitting the Issue, the system will automatically trigger the build process.
  • After the build is completed, the system will reply with the download link and build log of the software package in the corresponding Issue.

4. Precautions

  • The Package field must be provided: Please make sure Package is a valid deb package name and exists in the specified APT repository.
  • Binary Compatibility: Please make sure Base Compatible with specified deb packages, specifically libc , if not compatible, please adjust Base is the appropriate version.
  • Follow template format: All fields must be filled in according to the template format, otherwise the build may fail.
  • Dependency fields: If Depends If the field is not filled in, the system will automatically detect it as much as possible, but in some cases the user may need to fill it in manually.

5. Security restrictions

For security reasons, custom build scripts cannot be run on the build server. Please run custom build scripts locally [TODO: Tutorial not yet written].

Run locally

ll-killer can be run locally, but has only been tested working in the project root directory, not other working directories.

Operation steps

  1. Create a new one in the working directory package.info file, fill in the above project build parameters.
  2. Run ./ll-killer generate package.info command, generate linglong.yaml
  3. Run ./ll-killer build-and-check command, automatically build the project once or twice during the process, and automatically complete missing dependencies

Project Debugging

Passed ll-builder run The command enters the container and automatically executes the configuration configured in linglong.yaml entrypoint.sh Entry command and enter the container environment after reshaping the file system, The content in $PREFIX will ignore the Linyaps container restrictions and be directly superimposed into the Linyaps container root directory. At this time, you can use shell commands to check the mapped file layout in the container.

Using custom build scripts

You can create a new shell script and replace the build instructions in linglong.yaml as follows

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

ll-killer command description

用法: 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.log。
  local  [...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      切换根文件系统到合并目录,并执行 shell。
  local-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模式                
                       

Contribution Guidelines

Welcome to contribute code or suggestions to the project! You can participate in the following ways:

  • Submit a Pull Request to fix bugs or add new features.
  • Submit an Issue with your suggestions for improvements.
  • Provide more template samples to improve system compatibility.

Technology stack

  • GitHub Actions: for implementing automated workflows.
  • BASH: Implement core logic and script processing at build time.
  • Go: Implement core logic and script processing at runtime.
  • YAML: Configure workflow files for GitHub Actions.

Special thanks ChatGPT Helps in writing project documents, providing concise and clear instructions and technical support, making the content of the document more complete.


Interested friends can go to Original post of this article or Project GitHub repository Communicate and discuss with project authors.

English edition: Linglong editorial · 18 October 2026. Original publication: 2025-01-18.