Snap是什麼呢?這是Linux系統的一種軟體打包格式兼套件管理系統,由Ubuntu背後的公司Canonical推動。
Snap管理系統是為了解決在不同Linux發行版安裝軟體的問題,將軟體需要的依賴套件都包在一起,即可保證每個發行版都到安裝一致的軟體版本。
甚至在舊版本的Ubuntu LTS系統也可以用Snap安裝到最新版軟體,而不至於弄壞系統套件依賴。
不知道有什麼Snap軟體好裝?你可以先在 Snapcraft瀏覽編輯精選的好用軟體。Snap除了用來裝圖形應用程式之外,也有很多純文字工具提供Snap版本,方便於伺服器環境使用。Snap本身有一套沙盒的權限系統,可進一步增強系統安全性。
本文介紹Snapd與Snap的用法。
1. 安裝Snapd#
Snap軟體依賴「Snapd」來管理套件。Snapd目前只有Ubuntu、Ubuntu Core、Ubuntu touch、Manjaro、openSUSE有內建,如果你使用這些發行版可以跳過這一段。
沒內建Snapd的Linux發行版要自行安裝。Snapd僅支援使用Systemd的Linux發行版,所以Alpine Linux和MX Linux無法裝Snapd。
Gentoo從 官方軟體庫編譯Snapd
Arch Linux透過 AUR安裝Snapd
Fedora 從DNF安裝
如果你的Linux系統沒有任何安全機制,建議安裝 AppArmor用於管理Snap權限,增強安全性。
在安裝好Snap後,記得設定Snapd開機服務
sudo systemctl enable snapd.apparmor.service
sudo systemctl enable snapd.socket
- 重開機後便可以開始安裝Snap軟體了。
2. 如何安裝Snap軟體#
在安裝Snapd後,推薦安裝Snap Store,方便以圖形化方式安裝軟體。
- 使用此指令從Snap套件庫安裝Snap Store:
sudo snap install snap-store
目前Snap Store是由Canonical經營,上面的有許多開發者親自發布的軟體(綠勾勾)。Snap Store的軟體也可以在 SnapCraft網頁找到。
在軟體安裝頁面,右上角可以讓你選擇要裝穩定版(stable)還是測試版(beta)的軟體
有趣的是,Snap Store的軟體網頁會顯示下載此軟體的用戶來自哪些國家,和他們使用的發行版。
3. Snap常用指令#
如果你覺得從Snap Store點選太慢,不妨使用指令管理更新。
列出目前已安裝的Snap軟體:
sudo snap list
更新全部的Snap軟體:
sudo snap refresh
Snap預設會自動在背景下載軟體更新,如果要停用自動更新,使用--hold
和--unhold
引數開關自動更新:
# 停用全域自動更新
snap refresh --hold
# 僅停用Firefox的自動更新
snap refresh --hold firefox
# 啟用自動更新
snap refresh --unhold
搜尋Snap Store上的軟體,例如搜尋Firefox:
snap search firefox
安裝Snap軟體需要加sudo
snap install firefox
Snap軟體安裝後應會出現在應用程式列表。或者用指令執行Snap軟體:
snap run firefox
執行Snap軟體的時候可以加上參數,例如Firefox開啟隱私視窗:
snap run firefox -private
可以看到執行Snap軟體需要多加snap run
的指令,但其實你也可以直接打firefox
開啟Snap版的Firefox。
如果執行Snap版firefox
的時候顯示找不到指令,使用者要自行將Snap軟體的安裝路徑~/snap/bin
加到~/.bashrc
:
echo "$PATH:~/snap/bin" >> ~/.bashrc
source ~/.bashrc
解除安裝Snap軟體的指令:
sudo snap remove firefox
解除安裝Snap軟體的時候一併刪除使用者資料:
sudo snap remove --purge firefox
4. Snap軟體資料的存放位置#
Snap軟體通常會隔離應用程式資料的存放位置,包括軟體設定檔等資料。比如Snap版Firefox會把.mozilla
目錄放到~/snap/firefox/common/.mozilla/
,而非直接在使用者家目錄新增.mozilla
。
註:Snap版Firefox還是會先嘗試讀取~/.mozilla
的資料,該目錄不存在的話才會使用自身的目錄。這可能是Ubuntu想讓使用者能輕鬆從deb版Firefox切換到Snap版Firefox的設計。
如果Snap是以root身份安裝,Snap軟體的資料就是位於/var/snap/Snap軟體名稱/common
(SNAP_COMMON)和/var/snap/Snap軟體名稱/版本號
(SNAP_DATA)
一般使用者的話,Snap軟體資料位於~/snap/Snap軟體名稱/common
(SNAP_COMMON)和~/snap/Snap軟體名稱/版本號
(SNAP_DATA)
如果有舊版、用不到的Snap套件在佔空間,你可以直接移除快取檔:
sudo systemctl stop snapd
sudo sh -c 'rm -rf /var/lib/snapd/cache/*'
sudo systemctl start snapd
5. 備份Snap軟體資料#
Snap提供快照功能,能把目前系統安裝的Snap軟體和資料備份起來,方便日後復原。
使用
sudo snap save
製作快照,它會將Snap與軟體資料全部儲存起來。快照的數字ID是遞進計算的,使用
snap saved
列出已儲存的快照,每個快照都會有一組數字。sudo snap forget 快照ID
刪除快照。Snap的快照也可以匯出成zip檔案,方便搬移到其他硬碟儲存,要使用的時候再匯入。
sudo snap export-snapshot 1 my-snapshot.zip
sudo snap import-snapshot my-snapshot.zip
用
sudo snap restore 快照ID
還原快照,還原時資料會直接覆蓋。另外Snap可以設定
snapshots.automatic.retention
的數值,啟用自動製作快照,數值不可低於24小時。數值若設定no就是不要自動製作快照。
snap set system snapshots.automatic.retention=30h
6. 如何調整Snap軟體的權限#
此處供進階使用者參考,一般使用者應該不需要煩惱這些問題,因為權限應該是Snap軟體打包時就寫好了。軟體若出問題應該先向打包Snap軟體的人回報,Snap Store下方都會有開發者的聯絡資訊。
根據Snap官方文件,每個Snap軟體都有 插頭Plug和插槽Slot,彼此之間使用 界面Interfaces來溝通。
Snap依賴AppArmor來管理權限,如果系統沒有AppArmor,則Snap會以classic模式執行,以上權限系統全部失效,Snap軟體將擁有存取任意系統檔案的權限。
最簡單的權限管理方式就是用Snap Store,在安裝軟體後會多出權限按鈕(Permission),在這裡可控管該軟體的權限,像是禁止Snap軟體存取使用者家目錄、USB裝置、麥克風等等。
Snap Store簡潔明白,但接下來的概念就有點複雜了。
指令snap connections --all
查看所有Snap軟體的插座和插槽
使用snap connections firefox
指令查看Firefox正在使用的界面。
這裡看到Firefox用firefox:audio-playback
插頭連接到:audio-playback
的插槽,所以瀏覽器可以播放聲音。又,Firefox有連接:home
插槽,所以可以存取使用者家目錄的檔案。
使用snap connect <snap>:<plug interface>
指令將二個Snap軟體連在一起,等同額外賦予權限,例如允許Firefox存取系統麥克風
snap connect firefox:audio-record
當然,也可以用snap disconnect <snap>:<plug interface>
指令移除Snap軟體的權限,比如禁止Firefox存取系統麥克風:
snap disconnect firefox:audio-record