다른 UNIX (예 : macOS)에서 스냅이 가능합니까?


10

나는 스냅의 아이디어를 좋아하고 우분투 VM에서 그 아이디어를 가지고 놀았습니다.

스냅 크래프트 개요

Snapcraft는 소프트웨어를 간단하게 패키징하는 데 도움이되는 빌드 및 패키징 도구입니다. 서로 다른 소스의 구성 요소를 쉽게 통합하고 기술 또는 솔루션을 구축 할 수 있습니다. 주요 컨셉

Ubuntu Core 시스템 용 .snap 패키지에는 모든 종속성이 포함되어 있습니다. 이것은 기존의 deb 또는 rpm 기반 종속성 처리에 비해 몇 가지 장점이 있습니다. 가장 중요한 것은 개발자가 앱 아래의 시스템 변경으로 인한 회귀가 없다는 것을 개발자가 항상 확신 할 수 있다는 것입니다.

Snapcraft는 snapcraft.yaml 파일에서 이러한 "종속성"을 지정할 수 있도록하여 이러한 종속성을 쉽게 번들로 제공합니다. 팔팔한

Snappy Ubuntu Core는 오늘날의 Ubuntu와 동일한 라이브러리를 사용하는 최소 서버 이미지이지만 트랜잭션이 업데이트 된 Ubuntu의 새로운 버전이지만 응용 프로그램은 더 간단한 메커니즘을 통해 제공됩니다.

Snappy 앱과 Ubuntu Core 자체는 원자 적으로 업그레이드하고 필요한 경우 롤백 할 수 있습니다. 또한 앱은 데이터와 시스템을 보호하기 위해 엄격히 제한되고 샌드 박스 처리됩니다.

IoT›빌드 앱

스냅 기반 기술은 무엇입니까? 아키텍처와 툴킷은 어떻게 보입니까? 스냅은 Linux 커널 기능에 의존합니까?

앞으로도 macOS에서도 동일한 스냅 패키지를 사용할 수 있을지 궁금하기 때문에 묻습니다.

첫 의견 후의 설명 :

macOS와 Ubuntu는 이진 호환되지 않습니다. 재 컴파일이 필요합니다. Homebrew 와 함께 macOS에서 이미 사용 가능한 거의 모든 오픈 소스가 있습니다 . 개발자는 macOS에서 스냅을 사용할 수있게되면 macOS에서 개발하고 Ubuntu에 배포 할 수 있습니다.


1
커널 기능이 포함되어 있지 않더라도 macOS 및 Linux에서 다시 컴파일하지 않고 정적이 아닌 컴파일 된 응용 프로그램이 실행되지 않을 것으로 예상됩니다. 실행 파일 형식이 다르면 ABI는 기본 POSIX 시스템에 따라 다릅니다. 호출은 다를 수 있으며, 특히 POSIX를 초과하는 응용 프로그램의 경우 동등한 시스템 호출이 다릅니다. 이것들은 어떤 포장 도 극복 할 수 있다고 생각하는 장벽이 아닙니다 . 그렇지 않으면 와인과 달링과 같은 프로젝트는 오래 전에 성공했을 것입니다.
muru

그렇다면 macOS에 스냅을 설치하거나 macOS에 스냅을 생성 하시겠습니까? 귀하의 질문은 처음에는 전자처럼 보였으며 이제는 후자처럼 보입니다.
muru

어쨌든 스냅은 여전히 ​​다른 Linux 배포판 으로 완전히 포팅되지 않았으므로 macOS에 대한 모든 조치는 파이프 꿈이 될 것으로 기대합니다.
muru

답변:


20

예, Linux syscall 인터페이스의 안정성 덕분에 가능합니다.

Linux 사용자에 대한 Linus Torvalds의 큰 약속 중 하나는 커널이 제공하는 인터페이스 세트가 안정적이라는 것입니다. 많은 사람들이 이것의 가치를 이해하지 못하거나, 그러한 헌신을 달성하기 위해 열린 프로젝트의 리더로서 그것이 얼마나 어려운지를 인식하지 못합니다. 예를 들어 그놈 API의 예측할 수없는 변화가 어떻게 대조되는지 생각해보십시오! 메일 링리스트에서 Linus가 강렬 해지는 것에 대해 들었을 때, 커널에 대한 일부 커미터가 '더 나은 아이디어를 가지고 있기 때문에'그러한 인터페이스를 변경하기로 결정했기 때문에 거의 항상 그렇습니다. 리누스는 커널 내부에서 크게 혁신 할 수 있지만 기존 시스템 콜에 의존하는 '사용자 공간'앱을 중단하지 말라고 말했다.

