Авторские статьи

MySQL в snap пакете.


Норвежец Yngve Svendsen работает в Oracle в должности Senior Director of MySQL Engineering Services. На сайте mysqlrelease.com он опубликовал статью про знакомство разработчиков с технологией snap для предоставления в ней MySQL Server.

MySQL доступна для огромного количества платформ и в различных вариантах "упаковки". Часть задачи разработчиков состоит в том, что, идя в ногу со временем, предоставлять пользователям свой продукт в удобном для них виде. В рамках этой работы команда MySQL модернизировала процесс упаковки и распространения пакетов в мире Linux, улучшила ситуацию на платформе MS Windows и ввела поддержку нового способа распространения ПО таких как Docker.

Команда MySQL делает ещё один шаг и публикует свою первую версию snap пакета MySQL Server. В самой сути, приложение в snap подобно zip файлу, в котором кроме программы лежат и все его зависимости. Несложное описание требований безопасности + нужные программе интерфейсы для общения с остальной частью системы = готовый пакет, который можно мгновенно развернуть и запустить практически в любой системе Linux. Приложение будет работать в своей собственной песочнице, будучи изолированным от других программ и от системы. Концептуально и технически похоже на контейнеризацию типа Docker.

Строим сами

Снап пакеты обычно размещают в онлайн хранилищах, называемые store. Чуть ниже узнаете как быстро и просто поставить из Ubuntu Store, но для знакомства есть способ создать свой snap пакет из нашего кода на GitHub и готового snapcraft.yaml. Прежде чем начать, обратите внимание, что это раннее знакомство команды MySQL с технологией snap. Всё слабо протестировано и обладает массой проблем и ограничений, что сделает любое использование кроме тестирования малопригодным на практике.

Можно взять необходимое (5.7 или 8.0) - git clone -b 5.7 https://github.com/mysql/mysql-snap

Для начала построения snap пакета необходимо зайти в папку, появившуюся от вышестоящей команды:
cd mysql-snap
snapcraft

Вы должны получить mysql_<version>_amd64.snap, который можно поставить sudo snap install --dangerous mysql_<version>_amd64.snap

Здесь --dangerous из-за того что мы создали пакет, который не подписан, и утилита snap будет ругаться.

Установка из Ubuntu Store

В качестве альтернативы можно установить экспериментальный пакет от команды MySQL.
snap install --channel=<keyword> mysql
Используйте вместо keyword слово beta для MySQL 5.7 и edge для 8.0.1 pre-GA. В будущем может изменится версия, но пока так.

Запуск

Перед запуском необходимо сделать однократно соединение snap пакета с интерфейсом process-control, который не принадлежит к автосоединяемым интерфейсам (у него Auto-Connect: no). То есть из snapcraft.yaml нельзя заранее попросить соединить с ним, как это можно сделать с другими интерфейсами.
sudo snap connect mysql:process-control core:process-control
Запуск mysql.startup

Имейте в виду что на экране мелькнёт пароль админа. Так же знайте, что от системного root вы не сможете запустить MySQL в snap. В традиционных системах Linux запуск от root с дальнейшим понижением привилегий через переключение на выделенную для этих целей учётную запись - обычная практика. В технологии snap системные вызовы переключения пользователя и/или изменение владельца/прав доступа пресекаются подсистемой seccomp и не разрешены. Можно поставить пакет с ключом --devmode, но это отключает полностью всю технологию безопасности в лице AppArmor + seccomp и сводит на нет ключевые преимущества использования snap. В данный момент команда MySQL общается с парнями из Canonical на предмет как грамотно разрешить данный технический вопрос.

Так или иначе у вас будет запущенный экземпляр MySQL, к которому можно подключиться через mysql.client -uroot -p

Что впереди?

