avatar💡
Irving WuIrving Wu's Blog

The truth of the world is beyond the realm of common sense.

即使生命如此短暂,我也要在这世上留下精彩的足迹

Ubuntu移除Snap并安装DEB版Firefox

Snap是Canonical开发的一种通用Linux软件包格式。它的初衷是解决Linux长期以来的依赖问题,让软件在任何Linux发行版上都能“一次构建,到处运行”。 本意是好的,但是实际效果并不如何,应用使用squashfs文件系统,每次启动时需要解压和挂载。这导致了明显的延迟。并且由于每个Snap应用都捆绑了自己的依赖库,导致一些小应用的占用都的离谱 (致敬Electron) 。 还有诸如强制自动更新导致用户失去控制权、中心化商店和闭源后端等令人诟病的问题,明显违背Linux哲学。 从Ubuntu 21.10开始,Ubuntu将Firefox的默认安装方式从 .deb 改为了 Snap,强制你使用Snap。

备份数据

注意

如果你之前使用过Snap Firefox,在操作前,请务必确认已经备份好了你的浏览器数据。

在终端中执行以下命令:

bash
cp -r ~/.mozilla ~/mozilla-backup
cp -r ~/.cache/mozilla ~/mozilla-cache-backup

彻底移除Snap

  1. 移除所有 Snap 应用:

    bash
    # 此命令会列出当前安装的所有Snap包并逐个删除
    for p in $(snap list | awk 'NR>1 {print $1}'); do
        sudo snap remove --purge "$p"
    done

    如果最终显示 “No snaps are installed yet”,就说明Snap应用已经全部删干净了。

  2. 停止并移除Snap服务:

    bash
    # 停止并禁用Snap相关服务
    sudo systemctl stop snapd
    sudo systemctl disable --now snapd.socket
    
    # 彻底清除snapd及其配置文件
    sudo apt purge --autoremove snapd
  3. 清理所有Snap残留目录:

    bash
    # 删除Snap创建的各种目录
    rm -rf ~/snap
    sudo rm -rf /snap /var/snap /var/lib/snapd /var/cache/snapd
  4. 锁定Snap并修复依赖:

    bash
    # 锁定snapd,防止其被重新安装
    sudo apt-mark hold snapd
    
    # 设置APT优先级,从根源上阻止snapd被安装
    echo 'Package: snapd
    Pin: release a=*
    Pin-Priority: -10' | sudo tee /etc/apt/preferences.d/nosnap.pref
    
    # 修复可能因移除操作而损坏的依赖关系
    sudo apt install -f

安装原生Firefox

  1. 添加Mozilla官方APT源:

    bash
    # 创建存放GPG密钥的目录
    sudo install -d -m 0755 /etc/apt/keyrings
    
    # 下载并导入Mozilla的GPG签名密钥
    wget -q https://packages.mozilla.org/apt/repo-signing-key.gpg -O- | sudo tee /etc/apt/keyrings/packages.mozilla.org.asc > /dev/null
    
    # 添加Mozilla官方软件源
    echo "deb [signed-by=/etc/apt/keyrings/packages.mozilla.org.asc] https://packages.mozilla.org/apt mozilla main" | sudo tee /etc/apt/sources.list.d/mozilla.list > /dev/null
  2. 设置优先级,确保安装和更新都使用 .deb 版: 这是最关键的一步,能保证无论未来如何更新,系统都绝不会再切回Snap版。

    bash
    # 设置APT优先级,强制从Mozilla官方源安装 Firefox
    echo 'Package: firefox*
    Pin: origin packages.mozilla.org
    Pin-Priority: 1000
    Package: firefox*
    Pin: release o=Ubuntu
    Pin-Priority: -1' | sudo tee /etc/apt/preferences.d/mozilla-firefox

    这里 Pin-Priority: 1000 表示优先从 Mozilla 官方源安装,而 Pin-Priority: -1 则彻底禁止从 Ubuntu 默认源安装 Firefox 的任何版本。

  3. 安装DEB版Firefox:

    bash
    # 更新并安装
    sudo apt update
    sudo apt install firefox

验证

按理说到到此就应该完全移除Snap了,若不放心可以检查一下

bash
# 检查snapd服务状态
snap list
# 或者
systemctl status snapd

如果提示 command not foundUnit snapd.service could not be found,说明Snap已经被彻底移除。

Arch Linux 配置 KVM + QEMU 虚拟化
买的《东方文果真报》到了