如何在 Fedora Linux 上安装 Snap

当您需要 DNF 或 Flatpak 存储库未以您想要的版本或形式提供的软件时,在 Fedora 上安装 Snap 会添加跨发行版打包格式。 Canonical 维护 snapd,而各个发布者则决定何时更新他们的 snap,因此某些应用程序比 Fedora 软件包获得更快的更新,而其他应用程序则落后。 Snap Store 提供了一个图形目录,用于浏览和安装 Snap,而无需接触命令行。

Fedora 默认使用 DNF 作为系统包,并为桌面应用程序提供 Flatpak,两者都与发行版的发布周期顺利集成。当您需要专有软件、想要特定的上游构建或者更喜欢独立于 Fedora 的计划来管理应用程序更新时,Snap 可以填补空白。本指南涵盖终端和 GUI 设置,解释安装过程和实际用例,以便您可以决定 Snap 是否适合您的工作流程。

如果您是 Snap 的新手,请将其想象为一种打包格式,通过 snapd 与 Fedora 的本机 DNF 工具链一起安装。每个 snap 包都包含它所需的运行时库,因此相同的构建可以在 Fedora、Ubuntu 或其他受支持的发行版上运行,而无需手动处理依赖关系。

Fedora 附带 DNF(Fedora 41+ 上的 DNF5)作为主要包管理器,并在 GNOME 安装上默认包含 Flatpak。当您需要上游维护的构建、未为 Fedora 打包的利基软件或专有应用程序的受控沙箱时,Snap 可以对它们进行补充。发布仍然取决于 Snap 发行商的时间表,因此根据每个来源提供更新的速度来权衡 Snap 与 DNF 和 Flatpak。为了使您的系统软件包保持最新,请考虑设置。

Snap 命令语法和结构

基本的 Snap 语法使内容可读:

snap <command> [<package-name>] [--option]
  • 折断:与 Snapd 守护进程对话的命令行工具。
  • <command>:您希望 Snap 执行的操作,例如install,refresh,remove, 或者list
  • <package-name>:您要管理的应用程序的名称。对于像这样的命令,请将其保留snap list对一切都起作用。
  • -选项:例如,调整行为的标志--channel=beta切换发行曲目。

最简单的安装 Snap 看起来像这样:

sudo snap install vlc

此命令从 Snap Store 获取 VLC 媒体播放器,下载其依赖项,并将其公开在/snap/bin这样您就可以从终端或桌面启动它。

使用下表作为常见 Snap 管理任务的快速参考:

任务选项他们做什么
安装新应用程序snap install package-name
snap install package-name --channel=edge
下载快照;可选择非默认通道,如边缘或测试版。
更新现有快照snap refresh
snap refresh package-name
使用可用的最新版本刷新所有快照或特定快照。
检查安装的内容snap list显示每个已安装的快照,包括版本、发布者和跟踪渠道。
回滚到之前的修订版本snap revert package-name如果更新破坏了您的工作流程,则恢复上一个工作版本。
发现新的快照snap search keyword查询 Snap Store 目录中与提供的关键字匹配的应用程序。

在 Snap、DNF 和 Flatpak 之间进行选择

Fedora 为您提供了三个包管理系统,每个系统都有独特的优点:

  • DNF(原生 RPM 包):最适合需要与 Fedora 发布周期紧密集成的系统级软件、核心实用程序和软件包。 DNF 软件包通过标准存储库接收官方 Fedora QA 测试和安全更新。
  • 扁平包装:当您需要与 GNOME 软件集成沙箱时,非常适合桌面应用程序。 Flatpak 擅长提供最新的桌面软件(浏览器、媒体播放器、生产力工具),同时将它们与您的基础系统隔离。
  • 折断:当您需要上游发布的版本、Fedora 存储库中不可用的专有软件或供应商直接打包的应用程序时,请选择 Snap。更新时间取决于 snap 发布者,因此某些软件包接收更新的速度比 DNF 快,而其他软件包则落后。

