Рано или поздно, но такая отличная технология Snappy придёт на десктопы со своими инструментами. Многих людей любые новшества, как говорят психологи, выбивает из зоны комфорта и они противятся нововведениям, апеллируя с старому, золотому веку, где трава была зеленее, а небо голубее.
Snappy уже по своему дизайну намного безопаснее, чем традиционная компоновка большинства Linux систем, за счёт работы абсолютно всех под присмотром системы мандатного доступа AppArmor. Сейчас в вашей домашней папке могут «рыться» все ваши программы, им позволяют права доступа (discretionary access control, DAC). В строгом мире Snappy рулит Mandatory access control (MAC). Разработчик Zygmunt Krynicki из команды Canonical Hardware Certification опубликовал статью, которая на примере текстового браузера links раскрывает внутренние механизмы Snappy.
Это первая статья из цикла, в которой фокусируется внимание на интерфейсах (interfaces) snappy. Интерфейсы являются неотъемлемой частью Snappy, представляя собой механизм, который позволяет snap выйти за пределы своего строгого пространства, заданного по умолчанию, и позволить взаимодействовать с другими частями системы: другими snap, с сетью, с десктопом и т.д.
Как скачать с интернета необходимые для компьютера драйвера программой Snappy Driver Installer
Прежде чем начать, нужно разъяснить некоторую терминологию. Дело в том, что во время разработки и развития snappy до текущей 2.0 версии применялись различные термины для устоявшегося сейчас понятия интерфейсы (interfaces). Если вы будете читать какие-либо старые материалы, то данный момент может вас только лишний раз запутать. Итак,
- Snap. Новый формат пакета, который может хранить одно или несколько приложений (app).
- App. Работоспособное, запускаемое ПО. Это может быть программа командной строки, десктопное ПО или приложения, работающие в фоне, известные как демоны или сервисы.
- Interface. Механизм с помощью которого 2 snap могут взаимодействовать с друг другом. Тип взаимодействия определяется с помощью имени интерфейса. Интерфейсы могут позволить snap общаться, обмениваться конкретными ресурсами или получать доступ к конкретному оборудованию.
- Plug. Неотъемлемая часть интерфейса. Plug может подсоединиться к slot. Большинство snap определяют один или несколько plug.
- Slot. Slot являются частью интерфейса и могут что-то предоставлять (producer) или обеспечивать (provider). Plug соединяются со слотами. Большинство слотов идёт прямиком от операционной системы и многие snap не добавляют какие-либо слоты.
Не смущайтесь, если interface/plug/slot пока вызывает не понимание. На примере текстового браузера links, который мы упакуем в snap, будет показана работа всех частей.
Сначала приведём содержимое всего snapcraft.yaml для данного snap:
name: links version: 2.12-1 summary: Web browser running in text mode description: | Links is a text mode WWW browser, similar to Lynx. It displays tables, frames, downloads on background, uses HTTP/1.1 keepalive connections. apps: links: command: links plugs: [network, network-bind] parts: links: plugin: nil stage-packages: — links
Если вы не знакомы с инструментом snapcraft, то гляньте introduction to snapcraft. Даже если вы до этого не использовали snapcraft, вышеописанный контент главного файла многое говорит за себя.
Как установить или обновить драйвера. Snappy Driver Installer
Пакет snap по имени links содержит одно приложение links, которое можно запустить командой links. Пакет snap содержит только одну часть (links), которая использует nil плагин (ничего не делать дополнительно) для размещения debian пакета links в каталог stage, из которого создаётся наш snap.
Всё что делается в данный момент — это размещение исполняемого файла links в пакет snap. Компиляция не требуется!
В Убунту, Дебиан и во множестве других дистрибутивах, приложения стартуют с правами запустившего их пользователя и обладают привилегиями данного пользователя. Другими словами, любое приложение имеет полный и неограниченный доступ к вашим персональным данным. К фото. К истории браузера. Сохранённым паролям. Ключам ssh и gpg.
Каждое приложение из сторонних репозиториев типа PPA может получить доступ к вашему ядру и другим приложениям. Вот здесь и рождается ответственность за свои действия. Некоторые люди принципиально используют только официальные репозитория в надежде, что пакеты там проверены и не содержат «неприятного» кода.
Давайте дальше. Зачем использовать 2 plug в нашем примере? Всё из-за того, что в мире Snappy софт из snap не имеет неограниченного доступа к оборудованию и персональным данным. Приложения работают в песочницах и не имеют по умолчанию доступа к сети и к другим файлам. Чтобы дать links доступ в Интернет мы используем snappy интерфейсы.
Итак, что это за интерфейсы? Интерфейс network позволяет приложениям получить доступ в сеть, как клиенту. Естественно, что текстовый браузер links должен обладать таким правом, чтобы выполнять свою работу. Интерфейс network-bind позволяет программам доступ в сеть, как сервер. Зачем это links? Это из-за необходимости привязаться (bind) к локальному сетевому интерфейсу.
Можно пропатчить links, но не сейчас. Поэтому сегодня мы даём plugs: [network, network-bind].
У интерфейса есть 2 стороны: с одной plug, а с другой slot. Plug — это потребитель. Slot — поставщик. Кто предоставляет network и network-bind? Операционная система.
Ubuntu-core, в виде snap пакета, имеет слот типа network. Когда пакет-snap links устанавливается в системе, то plug network автоматически подсоединяется к слоту network, который предоставил ubuntu-core. То же самое и с network-bind.
Проверить так ли это можно командой snap interfaces, которая отразит все plug, slot и их соединения.
snap interfaces
Slot Plug :firewall-control — :home — :locale-control — :log-observe — :mount-observe — :network links :network-bind links :network-control — :network-observe — :opengl — :snapd-control — :system-observe — :timeserver-control — :timezone-control — :unity7 — :x11 —
Что вывод сей чудный нам готовит? Две колонки, в одной слоты, в другой plug. В общем случае, каждый plug и slot отражается как snap:plug или snap:slot, но как видно в выводе существует ряд сокращений, убирающие повторы для наглядности.
Колонка slot не отражает имя ubuntu-core. Колонка plug не отражает имя plug, если оно совпадает с именем интерфейса, а просто пишет имя пакета (links).
Если сокращение было бы выключено, то вывод выглядел примерно так:
snap interfaces
Slot Plug ubuntu-core:network links:network ubuntu-core:network-bind links:network-bind
Вы можете установить данный snap в качестве примера, обладая актуальной Ubuntu 16.04 на архитектуре 64 бита, sudo snap install links . После этого запускайте links и бродите по Интернету, рассматривая его глазами поисковых роботов.
В следующей статье будут рассмотрены соединения (connections). Как можно из разъединить, соединить и что произойдёт, если вы так сделаете.
От себя хочется добавить, что в десктопной Убунту 16.04 мне не удалось запустить links, установленный через snap. Была поставлена ubuntu-core и сам links, но запуск команды links выводил
failed to create user data directory. errmsg: Too many levels of symbolic links
Snappy дали попробовать в традиционной Убунту, но видать уши не той системы торчать будут пока не перейдём полностью.
P.S Мне помог Zygmunt Krynicki и объяснил, что проблема из-за того что моя /home — ссылка на другой раздел на другом диске. Если ваш хоум стандартен, то всё ок! Дело в том, что AppArmor смотрит истинное расположение и игнорирует символические ссылки. Как выход мне посоветовали заюзать bind-mount. Извиняюсь, если кого ввёл в заблуждение. Осваиваю новые технологии, могу ошибаться
Дата последней правки: 2016-05-22 20:35:54
Источник: vasilisc.com
Структура Snappy пакета.
Canonical представила свой формат пакета snap, который является эволюцией пакета click и рано или поздно придёт на замену пакету deb. Давайте рассмотрим структуру пакета snap.
Прежде чем начать, хотелось бы вам и себе в очередной раз разжевать, а чем не угодил deb и зачем нужен snap?
Во-первых, deb пакет хорош, но он создан людьми Дебиан, которые сплош создатели операционной системы, а не прикладные программисты. То есть deb пропитан духом — прикладной софт сторонних программистов не отличим от системы. Но стороннему софту попасть в основные репозитории и там актуально обновляться очень сложно.
В deb пакете кроме бинарников есть Maintainer Scripts — команды, вызываемые при событиях удаления (post/pre rm), установки (post/pre inst). Всё это нужно проверять! Как? Canonical хочет автоматизировать сей процесс и ускорить одобрение.
Во-вторых, deb полагается на полное разрешение зависимостей между пакетами (full dependency resolution), а snappy — всё своё ношу с собой.
В-третьих, файлы из deb пакета располагаются по Filesystem Hierarchy Standard (FHS), а он пока не предполагает версионность. Snappy пакеты при обновлении будут иметь возможность отката при проблемах.
В-четвёртых, Дебиан и, следовательно, Убунту — это не rolling дистрибутивы. Есть релизы и временные рамки, в котором живёт сам релиз и софт в нём. Хотите свежую версию софта из репозитория? Добавляйте ещё один репозиторий типа PPA, где выкладывается более актуальная версия.
Canonical хочет, чтобы сторонний софт безопасно появлялся у вас так быстро, как это возможно и через официальные репозитории. Со Snappy — PPA будут не нужны.
Анатомия snappy пакета.
Snappy пакет невероятно прост. Весь код пакета разместят в /apps//current/, единственное место обитания ваших файлов вашего пакета. В сущности, ваш пакет snappy — тарбол данного каталога. Из-за работы механизма откатов при проблемах, при обновлении вашего пакета snappy будут создаваться версионные папки в /apps///, а /apps//current/ указывает на текущую, активную версию.
Нет жёстких ограничений на структуру пакета. Можете разместить любые файлы в любом месте. Можете статически слинковать бинарники или носить с собой свои библиотеки. Создать любое дерево каталогов и файлов. Единственное условие, что должен существовать файл метаданных meta/package.yaml.
Все метаданные обитают в meta/package.yaml. Их список будет ниже, а кратенько для знакомства укажем пример:
name: pkgname version: version-string binaries: — name: binary exec: path/to/binary — name: another-binary exec: path/to/another-binary
В примере, у нас есть пакет с именем pkgname, версией version-string и 2 бинарника. Бинарники, как вы поняли, нужно декларировать. Сервисы, если вы их предоставляете, так же нужно объявлять.
Данные нужно писать в каталог, зависящий от данного приложения. Предоставляются 2 места, доступные для записи. «Системный» каталог
/var/lib/apps//current/
и пользовательский каталог в домашней папке
/home/$USER/apps//current/
Вы не сможете писать куда-либо ещё.
Опции метаданных package.yaml.
- name: имя пакета (разрешено [a-z0-9][a-z0-9+.-]).
- version: версия (разрешено [a-zA-Z0-9.+~-]).
- vendor: имя, емайл или URL разработчика.
- icon: путь к иконке SVG, которая будет отображена в Ubuntu Store.
- explicit-license-agreement: Если Y, то пользователь должен принять лицензию из meta/license.txt ДО установки пакета.
- license-version: строка, которая если меняется и explicit-license-agreement = Y, то вызывается запрос на принятие лицензии снова.
- type: тип пакета snappy:
- app — подразумевается по дефолту если type не указан.
- oem — специальный snap от OEM, который обслуживает их оборудование.
- framework — специальный snap, который расширяет возможности системы.
services: — name: service-name description: «line of text» start: «relative/path/to/binary —with —cmdline —parms» stop: «path/to/command —with —parms» stop-timeout: 45 — name: service-name-2 description: «another line of text» start: «relative/path/to/binary-2 —with —cmdline-2 —parms»
- apparmor: path/to/security.override
- seccomp: path/to/filter.override
- apparmor: path/to/profile
- seccomp: path/to/filter
- internal. Порт для внутренней коммуникации.
-
TagName в свободной форме
- port: номер-порта/протокол, типа 80/tcp
- negotiable: опционально. Если указано Y, то приложение может использовать другой порт, если нужный занят.
-
TagName в свободной форме
- port: номер-порта/протокол, типа 80/tcp
- negotiable: опционально. Если указано Y, то приложение может использовать другой порт, если нужный занят.
ports: internal: localcomm1: port: 3306/tcp,3307/tcp,3308/udp negotiable: yes external: ui: port: 80/tcp negotiable: no
- name: требуемое имя бинарника ([a-zA-Z0-9+.-])
- exec: программа, которая будет вызвана.
readme.md
Файл meta/readme.md содержит описание пакета в формате README. Инструментарий snappy автоматически извлекает заголовок как краткую аннотацию пакета и первый параграф как описание в Ubuntu Store.
Что у нас в сухом раскладе? Автор программы компилирует своё детище — статически или с библиотеками. В папке проекта создаёт подпапку meta и там 2 файла: package.yaml и readme.md. Если работа программы не требует сверх исключений из вопросов безопасности, то одобрение в Ubuntu Store будет автоматическим и моментально софт станет доступным конечным пользователям.
Если программа заявила себе определённый шаблон безопасности, а вздумает работать злонамеренно, то AppArmor просто не даст сделать что-либо. Пользователь может откатывать изменения, если они привели к проблемам. Откатится как софт, так и настройки.
Пока мне не ясен один момент. Если разные версии программы есть в системе, то можно их вызывать для работы по номеру версии? В целом мне нравится мир, который рисует Snappy. А вам?
Дата последней правки: 2015-07-11 15:42:14
Источник: vasilisc.com
Обзор мессенджера Snaappy
Привыкли к мессенджерам, которыми пользуетесь? Хотите чего-нибудь новенького и необычного? Тогда рады представить вам приложение под названием “Snaappy”. Что это за программа и чем она интересна? Узнайте об этом, прочитав данную статью.
Основные сведения
Snaappy — это не только мессенджер, но и AR социальная сеть. Использованная аббревиатура с английскими “A” и “R” образована от первых букв словосочетания “Augmented Reality”. На русский язык оно переводится как “дополненная реальность”, что подразумевает возможность отображать 3-D контент поверх настоящего изображения. Это делает сервис Снааппи уникальным и одним из самых эмоциональных приложений для общения.
Как и другие мессенджеры, Снааппи позволяет своим пользователям переписываться при помощи текстовых сообщений и общаться через голосовые и видеозвонки. Возможен обмен мультимедийными файлами. Snaappy можно установить на мобильные устройства с ОС Андроид и iOS. Компьютерная и браузерная версии не предусмотрены.
ВАЖНО! Реклама в приложении отсутствует.
Особенности приложения
Примечательными особенностями мессенджера Snaappy являются удобство в использовании и богатая эмоциональная составляющая. Главный действующий персонаж – синий медвежонок Снааппи. Он символ программы и именно его изображение чаще всего фигурирует на сервисе.
Среди особенностей приложения можно выделить следующие:
- создание видеороликов с эффектом дополненной реальности;
- просмотр клипов, созданных сообществом Снааппи;
- отправка 3-D сообщений;
- вставка 3-D персонажей в фотографии;
- большой набор веселых стикеров;
- исследование своего города с помощью AR-контента;
- “чтение мыслей” собеседника во время текстового чата;
- создание галереи контента в личном профиле.
С помощью Snaappy пользователи могут создавать видео, добавляя в них анимационные эффекты дополненной реальности. Встроенный видеоредактор позволяет заснять клип и вставить в него движущееся изображение медвежонка Снааппи. В нем он может выделывать трюки со скейтом, набивать футбольный мяч, танцевать и многое другое.
При записи ролика с помощью вкладки “Видеоэффекты” можно:
- заснять видео с добавлением мультяшной вставки;
- вставлять движущиеся 3-D стикеры;
- накладывать аудиозапись;
- рисовать;
- вставлять текст.
В разделе “Популярное видео” собраны ролики, которыми поделились пользователи мессенджера с разных уголков земли. Здесь можно найти интересные идеи для своих клипов, а также увидеть, какие еще AR-персонажи используют при съемках.
В мессенджере есть возможность отправлять 3-D сообщения дополненной реальности, в которые добавляются заголовок, картинки, видео и сменяющиеся трюки от Снааппи. Их можно отправить друзьям, запостить в свой личный профиль или привязать к местности в своем городе. Полученное AR-сообщение просматривается на фоне того, что снимает камера адресата.
ВАЖНО! На некоторых устройствах доступны не все возможности AR-эффектов.
Придать фотографиям уникальности и веселых эмоций поможет встроенный редактор. С его помощью можно добавлять стикеры, аудиовставки, текст и рисунки.
Переписка в одиночных и групповых чатах становится веселее за счет красочных движущихся стикеров. В стандартный набор входит 40 различных эмоций от медвежонка Снааппи. Арсенал динамичных изображений можно пополнить в магазине стикеров. Здесь можно познакомиться с новыми персонажами, такими как кот Скот, медвежонок Рэдди, Снаапаа, Лола, Пеппи и Снаппайрон. Дополнительные наборы загружаются бесплатно. Предварительный просмотр возможен в галерее на сайте мессенджера по адресу https://snaappy.com/en/gallery .