繃不住了,我決定安裝Snap… 在Linux社群常被一部分人批評的Ubuntu Snap套件管理系統,常常遭人吐槽還不如用Flatpak。
但我還是裝了Snap。起因是二台電腦一邊使用Gentoo,一邊使用Arch Linux,兩邊Hugo版本不一致,我擔心以後生成部落格網頁會出問題,因此採用Snap來統一Hugo版本。
這讓人想到,Ubuntu Linux的Snap套件管理系統真的有那麼壞嗎?讓我們一瞧運作原理,並實際安裝Snap軟體到系統看看執行效果。
1. Snap套件管理系統介紹
Snap是什麼呢?Snap全名為Snappy,這個套件管理系統是為了解決跨Linux發行版軟體安裝而出現,保證任何發行版都安裝一致的軟體版本。甚至在舊版本Ubuntu也可以用Snap安裝最新版軟體,而不至於弄壞套件依賴。
Snap分成幾個部份組成:
- Snap:套件打包格式,附檔名為
.snap
。 - SnapCraft:Snap的打包程式,同時也是預覽Snap軟體的網站名稱。
- Snapd:管理Snap套件的常駐程式,需要systemd、AppArmror、cgroups才能運作。
- Snap Store:軟體庫,或稱軟體商店,本身也是一個Snap軟體。
首先,因為Snapd依賴systemd來傳遞指令,所以無法安裝在採用其他init系統的Linux發行版,例如runit的Artix、OpenRC的Alpine。
再來看看Snap的打包架構。Snap是把軟體的依賴套件都包在一起,變成一個個的loop device,安裝後掛載在系統上,架構如下圖:
Snap軟體預設有沙盒隔離的作用。使用者可以在軟體商店的管理界面,控制軟體的存取權限,像是允許存取使用者家目錄、使用網路連線等權限。更深一步的說,Snap軟體會透過Snapd提供的一系列界面(Interfaces)來存取系統資源,再配合AppArmor提高安全性。
跟Flatpak主打桌面應用程式不同的是,Snap有提供daemon的界面,因此伺服器的系統程式和桌面環境也可以打包成Snap格式,像普通軟體一樣跑系統服務。然而Snapd安裝應用程式還是需要sudo,不像Flatpak可允許一般用戶免root權限安裝軟體。
在軟體來源方面,SnapCraft目前是唯一的「官方」Snap軟體庫,商店前端有Snap Store,上架軟體需要註冊Ubuntu One帳號。開發者可以提供穩定和測試的更新頻道,讓使用者選擇要下載什麼版本的軟體。
不過Snap Store跟Flathub一樣,無法保證上架的軟體都是開源軟體,且有混入惡意軟體的可能性。為此Canonical宣佈會給上架的軟體進行自動化測試,盡量排除惡意軟體。
直到2022年,Ubuntu官方延伸版本都預裝了Snap,包含Kubuntu、Lubuntu、Xubuntu。
但是基於Ubnutu開發的發行版Linux Mint、ZorinOS、elmentaryOS、KDE neon並無跟進內建Snap。
Manjaro現在有內建Snap了。
2. 如何安裝Snapd
如上所述,Snapd目前只有少數發行版內建,因此沒內建的發行版要自行安裝。
Gentoo可從官方軟體庫編譯Snapd,Arch Linux則是要透過AUR安裝Snapd。
- 如果Linux系統是後來才安裝Snapd的,建議一併安裝
AppArmor
,並加入開機服務:
|
|
- 編輯
/etc/default/grub
,在GRUB開機參數啟用AppArmor:
|
|
- 更新GRUB設定:
|
|
- 再將Snapd加入開機服務:
|
|
- 重開機後便可以開始安裝Snap軟體了。
3. 如何安裝Snap軟體
推薦安裝Snap Store,方便以圖形化方式安裝SnapCraft上的軟體。
使用此指令安裝Snap Store:
|
|
Snap Store是從GNOME Software修改來的,界面十分類似。
搜尋框可以找到SnapCraft上的軟體,沒有圖形界面的靜態網頁產生器"Hugo"也可以在這裡下載。
有趣的是SnapCraft的網頁會顯示下載此軟體的用戶國家,和他們使用的發行版。
下載後會多出權限按鈕(Permission),在這裡可控管該軟體的權限。
在安裝軟體後才可以評分,而且評論要有一定字數。額…不過Hugo的評分似乎不太好的說。
像Hugo這種沒有圖形界面的Snap軟體,要怎麼從終端機執行呢?請看下面的指令使用說明。
4. Snap相關指令用法
更新全部的Snap軟體:
|
|
搜尋SnapCraft上的軟體:
|
|
安裝Snap軟體:
|
|
解除安裝Snap軟體並刪除資料:
|
|
執行Snap軟體:
|
|
可以看到執行Snap軟體需要多加snap run
的指令,且會略有延遲。因此使用者要自行將Snap的軟體安裝路徑/snap/bin
加到$PATH
,或是手動建立軟連結,避免某個Snap軟體作為其他軟體的依賴卻顯示找不到的情況。
5. 為什麼Snap會惹人嫌?
因為他是Canonical推動的,在嵌入式Ubuntu Core率先應用Snap技術,才拓展到桌面版上,Ubuntu 16.04以後基本上都有預裝Snap了。但裝了沒人用怎辦?Ubuntu在22.04以後,會自動把apt install
指令重新導向到Snap版本。比方說安裝Firefox,會自動把apt install firefox
轉換成snap install firefox
。如果你硬要禁止APT安裝Snapd,套件依賴還會因此崩掉。
此外,網友批評Snap Store後端伺服器並非開源,且完全由Ubuntu掌控,上架軟體還要註冊Ubuntu One帳號,早期資料跟AppStream不互通。這是跟Flatpak的Flathub十分不一樣的地方。
在此之外還有應用程式啟動速度變慢,會在系統上建立一堆loop device等缺點,有人不喜歡自己的磁碟結構變那麼複雜嘛。
6. 實際用了Snap之後的比較
就Hugo生成網頁的速度來看,原生版(左)與Snap版(右)的速度差距並不大。
八卦是Snap的Hugo版本比Gentoo(!)和Arch Linux(!!)還要新:O。
雖然受到批評,但Snap軟體數量確實是有在增加的,常見的Linux辦公軟體都開始有了Snap版本。在架設雲端的時候,我發現Snapd可以大大簡化Nextcloud的安裝程序,且很多非開源的軟體都逐步出現在Snap Store,連foobar2000都在Snap Store上架了(雖然只是跟Wine包在一起)。
不過就Gentoo來說,我還是比較偏好用Flatpak安裝桌面應用程式,Snap用來安裝系統應用程式,為的都是求穩定和版本一致。而Arch Linux因為AUR太方便,Snap反而沒那麼必要了。