Пакет Flatpak libmysqlclient - PullRequest
       96

Пакет Flatpak libmysqlclient

0 голосов
/ 27 сентября 2018

Я пытаюсь собрать программу 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.

Это мой манифест (по умолчанию для gnome-builder):

{
    "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 Ответ

0 голосов
/ 30 сентября 2018

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 в свой Flatpak:

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

Это также пропускает клавишу 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».Страница Download MySQL Community Server не упоминает «Пакет клиентских утилит» и позволяет только загрузить пакет объемом 300 МБ + с сервера и клиента C.Вот почему я предположил, что вариант libmariadb может быть лучшим в долгосрочной перспективе.Также есть страница MySQL Connector / C (Архивные версии) , где заархивированная версия имеет загрузку 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 .

...