在模拟中指定RPM构建顺序

时间:2019-02-10 23:32:16

标签: postgresql mocking rpm postgresql-11 fedora-27

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

1 个答案:

答案 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构建的)。