Snap
Snap 是由 Ubuntu 背后的公司 Canonical 开发和维护的一个包管理器,是一种安全且可扩展的方式,用于在 Linux 设备上嵌入应用程序。Snap 是一个带有所有依赖项的应用程序容器。Snap 可以使用单个命令安装在任何运行 Linux 的设备上。使用 Snap,软件更新是自动且弹性的。应用程序在其自己的沙盒中完全隔离运行,从而最大限度地减少安全风险。
Snap 使用了 SnsquashFSap文件系统,一种开源的压缩,只读文件系统,基于 GPL 协议发行。一旦 snap 被安装后,其就有一个只读的文件系统和一个可写入的区域。应用自身的执行文件、库、依赖包都被放在这个只读目录,意味着该目录不能被随意篡改和写入。
Snap 应用默认都被严格限制(confined),即限制系统权限和资源访问。但是,可通过授予权限策略来获得对系统资源的访问。这也是安全性更好的表现。

Snapcraft
一个命令行工具,用于构建 Snap 软件包(这个名词概念比较宽泛,它同时涵盖了 snap 和用来构建它们的命令行工具、 snapcraft.io 网站,以及在这些技术的支撑下构建的几乎整个生态系统)。

snapcraft.yaml
snapcraft.yaml 文件是通过 Snapcraft 创建 snap 的主要入口点。它包含了 snapcraft 命令构建 snap 所需的所有细节。它是一种配置文件,采用 YAML 语言编写。当 snapcraft 运行并解析此文件时,它将使用声明的信息来构建 snap。

Multipass
Canonical Multipass 是一款轻量级的虚拟机管理器,它可以在 Linux、Windows 和 macOS 上运行。它旨在为开发人员提供一个简单的命令来获得全新的 Ubuntu 环境。它使用 Linux 上的 LXD,Windows 上的 Hyper-V 和 macOS 上的 HyperKit 来以最小的开销运行虚拟机。它还可以在 Windows 和 macOS 上使用 VirtualBox。

💬 目前笔者并没有尝试过自己开发 snap 应用程序,但我们可以尝试构建别人的 snap 应用程序来熟悉 snap 应用的构建流程。比如:

snap 商店提供了带 ROS 插件的 Qt 的集成开发环境(IDE)Qt Creator 的 snap 包,其开发人员还提供了该 snap 包的 snapcraft.yaml 文件;我们可以尝试使用别人的 snapcraft.yaml 文件在本地构建并安装别人的 snap 应用程序。下面是详细步骤:

  1. 如果直接使用开发人员提供的 snapcraft.yaml 构建该 snap,会出现克隆源码时速度很慢的问题,所以笔者创建了原仓库的副本,您可以前往笔者的副本仓库下载:https://github.com/YMGogre/ros_qtc_plugin_snap.git
    在这里插入图片描述

  2. 下载压缩包完成后,解压并移动到您的用户目录即可:
    在这里插入图片描述

  3. 要构建 snap,则需要安装 snapcraft 工具,使用 ctrl+alt+T 快捷键打开一个终端并运行如下命令:

    sudo apt install snapcraft
    

    在这里插入图片描述

  4. 由于构建 snap 需要配置 “multipass” 多通道支持,所以还要安装 multipass 工具:

    sudo snap install multipass
    

    在这里插入图片描述

    笔者安装的 multipass 版本为 1.11.0
    在这里插入图片描述

  5. 前往 ros_qtc_plugin_snap 文件夹下,打开一个终端:
    在这里插入图片描述

  6. 使用如下两条命令构建 snap:

    snapcraft clean && snapcraft
    # 如果上面的命令执行时出现错误,可以改为执行下面的命令(参考链接:https://github.com/canonical/multipass/issues/2620#issuecomment-1163064266):
    snapcraft clean && snapcraft --destructive-mode
    
    snapcraft clean
    清理 snap 应用程序的构建目录,删除所有之前构建的文件和目录。
    snapcraft
    构建 snap 应用程序。
    snapcraft --destructive-mode
    在破坏模式下构建 snap 应用程序。破坏模式是一种快速构建 snap 应用程序的方法,它不使用容器或虚拟机来隔离构建环境,而是直接在主机系统上安装依赖项和构建应用程序。这种模式可以加快构建速度,但可能会对主机系统造成破坏,因此应谨慎使用。
  7. 笔者大概花费了1小时20分钟完成了该 snap 应用构建(中途可能会因为连接错误中断构建,无需担心重新执行一遍构建命令即可)。完成后如下图所示,可以看到在当前目录下生成了一个 snap 文件:
    在这里插入图片描述

  8. 使用如下命令以在本地安装该 snap 应用程序:

    sudo snap install qtcreator-ros_10.0.1_amd64.snap --dangerous --classic
    

    --dangerous 参数用于安装本地的 snap 包,而不验证或检查其断言或签名。这些签名用于将 snap 包与其发布者和商店链接,并确保在交付和存储的过程中 snap 包保持不变。

    在这里插入图片描述

  9. 随后就能在应用程序抽屉里找到刚刚安装的 snap 应用程序了:
    在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