Пакет Flatpak libmysqlclient

Я пытаюсь собрать программу Vala с помощью flatpak. Мне нужно подключиться к MySQL-серверу, и поэтому мне нужно связать libmysqlclient с моим flatpak.

Вот почему я добавил mysql_config в мой файл meson.build.

project('zeiterfassunggtk', ['c', 'vala'],        version: '0.1.0',
  meson_version: '>= 0.40.0',
)

i18n = import('i18n')

mysql_config = find_program('mysql_config')
mysql_vapi = meson.get_compiler('vala').find_library('mysql')
mysql_dep = declare_dependency(c_args: run_command([mysql_config, '--cflags']).stdout().split(),
                               link_args: run_command([mysql_config, '--libs']).stdout().split(),
dependencies: [mysql_vapi])

subdir('data')
subdir('src')
subdir('po')

meson.add_install_script('build-aux/meson/postinstall.py')

Проблема в том, что mysql_config недоступен во время выполнения flatpak. Поэтому мне нужно связать его с моим flatpak.

Документация Flatpak, однако, была не очень полезна для меня.

Flatpak Документация

Модули

Список модулей определяет каждый из модулей, которые должны быть собраны как часть процесса сборки. Одним из этих модулей является само приложение, а другие модули - это зависимости и библиотеки, которые входят в состав Flatpak. В то время как простые приложения могут указывать только один или два модуля и, следовательно, иметь короткие секции модулей, некоторые приложения могут связывать многочисленные модули и, следовательно, иметь длинные секции модулей.

Раздел модулей словаря GNOME короткий, так как он содержит только само приложение и выглядит так:

"modules": [   {
    "name": "gnome-dictionary",
    "sources": [
      {
        "type": "archive",
        "url": "https://download.gnome.org/sources/gnome-dictionary/3.26/gnome-dictionary-3.26.0.tar.xz",
        "sha256": "387ff8fbb8091448453fd26dcf0b10053601c662e59581097bc0b54ced52e9ef"
      }
    ]   } ]

Как видно, каждый из перечисленных модулей имеет имя (которое может быть свободно назначено) и список источников. Каждый источник имеет тип, и доступные типы включают в себя:

    archive - .tar or .zip archive files
    git - Git repositories
    bzr - Bazaar repositories
    file - local file (these are copied into the source directory)
    dir - local directory (these are copied into the source directory)
    script - an array of shell commands (these are put in a shellscript file)
    shell - an array of shell commands that are run during source extraction
    patch - a patch (are applied to the source directory)
    extra-data - data that can be downloaded at install time; this can include archive or package files

Для каждого типа источника доступны разные свойства, которые перечислены в Справочнике по командам Flatpak Builder.

Может кто-нибудь сказать мне, как добавить libmysqlclient на мой flatpak и как использовать mysql_config установить правильные флаги компилятора для моего flatpak.

Это мой манифест (по умолчанию для сборщика гномов):

{
    "app-id" : "org.gnome.Zeiterfassunggtk",
    "runtime" : "org.gnome.Platform",
    "runtime-version" : "3.28",
    "sdk" : "org.gnome.Sdk",
    "command" : "zeiterfassunggtk",
    "finish-args" : [
        "--share=network",
        "--share=ipc",
        "--socket=x11",
        "--socket=wayland",
        "--filesystem=xdg-run/dconf",
        "--filesystem=~/.config/dconf:ro",
        "--talk-name=ca.desrt.dconf",
        "--env=DCONF_USER_CONFIG_DIR=.config/dconf"
    ],
    "build-options" : {
        "cflags" : "-O2 -g",
        "cxxflags" : "-O2 -g",
        "env" : {
            "V" : "1"
        }
    },
    "cleanup" : [
        "/include",
        "/lib/pkgconfig",
        "/man",
        "/share/doc",
        "/share/gtk-doc",
        "/share/man",
        "/share/pkgconfig",
        "/share/vala",
        "*.la",
        "*.a"
    ],
    "modules" : [
        {
            "name" : "zeiterfassunggtk",
            "buildsystem" : "meson",
            "config-opts" : [
                "--libdir=lib"
            ],
            "builddir" : true,
            "sources" : [
                {
                    "type" : "git",
                    "url" : "file:///home/g.zehetner/Projekte/ZeiterfassungGtk"
                }
            ]
        }
    ]
}

1 ответ

Flatpak стремится распространять приложения в Linux с использованием технологий контейнеризации. Это позволяет Flatpak быть независимым от текущих дистрибутивов, таких как Ubuntu и Fedora. Похоже, однако, что человеку, создающему Flatpak, нужно развить некоторые навыки дистрибутивного упаковщика. Зависимости для Flatpak находятся в modules раздел манифеста, и они будут построены и включены в Flatpak. То, что следует, не проверено, поэтому некоторые детали могут отсутствовать, но оно имеет целью дать обзор идей, чтобы помочь. Есть несколько вариантов:

