Для работы с операционной системой необходимо иметь набор различных приложений и утилит, как пользовательского, так и административного сегмента. Существует множество вариаций установки необходимого ПО: инструкции с компиляторами/интерпретаторами, бинарные файлы, скрипты оболочки и многие другие.
Сейчас установка представляет собой достаточно простой и понятный процесс для пользователя, где инсталляция совершается одной командой. Но это было бы не возможно без специально разработанного механизма сжатых архивов, которые называются deb-пакеты, rpm-пакеты.
Что такое deb-пакет и зачем он нужен?
Работа программного обеспечения возможна только благодаря бинарным файлам и инструкциям обрабатываемым компиляторами/интерпретаторами. Первое решение содержит сразу низкоуровневый машинный код для работы и передает через ядро процессору на исполнение. Второе позволяет написать на языке понятном человеку инструкцию, которую затем конвертируют в машинный код и так же передадут в обработку. Однако существует множество зависимостей, конфигурационных файлов, библиотек, которые необходимо так же распаковать и перенести в соответствующие директории ОС.
Пользователь не всегда знает, как корректно развернуть ПО и провести его настройку. Для этого как раз разработали различные решения, которые позволят автоматизировать разворачивание ПО и представят коллекцию необходимых библиотек. Одним из таких является deb-пакет!
Deb-пакет – представляет сжатый архив, содержащий коллекцию необходимых компонентов для работы ПО, а так же сценарии разворачивания для автоматизации их установки. Для работы с данным типом файлов уже существуют необходимые пакетные менеджеры apt и dpkg, как раз они и реализуют механизм распаковки.
Логически данную архитектуру можно разделить на несколько основных групп: файлы метаданных и сценариев, бинарники и библиотеки, конфигурационные файлы, документация. Рассмотрим каждую из директорий и опишем основные функции:
- /usr/(s)bin представляет собой директорию, в которой обычно хранятся все исполняемые файлы, так называемое ядро ПО;
- /usr/lib рядом расположенная директория, которая хранит необходимые библиотеки к работе самого приложения;
- /etc зачастую хранит необходимые конфигурационные файлы для настройки работы приложения/утилиты или системы;
- /usr/share/doc хранит документацию и руководства самого ПО;
- в корне папки лежат файлы control, preinst, postinst, prerm и postrm. Именно они определяют сценарии и необходимые действия, при работе ПО. Файл control содержит список зависимостей, контр-зависимостей, названия и прочих мета-данных.
На самом деле, можно запаковать абсолютно любые файлы, так как распаковка представляет собой лишь заранее определенный механизм. Для того, чтобы предварительно просмотреть структуру пакета перед установкой необходимо прописать команду:
Для просмотра списка зависимостей и других мета-данных можно использовать команду:
Пакеты распространяются открыто через репозитории, web и файловые-сервера, затем устанавливаются используя пакетные менеджеры apt и dpkg.
Все действия были выполнены в среде облачного сервера от Serverspace, для этого перейдем к созданию сервера, на любой из двух платформ vStack cloud или же VMware cloud. Нажмем на кнопку Создать сервер и выберем конфигурацию, подходящую под наши задачи, затем нажмем кнопку Создать:
Потребуется некоторое время для развертывания серверных мощностей. После чего вы можете подключиться любым из удобных способов. На основе предлагаемы VPS и VDS серверов, так же можно развернуть уже свою виртуальную инфраструктуру.
Почему Deb-пакеты не удобны и что такое Snapd?
На практике не всегда удобно использовать DEB-пакеты: список перечисленных зависимостей не всегда может быть на машине или репозитории, наличие конфликта существующих библиотек и приложений, возможность воздействия стороннего ПО на приложения и отсутствие кросс-платформенности.
Все эти недостатки могут сильно влиять на устройства, которые работают в информационных системах! Альтернативное решение представили разработчики дистрибутива Ubuntu, новый пакетный менеджер называется snap!
Snap – представляет собой пакетный менеджер, который использует технологии виртуализации, позволяя запустить каждую из утилит/приложений в отдельном контейнере. Для поставки ПО сразу использует архивы со всеми зависимостями и библиотеками, а так же подготовленная ОС с минимальными требованиями позволяет сделать это решение кросс-платформенным!
Схема работы позволяет понять какие основные модули используются и как они взаимодействуют. Служба snapd представляет собой фоновую программу, которая является абстрактным пультом управления самим пакетным менеджером. Сначала запускается она, затем ожидает команд пользователя на вход, к примеру рассмотрим:
В этот момент snapd получает команду поиска локально пакета nmap, если не находит скачивает из репозитория:
После того, как образ был получен машиной, snapd создает отдельный namespace с файловой системой, сетью, пространством процессов, а так же соответствующим маппингом пользователя. Данная среда полностью изолированной от основной ОС и взаимодействует с ядром хостовой системы. CGroups позволяет ограничить запущенную среду и выдать права на взаимодействие с основной ОС, с помощью команды ниже просмотрим основные возможности утилиты nmap:
Есть доступ к сети хоста, а так же файлам. Утилита была установлена на базе core-snap пакета, который представляет собой ОС с минимальными требованиями, за счет чего процесс стал кроссплатформенным. Основные недостатки менеджера пакетов для deb формата были устранены! На текущий момент это одна из интересных и безопасных альтернатив пакетного менеджера!
Представленные в данном руководстве пакеты используется в качестве способа передачи и установки ПО для устройств. Deb пакеты – это классическое решение, которое имеет ряд своих недостатков. Snap закрывает часть из них и представляет более богатый функционал, однако, не все ПО под данное решение реализовано.