什么是“ AppImage”?如何安装?


230

我刚刚阅读了Meet Etcher,一款时尚的开源USB图像编写器工具。它讨论了下载AppImage。

是的,Linux;Linux软件包以.appimage的形式分布在32位和64位发行版中,并且可以在所有主要Linux发行版中正常运行。该团队目前没有计划提供本机.deb(或.rpm)安装程序。

什么是AppImage?它们与快照有何不同?


10
我认为该appimage标签可能会变得有用,所以我刚刚创建了它。在我们不需要或不想保留它的情况下,总会有选择再次对其进行燃烧。
字节指挥官

Answers:


283

基本信息

关于安装

我在这里引用appImage项目页面:

AppImages可以下载并运行,而无需安装或需要root权限。

使它可执行

您可以使appImage可执行文件如下:

chmod a+x exampleName.AppImage

执行它

您可以执行以下appImage:

./exampleName.AppImage

附加信息

关于appImage

您可以在此处找到有关appImage的一些常规信息。

我在这里引用appImage项目页面:

AppImage格式的关键思想是一个应用=一个文件。每个AppImage都包含一个应用程序以及该应用程序需要运行的所有文件。换句话说,除了目标基本操作系统中包含的内容之外,每个AppImage都没有其他依赖项。

维基百科添加

AppImage(以及以前的klik和Portablelinuxapps)不会按照传统意义安装软件(即,它不会将文件放置在系统中的所有位置)。

每个应用程序使用一个文件。每个库都是独立的:它包括应用程序依赖的所有库,这些库不属于基本系统。在这方面,它类似于“应用程序虚拟化”。即使他们不是超级用户,或者正在使用实时CD,也可以使用AppImage文件。AppImage文件通常比编译和安装应用程序简单,因为实际上没有安装。AppImage文件是一个压缩图像,已临时安装以允许访问程序,而不必提取程序或修改基础系统。

README.md对的AppImageKit项目一样提供了很多附加的信息使用的情况下问题的空间目标

用例

  • 作为用户,我想转到上游下载页面,从原始作者那里下载一个应用程序,然后像在Windows或Mac应用程序上一样在Linux桌面系统上运行它。

  • 作为测试人员,我希望能够从连续构建服务器获取最新的应用程序最新版本,并在系统上对其进行测试,而无需进行编译,也不必担心会弄乱系统。

  • 作为应用程序作者或ISV,我希望像为Windows和OS X一样为Linux桌面系统提供软件包,而无需将其“引入”发行版,而不必构建成千上万个不同发行版。

目标

  1. 要简单。

    AppImage旨在成为一种非常简单的格式,易于理解,创建和管理。

  2. 保持二进制兼容性。

    AppImage是二进制软件分发的格式。打包为AppImage的软件旨在与尽可能多的系统尽可能地与二进制兼容。(重新)编译软件的需求应大大减少。

  3. 与发行无关。

    AppImage应该在为其创建的所有基本操作系统(发行版)(以及更高版本)上运行。例如,您可以同时定位Ubuntu 9.10,openSUSE 11.2和Fedora 13(及更高版本),而不必为每个目标系统创建和维护单独的软件包。

  4. 无需安装。

    AppImages包含的应用程序格式可以直接从存档中运行,而无需先安装。这相当于Live CD。在使用Live CD之前,必须先安装操作系统,然后才能使用它们。

  5. 始终保持应用程序压缩。

    由于应用程序始终保持打包状态,因此永远不会在硬盘上对其进行解压缩。计算机在访问应用程序时会即时对其进行解压缩。由于在大多数系统上,解压缩比从硬盘读取数据快,因此除了节省空间外,这还具有速度优势。同样,安装所需的时间也完全消除了。

  6. 允许将应用程序放置在任何地方。

    AppImage是“可重定位的”,因此允许用户从任何位置(包括CD-ROM,DVD,可移动磁盘,U盘)存储和执行它们。

  7. 使应用程序为只读。

    由于AppImage在设计上是只读的,因此用户可以合理确定应用在操作过程中不会对其自身进行修改。

  8. 不需要重新编译。

    必须能够从现有的二进制文件创建AppImage,而无需重新编译。由于不需要编译器,因此可以极大地加快AppImage的创建过程。这也允许第三方将封闭源应用程序打包为AppImage。(尽管如此,对于上游应用程序开发人员来说,专门为生成AppImage而从源代码进行构建可能是有益的。)

  9. 保持基本操作系统不变。

    由于AppImages旨在在管理员未特别准备的普通系统上运行,因此AppImages可能不需要任何特殊的基本操作系统准备。因此,它们不能依赖特殊的内核补丁,内核模块或默认情况下不随目标发行版附带的任何应用程序。

  10. 不需要root。

    由于AppImage是由最终用户运行的,因此它们不应要求安装或使用的管理帐户(根)。但是,如果需要,它们可以由管理员安装(例如,在多用户方案中)。


