Пакет Flatpak libmysqlclient

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

Вот почему я добавил 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. В то время как простые приложения могут указывать только один или два модуля и, следовательно, иметь короткие разделы модулей, некоторые приложения могут объединять множество модулей и, следовательно, иметь длинные разделы модулей.

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

"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 в мой плоский пакет и как использовать mysql_config для установки правильных флагов компилятора для моего плоского пакета.

Это мой манифест (по умолчанию для 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"
                }
            ]
        }
    ]
}

person Gerald Zehetner    schedule 27.09.2018    source источник
comment
Можно ли отключить эту хрень с плоскими пакетами? У меня уже есть /usr/include/mysql++/mysql++.h, но Eclipse пытается определить, что это каталог flatpak с волшебным именем каталога. Начиная с нового Eclipse/LinuxMint20 я могу собирать только с терминала.   -  person Bart Mensfort    schedule 13.09.2020


Ответы (1)


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

libmariadb

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

У MariaDB есть выпуски mariadb-connector-c на GitHub. По какой-то причине GitHub не показывает контрольные суммы для этих выпусков. Поэтому раздел загрузки MariaDB Foundation является лучшим вариантом. 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». На странице загрузки 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.

person AlThomas    schedule 30.09.2018
comment
Спасибо за объяснение. Я попробую это. - person Gerald Zehetner; 02.10.2018