许多 Fedora 用户同时运行所有三个系统,选择最适合每个应用程序需求的软件包源。

在 Fedora Linux 上安装 Snapd

默认情况下,大多数 Fedora 安装不附带 Snapd,因此您需要通过 DNF 添加它。该过程只需几分钟,即可设置开始使用 Snap 包所需的一切。

步骤1:检查Snapd是否已经安装

在接触包管理器之前,请确认 Snapd 是否已存在。 Fedora 的旋转偶尔会预装它,特别是如果您之前添加了 Snap 支持。

检查已安装的版本:

snap version

如果您收到 Snap 和 Snapd 的版本输出,您可以跳至服务激活部分。如果命令返回command not found,继续下面的安装步骤。

第 2 步:更新您的 Fedora 系统

确保您的 Fedora 系统是最新的。这有助于防止冲突并确保与最新软件版本的兼容性。

运行以下命令来更新您的系统:

sudo dnf upgrade --refresh

在 Fedora 41 及更高版本上,dnf命令默认运行DNF5。此命令刷新存储库元数据并将已安装的软件包升级到最新版本。对于主要版本升级,请查看指南。

第 3 步:安装 Snapd

安装snapd,管理 Snap 包的 Snap 守护进程:

sudo dnf install snapd

DNF 从 Fedora 的存储库中提取 Snapd 及其依赖项(包括与 FUSE 相关的包),为系统上的 Snap 功能奠定基础,而无需任何额外的先决条件命令。

第 4 步:重新启动系统

安装 Snapd 后,建议重新启动系统。此步骤确保所有更改生效,包括为 Snap 创建必要的系统路径:

sudo reboot

安装后启用 Snap 服务

安装 Snapd 后,启用其服务,以便 Snap 可以随系统自动启动并做好管理应用程序的准备。

第1步:启用并启动Snapd服务

使用以下命令激活按需启动 Snapd 的套接字:

sudo systemctl enable --now snapd.socket

Fedora 使用 Snapd 的套接字激活;使能snapd.socket确保守护进程在需要时启动并在重新启动后保持启用状态。

第 2 步:启用经典快照支持

某些 Snap 包需要经典限制,这涉及额外的系统权限。要启用此功能,请创建符号链接,如下所示:

sudo ln -s /var/lib/snapd/snap /snap

此链接允许您的系统访问具有经典限制的 Snap 软件包,从而扩大了通过 Snap 可用的应用程序范围。

第 3 步:安装核心卡扣

coreSnap 包为 Snap 应用程序提供了必要的运行时库。使用以下命令安装它:

sudo snap install core

core软件包可确保您的 Snap 环境功能齐全并与各种应用程序兼容。

步骤 4:验证 Snapd 服务

最后,确认 Snapd 正在按预期运行和运行。使用以下命令检查套接字状态:

systemctl status snapd.socket

如果套接字被列为活动状态,那么您就可以开始在 Fedora 系统上使用 Snap 了。

验证您的 Snap 安装

在安装应用程序之前,请通过快速运行状况检查确认 Snap 完全正常运行。

检查 Snap 版本和核心状态

验证 snap 命令行工具和 snapd 守护程序是否正常运行:

snap version

您应该会看到 snap 工具和 snapd 的版本信息。确切的数字会随着 Canonical 发布更新而变化,但最近的 Fedora 版本通常会报告这两个组件的 Snap 2.x 版本。

确认核心快照安装

列出已安装的快照以确认核心运行时是否存在:

snap list

输出应至少显示core快照(或core20/core22取决于安装的应用程序)。如果列表为空或仅显示核心包,则表明您的安装成功,并且您可以安装应用程序了。

验证服务状态

确保重新启动后 snapd 套接字保持活动状态:

systemctl is-enabled snapd.socket

该命令应该返回enabled。如果你看到disabled,重新访问服务启用部分并运行sudo systemctl enable snapd.socket再次。

包管理的基本 Snap 命令

