pkgforge-dev/appimagetool · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈
appimagetool
appimagetool 的 Rust 实现,用于 Anylinux-AppImages 项目。
它接收一个准备好的 AppDir,并使用 DWARFS 压缩和 uruntime AppImage 运行时生成一个完成的 .AppImage。单一二进制文件,无 Python,无 C++ 依赖。
快速开始
appimagetool ./AppDir
就是这样。该工具将:
- 验证 AppDir(检查
AppRun、.DirIcon、一个.desktop文件)。 - 如果
mkdwarfs和uruntime尚未缓存,则下载它们。 - 将
X-AppImage-*元数据写入桌面条目。 - 构建 DWARFS 镜像,并将运行时嵌入为 ELF 头。
- 当设置更新信息时,生成一个
.zsync文件,外加一个appinfo伴随文件。
特性
- 使用 DWARFS 压缩,生成小巧且支持增量更新的 AppImage。
- 即插即用的 uruntime 集成,支持自动下载和 ELF 节区修补。
- 可选的基于配置的优化(DWARFS 热度分析),以加快启动速度。
- 内置 zsync 生成,无需
zsyncmake外部调用。 - 无中央仓库,无守护进程,无额外运行时依赖。
用法
典型构建
appimagetool ./build/AppDir \
--output ./dist \
--update-info "gh-releases-zsync|org|repo|latest|*-x86_64.AppImage.zsync"
CI / GitHub Actions
如果设置了 GITHUB_REPOSITORY,更新信息将自动派生为
gh-releases-zsync|owner|repo|latest|*<arch>.AppImage.zsync。因此在 CI 中通常只需要:
VERSION=1.2.3 appimagetool ./AppDir --output ./dist
跨架构 / 别名文件名
该工具分别跟踪两种架构:
APPIMAGE_ARCH是 运行时 架构。它决定下载哪个mkdwarfs和uruntime二进制文件,并显示在X-AppImage-Arch元数据中。默认为主机架构。ARCH是 显示 架构。它仅影响输出文件名。未设置时回退到APPIMAGE_ARCH。
这允许项目以 amd64 之类的别名发布,同时仍拉取正确的 x86_64 运行时:
APPIMAGE_ARCH=x86_64 ARCH=amd64 appimagetool ./AppDir
# produces MyApp-1.2.3-anylinux-amd64.AppImage with X-AppImage-Arch=x86_64
所有 CLI 选项
Usage: appimagetool [OPTIONS] [APPDIR]
Arguments:
[APPDIR] Path to the AppDir directory [env: APPDIR] [default: ./AppDir]
Options:
-o, --output <OUTPUT> Output directory [env: OUTPATH] [default: .]
-n, --name <NAME> Output filename (auto-detected from .desktop) [env: OUTNAME]
--appimage-arch <ARCH> Runtime arch (download URL + X-AppImage-Arch) [env: APPIMAGE_ARCH]
--arch <ARCH> Display arch used in the output filename [env: ARCH]
--runtime <RUNTIME> Path to uruntime binary [env: RUNTIME]
--runtime-url <URL> URL to download uruntime from [env: URUNTIME_LINK]
-u, --update-info <UPINFO> Update information string [env: UPINFO]
--dwarfs-comp <COMP> DWARFS compression options [env: DWARFS_COMP]
--optimize-launch Enable DWARFS profile optimization (also via OPTIMIZE_LAUNCH=1)
--profile-timeout <SECS> Profiling timeout in seconds [env: OPTIMIZE_LAUNCH_TIMEOUT] [default: 10]
--keep-mount Keep the FUSE mount alive after exit (also via URUNTIME_PRELOAD=1)
--devel-release Tag the build as a nightly/devel release (also via DEVEL_RELEASE=1)
--dwarfs-profile <PROFILE> Path to DWARFS profile [env: DWARFSPROF]
--mkdwarfs <PATH> Path to mkdwarfs binary [env: DWARFS_CMD]
--dwarfs-url <URL> URL to download mkdwarfs from [env: DWARFS_LINK]
--tmpdir <TMPDIR> Temporary directory [env: TMPDIR] [default: /tmp]
-v, --verbose... Increase verbosity (-v, -vv)
-q, --quiet... Suppress informational output (-q, -qq)
-h, --help Print help
-V, --version Print version
环境变量
每个 CLI 选项都有一个对应的环境变量(如上所示)。以下是一些仅限环境变量的额外配置项:
| 变量 | 效果 |
|---|---|
VERSION | 嵌入到 AppImage 文件名和元数据中的版本字符串。 |
APPNAME | 覆盖应用程序名称(默认为桌面项的 Name)。 |
GITHUB_REPOSITORY | 设置时,自动将 update_info 生成为 gh-releases-zsync|owner|repo|latest|... |
ADD_PERMA_ENV_VARS | 要嵌入到运行时中的永久环境变量,每行一个。 |
URUNTIME_PRELOAD | 设置为 1 可在应用退出后保留 FUSE 挂载。 |
DEVEL_RELEASE | 设置为 1 可将构建标记为 nightly/devel 版本。 |
OPTIMIZE_LAUNCH | 设置为 1 可启用 DWARFS 分析路径(与 --optimize-launch 相同)。 |
OPTIMIZE_LAUNCH_TIMEOUT | 分析超时时间(秒)(默认 10)。 |
AppDir 要求
AppDir 必须包含:
- 一个可执行文件
AppRun。 - 一个
.DirIcon文件(PNG 或 SVG)。 - AppDir 根目录中恰好一个
.desktop文件。
输出文件名
默认情况下:
<AppName>-<Version>-anylinux-<Arch>.AppImage
其中 AppName 来自 .desktop Name 键(或 APPNAME),Version 来自 VERSION(或 ~/version),而 Arch 是显示架构(ARCH,回退到 APPIMAGE_ARCH)。
你也可以直接使用 --name / OUTNAME 固定文件名。
构建
cargo build --release
运行测试
# Unit + integration tests
cargo test --all-features
# Full end-to-end test (requires mkdwarfs + uruntime installed)
cargo test --all-features -- --ignored
项目结构
src/
├── main.rs CLI entry point (clap)
├── lib.rs library root
├── appimage.rs build pipeline orchestration
├── config.rs CLI args + env var resolution
├── desktop.rs .desktop parsing and metadata
├── dwarfs.rs mkdwarfs resolution, image building, profiling
├── elf.rs ELF section read / write / patch
├── error.rs error types with actionable hints
├── log.rs verbosity-gated logger
├── uruntime.rs runtime download, caching, configuration
└── util.rs atomic downloads, sanitization, ELF detection