原文链接:https://sysin.cn/blog/ubuntu-remove-snap/

Snaps 是 Ubuntu 的母公司 Canonical 于 2016 年 4 月发布 Ubuntu 16.04 LTS(Long Term Support,长期支持版)时引入的一种容器化的软件包格式。自 Ubuntu 16.04 LTS 起,Ubuntu 操作系统可以同时支持 Snap 及 Debian 这两种格式的安装包。

Snap 虽然有一定的优点(请自行搜索),但是不足之处更多。Snap 软件包体积庞大,snapd 进程会导致系统重启等待,并且可能导致卡顿,禁用为佳。

特别是服务器版用不上这种软件包,默认是安装的,必须彻底删除。

Ubuntu 22.04 桌面版中两个关键的程序:软件商店和 Firefox 使用了 Snap 软件包,卡顿明显。

删除 Snap 的方法

已经确认 snapd 是无法禁用的,只能强制删除。以下操作无需停止 snapd 服务。

(1)删掉所有的已经安装的 Snap 软件。

snap list 用于查看已经安装的 Snap 软件,通过脚本全部删除:

for p in $(snap list | awk '{print $1}'); do
  sudo snap remove $p
done

一般需要执行两次(桌面版三次),提示如下则正确执行:

snap "Name" is not installed
core20 removed
snapd removed

再次执行,提示如下,表明已经删除干净:

No snaps are installed yet. Try 'snap install hello-world'.

(2)删除 Snap 的 Core 文件。

sudo systemctl stop snapd
sudo systemctl disable --now snapd.socket

for m in /snap/core/*; do
   sudo umount $m
done

(3)删除 Snap 的管理工具。

sudo apt autoremove --purge snapd

(4)删除 Snap 的目录。

rm -rf ~/snap
sudo rm -rf /snap
sudo rm -rf /var/snap
sudo rm -rf /var/lib/snapd
sudo rm -rf /var/cache/snapd

(5)配置 APT 参数:禁止 apt 安装 snapd。
参照:https://manpages.ubuntu.com/manpages/focal/man5/apt_preferences.5.html

sudo sh -c "cat > /etc/apt/preferences.d/no-snapd.pref" << EOL
Package: snapd
Pin: release a=*
Pin-Priority: -10
EOL

a -> Archive
c -> Component
o -> Origin
l -> Label
n -> Architecture

验证效果:可以查询到该包,但是无法安装。

$ sudo apt install snapd
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Package snapd is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

同时禁用 snap Firefox 的更新(Server 版也可以配置):

sudo sh -c "cat > /etc/apt/preferences.d/no-firefox.pref" << EOL
Package: firefox
Pin: release a=*
Pin-Priority: -10
EOL

安装软件商店和 Firefox

上述操作后,可以安装 deb 格式的软件商店和 Firefox。

安装 Gnome 软件商店

sudo apt install gnome-software
# 确认没有 snapd 在按 y
#sudo apt install --install-suggests gnome-software
# 网传使用 `--install-suggests` 参数防止安装上 Snap 版本的软件包管理器,本例无效。

安装 DEB 格式的 Firefox
添加 Firefox 官方 PPA(Personal Package Archives)仓库:

sudo add-apt-repository ppa:mozillateam/ppa

将 Firefox 官方 PPA 仓库中的 firefox 设为高优先级:

sudo sh -c "cat > /etc/apt/preferences.d/mozillateam-firefox.pref" << EOL
Package: firefox*
Pin: release o=LP-PPA-mozillateam
Pin-Priority: 501
EOL

现在可以安装最新版的 deb 版 Firefox:

sudo apt update
apt list firefox  #现在已经不是 Snap firefox
sudo apt install firefox
# 或者 Firefox ESR
sudo apt install firefox-esr