惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
L
LINUX DO - 最新话题
Recorded Future
Recorded Future
月光博客
月光博客
博客园 - 【当耐特】
博客园 - 叶小钗
宝玉的分享
宝玉的分享
量子位
雷峰网
雷峰网
博客园 - 三生石上(FineUI控件)
The Cloudflare Blog
Vercel News
Vercel News
L
LangChain Blog
B
Blog
Y
Y Combinator Blog
爱范儿
爱范儿
GbyAI
GbyAI
S
Security @ Cisco Blogs
T
The Blog of Author Tim Ferriss
A
About on SuperTechFans
博客园 - Franky
P
Palo Alto Networks Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
云风的 BLOG
云风的 BLOG
C
Cisco Blogs
Scott Helme
Scott Helme
I
Intezer
T
The Exploit Database - CXSecurity.com
MyScale Blog
MyScale Blog
T
Tor Project blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Troy Hunt's Blog
N
News and Events Feed by Topic
大猫的无限游戏
大猫的无限游戏
F
Fortinet All Blogs
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
S
Security Affairs
Cyberwarzone
Cyberwarzone
PCI Perspectives
PCI Perspectives
小众软件
小众软件
D
DataBreaches.Net
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Know Your Adversary
Know Your Adversary
Forbes - Security
Forbes - Security
S
Securelist
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security
The Last Watchdog
The Last Watchdog

陈陈菌博客

如何在 podman 容器内使用 systemd 在 podman 运行 GUI 应用的经验总结 管理 podman 容器与镜像的导入或导出 用 xdg-dbus-proxy 解决容器的文件选择器的问题 解决 VSCodium 或 Code-Server 无法安装 GitHub Copilot 问题 不可变发行版 Fedora Silverblue 的体验记录 解决 apt 或 dnf 无法 tab 补全的问题 对 (MPA) 多页面切换实现丝滑动画的探索 让服务在非 Root 权限下使用 80 或 443 端口 Flatpak 使用和应用打包快速上手 如何用 webSocket 实现一个实时聊天应用 Linux 内核编译 | 快速上手 | deb 使用 debootstrap 构建 Debian 系根文件系统 高度可定制的 KDE 窗口装饰器 klassy 有关 docker、podman、nspawn、bwrap 的 Linux 容器图形性能测试 创建任意 Linux 容器并支持 GUI 程序 (Docker) 创建任意 Linux 容器并支持 GUI 程序 (nspawn) 文件同步工具 rsync 的使用 玲珑 (Linyaps) 应用打包 RPM 打包指南 | 精简版 PBR 材质的各种贴图类型入门 APU | Stable-Diffusion 使用记录 如何在 Electron 上启用 WebGPU Grub 主题安装与配置 Fcitx5 主题安装与自定义 不使用 Nginx 的网站开发指南 如何自制一个简易的资源监控程序 SQL 常用 CRUD 语法记录 Debian 打包入门,与需要注意的问题 在 fedora 建立一个 Arch 容器 (bwrap) 在 fedora 上建立一个 debian 容器 (bwrap) i3wm | 自制一个极简的屏幕亮度调节器 在 Linux 下启用内存压缩技术 zram 搭建一个本地轻量级聊天 Ai 我又又又重新上线了博客 如何通过命令行管理 wine 容器 (包括 proton) Btrfs 文件系统创建 swap 文件的方法 如何创建适用于 Linux 桌面的程序启动文件 在 Linux 控制 intel CPU 调度的方法 Arch Linux 的基本安装
AppImage 应用打包快速上手
GlumiStudio@ · 2025-12-19 · via 陈陈菌博客

2025-12-19 11:28:59

分类: Linux


Linux 有非常多的发行版,有太多不同的包管理方式,要接触非常多的打包方式,如 Debian (deb)、ReadHat 系列 (rpm)、Arch (pkg.tar.zst) 等.....

当然,还有一些容器方案像:Flatpak、Snap、玲珑

而 AppImage 呢,则非容器,而是将许多依赖包含在一个文件中,更像是一个经过压缩且便携式的可执行文件,可以随便挪动并使用,它会在第一次启动时候临时解压和挂载资源,所以启动时间稍微慢,但它有缓存机制,后续启动会加快。

既然它是非容器,那么也会有它的问题,没有专门的隔离机制,要把它当原生程序看待,留意安全问题。

如果你厌倦了为各种 "发行版" 打包,那么就可以尝试下 AppImage 方案来为 "Linux" 统一打包。

快速上手打包


它打包的方式很简单,只需要下载一个 appimagetool 然后手动新建一个 AppDir 目录,并建立以下类似结构:

AppDir
├── AppRun # 启动脚本
├── MyApp.desktop # desktop 相关文件
├── MyIcon.png # 图标
└── usr # 假设需要打包的二进制资源
       ├── bin 
       │      └─ MyApp  # 可执行文件
..... # 按需添加

其中 AppRun 是必须的启动脚本,里面可以编写:

#!/bin/bash
export LD_LIBRARY_PATH="$(dirname "$0")/usr/lib:$(dirname "$0")/usr/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH"
exec "$(dirname "$0")/usr/bin/MyApp"

1.这里为什么会有 dirname $0 ?因为需要考虑到 appimage 文件可能位于任何路径所以路径不能写死,而这个命令相当于返回 AppRun 脚本所在目录的路径。

2.设置 LD_LIBRARY_PATH 的作用:让程序优先从打包的文件中查找依赖库

而 MyApp.desktop 我们可以这样编写:

#!/usr/bin/env xdg-open
[Desktop Entry]
Name=MyApp
Exec=MyApp
Icon=MyIcon
Type=Application
Categories=Utility;

以上字段中 Icon 这里会默认找 MyIcon.png 的图标, 而 Name 为应用名称,Exec 指向程序启动文件,Type 是应用的类型,Categories: 应用分类。

接下来使用 appimagetool 命令来对 AppDir 进行打包

appimagetool AppDir路径

就可以在当前路径下得到一个 .appimage 可执行文件了,只需要给它给以执行权限即可。

资源提取


appimage 自带了一个内置的解压选项,可以使用: **.appimage --appimage-extract 会解压出一个叫 squashfs-root 的目录,里面便是打包的相关文件。