在mock中指定RPM构建顺序

问题描述 投票:0回答:1

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

症状

使用mock重建PostgreSQL 11.1 SRPM时,构建失败:

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)

在查看mockinstalled_pkgs.log时,安装了以下内容(我希望后者提供libpq标头的版本):

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

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

由于postgresql SRPM应该构建postgresql-devel RPM,我认为mock需要在postgresql-devel尝试编译rpmbuild之前在chroot中构建和安装psql/command.c RPM,以便后一个编译找到合适的库头(除非构建过程足够智能)识别目前正在建设的新图书馆。

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

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

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

系统信息

Linux 4.16.6-202.fc27.x86_64
postgresql mocking rpm postgresql-11 fedora-27
1个回答
1
投票

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

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

如何继续;总是根据你构建的Fedora结帐适当的分支,并适当调整spec文件(在这种情况下checkout f27并更新到PostgreSQL 11.1)。

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

© www.soinside.com 2019 - 2024. All rights reserved.