一旦 Snap 就位并启用其服务,您就可以开始通过命令行界面管理应用程序。以下是您最常使用的基本命令。

安装 Snap 包

要使用 Snap 安装应用程序,请使用install命令后跟包名称。例如,要安装流行的通信工具 Discord,请运行:

sudo snap install discord

此命令会在您的 Fedora 系统上下载并安装 Discord,演示 Snap 如何简化包管理。

更新 Snap 包

保持应用程序处于最新状态对于安全性和性能非常重要。使用以下命令更新所有 Snap 安装的软件包:

sudo snap refresh

Snap 每天四次自动检查并应用更新到您的应用程序,确保您始终拥有最新的功能和补丁。手动运行此命令会触发立即更新检查。

删除 Snap 包

如果您不再需要某个应用程序,可以使用以下命令轻松卸载它:remove命令。例如,要删除 Discord,请运行:

sudo snap remove discord

这会删除应用程序,同时保持系统干净和井井有条。

搜索 Snap 包

使用以下命令探索 Snap 存储库中的可用应用程序search命令。例如,要查找 Spotify,请运行:

snap search spotify

代替spotify输入您要查找的应用程序的名称,Snap 将显示匹配包的列表,而无需提升权限。

检查快照版本

要验证已安装的 Snap 版本或解决问题,您可以使用以下命令检查其版本:

snap version

此命令显示有关 Snapd 服务及其版本的详细信息,这有助于调试或验证兼容性。

在 Fedora 上安装 Snap Store GUI

对于喜欢使用图形界面管理软件的用户来说,Snap Store 提供了一种直观的方式来搜索、安装和管理应用程序,而无需接触命令行。

第 1 步:安装 Snap 存储

Snap Store 以 Snap 包的形式提供,使安装变得快速、简单。要安装它,请运行以下命令:

sudo snap install snap-store

此命令下载并设置 Snap Store 应用程序,将其集成到您的 Fedora 系统中。安装后,您将有一个图形界面来浏览和安装 Snap 包。

第 2 步:启动 Snap 商店

安装后,您可以通过多种方式启动 Snap Store:

  • 从航站楼:使用以下命令启动 Snap Store:
snap run snap-store
  • 从桌面环境:打开系统菜单并搜索“Snap Store”。单击其图标即可启动该应用程序。

如果 Snap Store 没有立即出现在系统菜单中,请重新启动系统以更新应用程序条目。

第 3 步:导航和使用 Snap Store

当您首次打开 Snap Store 时,可能需要一两分钟才能与 Snapcraft 的服务器同步并获取最新的包数据。加载后,您可以:

  1. 搜索应用程序:使用搜索栏查找特定应用程序或探索类别。
  2. 安装应用程序:单击所需的应用程序,选择版本,然后按照提示进行安装。
  3. 管理已安装的应用程序:直接从 GUI 查看、更新或删除应用程序。

Snap Store 简化了软件管理,为命令行操作提供了便捷的替代方案。

管理已安装的 Snap 应用程序

一旦基础知识到位,就可以使用这些工作流程来保持快照的健康,而无需重新跟踪前面介绍的快速启动命令。

在应用之前检查待处理的更新

查看自动运行刷新之前将发生的更改:

snap refresh --list

输出列出了具有可用新修订版的快照,以便您可以计划重新启动或主要功能更改。准备好后,请跟进sudo snap refresh应用它们。

查看最近的快照活动

每当您需要排除故障时,请密切关注安装、刷新和删除:

snap changes

Snap 为每个任务分配一个更改 ID。钻取特定条目snap change <id>查看时间戳、详细状态消息以及发生的任何错误。

检查包裹详情和渠道

在切换版本之前确认您跟踪的发布渠道并查看修订说明:

snap info discord

此命令显示可用通道,例如稳定通道、候选通道、测试版通道和边缘通道。开关与sudo snap refresh discord --channel=beta当您需要替代版本进行测试时。

清理旧版本

