目录
在 Ubuntu(22.04 之前)、Debian 及其衍生产品上设置 FUSE 2.x
在最近的 Ubuntu (>=22.04)、Debian 及其衍生产品上设置 FUSE 2.x 和 FUSE 3.x
在 Chromium OS、Chrome OS、Crostini 或其他衍生产品上设置 FUSE
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 fuse3
ii 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 fuse3
ii fuse3
fuse3
如果您的发行版没有使用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_64
/ amd64
toi386
或arm64
to 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