ドキュメントの参照に問題があります。つまり、まだコーヒーを飲んでいない(true)か、ドキュメントが不足しています(update:いくつかのドキュメントがあります)
でアプリを宣言snapcraft.yaml
すると、インストール時にバイナリラッパーが生成され/snap/bin/
、パッケージとアプリ名に基づいて名前が付けられます(アプリがサービスの場合、このラッパーはsystemd .serviceファイルになります)。
そのラッパーには、アプリケーションが実行される環境のほとんどが含まれています。この質問に最も関連する2つの環境変数があるSNAP_DATA
とSNAP_USER_DATA
。
これらのディレクトリは両方ともバージョン管理されているため、アップグレード/ロールバック機能にとって非常に重要です。つまり、特定のスナップの各バージョンには、これらのディレクトリの独自のコピーがあります。例で説明しましょう。
「foo」スナップのバージョン1をインストールするとします。これにより、2つのディレクトリが作成されます。
/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の更新:
2つの新しいデータディレクトリも導入されました。
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
dir はsnapdによって自動的に作成されていませんか?のランチャースクリプトで/snap/bin/
は作成されず、スナップショット内で手動で作成すると失敗します(許可は拒否されます)。実行snap run app
すると、そのフォルダーが作成されます(ただし、コマンドは失敗しexecv failed: No such file or directory
ます...そのコマンドの使用方法がわかりません)。