Ubuntu Snap2025年03月17日 | 阅读 9 分钟 什么是 Snap?Snap 是由 Canonical 为操作系统开发的软件部署和打包系统,它应用于 Linux 内核。几个被称为 **_snaps_** 的软件包,以及使用它们的工具 **_snapd_**,适用于各种 Linux 发行版,并允许上游软件开发人员直接向用户分发其应用程序。Snap 是一个独立的应用程序,在沙盒中执行,并对主机系统进行调解访问。最初,Snap 是为云应用程序发布的,但后来也被移植用于桌面应用程序和物联网设备。 Snap 的功能![]() 常见 Linux 软件包Snap 是一个自包含的软件包,它实现了各种 Linux 发行版。它与传统的 Linux 软件包管理方法不同,后者需要为所有 Linux 发行版提供特别适配的软件包。 Snap 的文件格式是一个单独的压缩文件系统,采用 **_SquashFS_** 格式,使用 **_.snap_** 扩展名。此文件系统包含软件、它所依赖的库以及信息元数据。此元数据由 **_snapd_** 开发,用于为该软件设置一个适当形状的受保护沙盒。Snap 由主机操作系统定位,并在安装后文件被使用时解压缩。然而,它的好处是 snap 占用更少的磁盘空间,这意味着一些大型应用程序启动速度会更慢。 Snap 和其他常见 Linux 打包格式(如 **_Flatpak_**)之间的一个重要区别是,Snap 为任何类别的 Linux 软件提供支持,如物联网应用程序、服务器工具、桌面应用程序,甚至打印机驱动程序堆栈等系统服务。为了确保这一点,Snap 依赖于系统提供的一些功能,例如在 Snap 内部执行套接字激活的系统服务。这导致 Snap 仅在可以获取该 **_init_** 系统的发行版上运行最佳。 Snap 商店它允许开发人员发布其采用 snap 封装的软件。上传到 Snap 商店的每个应用程序都会经过自动测试,例如恶意软件扫描。尽管如此,Snap 并没有捕捉到所有问题。在 2018 年 5 月的一个案例中,发现同一开发人员的两个应用程序包含加密货币矿工,这些矿工在应用程序执行时在后台运行。 Canonical 在发现此问题后,从 Snap 商店中删除了这些应用程序,并将 Snap 的所有权转移给第三方,第三方重新发布了不含任何矿工的 Snap。然而,Snap 的沙盒减少了恶意应用程序的影响,Canonical 建议用户仅从用户信任的发布商那里安装 Snap。 可配置沙盒在 Snap 中,应用程序在容器中执行,对主机系统的访问受限。用户可以使用接口为应用程序提供对额外功能的访问,例如录制视频、访问 USB 设备和录制音频。这些接口与常规 Linux API 协商,以便应用程序可以在沙盒中运行而无需重写。 此外,桌面应用程序可以利用 XDG 桌面门户,这是一个由 Flatpak 项目创建的标准化 API,旨在为沙盒桌面软件提供对主机资源的访问。通常,这些门户提供比原生 Linux API 更好的用户体验,因为它们在应用程序使用摄像头等资源时会请求用户的许可。缺点是工具包和应用程序需要重写才能使用这些新的 API。
一些流行的主题由 Snap 开发人员打包,但一些主题尚未支持,不常见的主题需要手动安装。如果主题不存在 Snap 包,那么用户需要选择可用的最佳主题。工作仍在继续,以提高第三方在 Snap 中打包主题以及自动安装不常见系统主题的效率。 原子化和自动更新Snapd 每天多次在后台使用原子更新检查每个 Snap 的可用更新并安装它们。更新可以回滚并应用 **_差分编码_** 以减小下载大小。 同时,发行商可以通过渠道更新和发布其软件的多个版本。所有渠道都有特定的风险和跟踪,代表在该渠道上发布的软件的稳定性和版本。默认情况下,Snap 使用渠道,即 **_latest/stable_**,它将在应用程序安装期间有新版本可用时自动更新到新版本。发行商可以创建额外渠道,以便用户可以选择连接到其软件的特定版本。
他们还可以获取长达 60 天的更新。更新会自动计量或禁用连接。一些用户抱怨,即使有这些类型的控件,也无法完全关闭自动更新。 Snapcraft对于开发人员来说,它是一个将程序打包成 Snap 格式的工具。它可以在 Snap 支持的任何 Linux 发行版、Microsoft Windows 和 macOS 上执行。Snapcraft 在虚拟机中使用 multipass 构建软件包,以确保构建的输出相同,无论它是在哪个操作系统或发行版上构建的。 Snapcraft 支持多种编程语言(如 Rust、C/C++、Python、JavaScript、Java 和 Go)和构建工具。此外,它还允许从多个来源导入应用程序的元数据,例如 **_shell 脚本、git、AppStream_** 和 **_setup.py 文件_**。 Snap 的采用最初,Snap 只支持全 Snap Ubuntu Core 的发行版,但在 2016 年 6 月,它被移植到各种各样的 Linux 发行版,成为通用 Linux 软件包的格式。Snap 需要 systemd,systemd 几乎存在于所有(但并非所有)Linux 发行版中。其他类 Unix 系统(如 **_FreeBSD_**)不受支持。Chrome 操作系统不直接支持 Snap,仅从其中安装的支持 Snap 的 Linux 发行版(如 Gallium 操作系统)支持。 几个 Linux 发行版开箱即用支持 Snap,例如 Ubuntu(及其衍生版,如 Xubuntu 和 Kubuntu)、Li-f-e、Solus、KDE Neon、Zorin OS 和 Manjaro。此外,Snap 也适用于其他几个发行版,例如 OpenSUSE、Red Hat Enterprise Linux、Raspbian、Pop! OS、Parrot Security OS、Open Embedded、Linux Mint、Kali Linux、GalliumOS、Fedora、Elementary OS、Debian 和 CentOS。
Canonical 在 2019 年决定在未来的 Ubuntu 版本中将 **_Chromium 网页浏览器_** 从 APT 包切换到 Snap。他们表示,Snap 使在所有支持的 Ubuntu 版本上支持 Chromium 变得更加高效。这使他们能够将工程资源集中在其他 Ubuntu 桌面部分。由于这一决定,像 Linux Mint 这样的 Ubuntu 衍生版不得不选择切换到 Chromium 的 Snap 版本,或者管理由 Canonical 管理的 Chromium 包版本。 Ubuntu 上的 Snap 软件包Snap 定义了 Snap 安装文件和 Snap 命令。Snap 将应用程序及其所有依赖项收集到一个压缩文件中。这些依赖项可能是数据库或 Web 服务器、库文件,或应用程序启动和执行所需的任何其他内容。 Snap 使安装更容易,因为它避免了依赖地狱的痛苦。当新应用程序无法执行时,就会出现这种情况,原因可能是所需的资源不可用,版本错误,或者其安装覆盖了以前应用程序所需的文件,导致它们无法执行。 我们可以假定 Snap 在安装时被解压缩并提取文件。然而,在运行时,Snap 文件被放置在一个块循环设备上。这允许访问文件的内部 **_SquashFS_** 文件系统。应用程序以隔离和封装的方式运行,因此其文件不会干扰系统上存在的文件。我们甚至可以安装同一应用程序的多个版本,它们不会相互冲突或交叉污染。
因此,Canonical 用一个默认安装 Snap 的 Ubuntu 软件应用程序取代了 Focal Fossa。 Ubuntu 软件中心要列出安装在计算机上的文件系统(即 **_SquashFS_**),我们可以使用 **_df_** 命令。我们将使用 **_-t_** 选项将结果限制在我们感兴趣的文件系统。 命令如下: ![]() 然后,我们将使用命令列出已安装的 Snap ![]() 有两个不同的 Snap 对应于 GNOME 桌面,两个对应于 Snap 的核心功能,一个用于 Snap Store,一个用于 GTK 主题。此外,snap-store 应用程序本身也是一个 Snap。 注意:如果在终端窗口中执行命令 snap-store,则应用程序是 Ubuntu 软件。我们通常会通过选择其图标来执行 Ubuntu 软件。我们使用命令行启动它,以证明在表面之下,它现在是 snap-store 软件 ![]() Ubuntu 软件看起来和我们想象的一样。我们可以找到以前的所有软件。 让我们找到并安装应用程序 **_“sqlitebrowser”_**。输出屏幕显示应用程序的信息。我们可以选择安装选项来安装应用程序。 如果我们不知道,我们不会怀疑引擎盖下的修改。我们需要向下滚动,我们会看到一些新的和 Snap 特定的信息。 信息列表提供了以下详细信息 ![]()
通道可以是以下之一 ![]()
安装过程完成后,我们可以再次使用以下命令检查已安装的 Snap 列表 ![]() |
我们请求您订阅我们的新闻通讯以获取最新更新。