Skip to content

禁用(彻底移除)snap

✨文章摘要(AI生成)

Snap 是 Ubuntu 系统中的一种软件包管理工具,它允许用户安装和管理应用程序。然而,Snap 也存在一些问题,例如软件包体积庞大、可能导致系统卡顿等。因此,一些用户可能希望禁用或彻底移除 Snap。

本文将介绍如何禁用和彻底移除 Snap,包括以下步骤:

  1. 禁用 Snap 服务:通过 systemctl 命令禁用 Snap 服务,但这可能无法完全阻止 Snap 在重启后运行。
  2. 删除已安装的 Snap 软件:使用 snap list 命令查看已安装的 Snap 软件,并通过脚本批量删除。
  3. 删除 Snap 的 Core 文件:停止 Snap 服务并卸载 Snap 的 Core 文件。
  4. 删除 Snap 的管理工具:使用 apt 命令卸载 Snap 的管理工具 snapd。
  5. 删除 Snap 的目录:手动删除 Snap 相关的目录和文件。
  6. 配置 APT 参数:通过配置 apt 的 preferences 文件,阻止系统安装 Snap 软件包。

此外,文章还提供了恢复 Snap 的方法,只需删除相应的配置文件即可重新使用 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 软件包,卡顿明显。

禁用服务无效示例:

shell
#sudo systemctl disable --now snapd
#sudo systemctl disable --now snapd.socket
#sudo systemctl disable snapd

但是重启后,snapd 仍然运行

验证状态

shell
systemctl status snapd

现在 Ubuntu OVF 中已经更新 apt_preferences 彻底排除了 Snap。

删除 Snap 的方法

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

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

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

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

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

    shell
    snap "Name" is not installed
    core20 removed
    snapd removed

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

    shell
    No snaps are installed yet. Try 'snap install hello-world'.
  2. 删除 Snap 的 Core 文件。

    shell
    sudo systemctl stop snapd
    sudo systemctl disable --now snapd.socket
    
    for m in /snap/core/*; do
    sudo umount $m
    done
  3. 删除 Snap 的管理工具。

    shell
    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。

    正确配置(参看 apt_preferences):

    shell
    sudo sh -c "cat > /etc/apt/preferences.d/no-snapd.pref" << EOL
    Package: snapd
    Pin: release a=*
    Pin-Priority: -10
    EOL
    txt
    a -> Archive
    c -> Component
    o -> Origin
    l -> Label
    n -> Architecture

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

    shell
    # sysin @ u22 in ~ [13:59:22]
    $ apt list snapd
    Listing... Done
    snapd/jammy-updates 2.56.2+22.04ubuntu1 amd64
    N: There is 1 additional version. Please use the '-a' switch to see it
    
    # sysin @ u22 in ~ [13:59:37]
    $ 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
    E: Package 'snapd' has no installation candidate

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

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

    现在服务器版安装桌面环境也没有 Snap!

    shell
    sudo apt update
    #sudo apt install ubuntu-desktop  #完整 GNOME 桌面环境包括 LibreOffice、视频播放器、游戏等等
    sudo apt install ubuntu-desktop-minimal  #仅浏览器和基本工具
    sudo reboot

    该方法也适用于 Ubuntu 20.04,只是 20.04 中 Firefox 不使用 Snap 软件包,不用额外屏蔽,也不用额外安装 deb 格式替代。

安装软件商店和 Firefox

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

安装 Gnome 软件商店

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

安装 DEB 格式的 Firefox

添加 Firefox 官方 PPA(Personal Package Archives)仓库:

shell
sudo add-apt-repository ppa:mozillateam/ppa

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

shell
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:

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

附录:恢复 Snap 的方法

只需要删除配置文件,即可重新使用 Snap 软件包。

shell
sudo rm /etc/apt/preferences.d/no-snap.pref
sudo rm /etc/apt/preferences.d/no-firefox.pref
sudo rm /etc/apt/preferences.d/mozillateam-firefox.pref
sudo apt update
sudo snap install snap-store
sudo apt install firefox

下载仅供下载体验和测试学习,不得商用和正当使用。