У мене виникають проблеми з посиланням на вас з документацією, а це означає, що я ще не випив кави (правда), або ми пропустили якусь документацію ( оновлення : деяка документація тут )
Коли ви декларуєте додатки у своїх програмах snapcraft.yaml
, це призводить до того, що при встановленні та розміщенні в ньому створюється двійкова обгортка /snap/bin/
, названа за назвою вашого пакета та додатка (зауважте, що якщо додаток є послугою, ця обгортка замість цього має системний файл .service).
Ця обгортка містить більшу частину середовища, в якому буде працювати програма. Дві змінні середовища, які є найбільш актуальними для цього питання, є SNAP_DATA
і SNAP_USER_DATA
.
SNAP_DATA
є загальносистемною областю для запису (в /var/snap/
). Наприклад, це може використовуватися для розміщення журналів для служб.
SNAP_USER_DATA
- область, що записується в домашньому каталозі користувача, що запускає додаток (конкретно /home/<user>/snap/
). Це може бути використано для файлів конфігурації для користувачів тощо.
Обидва цих каталоги дуже важливо для функціональності поновлення / відкату, так як обидва вони версіоніруются . Тобто кожна версія даного оснащення має свою копію цих каталогів. Поясню на прикладі.
Скажімо, ви встановлюєте версію 1 оснастки "foo". Це створить два каталоги:
/var/snap/foo/1
( SNAP_DATA
)
/home/<user>/snap/foo/1
( SNAP_USER_DATA
)
Тепер скажіть, що "foo" використовує і те, і інше. Можливо, у ньому є служба, в якій розміщується база даних SNAP_DATA
, і двійковий файл, який використовує конфігураційні файли в SNAP_USER_DATA
.
Зараз випущена версія 2 "foo", і вона автоматично оновлюється. Перше, що трапляється, це те, що /var/snap/foo/1
копіюється /var/snap/foo/2
і /home/<user>/snap/foo/1
копіюється в нього /home/<user>/snap/foo/2
. Тоді нова версія запускається. Слід зауважити, що він працює на старих даних, і, можливо, у нього є деякі міграції бази даних для запуску до бази даних в SNAP_DATA
. Це робить це, і далеко йде.
Тепер скажіть, що ці міграції не вдаються з будь-якої причини, і цю програму потрібно скасувати назад. Він починає використовувати стару версію програми / snap / 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
створюється dir автоматично створено snapd? Сценарій запуску/snap/bin/
не створює його, а його створення вручну всередині оснастки не вдається (дозвіл відмовлено). При запускуsnap run app
створюється ця папка (але команда не вдаєтьсяexecv failed: No such file or directory
... Я не маю уявлення, як використовувати цю команду).