在过去几年里,Linux社区在Linux系统的软件包管理领域取得了一些显著的进展,特别是在通用或跨发行版软件打包和分发方面。其中一项进展是由Canonical开发的Snap软件包格式,这家公司是流行的Ubuntu Linux的制造商。
什么是Snap软件包?
Snaps是跨发行版、无依赖性、易于安装的应用程序,打包了所有运行所需的依赖项,可以在所有主要Linux发行版上运行。从单个构建中,一个snap(应用程序)将在桌面、云端和物联网上的所有支持的Linux发行版上运行。支持的发行版包括Ubuntu、Debian、Fedora、Arch Linux、Manjaro和CentOS/RHEL。
Snaps是安全的 – 它们被限制和沙盒化,以防止它们危害整个系统。它们在不同的限制级别下运行(这是与基础系统和彼此隔离的程度)。值得注意的是,每个snap都有一个由snap的创建者精心选择的接口,根据snap的要求,提供对特定系统资源的访问,超出其限制,如网络访问、桌面访问等。
在 snap 生态系统中,另一个重要概念是 频道。一个 频道 确定了安装的 snap 的发布版本以及跟踪更新,它由 track、风险级别和分支组成并细分。
snap 软件包管理系统的主要组件包括:
- snapd – 在 Linux 系统上管理和维护您的 snap 的后台服务。
- snap – 应用程序软件包格式和用于安装、移除 snap 以及在 snap 生态系统中执行许多其他操作的命令行界面工具。
- snapcraft – 用于构建 snap 的框架和强大的命令行工具。
- snap store – 开发者可以在此分享他们的 snap,而 Linux 用户可以搜索和安装它们的地方。
此外,snaps 也会自动更新。您可以配置更新发生的时间和方式。默认情况下,snapd 守护进程每天检查更新最多四次:每次更新检查被称为 刷新。您也可以手动启动刷新。
如何在 Linux 中安装 Snapd
如上所述,snapd 守护进程是在 Linux 系统上管理和维护您的 snap 环境的后台服务,通过实现限制策略和控制允许 snap 访问特定系统资源的接口。它还提供了 snap 命令,并提供了许多其他功能。
要在您的系统上安装snapd软件包,请针对您的Linux发行版运行相应的命令。
------------ [On Debian and Ubuntu] ------------ $ sudo apt update $ sudo apt install snapd ------------ [On Fedora Linux] ------------ # dnf install snapd ------------ [On CentOS and RHEL] ------------ # yum install epel-release # yum install snapd ------------ [On openSUSE - replace openSUSE_Leap_15.0 with the version] ------------ $ sudo zypper addrepo --refresh https://download.opensuse.org/repositories/system:/snappy/openSUSE_Leap_15.0 snappy $ sudo zypper --gpg-auto-import-keys refresh $ sudo zypper dup --from snappy $ sudo zypper install snapd ------------ [On Manjaro Linux] ------------ # pacman -S snapd ------------ [On Arch Linux] ------------ # git clone https://aur.archlinux.org/snapd.git # cd snapd # makepkg -si
在系统上安装snapd后,使用以下systemctl命令启用管理主snap通信套接字的systemd单位。
在Ubuntu及其衍生版上,这应该会由软件包安装程序自动触发。
$ sudo systemctl enable --now snapd.socket
请注意,如果snapd.socket未运行,则无法运行snap命令。运行以下命令检查它是否处于活动状态,并已启用自动启动系统引导。
$ sudo systemctl is-active snapd.socket $ sudo systemctl status snapd.socket $ sudo systemctl is-enabled snapd.socket

接下来,通过以下方式在/var/lib/snapd/snap和/snap之间创建符号链接以启用classic snap支持。
$ sudo ln -s /var/lib/snapd/snap /snap
要检查系统上安装的snapd和snap命令行工具的版本,请运行以下命令。
$ snap version

如何在Linux中安装Snaps
snap命令允许您安装、配置、刷新和删除snaps,并与更大的snap生态系统进行交互。
在安装 snap 之前,您可以检查它是否存在于 snap 商店中。例如,如果应用程序属于“聊天服务器”或“媒体播放器”类别,您可以运行以下命令来搜索,这将查询稳定渠道中可用的软件包。
$ snap find "chat servers" $ snap find "media players"

要显示有关 snap 的详细信息,例如,rocketchat-server,您可以指定其名称或路径。请注意,名称在 snap 商店和已安装的 snaps 中都会被搜索。
$ snap info rocketchat-server

要在您的系统上安装 snap,例如,rocketchat-server,请运行以下命令。如果没有提供选项,则会安装跟踪“稳定”渠道的 snap,且具有严格的安全限制。
$ sudo snap install rocketchat-server

您可以选择从不同的渠道安装:edge、beta 或 candidate,通过分别使用 --edge
、--beta
或 --candidate
选项。或使用 --channel
选项并指定您希望从中安装的渠道。
$ sudo snap install --edge rocketchat-server $ sudo snap install --beta rocketchat-server $ sudo snap install --candidate rocketchat-server
在 Linux 中管理 Snaps
在本节中,我们将学习如何在 Linux 系统中管理 snaps。
查看已安装的 Snaps
要显示已安装在您系统上的 snaps 的摘要,请使用以下命令。
$ snap list

当前版本,请指定其名称。您还可以通过添加--all
选项来列出所有可用的版本。
$ snap list mailspring OR $ snap list --all mailspring

更新和回滚Snap
您可以按如下方式更新指定的snap,或者如果没有指定snap,则更新系统中的所有snap。refresh命令会检查snap正在跟踪的通道,并在可用时下载并安装snap的较新版本。
$ sudo snap refresh mailspring OR $ sudo snap refresh #update all snaps on the local system

在将应用程序更新到新版本后,您可以使用revert命令恢复到先前使用的版本。请注意,与软件相关的数据也将被恢复。
$ sudo snap revert mailspring

现在当您检查mailspring的所有版本时,最新的版本是已禁用,以前使用的版本现在处于活动状态。
$ snap list --all mailspring

禁用/启用和删除Snaps
如果您不想使用某个snap,可以禁用它。禁用后,snap的二进制文件和服务将不再可用,但所有数据仍将保留。
$ sudo snap disable mailspring
如果需要再次使用snap,可以启用它。
$ sudo snap enable mailspring
要完全删除系统中的snap,请使用remove命令。默认情况下,将删除snap的所有版本。
$ sudo snap remove mailspring
要删除特定版本,请使用--revision
选项,如下所示。
$ sudo snap remove --revision=482 mailspring
要注意的关键是,当您移除一个snap时,其数据(如内部用户、系统和配置数据)将由snapd(版本2.39及更高版本)保存为快照,并存储在系统上31天。如果在31天内重新安装snap,则可以恢复数据。
结论
Snaps在Linux社区中变得越来越流行,因为它们为任何Linux发行版提供了一种方便的安装软件的方式。在本指南中,我们展示了如何在Linux中安装和使用snaps。我们介绍了如何安装snapd,安装snaps,查看已安装的snaps,更新和恢复snaps,以及禁用/启用和删除snaps。
您可以通过下面的反馈表格提问或联系我们。在本指南的下一部分中,我们将介绍如何在Linux中管理snaps(命令、别名、服务和快照)。