snap 是否可以跨其他 UNIX(例如 macOS)移植?

Jos*_*ine 11 package-management macosx snap

我喜欢 snap 背后的想法,并在 Ubuntu VM 上使用它。

Snapcraft 概述

Snapcraft 是一种构建和打包工具,可帮助您将软件打包为快照。它可以轻松整合来自不同来源的组件并构建技术或解决方案。关键概念

Ubuntu Core 系统的 .snap 包包含其所有依赖项。与传统的基于 deb 或 rpm 的依赖项处理相比,这有几个优势,最重要的是,开发人员始终可以放心,他们的应用程序下的系统更改不会触发任何回归。

Snapcraft 允许您在 snapcraft.yaml 文件中将它们指定为“部分”,从而使捆绑这些依赖项变得容易。活泼的

Snappy Ubuntu Core 是具有事务性更新的 Ubuntu 的新版本——一个最小的服务器映像,与今天的 Ubuntu 具有相同的库,但应用程序是通过更简单的机制提供的。

Snappy 应用程序和 Ubuntu Core 本身可以自动升级并在需要时回滚。应用程序也受到严格限制和沙盒化,以保护您的数据和系统。

物联网 ›构建应用

快照基于哪些技术?架构和工具包看起来如何?snap 依赖于 Linux 内核特性吗?

我问,因为我想知道将来我是否也可以在 macOS 上使用相同的 snap 包?

澄清,第一次评论后:

我知道 macOS 和 Ubuntu 不是二进制兼容的。需要重新编译。几乎所有的开源软件都已经可以在 macOS 上使用Homebrew 了。当 snap(将来)可用于 macOS 时,开发人员可以在 macOS 上开发并在 Ubuntu 上部署。

Mar*_*rth 21

是的,由于 Linux 系统调用接口的稳定性,这是可能的。

Linus Torvalds 对 Linux 用户的重大承诺之一是内核提供的接口集是稳定的。许多人没有意识到这一点的价值,或者作为一个开放项目的领导者来实现这一承诺是多么具有挑战性。例如,考虑一下 GNOME API 中不可预测的变化是如何形成对比的!当您听说 Linus 在邮件列表上变得越来越激烈时,几乎总是因为某些内核提交者决定更改这样的接口,“因为他们有更好的主意”。Linus 说你可以在内核内部进行疯狂的创新,但请不要破坏依赖于现有系统调用的“用户空间”应用程序。

由于这种稳定性,其他内核可以提供相同的系统调用,从而允许构建在 Linux 上的应用程序在其他内核上运行。

其中一个例子是 Joyent Triton 项目,它在 SmartOS(IllumOS 的后代,Solaris 的后代)上的容器中提供与 Linux 兼容的系统调用。

一个更广为人知的例子是Windows 中的新Linux 子系统

当然,提供了多少系统调用,以及它们与 bug 之间的兼容性如何,才是真正的问题。至少就目前而言,没有其他环境可以将所有必要的系统调用都准备就绪,因为 snap 使用的那些相对较新,并且在内核考虑其管理的事物的方式上有很深的层次。

但是它们肯定会及时出现,因此我认为快照将可用于广泛的环境中。

这非常酷,欢迎补丁:)


mur*_*uru 11

虽然我找不到有关 macOS 的任何信息,但我的天哪!Ubuntu文章引用了 Mark Shuttleworth 的一段有趣的话:

至于在 Windows 10 上运行 Snaps?“这绝对有道理”沙特尔沃思说。

“Snaps 正在使用 Linux 内核中的现代功能来进行安全限制、设置文件系统访问等,所有这些都涉及在内核中使用现代机制。Canonical 领导了很多 [这项工作]。微软需要一段时间才能[开始使用它]。”

如果让它在 Windows 中运行是“合理的”,我会说 macOS 也是如此,只是微软似乎正在与 Canonical 合作,这不是我听说过的苹果公司在做的事情。


在文档管理单元的安全策略和沙箱,并在snapd拱维基条目是信息:

来自 Arch 维基:

请注意, snap-confine 是使用 --disable-confinement 选项构建的;完全限制依赖于启用 AppArmor 的内核和相关的 snap 配置文件。

从政策:

在引擎盖下,启动器:

  • 设置各种环境变量:[…]
  • 将硬件分配给 snap 后,使用默认设备(例如 /dev/null、/dev/urandom 等)和分配给此 snap 的任何设备设置设备 cgroup
  • 使用每个命令的私有挂载命名空间设置一个私有的 /tmp 并在 /tmp 上挂载一个每个命令的目录
  • 设置每个命令的 devpts 新实例
  • 为命令设置 seccomp 过滤器
  • 在默认的 nice 值下执行特定于命令的 AppArmor 配置文件下的命令

这种限制性 AppArmor 配置文件的组合(调解文件访问、应用程序执行、Linux 功能 (7)、挂载、ptrace、IPC、信号、粗粒度网络)、明确定义的特定于应用程序的文件系统区域、通过 seccomp 的白名单系统调用过滤、私有/tmp、新实例 devpts 和设备 cgroups 提供强大的应用程序限制和隔离。

虽然 AppArmor 和 seccomp 仅适用于 Linux,但看起来限制是可选的,所以我们可以忽略它。然后是 devpts、cgroups 和 mount 命名空间的使用。如果有任何障碍,我认为是针对那些人的。我对 BSD 不够熟悉,无法说出等效物是什么。

snapd本身是写在Go应用程序,它应该让合理的跨平台。事实上,一些文件有非常有趣的构建目标

osutil/group_other.go

// -*- Mode: Go; indent-tabs-mode: t -*-
// +build !linux,!darwin,!freebsd
Run Code Online (Sandbox Code Playgroud)

osutil/group_linux.go

// -*- Mode: Go; indent-tabs-mode: t -*-
// +build darwin freebsd linux
// +build cgo
Run Code Online (Sandbox Code Playgroud)

所以看起来有人对此感兴趣。