目录
什么是AppImage?
利用appimage工具对开发好的项目进行打包
linux下将qt程序打包成appimage程序 (高参考价值)
使用 AppImageLauncher (管理appimage工具)轻松运行和集成 AppImage 文件
简明操作步骤 ******
问题与解决1 /2 ******
官网仓库::用户自己的、应用发布与下载:https://appimage.github.io/apps/
用户手册:https://docs.appimage.org/packaging-guide/manual.html
论坛支持:https://discourse.appimage.org/
比较: Linux下制作.run安装包
https://blog.csdn.net/ken2232/article/details/129397454
参考:
linuxdeployqt + appimagetool 工具 Qt打包问题 汇总
https://blog.csdn.net/ken2232/article/details/132027214
利用 appimagetool 工具对开发好的项目进行打包 (***带笔记*)
https://blog.csdn.net/ken2232/article/details/131313613
----------------------------------------------------------
1.1. linuxdeploy /linuxdeployqt 的用途:将用户程序所用到的 库(在 OS中的库) 打包到同一个目标文件夹下。
对相关的配置文件进行设置,可以保证用户 app的搜索路径 会优先(或只扫描)目标文件夹下的 库。
linuxdeploy:为linux OS的通用型 app deploy工具。不能用于对 Qt打包。
linuxdeployqt:针对 Qt的个性化工具。
1.2. appimagetool 的用途:将可在同一个应用程序文件夹中(无需再依赖不在这个文件夹中的其他库)就可以运行的用户 app程序,打包成一个单一的、绿色免安装的、跨 linux发行版执行的、只读的可执行文件。
AppImage 是一种把应用打包成单一文件的格式,允许在各种不同的目标系统(基础系统(Debian、RHEL等),发行版(Ubuntu、Deepin等))上运行,无需进一步修改。
2.1. appimagetool 的作用:相当于将应用app及其库函数打包在一起,生成一个只读的可执行文件
与其他目录之间的路径位置关系:
等同于就是原来的 应用app的路径位置:即将新生成的应用app 替换掉原来的应用app;又或者说: 将原来的应用app 改名,并将其内容替换成新生成的应用app 。
相当于将原来的、依赖于操作系统库的、应用app,转换成一个不依赖于操作系统库的、捆绑了操作系统库的、新的应用app
appimagetool 在打包的时候:
在打包目标目录下,只需要、应该包含:应用app,系统库,以及其他 appimagetool 的支持文件。
其他需要修改的文件,此时不应该存在于这个目录中。因为在打包之后,生成的 .Appimage
文件是只读的;并且应用app应该也不会访问到这些多余的、导致打包后臃肿的、可能随时会被应用app 修改的文件。
2.2. 可能需要被用户修改的文件,不要放在这个文件夹中。
因为用户 app文件夹中的所有文件,被打包成了一个只读的可执行文件??????
3.0.1. 步骤1:
配置 Qt qmake的运行环境。默认的环境变量,使得 Qt qmake不需要带路径就可以在终端上运行。
## 修改文件 ~/.bashrc
#add qt env
export PATH=/opt/Qt5.13.0/5.13.0/gcc_64/bin:$PATH
export LIB_PATH=/同上/lib:$LIB_PATH
export PLUGIN_PATH=/同上/plugins:$PLUGIN_PATH
export QML2_PATH=/同上/qml:$QML2_PATH
vim ~/.bashrc
source ~/.bashrc
qmake -v
配置 Qt Creator:
Qt Creator 修改 可执行文件 的输出路径 (**)
https://blog.csdn.net/ken2232/article/details/131338285
appimagetool 会将可执行文件目录下的所有的东西,都会打包在一起。
当打包包含了需要在运行时修改的文件时,就会出错;因为 appimagetool 打包出来的文件,是只读的。
3.0.2. 步骤2:
目的:打包到同一个文件夹:将宿主操着系统中的库函数,与用户 app打包到一个文件夹中运行。
//在制作 用户app-7-x86_64.AppImage 时,用户app应该是可以放在任意可以的文件夹中,都可以制作?????
//当该目录下存在多个可执行程序时?直接指明 app的名称?
./linuxdeployqt-7-x86_64.AppImage 程序目录/程序 -appimage
3.0.x. 附加插入步骤2.5:需要人工修改 .desktop文件,以及如需要处理.desktop的 Icon图标等。
3.0.3 步骤3:
目的:打包到一个单一的只读可执行文件:将已经打包在一个文件夹中的用户 app,及其支持的库文件等等,打包成一个只读的、可执行文件。
./appimagetool-x86_64.AppImage APPDIR/
注意:
1. .desktop文件的修改 << 在 linuxdeployqt运行完成后,需要人工处理
1.1. 使用 linuxdeployqt-continuous-x86_64.AppImage Apr 24 这个版本进行的打包。在执行 appimagetool之前,必须人工自行修改 .desktop文件,增加 "Categories=" 项的 key值。key值必须符合标准规定的名称。参见:
https://specifications.freedesktop.org/menu-spec/latest/apa.html
https://specifications.freedesktop.org/menu-spec/latest/apas02.html
1.2. 其他 key值的修改。
1.3 增加用户的 Icon图标。<< 在 linuxdeployqt运行完成后,需要人工处理
2. 当 app应用使用到外部(不包含在.AppImage内部)的文件时,各个文件夹的名称、及相对路径必须与 app成功编译时的文件路径结构场景,相一致。
3. AppImage包的后期维护:自解压,修改,以便重新打包。
3.1. 可以使用“–appimage-extract”参数来自解压应用,例如./typora.AppImage --appimage-extract
3.2. 例子:解决 Krita 中无法启动 Fxcit 的问题
https://zhuanlan.zhihu.com/p/100952461?utm_id=0
-------------
参考:
linux-ubuntu下使用linuxdeployqt+appimagetool将qt程序打包成xxx.AppImage文件_爱文我的妻的博客-CSDN博客
1、打包步骤参考
https://github.com/probonopd/linuxdeployqt/blob/master/BUILDING.md
打包过程中需要的软件 linuxdeployqt patchelf appimagetool AppRun
集成包linuxdeployqt-5-x86_64.AppImage-----集成了linuxdeployqt patchelf 等
集成包appimagetool-x86_64.AppImage----------集成了appimagetool AppRun 等
将qt5.8 打包成 QtCreator-5.8.0-x86_64.AppImage https://bintray.com/probono/AppImages/QtCreator/5.8.0#files
————————————————
版权声明:本文为CSDN博主「爱文我的妻」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/bkbliu/article/details/88090465
1. 使用到外部文件,与app一起工作时:
1.1. 运行.AppImage开始时,显示会被重新挂载到: "/tmp/.mount_Applic6V4d4E/abc/cde.text"
这种场景,打包成一个单一文件后,似乎不能运行了。
1.2. 只是使用 ./linuxdeployqt-7-x86_64.AppImage 程序目录/程序 -appimage ,这是 OK的。
用户App-x86_64.AppImage文件,在运行时,会被挂载到其他地方。比如: "/tmp/.mount_Applic6V4d4E/abc/cde.text"。
这就导致 Qt QCoreApplication::applicationFilePath()函数所获得的 用户App的当前运行路径,与用户设计时的路径,是不一样的。
也就是:用户App所设定的当前运行路径,被“appimagetool-x86_64.AppImage”给修改了;从而导致了读取外部文件的错误。
错误信息:
QCoreApplication::applicationFilePath() 0000BBBB::: "/tmp/.mount_Abc6S3paM"
如何?????????
方法1:外部文件使用绝对路径。
由于 app xxx-x86_64.AppImage的运行路径是变化的,因此,外部文件需要使用绝对路径。
方法2:???
Appimage无法打开的bug_appimagetool挂在失败_me,too的博客-CSDN博客
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3.1. 步骤1:将宿主操着系统中的库函数,与用户 app打包到一个文件夹中运行。
运行 : linuxdeploy /linuxdeployqt
//典型命令格式 1:
./linuxdeployqt-7-x86_64.AppImage 程序目录/程序 -appimage
./linuxdeployqt-7-x86_64.AppImage 程序目录/ -appimage //当目录下只有1个用户app时?
//典型命令格式 2:
./linuxdeploy-x86_64.AppImage --appdir=APPDIR -e FastFusionV2 -l /lib/x86_64-linux-gnu/libm.so.6 --create-desktop-file --icon-file=FastFusionV2.png
将 app所使用到的操作系统中的库,打包到 app所在的目录下;以及配置有关路径方面的处理文件,等等。
注:
用户 app总会调用到操作系统的函数库的。
当然有特例,就是没有调用到系统库的 app,将会是太简单了,没有实用价值,不做讨论。
还有就是将系统库人工直接拷贝到 app的同级目录下,这个应该也是可以的??人工就是麻烦事了。
3.2 步骤2:将已经打包在一个文件夹中的用户 app,及其支持的库文件等等,打包成一个只读的、可执行文件。
运行 :appimagetool
//典型命令格式:
./appimagetool-x86_64.AppImage APPDIR/
将整个 app目录下的应用打包成单一文件的格式,允许在各种不同的目标系统(基础系统(Debian、RHEL等),发行版(Ubuntu、Deepin等))上运行,无需进一步修改。
3.3 问题与解决
a. 见下部。
b. 当仍然提示缺少某个支持库时,可以将该版本的支持库,直接拷贝到 app目录里,应该就可以运行了吗??
4.1 打包后,可以传送到官方的仓库中。
Snap :安全,彼此隔离,宿主系统使用了类似 AppArmor 的技术,它们跨平台且自足的,让开发者可以准确地将应用所需要的依赖打包到一起。沙盒隔离也加强了安全,并允许应用和整个基于 snap 的系统,在出现问题的时候可以回滚。
---------------------------
flatpak,snap与appimage作为linux新的打包方式谁更有前景?
Snap:是Canonical做的,也就是维护Ubuntu的公司。它有自己的软件源,安装后会创建一个永久的挂载点。和AppImage不同的是,它的运行环境是容器化的沙箱,所以安全性上更好一些。但是一些硬件,比如摄像头和音频设备,也需要通过特殊的方法连接进去。
用户不能自己控制 Snap 包的更新。
Flatpak:我用得不多,没仔细研究过原理。至于谁更有前景,也不好说。我个人比较喜
AppImage:( 文件名翻译:app镜像,就表明了这个可执行文件是只读的。? )比较简单易用,不需要安装额外的工具,整个软件都在一个文件里,下载后可以直接运行。里面有个SquashFS的文件系统,运行的时候会挂在到一个临时的地方,里面有所有只读的文件,包括可执行文件、库文件、静态数据等。除此之外都和普通的软件运行环境是一样的
AppImage,因为限制比较少,不容易出现奇怪的问题。snap 会自动更新你的软件并导致其损坏,而且无法关闭,你如果软件用着突然出问题,死活找不到问题出在哪。就这点而言,snap 好意思说自己是 linux 平台的工具吗?恶心人的玩意儿。
appimage 剩下的那两个还不如直接用容器。
---------------
http://t.csdn.cn/soS00
使用“–appimage-extract”参数来自解压应用,就获得如下文件。
注意:squashfs-root 文件夹是自动生成的。说明 appimage采用了squashfs。
本质上,appimage 相当于一个 不需要启动文件的 类似于 livecd那样的东西?可以运行它。
在运行之前,需要(自动)挂载??
----
app image是一个绿色免安装单文件程序的方案,连root权限都不需要。
没有竞争对手,不是一个层面的:Snap /Flatpak 关注于服务器上的应用;需要考虑“安全,彼此隔离,等等因素”,而 app image关注于个人电脑上的应用;不需要过度考虑安全问题,不需要考虑隔离问题。
----
appimage:更适合于、偏重于个人电脑的应用场景,不需要考虑安全与隔离问题。也可以使用例如Firejail的沙箱中运行。 https://appimage.org/
Snap /Flatpak /Docker:更适合于、偏重于服务器的应用场景,需要考虑安全与隔离问题。
由于它们之间的应用场景的不同,不是在一个层面上的东西,严格来说:没有可比性。
比如:桌面操作系统与服务器操作系统,它们之间,好像都能完成彼此的工作。但是,严格来说:它们有可比性吗?
在桌面操作系统中使用:Snap /Flatpak /Docker;则感觉:好麻烦,好繁琐。
在服务器操作系统中使用:appimage,没有安全与隔离机制;则感觉:随时可以被.Appimage应用搞到系统崩溃。
采用桌面系统来给服务器使用,会如何?
采用服务器操作系统来作为日常的桌面系统来使用,又会如何?
链接:https://www.zhihu.com/question/418865290/answer/1449113473
---------------------------
Docker相比虚拟机的交付速度更快, 资源消耗更低, Docker采用客户端/服务器端架构, 使用远程API来管理和创建容器, 其可以轻松的创建一个轻量级的, 可移植的, 自给自足的容器. Docker的三大理念就是build, ship, run. Docker通过namespace和cgroup来提供容器的资源隔离与安全保障等, 所以Docker容器在运行时, 不需要类似虚拟机的额外资源开销, 因此可以大幅度提供资源利用率
5. 通过实际的应用场景来选择
5.1. 不复杂的、不太关心安全与隔离问题的小程序,优选使用 appimage。
5.2. 需要考虑安全与隔离的、复杂的中大程序,则可优选考虑 Docker吗???
适合使用、就好:杀鸡用牛刀,杀牛用鸡刀。
一次AppImage打包过程
https://www.bilibili.com/read/cv21703822/
解决 Krita 中无法启动 Fxcit 的问题:要点,解压 AppImage文件,修改,再生成 AppImage
https://zhuanlan.zhihu.com/p/100952461?utm_id=0
问题:运行 Krita 的 AppImage 打包的程序,由于无法启动 Fxcit 所以无法使用中文输入法,也就无法将图层标题设置为非英文的内容。
解决方法:重新打包 Krita,将 platforminputcontext 插件加入到 AppImage 程序包中相应路径即可.
在 Linux 下运行 Mathematica 记事本时,无法输入中文的解决方法类似.。
linux下将qt程序打包成appimage程序 (高参考价值)
https://blog.csdn.net/qq_43081702/article/details/115668609
报错了,因为glic版本问题
如果glic>=2.27,你就需要加上参数 -unsupported-allow-new-glibc (意思就是不再低版本发行版使用了)或 -unsupported-bundle-everything(大概的意思是尝试兼容,实际测试,到其他发行版直接用不了了,有可能是发行版的原因,还是建议用前者,虽然放弃了低版本)
-unsupported-bundle-everything: 捆绑所有依赖库,包括 ld-linux.so 加载器和 glibc。这将允许构建在较新系统上的应用程序在较旧的目标系统上运行,但不建议这样做,因为它会导致捆绑包超出所需的大小(并且可能到其他发行版无法使用)
-unsupported-allow-new-glibc:允许 linuxdeployqt 在比仍受支持的最旧 Ubuntu LTS 版本更新的发行版上运行。这将导致 AppImage无法在所有仍受支持的发行版上运行,既不推荐也不测试或支持
./linuxdeployqt-7-x86_64.AppImage 程序目录/程序 -appimage -unsupported-allow-new-glibc
./linuxdeployqt-7-x86_64.AppImage 程序目录/程序 -appimage -unsupported-bundle-everything
大部分的依赖项都到了该程序目录内
————————————————
版权声明:本文为CSDN博主「夏有凉风,冬有雪」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43081702/article/details/115668609
=================================
官网: https://appimage.org/
官网下载转移链接: https://subsurface-divelog.org/downloads/
AppImageKit: https://github.com/AppImage/AppImageKit
github下载: https://github.com/AppImage/AppImageKit/releases
https://doc.appimage.cn/docs/appimage/
目标:
"作为一名用户,我在从原作者处下载到应用后,我希望能直接在Linux桌面上运行它,就像运行一个Windows或者Mac应用程序一样。"
"作为一名应用开发者,我想为Linux桌面系统提供软件包的同时,不需要将其分发到每一个发行版中,也不必为不同的发行版编译多个版本。"
AppImage的核心思想是一个应用程序 = 一个文件 。每个AppImage都包含应用程序以及应用程序运行所需的所有文件。换句话说,除了操作系统本身的基础组件,Appimage不需要依赖包即可运行。
AppImage 格式是上游应用打包的理想选择,这意味着你可以直接从开发者那里获取软件,而不需要任何中间步骤,这完全符合开发者意图。非常迅速。
AppImage应用可以直接下载并且运行,无需安装,并且不需要root权限。
下载一个应用程序,给予运行权限,双击运行!无需安装!不需要改变依赖或系统配置。 也可以使用例如Firejail的沙箱中运行。
AppImage 是一种把应用打包成单一文件的格式,允许在各种不同的目标系统(基础系统(Debian、RHEL等),发行版(Ubuntu、Deepin等))上运行,无需进一步修改。
https://en.wikipedia.org/wiki/AppImage
AppImageKit 是AppImage的构建工具包,提供了 appimagetool
和 appimaged
等工具来方便地处理AppImage。
appimagetool
将AppDir目录转换成自挂载的文件系统镜像。 appimaged
是一个守护进程,用于处理AppImage与系统(菜单条目,图标,MIME类型,二进制增量更新等)的注册或注销。
提供AppImage格式的包用于分发应用相对于其他格式,具有以下优点:
appimaged
桌面集成功能(注册快捷方式等)./typora.AppImage --appimage-extract
这里是官方上游已分发的AppImage格式应用的概览。
appimage打包方法
本篇记录了自己在ubuntu系统上开发好了一个项目(C++)后,想要对工程进行一个发布,使得该工程只通过一个可执行文件和相应的一个初始化指令,便使得整个工程可以运行。
可以通过利用appimage工具对项目进行一个打包。
整体介绍:
打包需要两个工具:
(1)appimagetool,
下载地址: https://appimage.github.io/appimagetool/
(2)linuxdeploy,
下载地址:https://github.com/linuxdeploy/linuxdeploy
利用linuxdeploy工具首先生成一个方便打包的文件夹,在利用appimagetol来利用上一步生成的文件夹再来对整个工程进行打包。
(1)下载appimagetool和linuxdeploy。
使用前确保两个工具具有可执行文件的权限。
(2)在含有这两个的文件的终端中输入:
./linuxdeploy-x86_64.AppImage --appdir=APPDIR -e FastFusionV2 -l /lib/x86_64-linux-gnu/libm.so.6 --create-desktop-file --icon-file=FastFusionV2.png
注:
说明:
该命令生成一个叫APPDIR的文件夹。
该命令中
–appdir= 生成的文件名,
-e 后接可执行文件,
-l 后接该打包系统在其他系统执行过程中所缺的文件(一般不用)
–create-desktop-file 生成桌面文件,不知道为什么一定要加。
–icon-file=FastFusionV2.png 给桌面文件加上一个图标, (也是第一次用的时候必须操作)
(3)在终端中输入
./appimagetool-x86_64.AppImage APPDIR/
说明: 该步的输入参数是上一步中生成的文件, 然后会输出一个可执行的打包文件和第一步中加入的可执行文件是同名的(第一次用一个要赋予相应的权限)
有想要这两个工具的小伙伴,可以在下面评论中留下邮箱,我也直接发给你们也好。但还是推荐你们从官方途径进行下载。
————————————————
版权声明:本文为CSDN博主「种花家的德棍」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41918369/article/details/113385650
============================
1. WARNING: appstreamcli command is missing, please install it if you want to use AppStream metadata
https://www.suramya.com/blog/2018/08/fixing-the-appstreamcli-error-when-running-apt-get-update/
sudo apt install appstream
2. file command is missing but required, please install it
https://www.cyberciti.biz/faq/bash-file-command-not-found-how-to-install-file/
sudo apt install file
3. Categories entry not found in desktop file .desktop file is missing a Categories= key
非原始的生成目录, .desktop数据修改了
https://github.com/azubieta/AppImageInfo/issues/1
注:当前版本,要求 .deaktop文件,需要有 Categories=这个key。(appimagetool-x86_64.AppImage Dec 31, 2020)
解决:自己加上,即可。
可能原因:官网提供了一个用户 app应用的发布与下载平台,因此,被强制加上了 Categories= 这项。
https://appimage.github.io/apps/
注:Categories 的key必须与 Main Category规定的相同,这是软件设定的要求而已。
Hence, please add at least one of the following in the Categories=
key.
Main Category | Description | Notes |
---|---|---|
AudioVideo | Application for presenting, creating, or processing multimedia (audio/video) | |
Audio | An audio application | Desktop entry must include AudioVideo as well |
Video | A video application | Desktop entry must include AudioVideo as well |
Development | An application for development | |
Education | Educational software | |
Game | A game | |
Graphics | Application for viewing, creating, or processing graphics | |
Network | Network application such as a web browser | |
Office | An office type application | |
Science | Scientific software | |
Settings | Settings applications | Entries may appear in a separate menu or as part of a "Control Center" |
System | System application, "System Tools" such as say a log viewer or network monitor | |
Utility | Small utility application, "Accessories" |
In addition, you could specify one or more from the longer list of Additional Categories.
4. 当仍然提示缺少某个支持库时,可以将该版本的支持库,直接拷贝到 app目录里,应该就可以运行了吗??
https://askubuntu.com/questions/1237042/desktop-files-not-launching-from-desktop-in-ubuntu-20-04-lts
https://help.gnome.org/admin//system-admin-guide/2.32/menustructure-desktopentry.html.en
利用 appimagetool 工具对开发好的项目进行打包 (***)
利用 appimagetool 工具对开发好的项目进行打包 (***)_ken2232的博客-CSDN博客
使用linuxdeployqt在linux下进行Qt打包发布(超详细)
使用linuxdeployqt在linux下进行Qt打包发布 (超详细) (*****)_ken2232的博客-CSDN博客
使用linuxdeployqt在linux下进行Qt打包发布(超详细)_百里杨的博客-CSDN博客
Linux下的QT程序的打包、运行、和关闭程序教程整理
Linux下的QT程序的打包、运行、和关闭程序教程整理_linux下qt打包工具_ken2232的博客-CSDN博客
https://zhuanlan.zhihu.com/p/37035598
https://www.cnblogs.com/fenggwsx/p/16578263.html
AppImage
是一种把应用打包成单一文件的格式,允许在各种不同的Linux系统上运行,无需进一步修改
本文主要讲如何在Ubuntu中运行和管理它
要运行AppImage
,为其添加可执行权限即可
假如当前目录下有一个名为app.appimage
的文件,运行下面命令赋予其可执行权限:
chmod +x app.appimage
然后运行该AppImage
:
sudo ./app.appimage
AppImage
可以在任何位置运行,但是这样运行起来非常不方便,我们希望可以有程序来统一管理这些AppImage
,并且为它们添加到开始菜单中以方便启动,AppImageLauncher
就是这样一个程序
从Github中获取AppImageLauncher
的最新发布版:Releases · TheAssassin/AppImageLauncher · GitHub
根据自己的系统架构,下载对应的deb
安装包,下载后进行安装:
sudo dpkg -i appimagelauncher*.deb
安装完成后,再运行任何未安装的AppImage
程序文件,都会询问是单次运行Run once
或是集成并运行Intergrate and run
,选择后者就会将AppImage移至统一的文件夹下(默认为~/Applications/
,可以在AppImageLauncher
的设置中修改),并且为其添加到开始菜单中,这样以后运行就会方便许多.
点击 “Integrate and run”,这个 AppImage 就被复制到 ~/.bin/
(家目录中的隐藏文件夹)并添加到菜单中,然后启动该程序。 使用 AppImageLauncher 轻松运行和集成 AppImage 文件 - 知乎
如果通过AppImageLauncher
管理的某个AppImage
不想要了,可直接对开始菜单中该程序的图标右键,选择从系统中移除Remove from system
即可