이러한 안정성의 결과로 다른 커널이 동일한 syscall을 제공하여 Linux에서 빌드 된 앱이 다른 커널에서 실행될 수 있습니다.

그 예로는 Joyent Triton 프로젝트가 있습니다.이 프로젝트는 SmartOS (Solaris의 자손 IllumOS의 자손)의 컨테이너에 Linux 호환 syscall을 제공합니다.

보다 널리 알려진 예는 Windows 의 새로운 Linux 하위 시스템입니다 .

물론, 몇 개의 syscall이 제공되는지, 그리고 bug-for-bug가 얼마나 호환되는지는 실제 질문입니다. 적어도 현재로서는 필요한 모든 syscall이있는 다른 환경은 없습니다. 왜냐하면 스냅이 사용하는 것은 비교적 새롭고 커널이 관리하는 것들에 대해 생각하는 방식이기 때문입니다.

그러나 그들은 확실히 제 시간에 올 것이며, 따라서 광범위한 맥락에서 스냅을 사용할 수 있다고 생각합니다.

매우 멋진 패치는 환영합니다 :)


11

macOS에 대한 정보를 찾을 수 없지만이 OMG! 우분투 기사에는 Mark Shuttleworth의 흥미로운 인용문이 있습니다.

Windows 10에서 Snap을 실행하는 방법은 무엇입니까? 셔틀 워스는“이것은 절대적으로 그럴듯하다”고 말했다.

“스냅은 보안 제한, 파일 시스템 액세스 설정 등을 위해 Linux 커널의 최신 기능을 사용하고 있으며,이 모든 기능에는 커널의 최신 메커니즘 사용이 포함됩니다. 그리고 Canonical은 많은 [이 작품]을 이끌고 있습니다. 마이크로 소프트가 [바로 연결 되려면] 시간이 좀 걸릴 것이다. "

Windows에서 실행하는 것이 "타당한"것이라면, macOS에 대해서도 마찬가지라고 말하지만 Microsoft가 Canonical과 협력하고있는 것 같습니다.


에 문서 스냅 보안 정책 및 샌드 박싱snapA와의 아치 위키 항목은 정보입니다 :

아치 위키에서 :

snap-confine은 --disable-confinement 옵션으로 빌드됩니다. 완전한 제한은 AppArmor 지원 커널 및 스냅 관련 프로파일에 의존합니다.

정책에서 :

후드 아래에서 런처 :

  • 다양한 환경 변수를 설정합니다 : […]
  • 하드웨어가 스냅에 할당되면 기본 장치 (예 : / dev / null, / dev / urandom 등)와이 스냅에 할당 된 장치로 장치 cgroup을 설정합니다.
  • 명령 별 개인용 마운트 네임 스페이스를 사용하고 / tmp에 명령 별 디렉토리를 마운트하여 개인용 / tmp를 설정합니다.
  • 명령 별 새 인스턴스를 설정합니다
  • 명령에 대한 seccomp 필터를 설정합니다
  • 명령 별 AppArmor 프로파일에서 기본 nice 값으로 명령을 실행합니다.

제한적인 AppArmor 프로파일 (파일 액세스, 애플리케이션 실행, Linux 기능 (7), 마운트, ptrace, IPC, 신호, 굵은 네트워킹)을 조합하여 명확하게 정의 된 애플리케이션 별 파일 시스템 영역, seccomp를 통한 화이트리스트 시스 콜 필터링, 개인 / tmp, 새로운 인스턴스 개발 및 장치 cgroup은 강력한 응용 프로그램 제한 및 격리를 제공합니다.

AppArmor와 seccomp는 Linux 전용이지만 제한을 선택적으로 지정할 수 있으므로 무시할 수 있습니다. 그런 다음 devpts, cgroups 및 mount 네임 스페이스가 사용됩니다. 블로킹이 있으면 그럴 것입니다. 필자는 BSD가 이에 상응하는 것을 말하기에 충분하지 않습니다.

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

누군가 관심이있는 것 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.