快轉到主要內容

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

· 民國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

參考資料
#

相關文章


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

(留言板載入中)這是Giscus留言板,需要Github帳號才能留言。支援Markdown語法,若要上傳圖片請善用外部圖床。您的留言會在Github Discussions向所有人公開。

Click here to edit your comments.

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