我正在尝试使用Flatpak构建Vala程序。我需要连接到mysql服务器,这就是为什么我需要将libmysqlclient
与Flatpak捆绑在一起的原因。
这就是为什么我在我的meson.build文件中添加了mysql_config
。
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')
现在的问题是,flatpak运行时无法使用mysql_config。因此,我需要将其与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命令参考中列出。
有人可以告诉我如何向我的Flatpak中添加libmysqlclient
,以及如何使用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"
}
]
}
]
}
答案 0 :(得分:3)
Flatpak旨在通过使用容器化技术在Linux上分发应用程序。这使得Flatpak可以独立于Ubuntu和Fedora等当前发行版。但是,创建Flatpak的人似乎需要发展发行包装商的一些技能。 Flatpak的依赖关系放在清单的modules
节中,这些依赖关系将被构建并包含在Flatpak中。以下内容未经测试,因此可能遗漏了一些细节,但是其目的是概述可以提供帮助的想法。有几种选择:
libmariadb
MariaDB是MySQL的分支。由于担心甲骨文公司(Oracle Corporation)对MySQL的收购,社区对此进行了分叉。我之所以列出来是因为它似乎是最简单的选择,至少从长远来看。
MariaDB在GitHub上有releases of mariadb-connector-c
。出于某些原因,GitHub不显示这些版本的校验和。因此,MariaDB Foundation's download section是一个更好的选择。 mariadb-connector-c
可以同时连接MariaDB和MySQL。
通过查看源代码,mariadb-connector-c
的构建系统为CMake。 CMakeLists.txt file中可能有诸如WITH_SSL
之类的选项,但是下面的清单片段忽略了config-opts
的使用。此Flatpak GitHub issue可能有一个有关如何使用config-opts
进行CMake构建的示例。
因此,我们有一个源版本,一个校验和,并且我们知道构建系统。通过在清单的modules
部分中添加类似的内容,您应该可以在Flatpak中加入mariadb-connector-c
的构建:
{
"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,请阅读Writing a VAPI Manually。请考虑稍后将您的增强功能提交到Vala mainline repository。
mysqlclient
MySQL似乎要求下载服务器只是为了构建客户端。我从标题为Download Connector/C (libmysqlclient)的页面开始。这建议Linux“可从MySQL Community Server下载页面获得客户端实用程序包”。 Download MySQL Community Server page没有提到“客户端实用程序包”,仅允许下载服务器和C客户端的300MiB +包。这就是为什么我建议使用libmariadb
选项从长远来看可能更好。还有一个页面MySQL Connector/C (Archived Versions),其中存档版本是870万下载。首先,使用旧版本可能是一个更好的选择。
Flatpak清单类似于libmariadb
的清单。 MySQL source is available from GitHub,并且还使用CMake。
MySQL 8的CMakeLists.txt
文件确实显示pkg-config
文件为mysqlclient.pc
。因此,Vala VAPI应该确实是mysqlclient.vapi
。欢迎对Vala存储库进行贡献以解决此问题。通过使用pkg-config
名称,您将不再需要在mysql_config
中找到meson.build
。
我还搜索了Flathub repository,看是否还有其他项目在清单中使用了mysqlclient
或libmariadb
。一无所获。
如果您想要一个粗糙的原型解决方案,那么Flatpak确实提供了simple
构建类型。这样可以运行命令,例如cp
。因此,更快的选择是将本地MySQL客户端文件复制到Flatpak。这至少将使您能够继续进行开发,并返回到为最终版本实施可靠的解决方案。有关simple
构建的示例,请参见此GitHub issue和LibreOffice Flathub manifest。此外,Requirement and Conventions和typical filesystem inside a Flatpak sandbox中也记录了Flatpak文件结构。