0

TLDR:确保使系统操作系统保持最新,以帮助确保与当前规范文件的一致性。

症状

使用 重建 PostgreSQL 11.1 SRPMmock时,构建失败并显示:

BUILDSTDERR: /builddir/build/BUILD/postgresql-11.1/src/bin/psql/command.c:1814 undefined reference to `PQencryptPasswordConn`

注意PQencryptPasswordConn是一个libpq.so函数(postgresql-devel-10.3-5.fc27.x86_64在我的系统上提供......在模拟 chroot 环境之外)。除非我弄错了,否则 Postgresql SRPM 会postgresql-devel与其他人一起构建 RPM。

重现步骤

在尝试应用 SRPM 中尚不存在的任何补丁之前,我运行了以下命令来重建SRPM:

# Obtain SRPM source
git clone https://src.fedoraproject.org/rpms/postgresql.git
cd postgresql

# Download local copies of SRPM sources
wget $(spectool -S *.spec | awk '/^Source.*:\/\//{IFS=" "; print $2}')
# ...check SHAs of downloaded sources...

# Run SRPM-specific prep scripts
./generate-pdf.sh
./generate-sources.sh

# Generate the SRPM
mock --root=fedora-27-x86_64 --resultdir="./SRPMS" --buildsrpm --spec postgresql.spec --sources .

# >>> Everything seems to work fine up to this point <<<

# Build the RPM inside mock chroot
mock --root=fedora-27-x86_64 --rebuild ./SRPMS/postgresql-11.1-4.fc27.src.rpm

# !!! Fail here (with symptom above) !!!

问题

到目前为止,我无法mock将适当的libpq库头文件加载到 chroot 环境中,以确保rpmbuild针对libpq包含PQencryptPasswordConn头文件的构建(它似乎存在于构建环境之外的我的系统上):

grep -lr "PQencryptPasswordConn" /usr/include
# /usr/include/libpq-fe.h

grep -lr "PQencryptPasswordConn" /var/lib/mock/fedora-27-x86_64/root/usr/include
# (Nothing returned)

在查看mock'sinstalled_pkgs.log时,安装了以下内容(我希望后者会提供一个libpq标题版本):

postgresql-libs-9.6.10-3.fc27.x86_64
postgresql-devel-9.6.10-3.fc27.x86_64

但是,我找不到将postgresql-*软件包安装到包含更新的库头文件的 chroot 环境中的方法。

由于postgresqlSRPM 应该构建postgresql-develRPM,我认为在尝试编译之前需要在 chrootmock中构建和安装RPM,以便后面的编译找到适当的库头(除非构建过程足够智能,可以识别当前下的新库建造)。postgresql-develrpmbuildpsql/command.c

我怎样才能最好地做到这一点(宁愿避免多次mock调用从 SRPM 构建的每个 RPM 包,除非这是唯一的方法)?

请注意,我系统上的构建过程会产生多个并行编译的过程。

我也试过使用mockchain —recurse没有成功。

系统信息

Linux 4.16.6-202.fc27.x86_64
4

1 回答 1

1

第一个提示,您使用的是最新postgresql.spec版本,但您尝试根据 Fedora 发行版的相当旧的(实际上现在不受支持)版本 27 构建它。我鼓励您迁移到较新版本的 Fedora,或者至少签f27出同一 RPM git 存储库中的分支。

第二个提示,我们改变了 Fedora 30+ 中 PostgreSQL 打包的布局。根据公告,我们已将库 (libpq.so) 剪切成单独的包。

如何继续;始终根据您构建的 Fedora 来检查适当的分支,并适当地调整规范文件(f27在这种情况下检查并更新到 PostgreSQL 11.1)。

JFTR(可能有帮助),已经有一个针对 Fedora 28+ 的 PostgreSQL 11测试模块化构建,并且构建脚本在单独的分支 stream-postgresql-11中维护。运气好的话,您也可以针对旧的 Fedora 27 构建该分支。请注意,这个版本的postgresql.spec文件有点复杂(之所以如此,是因为我们针对不同版本的 Fedora 构建它)。

于 2019-02-11T12:50:31.493 回答