Linux打包appimage方法

📅 2026/8/4 6:07:13
Linux打包appimage方法
本文档以REHL/Rock/Fedora为示范系统打包形式为electronweb的形式一、环境准备1.1 安装依赖sudo dnf update -y sudo dnf install -y epel-release sudo dnf config-manager --set-enabled crb # Rocky 10 sudo dnf groupinstall -y Development Tools sudo dnf install -y wget fuse npm nodejs注意~~webkit2gtk3~~ — Electron 自带 Chromium不需要系统 WebKit~~usermod -a -G fuse~~ — Rocky 10/Fedora 42 的 fuse 用户组不存在且 /dev/fuse 已允许普通用户访问1.2 下载打包工具mkdir -p ~/appimage-tools cd ~/appimage-tools wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage chmod x appimagetool-x86_64.AppImage工具用途参数​appimagetool将 AppDir 打包成 AppImage直接跟 AppDir 路径linuxdeploy自动分析依赖并打包--appdir / --output注意appimagetool --appdir xxx — 不支持会报 未找到匹配的参数sudo ./appimagetool ... — sudo 会重置环境导致相对路径失效或权限混乱二、生成 Electron 应用2.1 安装 Nativefiersudo npm install -g nativefier2.2 生成应用APPNAMEMyApp # 只能用字母/数字/下划线不能用连字符 -URLhttps://example.com nativefier --name $APPNAME $URL生成后会得到目录MyApp-linux-x64/注意APP_NAMEAPP-NAME — bash 变量名含连字符会被解析为减法运算导致路径错乱APPNAMEAppName 或 APPNAMEApp_Name本人使用的标准是AppName_Web_Appimage不过在该文档中为了方便书写并未沿用这一标准而是使用MyApp三、构建 AppDir3.1 目录结构mkdir -p MyApp.AppDir/usr/bin cp -r MyApp-linux-x64/* MyApp.AppDir/usr/bin/3.2 创建 AppRuncat MyApp.AppDir/AppRun EOF #!/bin/bash exec $(dirname $(readlink -f $0))/usr/bin/MyApp $ EOF chmod x MyApp.AppDir/AppRun或者更简单的直接vim MyApp.AppDir/AppRun编辑就OK了注意Windows 换行符CRLF— 会导致 Exec format error用 EOF单引号防止变量展开确保纯文本写入如果 AppDir 里的程序能跑但 AppImage 不能跑99% 是 AppRun 问题3.3 创建 .desktop 文件cat MyApp.AppDir/MyApp.desktop EOF [Desktop Entry] NameMyApp ExecMyApp Iconmyapp TypeApplication CategoriesNetwork; EOF同理你可以选择vim MyApp.AppDir/MyApp.desktop注意TypeApplicatio — 拼写错误必须是 Application缺少 [Desktop Entry] — 所有字段必须在该组下前面不能有空行或注释外的内容Icon/path/to/icon.png — 不能写路径只能写纯图标名Iconmyapp 但文件名是 MyApp.png — 大小写必须完全一致3.4 放置图标可选可不选图标必须放在 AppDir 根目录且与 .desktop 中的 Icon 同名找到 Nativefier 生成的图标find MyApp.AppDir/usr/bin -name .ico -o -name .png复制到根目录重命名与 Icon 字段一致cp MyApp.AppDir/usr/bin/icon.ico MyApp.AppDir/myapp.png注意图标放在 usr/bin/ 里 — appimagetool 只在 AppDir 根目录查找Iconmyapp 但文件叫 myapp.ico — 扩展名必须是 .png / .svg / .xpm如果没有图标可用系统通用图标如 Iconapplications-internet四、打包4.1 执行打包ARCHx86_64 ./appimage-tools/appimagetool-x86_64.AppImage \ --appimage-extract-and-run \ MyApp.AppDir注意上述三行内容需要同时保持原样布局的输入进终端未设置 ARCH — 会报错 More than one architectures were found...打包时目录权限混乱之前用过 sudo— mksquashfs 报 Permission denied解决sudo chown -R $USER:$USER . 后再打包磁盘满或 /tmp 满 — mksquashfs 静默失败生成只有 2MB 的空壳文件解决df -h /tmp 确认空间充足4.2 验证打包结果ls -lh MyApp-x86_64.AppImage #正常应当显示-rwxr-xr-x注意必须大于 80MBElectron 壳的体积。如果只有 1-5MB说明打包失败squashfs 镜像未写入。五、运行与分发5.1 本地运行chmod x MyApp-x86_64.AppImage ./MyApp-x86_64.AppImage5.2 FUSE 问题Fedora 42 / 部分发行版如果报错 Cannot mount AppImage, please check your FUSE setup./MyApp-x86_64.AppImage --appimage-extract-and-run注意Fedora 42 默认 fuse3旧版 AppImageKit 可能不兼容--appimage-extract-and-run 可绕过 FUSE直接解压运行之后发给别人或者自己使用即可至于appdir及其内容就可以删掉了六、兼容性注意事项6.1 glibc 陷阱打包系统glibc 版本兼容目标Rocky 10 / Fedora 422.39只能在新系统运行Rocky 9 / Ubuntu 22.042.34兼容面较广Rocky 8 / Ubuntu 20.042.28兼容面最广注意在新系统打包的 AppImage 无法在旧系统运行GLIBC_2.XX not foundglibc 向后兼容不向前兼容核心原则变量名不要连字符.desktop 格式严格组头、拼写、Icon 纯名字图标放 AppDir 根目录打包不要 sudo验证文件必须 50MB分发前在目标系统测试