문서를 참조하는 데 문제가 있습니다. 아직 커피를 먹지 않았거나 (참) 문서가 누락되었습니다 ( 업데이트 : 여기에서 일부 문서 )
에서 앱을 선언하면 snapcraft.yaml
설치시 바이너리 래퍼가 생성되어 /snap/bin/
패키지 및 앱 이름에 따라 이름이 지정됩니다 (앱이 서비스 인 경우이 래퍼는 시스템화 된 .service 파일입니다).
해당 랩퍼에는 응용 프로그램이 실행될 환경이 대부분 포함되어 있습니다. 이 질문 SNAP_DATA
과 가장 관련이있는 두 가지 환경 변수는 및 SNAP_USER_DATA
입니다.
이 두 디렉토리는 모두 버전 화 되므로 업그레이드 / 롤백 기능에 매우 중요합니다 . 즉, 주어진 스냅의 각 버전에는 이러한 디렉토리의 자체 사본이 있습니다. 예를 들어 설명하겠습니다.
"foo"스냅 버전 1을 설치한다고 가정 해보십시오. 그러면 두 개의 디렉토리가 생성됩니다.
/var/snap/foo/1
( SNAP_DATA
)
/home/<user>/snap/foo/1
( SNAP_USER_DATA
)
이제 "foo"는이 두 가지를 모두 사용합니다. 데이터베이스를에 호스팅하는 서비스 SNAP_DATA
와에 구성 파일을 사용하는 바이너리가있을 수 있습니다 SNAP_USER_DATA
.
이제 "foo"버전 2가 릴리스되고 자동으로 업데이트됩니다. 일이 우선 즉 /var/snap/foo/1
에 복사 /var/snap/foo/2
하고 /home/<user>/snap/foo/1
복사됩니다 /home/<user>/snap/foo/2
. 그런 다음 새 버전이 시작됩니다. 이전 데이터에서 실행 중이며의 데이터베이스로 실행할 데이터베이스 마이그레이션이있을 수 있습니다 SNAP_DATA
. 그렇게하고 사라집니다.
이제 이러한 마이그레이션이 어떤 이유로 든 실패한다고 말하면이 애플리케이션을 롤백해야합니다. 그것은 / 스냅 / foo는 응용 프로그램의 이전 버전 사용하기 시작 SNAP_DATA
가리키는되었다 /var/snap/foo/1
및 SNAP_USER_DATA
가리키는했다 /home/<user>/snap/foo/1
. 이 작업은 데이터 복사본에서 실행되었으므로 마이그레이션이 실행되기 전 시점에서 이전 버전의 항목을 선택합니다.
간단히 말해 : 업그레이드 / 롤백 전략의 중요한 부분이기 때문에 또는에 home
저장할 수있는 데이터를 저장 하기 위해 인터페이스를 사용하지 마십시오 . 그들을 활용하십시오!SNAP_DATA
SNAP_USER_DATA
v2.0.10 업데이트 :
두 개의 새로운 데이터 디렉토리도 도입되었습니다.
SNAP_COMMON
옆 SNAP_DATA
에 앉아 있지만 구체적으로 버전이 없습니다 . 특정 스냅의 모든 개정판은이 디렉토리에 액세스 할 수 있으므로 업그레이드 / 롤백 등에 복사되지 않습니다. 특히 버전이 지정되지 않은 큰 파일 (예 : 실제 버전에 맞지 않는 원시 데이터)에 사용될 수 있습니다.
SNAP_USER_COMMON
옆 SNAP_USER_DATA
에 앉아 있지만 다시 구체적으로 버전이 없습니다 . 사용자별로 비 버전 별 데이터를 저장하는 데 사용될 수 있습니다.
v2.15 업데이트 :
그 안에 위치한 파일 /snap/bin
은 더 이상 환경을 정의하는 래퍼가 아니라에 대한 심볼릭 링크 /usr/bin/snap
입니다. 따라서 응용 프로그램이 실행되는 환경을 결정하는 방법은 다음과 snap run --shell <snap>.<app>
같습니다.
$ sudo snap install hello-world
$ snap run --shell hello-world
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
$ env | grep SNAP
SNAP_USER_COMMON=/home/kyrofa/snap/hello-world/common
SNAP_REEXEC=
SNAP_LIBRARY_PATH=/var/lib/snapd/lib/gl:
SNAP_COMMON=/var/snap/hello-world/common
SNAP_USER_DATA=/home/kyrofa/snap/hello-world/27
SNAP_DATA=/var/snap/hello-world/27
SNAP_REVISION=27
SNAP_NAME=hello-world
SNAP_ARCH=amd64
SNAP_VERSION=6.3
SNAP=/snap/hello-world/27
SNAP_USER_COMMON
snap에 의해 dir이 자동으로 생성 되지 않습니까? 런처 스크립트는 스크립트를/snap/bin/
작성하지 않으며 스냅 내부에서 수동으로 작성하는 데 실패합니다 (권한 거부). 그러나 실행snap run app
하면 해당 폴더가 만들어집니다 (그러나 명령이 실패합니다execv failed: No such file or directory
... 해당 명령을 사용하는 방법을 모릅니다).