4
appimage如何在两次启动之间保留设置?
Dan Dascalescu

1
您能否详细介绍一下“只读”功能?我可以将更改保存在AppImage中吗?还是像LiveCD那样使它们失去生命?
vstepaniuk

2
@DanDascalescu:您的问题值得在AskUbuntu上提出一个完整的问题,而不仅仅是评论。你会问吗?
Kurt Pfeifle

@vstepaniuk:您的问题类似于Dan的问题。你们其中一个应该把它当作一个“完整”的问题来问,而不仅仅是在评论中……
Kurt Pfeifle

1
@KurtPfeifle:因为您不想继续自己问问... :)
Dan Dascalescu

22

这两个系统之间的基本思想可能相似,但是快照和Appimages之间存在一些设计差异。

我想到的一些“大”问题是:

  1. 安全局限性。快包运行在沙盒中,他们是不允许逃避它,达到他们应该在系统的其他部分碰。这是与权限系统并行运行的更强的安全层。显然,在开始(以及以后)进行处理时会感到有些沮丧,但是,如果从系统管理的角度考虑它,这就是管理员希望其用户使用的东西。

  2. 安全。安装从网上获取的软件与在街上舔pole杆一样安全。有时什么也没发生,有时会遇到一些非常大的健康问题。Snap软件包具有其适当的存储库,该存储库由Canonical控制,例如常用的标准Ubuntu存储库。您可以继续.deb从周围安装文件,但这将是您的选择,而不是设计问题。

  3. 安装。AppImage相当于“便携式Windows可执行文件”。所有的库都是独立的,任何用户都可以下载并执行其中一个库。另一方面,snap程序包是正确的程序包,需要通过apposite程序包管理器(以root或与sudo)安装(snap install tic-tac-toe抛出错误:它需要sudo!)

  4. 删除。要删除快照软件包,您需要使用snap remove ...具有正确权限的软件包管理器。另一方面,Appimages只是“那里”。因此,任何用户都不希望该Appimage吗?他/她只是删除了文件,但文件不见了。

尽管我强烈建议在使用Appimages时要谨慎,但我本人还是亲自使用其中的一些。

我发现它们在我没有root访问权限(只有管理员可以访问)的工作系统上特别有用,但是我需要开发人员以Appimage形式提供的特定软件的最新版本。

我担心其中确实包含一些恶意代码,因此我尽可能地检查了发布者的身份。我不确定该软件是否良性,但我已百分百地做到了。


2
基本上,每个人都在尝试在Linux上实现OSX应用程序打包,但是没有实现。
OrangeDog

2
我不知道它是如何工作的:)当然,Snap和Appimages不能与在许多其他软件之间共享的许多依赖项的软件一起很好地工作。它们对于已经具有独立功能的软件或几乎没有依赖性非常好,但是这样做的风险是要拥有执行相同任务的同一个库的许多副本,例如在Windows中。这应该在快照程序包中解决(依赖快照库的软件会使用该版本安装该库,然后,与通常的系统一样,另一个需要相同库版本的软件可能会使用它)。
dadexix86 '16

