Snapcraft:多应用客户端-服务端snap开发教程

by liam zheng on 31 March 2020

在过去几个月我们发布了一些如何使用RustJavaC/C++和其他语言来开发snap桌面应用的文章。在这些从入门到精通的教程中,我们以一个代表性的snapcraft.yaml文件来介绍开发构建snap所需的具体细节。

今天,我们希望脱离这一过程,而将重点放在服务器端。我们将为你提供一个包含两个有趣组件的snapcraft.yaml的概述:a)它将拥有多个应用程序; 通常,snap包含一个应用程序。b)它具有简单的后台服务,其他应用程序可以连接到该服务。 我们一起来看一下。

Snapcraft yaml

以下是snapcraft.yaml文件的内容:

apps:
  borg:
    command: bin/borg
    daemon: simple
    restart-condition: on-abnormal
    plugs:
      - home
      - network
      - network-bind
  locutus:
    command: bin/locutus
    plugs:
      - home
      - network

里面的内容是什么?

首先,我们申明了一个名为borg应用程序的服务端bundle。 它是一个简单的服务,重启条件是on-abnormal”(一个基于systemd返回值的systemd状态)。

其次,为了让服务能工作,它需要能够于网络端口绑定。因此,我们定义了network-bind接口。请主义如果你的应用程序需要绑定特殊权限的端口,你需要使用sudo来让它能正常运行。snaps的使用不会改变底层的安全要求。

我们也定义了home目录和网络的访问权(以便于服务可以立即读取一个配置文件),使得应用程序可以使用网络。除声明绑定外,这些是必需的,除非你的服务被设计为仅在本机上运行和监听。

在第二部分,我们申明了客户端的bundle,即仅需要访问home目录(配置文件、证书等等)和网络。通过上述操作,你可以在各种系统上以一种经典客户端-服务端的模型来运行snap的组件应用。

如何调用一个多应用的snap程序?

你可能有关于单个snap内包含多个应用程序调用的疑问,以及用户如何运行他们。当一个应用程序名称符合snap名称时,例如: igor,那么你只需要运行“igor”或者“/snap/bin/igor”。在这里,调用稍微有些不同。我们以名为“picard”的snap举例,基于上述内容,要运行服务端,操作命令为:

picard.borg

相似地,要运行客户端,命令为:

picard.locutus

用户也可以手动创建aliases来使用上应用程序。同时,在没有明显的名称空间冲突的情况下,开发者可以要求Snap应用商店团队为其软件自动创建别名。这也能达到一种顺畅和无缝的用户体验。在这个例子中,borg会被映射成picard.borg,locutus也会被映射成picard.locutus。

总结

我们希望今天的教程能把如何开发snap的过程和包括多应用程序和客户端-服务器方案变得更简易清楚。当然,创建snapcraft.yaml只是开发工作中一个部分,你也需要确保你的软件组件能互相正常工作。不过,现在你已经了解了snapcraft部分的内容了。

如何你有其他的评论或者需要更多相关可以帮助到你的内容,请加入我们的论坛与我们一起探讨。

封面图片来自于: Marlon CoronaUnsplash

查看更多内容

MicroK8s现在已原生支持Windows和macOS

Windows和macOS的开发者现在可以原生地使用MicroK8s。这意味着您可以像在Linux上使用一样在Windows和Mac使用kubectl与本地的MicroK8s交互。与桌面的整合使得您可以更好地在本地开发、编译、测试容器化应用。 MicroK8s与上游的Kubernetes一致,旨在提供简易性和弹性的Kubernetes环境。它提供合理的默认设置,并将最常用的组件捆绑在一起,以获得触手可及的访问体验。一个命令就可以安装一个单节点且在几秒内完成,这也使得您可以轻松地在任何系统上添加或卸载。 MicroK8s被开发者广泛地用于本地测试。安装后,您可以一条命令开启和停止Kubernetes来获得更长的电池续航。内建的GPGPU加速,Istio,Prometheus […]