Норвежец 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 будет ругаться.
В качестве альтернативы можно установить экспериментальный пакет от команды 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 остаются некоторые ограничения:
sudo snap connect mysql:process-control core:process-control
. В настоящее время невозможно реализовать автоматический старт и использование сервера после его установки. Этот ньюанс берём на себя и решим его.Snap вполне может стать отличным средством дистрибьюции MySQL в будущем!
Хотелось бы от себя лично, как опытного снапкрафтера , отметить следующие моменты:
Анализ скриптов, которые дали разработчики 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