AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 791395
Accepted
Sybil
Sybil
Asked: 2016-06-26 11:13:50 +0800 CST2016-06-26 11:13:50 +0800 CST 2016-06-26 11:13:50 +0800 CST

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

  • 772

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

快照概述

Snapcraft 是一个构建和打包工具,可帮助您将软件打包为快照。它使合并来自不同来源的组件和构建技术或解决方案变得容易。关键概念

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

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

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

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

物联网 ›构建应用程序

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

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

澄清,在第一次评论后:

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

package-management
  • 3 3 个回答
  • 4933 Views

3 个回答

  • Voted
  1. Best Answer
    Mark Shuttleworth
    2016-06-27T02:49:01+08:002016-06-27T02:49:01+08:00

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

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

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

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

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

    当然,提供了多少系统调用,以及它们之间的 bug 兼容程度如何,才是真正的问题。至少就目前而言,没有其他环境可以提供所有必要的系统调用,因为 snaps 使用的系统调用相对较新,并且在内核对其管理的事物的思考方式上比较深入。

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

    这很酷,欢迎补丁:)

    • 21
  2. muru
    2016-06-26T12:28:48+08:002016-06-26T12:28:48+08:00

    虽然我找不到有关 macOS 的任何信息,但这个OMG!Ubuntu文章中有一个来自 Mark Shuttleworth 的有趣引用:

    至于在 Windows 10 上运行 Snap?“这绝对是合理的”,沙特尔沃思说。

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

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


    关于Snap 安全策略和沙盒的文档以及关于 snapd 的 Arch Wiki 条目提供了丰富的信息:

    来自 Arch Wiki:

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

    从政策:

    在引擎盖下,发射器:

    • 设置各种环境变量:[…]
    • 将硬件分配给 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 不够熟悉,无法说出等价物是什么。

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

    osutil/group_other.go:

    // -*- Mode: Go; indent-tabs-mode: t -*-
    // +build !linux,!darwin,!freebsd
    

    osutil/group_linux.go:

    // -*- Mode: Go; indent-tabs-mode: t -*-
    // +build darwin freebsd linux
    // +build cgo
    

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

    • 11
  3. Janux
    2021-01-02T06:29:42+08:002021-01-02T06:29:42+08:00

    截至今天,snap可以在 MacOS 上安装但不能使用。

    $ brew install snap
    $ snap install ./some-app.snap --devmode
    Interacting with snapd is not yet supported on darwin.
    This command has been left available for documentation purposes only.
    
    • 1

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行判断机器是否需要重新启动?

  • 有没有办法重置所有包/源并从头开始?

  • 如何回滚到 PHP 5.2?

  • 包管理器之间有什么区别?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve