Автор выбрал фонд Electronic Frontier Foundation для получения пожертвований в рамках программы Write for DOnations.
Одной из самых крупных проблем при разработке приложений является конечный шаг, предусматривающий предоставление готового продукта вашим пользователям или клиентам. Многие существующие методологии развертывания приложений не отличаются удобством для пользователя и безопасностью, либо же не предоставляют возможности для автоматического обновления приложения после его установки.
Snap — это современный формат упаковки приложений с мощными опциями для песочницы и обеспечения безопасности, включая изоляцию файловой системы, автоматические обновления и комплексное управление зависимостями. Приложения Snap, или «снапы», могут загружаться и устанавливаться с помощью программы командной строки, такой как apt
или yum
. Snap предоставляется в комплекте с Ubuntu, что означает, что у приложений Snap есть самая широкая аудитория.
В этом обучающем руководстве вы создадите приложение Snap и опубликуете его в Snap Store.
Для данного обучающего руководства вам потребуется следующее:
Один сервер Ubuntu 18.04, настроенный в соответствии с инструкциями по начальной настройке сервера с Ubuntu 18.04, а также пользователь sudo без прав root.
Приложение, которое вы хотите упаковать и выпустить в качестве снапа. Это может быть сложное приложение, которое вы создали, общий проект с открытым исходным кодом, или просто приложение «Hello, world!». Если у вас еще нет приложения, в шаге 1 данного руководства описано, как создать программу Hello World в Go.
Учетная запись в Snapcraft Developer Dashboard.
Подготовив все вышеперечисленное, войдите на сервер без привилегий root, чтобы начать подготовку.
Во-первых, вы подготовите приложение к упаковке в качестве приложения Snap, обеспечив наличие всего необходимого в одной директории.
Начнем с создания новой директории для вашего снапа, после чего вам нужно перейти в эту директорию:
Затем, если у вас уже есть приложение, поместите полную копию исходного кода вашего приложения в только что созданную вами директорию. Данный процесс в значительной степени зависит от конкретного приложения, которое вы упаковываете, но если ваш исходный код хранится в репозитории Git, вы можете воспользоваться командой git init
, чтобы инициализировать репозиторий для директории и загрузить весь соответствующий код.
Если у вас еще нет приложения, которое вы хотите упаковать, вы можете создать программу Hello World и использовать ее. Если вам потребуется добавить дополнительный контекст при написании этой программы на языке Go, ознакомьтесь с руководством Написание вашей первой программы на Go.
Вы можете сделать это, создав новый файл Go и открыв его в предпочитаемом вами текстовом редакторе:
Добавьте в файл следующий код:
Сохраните и закройте файл.
Если у вас не установлен Go, вы можете сделать это с помощью следующей команды:
После установки Go вы можете запустить вашу новую программу, чтобы проверить ее работу:
Вывод должен выглядеть так:
OutputHello, world!
Вы успешно подготовили приложение для упаковки в качестве снапа. Далее вы установите программное обеспечение, необходимое для начала процесса упаковки.
На этом шаге вы загрузите и установите Snapcraft, официальный инструмент для упаковки приложений Snap. Snapcraft доступен в Snap Store, встроенный в Ubuntu по умолчанию. Это означает, что вы можете установить Snapcraft из командной строки с помощью команды snap
.
Команда snap
является эквивалентом команды apt
, но вы можете использовать ее для установки программного обеспечения из Snap Store вместо пакетов из репозиториев Apt.
Чтобы установить Snapcraft, запустите следующую команду:
Воспользуйтесь аргументом команды --classic
, чтобы установить Snapcraft без строгих функций песочницы, которые обычно используются снапами. Snapcraft требует наличие этого аргумента, поскольку он подразумевает более безопасный доступ к системе для более надежной упаковки приложений.
После установки Snapcraft вы увидите следующее:
Outputsnapcraft 3.9.8 from Canonical✓ installed
После этого вы можете еще раз проверить корректность установки Snapcraft с помощью следующей команды:
В результате будет выведено примерно следующее:
Outputsnapcraft, version 3.9.8
После того как вы установили Snapcraft, вы можете приступать к определению конфигурации и метаданных для вашего приложения Snap.
На этом шаге вы начнете определять конфигурацию, структуру и метаданные для вашего приложения Snap.
Сначала нужно убедиться, что вы до сих пор работаете в директории приложения Snap:
Затем создайте и отредактируйте файл snapcraft.yaml
в вашем предпочитаемом текстовом редакторе:
Вы будете использовать файл snapcraft.yaml
для хранения всех элементов конфигурации для вашего приложения Snap, включая имя, описание и версию, а также настройки, связанные с управлением зависимостями и песочницей.
Начните с определения имени, резюме, описания и номера версии вашего приложения:
Имя вашего снапа должно быть уникальным, если вы хотите опубликовать его в Snap Store — выполните поиск других приложений с таким же именем, чтобы убедиться, что имя еще не занято.
Далее вы можете определить команду (команды) для связи с вашим приложением. Это позволит использовать ваш снап напрямую из командной строки Bash в качестве обычной команды.
Добавьте следующее в файл snapcraft.yaml
:
your-snap-command
— это имя команды, которую вы хотите определить. Например, вы сможете использовать команду helloworld
для запуска вашей программы Hello World.
Воспользуйтесь command: your-snap
, чтобы сообщить Snapcraft, что нужно делать, когда команда приложения запущена. В случае программы Hello World вы будете использовать значение helloworld
для ссылки на файл helloworld.go
, что позволит Snapcraft успешно запускать вашу программу.
В результате вы получите следующий пример конфигурации:
Если имя команды совпадает с именем снапа, вы сможете запустить его напрямую из командной строки. Если команда не соответствует имени снапа, к команде будет автоматически добавлен префикс с именем снапа. Например, helloworld.command1
.
В заключение вы можете определить части, которые составляют приложение Snap. Приложения Snap состоят из нескольких частей, которые являются компонентами, которые составляют приложение. Во многих случаях существует только одна часть, т. е. само приложение.
Каждая часть имеет соответствующий плагин. Например, для компонентов вашего приложения, написанного на Ruby, используется плагин ruby
, а для компонентов, написанных на Go, используется плагин go
.
Вы можете использовать команду Snapcraft list-plugins
, чтобы определить надлежащий плагин (плагины) для вашего приложения:
В результате вы получите примерно следующий список:
Outputant catkin-tools conda dump gradle make nil python rust
autotools cmake crystal go kbuild maven nodejs qmake scons
catkin colcon dotnet godeps kernel meson plainbox-provider ruby waf
Наиболее распространенные плагины — это плагины для распространенных языков программирования, таких как Go, Rust, Ruby или Python.
После того как вы определили надлежащие плагины для вашего приложения, вы можете переходить к добавлению конфигурации частей
для вашего файла snapcraft.yaml
:
Вы используете параметр конфигурации source
, чтобы задать относительный путь к исходному коду вашего приложения. Обычно это будет та же директория, где расположен сам файл snapcraft.yaml
, поэтому значение source
будет просто точка (.
).
Примечание. Если компонент вашего приложения имеет любые зависимости, необходимые для сборки или запуска, вы можете задать их с помощью атрибутов build-packages
и stage-packages
. Указанные названия зависимостей автоматически будут подбираться диспетчером пакетов по умолчанию для вашей системы.
Например:
Некоторые плагины Snapcraft имеют собственные конкретные опции, которые могут потребоваться вашему приложению, поэтому полезно изучить соответствующие страницы руководства для вашего плагина:
В случае с приложениями Go вы также можете указать go-importpath
. Для конфигурации Hello World вы получите следующий пример конфигурации:
parts:
helloworld:
plugin: go
source: .
go-importpath: helloworld
Вы можете оставить ваш файл snapcraft.yaml
открытым, чтобы внести дальнейшие изменения в конфигурацию на следующем шаге.
Вы определили базовую конфигурацию для вашего приложения Snap. Далее вы настроите аспекты безопасности и песочницы для вашего приложения.
Приложения Snap разрабатываются для запуска в изолированной среде, поэтому в этом шаге вы настроите песочницу для вашего снапа. Во-первых, вам нужно будет активировать песочницу для вашего приложения, известную в Snapcraft как ограждение
.
Добавьте следующее в файл snapcraft.yaml
:
. . .
confinement: strict
Это позволит организовать песочницу для вашего приложения, предотвращая возможность доступа через Интернет, из других запущенных снапов или самой хост-системы. Однако в большинстве случаев приложения должны иметь возможность передавать данные за пределы своей песочницы, например, когда им требуется получить доступ к Интернету или выполнить чтение/запись в файловой системе.
Эти разрешения, известные в Snapcraft как интерфейсы, могут быть предоставлены вашему приложению Snap с помощью плагов. С помощью плагов вы можете организовать детальный контроль песочницы для вашего приложения, чтобы предоставить ей доступ к тому, что нужно, и ничего более (принцип «минимум полномочий»).
Конкретные интерфейсы, которые могут потребоваться, будут варьироваться в зависимости от вашего приложения. Ниже представлен ряд наиболее распространенных интерфейсов:
audio-playback
— разрешает вывод аудио/проигрывание звуков.audio-record
— разрешает ввод/запись аудио.camera
— разрешает доступ к подключенным веб-камерам.home
— разрешает доступ к нескрытым файлам внутри домашней директории.network
— разрешает доступ к сети/Интернету.network-bind
— разрешает привязку портов для работы в качестве сетевой службы.system-files
— разрешает доступ ко всей файловой системе хост-компьютера.Полный список доступных интерфейсов можно найти в документации Snapcraft в разделе Поддерживаемые интерфейсы.
После того как вы определили все требуемые интерфейсы для вашего приложения, вы можете начать присвоение плагов
внутри вашего файла snapcraft.yaml
.
Следующий пример конфигурации позволит приложению получить доступ к сети и домашнему пространству пользователей:
Сохраните и закройте файл.
Имя плага должно быть описательным, чтобы пользователи могли понять, для чего нужен плаг.
Вы активировали песочницу для вашего снапа и настроили несколько плагов для предоставления ограниченного доступа к системным ресурсам. Далее вы сможете завершить процесс сборки приложения Snap.
Теперь, когда вы создали всю необходимую конфигурацию для вашего снапа, вы можете перейти к его сборке и локальному тестированию пакета Snap.
Если вы выполняли инструкции, используя в качестве приложения программу Hello World, ваш итоговый файл snapcraft.yaml
будет выглядеть примерно следующим образом:
Чтобы выполнить сборку приложения Snap, запустите команду snapcraft
внутри директории вашего снапа:
Snapcraft будет автоматически запускать виртуальную машину (VM) и начинать сборку снапа. После завершения процесса Snapcraft будет закрыт, а вы увидите примерно следующее:
OutputSnapped your-snap_1.0_amd64.snap
Теперь вы можете выполнить установку вашего снапа локально, чтобы проверить его работоспособность:
Аргумент команды --dangerous
требуется, поскольку вы выполняете установку локального снапа, который не подписан.
Outputyour-snap 1.0 installed
После завершения процесса установки вы можете запустить ваш снап с помощью связанной команды. Например:
В случае используемой в качестве примера программы Hello World вы увидите следующее:
OutputHello, world!
Также вы можете просмотреть политику песочницы для вашего снапа, чтобы убедиться, что присвоенные разрешения были получены нормально:
В результате будет выведен примерно следующий список плагов и интерфейсов:
Outputsnap connections your-snap
Interface Plug Slot Notes
home your-snap:your-snap-home :home -
network your-snap:your-snap-network :network -
На этом шаге вы выполнили сборку вашего снапа и установили его локально для проверки его работы. Далее вы опубликуете ваш снап в Snap Store.
Теперь, когда вы выполнили сборку и тестирование приложения Snap, пришло время опубликовать его в Snap Store.
Начните со входа в учетную запись разработчика Snap с помощью приложения командной строки Snapcraft:
Следуйте указаниям и введите ваш адрес электронной почты и пароль.
Далее вам нужно зарегистрировать имя приложения в Snap Store:
После того как вы зарегистрируете имя снапа, вы сможете загрузить созданный пакет приложения Snap в магазин:
Результат будет выглядеть примерно так:
OutputPreparing to push 'your-snap_1.0_amd64.snap'.
Install the review-tools from the Snap Store for enhanced checks before uploading this snap.
Pushing 'your-snap_1.0_amd64.snap' [===================================================================================================] 100%
Processing...|
Ready to release!
Revision 1 of 'your-snap' created.
Каждый раз, когда вы выполняете загрузку в Snap Store, номер версии увеличивается, начиная с 1. Это полезно, так как помогает определить различные сборки вашего снапа.
Наконец, вы можете опубликовать ваш снап:
Если вы впервые загружаете снап в Snap Store, версия будет иметь номер 1
. Также вы можете выбрать каналы stable
, candidate
, beta
и edge
, если у вас есть несколько версий приложения на разных этапах разработки.
Например, следующая команда будет публиковать версию 1
снапа Hello World на канале stable
:
Результат будет выглядеть примерно так:
OutputTrack Arch Channel Version Revision
latest amd64 stable 1.0 1
candidate ^ ^
beta ^ ^
edge ^ ^
The 'stable' channel is now open.
Теперь вы можете выполнить поиск приложения в Snap Store и установить его на любом из ваших устройств.
На данном заключительном шаге вы загрузили созданный вами пакет в Snap Store и опубликовали его.
В этой статье вы настроили и выполнили сборку приложения Snap, а затем опубликовали его в Snap Store. Теперь у вас есть базовые знания, необходимые для поддержания вашего приложения и сборки новых приложений.
Если вы хотите продолжить изучение снапов, просмотрите весь магазин Snap Store. Также вы можете ознакомиться со Справочником по Snapcraft YAML, чтобы узнать о нем подробнее и определить дополнительные атрибуты для вашей конфигурации снапа.
Наконец, если вы хотите продолжить дальнейшее изучение разработки приложений Snap, вы можете прочитать о реализации исполняемых файлов в Snap, которые позволяют Snap динамически реагировать на изменения системы, например, обновления или изменения политики безопасности.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!