4步上手Meson:让PostgreSQL 16 构建更现代化!
导 读
从PostgreSQL 16开始,除了传统的./configure和Makefile,我们将可以选择使用现代构建系统Meson来构建PostgreSQL。
几周前,当我在为PostgreSQL开发社区补丁时,我开始练习meson,我被告知除了通常的Makefile之外,还需要更新meson.build文件。这也意味着,如果您正在做开发社区功能的工作时,你需要考虑meson。今天,我将分享如何在Ubuntu 18.04上使用meson构建PostgreSQL的方法,希望对您有所帮助。
01 Meson vs Makefile
Makefile
-
广泛使用、成熟和稳定。
-
Makefile语法是复杂的,编辑和维护起来很繁琐。对于非常大或复杂的项目,它可能变得难以管理。
Meson
-
语法简洁,易于理解和编写。
-
提供快速高效的编译过程,同时保持易用性和灵活性。
🔗Meson:https://mesonbuild.com/
02 安装
我们需要安装Meson和Ninja才能开始使用它。版本非常重要,使用过旧或过新的版本可能会导致在构建过程中出现错误。以下版本已经过确认可以正常工作(由我测试):
-
lmeson v0.57.2 (minimum meson version recommended by PostgreSQL), github download link-1
-
lninja v1.10.1, github downlad link-2
link-1:
https://github.com/mesonbuild/meson/releases/download/0.57.2/meson-0.57.2.tar.gz
link-2:
https://www.highgo.ca/2023/07/14/building-postgresql-in-a-modern-way-with-meson/
下载好它们后,您需要将它们添加到PATH环境变量中,并将ninja放在/usr/bin/ninja中,以便构建脚本可以找到它们。
我也尝试过将Meson v0.57.2与更新版本的Ninja一起使用,但在构建过程中遇到了错误,因此我不能保证不同版本组合的构建是否会正常工作。::>_<::
03 构建
Meson构建在PostgreSQL 16中可用,这个版本尚未正式发布,因此我们需要在主PG16开发分支上使用此功能。您可以在这里克隆官方的PostgreSQL源代码。
如果您之前已经运行过./configure和构建了PostgreSQL,则需要通过以下方式来撤销之前的操作。
$ make maintainer-clean
如果您想从头开始,可以执行以下步骤:
$ git clone https://github.com/postgres/postgres.git
现在,我们准备进行Meson构建。我们首先设置一个文件夹(在postgres文件夹内部),用于存储所有构建输出、日志、测试输出、配置等。
我们还可以在设置阶段传递特殊的构建参数。这些生成参数类似于传递给经典./configure脚本的参数。例如:
$ cd postgres $ meson setup build --prefix=$PWD/highgo -Dcassert=true '-DPG_TEST_EXTRA=kerberos ldap' -Dbuildtype=debug
--prefix命令配置安装前缀,就像./configure一样。其余的可选构建参数通过-D参数名(无空格)传递给meson。
我们可以使用以下命令查看可能的参数列表及其描述:
$ meson configure WARNING: The source directory instead of the build directory was specified. WARNING: Only the default values for the project are printed, and all command line parameters are ignored. Core properties: Source dir /home/caryh/postgres Main project options: Core options Default Value Possible Values Description ------------ ------------- --------------- ----------- ... buildtype debugoptimized [plain, debug, debugoptimized, release, minsize, custom] Build type to use ... cassert false [true, false] Enable assertion checks (for debugging) ... PG_TEST_EXTRA Enable selected extra tests ... ... and many more
由于我们在构建文件夹外运行meson configure,因此它会向您发出警告,指出它仅打印构建的默认值和可能值。要查看当前值,我们需要在创建的文件夹中重新运行相同的命令。
$ cd build $ meson configure Core properties: Source dir /home/caryh/postgres Build dir /home/caryh/postgres/build Main project options: Core options Current Value Possible Values Description ------------ ------------- --------------- ----------- ... buildtype debug [plain, debug, debugoptimized, release, minsize, custom] Build type to use ... cassert true [true, false] Enable assertion checks (for debugging) ... PG_TEST_EXTRA kerberos ldap Enable selected extra tests .... and many more
如果您需要更改任何构建参数,你也可以在构建文件夹内部进行更改,而不是像以前那样再次运行。
$ meson configure -Dcassert=false
当我们确定了构建参数后,我们可以通过在构建文件夹中运行以下命令来构建和安装:
$ ninja $ sudo ninja install
就是这样!😁
04 运行测试套件
我们知道PostgreSQL源代码仓库中包含了许多测试用例,以确保软件正常工作。通常,我们会分别运行make check或make check-world来执行核心进程、扩展和前端工具的测试套件。在Meson中,所有这些都可以一次性运行。只需在构建文件夹内运行以下命令:
$ meson test 1/257 postgresql:setup / tmp_install OK 8.48s 2/257 postgresql:setup / install_test_files OK 0.06s 3/257 postgresql:pg_upgrade / pg_upgrade/001_basic OK 0.18s 8 subtests passed 4/257 postgresql:recovery / recovery/002_archiving OK 3.61s 8 subtests passed 5/257 postgresql:recovery / recovery/003_recovery_targets OK 6.73s 9 subtests passed 6/257 postgresql:recovery / recovery/004_timeline_switch OK 6.99s 3 subtests passed 7/257 postgresql:recovery / recovery/005_replay_delay OK 7.58s 3 subtests passed 8/257 postgresql:recovery / recovery/006_logical_decoding OK 4.78s 20 subtests passed 9/257 postgresql:recovery / recovery/001_stream_rep OK 10.34s 59 subtests passed 10/257 postgresql:recovery / recovery/007_sync_rep OK 6.20s 11 subtests passed 11/257 postgresql:recovery / recovery/010_logical_decoding_timelines OK 4.59s 13 subtests passed 12/257 postgresql:recovery / recovery/013_crash_restart OK 3.55s 18 subtests passed 13/257 postgresql:recovery / recovery/014_unlogged_reinit OK 3.72s 23 subtests passed 14/257 postgresql:recovery / recovery/012_subtransactions OK 6.63s 12 subtests passed 15/257 postgresql:recovery / recovery/009_twophase OK 11.63s 24 subtests passed 16/257 postgresql:recovery / recovery/016_min_consistency OK 4.34s 1 subtests passed 17/257 postgresql:recovery / recovery/015_promotion_pages OK 4.74s 1 subtests passed 18/257 postgresql:recovery / recovery/008_fsm_truncation OK 14.55s 1 subtests passed 19/257 postgresql:recovery / recovery/017_shm OK 5.23s 4 subtests passed ... 36/257 postgresql:kerberos / kerberos/001_auth ERROR 0.21s (exit status 255 or signal 127 SIGinvalid) ... 236/257 postgresql:ldap_password_func / ldap_password_func/001_mutated_bindpasswd ERROR 0.19s (exit status 255 or signal 127 SIGinvalid) ... 249/257 postgresql:ldap / ldap/001_auth ERROR 0.17s (exit status 255 or signal 127 SIGinvalid) 250/257 postgresql:ldap / ldap/002_bindpasswd ERROR 0.18s (exit status 255 or signal 127 SIGinvalid) ... Ok: 251 Expected Fail: 0 Fail: 4 Unexpected Pass: 0 Skipped: 2 Timeout: 0
我有 4 个与 ldap 和 kerberos 相关的测试用例,因为我没有设置这些服务,所以失败是在预料之内的。我想更多地强调这些额外的测试用例,除非我们在 $PG_TEST_EXTRA 环境变量中指定它们,否则这些用例通常不会在传统设置中运行。在传统方式中,要运行额外的测试,如 ldap 和 kerberos,我们需要执行以下操作:
$ cd src/test/ldap $ make check PG_TEST_EXTRA=ldap or $ cd src/test/kerberos $ make check PG_TEST_EXTRA=kerberos
默认情况下不会运行这些测试,因为它们需要设置单独的服务或者运行不安全的服务。使用Meson,如果您需要运行这些额外的测试,除非你在构建选项中明确定义 -DPG_TEST_EXTRA 为构建选项之一,不然的话以下命令将不起作用。
$ export PG_TEST_EXTRA="ldap kerberos" $ meson test ===> will skip ldap and kerberos tests if you did not do '-DPG_TEST_EXTRA=kerberos ldap' during meson setup
05 结论
🏆总体而言,Meson提供了一种现代,直观和高效的方法来构建软件项目。虽然 Makefile 仍然是一个广泛使用且功能强大的构建系统,但Meson为现代的开发工作流程提供了更简洁和用户友好的体验。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【实践篇】推荐算法PaaS化探索与实践 | 京东云技术团队
作者:京东零售 崔宁 1. 背景说明 目前,推荐算法部支持了主站、企业业务、全渠道等20+业务线的900+推荐场景,通过梳理大促运营、各垂直业务线推荐场景的共性需求,对现有推荐算法能力进行沉淀和积累,并通过算法PaaS化打造通用化的推荐能力,提升各业务场景推荐赋能效率,高效赋能业务需求。 为什么是PaaS化:首先,我们认为PaaS化是一个比较好的解决办法和方案,因为它提供了一种解决超级公司复杂业务的可变化、可扩展、可复用能力的基础框架,在这样的框架下,可以极大的释放重复劳动力,实现业务的高效提升;其次,我们也看到一些行业中的其它玩家,他们也是在自己的业务中台基础上进行PaaS化,并通过PaaS化提供的能力不断的孵化自己的创新项目,去减少他们的人力投入,减少他们的投入成本,而且他们还推出了很多用于商用的PaaS化工具,为实现更大的社会价值去创造机会;因此,我们认为PaaS化应当是我们当前会选择的一个比较好的解决问题方法; 如何助力推荐业务能力提升:通过梳理推荐场景下的共性需求,在可变化、可扩展、可复用能力的基础框架内,我们对业务需求进行分类和能力抽象,提供阶梯化的应对策略;针对通用类需求...
- 下一篇
UPS设备在物流机房中的应用浅析 | 京东物流技术团队
1 UPS简介 UPS即不间断电源(Uninterruptible Power Supply),是一种含有储能装置的不间断电源。主要用于给部分对电源稳定性要求较高的设备,提供不间断的电源。 当市电输入正常时,UPS 将市电稳压后供应给负载使用,此时的UPS就是一台交流式电稳压器,同时它还向机内电池充电;当市电中断(事故停电)时, UPS 立即将电池的直流电能,通过逆变器切换转换的方法向负载继续供应220V交流电,使负载维持正常工作并保护负载软、硬件不受损坏。UPS 设备通常对电压过高或电压过低都能提供保护。 2 UPS工作原理 常用的UPS构成如下图所示,它的基本结构是一套将交流电变为直流电的整流器和充电器,以及把直流电再变为交流电的逆变器,电池在交流电正常供电时贮存能量且维持在一个正常的充电电压上,一旦市电供电中断时,蓄电池立即对逆变器供电以保证UPS电源交流输出电压,使计算机维持正常工作,保护软硬件不受损害。 当市电在UPS所允许的范围内正常供电时,电流通过旁路模式到达负载,为设备提供电力。 当市电故障或市电电压、频率超出正常范围时,机器将通过电池-逆变器为设备提供电力。 3 UP...
相关文章
文章评论
共有0条评论来说两句吧...