appImage linux 上可执行文件 简介

  • Post author:
  • Post category:linux

目录

A. 什么是AppImage?

B. 在linux系统中如何使用AppImage

C. 如何删除软件

D. 在linux系统中使用AppImage文件的注意事项

1.桌面集成

2. 如果卸载软件的话桌面继承需要手动清理

3. 存放到适当位置

4.并不总是需要保持更新

5. FUSE问题

在 Ubuntu(22.04 之前)、Debian 及其衍生产品上设置 FUSE 2.x

在最近的 Ubuntu (>=22.04)、Debian 及其衍生产品上设置 FUSE 2.x 和 FUSE 3.x

在 openSUSE 上设置 FUSE 2.x

在 CentOS 和 RHEL 上设置 FUSE

在 Clear Linux OS 上设置 FUSE

在 Chromium OS、Chrome OS、Crostini 或其他衍生产品上设置 FUSE

在 Arch Linux 上设置 FUSE

回退(如果无法使 FUSE 工作)

提取并运行类型 2 AppImages

挂载或提取类型 1 AppImages

FUSE 和 Docker


A. 什么是AppImage?

在linux系统中使用AppImage

多年以来,我们一直使用 DEB packages 来管理 Debian/Ubuntu的软件包,使用 RPM 管理 Fedora/SUSE 的软件包.

用户使用这些包管理工具可以很方便的安装软件, 但是这些仍然满足不了开发人员的需求. 开发人员不得不开发更多的工具. 这时AppImage来到了我们面前.

AppImage 使用通用的软件格式,通过将整个软件打包成AppImage,一个包包含了所有的功能. 并且几乎可以在所有的linux发行版本中使用。

AppImage 不需要像传统的那样安装。

通常我们安装linux软件将会在不同的目录生成多个文件,并且需要root权限来对系统进行修改。

AppImage 不需要这么做。事实上,AppImage 并不需要安装。AppImage 是一个压缩的镜像文件,它包含所有运行所需要的依赖和库文件。

你可以直接执行AppImage 文件不需要安装。当你把AppImage 文件删除,整个软件也被删除了。你可以把它当成windows系统中的那些免安装的exe文件。

下面会列出一些AppImage的特性或者优点

  • 可以运行在各种平台
  • 不需要安装,直接执行
  • 不需要root权限,不需要修改系统文件
  • 便携性:可以在位置执行
  • App 只读
  • 卸载便利,只需要删除AppImage文件即可

B. 在linux系统中如何使用AppImage

使用AppImage 文件非常简单,只需要三个步骤:

  • 下载AppImage 文件
  • 赋予可执行权限
  • 双击或者在命令行中执行

下面我将将演示如何在Ubuntu16.04中使用AppImage:

步骤一:下载AppImage文件

有许多的软件被打包成了AppImage 格式,你可以在找到他们。

我会使用 OpenShot video editor进行演示. 你可以在这个网站进行下载.

步骤二:赋予执行权限

下载下来的AppImage 文件通常默认没有可执行权限,只需要普通用户(不需要root权限)给与其可执行权限即可。

如果你更喜欢使用图形界面,可以在AppImage图标上右击选择属性。
右键选择属性
然后在下一个页面选择“Allow executing file as program”
在这里插入图片描述

或者如果你更喜欢命令行,可以使用chmod u+x 。

步骤三: 执行 AppImage 文件

一旦你给与它可执行权限,只需要双击即可执行。 nice

C. 如何删除软件

因为软件并没有被安装,所以也不存在卸载一说。只需要删除AppImage 文件即可。

D. 在linux系统中使用AppImage文件的注意事项

1.桌面集成

当你运行AppImage文件时,一些软件会弹出提示“install a desktop-file”,如果你选择“是”,你的AppImage文件会被集成到你的Linux系统,就像你通常安装的软件一样。
在这里插入图片描述

这意味着你的软件可以通过Unity或者GNOME进行搜索。并且可以将他添加到Dock中。
在这里插入图片描述

2. 如果卸载软件的话桌面继承需要手动清理

如果你选择了桌面集成,会在你的系统中创建一些文件,这些文件大概几kb。当你删除AppImage的时候,这些文件会遗留在系统中,你需要手动清理它们。

3. 存放到适当位置

下载的AppImage 文件会默认保存到Download文件夹。将这些文件移动到其他的地方,分文件夹存放更好。

同样需要记得的是,如果你选择了桌面集成之后移动AppImage文件的话,你需要先删除桌面文件,否则桌面集成不起作用.

4.并不总是需要保持更新

有可能有一些软件会自动检查更新,然后提示你有最新的版本可用,暂时只有少数软件支持。

在短期内,没有软件自动更新功能,你需要手动找到软件最新版本。

5. FUSE问题

原文参考:I get some errors related to something called “FUSE” — AppImage documentation

以下是翻译:

警告

这仅对默认情况下未安装的发行版有效fuse3。可以肯定的是,检查fuse3包是否已安装,例如,通过在终端中运行并检查以开头的行。dpkg -l | grep fuse3ii  fuse3

如果您的发行版正在使用fuse3,请参阅下一节

安装所需的包:

> sudo apt-get install fuse libfuse2

现在,FUSE 应该可以正常工作了。在一些较旧的发行版上,您将必须运行一些额外的配置步骤:

确保已加载 FUSE 内核模块:

> sudo modprobe -v fuse

然后,添加所需的组(应该由安装命令创建,如果是这种情况,此调用失败),并将您自己的用户帐户添加到该组:

