AppImage

目次:

  • 簡介
  • 使用者指南
    • 常見問題集
    • 執行 AppImage
    • 使用可移植模式
    • 給 macOS 使用者轉換到 AppImage
    • 疑難排解
      • 我遇到一些與「FUSE」相關的錯誤
      • 我在使用基於 Electron 的 AppImage 與其沙箱時遇到問題
  • Packaging Guide
  • 參考
  • 聯絡方式
AppImage
  • 使用者指南
  • 疑難排解
  • 我遇到一些與「FUSE」相關的錯誤
  • Edit on GitHub
Previous Next

我遇到一些與「FUSE」相關的錯誤

AppImage 需要一項稱為 Filesystem in Userspace*(簡稱 *FUSE)的 Linux 技術。多數系統都預裝可用的 FUSE 設定,但有時仍會無法正常運作。本節說明幾種可修正常見問題的解決方案。

目次

  • AppImage 告訴我需要 FUSE 才能執行

  • 如何安裝 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 類 AppImage

    • 掛載或解壓第 1 類 AppImage

  • FUSE 與 Docker

AppImage 告訴我需要 FUSE 才能執行

有時 AppImage 會在主控台輸出下列訊息:

AppImage 需要 FUSE 才能執行。
若您以 --appimage-extract 選項執行,
仍可能可以解壓此 AppImage 的內容。
請參閱 https://github.com/AppImage/AppImageKit/wiki/FUSE
以取得更多資訊

此情況表示您的系統上 FUSE 未正確設定。您需要 安裝 FUSE 才能修正問題。

備註

嘗試執行非針對您平台建置的 AppImage 時,即使在執行本平台建置的 AppImage 沒問題,也可能會看到此訊息。請參閱 這些指引 了解如何修正。

如何安裝 FUSE

多數 Linux 散布版預設具備可用的 FUSE 2.x 設定。若無法運作,您可能需要自行安裝並設定 FUSE 2.x。

FUSE 的安裝流程會因散布版而異。本節說明在最常見的散布版上如何安裝 FUSE。

備註

若您的散布版未列出,請向該散布版的開發者索取指引。

在 Ubuntu(22.04 之前)、Debian 及其衍生版本設定 FUSE 2.x

警告

此段僅適用於 未 預設安裝 fuse3 的散布版。為確定是否已安裝 fuse3 套件,可在終端機執行 dpkg -l | grep fuse3,並確認是否有以 ii  fuse3 開頭的列。

若您的散布版使用 fuse3,請參閱 下一節。

安裝必要的軟體包:

> sudo apt-get install libfuse2

備註

在 Ubuntu 24.04 中,libfuse2 套件已更名為 libfuse2t64。

現在 FUSE 應可運作。在某些較舊的散布版上,您還需要額外設定:

確保已載入 FUSE 核心模組:

> sudo modprobe -v fuse

接著新增所需的群組(通常會由安裝命令建立;若已存在,這個指令 會 失敗),並將自己的使用者帳號加入該群組:

> sudo addgroup fuse
> sudo adduser $USER fuse

備註

將使用者加入群組後,必須登出再登入,變更才會生效!

在近期的 Ubuntu(>=22.04)、Debian 及其衍生版本上同時設定 FUSE 2.x 與 FUSE 3.x

警告

此段僅適用於非常新的(截至 2022 年 4 月)且預設安裝 fuse3 的散布版。為確定是否已安裝 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 位元 AppImage(例如從 x86_64/amd64 到 i386,或從 arm64 到 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

安裝必要的軟體包:

sudo pacman -S fuse2

不過常見的問題是 fusermount 執行檔的權限可能不正確。幸好有簡單的修正方式:

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

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

備援方案(若 FUSE 無法運作)

若您不想(或無法)設定 FUSE,仍有備援方案。視 AppImage 類型而定,您可以掛載 AppImage,或解壓後執行其內容。

解壓並執行第 2 類 AppImage

目前多數 AppImage 都是第 2 類。若無法使用 FUSE,最簡單的做法是先解壓,再執行其內容。

警告

為了執行內容而解壓 AppImage 的成本較高,只有在沒有其他選擇時才建議這麼做。

AppImage 執行階段內建一項稱為「extract-and-run」的功能。它會解壓 AppImage、執行內容、等待程式關閉,然後再清理檔案:

# 使用參數
./my.AppImage --appimage-extract-and-run [...]

# 使用環境變數(通常也會轉傳給 AppImage 子行程)
# 注意:此功能是在引入參數後一段時間才實作
# 對較舊的 AppImage,可能仍需使用參數
export APPIMAGE_EXTRACT_AND_RUN=1
./my.AppImage [...]

# 如需多次執行 AppImage,可選擇停用清理
export APPIMAGE_EXTRACT_AND_RUN=1
env NO_CLEANUP=1 ./my.AppImage

若您使用非常舊的 AppImage(亦即使用了在「extract-and-run」實作之前的執行階段),可手動解壓:

./my.AppImage --appimage-extract
# 內容會被解壓到目前工作目錄中的 "squashfs-root" 資料夾
# 現在可執行 "AppRun" 入口點
squashfs-root/AppRun [...]
# 如有需要,可再次清理該資料夾
rm -r squashfs-root/

掛載或解壓第 1 類 AppImage

若 前一節 所述流程無法運作,您可能使用的是第 1 類 AppImage。

第 1 類 AppImage 是一般的 ISO9660 檔案,因此可以 loop 掛載。請注意,這需要 root 權限。

sudo mount -o loop my.AppImage /mnt
# 現在可執行內容
/mnt/AppRun
# 完成後可再次卸載 AppImage
sudo unmount /mnt

您也可以改為解壓 AppImage,使用 AppImageExtract,或使用支援 ISO9660 映像的解壓工具(例如 bsdtar):

# 安裝 bsdtar
sudo apt install libarchive-tools
# 建立目標目錄
mkdir AppDir
# 將內容解壓到新目錄
cd AppDir
bsdtar xfp .../my.AppImage
# 現在可執行入口點
./AppRun

FUSE 與 Docker

多數 Docker 安裝基於安全考量不允許在容器內使用 FUSE。您可以改依 前一節 所述,解壓並執行 AppImage。

警告

網路上有很多建議說「只要加上 --cap-add SYS_ADMIN --cap-add MKNOD --device /dev/fuse:mrw 就能運作」。但這樣做並不安全。Docker 預設不支援 FUSE 是有原因的。

Previous Next

© Copyright 2018-2022, The AppImage project. Revision 475547d.

Built with Sphinx using a theme provided by Read the Docs.