Для первой итерации MySQL в snap остаются некоторые ограничения:

  • MySQL требует process-control для своего старта. Для этого мы вручную командуем sudo snap connect mysql:process-control core:process-control. В настоящее время невозможно реализовать автоматический старт и использование сервера после его установки. Этот ньюанс берём на себя и решим его.
  • Нам нужно от snap поддержки некоторых операций, требующих прав root'а. Мы сможем сделать наш snap пакет с корректной поддержкой при запуске софта от root.
  • We currently have no upgrade support in these snaps.
  • Удаление snap удаляет базу данных. Это сродни тому, как запустить MySQL в контейнере Докер и базу данных разместить в том же контейнере.
  • Мы хотели бы реализовать параллельную установку множества версий MySQL через snap. Как красиво это реализовать покажет время.

Snap вполне может стать отличным средством дистрибьюции MySQL в будущем!


На этом слова Ингве Свендсена, которые безбожно были перевраны мной с благородной целью , закончились.

Хотелось бы от себя лично, как опытного снапкрафтера , отметить следующие моменты:

  • Очень рад, что MySQL будет доступен в snap пакетах. Это даст пользователям возможность устанавливать параллельно несколько версий. Вебмастера и разработчики ПО, думаю, это оценят по достоинству.
  • Не стал переводить предложение We currently have no upgrade support in these snaps. Snap можно сравнить с zip (так как используется squashfs), только содержимое никогда не извлекается и используется в режиме только-на-чтение под присмотром системы мандатного доступа AppArmor. Snap никогда не сможет обновить сам себя. Пользователь обновляет программу snap новой версией полностью.
  • Так как программе нужно куда-то записывать часть данных при своей работе, то для этих целей есть пути, доступные через переменные:
    • для обычных программ с поддержкой версионности SNAP_USER_DATA (пример /home/vasilisc/snap/hello-world/27/) и без поддержки версионности SNAP_USER_COMMON (пример /home/vasilisc/snap/hello-world/common/).
    • для сервисов-демонов с поддержкой версионности SNAP_DATA (пример /var/snap/hello-world/27/) и без поддержки версионности SNAP_COMMON (пример /var/snap/hello-world/common/).

    Анализ скриптов, которые дали разработчики MySQL через GitHub, показал, что используется переменная SNAP_USER_COMMON, что позволяет безопасно в будущем обновлять сам snap пакет БЕЗ "потери" базы данных. Этот вопрос вначале моего пути волновал меня больше всего и этим вопросов пытался терроризировать разрабов Canonical в почтовой рассылке.

По аналогии со статьёй PostgreSQL в snap пакете в данный момент нельзя поставить параллельно несколько версий mysql, так как имя одно и происходит конфликт.
snap install --channel=beta mysql

mysql (beta) 5.7.17 from 'ltangvald' installed

snap list

Name          Version  Rev   Developer  Notes
mysql         5.7.17   1     ltangvald  -
..

snap install --channel=edge mysql

error: cannot install "mysql": snap "mysql" already installed

Итог!? Пока, временно, поставить параллельно несколько версий MySQL не получится, но уже ради тестирования можно пробовать ставить конкретную версию и обновлять её в будущем БЕЗ потери вашей тестовой базы данных. Круто что вопросом упаковки снап пакета занялись сами разработчики MySQL и теперь без лишнего звена в лице сопровождающего мы получим новые версии мускуля так быстро, как это возможно.

В мире deb пакетов версии софта "замораживаются" в рамках релиза. К примеру, вы используете Ubuntu 16.04 LTS и сейчас доступен mysql-server 5.7. Хотите новый MySQL? Нужно либо обновить систему до более актуальной версии и там в рамках её получить новую версию ИЛИ подключить сторонний репозиторий с новой версией MySQL. В мире snap - софт отделён от системы и от друг друга, что позволит получать новые версии mysql, оставаясь на той Ubuntu, которая вам нужна!

Дата последней правки: 2023-12-27 13:23:42

RSS vasilisc.com   


Разделы

Главная
Новости
Ворох бумаг
Видео Linux
Игры в Linux
Безопасность
Статьи об Astra Linux
Статьи о FreeBSD
Статьи об Ubuntu
Статьи о Snappy
Статьи об Ubuntu Phone
Статьи о Kubuntu
Статьи о Xubuntu
Статьи о Lubuntu
Статьи об Open Source
Карта сайта