快照保留以前的修订,以便您可以恢复,但这些副本会占用磁盘空间。列出安装的内容:

snap list --all discord

通过定位修订版号来删除不再需要的修订版:

sudo snap remove discord --revision=123

仅停用列表中标记为禁用的修订,以便活动构建保持完整,并且您仍然可以在需要时回滚。

使用 Snap 排除 SELinux 问题

Fedora 的 SELinux(安全增强型 Linux)功能对于系统安全至关重要,但其严格的策略有时会干扰 Snap 操作。以下是识别和解决常见 SELinux 相关问题的步骤。如果您希望完全禁用 SELinux,请参阅以下指南:,尽管建议使用自定义策略来启用它。

分析 SELinux 拒绝

当 Snap 遇到权限问题时,SELinux 可能是原因。要检查拒绝消息,请使用以下命令:

sudo ausearch -m AVC --start recent

此命令检索访问向量缓存 (AVC) 消息,这些消息提供对影响 Snap 的 SELinux 拒绝的深入了解。

调整 SELinux 策略

选项 1:暂时将 SELinux 切换到宽容模式

要快速测试 SELinux 是否导致问题,您可以将其设置为宽容模式。这会在继续记录违规行为的同时禁用强制执行:

sudo setenforce 0

如果 Snap 在宽容模式下正常运行,SELinux 可能就是原因。测试完成后恢复到强制模式:

sudo setenforce 1

选项 2:创建自定义 SELinux 策略

要获得更永久的解决方案,您可以创建自定义 SELinux 策略以允许 Snap 操作。

如果您的系统报告audit2allow缺少,请先安装 Fedora 的 SELinux 策略实用程序:

sudo dnf install policycoreutils-python-utils
生成拒绝日志

首先使用以下命令生成拒绝日志:

sudo ausearch -m AVC --start recent > /tmp/avc.log

这会捕获创建策略所需的 SELinux 拒绝信息。

创建策略模块

使用捕获的日志创建策略模块。运行以下命令:

sudo audit2allow -i /tmp/avc.log -M snap_policy

这会根据 SELinux 拒绝生成自定义策略文件。

安装策略模块

最后,使用以下命令安装生成的策略模块:

sudo semodule -i snap_policy.pp

这将应用自定义策略,解决 SELinux 冲突,同时保持强制执行活动。

从 Fedora 卸载 Snap 和 Snap Store

如果您不再希望在 Fedora 系统上使用 Snap,可以使用以下步骤将其完全删除。此过程可确保清理所有相关文件和服务。

第 1 步:拆下安装的卡扣

列出您当前安装的快照,然后使用清除模式删除每个快照,以便清理应用程序数据:

snap list
sudo snap remove --purge <package-name>

对报告的每个应用程序重复删除命令snap list。首先清除可确保在删除 Snapd 本身之前删除其修订和可写数据目录。

第 2 步:从 Fedora 中删除 Snapd

应用程序消失后,使用DNF删除Snapd包:

sudo dnf remove snapd

DNF 删除 Snapd RPM 及其服务文件。任何剩余的快照数据都会保留在原处,直到您在下一步中将其清除为止。

步骤 3:清理 Snap 数据和符号链接

删除经典限制符号链接和任何剩余的 Snapd 数据,以便您的系统返回到 Snap 之前的状态:

sudo rm -f /snap
sudo rm -rf /var/lib/snapd

第一个命令删除为经典快照创建的符号链接,第二个命令清除缓存的快照修订以及剩余的应用程序数据。跑步sudo rm -rf /var/cache/snapd如果您计划回收下载缓存,也同样如此。

如果您希望保留特定快照的配置或数据,请跳过删除/var/lib/snapd并备份您仍然需要的目录。

第 4 步:验证删除情况

要确认 Snap 已从您的系统中完全删除,请检查snap命令不再存在:

which snap

如果命令报告“没有管理单元”,您的PATHsystemctl status snapd显示不活动或丢失的单元,则删除过程已完成。否则,请重新访问前面的步骤以删除延迟文件或服务。

