TLDR:确保保持系统操作系统的最新状态,以帮助确保与当前规格文件的一致性。
症状
使用mock
重建PostgreSQL 11.1 SRPM时,构建失败并显示:
BUILDSTDERR: /builddir/build/BUILD/postgresql-11.1/src/bin/psql/command.c:1814 undefined reference to `PQencryptPasswordConn`
NB :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
是针对包含{ {1}}标头(似乎在构建环境之外的系统上存在):
libpq
在查看PQencryptPasswordConn
的{{1}}时,安装了以下内容(我希望后者会提供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
但是,我找不到将installed_pkgs.log
软件包安装到包含更新的库头的chroot环境中的方法。
询问
由于应该使用libpq
SRPM来构建postgresql-libs-9.6.10-3.fc27.x86_64
postgresql-devel-9.6.10-3.fc27.x86_64
RPM,所以我认为postgresql-*
需要在{{1}之前的chroot中构建并安装postgresql
RPM。 }尝试编译postgresql-devel
,以便后一个编译找到合适的库头(除非构建过程足够智能以识别当前正在构建的新库)。
我如何才能最好地做到这一点(除非是唯一的方法,否则宁愿避免对从SRPM构建的每个RPM包进行多次mock
调用)?
请注意,我系统上的构建过程会产生多个并行编译的过程。
我也曾尝试使用postgresql-devel
而不成功。
系统信息
rpmbuild
答案 0 :(得分:1)
第一个提示是,您使用的是最新的postgresql.spec
版本,但是您尝试针对Fedora发行版的相当旧的(实际上是目前不支持的)27版本进行构建。我建议您迁移到Fedora的较新版本,或者至少在同一RPM git存储库中检出分支f27
。
第二个提示,我们更改了Fedora 30+中PostgreSQL封装的布局。根据{{3}},我们已将库(libpq.so)切成单独的包。
如何继续;始终根据要构建的Fedora签出适当的分支,并适当地调整spec文件(签出f27
并在这种情况下更新到PostgreSQL 11.1)。
JFTR(可能会提供帮助),已经有针对Fedora 28+的PostgreSQL 11的测试模块化构建,并且构建脚本在单独的announcement stream-postgresql-11
中维护。幸运的是,您也可以针对旧的Fedora 27建立该分支。请注意,此postgresql.spec
文件版本有点复杂(这一定是因为我们是根据不同版本的Fedora构建的)。