快轉到主要內容

離線安裝Flatpak應用程式,比較Bundles與Create-usb打包方法

Linux系統 Linux使用技巧 Flatpak
🗓️ 民國112年 癸卯年
✍ 切換正體/簡體字
目錄

一般我們要安裝 Flatpak程式,都是透過flatpak install的方式,從Flathub儲存庫下載程式。

不過,使用者也可以自行將Flatpak打包成可攜式軟體,方便在沒有網路的Linux電腦離線安裝,或是於Flathub上架前先行給部份人員測試。

Flatpak打包者辛酸畫面流出。此圖使用Stable Diffusion生成。

目前Flatpak版本1.15.6,官方文件提供二種方法,「Bundles」和「Create-usb」。本文將提供實際操作例子,看看他們的異同。

請注意:

  1. 不論是哪種方法,你都不能用本文講的作法「雙開」程式,因為Flatpak程式可能還是會將資料存到同一個目錄下。

  2. 打包程式不會連程式資料一同打包。

  3. Flatpak僅能滿足「可攜式」(portable)、「離線安裝」(offline installation)的要求,但不能「免安裝點二下直接執行」。要跑Flatpak程式的電腦必須安裝Flatpak本體,用以管控Flatpak套件。

  4. 自行打包的Flatpak,可能無法透過flatpak update自動更新。

如果想要免安裝直接跑還得用 AppImage。但正如我在 Flatpak優缺點一文所說的,Flatpak內建更多依賴套件,跨發行版的效果比AppImage好。

1. Single-file bundles(.flatpak)
#

參考: Single-file bundles - Flatpak documentation flatpak-build-bundle(1) command reference

此方法將會把Flatpak程式打包成一個.flatpak結尾的檔案,稱作bundles,供人下載安裝。勿跟.flatpakref搞混。

這個比較像是給開發人員打包用的,手上有原始碼就可以打包。例如LibreOffice、翻牆程式「迷霧通」就有用此種格式分發。

一般使用者也可以從Flathub安裝程式,自行打包成.flatpak檔案。

儘管.flatpak格式檔案較小,但這個指令是做半套,它不含有AppStream資料(GNOME Software、KDE Discover的商店評分),也不會把runtime一同打包進去。

所以真要純離線安裝的話,Flatpak官方文件比較推薦Create-usb的作法。


  1. 打包指令會用到flatpak build-bundle,格式如下
flatpak build-bundle [選項...] 儲存庫路徑 輸出檔名 應用程式域名 [分支]
  1. 假設我們的A電腦已經裝有GIMP修圖程式,從Flathub安裝的,現在要把它打包成.flatpak,傳送到B電腦安裝。

該程式自然是參照Flathub儲存庫(repo),那麼它的儲存庫路徑位於~/.local/share/flatpak/repo(個別使用者)或/var/lib/flatpak/repo(系統)

flatpak --user list指令得知GIMP的應用程式名稱為org.gimp.GIMP

Flahub預設會安裝穩定stable分支的程式

--arch指定打包x86_64架構的程式

--from-commit可以不填,預設抓最新版程式

加上我們希望它安裝後自動按照者的環境自動更新對應runime,設定將--repo-url--runtime-repo的儲存庫指向Flathub。

  1. 所以打包指令會變這樣,在目前的目錄輸出一個名為gimp.flatpak的檔案
flatpak build-bundle \
    ~/.local/share/flatpak/repo\
    gimp.flatpak \
    org.gimp.GIMP \
    stable \
    --arch=x86_64 \
    --repo-url=https://flathub.org/repo/flathub.flatpakrepo \
    --runtime-repo=https://flathub.org/repo/flathub.flatpakrepo
  1. gimp.flatpak傳送到另一台B電腦,B電腦就可以用flatpak --user install指令安裝。
flatpak --user install gimp.flatpak
  1. 或者僅將其匯入到B電腦的儲存庫
flatpak build-import-bundle ~/.local/share/flatpak/repo gimp.flatpak
  1. 安裝的時候,Flatpak會自動下載B電腦需要的runtime。

  2. 安裝後用flatpak --user install指令觀察,可看到GIMP的「來源」顯示gimp1-origin而非flathub。這可能會導致GNOME應用商店混亂,認不到使用者安裝的程式。

2. Create-usb
#

參考: USB Drives - Flatpak documentation flatpak-create-usb(1) command reference

此方法會把Flatpak程式打包成一個目錄,包含ostree儲存庫、runtime在內。

儘管指令叫做create-usb,你還是可以打包到任意目錄,不一定要存到隨身碟。

跟bundles比起來,create-usb打包是完整的,但檔案也很大。目前沒看過有開發者這樣分發Flatpak應用程式的,這個功能應該是給個人使用居多。


這裡我們要用create-usb,將A電腦的GIMP(從Flathub安裝的)打包,再手動壓縮,傳到B電腦安裝。

  1. flatpak-create-usb指令用法:
flatpak create-usb [選項...] 掛載路徑 參照...
  1. 首先要在A電腦加入收藏(Collection) ID。
flatpak --user remote-modify --collection-id=org.flathub.Stable flathub
  1. flatpak --user list,確認GIMP的應用程式域名為org.gimp.GIMP。用以下指令,將目前使用者的GIMP,打包到目錄~/Downloads/gimp
flatpak --user create-usb ~/Downloads/gimp org.gimp.GIMP
  1. 壓縮檔案
cd ~/Downloads/gimp
zip -r gimp.zip gimp
  1. 傳送到B電腦,解壓縮。
unzip -l gimp.zip
  1. B電腦同樣要加入收藏ID。不加這個的話Flatpak會連上網路下載,無視我們打包的Flatpak程式。
flatpak --user remote-modify --collection-id=org.flathub.Stable flathub
  1. B電腦安裝該程式的時候需要使用--sideload-repo指定儲存庫所在位置
flatpak --user install --sideload-repo=/home/user/Downloads/gimp/.ostree/repo flathub org.gimp.GIMP
  1. 可以看到即使沒有網路,Flatpak仍能完成安裝。

  2. 未來使用flatpak update指令的時候,也可以加入--sideload-repo指定使用特定儲存庫。

相關文章

Linux應該用何種方法安裝應用程式,談談我的軟體安裝偏好來源
Linux系統 Linux使用技巧 Linux Flatpak
雙顯卡Linux筆電很耗電?用EnvyControl切換Nvidia獨顯,還可以省電
Linux系統 Linux使用技巧 Nvidia Linux openSUSE
Linux透過圖形界面設定靜態IP & 修改DNS伺服器,加快上網速度
Linux系統 Linux使用技巧 DNS Ubuntu Arch Linux

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。