常见的 Snap 安装问题和解决方案

虽然 Snap 的设计非常稳健,但您偶尔可能会遇到问题。以下是 Fedora 上的一些常见问题以及如何解决这些问题:

问题:未找到 Snap 命令

如果您看到类似“bash: snap: command not find”的错误,可能是由于以下几个原因造成的:

  • 未安装快照:确保您已完成安装步骤snapd。如果不确定,您可以尝试重新安装:sudo dnf install snapd
  • 系统未重新启动:初始后snapd安装后,建议重新启动以确保所有系统路径和服务均正确初始化。如果您跳过了此步骤,请sudo reboot
  • 路径环境变量:目录/snap/bin应该在您系统的路径中。重新启动通常可以解决此问题。您可以检查echo $PATH

问题:Snap 应用程序无法启动或行为异常

如果 Snap 应用程序无法启动或崩溃,请尝试以下步骤:

  • 从终端运行:使用直接从终端启动应用程序snap run package-name(例如,snap run discord)。这通常会显示有助于诊断问题的错误消息。
  • 检查快照日志:查看日志snapd使用journalctl -u snapd对于系统级问题。
  • 刷新快照:有时,只需刷新快照即可解决问题:sudo snap refresh package-name
  • 恢复快照:如果更新后出现问题,请恢复到之前的版本:sudo snap revert package-name
  • SELinux:正如其专门部分所述,SELinux 通常可能是 Fedora 上的问题根源。如果您怀疑 SELinux 被拒绝,请参阅“使用 Snap 对 SELinux 问题进行故障排除”部分。

问题:Snap Store 速度缓慢或不显示应用程序

Snap Store 有时可能会加载缓慢,尤其是在首次启动时,因为它会同步应用程序数据。

  • 稍等一下:给它几分钟时间以完全同步。
  • 刷新快照存储:尝试关闭并重新打开它。如果它本身是作为快照安装的,您也可以尝试通过命令行刷新它:sudo snap refresh snap-store
  • 检查互联网连接:确保您的系统有稳定的互联网连接。
  • 重新启动:如果安装后应用程序菜单中没有出现 Snap Store 图标,通常需要重新启动系统。

问题:经典限制扣的问题

需要经典限制的 Snap(例如,某些 IDE 或开发工具)需要更广泛的系统访问权限。确保您已通过创建符号链接启用经典 Snap 支持:sudo ln -s /var/lib/snapd/snap /snap。如果此链接丢失或不正确,经典快照可能无法正常运行。创建链接后重新启动也会有所帮助。

对于更复杂的问题,请考虑寻求帮助Snapcraft 社区论坛,这是排除故障的宝贵资源。

其他 Snap 资源

  • Snapcraft 主页– 了解 Snap、其功能以及它如何在 Linux 发行版上工作的官方网站。
  • – 浏览可供安装的多种 Snap 应用程序。
  • Snapcraft 社区论坛– 用于提出问题、分享反馈和解决 Snap 相关问题的有用资源。

结论

Snap 向 Fedora 添加了跨发行版打包,当 DNF 和 Flatpak 无法提供您需要的特定构建时,提供了一种替代方案。通过了解 snapd 的核心和经典约束模型,使用以下命令snap refreshsnap revert,并了解如何解决 SELinux 冲突,您可以在情况需要时将 Snap 集成到您的工作流程中。

无论您坚持使用 DNF 作为系统包,使用 Flatpak 进行 GNOME 软件集成,还是添加 Snap 进行供应商维护的构建,Fedora 都可以让您灵活地为每项工作选择正确的工具。当您需要上游发布的软件包、需要第三方应用程序的自动更新或者更喜欢开发人员的官方版本而不是发行版打包的替代方案时,Snap 最适合。对于 Fedora 系统上的其他安全配置,请考虑设置与 Snap 的内置沙箱一起管理网络访问。