我遇到一些與「FUSE」相關的錯誤
AppImage 需要一項稱為 Filesystem in Userspace*(簡稱 *FUSE)的 Linux 技術。多數系統都預裝可用的 FUSE 設定,但有時仍會無法正常運作。本節說明幾種可修正常見問題的解決方案。
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 是有原因的。