一般我們要安裝
Flatpak程式,都是透過flatpak install
的方式,從Flathub儲存庫下載程式。
不過,使用者也可以自行將Flatpak打包成可攜式軟體,方便在沒有網路的Linux電腦離線安裝,或是於Flathub上架前先行給部份人員測試。
目前Flatpak版本1.15.6,官方文件提供二種方法,「Bundles」和「Create-usb」。本文將提供實際操作例子,看看他們的異同。
請注意:
不論是哪種方法,你都不能用本文講的作法「雙開」程式,因為Flatpak程式可能還是會將資料存到同一個目錄下。
打包程式不會連程式資料一同打包。
Flatpak僅能滿足「可攜式」(portable)、「離線安裝」(offline installation)的要求,但不能「免安裝點二下直接執行」。要跑Flatpak程式的電腦必須安裝Flatpak本體,用以管控Flatpak套件。
自行打包的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的作法。
- 打包指令會用到
flatpak build-bundle
,格式如下
flatpak build-bundle [選項...] 儲存庫路徑 輸出檔名 應用程式域名 [分支]
- 假設我們的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。
- 所以打包指令會變這樣,在目前的目錄輸出一個名為
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
- 將
gimp.flatpak
傳送到另一台B電腦,B電腦就可以用flatpak --user install
指令安裝。
flatpak --user install gimp.flatpak
- 或者僅將其匯入到B電腦的儲存庫
flatpak build-import-bundle ~/.local/share/flatpak/repo gimp.flatpak
安裝的時候,Flatpak會自動下載B電腦需要的runtime。
安裝後用
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電腦安裝。
flatpak-create-usb
指令用法:
flatpak create-usb [選項...] 掛載路徑 參照...
- 首先要在A電腦加入收藏(Collection) ID。
flatpak --user remote-modify --collection-id=org.flathub.Stable flathub
- 用
flatpak --user list
,確認GIMP的應用程式域名為org.gimp.GIMP
。用以下指令,將目前使用者的GIMP,打包到目錄~/Downloads/gimp
flatpak --user create-usb ~/Downloads/gimp org.gimp.GIMP
- 壓縮檔案
cd ~/Downloads/gimp
zip -r gimp.zip gimp
- 傳送到B電腦,解壓縮。
unzip -l gimp.zip
- B電腦同樣要加入收藏ID。不加這個的話Flatpak會連上網路下載,無視我們打包的Flatpak程式。
flatpak --user remote-modify --collection-id=org.flathub.Stable flathub
- B電腦安裝該程式的時候需要使用
--sideload-repo
指定儲存庫所在位置
flatpak --user install --sideload-repo=/home/user/Downloads/gimp/.ostree/repo flathub org.gimp.GIMP
可以看到即使沒有網路,Flatpak仍能完成安裝。
未來使用
flatpak update
指令的時候,也可以加入--sideload-repo
指定使用特定儲存庫。