快轉到主要內容

想安裝deb卻變成Snap?Ubuntu防止APT安裝Snap套件的解決方案

· 民國114年乙巳年
·
切換繁體/簡體
分類   Linux系統 Linux使用技巧
標籤   Ubuntu Snap
目錄

Install deb packages instead of Snaps on Ubuntu.

適用版本:Ubuntu 16.04以上

Oh snap! 這句話在英文裡面有「這下靠北了」的意思。

Snap是Canonical推行的跨發行版Linux套件格式,大概在Ubuntu 16.04以後內建於系統。讓老版本的系統也可以安裝最新版的套件,不受APT套件庫依賴的影響。

相關文章:Snap指令使用方式

雖然它本意是好的,但是Ubuntu 22.04之後便開始強迫大家使用。Canonical修改了Ubuntu套件庫的一部分套件,使得用戶在透過APT安裝特定應用程式的deb檔的時候,會自動重新導向Snap商店,下載對應的應用程式。

比如用APT執行指令apt install firefox安裝Firefox瀏覽器,就會出現「正在連接到Snap商店」(==> Checking connectivity with the snap store)的訊息,強迫用戶下載Snap版本的套件。就連Dockerfile使用Ubuntu Docker Image裡面執行apt install也無法倖免。

這會造成許多問題,因為Snap格式打包的軟體跟deb原理是不一樣的,在測試某些軟體功能的時候就會出錯。有的Snap套件問題難以解決,這時候就得切換為deb版。

本文就是要來探討各種解決方案。繞過Ubuntu官方強加的限制,不要讓Ubuntu安裝到Snap的套件。

1. 方案探討
#

列出幾種解決途徑,我個人偏好一+二的解決方案。

方案一:徹底移除Snap套件
#

不建議這樣做,問題沒辦法解決。

Ubuntu的Snap套件是由常駐程式Snapd管理的,理論上是能將這個服務關掉,並強制移除,再把它加入APT的黑名單防止日後系統更新自己裝回來。但我是建議就將Snap留著。然後降低Snap的優先權。

因為Ubuntu官方已經逐漸將自身套件庫的deb套件替換為Snap的版本,那些套件已經不再是原本的套件,已經變成了一個個空套件,安裝後只會重新導向Snap指令。譬如Firefox、Chromium、Thunderbird等等,在最新版Ubuntu 24.04就只提供Snap的套件,沒有deb版。

不信?使用指令apt show firefox指令查詢套件資訊,會輸出以下結果,可以看到Firefox套件已經成為transitional package,實際會導向安裝Snap套件。

Package: firefox
Origin: Ubuntu
APT-Sources: http://tw.archive.ubuntu.com/ubuntu noble/main amd64 Packages
Description: Transitional package - firefox -> firefox snap
This is a transitional dummy package. It can safely be removed.
.
firefox is now replaced by the firefox snap.

你可能覺得把Snap服務直接刪除比較好,避免日後執行APT指令的時候又不小心裝到Snap套件。不過就像我上面說的,Ubuntu的deb套件已經變成空殼了,這樣做意義不大。

方案二:手動找deb或第三方PPA
#

找額外的deb是最直接的做法。建議是使用PPA,方便自動更新。

找野生deb有風險,更新不便,它們也不見得是為Ubuntu建置的。Debian的套件不見得可以裝在Ubuntu,所以找PPA更好。

比如Firefox就有Mozilla官方經營的PPA,內含Mozilla官方建置的Firefox與Thunderbird。

Chromium則是有Rob Savoury的PPA

方案三:改用其他套件格式
#

好像把問題複雜化了……

Flatpak比Snap更受Linux社群歡迎,內建Flatpak的發行版比內建Snap的要多。安裝此格式的軟體能夠獲得更多支援。很多軟體都有打包為Flatpak版本。

另外,AppImage格式的軟體也是可以考慮的選項。沒有複雜的權限問題需要處理。

方案四:跳船到其他發行版
#

Canonical的CEO已經明說,不會放棄Snap的道路。

如果真的不喜歡Snap的干涉,就用沒有Snap的發行版吧。

Ubuntu官方認可的發行版都得遵照Canonical公司政策使用Snap,包括Kubuntu、Lubuntu、Xubuntu等等,故必須使用Canonical管不到的系統。

除了老祖宗Debian沒有Snap之外,有很多基於Ubuntu的發行版是沒有採用Snap的,例如Linux MintPop!_OSZorin OSelementary OS

2. 範例:安裝deb版的Firefox,取代Snap
#

透過Mozilla官方的PPA取得deb版Firefox。再利用APT的Pinning功能,降低Snap套件的優先權。

其他軟體用deb取代Snap的步驟大抵上也是如此。

  1. 移除Snap版的Firefox
sudo snap remove --purge firefox
  1. 新增Mozilla官方的PPA套件庫
sudo add-apt-repository ppa:mozillateam/ppa
  1. 針對Firefox,新增APT設定檔
sudo vim /etc/apt/preferences.d/mozilla
  1. 填入以下內容,將Mozilla套件庫釋出的套件優先度提到最高,並將Ubuntu釋出的套件降至最低。這是為了防止APT安裝套件的時候去安裝到Ubuntu提供的套件,導致觸發Snap商店的安裝指令。
Package: *
Pin: origin packages.mozilla.org
Pin-Priority: 1000

Package: firefox*
Pin: release o=Ubuntu
Pin-Priority: -1
  1. 確認優先度規則是否套用成功
sudo apt policy firefox
  1. 接著,防止Ubuntu未來更新自行下載Snap版Firefox,新增Unattended Upgrades規則
sudo vim /etc/apt/apt.conf.d/51unattended-upgrades-mozilla
  1. 填入以下內容,設定只有Mozilla釋出的套件可以自動更新
Unattended-Upgrade::Allowed-Origins:: "LP-PPA-mozillateam:${distro_codename}";
  1. 安裝deb版Firefox
sudo apt install firefox firefox-l10n-zh-tw

參考資料
#

相關文章

Linux如何解除安裝軟體並刪除乾淨
分類   Linux系統 Linux使用技巧
標籤   Ubuntu Flatpak Snap AppImage
離線安裝Ubuntu Snap格式的軟體套件,繞過Snap Store
分類   Linux系統 Linux使用技巧
標籤   Snap Ubuntu
Flatpak vs Snap vs AppImage,跨Linux發行版的套件格式比較
分類   Linux系統 Linux使用技巧
標籤   Flatpak Snap AppImage Freedesktop Specifications

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。