Linux系統的Snappy是什麼?跨發行版套件管理員使用介紹

繃不住了,我決定安裝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,安裝後掛載在系統上,架構如下圖:

來源: https://blog.imi.pmf.kg.ac.rs/univerzalni-paket-menadzeri-deo-ii/

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。

  1. 如果Linux系統是後來才安裝Snapd的,建議一併安裝AppArmor,並加入開機服務:
1
sudo systemctl enable apparmor
  1. 編輯/etc/default/grub,在GRUB開機參數啟用AppArmor:
1
GRUB_CMDLINE_LINUX_DEFAULT="lsm=landlock,lockdown,yama,integrity,apparmor,bpf"
  1. 更新GRUB設定:
1
sudo grub-mkconfig -o /boot/grub/grub.cfg
  1. 再將Snapd加入開機服務:
1
2
sudo systemctl enable snapd.apparmor
sudo systemctl enable snapd
  1. 重開機後便可以開始安裝Snap軟體了。

3. 如何安裝Snap軟體

推薦安裝Snap Store,方便以圖形化方式安裝SnapCraft上的軟體。

使用此指令安裝Snap Store:

1
sudo snap install snap-strore

Snap Store是從GNOME Software修改來的,界面十分類似。

搜尋框可以找到SnapCraft上的軟體,沒有圖形界面的靜態網頁產生器"Hugo"也可以在這裡下載。

有趣的是SnapCraft的網頁會顯示下載此軟體的用戶國家,和他們使用的發行版。

下載後會多出權限按鈕(Permission),在這裡可控管該軟體的權限。

在安裝軟體後才可以評分,而且評論要有一定字數。額…不過Hugo的評分似乎不太好的說。

像Hugo這種沒有圖形界面的Snap軟體,要怎麼從終端機執行呢?請看下面的指令使用說明。

4. Snap相關指令用法

更新全部的Snap軟體:

1
sudo snap refresh

搜尋SnapCraft上的軟體:

1
snap search hugo

安裝Snap軟體:

1
snap install hugo

解除安裝Snap軟體並刪除資料:

1
sudo snap remove hugo

執行Snap軟體:

1
snap run hugo

可以看到執行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反而沒那麼必要了。

參考資料


感謝您的閱讀。歡迎分享Ivon的部落格(ivonblog.com)的文章,引用或轉載請註明文章網址,並遵守創用CC-姓名標示-非商業性-禁止改作 4.0 國際授權條款。如需商業使用請來信告之。

written by human, not by AI

如果本網站文章對您有幫助,歡迎請我喝杯珍珠奶茶。

留言板

點選按鈕,選擇您覺得方便的留言系統。要討論程式碼請用Giscus,匿名討論請用Disqus。

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

這是Disqus留言板,您可能會看到Disqus投放的廣告。無論有無登入皆可留言。此處留言只有本站參與者看得到。若您選擇以訪客身份匿名留言,就不會收到後續回覆通知。