OSX(和iOS)应用程序的工作方式类似于AppImage(只需下载单个文件并运行),但具有快照的沙盒安全性。
OrangeDog

OSX试图摆脱这些限制,只允许从其商店进行安装。
LtWorf

AppImage实际上应该包含“沙箱”选项。希望我们将来会看到。
罗伊

20

在运行AppImage之前,需要使其成为可执行文件。这是Linux安全功能。使AppImage可执行的主要方法有两种:

1.使用GUI

如何使AppImage可执行

要么

2.在命令行上

chmod a+x Some.Appimage

现在,双击您的文件以运行它,或者右键单击>运行


15

尽管snap仅专注于Ubuntu,但AppImage是跨发行版的,还可以在Fedora,debian,openSUSE,CentOS等上运行。

AppImage不需要Linux发行版的运行时或基础结构支持,因此可以在任何地方运行。它使应用程序作者能够像Windows和OS X一样直接将其软件交付给Linux用户。无需Canonical或“软件作者”与最终用户之间的任何其他人。

如果以AppImage格式提供了应用程序,则用户可以访问原始作者的网站进行下载,例如,来自https://musescore.org/en/download的 MuseScore 。使AppImage可执行(使用文件管理器或chmod a+x ./yourAppImage),然后只需双击即可运行该应用程序。


因此,如果我想安装Leafpad,是否要单击“设置我”?那会发生什么呢?以及如何卸载AppImage?我在看bintray.com/probono/AppImages,但没有找到答案。如果您不介意,则可以编辑答案以包括信息以及您认为用户可能想知道的其他信息。
DK Bose

2
不确定这是否也是您的解决方案-但16.04源码中提供了leafpad可用(版本:0.8.18.1)。bintray提供的Leafpad版本仅为0.8.17-甚至更老。
dufte '16

1
的确如此,但是对于只想测试水域的人来说,就像该网站所说的那样,它是一种“ Hello,World”类型的事物。
DK Bose

优秀的。之后,您只需双击即可。那就是我所需要的!
Dawoodjee

5

AppImage需要FUSE才能运行。用户空间中的文件系统(FUSE)是一种允许非root用户安装文件系统的系统。

安装保险丝

许多发行版都具有开箱即用的有效FUSE设置。但是,如果它对您不起作用,则可能需要手动安装和配置FUSE。

例如,在Ubuntu上:

sudo apt-get install fuse
sudo modprobe fuse
sudo usermod -a -G fuse $USER

例如,在openSUSE上:

sudo zypper install fuse

倒退

如果您不想安装FUSE,则可以装载或提取AppImage。

要挂载AppImage并运行应用程序,只需运行

sudo mount -o loop Some.AppImage /mnt
/mnt/AppRun

如果这样不起作用,则可能具有实验性的2型AppImage。这些要求您传递-o offset=...mount命令。使用AppImage运行--appimage-offset以找到正确的偏移量编号。


在写完第三行(sudo usermod -a -G fuse)后加上我的用户名之后,我一直得到 usermod: group 'fuse' does not exist...关于为什么的任何想法?
马丁

嗨@Martin,在Ubuntu上。如果您尝试在x86_64(64位)系统中运行i686(32位)AppImage,除非安装了32位库,否则将出现该错误。您可能应该指定下次尝试运行的操作系统和应用程序以获得帮助。
狮子座

嗨,@ Leo,那是很久以前的事,但是我只是sudo apt-get install fuse sudo modprobe fuse sudo usermod -a -G fuse $USER在Windows 10 64上输入了几行。我要评论的答案没有任何32/64规范,而且我看不到应该在哪里指定该规范或为什么...
马丁

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.