Running x86_64 Flatpak apps on arm64 platform using qemu-static.
有些Flatpak軟體打包的時候只有x86_64版本,沒有顧及ARM64 (aarch64) 平台的需求,像是著名的Firefox,還有轉譯Windows exe的Wine。
這個時候可以利用Flatpak自身的模擬功能來執行,如果你的系統有安裝qemu-user套件,Flatpak就會利用Linux核心的binfmt功能,模擬執行異質架構的程式。這樣就可以在aarch64架構的系統跑x86_64架構的程式,反之亦然。
1. 安裝qemu-user套件#
以ARM架構的系統來說,這些套件似乎在Debian與Ubuntu系的系統才有收錄的樣子,Arch Linux ARM沒有這些套件。
以Raspberry Pi OS Bookworm為例子,安裝以下套件,包含x86與ARM架構的QEMU模擬器。
sudo apt install qemu-user-static qemu-system-x86 qemu-system-aarch64
確認systemd-binfmt服務狀態
sudo systemctl enable --now systemd-binfmt
sudo systemctl status systemd-binfmt
2. 模擬執行x86_64程式#
請注意,qemu-user效能比Box64/Box86轉譯差勁許多,不要期望有GPU加速。
可惜的是,Firefox這類大型程式在qmeu模擬時會有許多依賴的函式庫找不到,所以我使用簡單的KDE時鐘來做示範。
從套件管理器安裝Flatpak
因為現在是跑在aarch64架構上,所以要指定下載x86_64版本的程式
flatpak install --arch=x86_64 org.kde.kclock
- 執行的時候指定架構,並加上verbose看錯誤訊息
flatpak run --arch=x86_64 org.kde.kclock
- 稍微等了一陣子才跑出來。