> sudo addgroup fuse
> sudo adduser $USER fuse

笔记

将用户添加到组后,这些用户必须注销并重新登录才能使更改生效!

在最近的 Ubuntu (>=22.04)、Debian 及其衍生产品上设置 FUSE 2.x 和 FUSE 3.x

警告

fuse3这仅对默认安装的最新(截至 2022 年 4 月)发行版有效。可以肯定的是,检查fuse3包是否已安装,例如,通过在终端中运行并检查以开头的行(如果没有,则您的发行版未使用)。dpkg -l | grep fuse3ii  fuse3fuse3

如果您的发行版没有使用fuse3,请参阅上一

安装所需的包:

> sudo apt install libfuse2

现在,FUSE 2.x 应该可以与 FUSE 3.x 一起工作,而不会破坏您的系统。

在 openSUSE 上设置 FUSE 2.x

安装所需的包:

> sudo zypper install fuse libfuse2

FUSE 现在应该可以工作了。

在 CentOS 和 RHEL 上设置 FUSE

笔记

以下说明可能已过时。欢迎投稿!

从 EPEL 安装 FUSE:

> yum --enablerepo=epel install fuse-sshfs

现在,将自己添加到相关组以授权自己使用 FUSE:

> usermod -a -G fuse $(whoami)

笔记

将用户添加到组后,这些用户必须注销并重新登录才能使更改生效!

警告

如果您在 64 位系统上并希望运行 32 位 AppImages(例如x86_64amd64toi386arm64to armhf),则必须为这些体系结构安装 FUSE 运行时库。:

> sudo apt-get install libfuse2:i386
> sudo apt-get install libfuse2:armhf

在 Clear Linux OS 上设置 FUSE

在 Clear Linux OS 上,FUSE应该默认启用。但是,如果您仍然看到前面提到的错误消息,您可以尝试以下技巧:

sudo mkdir -p /etc/modules-load.d/
echo "fuse" | sudo tee /etc/modules-load.d/fuse.conf
sudo reboot

也可以看看

GitHub 上也报告了此错误。

在 Chromium OS、Chrome OS、Crostini 或其他衍生产品上设置 FUSE

FUSE 不是开箱即用的。但是,从版本 73 开始,安装它相当容易:

sudo apt install fuse

在 Arch Linux 上设置 FUSE

在 Arch Linux 上,FUSE 应该已经可以工作了。然而,一个常见的问题是fusermount二进制文件的权限可能不正确。幸运的是,有一个简单的解决方法:

# bash, dash, bourne shell:
sudo chmod u+s "$(which fusermount)"

# fish shell:
sudo chmod u+s (which fusermount)

回退(如果无法使 FUSE 工作)

如果您不想(或不能)设置 FUSE,可以使用后备解决方案。根据 AppImage 类型,您可以挂载 AppImage,或解压缩并运行内容。

提取并运行类型 2 AppImages

现在大多数 AppImages 都是类型 2 AppImages。如果 FUSE 不可用,运行此类 AppImage 的最简单方法是将其解压缩,然后运行其内容。

警告

提取 AppImage 以运行其内容非常昂贵。仅当您没有其他选择时才应这样做。

AppImage 运行时有一个内置功能,我们称之为“提取并运行”。它提取 AppImage,运行内容,等待应用程序关闭,然后再次清理文件:

# using a parameter
./my.AppImage --appimage-extract-and-run [...]

# using an environment variable (which is usually forwarded to AppImage child processes, too)
# note that this was implemented a while after we introduced the parameter
# for older AppImages, you might have to use the parameter nevertheless
export APPIMAGE_EXTRACT_AND_RUN=1
./my.AppImage [...]

# optionally, you can disable the cleanup if you need to run the AppImage more than once
export APPIMAGE_EXTRACT_AND_RUN=1
env NO_CLEANUP=1 ./my.AppImage

如果您有一个非常旧的 AppImage(即,它使用的是实施“提取并运行”之前的运行时),您可以手动提取 AppImage:

./my.AppImage --appimage-extract
# the contents are extracted into the directory "squashfs-root" in the current working directory
# you can now run the "AppRun" entry point
squashfs-root/AppRun [...]
# optionally, you can clean up the directory again
rm -r squashfs-root/

挂载或提取类型 1 AppImages

如果上一节中描述的过程不起作用,您可能有一个类型 1 AppImage。

Type 1 AppImages 是常规的 ISO9660 文件。因此,它们可以进行环路安装。请注意,您需要root权限才能这样做。

sudo mount -o loop my.AppImage /mnt
# now, you can run the contents
/mnt/AppRun
# when you're done, you can unmount the AppImage again
sudo unmount /mnt

您也可以提取 AppImage,使用AppImageExtract或使用支持 ISO9660 图像的提取工具(例如,bsdtar):

# install bsdtar
sudo apt install libarchive-tools
# create target directory
mkdir AppDir
# extract the contents into the new directory
cd AppDir
bsdtar xfp .../my.AppImage
# now, you can run the entry point
./AppRun

FUSE 和 Docker

出于安全原因,大多数 Docker 安装不允许在容器内使用 FUSE。相反,您可以按照上一节中的说明提取并运行 AppImages 。

警告

互联网上有很多遵循该方案的建议,“只需添加参数,它就会起作用”。然而,这样做是不安全的。Docker 默认不支持 FUSE 是有原因的。--cap-add SYS_ADMIN --cap-add MKNOD --device /dev/fuse:mrw