libmariadb

MariaDB - это форк MySQL. Создано сообществом после опасений по поводу приобретения MySQL корпорацией Oracle. Я перечислил это первым, потому что это кажется самым простым вариантом, по крайней мере, в долгосрочной перспективе.

MariaDB имеет релизы mariadb-connector-c на GitHub. По какой-то причине GitHub не показывает контрольные суммы для этих выпусков. Таким образом , раздел загрузки фонда MariaDB является лучшим вариантом здесь. mariadb-connector-c может подключаться как к MariaDB, так и к MySQL.

Из просмотра исходного кода система сборки для mariadb-connector-c такое CMake. В файле CMakeLists.txt есть варианты, такие как WITH_SSL что вам может понадобиться, но приведенный ниже фрагмент кода игнорирует использование config-opts, Эта проблема Flatpak GitHub может иметь соответствующий пример того, как использовать config-opts для сборки CMake.

Итак, у нас есть исходная версия, контрольная сумма и мы знаем систему сборки. Добавив что-то подобное в modules раздел вашего манифеста вы должны иметь возможность включить сборку mariadb-connector-c в вашем Флэтпаке:

{
  "name": "mariadb-connector-c",
  "buildsystem": "cmake",
  "sources": [
    {
      "type": "archive",
      "url": "https://downloads.mariadb.org/f/connector-c-3.0.6/mariadb-connector-c-3.0.6-src.tar.gz",
      "sha256": "2b2d18dc969dc385f7f740e4db112300e11bc626c9ba9aa05c284704095b9e48"
    }
  ]
}

Это также пропускает cleanup ключ.

Основная проблема - заставить это работать с вашим приложением Vala. pkg-config файл называется libmariadb.pc, Таким образом, ваш VAPI нужно будет переименовать в libmariadb.vapi, Вы можете скопировать mysql.vapi от /usr/share/ в локальный каталог приложения и переименовать libmariadb.vapi, Вам нужно будет настроить ваш meson.build включить его в качестве каталога поиска VAPI, и вам больше не нужно искать mysql_config, pkg-config будет делать работу mysql_config вместо.

Похоже, что заголовочные файлы MySQL C остаются частью maria-connector-c, Скрестив пальцы, это будет просто работать. В заголовках C есть дополнительные символы, специфичные для MariaDB. Если вы хотите изменить VAPI, прочитайте " Написание VAPI вручную". Пожалуйста, рассмотрите возможность отправки ваших улучшений в основной репозиторий Vala.

mysqlclient

Похоже, что MySQL требует загрузки сервера только для сборки клиента. Я начал с этой страницы под названием Download Connector / C (libmysqlclient). Это советует Linux "Пакет клиентских утилит доступен на странице загрузки MySQL Community Server". На странице " Загрузка MySQL Community Server" не упоминается "Пакет клиентских утилит", а разрешена только загрузка пакета объемом более 300 МБ + с сервера и C-клиента. Вот почему я предложил libmariadb вариант может быть лучшим в долгосрочной перспективе. Существует также страница MySQL Connector / C (Archived Versions), где заархивированная версия имеет загрузку 8,7 млн. Использование старой версии может быть лучшим вариантом для начала.

Манифест Flatpak будет аналогичен libmariadb, Исходный код MySQL доступен на GitHub, а также использует CMake.

MySQL 8 CMakeLists.txt файл показывает pkg-config файл mysqlclient.pc, Так что Vala VAPI действительно должна быть mysqlclient.vapi, Вклады в хранилище Vala можно исправить. Используя pkg-config имя, которое вам больше не нужно искать mysql_config в meson.build,

Я также выполнил поиск в хранилище Flathub, чтобы выяснить, не используются ли какие-либо другие проекты. mysqlclient или же libmariadb в их манифестах. Ничего не было найдено.

Вариант картона и ленты

Если вы хотите грубое, прототип, решение, то Flatpak предоставляет simple тип сборки. Это позволяет выполнять команды, как cp, Поэтому более быстрым вариантом может быть копирование локальных файлов клиента MySQL в Flatpak. Это, по крайней мере, позволит вам продвинуться в разработке и вернуться к реализации надежного решения для финальной версии. Посмотрите эту проблему GitHub и манифест LibreOffice Flathub для примеров simple строит. Также структура файла Flatpak задокументирована в Требованиях и Соглашениях и в типичной файловой системе внутри песочницы Flatpak.

Другие вопросы по тегам