Snap 本地构建及安装流程
本文主要介绍如何使用 snapcraft.yaml 文件在本地构建及安装 Qt Creator ROS snap 应用程序
-
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 应用程序。下面是详细步骤:
-
如果直接使用开发人员提供的 snapcraft.yaml 构建该 snap,会出现克隆源码时速度很慢的问题,所以笔者创建了原仓库的副本,您可以前往笔者的副本仓库下载:https://github.com/YMGogre/ros_qtc_plugin_snap.git
-
下载压缩包完成后,解压并移动到您的用户目录即可:
-
要构建 snap,则需要安装 snapcraft 工具,使用
ctrl+alt+T
快捷键打开一个终端并运行如下命令:sudo apt install snapcraft
-
由于构建 snap 需要配置 “multipass” 多通道支持,所以还要安装 multipass 工具:
sudo snap install multipass
笔者安装的 multipass 版本为 1.11.0:
-
前往 ros_qtc_plugin_snap 文件夹下,打开一个终端:
-
使用如下两条命令构建 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 应用程序的方法,它不使用容器或虚拟机来隔离构建环境,而是直接在主机系统上安装依赖项和构建应用程序。这种模式可以加快构建速度,但可能会对主机系统造成破坏,因此应谨慎使用。
-
笔者大概花费了1小时20分钟完成了该 snap 应用构建(中途可能会因为连接错误中断构建,无需担心重新执行一遍构建命令即可)。完成后如下图所示,可以看到在当前目录下生成了一个 snap 文件:
-
使用如下命令以在本地安装该 snap 应用程序:
sudo snap install qtcreator-ros_10.0.1_amd64.snap --dangerous --classic
--dangerous
参数用于安装本地的 snap 包,而不验证或检查其断言或签名。这些签名用于将 snap 包与其发布者和商店链接,并确保在交付和存储的过程中 snap 包保持不变。 -
随后就能在应用程序抽屉里找到刚刚安装的 snap 应用程序了:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)